@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
package/src/commands/brand.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import {
|
|
4
|
+
cancel,
|
|
5
|
+
confirm,
|
|
6
|
+
intro,
|
|
7
|
+
isCancel,
|
|
8
|
+
note,
|
|
9
|
+
outro,
|
|
10
|
+
select,
|
|
11
|
+
text,
|
|
12
|
+
} from '@clack/prompts';
|
|
3
13
|
import { repositorySnapshot } from '../capabilities/index.js';
|
|
4
14
|
import {
|
|
5
15
|
brandScan,
|
|
@@ -9,13 +19,41 @@ import {
|
|
|
9
19
|
brandGoapActions,
|
|
10
20
|
brandWorldFromPlan,
|
|
11
21
|
brandGoalFromPlan,
|
|
22
|
+
runBrandAssetCommand,
|
|
23
|
+
runBrandPromoteWizard,
|
|
12
24
|
} from '../../packages/agentsam-brand/src/index.js';
|
|
13
25
|
import { planGoap, GOAP_ENGINE } from '../sam/planning/goap.js';
|
|
14
26
|
import { suggestNextActions } from '../progression/index.js';
|
|
15
27
|
import { createRuntimeActivity } from '../ui/runtime-activity.js';
|
|
16
28
|
|
|
29
|
+
const ASSET_ACTIONS = new Set([
|
|
30
|
+
'inspect',
|
|
31
|
+
'derive',
|
|
32
|
+
'assets',
|
|
33
|
+
'promote',
|
|
34
|
+
'publish',
|
|
35
|
+
'verify',
|
|
36
|
+
'presets',
|
|
37
|
+
'pack',
|
|
38
|
+
'preview',
|
|
39
|
+
'ingest',
|
|
40
|
+
'build',
|
|
41
|
+
'templates',
|
|
42
|
+
'roles',
|
|
43
|
+
'optimize',
|
|
44
|
+
'processors',
|
|
45
|
+
]);
|
|
46
|
+
|
|
17
47
|
function parseArgs(argv = []) {
|
|
18
|
-
const out = {
|
|
48
|
+
const out = {
|
|
49
|
+
json: false,
|
|
50
|
+
cwd: process.cwd(),
|
|
51
|
+
dryRun: false,
|
|
52
|
+
goap: false,
|
|
53
|
+
write: false,
|
|
54
|
+
positionals: [],
|
|
55
|
+
passthrough: [...argv],
|
|
56
|
+
};
|
|
19
57
|
for (let i = 0; i < argv.length; i += 1) {
|
|
20
58
|
const a = argv[i];
|
|
21
59
|
if (a === '--json') out.json = true;
|
|
@@ -67,25 +105,44 @@ export async function runBrand(argv = []) {
|
|
|
67
105
|
const action = sub || 'summary';
|
|
68
106
|
|
|
69
107
|
if (action === 'help' || action === '--help') {
|
|
70
|
-
console.log(`usage: agentsam brand [summary|scan|resolve|inspect|plan|apply|verify]
|
|
108
|
+
console.log(`usage: agentsam brand [summary|scan|resolve|inspect|plan|apply|assets|promote|ingest|build|pack|preview|publish|verify|derive|optimize|processors|presets|templates|roles]
|
|
71
109
|
|
|
72
|
-
|
|
73
|
-
scan
|
|
74
|
-
resolve Cluster tokens into inferred roles
|
|
75
|
-
inspect [conflicts] Show conflicts / component families
|
|
76
|
-
plan [--goap] Normalization plan (preserve → improve)
|
|
77
|
-
apply --dry-run Mutation stub (writes require future approval)
|
|
78
|
-
verify Stub verification gate
|
|
110
|
+
Brand intelligence:
|
|
111
|
+
summary|scan|resolve|inspect|plan|apply
|
|
79
112
|
|
|
80
|
-
|
|
81
|
-
|
|
113
|
+
Brand compiler (v2 — brand.pack.json is source of truth):
|
|
114
|
+
agentsam brand ingest ./exports --brand acme --template product-saas
|
|
115
|
+
agentsam brand build --from .agentsam/brand/packs/acme
|
|
116
|
+
agentsam brand preview --from .agentsam/brand/dist/acme
|
|
117
|
+
agentsam brand optimize ./hero.png --role hero.landscape --target web
|
|
118
|
+
agentsam brand processors
|
|
119
|
+
agentsam brand templates
|
|
120
|
+
agentsam brand roles
|
|
121
|
+
|
|
122
|
+
Legacy single-asset (still valid):
|
|
123
|
+
agentsam brand pack --brand acme --asset app-icon --source ./master.png --preset app-icon --out ./acme.zip
|
|
124
|
+
agentsam brand promote --brand acme --asset logo --source - --preset logo
|
|
125
|
+
agentsam brand presets
|
|
126
|
+
|
|
127
|
+
Encoders (sharp / squoosh binary / native / CF) are processors — never the CLI contract.
|
|
128
|
+
ZIP / studio / production publish are compiled representations of brand.pack.json.
|
|
82
129
|
`);
|
|
83
130
|
return;
|
|
84
131
|
}
|
|
85
132
|
|
|
133
|
+
// Asset/promote surface → shared controller (also used by agentsam-brand bin)
|
|
134
|
+
if (ASSET_ACTIONS.has(action)) {
|
|
135
|
+
const code = await runBrandAssetCommand(argv, {
|
|
136
|
+
runWizard: runBrandPromoteWizard,
|
|
137
|
+
prompts: { intro, outro, cancel, isCancel, select, text, confirm, note },
|
|
138
|
+
});
|
|
139
|
+
if (typeof code === 'number' && code !== 0) process.exitCode = code;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
86
143
|
if (action === 'apply') {
|
|
87
144
|
if (!opts.dryRun) {
|
|
88
|
-
console.error('brand apply requires --dry-run until mutations are gated
|
|
145
|
+
console.error('brand apply requires --dry-run until mutations are gated');
|
|
89
146
|
process.exitCode = 2;
|
|
90
147
|
return;
|
|
91
148
|
}
|
|
@@ -99,17 +156,6 @@ Options:
|
|
|
99
156
|
return;
|
|
100
157
|
}
|
|
101
158
|
|
|
102
|
-
if (action === 'verify') {
|
|
103
|
-
const out = {
|
|
104
|
-
capability: 'brand.verify',
|
|
105
|
-
status: 'stub',
|
|
106
|
-
message: 'Verify will re-scan and diff against .agentsam/brand/contract.json',
|
|
107
|
-
};
|
|
108
|
-
if (opts.json) console.log(JSON.stringify(out, null, 2));
|
|
109
|
-
else console.log(out.message);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
159
|
const tty = process.stdout.isTTY && !opts.json;
|
|
114
160
|
const activity = tty ? createRuntimeActivity({ label: 'Brand intelligence' }) : null;
|
|
115
161
|
const onEvent = (ev) => {
|
|
@@ -123,11 +169,7 @@ Options:
|
|
|
123
169
|
const snapshot = await loadSnapshot(opts);
|
|
124
170
|
|
|
125
171
|
if (action === 'summary' || action === 'scan' || action === 'resolve' || action === 'inspect' || action === 'plan') {
|
|
126
|
-
const scan = await brandScan({
|
|
127
|
-
cwd: opts.cwd,
|
|
128
|
-
snapshot,
|
|
129
|
-
onEvent,
|
|
130
|
-
});
|
|
172
|
+
const scan = await brandScan({ cwd: opts.cwd, snapshot, onEvent });
|
|
131
173
|
|
|
132
174
|
if (action === 'scan') {
|
|
133
175
|
const enriched = attachProgression('brand.scan', scan, opts.json);
|
|
@@ -137,8 +179,6 @@ Options:
|
|
|
137
179
|
console.log(`\nBrand scan complete · ${scan.repository.snapshot_id}`);
|
|
138
180
|
console.log(` colors ${scan.tokens.colors.length}`);
|
|
139
181
|
console.log(` conflicts ${scan.conflicts.length}`);
|
|
140
|
-
console.log(` css files ${scan.sources.css}`);
|
|
141
|
-
console.log(` components ${scan.sources.components}`);
|
|
142
182
|
console.log(` hash ${scan.content_hash}`);
|
|
143
183
|
}
|
|
144
184
|
return;
|
|
@@ -152,28 +192,21 @@ Options:
|
|
|
152
192
|
else {
|
|
153
193
|
console.log(`\nBrand resolve · ${Object.keys(resolved.resolved.colors).length} color roles`);
|
|
154
194
|
console.log(` ambiguities ${resolved.ambiguities.length}`);
|
|
155
|
-
for (const a of resolved.ambiguities.slice(0, 5)) {
|
|
156
|
-
console.log(` ? ${a.question}`);
|
|
157
|
-
}
|
|
158
195
|
}
|
|
159
196
|
return;
|
|
160
197
|
}
|
|
161
198
|
|
|
162
199
|
if (action === 'inspect') {
|
|
200
|
+
// brand intelligence inspect (conflicts) — asset inspect is ASSET_ACTIONS
|
|
163
201
|
const focus = rest[0] || 'conflicts';
|
|
164
202
|
const payload = focus === 'components'
|
|
165
203
|
? { capability: 'brand.inspect', focus, components: scan.components, patterns: scan.patterns }
|
|
166
204
|
: { capability: 'brand.inspect', focus, conflicts: scan.conflicts, colors: scan.tokens.colors.slice(0, 20) };
|
|
167
205
|
if (opts.json) console.log(JSON.stringify(payload, null, 2));
|
|
168
|
-
else
|
|
169
|
-
console.log('\nComponent families');
|
|
170
|
-
for (const [k, v] of Object.entries(scan.components).slice(0, 20)) {
|
|
171
|
-
console.log(` ${k} ×${v.count}`);
|
|
172
|
-
}
|
|
173
|
-
} else {
|
|
206
|
+
else {
|
|
174
207
|
console.log(`\nConflicts (${scan.conflicts.length})`);
|
|
175
208
|
for (const c of scan.conflicts.slice(0, 15)) {
|
|
176
|
-
console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance}
|
|
209
|
+
console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance}`);
|
|
177
210
|
}
|
|
178
211
|
}
|
|
179
212
|
return;
|
|
@@ -183,7 +216,6 @@ Options:
|
|
|
183
216
|
return runBrandPlanInner({ scan, resolved, opts });
|
|
184
217
|
}
|
|
185
218
|
|
|
186
|
-
// summary
|
|
187
219
|
const contract = buildBrandContractDraft({ scan, resolved });
|
|
188
220
|
const plan = brandPlan({ scan, resolved, contract });
|
|
189
221
|
const { next_actions } = suggestNextActions({ capability: 'brand.scan', result: scan });
|
|
@@ -201,8 +233,6 @@ Options:
|
|
|
201
233
|
else {
|
|
202
234
|
console.log(`\nBrand · ${scan.repository.snapshot_id}`);
|
|
203
235
|
console.log(` ${plan.summary.colors} colors · ${plan.summary.near_duplicate_pairs} near-duplicates`);
|
|
204
|
-
console.log(` ${plan.summary.button_families} button families · ${plan.summary.header_families} header/nav families`);
|
|
205
|
-
console.log(` confidence colors=${resolved.confidence.colors} typography=${resolved.confidence.typography}`);
|
|
206
236
|
printNext(next_actions);
|
|
207
237
|
}
|
|
208
238
|
}
|
|
@@ -231,11 +261,6 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
|
|
|
231
261
|
cost: planned.total_cost ?? planned.cost,
|
|
232
262
|
engine: planned.engine || GOAP_ENGINE,
|
|
233
263
|
status: planned.status,
|
|
234
|
-
expanded_states: planned.expanded_states,
|
|
235
|
-
generated_states: planned.generated_states,
|
|
236
|
-
frontier_peak: planned.frontier_peak,
|
|
237
|
-
elapsed_ms: planned.elapsed_ms,
|
|
238
|
-
error: planned.error,
|
|
239
264
|
};
|
|
240
265
|
}
|
|
241
266
|
const enriched = attachProgression('brand.plan', plan, opts.json);
|
|
@@ -250,8 +275,6 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
|
|
|
250
275
|
else {
|
|
251
276
|
console.log('\nBrand coherence plan');
|
|
252
277
|
console.log(` philosophy ${plan.philosophy}`);
|
|
253
|
-
console.log(` colors ${plan.summary.colors} (${plan.summary.near_duplicate_pairs} near-dup pairs)`);
|
|
254
|
-
console.log(' steps');
|
|
255
278
|
for (const [i, s] of plan.steps.entries()) {
|
|
256
279
|
console.log(` ${i + 1}. [${s.action}] ${s.title}`);
|
|
257
280
|
}
|
|
@@ -263,16 +286,7 @@ export async function runPlan(argv = []) {
|
|
|
263
286
|
const opts = parseArgs(argv);
|
|
264
287
|
const [domain, ...rest] = opts.positionals;
|
|
265
288
|
if (!domain || domain === 'help') {
|
|
266
|
-
console.log(`usage: agentsam plan <domain
|
|
267
|
-
|
|
268
|
-
Domains:
|
|
269
|
-
brand [--goap] [--json] [--write]
|
|
270
|
-
security (use: agentsam security scan)
|
|
271
|
-
repository (use: agentsam inspect)
|
|
272
|
-
release (use: agentsam status / package verify)
|
|
273
|
-
|
|
274
|
-
Composable grammar: agentsam plan brand
|
|
275
|
-
`);
|
|
289
|
+
console.log(`usage: agentsam plan <domain>\n\nDomains:\n brand [--goap] [--json] [--write]\n`);
|
|
276
290
|
return;
|
|
277
291
|
}
|
|
278
292
|
if (domain === 'brand') {
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Agent Sam cheat-sheet — gcloud-like command groups.
|
|
3
|
+
* Old top-level commands remain as compatibility aliases.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const GROUPS = Object.freeze([
|
|
7
|
+
{
|
|
8
|
+
id: 'work',
|
|
9
|
+
label: 'Work',
|
|
10
|
+
commands: [
|
|
11
|
+
['project / create', 'Scaffold or enter a project'],
|
|
12
|
+
['work / goap', 'Goals, blackboard, plans'],
|
|
13
|
+
['brand / plan', 'Brand intelligence and composable plans'],
|
|
14
|
+
['artifacts', 'Receipts and deploy evidence'],
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'repository',
|
|
19
|
+
label: 'Repository',
|
|
20
|
+
commands: [
|
|
21
|
+
['inspect', 'Bounded repository authority view'],
|
|
22
|
+
['recon', 'Bounded-worker finding packets'],
|
|
23
|
+
['codebaseindex', 'AST ingest + optional embeddings'],
|
|
24
|
+
['merkle', 'Integrity snapshots'],
|
|
25
|
+
['security', 'Dependency + trust-boundary scan'],
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'runtime',
|
|
30
|
+
label: 'Runtime',
|
|
31
|
+
commands: [
|
|
32
|
+
['terminal / shell', 'Interactive slash-command shell'],
|
|
33
|
+
['connections', 'Account, terminal, Worker, Cloudflare evidence'],
|
|
34
|
+
['tunnel', 'Real Cloudflare Tunnels via Wrangler'],
|
|
35
|
+
['go', 'Go product discover/build/deploy'],
|
|
36
|
+
['dockerize', 'Supported containers'],
|
|
37
|
+
['compute', 'Google Cloud VM / IAM helpers'],
|
|
38
|
+
['gcloud auth login', 'Desktop PKCE Google Cloud connection (auto callback)'],
|
|
39
|
+
['gcloud auth login --web', 'Hosted Local Studio identity (openid/email/profile)'],
|
|
40
|
+
['gcloud auth login --sdk', 'Native Google Cloud SDK OAuth (optional)'],
|
|
41
|
+
['google-cloud', 'Projects · compute · IAM SAs · billing · doctor'],
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'providers',
|
|
46
|
+
label: 'Providers',
|
|
47
|
+
commands: [
|
|
48
|
+
['setup', 'Discover → plan → approve → install (brew-style)'],
|
|
49
|
+
['providers', 'Configure / verify model + infra credentials'],
|
|
50
|
+
['models', 'Provider-verified model catalog'],
|
|
51
|
+
['cloudflare', 'Wrangler reads + Worker profiles'],
|
|
52
|
+
['google-cloud', 'Customer GCP connection inventory'],
|
|
53
|
+
['gcloud auth login', 'Desktop PKCE Google Cloud (auto callback)'],
|
|
54
|
+
['credentials audit', 'Configured · verified · drift (names only)'],
|
|
55
|
+
['plugins', 'Install and manage plugins'],
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'data',
|
|
60
|
+
label: 'Data',
|
|
61
|
+
commands: [
|
|
62
|
+
['db', 'Project-local SQLite'],
|
|
63
|
+
['knowledge / search', 'Indexed retrieval'],
|
|
64
|
+
['autorag', 'AutoRAG helpers'],
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'ai',
|
|
69
|
+
label: 'AI',
|
|
70
|
+
commands: [
|
|
71
|
+
['models', 'Hosted + local model probes'],
|
|
72
|
+
['skills', 'Portable skill vocabulary'],
|
|
73
|
+
['context', 'Context economics + git bridge'],
|
|
74
|
+
['usage / session', 'Spend and resume receipts'],
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'identity',
|
|
79
|
+
label: 'Identity',
|
|
80
|
+
commands: [
|
|
81
|
+
['whoami', 'Account + safe credential status'],
|
|
82
|
+
['login / logout', 'Browser OAuth session'],
|
|
83
|
+
['env', 'Vault/keychain shell loader'],
|
|
84
|
+
['api-key', 'Create/rotate aak_* keys'],
|
|
85
|
+
['identity', 'Portable OAuth portal surfaces'],
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: 'apps',
|
|
90
|
+
label: 'Apps',
|
|
91
|
+
commands: [
|
|
92
|
+
['app / local-studio', 'Bundled Local Studio launcher'],
|
|
93
|
+
['cad', 'CAD project tools'],
|
|
94
|
+
['brand', 'Brand intelligence'],
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
id: 'system',
|
|
99
|
+
label: 'System',
|
|
100
|
+
commands: [
|
|
101
|
+
['status', 'Account · models · terminal · live deploy'],
|
|
102
|
+
['doctor / credentials audit --verify', 'Auth + drift health'],
|
|
103
|
+
['update', 'Component update preview (gcloud-like)'],
|
|
104
|
+
['billing', 'Billing account relationships (not --billing-project)'],
|
|
105
|
+
['cheat-sheet', 'This page'],
|
|
106
|
+
['version', 'agentsam --version'],
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
|
|
111
|
+
export function listCheatSheetGroups() {
|
|
112
|
+
return GROUPS.map((group) => ({
|
|
113
|
+
id: group.id,
|
|
114
|
+
label: group.label,
|
|
115
|
+
commands: group.commands.map(([cmd, summary]) => ({ cmd, summary })),
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function renderCheatSheet(version) {
|
|
120
|
+
const lines = [
|
|
121
|
+
'',
|
|
122
|
+
` Agent Sam cheat-sheet${version ? ` · v${version}` : ''}`,
|
|
123
|
+
' Organized hierarchy · old top-level commands remain compatibility aliases.',
|
|
124
|
+
'',
|
|
125
|
+
];
|
|
126
|
+
for (const group of GROUPS) {
|
|
127
|
+
lines.push(` ${group.label}`);
|
|
128
|
+
for (const [cmd, summary] of group.commands) {
|
|
129
|
+
lines.push(` ${String(cmd).padEnd(42)} ${summary}`);
|
|
130
|
+
}
|
|
131
|
+
lines.push('');
|
|
132
|
+
}
|
|
133
|
+
lines.push(' Failure follow-through');
|
|
134
|
+
lines.push(' agentsam credentials remediate -- gcloud edge-cloud service-accounts keys create');
|
|
135
|
+
lines.push(' agentsam credentials audit --verify --drift --names-only');
|
|
136
|
+
lines.push('');
|
|
137
|
+
lines.push(' Docs');
|
|
138
|
+
lines.push(' docs/contracts/environment-vocabulary.md');
|
|
139
|
+
lines.push(' docs/AUTH_IDENTITY_CONTRACT.md');
|
|
140
|
+
lines.push('');
|
|
141
|
+
return lines.join('\n');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function runCheatSheet(argv = [], options = {}) {
|
|
145
|
+
const write = options.write || ((s) => process.stdout.write(s));
|
|
146
|
+
const json = argv.includes('--json');
|
|
147
|
+
const version = options.version || '';
|
|
148
|
+
if (json) {
|
|
149
|
+
write(JSON.stringify({ schema_version: 'agentsam-cheat-sheet-v1', version, groups: listCheatSheetGroups() }, null, 2) + '\n');
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
write(renderCheatSheet(version));
|
|
153
|
+
return 0;
|
|
154
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentsam_cf_browser_oauth — authorize Cloudflare API scopes via browser OAuth.
|
|
3
|
+
*
|
|
4
|
+
* Feature packs expand to scoped OAuth requests so users never scroll 300+ CF
|
|
5
|
+
* permissions. Flow: IAM-authenticated CLI → ENTER → open authorize URL → CF consent.
|
|
6
|
+
*/
|
|
7
|
+
import { resolveAccountAuthority } from '../lib/auth.js';
|
|
8
|
+
import { promptToOpenUrl } from '../lib/open-url.js';
|
|
9
|
+
import {
|
|
10
|
+
LOCAL_STUDIO_APP_ID,
|
|
11
|
+
resolveLocalStudioHostOrigin,
|
|
12
|
+
resolvePlatformAccountIssuer,
|
|
13
|
+
} from '../lib/app-authority.js';
|
|
14
|
+
import {
|
|
15
|
+
listCloudflareFeaturePacks,
|
|
16
|
+
getCloudflareFeaturePack,
|
|
17
|
+
scopesForFeaturePacks,
|
|
18
|
+
scopesForCapabilities,
|
|
19
|
+
} from '../../packages/connectors/cloudflare/src/index.js';
|
|
20
|
+
|
|
21
|
+
function clean(value) {
|
|
22
|
+
return value == null ? '' : String(value).trim();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function writeLine(write, value = '') {
|
|
26
|
+
write(`${value}\n`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function parseLoginArgs(argv = []) {
|
|
30
|
+
const out = {
|
|
31
|
+
packs: [],
|
|
32
|
+
capabilities: [],
|
|
33
|
+
json: false,
|
|
34
|
+
listPacks: false,
|
|
35
|
+
help: false,
|
|
36
|
+
open: true,
|
|
37
|
+
};
|
|
38
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
39
|
+
const arg = argv[i];
|
|
40
|
+
if (arg === '--json') out.json = true;
|
|
41
|
+
else if (arg === '--help' || arg === '-h') out.help = true;
|
|
42
|
+
else if (arg === '--list-packs' || arg === 'packs') out.listPacks = true;
|
|
43
|
+
else if (arg === '--no-open') out.open = false;
|
|
44
|
+
else if (arg === '--pack' || arg === '--packs') {
|
|
45
|
+
const raw = argv[++i] || '';
|
|
46
|
+
out.packs.push(...raw.split(',').map((s) => s.trim()).filter(Boolean));
|
|
47
|
+
} else if (arg.startsWith('--pack=')) {
|
|
48
|
+
out.packs.push(...arg.slice('--pack='.length).split(',').map((s) => s.trim()).filter(Boolean));
|
|
49
|
+
} else if (arg === '--capability' || arg === '--capabilities') {
|
|
50
|
+
const raw = argv[++i] || '';
|
|
51
|
+
out.capabilities.push(...raw.split(',').map((s) => s.trim()).filter(Boolean));
|
|
52
|
+
} else if (arg.startsWith('--capability=')) {
|
|
53
|
+
out.capabilities.push(...arg.slice('--capability='.length).split(',').map((s) => s.trim()).filter(Boolean));
|
|
54
|
+
} else if (!arg.startsWith('-') && getCloudflareFeaturePack(arg)) {
|
|
55
|
+
out.packs.push(arg);
|
|
56
|
+
} else {
|
|
57
|
+
throw new Error(`unknown cloudflare login option: ${arg}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const LOGIN_HELP = `Agent Sam · Cloudflare browser OAuth (agentsam_cf_browser_oauth)
|
|
64
|
+
|
|
65
|
+
Authorize Cloudflare API access without picking from 300+ scopes.
|
|
66
|
+
Feature packs expand to OAuth scopes on the Local Studio APP host.
|
|
67
|
+
|
|
68
|
+
Namespaces (do not collapse):
|
|
69
|
+
APP.id local-studio
|
|
70
|
+
HOST.origin from apps/local-studio/agentsam.app.json hosts[]
|
|
71
|
+
PLATFORM issuer IAM_OAUTH_ISSUER (account API — separate)
|
|
72
|
+
|
|
73
|
+
agentsam cloudflare login --pack agentsam
|
|
74
|
+
agentsam cloudflare login --pack data,ai
|
|
75
|
+
agentsam cloudflare login --capability cloudflare.d1,cloudflare.hyperdrive
|
|
76
|
+
agentsam cloudflare login --list-packs
|
|
77
|
+
agentsam cloudflare authorize --pack data # alias
|
|
78
|
+
|
|
79
|
+
Flow
|
|
80
|
+
1. Account auth: AGENTSAM_API_KEY + IAM_OAUTH_ISSUER (PLATFORM).
|
|
81
|
+
2. CLI prints Local Studio HOST authorize URL; press ENTER to open.
|
|
82
|
+
3. Cloudflare consent for that pack only (AgentSam Local Studio OAuth client).
|
|
83
|
+
`;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Build Cloudflare connection OAuth start URL from local-studio APP HOST.
|
|
87
|
+
* Packs expand client-side; HOST serves /api/connections/cloudflare/start.
|
|
88
|
+
*/
|
|
89
|
+
export function buildCloudflareBrowserOAuthStartUrl(options = {}) {
|
|
90
|
+
const packs = (options.packs || []).map((p) => String(p).trim().toLowerCase()).filter(Boolean);
|
|
91
|
+
const capabilities = (options.capabilities || []).map((c) => String(c).trim()).filter(Boolean);
|
|
92
|
+
|
|
93
|
+
for (const id of packs) {
|
|
94
|
+
if (id !== 'baseline' && !getCloudflareFeaturePack(id)) {
|
|
95
|
+
const err = new Error(`unknown Cloudflare feature pack: ${id}`);
|
|
96
|
+
err.code = 'unknown_feature_pack';
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const effectivePacks = packs.length ? packs : ['agentsam'];
|
|
102
|
+
const scopes = scopesForFeaturePacks(effectivePacks, capabilities);
|
|
103
|
+
const hostOrigin = resolveLocalStudioHostOrigin({
|
|
104
|
+
root: options.root,
|
|
105
|
+
role: options.hostRole || 'production',
|
|
106
|
+
hostId: options.hostId,
|
|
107
|
+
});
|
|
108
|
+
const startPath = options.startPath
|
|
109
|
+
|| '/api/connections/cloudflare/start';
|
|
110
|
+
const start = new URL(startPath, `${hostOrigin}/`);
|
|
111
|
+
start.searchParams.set('packs', effectivePacks.join(','));
|
|
112
|
+
if (capabilities.length) start.searchParams.set('capabilities', capabilities.join(','));
|
|
113
|
+
if (options.returnTo) start.searchParams.set('return_to', options.returnTo);
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
kind: 'agentsam_cf_browser_oauth',
|
|
117
|
+
app_id: LOCAL_STUDIO_APP_ID,
|
|
118
|
+
host_origin: hostOrigin,
|
|
119
|
+
platform_issuer: resolvePlatformAccountIssuer(options.env || process.env, options.issuer || ''),
|
|
120
|
+
authorize_url: start.toString(),
|
|
121
|
+
path_kind: 'app_host_connections',
|
|
122
|
+
packs: effectivePacks,
|
|
123
|
+
capabilities,
|
|
124
|
+
scope_count: scopes.length,
|
|
125
|
+
scopes,
|
|
126
|
+
packs_detail: effectivePacks.map((id) => {
|
|
127
|
+
const pack = getCloudflareFeaturePack(id);
|
|
128
|
+
return pack
|
|
129
|
+
? { id: pack.id, label: pack.label, description: pack.description, capabilities: pack.capabilities }
|
|
130
|
+
: { id, label: id };
|
|
131
|
+
}),
|
|
132
|
+
note: 'OAuth client + scopes authorize on local-studio HOST; account identity stays on PLATFORM IAM_OAUTH_ISSUER.',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export async function runCloudflareBrowserOAuthLogin(argv = [], options = {}) {
|
|
137
|
+
const args = parseLoginArgs(argv);
|
|
138
|
+
const write = options.write || ((text) => process.stdout.write(text));
|
|
139
|
+
const env = options.env || process.env;
|
|
140
|
+
|
|
141
|
+
if (args.help) {
|
|
142
|
+
write(LOGIN_HELP);
|
|
143
|
+
return { ok: true, help: true };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (args.listPacks) {
|
|
147
|
+
const packs = listCloudflareFeaturePacks().map((pack) => ({
|
|
148
|
+
id: pack.id,
|
|
149
|
+
label: pack.label,
|
|
150
|
+
description: pack.description,
|
|
151
|
+
capabilities: pack.capabilities,
|
|
152
|
+
scope_count: scopesForCapabilities({ capabilities: pack.capabilities, includeBaseline: true }).length,
|
|
153
|
+
}));
|
|
154
|
+
const payload = {
|
|
155
|
+
schema: 'agentsam.cloudflare.feature_packs.v1',
|
|
156
|
+
kind: 'agentsam_cf_browser_oauth',
|
|
157
|
+
mitigation: 'Authorize by pack (product need), not by scrolling 300+ Cloudflare scopes. Upgrade later with another --pack.',
|
|
158
|
+
packs,
|
|
159
|
+
};
|
|
160
|
+
write(args.json ? `${JSON.stringify(payload, null, 2)}\n` : LOGIN_HELP);
|
|
161
|
+
return payload;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const authority = await (options.authorityLoader || resolveAccountAuthority)({
|
|
165
|
+
env,
|
|
166
|
+
home: options.home,
|
|
167
|
+
fetchImpl: options.fetchImpl,
|
|
168
|
+
refreshImpl: options.refreshImpl,
|
|
169
|
+
});
|
|
170
|
+
if (!authority.value) {
|
|
171
|
+
const err = new Error(
|
|
172
|
+
authority.error
|
|
173
|
+
|| 'Sign in first: agentsam login (or export AGENTSAM_API_KEY)',
|
|
174
|
+
);
|
|
175
|
+
err.code = 'account_auth_required';
|
|
176
|
+
throw err;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const plan = buildCloudflareBrowserOAuthStartUrl({
|
|
180
|
+
env,
|
|
181
|
+
packs: args.packs,
|
|
182
|
+
capabilities: args.capabilities,
|
|
183
|
+
issuer: options.issuer,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (args.json && !args.open) {
|
|
187
|
+
write(`${JSON.stringify(plan, null, 2)}\n`);
|
|
188
|
+
return plan;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
writeLine(write, '');
|
|
192
|
+
writeLine(write, ' Agent Sam · Cloudflare browser OAuth');
|
|
193
|
+
writeLine(write, ` kind agentsam_cf_browser_oauth`);
|
|
194
|
+
writeLine(write, ` packs ${plan.packs.join(', ')}`);
|
|
195
|
+
writeLine(write, ` scopes ${plan.scope_count} (pack-expanded; not the full CF catalog)`);
|
|
196
|
+
for (const pack of plan.packs_detail) {
|
|
197
|
+
writeLine(write, ` · ${pack.id.padEnd(12)} ${pack.description || pack.label || ''}`);
|
|
198
|
+
}
|
|
199
|
+
writeLine(write, '');
|
|
200
|
+
|
|
201
|
+
if (args.open !== false) {
|
|
202
|
+
const promptImpl = options.promptToOpenUrlImpl || promptToOpenUrl;
|
|
203
|
+
await promptImpl(plan.authorize_url, {
|
|
204
|
+
heading: 'Authorize Cloudflare for AgentSam at:',
|
|
205
|
+
prompt: 'Press ENTER to open Cloudflare consent in your browser.',
|
|
206
|
+
input: options.input,
|
|
207
|
+
output: options.output || process.stdout,
|
|
208
|
+
openImpl: options.openImpl,
|
|
209
|
+
});
|
|
210
|
+
writeLine(write, ' After approving scopes in the browser, return here.');
|
|
211
|
+
writeLine(write, ' Next: agentsam cloudflare status --json');
|
|
212
|
+
writeLine(write, ' agentsam whoami --json');
|
|
213
|
+
writeLine(write, '');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (args.json) write(`${JSON.stringify(plan, null, 2)}\n`);
|
|
217
|
+
return { ok: true, ...plan };
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function isCloudflareLoginFamily(family) {
|
|
221
|
+
return family === 'login' || family === 'authorize' || family === 'oauth' || family === 'packs';
|
|
222
|
+
}
|