@inneranimalmedia/agentsam-sdk 2.6.4 → 2.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTSAM.md +11 -0
- package/README.md +15 -9
- package/apps/client-cms-editor/AGENTS.md +12 -0
- package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
- package/apps/client-cms-editor/README.md +72 -0
- package/apps/client-cms-editor/agentsam.app.json +57 -0
- package/apps/client-cms-editor/backend/README.md +5 -0
- package/apps/client-cms-editor/backend/package.json +22 -0
- package/apps/client-cms-editor/backend/src/api/client.ts +200 -0
- package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +145 -0
- package/apps/client-cms-editor/backend/src/index.ts +6 -0
- package/apps/client-cms-editor/backend/src/model.ts +115 -0
- package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
- package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
- package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
- package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
- package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
- package/apps/client-cms-editor/backend/tsconfig.json +15 -0
- package/apps/client-cms-editor/backend/worker/index.js +34 -0
- package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
- package/apps/client-cms-editor/bin/agentsam-cms.mjs +229 -0
- package/apps/client-cms-editor/frontend/index.html +12 -0
- package/apps/client-cms-editor/frontend/package.json +33 -0
- package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +188 -0
- package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +191 -0
- package/apps/client-cms-editor/frontend/src/CmsEditor.tsx +1345 -0
- package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
- package/apps/client-cms-editor/frontend/src/index.ts +8 -0
- package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
- package/apps/client-cms-editor/frontend/src/main.tsx +17 -0
- package/apps/client-cms-editor/frontend/src/mount.tsx +51 -0
- package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
- package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
- package/apps/client-cms-editor/frontend/src/styles/studio.css +106 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
- package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
- package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
- package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
- package/apps/client-cms-editor/frontend/tsconfig.json +25 -0
- package/apps/client-cms-editor/frontend/vite.config.ts +13 -0
- package/apps/client-cms-editor/package-lock.json +3832 -0
- package/apps/client-cms-editor/package.json +23 -0
- package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
- package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
- package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
- package/apps/client-cms-editor/shared/cms/package.json +21 -0
- package/apps/client-cms-editor/shared/cms/src/agent-context.ts +35 -0
- package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
- package/apps/client-cms-editor/shared/cms/src/editor-types.ts +58 -0
- package/apps/client-cms-editor/shared/cms/src/index.ts +5 -0
- package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
- package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
- package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
- package/bin/agentsam-rapid-rust +36 -0
- package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
- package/docs/MACHINE_INTELLIGENCE.md +120 -0
- package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
- package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
- package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +151 -0
- package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +12 -4
- package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
- package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
- package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
- package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
- package/docs/contracts/capability-install-planner.md +67 -0
- package/docs/contracts/environment-vocabulary.md +195 -0
- package/docs/contracts/google-cloud-oauth-setup.md +199 -0
- package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
- package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
- package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
- package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
- package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
- package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
- package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
- package/docs/plugins.md +2 -2
- package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
- package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
- package/docs/product/README.md +8 -0
- package/docs/rapid-rust-wasm.md +35 -0
- package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
- package/package.json +73 -14
- package/packages/agentsam-brand/README.md +106 -11
- package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
- package/packages/agentsam-brand/package.json +39 -7
- package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
- package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
- package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
- package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
- package/packages/agentsam-brand/src/adapters/memory.js +31 -0
- package/packages/agentsam-brand/src/cli/controller.js +503 -0
- package/packages/agentsam-brand/src/cli/wizard.js +526 -0
- package/packages/agentsam-brand/src/core/capabilities.js +201 -0
- package/packages/agentsam-brand/src/core/derivatives.js +211 -0
- package/packages/agentsam-brand/src/core/errors.js +12 -0
- package/packages/agentsam-brand/src/core/ingest.js +195 -0
- package/packages/agentsam-brand/src/core/inspect.js +109 -0
- package/packages/agentsam-brand/src/core/keys.js +83 -0
- package/packages/agentsam-brand/src/core/naming.js +142 -0
- package/packages/agentsam-brand/src/core/optimize.js +316 -0
- package/packages/agentsam-brand/src/core/pack.js +305 -0
- package/packages/agentsam-brand/src/core/plan.js +276 -0
- package/packages/agentsam-brand/src/core/preview.js +159 -0
- package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
- package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
- package/packages/agentsam-brand/src/core/processors/index.js +148 -0
- package/packages/agentsam-brand/src/core/processors/native.js +82 -0
- package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
- package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
- package/packages/agentsam-brand/src/core/promote.js +288 -0
- package/packages/agentsam-brand/src/core/receipts.js +155 -0
- package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
- package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
- package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
- package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
- package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
- package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
- package/packages/agentsam-brand/src/index.js +193 -36
- package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
- package/packages/agentsam-brand/src/presets/favicon.json +17 -0
- package/packages/agentsam-brand/src/presets/hero.json +12 -0
- package/packages/agentsam-brand/src/presets/index.js +40 -0
- package/packages/agentsam-brand/src/presets/logo.json +12 -0
- package/packages/agentsam-brand/src/presets/model.json +8 -0
- package/packages/agentsam-brand/src/presets/og-image.json +10 -0
- package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
- package/packages/agentsam-brand/src/presets/social-image.json +10 -0
- package/packages/agentsam-brand/src/presets/web-image.json +10 -0
- package/packages/agentsam-contracts/src/artifacts.ts +41 -0
- package/packages/agentsam-knowledge/src/autorag/index.js +1 -1
- package/packages/agentsam-knowledge/src/providers/index.js +6 -4
- package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
- package/packages/agentsam-knowledge/test/autorag.test.mjs +22 -1
- package/packages/agentsam-nav/package.json +2 -2
- package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
- package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
- package/packages/agentsam-rapid-rust/README.md +5 -0
- package/packages/agentsam-rapid-rust/src/main.rs +718 -0
- package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
- package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
- package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
- package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
- package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
- package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
- package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
- package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
- package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
- package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
- package/packages/agentsam-repository/src/index.js +1 -0
- package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
- package/packages/agentsam-repository/src/source-types.js +85 -0
- package/packages/agentsam-vault/README.md +96 -0
- package/packages/agentsam-vault/package.json +32 -0
- package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
- package/packages/agentsam-vault/src/contracts/credential.js +132 -0
- package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
- package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
- package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
- package/packages/agentsam-vault/src/index.d.ts +9 -0
- package/packages/agentsam-vault/src/index.js +27 -0
- package/packages/agentsam-vault/src/providers/registry.js +90 -0
- package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
- package/packages/agentsam-workbench/README.md +24 -0
- package/packages/agentsam-workbench/package.json +38 -0
- package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
- package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
- package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
- package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
- package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
- package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
- package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
- package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
- package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
- package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
- package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
- package/packages/agentsam-workbench/src/agent/index.ts +10 -0
- package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
- package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
- package/packages/agentsam-workbench/src/browser/index.ts +1 -0
- package/packages/agentsam-workbench/src/index.ts +6 -0
- package/packages/agentsam-workbench/src/project-control.css +160 -0
- package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
- package/packages/agentsam-workbench/src/projects/index.ts +1 -0
- package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
- package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
- package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
- package/packages/agentsam-workbench/src/shell/index.ts +4 -0
- package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
- package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
- package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
- package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
- package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
- package/packages/agentsam-workbench/tsconfig.json +13 -0
- package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
- package/packages/connectors/cloudflare/package.json +3 -1
- package/packages/connectors/cloudflare/src/api-client.js +279 -0
- package/packages/connectors/cloudflare/src/capabilities.js +585 -0
- package/packages/connectors/cloudflare/src/credential.js +318 -0
- package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
- package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
- package/packages/connectors/cloudflare/src/families/pages.js +151 -0
- package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
- package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
- package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
- package/packages/connectors/cloudflare/src/families/tags.js +124 -0
- package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
- package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
- package/packages/connectors/cloudflare/src/index.js +102 -265
- package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
- package/packages/connectors/cloudflare/src/owner.js +42 -12
- package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
- package/packages/connectors/cloudflare/src/routes.js +309 -144
- package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
- package/packages/connectors/cloudflare/src/vault.js +2 -2
- package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
- package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -30
- package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
- package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +22 -2
- package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
- package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +20 -0
- package/packages/identity/README.md +1 -1
- package/packages/identity/backend/README.md +1 -1
- package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +3 -2
- package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
- package/packages/identity/package.json +4 -3
- package/packages/identity/scripts/local-identity-bridge.mjs +184 -0
- package/packages/identity/scripts/preview-auth-portal.mjs +7 -7
- package/packages/identity/src/adapters/cloudflare-d1/index.js +31 -2
- package/packages/identity/src/adapters/sqlite/index.js +4 -1
- package/packages/identity/src/contracts/auth-config.js +28 -8
- package/packages/identity/src/contracts/external-identity.js +1 -1
- package/packages/identity/src/contracts/provider.js +1 -0
- package/packages/identity/src/frontend/auth-portal/README.md +2 -1
- package/packages/identity/src/frontend/auth-portal/pages/login.html +6 -5
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +6 -5
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +6 -5
- package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
- package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +207 -0
- package/packages/identity/src/index.js +16 -0
- package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
- package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
- package/packages/identity/src/migrations/README.md +5 -2
- package/packages/identity/src/oauth/README.md +10 -5
- package/packages/identity/src/oauth/consent-view.js +388 -0
- package/packages/identity/src/oauth/credentials.js +31 -11
- package/packages/identity/src/oauth/google-desktop-exchange.js +173 -0
- package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
- package/packages/identity/src/providers/cloudflare/profile.js +49 -14
- package/packages/identity/src/providers/iam/index.js +27 -5
- package/packages/identity/src/server/identity-service.js +31 -2
- package/packages/identity/src/server/worker-router.js +111 -81
- package/packages/identity/tests/auth-config.test.mjs +3 -2
- package/packages/identity/tests/identity-init-scaffold.test.mjs +3 -0
- package/packages/identity/tests/identity-service.test.mjs +16 -0
- package/packages/identity/tests/native-session-worker.test.mjs +64 -0
- package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
- package/packages/identity/tests/oauth-credentials.test.mjs +17 -4
- package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
- package/packages/identity/tests/preview-auth-portal.test.mjs +3 -3
- package/packages/runtime-protocol/src/index.js +154 -0
- package/packages/theme-scenes/README.md +164 -0
- package/packages/theme-scenes/package.json +53 -0
- package/packages/theme-scenes/src/blocks/index.js +30 -0
- package/packages/theme-scenes/src/contracts/index.js +286 -0
- package/packages/theme-scenes/src/demos/index.js +65 -0
- package/packages/theme-scenes/src/index.js +75 -0
- package/packages/theme-scenes/src/presets/index.js +263 -0
- package/packages/theme-scenes/src/runtime/compile.js +119 -0
- package/packages/theme-scenes/src/scenes/index.js +146 -0
- package/packages/theme-scenes/src/shell/index.js +47 -0
- package/packages/theme-scenes/src/themes/index.js +129 -0
- package/packages/theme-scenes/src/visuals/index.js +41 -0
- package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
- package/packages/work-graph/src/index.js +34 -1
- package/packages/work-graph/src/renderers/gantt-model.js +24 -0
- package/packages/work-graph/test/work-graph.test.mjs +27 -7
- package/protocol/README.md +15 -7
- package/protocol/apps/agentsam.app.v1.schema.json +89 -7
- package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
- package/protocol/assets/README.md +9 -0
- package/protocol/assets/asset-record.v1.schema.json +64 -0
- package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
- package/protocol/scoring/README.md +10 -0
- package/protocol/scoring/scorecard.v1.schema.json +65 -0
- package/protocol/ui/icon-registry.mjs +1 -0
- package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
- package/registry/cms-rust-machine-20260928/manifest.json +22 -0
- package/registry/cms-rust-machine-20260928/migration.sql +237 -0
- package/registry/cms-rust-machine-20260928/receipt.json +21 -0
- package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
- package/scripts/build_rapid_rust_cli.py +83 -0
- package/src/attachments/index.js +6 -0
- package/src/attachments/intake.js +235 -0
- package/src/capabilities/repository-snapshot.js +19 -2
- package/src/cli/command-catalog.js +8 -0
- package/src/cli.js +182 -26
- package/src/commands/account-auth.js +94 -8
- package/src/commands/app.js +307 -3
- package/src/commands/billing.js +127 -0
- package/src/commands/brand.js +74 -60
- package/src/commands/cheat-sheet.js +154 -0
- package/src/commands/cloudflare-login.js +222 -0
- package/src/commands/cloudflare.js +453 -23
- package/src/commands/codebaseindex.js +6 -1
- package/src/commands/compute.js +4 -0
- package/src/commands/connections.js +11 -5
- package/src/commands/credentials.js +116 -0
- package/src/commands/gcloud-auth.js +427 -0
- package/src/commands/google-cloud.js +375 -0
- package/src/commands/identity-init.js +2 -2
- package/src/commands/mcp.js +226 -33
- package/src/commands/ollama.js +3 -2
- package/src/commands/plugins.js +7 -2
- package/src/commands/product.js +36 -0
- package/src/commands/runtime-status.js +28 -9
- package/src/commands/runtime.js +313 -0
- package/src/commands/rust.js +24 -0
- package/src/commands/setup.js +279 -0
- package/src/commands/shell.js +16 -3
- package/src/commands/start-local.js +2 -2
- package/src/commands/terminal.js +171 -0
- package/src/commands/update.js +140 -0
- package/src/commands/whoami.js +329 -65
- package/src/features/resolve.js +1 -0
- package/src/index.js +4 -0
- package/src/indexing/ingest/inventory.js +254 -19
- package/src/indexing/ingest/materials.js +3 -9
- package/src/indexing/ingest/style-evidence.js +181 -0
- package/src/knowledge/source.js +3 -3
- package/src/lib/account-session.js +11 -4
- package/src/lib/app-authority.js +172 -0
- package/src/lib/auth.js +94 -21
- package/src/lib/core-client.js +5 -6
- package/src/lib/credentials-audit.js +451 -0
- package/src/lib/deploy/health.js +24 -6
- package/src/lib/detect-context.js +7 -1
- package/src/lib/google-cloud-connection.js +270 -0
- package/src/lib/google-cloud-inventory.js +385 -0
- package/src/lib/google-desktop-oauth.js +372 -0
- package/src/lib/google-studio-brokered-oauth.js +158 -0
- package/src/lib/identity-scaffold.js +24 -6
- package/src/lib/init-options.js +192 -0
- package/src/lib/local-scaffold.js +48 -16
- package/src/lib/provider-command-remediation.js +308 -0
- package/src/lib/provider-credentials.js +8 -0
- package/src/lib/scaffold/index.js +8 -2
- package/src/lib/scaffold/mcp-server.js +43 -0
- package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
- package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
- package/src/lib/scaffold/wizards/cms.js +93 -0
- package/src/lib/scaffold/wizards/mcp-server.js +61 -0
- package/src/lib/setup/contract.js +26 -0
- package/src/lib/setup/discover.js +116 -0
- package/src/lib/setup/execute.js +205 -0
- package/src/lib/setup/planner.js +134 -0
- package/src/lib/setup/recipes.js +235 -0
- package/src/lib/setup/runtime-persist.js +197 -0
- package/src/lib/setup/runtime.js +394 -0
- package/src/lib/slash-commands.js +2 -0
- package/src/lib/terminal/machine-identity.js +95 -0
- package/src/lib/terminal-local.js +164 -0
- package/src/lib/terminal-scopes.js +52 -0
- package/src/lib/whoami-capabilities.js +184 -0
- package/src/local-pty/server.js +34 -5
- package/src/mcp/authority.js +58 -108
- package/src/mcp/client-adapters.js +68 -144
- package/src/mcp/client.js +142 -122
- package/src/mcp/cloudflare-bundles.js +225 -0
- package/src/mcp/index.js +12 -0
- package/src/plugins/cloudflare.js +1 -1
- package/src/providers/ollama-chat.js +2 -1
- package/src/sam/types.js +27 -2
- package/src/security/inventory.js +12 -2
- package/src/security/local-vault.js +2 -0
- package/src/security/scan.js +1 -1
- package/test/account-session.test.mjs +3 -3
- package/test/app-authority-context.test.mjs +32 -0
- package/test/cli/codebaseindex-plan-ux.test.mjs +1 -1
- package/test/cli/mcp-client.test.mjs +21 -10
- package/test/cli/runtime-persist.test.mjs +56 -0
- package/test/cli/rust-command.test.mjs +21 -0
- package/test/credentials-audit.test.mjs +113 -0
- package/test/deploy-health-scan.test.mjs +29 -1
- package/test/gcloud-auth.test.mjs +111 -0
- package/test/google-cloud-connection.test.mjs +83 -0
- package/test/google-cloud-inventory.test.mjs +64 -0
- package/test/init-options.test.mjs +35 -0
- package/test/integration/app-command.test.mjs +30 -0
- package/test/integration/cad-project.test.mjs +4 -1
- package/test/integration/cms-app-scaffold.test.mjs +71 -0
- package/test/integration/cms-site-tenancy-contract.test.mjs +3 -2
- package/test/integration/codebaseindex-ingest.test.mjs +48 -0
- package/test/integration/features-resolve.test.mjs +30 -11
- package/test/integration/inspect-path-cli.test.mjs +46 -0
- package/test/integration/inventory-evidence.test.mjs +125 -0
- package/test/integration/runtime-status.integration.test.mjs +2 -1
- package/test/knowledge.test.mjs +35 -1
- package/test/loopback-oauth.test.mjs +53 -0
- package/test/ollama.test.mjs +22 -0
- package/test/security.test.mjs +23 -0
- package/test/setup-planner.test.mjs +74 -0
- package/test/setup-runtime.test.mjs +51 -0
- package/test/terminal/local-pty.mock.test.mjs +3 -1
- package/test/terminal-machine-identity.test.mjs +88 -0
- package/test/whoami-resume.test.mjs +27 -6
- package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
- package/packages/work-graph/prototype/README.md +0 -32
- package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
- package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
- package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
- package/packages/work-graph/prototype-gnantt.html +0 -655
|
@@ -14,12 +14,15 @@ export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
|
14
14
|
{ id: 'dev', summary: 'Run this project’s npm dev script', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
15
15
|
{ id: 'inspect', summary: 'Bounded repository inspect / authority view', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'repository.inspect', common: true },
|
|
16
16
|
{ id: 'capabilities', summary: 'Inspect capability contracts', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
17
|
+
{ id: 'setup', summary: 'Discover → plan → approve → install capabilities (Homebrew-style)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
17
18
|
{ id: 'skills', aliases: ['skill'], summary: 'List or load portable skill instructions', topic: 'create', skill: 'agentsam-app-fundamentals', common: true },
|
|
18
19
|
{ id: 'context', summary: 'Git + bridge context from any repo', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
19
20
|
{ id: 'status', summary: 'Account, models, terminal, and live deploy awareness', topic: 'runtime', skill: 'agentsam-progression-guard', common: true },
|
|
20
21
|
{ id: 'db', summary: 'Project-local SQLite status/init', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
21
22
|
{ id: 'models', summary: 'Probe hosted/local model availability', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
22
23
|
{ id: 'providers', summary: 'Configure machine provider credentials', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
24
|
+
{ id: 'credentials', aliases: ['credential'], summary: 'Audit credentials, drift, and failure remediation (never prints secrets)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
25
|
+
{ id: 'cheat-sheet', aliases: ['cheatsheet'], summary: 'Organized command groups (gcloud-like)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
23
26
|
{ id: 'env', summary: 'Provider profile / shell loader helpers', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
24
27
|
{ id: 'api-key', aliases: ['apikey', 'api-keys'], summary: 'Create/list/rotate AgentSam API keys (aak_*)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
25
28
|
{ id: 'login', summary: 'Sign in and persist machine-local session', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
@@ -31,10 +34,15 @@ export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
|
31
34
|
{ id: 'ollama', summary: 'Local Ollama setup/status/models', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
32
35
|
{ id: 'tunnel', summary: 'Cloudflare Tunnel via Wrangler', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
33
36
|
{ id: 'connections', aliases: ['connection'], summary: 'Inspect execution connections', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
37
|
+
{ id: 'compute', summary: 'Alias for google-cloud compute/iam helpers', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
38
|
+
{ id: 'google-cloud', aliases: ['gcp', 'gcloud'], summary: 'Google Cloud auth, projects, compute, IAM SAs, billing, doctor', topic: 'runtime', skill: 'agentsam-app-fundamentals', common: true },
|
|
39
|
+
{ id: 'billing', aliases: ['costs'], summary: 'Billing account relationships (not --billing-project)', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
40
|
+
{ id: 'update', summary: 'Component update preview (gcloud-like)', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
34
41
|
{ id: 'deploy', summary: 'Graduate intentionally to cloud', topic: 'runtime', skill: 'agentsam-progression-guard', common: true },
|
|
35
42
|
{ id: 'deploy-receipt', summary: 'Merkle deploy/checkpoint receipts', topic: 'runtime', skill: 'agentsam-progression-guard' },
|
|
36
43
|
{ id: 'cloudflare', aliases: ['cf'], summary: 'Wrangler reads + Worker CPU profiles', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
37
44
|
{ id: 'go', summary: 'Go product discover/build/deploy', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
45
|
+
{ id: 'rust', aliases: ['wasm', 'rapid-rust'], summary: 'Rust/Wasm scaffold, doctor, check, build, dev, explicit deploy', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
38
46
|
{ id: 'mcp', summary: 'MCP server catalog and client adapters', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
39
47
|
{ id: 'eval', summary: 'Context fixtures and live eval telemetry', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
40
48
|
{ id: 'index', summary: 'Plan/run incremental AST (+ optional embeddings)', topic: 'work', skill: 'agentsam-codebaseindex', operation: 'codebaseindex.ingest' },
|
package/src/cli.js
CHANGED
|
@@ -39,16 +39,33 @@ import { runEval } from './commands/eval.js';
|
|
|
39
39
|
import { runMcp } from './commands/mcp.js';
|
|
40
40
|
import { runCloudflare } from './commands/cloudflare.js';
|
|
41
41
|
import { runGo } from './commands/go.js';
|
|
42
|
+
import { runRust } from './commands/rust.js';
|
|
42
43
|
import { runWhoami } from './commands/whoami.js';
|
|
44
|
+
import { runTerminal } from './commands/terminal.js';
|
|
43
45
|
import { runApiKey } from './commands/api-key.js';
|
|
44
46
|
import { runResume } from './commands/resume.js';
|
|
45
47
|
import { runLogin, runLogout } from './commands/account-auth.js';
|
|
46
48
|
import { runPlugins } from './commands/plugins.js';
|
|
49
|
+
import { runCredentials } from './commands/credentials.js';
|
|
50
|
+
import { runCheatSheet } from './commands/cheat-sheet.js';
|
|
51
|
+
import { runCompute } from './commands/compute.js';
|
|
52
|
+
import { runGoogleCloud } from './commands/google-cloud.js';
|
|
53
|
+
import { runBilling } from './commands/billing.js';
|
|
54
|
+
import { runUpdate } from './commands/update.js';
|
|
55
|
+
import { runSetup } from './commands/setup.js';
|
|
56
|
+
import { runRuntime } from './commands/runtime.js';
|
|
47
57
|
import { applyPresetSelection, runAdd, runCapabilities, runDev, runInspect } from './commands/product.js';
|
|
48
58
|
import { listPresets, resolvePreset } from './presets/index.js';
|
|
59
|
+
import {
|
|
60
|
+
getInstallableProductChoice,
|
|
61
|
+
guidanceForRunTarget,
|
|
62
|
+
listInitProjectTypeOptions,
|
|
63
|
+
parseProjectTypeChoice,
|
|
64
|
+
RUN_TARGET_OPTIONS,
|
|
65
|
+
} from './lib/init-options.js';
|
|
66
|
+
import { resolveAccountAuth } from './lib/account-session.js';
|
|
49
67
|
import fs from 'node:fs';
|
|
50
68
|
import { repositoryRoot } from './knowledge/config.js';
|
|
51
|
-
import { resolveAccountAuth } from './lib/account-session.js';
|
|
52
69
|
import { renderDiagnosticError } from './errors/index.js';
|
|
53
70
|
import { renderHelpOverview, runHelp } from './ui/cli/help.js';
|
|
54
71
|
import { hydrateSecureCredentials } from './security/local-vault.js';
|
|
@@ -83,6 +100,7 @@ function printLegacyHelp() {
|
|
|
83
100
|
agentsam deploy Graduate an AgentSam project intentionally
|
|
84
101
|
|
|
85
102
|
Capability discovery:
|
|
103
|
+
agentsam setup Discover → plan → approve → install (Homebrew-style)
|
|
86
104
|
agentsam capabilities [capability-id] [--json]
|
|
87
105
|
agentsam skill list|create|inspect|install|alias|remove|invoke
|
|
88
106
|
agentsam skills [skill-id-or-alias] [--references] [--json]
|
|
@@ -109,10 +127,15 @@ function printLegacyHelp() {
|
|
|
109
127
|
agentsam login Sign in to Inner Animal Media and persist a secure machine-local session
|
|
110
128
|
agentsam logout Sign out locally; provider credentials stay untouched
|
|
111
129
|
agentsam whoami [--json] Authenticated account identity + safe credential status
|
|
130
|
+
agentsam terminal identity [--json] This machine's hostname, platform, arch, and model
|
|
131
|
+
agentsam terminal enroll --instance <id> [--pair] [--json]
|
|
132
|
+
Needs AGENTSAM_API_KEY; --pair writes AGENTSAM_BRIDGE_KEY
|
|
133
|
+
(one terminal_connection in ~/.execos/profiles/)
|
|
112
134
|
agentsam resume [session] Resume a saved Agent Sam session; omit id for picker
|
|
113
135
|
agentsam eval context Offline context-strategy/economics fixtures (--help)
|
|
114
|
-
agentsam cloudflare
|
|
136
|
+
agentsam cloudflare Capabilities + CF OAuth packs (agentsam cloudflare login --pack agentsam)
|
|
115
137
|
agentsam go Go runtime discovery/build/deploy (Cloudflare worker-container)
|
|
138
|
+
agentsam rust Rust/Wasm scaffold/doctor/check/build/dev/deploy (explicit deploy)
|
|
116
139
|
agentsam start-local Local PTY on ws://127.0.0.1:3099 (no tunnel, no Cloudflare)
|
|
117
140
|
agentsam ollama Opt-in local Ollama setup/status/model management
|
|
118
141
|
agentsam shell Interactive Agent Sam slash-command shell
|
|
@@ -241,6 +264,7 @@ async function runLocalInit(config) {
|
|
|
241
264
|
✓ SQLite ${db.dbPath} (${db.tables.length} tables)
|
|
242
265
|
✓ Local API Node · http://127.0.0.1:8787
|
|
243
266
|
✓ Agent Sam interactive CLI ready
|
|
267
|
+
✓ Run target ${meta.runTarget}
|
|
244
268
|
|
|
245
269
|
Next:`);
|
|
246
270
|
console.log(` cd ${meta.projectName}`);
|
|
@@ -248,10 +272,19 @@ async function runLocalInit(config) {
|
|
|
248
272
|
console.log(` ${step}`);
|
|
249
273
|
}
|
|
250
274
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
Local
|
|
275
|
+
if (meta.runTarget === 'local') {
|
|
276
|
+
console.log(`
|
|
277
|
+
Local is ready on this host. Cloudflare OAuth, GCP OAuth, and Docker are available when you want them:
|
|
278
|
+
agentsam connections setup · agentsam google-cloud doctor · agentsam dockerize
|
|
254
279
|
`);
|
|
280
|
+
} else {
|
|
281
|
+
console.log(`
|
|
282
|
+
Guided path for ${meta.runTarget}:`);
|
|
283
|
+
for (const step of guidanceForRunTarget(meta.runTarget, { projectName: meta.projectName })) {
|
|
284
|
+
console.log(` ${step}`);
|
|
285
|
+
}
|
|
286
|
+
console.log('');
|
|
287
|
+
}
|
|
255
288
|
return { dir, meta };
|
|
256
289
|
}
|
|
257
290
|
|
|
@@ -274,38 +307,83 @@ async function initInteractive(partial = {}) {
|
|
|
274
307
|
},
|
|
275
308
|
}));
|
|
276
309
|
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
],
|
|
310
|
+
const typeOptions = listInitProjectTypeOptions();
|
|
311
|
+
const typeChoice = partial.projectType || pick(await select({
|
|
312
|
+
message: 'What do you want to build?',
|
|
313
|
+
initialValue: typeOptions[0]?.value || 'preset:fullstack',
|
|
314
|
+
options: typeOptions.map((row) => ({
|
|
315
|
+
value: row.value,
|
|
316
|
+
label: row.label,
|
|
317
|
+
hint: row.hint,
|
|
318
|
+
})),
|
|
287
319
|
}));
|
|
320
|
+
const parsed = parseProjectTypeChoice(typeChoice) || { kind: 'preset', id: 'fullstack' };
|
|
321
|
+
|
|
322
|
+
if (parsed.kind === 'scaffold') {
|
|
323
|
+
const { runScaffold } = await import('./lib/scaffold/index.js');
|
|
324
|
+
await runScaffold(parsed.id);
|
|
325
|
+
outro(`Scaffold ${parsed.id} ready`);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (parsed.kind === 'product') {
|
|
330
|
+
const product = getInstallableProductChoice(parsed.id);
|
|
331
|
+
if (!product?.action) throw new Error(`installable product action unavailable: ${parsed.id}`);
|
|
332
|
+
if (product.action.kind === 'app') {
|
|
333
|
+
const targetDir = path.resolve(process.cwd(), projectName);
|
|
334
|
+
await runApp(['scaffold', product.action.id, targetDir]);
|
|
335
|
+
outro(`Product ${parsed.id} scaffolded at ${projectName}`);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (product.action.kind === 'scaffold') {
|
|
339
|
+
const { runScaffold } = await import('./lib/scaffold/index.js');
|
|
340
|
+
await runScaffold(product.action.id);
|
|
341
|
+
outro(`Product ${parsed.id} scaffold ready`);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (product.action.kind === 'rust-template') {
|
|
345
|
+
await runRust(['new', projectName, '--template', product.action.template || 'shared-core']);
|
|
346
|
+
outro(`Product ${parsed.id} scaffolded at ${projectName}`);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
throw new Error(`unsupported installable product action: ${product.action.kind}`);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (parsed.kind === 'app') {
|
|
353
|
+
const targetDir = path.resolve(process.cwd(), projectName);
|
|
354
|
+
console.log(`\n Scaffolding app ${parsed.id} → ${targetDir}\n`);
|
|
355
|
+
await runApp(['scaffold', parsed.id, targetDir]);
|
|
356
|
+
outro(`App ${parsed.id} scaffolded at ${projectName}`);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const preset = resolvePreset(parsed.id);
|
|
361
|
+
const laneKey = preset.lane || preset.id;
|
|
288
362
|
|
|
289
363
|
const runTarget = partial.runTarget || pick(await select({
|
|
290
|
-
message: '
|
|
364
|
+
message: 'Where will this run?',
|
|
291
365
|
initialValue: 'local',
|
|
292
|
-
options:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
366
|
+
options: RUN_TARGET_OPTIONS.map((row) => ({
|
|
367
|
+
value: row.value,
|
|
368
|
+
label: row.label,
|
|
369
|
+
hint: row.hint,
|
|
370
|
+
})),
|
|
297
371
|
}));
|
|
298
372
|
|
|
299
373
|
if (runTarget !== 'local') {
|
|
300
374
|
const { detectContext, missingForInit } = await import('./lib/detect-context.js');
|
|
301
375
|
const ctx = await detectContext();
|
|
302
|
-
|
|
303
|
-
|
|
376
|
+
const missing = missingForInit(ctx, resolveAccountAuth({ env: process.env }).value, { runTarget });
|
|
377
|
+
printContextSummary(ctx);
|
|
378
|
+
if (missing.length) {
|
|
379
|
+
console.log(` Missing for ${runTarget}: ${missing.join(', ')}`);
|
|
380
|
+
console.log(' Use the guided commands printed after scaffold — the tooling is already shipped.\n');
|
|
304
381
|
}
|
|
305
382
|
}
|
|
306
383
|
|
|
307
|
-
await runLocalInit({ projectName, lane: laneKey, runTarget, prompt: null });
|
|
308
|
-
|
|
384
|
+
const created = await runLocalInit({ projectName, lane: laneKey, runTarget, prompt: null });
|
|
385
|
+
applyPresetSelection(created.dir, preset);
|
|
386
|
+
outro(`Created ${projectName} (${preset.id} · ${runTarget})`);
|
|
309
387
|
}
|
|
310
388
|
|
|
311
389
|
async function initFromArgs(argv) {
|
|
@@ -349,7 +427,7 @@ if (command === '--version' || command === '-v') {
|
|
|
349
427
|
try {
|
|
350
428
|
const opts = parseCreateArgs(rest);
|
|
351
429
|
if (opts.help || !opts.projectName) {
|
|
352
|
-
console.log(`agentsam create <name> --preset <${listPresets().map((row) => row.id).join('|')}> [--target local|cloudflare|gcp]`);
|
|
430
|
+
console.log(`agentsam create <name> --preset <${listPresets().map((row) => row.id).join('|')}> [--target local|cloudflare|gcp|docker]`);
|
|
353
431
|
} else {
|
|
354
432
|
const preset = resolvePreset(opts.preset);
|
|
355
433
|
const created = await runLocalInit({ projectName: opts.projectName, lane: preset.lane, runTarget: opts.runTarget, prompt: null });
|
|
@@ -417,6 +495,69 @@ if (command === '--version' || command === '-v') {
|
|
|
417
495
|
reportCliError(e);
|
|
418
496
|
process.exit(1);
|
|
419
497
|
}
|
|
498
|
+
} else if (command === 'credentials' || command === 'credential') {
|
|
499
|
+
try {
|
|
500
|
+
const code = await runCredentials(rest);
|
|
501
|
+
if (code) process.exitCode = code;
|
|
502
|
+
} catch (e) {
|
|
503
|
+
reportCliError(e);
|
|
504
|
+
process.exitCode = 1;
|
|
505
|
+
}
|
|
506
|
+
} else if (command === 'cheat-sheet' || command === 'cheatsheet') {
|
|
507
|
+
try {
|
|
508
|
+
process.exitCode = runCheatSheet(rest, { version: VERSION }) || 0;
|
|
509
|
+
} catch (e) {
|
|
510
|
+
reportCliError(e);
|
|
511
|
+
process.exitCode = 1;
|
|
512
|
+
}
|
|
513
|
+
} else if (command === 'setup') {
|
|
514
|
+
try {
|
|
515
|
+
const code = await runSetup(rest);
|
|
516
|
+
if (code) process.exitCode = code;
|
|
517
|
+
} catch (e) {
|
|
518
|
+
reportCliError(e);
|
|
519
|
+
process.exitCode = 1;
|
|
520
|
+
}
|
|
521
|
+
} else if (command === 'runtime' || command === 'agentsamd') {
|
|
522
|
+
try {
|
|
523
|
+
const code = await runRuntime(rest);
|
|
524
|
+
if (code) process.exitCode = code;
|
|
525
|
+
} catch (e) {
|
|
526
|
+
reportCliError(e);
|
|
527
|
+
process.exitCode = 1;
|
|
528
|
+
}
|
|
529
|
+
} else if (command === 'compute') {
|
|
530
|
+
try {
|
|
531
|
+
const code = await runCompute(rest);
|
|
532
|
+
if (code) process.exitCode = code;
|
|
533
|
+
} catch (e) {
|
|
534
|
+
reportCliError(e);
|
|
535
|
+
process.exitCode = 1;
|
|
536
|
+
}
|
|
537
|
+
} else if (command === 'google-cloud' || command === 'gcp' || command === 'gcloud') {
|
|
538
|
+
try {
|
|
539
|
+
const code = await runGoogleCloud(rest);
|
|
540
|
+
if (code) process.exitCode = code;
|
|
541
|
+
} catch (e) {
|
|
542
|
+
reportCliError(e);
|
|
543
|
+
process.exitCode = 1;
|
|
544
|
+
}
|
|
545
|
+
} else if (command === 'billing' || command === 'costs') {
|
|
546
|
+
try {
|
|
547
|
+
const code = await runBilling(rest);
|
|
548
|
+
if (code) process.exitCode = code;
|
|
549
|
+
} catch (e) {
|
|
550
|
+
reportCliError(e);
|
|
551
|
+
process.exitCode = 1;
|
|
552
|
+
}
|
|
553
|
+
} else if (command === 'update') {
|
|
554
|
+
try {
|
|
555
|
+
const code = await runUpdate(rest);
|
|
556
|
+
if (code) process.exitCode = code;
|
|
557
|
+
} catch (e) {
|
|
558
|
+
reportCliError(e);
|
|
559
|
+
process.exitCode = 1;
|
|
560
|
+
}
|
|
420
561
|
} else if (command === 'env') {
|
|
421
562
|
try {
|
|
422
563
|
await runEnv(rest);
|
|
@@ -452,6 +593,13 @@ if (command === '--version' || command === '-v') {
|
|
|
452
593
|
if (!e?.reported) reportCliError(e);
|
|
453
594
|
process.exitCode = 1;
|
|
454
595
|
}
|
|
596
|
+
} else if (command === 'rust' || command === 'wasm' || command === 'rapid-rust') {
|
|
597
|
+
try {
|
|
598
|
+
await runRust(rest);
|
|
599
|
+
} catch (e) {
|
|
600
|
+
if (!e?.reported) reportCliError(e);
|
|
601
|
+
process.exitCode = Number(e?.exitCode || 1);
|
|
602
|
+
}
|
|
455
603
|
} else if (command === 'login') {
|
|
456
604
|
try {
|
|
457
605
|
await runLogin(rest);
|
|
@@ -473,6 +621,14 @@ if (command === '--version' || command === '-v') {
|
|
|
473
621
|
reportCliError(e);
|
|
474
622
|
process.exitCode = 1;
|
|
475
623
|
}
|
|
624
|
+
} else if (command === 'terminal') {
|
|
625
|
+
try {
|
|
626
|
+
const result = await runTerminal(rest);
|
|
627
|
+
if (result?.ok === false) process.exitCode = 1;
|
|
628
|
+
} catch (e) {
|
|
629
|
+
reportCliError(e);
|
|
630
|
+
process.exitCode = 1;
|
|
631
|
+
}
|
|
476
632
|
} else if (command === 'api-key' || command === 'apikey' || command === 'api-keys') {
|
|
477
633
|
try {
|
|
478
634
|
await runApiKey(rest);
|
|
@@ -1,24 +1,110 @@
|
|
|
1
1
|
import { authenticateViaBrowser } from '../lib/auth.js';
|
|
2
2
|
import { clearAccountSession, readAccountSession, saveAccountSession } from '../lib/account-session.js';
|
|
3
|
-
import { collectWhoami, renderWhoami } from './whoami.js';
|
|
3
|
+
import { collectWhoami, renderLoginResult, renderWhoami } from './whoami.js';
|
|
4
|
+
import readline from 'node:readline';
|
|
4
5
|
|
|
5
6
|
function writeLine(write, value = '') { write(`${value}\n`); }
|
|
6
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Interactive provider picker for `agentsam login`.
|
|
10
|
+
* @returns {Promise<'inneranimalmedia'|'google'|'cloudflare'>}
|
|
11
|
+
*/
|
|
12
|
+
export async function promptLoginProvider(options = {}) {
|
|
13
|
+
const input = options.input || process.stdin;
|
|
14
|
+
const output = options.output || process.stdout;
|
|
15
|
+
const write = options.write || ((text) => output.write(text));
|
|
16
|
+
|
|
17
|
+
if (options.provider) {
|
|
18
|
+
const p = String(options.provider).trim().toLowerCase();
|
|
19
|
+
if (p === 'iam' || p === 'inneranimalmedia' || p === '1') return 'inneranimalmedia';
|
|
20
|
+
if (p === 'google' || p === '2') return 'google';
|
|
21
|
+
if (p === 'cloudflare' || p === 'cf' || p === '3') return 'cloudflare';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Non-interactive / CI: default to Inner Animal Media AS (CLI OAuth).
|
|
25
|
+
if (!input?.isTTY || !output?.isTTY || options.skipPrompt === true) {
|
|
26
|
+
return 'inneranimalmedia';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
writeLine(write, '');
|
|
30
|
+
writeLine(write, ' How do you want to sign in?');
|
|
31
|
+
writeLine(write, ' [1] Inner Animal Media (IAM_CLIENT_ID + IAM_OAUTH_ISSUER)');
|
|
32
|
+
writeLine(write, ' [2] Google OAuth (GOOGLE_CLIENT_ID or GOOGLE_DESKTOP_CLIENT_ID)');
|
|
33
|
+
writeLine(write, ' [3] Cloudflare OAuth (CLOUDFLARE_OAUTH_CLIENT_ID)');
|
|
34
|
+
writeLine(write, '');
|
|
35
|
+
|
|
36
|
+
const rl = readline.createInterface({ input, output });
|
|
37
|
+
try {
|
|
38
|
+
const answer = await new Promise((resolve) => {
|
|
39
|
+
rl.question(' Choose [1/2/3] (default 1): ', resolve);
|
|
40
|
+
});
|
|
41
|
+
const raw = String(answer || '').trim().toLowerCase();
|
|
42
|
+
if (!raw || raw === '1' || raw === 'iam' || raw === 'inneranimalmedia') return 'inneranimalmedia';
|
|
43
|
+
if (raw === '2' || raw === 'google') return 'google';
|
|
44
|
+
if (raw === '3' || raw === 'cloudflare' || raw === 'cf') return 'cloudflare';
|
|
45
|
+
writeLine(write, ` Unknown choice "${raw}" — using Inner Animal Media.`);
|
|
46
|
+
return 'inneranimalmedia';
|
|
47
|
+
} finally {
|
|
48
|
+
rl.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
7
52
|
export async function runLogin(argv = [], options = {}) {
|
|
8
|
-
const allowed = new Set(['--json']);
|
|
9
|
-
const unknown = argv.filter((arg) =>
|
|
53
|
+
const allowed = new Set(['--json', '--provider', '--iam', '--google', '--cloudflare']);
|
|
54
|
+
const unknown = argv.filter((arg) => {
|
|
55
|
+
if (allowed.has(arg)) return false;
|
|
56
|
+
if (arg.startsWith('--provider=')) return false;
|
|
57
|
+
return true;
|
|
58
|
+
});
|
|
10
59
|
if (unknown.length) throw new Error(`unknown login option: ${unknown[0]}`);
|
|
11
60
|
const write = options.write || ((text) => process.stdout.write(text));
|
|
12
61
|
const authenticate = options.authenticateImpl || authenticateViaBrowser;
|
|
13
|
-
|
|
62
|
+
|
|
63
|
+
let providerFlag = null;
|
|
64
|
+
for (const arg of argv) {
|
|
65
|
+
if (arg === '--iam') providerFlag = 'inneranimalmedia';
|
|
66
|
+
if (arg === '--google') providerFlag = 'google';
|
|
67
|
+
if (arg === '--cloudflare') providerFlag = 'cloudflare';
|
|
68
|
+
if (arg.startsWith('--provider=')) providerFlag = arg.slice('--provider='.length);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const provider = await promptLoginProvider({
|
|
72
|
+
...options,
|
|
73
|
+
provider: providerFlag || options.provider,
|
|
74
|
+
write,
|
|
75
|
+
input: options.input,
|
|
76
|
+
output: options.output,
|
|
77
|
+
skipPrompt: argv.includes('--json') || options.skipPrompt === true,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const session = await authenticate({
|
|
81
|
+
home: options.home,
|
|
82
|
+
env: options.env || process.env,
|
|
83
|
+
input: options.input,
|
|
84
|
+
output: options.output,
|
|
85
|
+
loginProvider: provider,
|
|
86
|
+
});
|
|
14
87
|
if (!String(session?.access_token || '').trim()) throw new Error('Agent Sam login did not return a browser session credential');
|
|
15
88
|
// authenticateViaBrowser persists by default. Keep injected transports/test flows equivalent.
|
|
16
89
|
if (!readAccountSession({ home: options.home })) saveAccountSession(session, { home: options.home });
|
|
17
90
|
const status = await collectWhoami({ home: options.home, env: options.env || process.env, contextLoader: options.contextLoader });
|
|
18
|
-
if (argv.includes('--json'))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
91
|
+
if (argv.includes('--json')) {
|
|
92
|
+
writeLine(write, JSON.stringify({
|
|
93
|
+
...status,
|
|
94
|
+
login: {
|
|
95
|
+
browser_oauth_saved: true,
|
|
96
|
+
provider,
|
|
97
|
+
authoritative: status.active_auth?.kind || null,
|
|
98
|
+
oauth_authoritative:
|
|
99
|
+
status.active_auth?.kind === 'agentsam_browser_oauth'
|
|
100
|
+
|| status.active_auth?.kind === 'browser_oauth',
|
|
101
|
+
api_key_shadows_oauth:
|
|
102
|
+
Boolean(status.browser_session?.configured)
|
|
103
|
+
&& (status.active_auth?.kind === 'agentsam_api_key' || status.active_auth?.kind === 'api_key'),
|
|
104
|
+
},
|
|
105
|
+
}, null, 2));
|
|
106
|
+
} else {
|
|
107
|
+
write(renderLoginResult(status));
|
|
22
108
|
write(renderWhoami(status));
|
|
23
109
|
}
|
|
24
110
|
return status;
|