@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/mcp.js
CHANGED
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
deleteMcpServer,
|
|
3
3
|
detectInstalledClients,
|
|
4
|
+
getCloudflareMcpBundle,
|
|
4
5
|
inspectClientAdapter,
|
|
5
|
-
|
|
6
|
+
listCloudflareMcpBundles,
|
|
6
7
|
listKnownServers,
|
|
7
8
|
listMcpServers,
|
|
8
9
|
listMcpTools,
|
|
10
|
+
listOfferableMcpServerConnections,
|
|
9
11
|
listRegisteredClients,
|
|
10
12
|
pingMcpServer,
|
|
11
13
|
readMcpServer,
|
|
12
14
|
removeServerFromClient,
|
|
13
15
|
resolveServerPreset,
|
|
16
|
+
scopesForCloudflareMcpBundle,
|
|
14
17
|
syncServerToClient,
|
|
15
18
|
writeMcpServer,
|
|
16
19
|
} from '../mcp/index.js';
|
|
20
|
+
import { createMcpServerProject } from '../lib/scaffold/mcp-server.js';
|
|
21
|
+
import { listMcpServerPresets } from '../lib/scaffold/templates/mcp-server/presets.js';
|
|
17
22
|
|
|
18
23
|
function clean(value) {
|
|
19
24
|
return value == null ? '' : String(value).trim();
|
|
@@ -32,14 +37,33 @@ export function parseMcpArgs(argv = []) {
|
|
|
32
37
|
let token = '';
|
|
33
38
|
let json = false;
|
|
34
39
|
let catalog = false;
|
|
40
|
+
let bundles = false;
|
|
41
|
+
let pack = '';
|
|
42
|
+
let preset = '';
|
|
43
|
+
let output = '';
|
|
44
|
+
let issuer = '';
|
|
45
|
+
let audience = '';
|
|
46
|
+
let displayName = '';
|
|
47
|
+
let authMode = '';
|
|
48
|
+
let force = false;
|
|
35
49
|
|
|
36
50
|
for (let i = 1; i < argv.length; i += 1) {
|
|
37
51
|
const arg = argv[i];
|
|
38
52
|
if (arg === '--client') client = argv[++i] || '';
|
|
39
53
|
else if (arg === '--url') url = argv[++i] || '';
|
|
40
54
|
else if (arg === '--token') token = argv[++i] || '';
|
|
55
|
+
else if (arg === '--pack') pack = argv[++i] || '';
|
|
56
|
+
else if (arg === '--preset') preset = argv[++i] || '';
|
|
57
|
+
else if (arg === '--output' || arg === '--out') output = argv[++i] || '';
|
|
58
|
+
else if (arg === '--issuer') issuer = argv[++i] || '';
|
|
59
|
+
else if (arg === '--audience') audience = argv[++i] || '';
|
|
60
|
+
else if (arg === '--display-name') displayName = argv[++i] || '';
|
|
61
|
+
else if (arg === '--public') authMode = 'public';
|
|
62
|
+
else if (arg === '--oauth') authMode = 'oauth';
|
|
63
|
+
else if (arg === '--force') force = true;
|
|
41
64
|
else if (arg === '--json') json = true;
|
|
42
65
|
else if (arg === '--catalog' || arg === '--all') catalog = true;
|
|
66
|
+
else if (arg === '--bundles' || arg === '--cloudflare') bundles = true;
|
|
43
67
|
else if (arg === '--help' || arg === '-h') help = true;
|
|
44
68
|
}
|
|
45
69
|
|
|
@@ -49,41 +73,72 @@ export function parseMcpArgs(argv = []) {
|
|
|
49
73
|
client: client.toLowerCase(),
|
|
50
74
|
url,
|
|
51
75
|
token,
|
|
76
|
+
pack: pack.toLowerCase(),
|
|
77
|
+
preset: preset.toLowerCase(),
|
|
78
|
+
output,
|
|
79
|
+
issuer,
|
|
80
|
+
audience,
|
|
81
|
+
displayName,
|
|
82
|
+
authMode,
|
|
83
|
+
force,
|
|
52
84
|
json,
|
|
53
85
|
catalog,
|
|
86
|
+
bundles,
|
|
54
87
|
help,
|
|
55
88
|
};
|
|
56
89
|
}
|
|
57
90
|
|
|
58
91
|
function renderHelp(options = {}) {
|
|
59
92
|
const clients = listRegisteredClients(options);
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
93
|
+
const cfBundles = listCloudflareMcpBundles();
|
|
94
|
+
const offerable = listOfferableMcpServerConnections();
|
|
95
|
+
const templateRows = listMcpServerPresets().map((preset) =>
|
|
96
|
+
` ${preset.key.padEnd(18)} ${preset.display_name}`
|
|
97
|
+
).join('\n');
|
|
98
|
+
|
|
99
|
+
const presetRows = offerable.map((s) => {
|
|
100
|
+
const key = (s.connection_key || '').padEnd(28);
|
|
101
|
+
return ` ${key} ${s.url}`;
|
|
66
102
|
}).join('\n');
|
|
67
103
|
|
|
68
104
|
const clientRows = clients.map((c) => {
|
|
69
105
|
const key = c.client_key.padEnd(24);
|
|
70
|
-
|
|
71
|
-
|
|
106
|
+
return ` ${key} ${c.display_name}`;
|
|
107
|
+
}).join('\n');
|
|
108
|
+
|
|
109
|
+
const bundleRows = cfBundles.map((b) => {
|
|
110
|
+
const key = b.name.padEnd(28);
|
|
111
|
+
const packs = (b.feature_packs || []).join(',') || '—';
|
|
112
|
+
return ` ${key} packs=[${packs}] manage=${(b.portal_manage_scopes || []).join(',')}`;
|
|
72
113
|
}).join('\n');
|
|
73
114
|
|
|
74
115
|
return `
|
|
75
|
-
AgentSam · MCP Client Management
|
|
116
|
+
AgentSam · MCP Factory + Client Management
|
|
76
117
|
|
|
77
118
|
Usage:
|
|
119
|
+
agentsam mcp create <name> [--preset <preset>] [--output <dir>] [--issuer <url>] [--audience <url>] [--oauth|--public] [--force]
|
|
78
120
|
agentsam mcp add <name> [--client <client>|all] [--url <url>] [--token <token>]
|
|
79
|
-
agentsam mcp list [--catalog|--
|
|
121
|
+
agentsam mcp list [--catalog|--bundles] [--json]
|
|
80
122
|
agentsam mcp status [<name>] [--json]
|
|
81
123
|
agentsam mcp doctor [<name>] [--json]
|
|
82
124
|
agentsam mcp remove <name> [--client <client>|all]
|
|
125
|
+
agentsam mcp scopes <cloudflare-bundle> [--json]
|
|
126
|
+
|
|
127
|
+
Notes:
|
|
128
|
+
• Client adapters = IDE hosts (cursor, claude, chatgpt, agentsam).
|
|
129
|
+
• Offerable MCP server connections include every CF portal hostname (see below).
|
|
130
|
+
• CF OAuth: pick packs (agentsam, developer_platform, zero_trust, …) or pack \`all\` (~315 scopes).
|
|
131
|
+
• mcp-portals.read/write come with the agentsam pack for CF-connected portal management.
|
|
132
|
+
|
|
133
|
+
MCP server templates:
|
|
134
|
+
${templateRows}
|
|
83
135
|
|
|
84
|
-
|
|
136
|
+
Offerable MCP server connections:
|
|
85
137
|
${presetRows}
|
|
86
138
|
|
|
139
|
+
Cloudflare MCP bundles (granular packs):
|
|
140
|
+
${bundleRows}
|
|
141
|
+
|
|
87
142
|
Recognized client adapters:
|
|
88
143
|
${clientRows}
|
|
89
144
|
`;
|
|
@@ -100,19 +155,68 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
100
155
|
|
|
101
156
|
const { subcommand, target } = args;
|
|
102
157
|
|
|
158
|
+
if (subcommand === 'create') {
|
|
159
|
+
if (!target) throw new Error('mcp_project_name_required');
|
|
160
|
+
const preset = args.preset || 'heuristics';
|
|
161
|
+
const result = await createMcpServerProject({
|
|
162
|
+
projectName: target,
|
|
163
|
+
preset,
|
|
164
|
+
output: args.output || target,
|
|
165
|
+
issuer: args.issuer || undefined,
|
|
166
|
+
audience: args.audience || undefined,
|
|
167
|
+
displayName: args.displayName || undefined,
|
|
168
|
+
authMode: args.authMode || undefined,
|
|
169
|
+
force: args.force,
|
|
170
|
+
}, {
|
|
171
|
+
cwd: options.cwd || process.cwd(),
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
if (args.json) {
|
|
175
|
+
write(JSON.stringify(result, null, 2) + '\n');
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
write(`\n ✓ Generated MCP server: ${result.display_name}\n`);
|
|
180
|
+
write(` preset: ${result.preset}\n`);
|
|
181
|
+
write(` output: ${result.output_dir}\n`);
|
|
182
|
+
write(` manifest: ${result.manifest_path}\n`);
|
|
183
|
+
write(` endpoint: ${result.transport} ${result.endpoint_path}\n\n`);
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
|
|
103
187
|
if (subcommand === 'list') {
|
|
188
|
+
if (args.bundles) {
|
|
189
|
+
const bundles = listCloudflareMcpBundles().map((b) => ({
|
|
190
|
+
...b,
|
|
191
|
+
suggested_oauth_scopes: scopesForCloudflareMcpBundle(b.name),
|
|
192
|
+
}));
|
|
193
|
+
if (args.json) {
|
|
194
|
+
write(JSON.stringify({ bundles }, null, 2) + '\n');
|
|
195
|
+
return bundles;
|
|
196
|
+
}
|
|
197
|
+
write('\n Cloudflare MCP portal bundles\n\n');
|
|
198
|
+
for (const b of bundles) {
|
|
199
|
+
write(` • ${b.name} — ${b.display_name}\n`);
|
|
200
|
+
write(` url: ${b.url}\n`);
|
|
201
|
+
write(` packs: ${(b.feature_packs || []).join(', ') || '(portal OAuth only)'}\n`);
|
|
202
|
+
write(` manage: ${(b.portal_manage_scopes || []).join(', ')}\n`);
|
|
203
|
+
write(` scopes: ${b.suggested_oauth_scopes.slice(0, 8).join(' ')}${b.suggested_oauth_scopes.length > 8 ? ' …' : ''}\n\n`);
|
|
204
|
+
}
|
|
205
|
+
return bundles;
|
|
206
|
+
}
|
|
207
|
+
|
|
104
208
|
if (args.catalog) {
|
|
105
209
|
const catalog = listKnownServers(options);
|
|
106
210
|
if (args.json) {
|
|
107
211
|
write(JSON.stringify({ catalog }, null, 2) + '\n');
|
|
108
212
|
return catalog;
|
|
109
213
|
}
|
|
110
|
-
write('\n Known MCP Server Catalog
|
|
214
|
+
write('\n Known MCP Server Catalog\n\n');
|
|
111
215
|
for (const s of catalog) {
|
|
112
216
|
write(` • ${s.name || s.server_key} (${s.display_name || s.name})\n`);
|
|
113
217
|
write(` url: ${s.url}\n`);
|
|
114
218
|
write(` auth_type: ${s.auth_type || 'none'}\n`);
|
|
115
|
-
write(`
|
|
219
|
+
write(` protocol: ${s.protocol || 'streamable_http'}\n\n`);
|
|
116
220
|
}
|
|
117
221
|
return catalog;
|
|
118
222
|
}
|
|
@@ -124,6 +228,7 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
124
228
|
}
|
|
125
229
|
if (servers.length === 0) {
|
|
126
230
|
write(' No MCP servers configured yet. Add one with: agentsam mcp add inneranimalmedia\n');
|
|
231
|
+
write(' Cloudflare portals: agentsam mcp list --bundles\n');
|
|
127
232
|
return servers;
|
|
128
233
|
}
|
|
129
234
|
write('\n Configured MCP Servers (Authority: ~/.agentsam/mcp/)\n\n');
|
|
@@ -137,13 +242,49 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
137
242
|
return servers;
|
|
138
243
|
}
|
|
139
244
|
|
|
245
|
+
if (subcommand === 'scopes') {
|
|
246
|
+
const name = target;
|
|
247
|
+
if (!name) throw new Error('mcp_bundle_name_required');
|
|
248
|
+
const bundle = getCloudflareMcpBundle(name);
|
|
249
|
+
if (!bundle) {
|
|
250
|
+
throw new Error(`unknown_cloudflare_mcp_bundle:${name}`);
|
|
251
|
+
}
|
|
252
|
+
const scopes = scopesForCloudflareMcpBundle(name);
|
|
253
|
+
const payload = {
|
|
254
|
+
bundle: bundle.name,
|
|
255
|
+
url: bundle.url,
|
|
256
|
+
feature_packs: bundle.feature_packs,
|
|
257
|
+
capability_ids: bundle.capability_ids,
|
|
258
|
+
portal_manage_scopes: bundle.portal_manage_scopes,
|
|
259
|
+
oauth_scopes: scopes,
|
|
260
|
+
authorize_hint: `agentsam cloudflare permissions authorize --packs ${(bundle.feature_packs || ['agentsam']).join(',')}`,
|
|
261
|
+
note: 'Never request CLOUDFLARE_ALL_SCOPES (~315) at once — upgrade by pack.',
|
|
262
|
+
};
|
|
263
|
+
if (args.json) {
|
|
264
|
+
write(JSON.stringify(payload, null, 2) + '\n');
|
|
265
|
+
return payload;
|
|
266
|
+
}
|
|
267
|
+
write(`\n OAuth scopes for MCP bundle: ${name}\n`);
|
|
268
|
+
write(` URL: ${bundle.url}\n`);
|
|
269
|
+
write(` Packs: ${(bundle.feature_packs || []).join(', ') || '(none)'}\n`);
|
|
270
|
+
write(` Manage: ${(bundle.portal_manage_scopes || []).join(', ')}\n`);
|
|
271
|
+
write(` Scopes (${scopes.length}):\n`);
|
|
272
|
+
for (const s of scopes) write(` • ${s}\n`);
|
|
273
|
+
write(`\n ${payload.authorize_hint}\n\n`);
|
|
274
|
+
return payload;
|
|
275
|
+
}
|
|
276
|
+
|
|
140
277
|
if (subcommand === 'add') {
|
|
141
|
-
const name = target
|
|
278
|
+
const name = target;
|
|
279
|
+
if (!name) {
|
|
280
|
+
throw new Error('mcp_server_name_required: agentsam mcp add <name> [--url <url>]');
|
|
281
|
+
}
|
|
282
|
+
|
|
142
283
|
const preset = resolveServerPreset(name, options);
|
|
143
284
|
const url = args.url || preset?.url;
|
|
144
285
|
|
|
145
286
|
if (!url) {
|
|
146
|
-
throw new Error(`missing_url: specify --url for custom MCP server "${name}"`);
|
|
287
|
+
throw new Error(`missing_url: specify --url for custom MCP server "${name}" (or use a catalog name from: agentsam mcp list --catalog)`);
|
|
147
288
|
}
|
|
148
289
|
|
|
149
290
|
let requestedClients = ['cursor'];
|
|
@@ -158,30 +299,58 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
158
299
|
requestedClients = preset.defaultClients;
|
|
159
300
|
}
|
|
160
301
|
|
|
302
|
+
const cfBundle = getCloudflareMcpBundle(name);
|
|
303
|
+
const packHint = args.pack || (cfBundle?.feature_packs || [])[0] || '';
|
|
304
|
+
|
|
161
305
|
const serverConfig = {
|
|
162
306
|
name,
|
|
163
307
|
url,
|
|
164
|
-
protocol: preset?.protocol || '
|
|
165
|
-
auth: args.token
|
|
308
|
+
protocol: preset?.protocol || 'streamable_http',
|
|
309
|
+
auth: args.token
|
|
310
|
+
? { type: preset?.auth_type === 'none' ? 'bearer' : (preset?.auth_type || 'bearer'), token: args.token }
|
|
311
|
+
: null,
|
|
166
312
|
clients: requestedClients,
|
|
167
|
-
metadata:
|
|
313
|
+
metadata: {
|
|
314
|
+
...(preset
|
|
315
|
+
? {
|
|
316
|
+
preset: name,
|
|
317
|
+
description: preset.description,
|
|
318
|
+
provider: preset.provider || null,
|
|
319
|
+
kind: preset.kind || null,
|
|
320
|
+
feature_packs: preset.feature_packs || [],
|
|
321
|
+
capability_ids: preset.capability_ids || [],
|
|
322
|
+
portal_manage_scopes: preset.portal_manage_scopes || [],
|
|
323
|
+
}
|
|
324
|
+
: {}),
|
|
325
|
+
pack_hint: packHint || null,
|
|
326
|
+
},
|
|
168
327
|
};
|
|
169
328
|
|
|
170
|
-
// Store in AgentSam authority
|
|
171
329
|
const written = writeMcpServer(name, serverConfig, options);
|
|
172
330
|
|
|
173
|
-
// Materialize client adapters
|
|
174
331
|
const syncedAdapters = [];
|
|
175
332
|
for (const c of requestedClients) {
|
|
176
333
|
const res = syncServerToClient(c, name, serverConfig, options);
|
|
177
334
|
syncedAdapters.push(res);
|
|
178
335
|
}
|
|
179
336
|
|
|
180
|
-
// Ping to verify connectivity
|
|
181
337
|
const ping = await pingMcpServer(serverConfig, options);
|
|
338
|
+
const scopePreview = cfBundle ? scopesForCloudflareMcpBundle(name) : null;
|
|
182
339
|
|
|
183
340
|
if (args.json) {
|
|
184
|
-
const payload = {
|
|
341
|
+
const payload = {
|
|
342
|
+
ok: true,
|
|
343
|
+
server: written,
|
|
344
|
+
syncedAdapters,
|
|
345
|
+
ping,
|
|
346
|
+
cloudflare_bundle: cfBundle
|
|
347
|
+
? {
|
|
348
|
+
feature_packs: cfBundle.feature_packs,
|
|
349
|
+
portal_manage_scopes: cfBundle.portal_manage_scopes,
|
|
350
|
+
suggested_oauth_scopes: scopePreview,
|
|
351
|
+
}
|
|
352
|
+
: null,
|
|
353
|
+
};
|
|
185
354
|
write(JSON.stringify(payload, null, 2) + '\n');
|
|
186
355
|
return payload;
|
|
187
356
|
}
|
|
@@ -189,16 +358,23 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
189
358
|
write(`\n ✓ Configured MCP server: ${name}\n`);
|
|
190
359
|
write(` Authority: ~/.agentsam/mcp/${name}.json\n`);
|
|
191
360
|
write(` URL: ${url}\n`);
|
|
361
|
+
write(` Protocol: ${serverConfig.protocol}\n`);
|
|
192
362
|
for (const a of syncedAdapters) {
|
|
193
363
|
write(` Adapter: ${a.client} -> ${a.configPath}\n`);
|
|
194
364
|
}
|
|
195
365
|
if (ping.ok) {
|
|
196
|
-
write(` Ping: ✓ Connected (${ping.latencyMs}ms)\n`);
|
|
366
|
+
write(` Ping: ✓ Connected (${ping.latencyMs}ms${ping.transport ? `, ${ping.transport}` : ''})\n`);
|
|
197
367
|
} else {
|
|
198
368
|
write(` Ping: ⚠ Warning (${ping.error || 'unreachable'})\n`);
|
|
199
369
|
}
|
|
370
|
+
if (cfBundle) {
|
|
371
|
+
write(` CF packs: ${(cfBundle.feature_packs || []).join(', ') || '(portal-hosted OAuth)'}\n`);
|
|
372
|
+
write(` Portal: ${(cfBundle.portal_manage_scopes || []).join(', ')}\n`);
|
|
373
|
+
write(` Upgrade: agentsam mcp scopes ${name}\n`);
|
|
374
|
+
write(` (CF-connected users: ensure agentsam pack includes mcp-portals.*)\n`);
|
|
375
|
+
}
|
|
200
376
|
write('\n');
|
|
201
|
-
return { server: written, syncedAdapters, ping };
|
|
377
|
+
return { ok: true, server: written, syncedAdapters, ping };
|
|
202
378
|
}
|
|
203
379
|
|
|
204
380
|
if (subcommand === 'status') {
|
|
@@ -221,9 +397,11 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
221
397
|
const report = {
|
|
222
398
|
name,
|
|
223
399
|
url: server.url,
|
|
400
|
+
protocol: server.protocol,
|
|
224
401
|
ping,
|
|
225
402
|
clients: clientStatuses,
|
|
226
403
|
hasAuth: Boolean(server.auth?.token),
|
|
404
|
+
metadata: server.metadata || {},
|
|
227
405
|
};
|
|
228
406
|
|
|
229
407
|
if (args.json) {
|
|
@@ -261,21 +439,34 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
261
439
|
const toolsProbe = ping.ok ? await listMcpTools(server, options) : { count: 0, tools: [] };
|
|
262
440
|
|
|
263
441
|
const detectedClients = detectInstalledClients(options);
|
|
442
|
+
const cfBundle = getCloudflareMcpBundle(name);
|
|
264
443
|
const diagnostics = {
|
|
265
444
|
name,
|
|
266
445
|
authorityPath: `~/.agentsam/mcp/${name}.json`,
|
|
267
446
|
url: server.url,
|
|
268
447
|
connectivity: ping.ok ? 'pass' : 'fail',
|
|
269
448
|
latencyMs: ping.latencyMs,
|
|
449
|
+
transport: ping.transport || null,
|
|
270
450
|
authConfigured: Boolean(server.auth?.token),
|
|
271
451
|
discoveredTools: toolsProbe.count,
|
|
272
452
|
clients: clientStatuses,
|
|
273
453
|
detectedHostClients: detectedClients,
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
454
|
+
catalog: preset
|
|
455
|
+
? {
|
|
456
|
+
auth_type: preset.auth_type,
|
|
457
|
+
protocol: preset.protocol,
|
|
458
|
+
provider: preset.provider,
|
|
459
|
+
feature_packs: preset.feature_packs || [],
|
|
460
|
+
portal_manage_scopes: preset.portal_manage_scopes || [],
|
|
461
|
+
}
|
|
462
|
+
: null,
|
|
463
|
+
cloudflare_oauth_hint: cfBundle
|
|
464
|
+
? {
|
|
465
|
+
packs: cfBundle.feature_packs,
|
|
466
|
+
scopes: scopesForCloudflareMcpBundle(name),
|
|
467
|
+
note: 'Authorize packs via agentsam cloudflare permissions — not the full scope catalog.',
|
|
468
|
+
}
|
|
469
|
+
: null,
|
|
279
470
|
};
|
|
280
471
|
|
|
281
472
|
if (args.json) {
|
|
@@ -286,15 +477,17 @@ export async function runMcp(argv = [], options = {}) {
|
|
|
286
477
|
write(`\n AgentSam MCP Doctor · ${name}\n\n`);
|
|
287
478
|
write(` [1] Authority state: ✓ Valid (~/.agentsam/mcp/${name}.json)\n`);
|
|
288
479
|
write(` [2] Endpoint ping: ${ping.ok ? `✓ Reachable (${ping.latencyMs}ms)` : `✗ Unreachable (${ping.error})`}\n`);
|
|
289
|
-
|
|
290
|
-
write(` [3] Live health data: ${preset.health_status} (avg latency: ${preset.avg_latency_ms ?? 0}ms, error rate: ${preset.error_rate ?? 0}%)\n`);
|
|
291
|
-
}
|
|
480
|
+
write(` [3] Catalog: ${preset ? `${preset.auth_type} / ${preset.protocol}` : 'custom'}\n`);
|
|
292
481
|
write(` [4] Auth credential: ${diagnostics.authConfigured ? '✓ Token configured' : '○ Unauthenticated / public'}\n`);
|
|
293
482
|
write(` [5] Tool discovery: ${toolsProbe.count > 0 ? `✓ Found ${toolsProbe.count} tools` : '○ 0 tools discovered'}\n`);
|
|
294
483
|
write(` [6] Client adapters:\n`);
|
|
295
484
|
for (const c of clientStatuses) {
|
|
296
485
|
write(` • ${c.client}: ${c.configured ? '✓ Synced' : '✗ Desynced'} (${c.path})\n`);
|
|
297
486
|
}
|
|
487
|
+
if (cfBundle) {
|
|
488
|
+
write(` [7] CF portal packs: ${(cfBundle.feature_packs || []).join(', ') || '—'}\n`);
|
|
489
|
+
write(` Portal manage: ${(cfBundle.portal_manage_scopes || []).join(', ')}\n`);
|
|
490
|
+
}
|
|
298
491
|
write('\n');
|
|
299
492
|
return diagnostics;
|
|
300
493
|
}
|
package/src/commands/ollama.js
CHANGED
|
@@ -2,9 +2,10 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { spawn, spawnSync } from 'node:child_process';
|
|
4
4
|
import { readProjectConfig, setLocalModelCapability, writeProjectConfig } from '../lib/project-config.js';
|
|
5
|
+
import { OLLAMA_DEFAULT_ENDPOINT, resolveOllamaEndpoint } from '../../packages/agentsam-knowledge/src/providers/ollama-endpoint.js';
|
|
5
6
|
|
|
6
7
|
export const OLLAMA_DEFAULTS = Object.freeze({
|
|
7
|
-
baseUrl:
|
|
8
|
+
baseUrl: OLLAMA_DEFAULT_ENDPOINT,
|
|
8
9
|
model: 'qwen2.5-coder',
|
|
9
10
|
embedModel: 'mxbai-embed-large',
|
|
10
11
|
});
|
|
@@ -50,7 +51,7 @@ export function parseOllamaArgs(argv = []) {
|
|
|
50
51
|
|
|
51
52
|
export function resolveOllamaConfig(opts = {}, env = process.env) {
|
|
52
53
|
return {
|
|
53
|
-
baseUrl:
|
|
54
|
+
baseUrl: resolveOllamaEndpoint({ endpoint: opts.baseUrl, env }),
|
|
54
55
|
model: clean(opts.model || env.OLLAMA_MODEL || OLLAMA_DEFAULTS.model),
|
|
55
56
|
embedModel: clean(opts.embedModel || env.OLLAMA_EMBED_MODEL || OLLAMA_DEFAULTS.embedModel),
|
|
56
57
|
};
|
package/src/commands/plugins.js
CHANGED
|
@@ -27,7 +27,7 @@ function installMigration(cwd) {
|
|
|
27
27
|
function parse(argv) {
|
|
28
28
|
const out = {
|
|
29
29
|
action: argv[0] || 'list', key: '', cwd: process.cwd(), json: false,
|
|
30
|
-
origin:
|
|
30
|
+
origin: '',
|
|
31
31
|
timeoutMs: 180_000, noOpen: false,
|
|
32
32
|
};
|
|
33
33
|
for (let i = 1; i < argv.length; i += 1) {
|
|
@@ -59,7 +59,12 @@ async function resolveCliBearer(opts) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
async function fetchConnector(opts, token, pathname, init = {}) {
|
|
62
|
-
const origin = String(opts.origin).replace(/\/$/, '');
|
|
62
|
+
const origin = String(opts.origin || '').replace(/\/$/, '');
|
|
63
|
+
if (!origin) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
'origin_required: pass --origin https://<your-local-studio-host> (no AGENTSAM_ORIGIN / hardcoded host fallback).',
|
|
66
|
+
);
|
|
67
|
+
}
|
|
63
68
|
const headers = new Headers(init.headers || {});
|
|
64
69
|
headers.set('accept', 'application/json');
|
|
65
70
|
headers.set('authorization', `Bearer ${token}`);
|
package/src/commands/product.js
CHANGED
|
@@ -16,7 +16,40 @@ function parseCommon(argv = []) {
|
|
|
16
16
|
return out;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export function printInspectHelp() {
|
|
20
|
+
console.log(`
|
|
21
|
+
agentsam inspect — deterministic repository world state
|
|
22
|
+
|
|
23
|
+
agentsam inspect [path] Inspect a repository or directory
|
|
24
|
+
agentsam inspect [path] --json Machine-readable bounded index
|
|
25
|
+
agentsam inspect [path] --full --json Full snapshot authority
|
|
26
|
+
agentsam inspect [path] --view files File evidence view
|
|
27
|
+
agentsam inspect [path] --match <text> Filter files by path/symbol/import metadata
|
|
28
|
+
agentsam inspect [path] --save-snapshot <file>
|
|
29
|
+
Save the content-addressed snapshot
|
|
30
|
+
|
|
31
|
+
--cwd <path> Explicit root (legacy/automation form; positional path is preferred)
|
|
32
|
+
--view <index|files|full>
|
|
33
|
+
--index Bounded repository index (default)
|
|
34
|
+
--full Full repository snapshot
|
|
35
|
+
--limit <1-500> File result limit
|
|
36
|
+
--facet-limit <1-200> Facet result limit
|
|
37
|
+
--churn-days <days> Git churn window (default: 30)
|
|
38
|
+
--system/--package/--category/--layer/--kind/--language/--role
|
|
39
|
+
--execution-domain/--tag/--path/--symbol/--import/--match <value>
|
|
40
|
+
Deterministic metadata filters
|
|
41
|
+
--snapshot-file <file> Project a previously saved snapshot instead of scanning
|
|
42
|
+
--save-snapshot <file> Save the newly scanned snapshot
|
|
43
|
+
--pretty Pretty JSON when --json is used
|
|
44
|
+
|
|
45
|
+
No model, embeddings, network, provider spend, deploy, or mutation is required.
|
|
46
|
+
Output includes content hashes, Merkle identity, file metadata, AST-derived symbols/imports,
|
|
47
|
+
packages, systems, facets, revision evidence, and trust-boundary analysis when available.
|
|
48
|
+
`);
|
|
49
|
+
}
|
|
50
|
+
|
|
19
51
|
export async function runInspect(argv = []) {
|
|
52
|
+
if (argv.includes('--help') || argv.includes('-h')) { printInspectHelp(); return; }
|
|
20
53
|
const opts = parseCommon(argv);
|
|
21
54
|
let churnDays = 30;
|
|
22
55
|
let view = 'index';
|
|
@@ -27,6 +60,7 @@ export async function runInspect(argv = []) {
|
|
|
27
60
|
let snapshotFile = '';
|
|
28
61
|
let saveSnapshot = '';
|
|
29
62
|
const filters = {};
|
|
63
|
+
let positionalRoot = '';
|
|
30
64
|
const addFilter = (field, value) => {
|
|
31
65
|
const clean = String(value || '').trim();
|
|
32
66
|
if (!clean) throw new Error(`inspect_${field}_value_required`);
|
|
@@ -50,8 +84,10 @@ export async function runInspect(argv = []) {
|
|
|
50
84
|
else if (arg === '--save-snapshot') saveSnapshot = String(opts.positionals[++i] || '').trim();
|
|
51
85
|
else if (filterFlags.has(arg)) addFilter(filterFlags.get(arg), opts.positionals[++i]);
|
|
52
86
|
else if (arg === 'repository') continue;
|
|
87
|
+
else if (!arg.startsWith('-') && !positionalRoot) positionalRoot = arg;
|
|
53
88
|
else throw new Error(`unknown inspect option: ${arg}`);
|
|
54
89
|
}
|
|
90
|
+
if (positionalRoot) opts.cwd = path.resolve(opts.cwd, positionalRoot);
|
|
55
91
|
if (!['full', 'index', 'files'].includes(view)) throw new Error(`invalid inspect view: ${view}`);
|
|
56
92
|
if (!Number.isInteger(limit) || limit < 1 || limit > 500) throw new Error('inspect limit must be an integer from 1..500');
|
|
57
93
|
if (!Number.isInteger(facetLimit) || facetLimit < 1 || facetLimit > 200) throw new Error('inspect facet limit must be an integer from 1..200');
|
|
@@ -7,33 +7,52 @@ import { collectLocalStatus } from '../lib/local-status.js';
|
|
|
7
7
|
import { tryReadProjectConfig } from '../lib/project-config.js';
|
|
8
8
|
|
|
9
9
|
function terminalConnection(row = {}) {
|
|
10
|
+
const lastSeen = row.last_seen_at ?? null;
|
|
11
|
+
const id = row.id || row.connection_id || null;
|
|
12
|
+
const compute = row.compute_provider || row.provider || null;
|
|
10
13
|
return {
|
|
11
|
-
id
|
|
14
|
+
id,
|
|
15
|
+
connection_id: id,
|
|
12
16
|
instance_id: row.instance_id || null,
|
|
13
17
|
name: row.name || row.connection_name || null,
|
|
14
18
|
kind: row.kind || row.target_type || null,
|
|
15
|
-
provider:
|
|
19
|
+
provider: compute,
|
|
20
|
+
compute_provider: compute,
|
|
16
21
|
transport: row.transport || null,
|
|
17
22
|
transport_provider: row.transport_provider || null,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
endpoint_url: row.endpoint_url || null,
|
|
24
|
+
route_hostname: row.route_hostname || null,
|
|
25
|
+
public_url: row.public_url || row.endpoint_url || null,
|
|
26
|
+
active: row.is_active === true || Number(row.is_active) === 1 || row.active === true,
|
|
27
|
+
default: row.is_default === true || Number(row.is_default) === 1 || row.default === true,
|
|
28
|
+
health: row.last_health_status || row.health_status || row.health || 'unknown',
|
|
29
|
+
last_seen_at: lastSeen,
|
|
30
|
+
last_seen_at_iso: row.last_seen_at_iso || (Number.isFinite(Number(lastSeen)) && Number(lastSeen) > 0
|
|
31
|
+
? new Date((Number(lastSeen) > 1e12 ? Number(lastSeen) : Number(lastSeen) * 1000)).toISOString()
|
|
32
|
+
: null),
|
|
22
33
|
};
|
|
23
34
|
}
|
|
24
35
|
|
|
25
36
|
function terminalInstance(row = {}) {
|
|
37
|
+
const lastSeen = row.last_seen_at ?? null;
|
|
38
|
+
const id = row.id || row.instance_id || null;
|
|
39
|
+
const compute = row.compute_provider || row.provider || null;
|
|
26
40
|
return {
|
|
27
|
-
id
|
|
41
|
+
id,
|
|
42
|
+
instance_id: id,
|
|
28
43
|
name: row.name || null,
|
|
29
44
|
kind: row.kind || null,
|
|
30
|
-
provider:
|
|
45
|
+
provider: compute,
|
|
46
|
+
compute_provider: compute,
|
|
31
47
|
status: row.status || null,
|
|
32
48
|
platform: row.platform || null,
|
|
33
49
|
arch: row.arch || null,
|
|
34
50
|
active_connection_count: Number(row.active_connection_count || 0),
|
|
35
51
|
default_connection_id: row.default_connection_id || null,
|
|
36
|
-
last_seen_at:
|
|
52
|
+
last_seen_at: lastSeen,
|
|
53
|
+
last_seen_at_iso: row.last_seen_at_iso || (Number.isFinite(Number(lastSeen)) && Number(lastSeen) > 0
|
|
54
|
+
? new Date((Number(lastSeen) > 1e12 ? Number(lastSeen) : Number(lastSeen) * 1000)).toISOString()
|
|
55
|
+
: null),
|
|
37
56
|
};
|
|
38
57
|
}
|
|
39
58
|
|