{"_id":"@aetheroffice/cli","name":"@aetheroffice/cli","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@aetheroffice/cli","description":"AetherOffice is a local-first AI software company workspace with a secure terminal setup flow.","keywords":["aetheroffice","ai","developer-tools","local-first","cli"],"homepage":"https://github.com/poojakpdoshi-cmd/aether-office#readme","repository":{"type":"git","url":"git+https://github.com/poojakpdoshi-cmd/aether-office.git"},"bugs":{"url":"https://github.com/poojakpdoshi-cmd/aether-office/issues"},"engines":{"node":">=22"},"publishConfig":{"access":"public"},"bin":{"aetheroffice":"bin/aether-office.mjs","AetherOffice":"bin/aether-office.mjs","aether":"bin/aether.mjs"},"version":"1.0.0","type":"module","license":"MIT","scripts":{"dev":"node scripts/dev.mjs","build":"vite build && esbuild server/_core/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist && esbuild server/aether/cliConfig.ts --platform=node --packages=external --bundle --format=esm --outfile=dist/cli-config.js && esbuild server/aether/sandboxRuntime.ts --platform=node --packages=external --bundle --format=esm --outfile=dist/sandbox-runtime.js","start":"node dist/index.js","check":"tsc --noEmit","format":"prettier --write .","test":"vitest run","db:push":"drizzle-kit generate && drizzle-kit migrate","prepublishOnly":"npm run build"},"dependencies":{"@aws-sdk/client-s3":"^3.693.0","@aws-sdk/s3-request-presigner":"^3.693.0","@hookform/resolvers":"^5.2.2","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.7","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-label":"^2.1.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-navigation-menu":"^1.2.14","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-progress":"^1.1.7","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-tabs":"^1.1.13","@radix-ui/react-toggle":"^1.1.10","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-tooltip":"^1.2.8","@tanstack/react-query":"^5.90.2","@trpc/client":"^11.6.0","@trpc/react-query":"^11.6.0","@trpc/server":"^11.6.0","axios":"^1.12.0","class-variance-authority":"^0.7.1","clsx":"^2.1.1","cmdk":"^1.1.1","cookie":"^1.0.2","date-fns":"^4.1.0","dotenv":"^17.2.2","drizzle-orm":"^0.44.5","embla-carousel-react":"^8.6.0","express":"^4.21.2","framer-motion":"^12.23.22","input-otp":"^1.4.2","jose":"6.1.0","lucide-react":"^0.453.0","mysql2":"^3.15.0","nanoid":"^5.1.5","next-themes":"^0.4.6","playwright-core":"^1.62.1","react":"^19.2.1","react-day-picker":"^9.11.1","react-dom":"^19.2.1","react-hook-form":"^7.64.0","react-resizable-panels":"^3.0.6","recharts":"^2.15.2","sonner":"^2.0.7","streamdown":"^1.4.0","superjson":"^1.13.3","tailwind-merge":"^3.3.1","tailwindcss-animate":"^1.0.7","vaul":"^1.1.2","wouter":"^3.3.5","zod":"^4.1.12"},"devDependencies":{"@builder.io/vite-plugin-jsx-loc":"^0.1.1","@tailwindcss/typography":"^0.5.15","@tailwindcss/vite":"^4.1.3","@types/express":"4.17.21","@types/google.maps":"^3.58.1","@types/node":"^24.7.0","@types/react":"^19.2.1","@types/react-dom":"^19.2.1","@vitejs/plugin-react":"^5.0.4","add":"^2.0.6","autoprefixer":"^10.4.20","drizzle-kit":"^0.31.4","esbuild":"^0.25.0","pnpm":"^10.15.1","postcss":"^8.4.47","prettier":"^3.6.2","tailwindcss":"^4.1.14","tsx":"^4.19.1","tw-animate-css":"^1.4.0","typescript":"5.9.3","vite":"^7.1.7","vite-plugin-manus-runtime":"0.0.59","vitest":"^2.1.4"},"packageManager":"pnpm@10.4.1+sha512.c753b6c3ad7afa13af388fa6d808035a008e30ea9993f58c6663e2bc5ff21679aa834db094987129aa4d488b86df57f7b634981b2f827cdcacc698cc0cfb88af","pnpm":{"patchedDependencies":{"wouter@3.7.1":"patches/wouter@3.7.1.patch"},"overrides":{"tailwindcss>nanoid":"3.3.7"}},"_id":"@aetheroffice/cli@1.0.0","gitHead":"cd723dd3b41f724954668520d8ac3a21fc45caa6","_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-1PjhZX1bxnDobUXaXWjHuoz8E1PWFl4EXouIpyQEja2yNN7akcKwI2LJUkDt8IGzsxo2xCj2SX6f14BNrxIgMg==","shasum":"de3bb3d5ad04ef0244ea27191db8014c4f4484b4","tarball":"https://registry.npmjs.org/@aetheroffice/cli/-/cli-1.0.0.tgz","fileCount":14,"unpackedSize":1641760,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAyHMUTwMjDeSj4TEvxPL3tW2N0RQub3TT0qAm3CudvOAiA9Xib0yawsZRMqq1dHHxwloOqyV4mgvoe2+VTZqdyWJA=="}]},"_npmUser":{"name":"poojak_doshi","email":"poojakpdoshi@gmail.com"},"directories":{},"maintainers":[{"name":"poojak_doshi","email":"poojakpdoshi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.0.0_1787762129759_0.0958779984570226"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-26T16:35:29.549Z","1.0.0":"2026-08-26T16:35:29.935Z","modified":"2026-08-26T16:35:30.195Z"},"maintainers":[{"name":"poojak_doshi","email":"poojakpdoshi@gmail.com"}],"description":"AetherOffice is a local-first AI software company workspace with a secure terminal setup flow.","homepage":"https://github.com/poojakpdoshi-cmd/aether-office#readme","keywords":["aetheroffice","ai","developer-tools","local-first","cli"],"repository":{"type":"git","url":"git+https://github.com/poojakpdoshi-cmd/aether-office.git"},"bugs":{"url":"https://github.com/poojakpdoshi-cmd/aether-office/issues"},"license":"MIT","readme":"# AetherOffice\n\n**AetherOffice** is a local-first AI software company workspace. It starts a browser interface on your own computer, scopes all controlled tools to the workspace you choose, and keeps provider credentials in a local encrypted vault. The default interaction is the text-free animated office map; DeepDiscuss, proposals, controlled tools, audit history, tests, and guarded Git actions remain available through direct in-office interactions.\n\n> AetherOffice does **not** automatically push to a Git remote. It does **not** place API keys in the browser, source code, Git history, or application logs.\n\n## Start AetherOffice\n\nInstall the published package once, then run exactly one command:\n\n```bash\nnpm install --global @aetheroffice/cli\nAetherOffice\n```\n\nThat is the complete normal user flow. **Do not clone this repository, install project dependencies, run a development server, set environment variables, or open localhost manually.** The `AetherOffice` command automatically checks the local installation, uses the encrypted provider configuration already on the computer, opens the masked first-run provider wizard only when no provider is configured, starts the bundled production server on `127.0.0.1`, waits until it is ready, and opens the local AetherOffice interface in the default browser.\n\nThe package requires **Node.js 22 or newer** and npm. It supports Windows, macOS, and Linux desktop environments. Press `Ctrl+C` in the terminal to stop AetherOffice cleanly.\n\nFor **real employee sandbox terminals**, AetherOffice also needs Docker Desktop or Podman installed and running on the computer. The office still launches when that runtime is absent, but employee terminal controls remain unavailable and show a clear local setup message; AetherOffice never replaces that boundary with host command execution. Once the local runtime is installed, the normal launch remains only `AetherOffice`.\n\n## First run\n\nWhen no usable external provider is configured, `aetheroffice` begins an interactive terminal setup wizard before it starts the workspace. It walks through each supported configurable provider **one at a time** in a fixed order—without a provider-selection screen. Every credential is masked, never printed, and written only to the existing encrypted local vault. You can explicitly skip any provider. After the sequence, at least one usable provider is required; if none were configured, the wizard retries. Once one or more providers are ready, AetherOffice automatically starts the selected local workspace and opens localhost.\n\n| Provider route | Credential requested by setup | Important behavior |\n|---|---|---|\n| Google Gemini | Gemini API key | General AI reasoning and assistance. |\n| Mistral | Mistral API key | Software planning and implementation. |\n| DeepSeek | DeepSeek API key | Backend, systems, and debugging work. |\n| Grok | Grok API key | Research and comparative analysis. |\n| SambaNova | SambaNova API key | Fast analysis and synthesis. |\n| OpenRouter / North Mini Code | OpenRouter API key | Gateway access for North Mini Code and compatible models. |\n| Devstral Small 2 | Devstral API key | Explicitly retired-gated; it warns and requires acknowledgement before configuration. |\n| Nemotron 3 Ultra | NVIDIA API key | Reasoning and systems work through NVIDIA API Catalog. |\n\nEnter credentials only in the interactive wizard or through the physical **Provider Locker** inside the locally running Manager Cabin. Never paste an API key into a GitHub issue, source file, commit, browser console, or chat message.\n\nThe automatic first-run flow does not run optional provider connection checks, so completing setup does not make an extra provider request. You can use the Provider Locker later if you want to adjust a configured provider; provider keys are never printed by the CLI.\n\n## CLI reference\n\n| Command | Purpose |\n|---|---|\n| `AetherOffice` | **Normal user command.** Configure on first run when needed, then start the local application and open the browser automatically. |\n| `AetherOffice setup` | Optional recovery command to reconfigure encrypted provider credentials without starting the browser interface. |\n| `AetherOffice doctor` | Optional local diagnostic command that never reads or prints provider key values. |\n| `AetherOffice --help` | Show safe usage guidance. |\n| `AetherOffice --version` | Print the installed package version. |\n| `aetheroffice`, `aether` | Compatibility aliases. Normal user instructions use `AetherOffice`. |\n\nUse npm for package lifecycle operations:\n\n```bash\nnpm update --global @aetheroffice/cli\nnpm uninstall --global @aetheroffice/cli\n```\n\nThere is intentionally no `aetheroffice update` command: software updates should remain visible and user-controlled through npm.\n\n## Local configuration and security\n\nProvider configuration is stored locally under `~/.aether-office/`. The provider vault uses AES-256-GCM encryption, with the encryption key and encrypted payload written as separate local files. On POSIX systems, the configuration directory is restricted to mode `0700` and the vault/key to mode `0600`.\n\n| Local artifact | Purpose | Git behavior |\n|---|---|---|\n| `~/.aether-office/vault.key` | Local vault encryption key. | Never created in the repository. |\n| `~/.aether-office/providers.enc.json` | Encrypted selected provider configuration. | Never created in the repository. |\n| `~/.aether-office/runtime-state.json` | Local runtime state. | Never created in the repository. |\n| `~/.aether-office/audit/` | Local protected audit records. | Never created in the repository. |\n\nThe project you choose at launch is the only workspace exposed to AetherOffice controlled tools. DeepDiscuss in the default **Safe Mode** creates a TEAM PROPOSAL before meaningful workspace changes. You remain responsible for reviewing proposals, diffs, commands, tests, and guarded Git actions.\n\nUninstalling the npm package removes the executable and installed program files, but deliberately does **not** erase local credentials or audit data. If you want to permanently erase local AetherOffice data, first stop the process and then remove `~/.aether-office/` yourself using an operating-system appropriate secure deletion method.\n\n## Troubleshooting\n\n| Situation | Recommended action |\n|---|---|\n| `AetherOffice` is not found | Verify npm’s global binary directory is on your `PATH`, then reopen the terminal. |\n| Setup cannot mask input | Run `AetherOffice setup` from a normal interactive terminal, or start AetherOffice and use the physical Provider Locker. Do not use a shared/logged terminal session for credentials. |\n| No provider is ready | Run `AetherOffice setup`, safely skip providers you do not use, and enter a key for at least one provider you have an account for. |\n| A provider connection check fails | Check your key, billing/account access, selected model, and endpoint; rerun setup. For Devstral, confirm the retired model is still available to your Mistral account. |\n| The preferred port is occupied | The server searches the next available local port. Run `AetherOffice doctor` to see the preferred-port result. |\n| A workspace is rejected | Run `AetherOffice` from a normal local folder. The command needs an existing local directory as its controlled workspace. |\n| Employee sandbox is unavailable | Install and start Docker Desktop or Podman once, then run `AetherOffice` again. The CLI never falls back to host command execution. |\n| A vault is unreadable | Keep a backup of your local configuration directory if needed, then rerun setup to create fresh provider settings. |\n\n## Development\n\nContributors use the repository workflow rather than the global npm workflow:\n\n```bash\ngit clone https://github.com/poojakpdoshi-cmd/aether-office.git\ncd aether-office\npnpm install\npnpm check\npnpm test\npnpm build\npnpm dev\n```\n\n### Windows PowerShell\n\nThis source repository is pinned to **pnpm** because it uses a pnpm lockfile and a patched dependency. Do **not** run `npm install` in a cloned checkout. With Node.js 22 installed, use Corepack to obtain the pinned pnpm version without globally installing pnpm through npm:\n\n```powershell\ncd \"$HOME\\aether-office\"\ncorepack enable\ncorepack pnpm install --frozen-lockfile\ncorepack pnpm dev\n```\n\nThe `dev` command is cross-platform and sets development mode internally, so PowerShell does not need `NODE_ENV=...` syntax. When the server starts, open the printed `http://localhost:<port>` URL in your browser. If `corepack` is not found, install the current Node.js 22 LTS release, reopen PowerShell, and repeat the commands above.\n\nTo test the production CLI from a local checkout after a build, run:\n\n```bash\nnode bin/aether-office.mjs --help\nnode bin/aether-office.mjs doctor\n```\n\n## Publishing for the Owner\n\nThe `@aetheroffice/cli` scope must be owned by the publishing npm account or an npm organization before this exact public name can be released. Create an npm account, enable two-factor authentication, create or obtain the `@aetheroffice` organization, grant the publisher the required access, and authenticate in your own terminal with `npm login`. Do not send an npm access token in chat or store one in this repository.\n\nAfter reviewing the release package, publish manually and explicitly:\n\n```bash\npnpm check\npnpm test\npnpm build\nnpm pack --dry-run\nnpm publish --access public\n```\n\nSee [the npm release guide](docs/npm-publishing.md) for the required Owner-controlled preflight and rollback considerations. The project intentionally does not publish itself or perform npm actions that require your account authorization.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","readmeFilename":"README.md","_rev":"1-3c420f54efccbf724c78b172a37073af"}