@inneranimalmedia/agentsam-sdk 2.6.3 → 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 +17 -0
- package/README.md +31 -10
- 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 +16 -1
- package/bin/agentsam-rapid-rust +36 -0
- package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
- package/docs/BRAND_INTELLIGENCE.md +1 -1
- 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_DISTRIBUTION_OWNERSHIP.md +176 -0
- package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
- package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +151 -0
- package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
- package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
- package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +36 -0
- package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
- package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
- package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
- package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
- package/docs/architecture/SAM_KERNEL.md +181 -0
- package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
- package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
- package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
- package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
- package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
- package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -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/0010_portable_tickets_memory.sql +140 -0
- package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
- package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
- package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
- package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
- package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
- package/migrations/d1/0013_identity_oauth_states.sql +15 -0
- package/migrations/d1/0014_auth_event_log.sql +20 -0
- package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
- package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
- package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
- package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
- package/package.json +88 -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-contracts/src/errors.ts +16 -0
- package/packages/agentsam-errors/src/envelope.js +53 -0
- package/packages/agentsam-errors/src/index.js +1 -0
- package/packages/agentsam-errors/src/recovery.js +301 -0
- package/packages/agentsam-knowledge/src/autorag/index.js +1 -1
- package/packages/agentsam-knowledge/src/providers/index.js +20 -6
- 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 +318 -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 +51 -30
- package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
- package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
- 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 +31 -2
- package/packages/identity/README.md +1 -1
- package/packages/identity/backend/README.md +1 -1
- package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
- package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +32 -0
- package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
- package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
- package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
- package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
- package/packages/identity/package.json +3 -2
- 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 +153 -24
- package/packages/identity/src/adapters/sqlite/index.js +322 -0
- package/packages/identity/src/app/verify-app.js +95 -0
- 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/identity-store.js +115 -0
- package/packages/identity/src/contracts/provider.js +1 -0
- package/packages/identity/src/contracts/route-ids.js +30 -0
- package/packages/identity/src/contracts/route-projection.js +218 -0
- package/packages/identity/src/contracts/routes.js +11 -0
- package/packages/identity/src/core/browser-paths.js +4 -5
- package/packages/identity/src/core/constants.js +13 -8
- package/packages/identity/src/core/session-policy.js +32 -0
- package/packages/identity/src/frontend/auth-portal/README.md +2 -1
- package/packages/identity/src/frontend/auth-portal/pages/login.html +16 -15
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +9 -8
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +9 -8
- package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
- 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 +41 -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 +19 -8
- package/packages/identity/src/oauth/consent-view.js +388 -0
- package/packages/identity/src/oauth/credentials.js +46 -19
- package/packages/identity/src/oauth/finalize-inbound.js +1 -1
- package/packages/identity/src/oauth/google-desktop-exchange.js +173 -0
- package/packages/identity/src/oauth/iam-platform.js +8 -7
- package/packages/identity/src/oauth/redirect-paths.js +27 -36
- 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 +61 -15
- package/packages/identity/src/server/mount-policy.js +30 -0
- package/packages/identity/src/server/post-auth.js +79 -0
- package/packages/identity/src/server/worker-router.js +208 -146
- package/packages/identity/tests/auth-config.test.mjs +3 -2
- package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
- package/packages/identity/tests/iam-provider.test.mjs +1 -1
- package/packages/identity/tests/identity-init-scaffold.test.mjs +3 -0
- package/packages/identity/tests/identity-service.test.mjs +52 -5
- 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 +20 -5
- package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
- package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
- package/packages/identity/tests/preview-auth-portal.test.mjs +3 -3
- package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
- package/packages/runtime-protocol/src/index.js +154 -0
- package/packages/theme-church-site/package.json +2 -1
- package/packages/theme-church-site/src/index.js +1 -0
- package/packages/theme-companions-site/package.json +2 -1
- package/packages/theme-companions-site/src/index.js +1 -0
- package/packages/theme-floors-site/package.json +2 -1
- package/packages/theme-floors-site/src/index.js +1 -0
- package/packages/theme-fuelnfree-site/package.json +2 -1
- package/packages/theme-fuelnfree-site/src/index.js +1 -0
- package/packages/theme-handyman-site/package.json +2 -1
- package/packages/theme-handyman-site/src/index.js +1 -0
- package/packages/theme-insurance-site/package.json +2 -1
- package/packages/theme-insurance-site/src/index.js +1 -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/theme-shinshu-site/package.json +2 -1
- package/packages/theme-shinshu-site/src/index.js +1 -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 +133 -0
- 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/brand/brandpack.v1.schema.json +43 -0
- package/protocol/credentials/issue.v1.schema.json +38 -0
- package/protocol/database/connection.v1.schema.json +41 -0
- package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
- package/protocol/errors/error-envelope.schema.json +135 -1
- package/protocol/errors/recovery.v1.schema.json +50 -0
- package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
- package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
- package/protocol/sam/activity.v1.schema.json +48 -0
- package/protocol/sam/answer.v1.schema.json +35 -0
- package/protocol/sam/calibration.v1.schema.json +21 -0
- package/protocol/sam/decision-receipt.v1.schema.json +29 -0
- package/protocol/sam/evaluation.v1.schema.json +19 -0
- package/protocol/sam/operation.schema.json +66 -0
- package/protocol/sam/outcome.v1.schema.json +36 -0
- package/protocol/sam/question.v1.schema.json +26 -0
- package/protocol/sam/registry.seed.json +153 -0
- package/protocol/sam/result.schema.json +53 -0
- package/protocol/sam/state.v1.schema.json +23 -0
- package/protocol/scoring/README.md +10 -0
- package/protocol/scoring/scorecard.v1.schema.json +65 -0
- package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
- package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
- package/protocol/ui/icon-registry.mjs +227 -0
- package/protocol/ui/icon.v1.schema.json +51 -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/skills/README.md +22 -9
- package/skills/agentsam-codebaseindex/SKILL.md +225 -0
- package/skills/catalog.json +14 -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 +138 -0
- package/src/cli/dispatch.js +48 -0
- package/src/cli.js +225 -27
- package/src/commands/account-auth.js +94 -8
- package/src/commands/api-key.js +244 -0
- package/src/commands/app.js +365 -29
- package/src/commands/billing.js +127 -0
- package/src/commands/brand.js +86 -74
- 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 +693 -0
- package/src/commands/compute.js +4 -0
- package/src/commands/connections.js +11 -5
- package/src/commands/credentials.js +116 -0
- package/src/commands/env.js +152 -25
- package/src/commands/gcloud-auth.js +427 -0
- package/src/commands/go.js +366 -53
- package/src/commands/google-cloud.js +375 -0
- package/src/commands/identity-init.js +2 -2
- package/src/commands/interaction-clack.js +115 -0
- package/src/commands/mcp.js +226 -33
- package/src/commands/models.js +1 -1
- package/src/commands/ollama.js +3 -2
- package/src/commands/plugins.js +7 -2
- package/src/commands/product.js +36 -0
- package/src/commands/providers.js +62 -14
- 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 +59 -5
- package/src/commands/skill.js +248 -0
- package/src/commands/skills.js +1 -1
- package/src/commands/start-local.js +6 -2
- package/src/commands/terminal.js +171 -0
- package/src/commands/update.js +140 -0
- package/src/commands/whoami.js +392 -56
- package/src/features/resolve.js +1 -0
- package/src/go/build.js +229 -39
- package/src/go/cloudflare.js +506 -105
- package/src/go/container.js +120 -0
- package/src/go/contract.js +9 -4
- package/src/go/discover.js +149 -33
- package/src/go/index.js +15 -3
- package/src/go/native-probe-runner.mjs +119 -0
- package/src/go/{registry.js → official-registry.js} +64 -7
- package/src/go/official-release.js +10 -0
- package/src/go/receipts.js +77 -10
- package/src/go/verify.js +9 -2
- package/src/index.js +31 -0
- package/src/indexing/ingest/discover-models.js +298 -0
- package/src/indexing/ingest/inventory.js +478 -0
- package/src/indexing/ingest/job-graph.js +181 -0
- package/src/indexing/ingest/materials.js +204 -0
- 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 +71 -21
- 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 +3 -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-fs/capability.js +121 -0
- package/src/local-fs/freshness.js +75 -0
- package/src/local-fs/index.js +385 -0
- package/src/local-fs/paths.js +100 -0
- package/src/local-pty/server.js +326 -21
- 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/models/ai-access-onboarding.js +112 -0
- package/src/models/discovery.js +10 -2
- package/src/models/inventory-core.js +9 -1
- package/src/plugins/cloudflare.js +1 -1
- package/src/providers/ollama-chat.js +2 -1
- package/src/sam/activity/index.js +183 -0
- package/src/sam/client.js +252 -0
- package/src/sam/decision/calibration.js +109 -0
- package/src/sam/decision/confidence.js +126 -0
- package/src/sam/decision/evaluate.js +157 -0
- package/src/sam/decision/evaluators/deterministic.js +341 -0
- package/src/sam/decision/evaluators/heuristic.js +61 -0
- package/src/sam/decision/evaluators/select.js +50 -0
- package/src/sam/decision/evaluators/semantic.js +149 -0
- package/src/sam/decision/hierarchical.js +61 -0
- package/src/sam/decision/index.js +53 -0
- package/src/sam/decision/policy.js +86 -0
- package/src/sam/decision/questions.js +120 -0
- package/src/sam/decision/receipt.js +148 -0
- package/src/sam/decision/state.js +117 -0
- package/src/sam/decision/types.js +22 -0
- package/src/sam/decision/validate.js +200 -0
- package/src/sam/define.js +51 -0
- package/src/sam/index.js +65 -0
- package/src/sam/operations/brand-scan.js +62 -0
- package/src/sam/operations/cad-blender-inspect.js +36 -0
- package/src/sam/operations/codebaseindex-ingest.js +49 -0
- package/src/sam/operations/decision-evaluate.js +59 -0
- package/src/sam/operations/planning-astar.js +77 -0
- package/src/sam/operations/planning-goap.js +60 -0
- package/src/sam/operations/repository-inspect.js +72 -0
- package/src/sam/operations/security-scan.js +33 -0
- package/src/sam/operations/terminal-exec.js +29 -0
- package/src/sam/planning/astar.js +311 -0
- package/src/sam/planning/goap.js +177 -0
- package/src/sam/planning/index.js +21 -0
- package/src/sam/planning/state.js +84 -0
- package/src/sam/registry.js +48 -0
- package/src/sam/result.js +77 -0
- package/src/sam/seed.js +44 -0
- package/src/sam/types.js +116 -0
- package/src/security/inventory.js +12 -2
- package/src/security/local-vault.js +2 -0
- package/src/security/scan.js +1 -1
- package/src/skills/catalog.js +64 -0
- package/src/skills/content-resolver.js +124 -0
- package/src/skills/hosted-store.js +37 -0
- package/src/skills/index.js +29 -64
- package/src/skills/interaction.js +102 -0
- package/src/skills/local-store.js +228 -0
- package/src/skills/manifest.js +104 -0
- package/src/skills/metrics.js +31 -0
- package/src/skills/registry.js +184 -0
- package/src/skills/runtime.js +287 -0
- package/src/skills/slash.js +44 -0
- package/src/ui/cli/help.js +94 -101
- package/test/account-session.test.mjs +3 -3
- package/test/app-authority-context.test.mjs +32 -0
- package/test/cli/api-key-env-whoami.test.mjs +129 -0
- package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
- package/test/cli/go.test.mjs +62 -5
- 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/cli/skill-npm-and-env.test.mjs +52 -0
- package/test/cli/wireframes-go-registry.test.mjs +87 -2
- 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/go/build-source-identity.test.mjs +31 -0
- package/test/go/cloudflare-probe.test.mjs +274 -10
- package/test/go/distribution.test.mjs +28 -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/ai-access-onboarding.test.mjs +47 -0
- package/test/integration/app-command.test.mjs +30 -0
- package/test/integration/cad-project.test.mjs +4 -1
- package/test/integration/cli-help.test.mjs +1 -1
- package/test/integration/cms-app-scaffold.test.mjs +71 -0
- package/test/integration/cms-site-tenancy-contract.test.mjs +9 -8
- package/test/integration/codebaseindex-ingest.test.mjs +214 -0
- package/test/integration/features-resolve.test.mjs +30 -11
- package/test/integration/icon-registry.test.mjs +67 -0
- package/test/integration/ingest-discover-models.test.mjs +30 -0
- package/test/integration/inspect-path-cli.test.mjs +46 -0
- package/test/integration/install-script.test.mjs +12 -9
- package/test/integration/inventory-evidence.test.mjs +125 -0
- package/test/integration/local-fs.test.mjs +113 -0
- package/test/integration/provider-env-cli.test.mjs +2 -1
- package/test/integration/runtime-status.integration.test.mjs +2 -1
- package/test/integration/sam-activity-recovery.test.mjs +147 -0
- package/test/integration/sam-decision.test.mjs +584 -0
- package/test/integration/sam-kernel.test.mjs +99 -0
- package/test/integration/sam-planning-astar.test.mjs +279 -0
- package/test/integration/skill-runtime.test.mjs +240 -0
- package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
- package/test/knowledge.test.mjs +35 -1
- package/test/loopback-oauth.test.mjs +53 -0
- package/test/models.test.mjs +14 -7
- 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/shell.test.mjs +4 -4
- 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
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentsam-codebaseindex
|
|
3
|
+
description: Inventory-first codebase ingest — materials, scope, optional embeddings/storage. Pipeline IDs are not shell commands.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AgentSam CodebaseIndex
|
|
7
|
+
|
|
8
|
+
`agentsam-codebaseindex` teaches you how to inventory, scope, index, search,
|
|
9
|
+
and migrate code/document knowledge with AgentSam.
|
|
10
|
+
|
|
11
|
+
CodebaseIndex is designed to work **locally first**.
|
|
12
|
+
|
|
13
|
+
You do NOT need an AgentSam account, a paid LLM, a cloud database, embeddings,
|
|
14
|
+
Supabase, or Cloudflare to build a useful codebase index.
|
|
15
|
+
|
|
16
|
+
Minimum useful setup:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
repository/files → deterministic inventory → AST + text index → local SQLite
|
|
20
|
+
→ literal / structural retrieval
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Embeddings, hosted storage, and model-assisted scope suggestions are upgrades,
|
|
24
|
+
not prerequisites.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
agentsam codebaseindex
|
|
32
|
+
# alias: agentsam ingest
|
|
33
|
+
# tip: use skill agentsam-codebaseindex
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Guided flow (inventory-first):
|
|
37
|
+
|
|
38
|
+
1. Connection
|
|
39
|
+
2. Materials
|
|
40
|
+
3. Inventory / file map
|
|
41
|
+
4. Scope
|
|
42
|
+
5. Embedding profile
|
|
43
|
+
6. Vector / data source lane
|
|
44
|
+
7. Execution
|
|
45
|
+
|
|
46
|
+
AgentSam shows what exists before asking what should be indexed.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Important: "pipeline" is not a shell command
|
|
51
|
+
|
|
52
|
+
You may see:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Plan complete · pipeline id sam.codebaseindex.index.run
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Do **not** type:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
pipeline sam.codebaseindex.index.run
|
|
62
|
+
sam.codebaseindex.index.run
|
|
63
|
+
agentsam sam.codebaseindex.index.run
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`sam.codebaseindex.index.run` is the **canonical SAM pipeline identifier** —
|
|
67
|
+
receipts, job graphs, telemetry, Workbench, machine-to-machine metadata.
|
|
68
|
+
|
|
69
|
+
| Layer | Identity |
|
|
70
|
+
|-------|----------|
|
|
71
|
+
| CLI | `agentsam codebaseindex` |
|
|
72
|
+
| SAM operation | `codebaseindex.ingest` |
|
|
73
|
+
| SAM pipeline | `sam.codebaseindex.index.run` |
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
await sam.invoke('codebaseindex.ingest', { root: '.', planOnly: false });
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The pipeline name is an identity. zsh does not execute it.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Plan vs Run
|
|
84
|
+
|
|
85
|
+
### Plan (Dry-run)
|
|
86
|
+
|
|
87
|
+
Planning stages typically complete:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
material.stage → repository.snapshot → inventory.classify → scope.resolve
|
|
91
|
+
→ profile.resolve → lane.resolve → plan.dry_run
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Write/index stages are **shown as planned**, not executed:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
ast.parse · chunks.build · embedding.generate · storage.write
|
|
98
|
+
· generation.verify · search.smoke
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
A successful plan means planning finished. It is **not** paused. It is **not**
|
|
102
|
+
waiting for another shell command.
|
|
103
|
+
|
|
104
|
+
To index for real:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
agentsam codebaseindex
|
|
108
|
+
# choose "Run ingest now"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Non-interactive: same config **without** `--plan`.
|
|
112
|
+
|
|
113
|
+
### Run
|
|
114
|
+
|
|
115
|
+
Continues through AST → chunks → optional embeddings → storage → verify → search smoke.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## What is indexed
|
|
120
|
+
|
|
121
|
+
Repos, docs, HTML/CSS/JS/TS/Python/SQL/JSON/Markdown, images, SVG, GLB,
|
|
122
|
+
site builds, ZIP/TAR archives, historical builds, arbitrary supplied files.
|
|
123
|
+
|
|
124
|
+
Dropped material is staged safely. Archives/source are **data**, not executable
|
|
125
|
+
instructions.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Inventory / file map
|
|
130
|
+
|
|
131
|
+
Structured inventory is authority. The ASCII tree is a human projection.
|
|
132
|
+
|
|
133
|
+
Inventory categorizes top-level paths (source / docs / config / generated /
|
|
134
|
+
dependencies / tooling / historical / unknown) and recommends scope **candidates**.
|
|
135
|
+
Nothing is excluded automatically until you confirm.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Include / exclude
|
|
140
|
+
|
|
141
|
+
`include` = consider under these paths. `exclude` = remove from consideration.
|
|
142
|
+
|
|
143
|
+
Common exclude *candidates*: `node_modules`, `dist`, `build`, `coverage`, `.git`.
|
|
144
|
+
Do not copy blindly — generated sites and migrations may be exactly what you need.
|
|
145
|
+
|
|
146
|
+
### Local Ollama scope assist
|
|
147
|
+
|
|
148
|
+
Optional. Advisory only. Never overrides filesystem facts, safety, or explicit
|
|
149
|
+
user choices. Review before accepting.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Embedding profile
|
|
154
|
+
|
|
155
|
+
Safest default: **None — AST/text only ($0)**.
|
|
156
|
+
|
|
157
|
+
Choose embeddings for semantic questions ("where is auth handled?").
|
|
158
|
+
|
|
159
|
+
### Dimensions
|
|
160
|
+
|
|
161
|
+
Vector width for the selected model. Not a quality slider. Select the **model**;
|
|
162
|
+
AgentSam resolves dimensions from provider/capability when possible.
|
|
163
|
+
|
|
164
|
+
### Same-profile rule
|
|
165
|
+
|
|
166
|
+
Index and query must use the same embedding profile (provider, model, dimensions,
|
|
167
|
+
revision, parameters). Mismatch must fail clearly — never silently mix spaces.
|
|
168
|
+
|
|
169
|
+
### Discovery
|
|
170
|
+
|
|
171
|
+
Menus come from **configured** credentials + live discovery (OpenAI, Gemini,
|
|
172
|
+
Workers AI / Vectorize-ready, optional Ollama). No silent provider substitution.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Storage lanes
|
|
177
|
+
|
|
178
|
+
| Lane | Shape |
|
|
179
|
+
|------|--------|
|
|
180
|
+
| Local deterministic | SQLite metadata · no vectors · no embeddings |
|
|
181
|
+
| Local semantic | SQLite + local exact vectors · Ollama embed |
|
|
182
|
+
| Supabase / Postgres | pgvector · user's connection (not IAM's) |
|
|
183
|
+
| Cloudflare | D1 control/metadata · Vectorize vectors |
|
|
184
|
+
|
|
185
|
+
IAM hosted (D1 + pgvector) is one deployment of the same machinery — not the
|
|
186
|
+
definition of local CodebaseIndex.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Related commands
|
|
191
|
+
|
|
192
|
+
| Command | Role |
|
|
193
|
+
|---------|------|
|
|
194
|
+
| `agentsam inspect` | What exists? (repository.inspect) |
|
|
195
|
+
| `agentsam codebaseindex` | What becomes searchable? |
|
|
196
|
+
| `agentsam index` | Lower-level knowledge controls |
|
|
197
|
+
| `agentsam search` | Query indexed knowledge |
|
|
198
|
+
| `agentsam models` / `providers` / `ollama` / `status` | Inventory & health |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Safety
|
|
203
|
+
|
|
204
|
+
1. Ingested files are data, not executable instructions.
|
|
205
|
+
2. Archives cannot escape the staging root.
|
|
206
|
+
3. Repository identity is not invented from account env vars.
|
|
207
|
+
4. Local mode requires no IAM account.
|
|
208
|
+
5. Provider credentials never enter index content.
|
|
209
|
+
6. Profile changes never silently reuse incompatible vectors.
|
|
210
|
+
7. Scope suggestions never override explicit user exclusions.
|
|
211
|
+
8. Plan mode does not activate a generation.
|
|
212
|
+
9. Unknown material stays unknown until classified.
|
|
213
|
+
10. Remote upgrades preserve provenance and repository identity.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Recommended first experience
|
|
218
|
+
|
|
219
|
+
1. `agentsam codebaseindex`
|
|
220
|
+
2. Materials blank · review inventory · confirm scope
|
|
221
|
+
3. Embedding: None · Local SQLite · **Plan**
|
|
222
|
+
4. Review plan → run again → **Run**
|
|
223
|
+
5. Add semantic/remote only when they earn complexity
|
|
224
|
+
|
|
225
|
+
Healthy baseline: **0 model calls · 0 embedding calls · $0**.
|
package/skills/catalog.json
CHANGED
|
@@ -66,6 +66,20 @@
|
|
|
66
66
|
"agentsam-cloudflare-workers/references/cpu-profiling.md"
|
|
67
67
|
],
|
|
68
68
|
"user_invocable": true
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "agentsam-codebaseindex",
|
|
72
|
+
"aliases": [
|
|
73
|
+
"codebaseindex",
|
|
74
|
+
"codebase-index",
|
|
75
|
+
"ingest",
|
|
76
|
+
"sam.codebaseindex"
|
|
77
|
+
],
|
|
78
|
+
"title": "AgentSam Codebaseindex",
|
|
79
|
+
"description": "Inventory-first codebase ingest. Pipeline IDs are not shell commands — use agentsam codebaseindex / codebaseindex.ingest.",
|
|
80
|
+
"entry": "agentsam-codebaseindex/SKILL.md",
|
|
81
|
+
"references": [],
|
|
82
|
+
"user_invocable": true
|
|
69
83
|
}
|
|
70
84
|
]
|
|
71
85
|
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable multimodal attachment intake (CLI + Local Studio).
|
|
3
|
+
* Authority: AgentAttachment references — never base64 in AgentInput.
|
|
4
|
+
*/
|
|
5
|
+
import crypto from 'node:crypto';
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import os from 'node:os';
|
|
9
|
+
import { createRequire } from 'node:module';
|
|
10
|
+
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
|
|
13
|
+
const IMAGE_EXT = new Set(['.png', '.jpg', '.jpeg', '.webp', '.gif', '.avif', '.heic', '.heif', '.svg']);
|
|
14
|
+
|
|
15
|
+
function trySharp() {
|
|
16
|
+
try {
|
|
17
|
+
return require('sharp');
|
|
18
|
+
} catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function sha256Buffer(buf) {
|
|
24
|
+
return `sha256:${crypto.createHash('sha256').update(buf).digest('hex')}`;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function sniffMime(buf, filePath = '') {
|
|
28
|
+
if (buf?.length >= 8 && buf[0] === 0x89 && buf[1] === 0x50) return 'image/png';
|
|
29
|
+
if (buf?.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) return 'image/jpeg';
|
|
30
|
+
if (buf?.length >= 12 && buf.toString('ascii', 0, 4) === 'RIFF' && buf.toString('ascii', 8, 12) === 'WEBP') {
|
|
31
|
+
return 'image/webp';
|
|
32
|
+
}
|
|
33
|
+
if (buf?.length >= 12 && buf.toString('ascii', 4, 8) === 'ftyp') return 'image/avif';
|
|
34
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
35
|
+
if (ext === '.svg' || (buf && /<svg[\s>]/i.test(buf.toString('utf8', 0, 256)))) return 'image/svg+xml';
|
|
36
|
+
if (ext === '.gif') return 'image/gif';
|
|
37
|
+
if (ext === '.png') return 'image/png';
|
|
38
|
+
if (ext === '.jpg' || ext === '.jpeg') return 'image/jpeg';
|
|
39
|
+
if (ext === '.webp') return 'image/webp';
|
|
40
|
+
return 'application/octet-stream';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function kindFromMime(mime) {
|
|
44
|
+
if (String(mime).startsWith('image/')) return 'image';
|
|
45
|
+
if (String(mime).startsWith('audio/')) return 'audio';
|
|
46
|
+
if (String(mime).startsWith('video/')) return 'video';
|
|
47
|
+
if (String(mime).startsWith('text/')) return 'text';
|
|
48
|
+
return 'binary';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function nextTokenLabel(index) {
|
|
52
|
+
return `[Image #${index}]`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Intake a local filesystem path into a structured AgentAttachment.
|
|
57
|
+
* Local-first: no Cloudflare required.
|
|
58
|
+
*/
|
|
59
|
+
export async function intakeLocalPath(filePath, {
|
|
60
|
+
lifetime = 'ephemeral',
|
|
61
|
+
workDir = path.join(os.tmpdir(), 'agentsam-attachments'),
|
|
62
|
+
maxPixels = 40_000_000,
|
|
63
|
+
inferenceLongEdge = 2048,
|
|
64
|
+
index = 1,
|
|
65
|
+
} = {}) {
|
|
66
|
+
const abs = path.resolve(String(filePath).replace(/^@/, '').replace(/^['"]|['"]$/g, ''));
|
|
67
|
+
if (!fs.existsSync(abs)) {
|
|
68
|
+
const err = new Error(`attachment_missing:${abs}`);
|
|
69
|
+
err.code = 'attachment_missing';
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
const buf = fs.readFileSync(abs);
|
|
73
|
+
const mimeType = sniffMime(buf, abs);
|
|
74
|
+
const kind = kindFromMime(mimeType);
|
|
75
|
+
const id = `att_${crypto.randomBytes(8).toString('hex')}`;
|
|
76
|
+
const sha256 = sha256Buffer(buf);
|
|
77
|
+
const name = path.basename(abs);
|
|
78
|
+
|
|
79
|
+
/** @type {import('../../agentsam-contracts/src/artifacts.ts').AgentAttachment} */
|
|
80
|
+
const attachment = {
|
|
81
|
+
id,
|
|
82
|
+
name,
|
|
83
|
+
mimeType,
|
|
84
|
+
size: buf.length,
|
|
85
|
+
kind,
|
|
86
|
+
source: { type: 'local_path', path: abs },
|
|
87
|
+
sha256,
|
|
88
|
+
lifetime,
|
|
89
|
+
metadata: {
|
|
90
|
+
token: kind === 'image' ? nextTokenLabel(index) : `[File #${index}]`,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
if (kind === 'image' && mimeType !== 'image/svg+xml') {
|
|
95
|
+
const sharp = trySharp();
|
|
96
|
+
if (sharp) {
|
|
97
|
+
const meta = await sharp(buf, { failOn: 'none' }).metadata();
|
|
98
|
+
const width = meta.width || 0;
|
|
99
|
+
const height = meta.height || 0;
|
|
100
|
+
if (width * height > maxPixels) {
|
|
101
|
+
const err = new Error(`attachment_pixel_guard:${width}x${height}`);
|
|
102
|
+
err.code = 'attachment_pixel_guard';
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
attachment.image = {
|
|
106
|
+
width,
|
|
107
|
+
height,
|
|
108
|
+
alpha: Boolean(meta.hasAlpha),
|
|
109
|
+
orientation: meta.orientation,
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Inference derivative — preserve original path as source
|
|
113
|
+
fs.mkdirSync(workDir, { recursive: true });
|
|
114
|
+
const inferPath = path.join(workDir, `${id}-inference.png`);
|
|
115
|
+
let pipeline = sharp(buf, { failOn: 'none' }).rotate();
|
|
116
|
+
const longEdge = Math.max(width, height);
|
|
117
|
+
if (longEdge > inferenceLongEdge) {
|
|
118
|
+
pipeline = pipeline.resize({
|
|
119
|
+
width: width >= height ? inferenceLongEdge : undefined,
|
|
120
|
+
height: height > width ? inferenceLongEdge : undefined,
|
|
121
|
+
fit: 'inside',
|
|
122
|
+
withoutEnlargement: true,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Flatten transparent marks onto neutral for vision (keep original intact)
|
|
126
|
+
if (meta.hasAlpha) {
|
|
127
|
+
pipeline = pipeline.flatten({ background: { r: 32, g: 36, b: 44 } });
|
|
128
|
+
}
|
|
129
|
+
await pipeline.png().toFile(inferPath);
|
|
130
|
+
const inferStat = fs.statSync(inferPath);
|
|
131
|
+
const inferMeta = await sharp(inferPath).metadata();
|
|
132
|
+
attachment.inference = {
|
|
133
|
+
mimeType: 'image/png',
|
|
134
|
+
source: { type: 'local_path', path: inferPath },
|
|
135
|
+
width: inferMeta.width,
|
|
136
|
+
height: inferMeta.height,
|
|
137
|
+
bytes: inferStat.size,
|
|
138
|
+
};
|
|
139
|
+
attachment.preview = { localPath: inferPath };
|
|
140
|
+
} else {
|
|
141
|
+
attachment.metadata.capability_warning = {
|
|
142
|
+
status: 'blocked',
|
|
143
|
+
reason: 'capability_missing',
|
|
144
|
+
capability_id: 'image.raster.transform',
|
|
145
|
+
acceptable_backends: ['sharp', 'imagemagick'],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return attachment;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Parse CLI tokens for @path / absolute image paths dropped into the prompt.
|
|
155
|
+
* Returns { text, attachmentPaths }.
|
|
156
|
+
*/
|
|
157
|
+
export function extractAttachmentPathsFromText(text = '') {
|
|
158
|
+
const paths = [];
|
|
159
|
+
let cleaned = String(text || '');
|
|
160
|
+
// @./file or @/abs or @~/rel
|
|
161
|
+
cleaned = cleaned.replace(/(^|\s)@([^\s]+)/g, (full, lead, p) => {
|
|
162
|
+
const candidate = p.replace(/^['"]|['"]$/g, '');
|
|
163
|
+
const expanded = candidate.startsWith('~/')
|
|
164
|
+
? path.join(os.homedir(), candidate.slice(2))
|
|
165
|
+
: path.resolve(candidate);
|
|
166
|
+
if (fs.existsSync(expanded) && IMAGE_EXT.has(path.extname(expanded).toLowerCase())) {
|
|
167
|
+
paths.push(expanded);
|
|
168
|
+
return `${lead}`;
|
|
169
|
+
}
|
|
170
|
+
return full;
|
|
171
|
+
});
|
|
172
|
+
// bare absolute/relative image path as sole token
|
|
173
|
+
cleaned = cleaned.replace(/(^|\s)(\/?[^\s]+\.(?:png|jpe?g|webp|gif|avif|heic|svg))\b/gi, (full, lead, p) => {
|
|
174
|
+
const expanded = p.startsWith('~/')
|
|
175
|
+
? path.join(os.homedir(), p.slice(2))
|
|
176
|
+
: path.isAbsolute(p)
|
|
177
|
+
? p
|
|
178
|
+
: path.resolve(p);
|
|
179
|
+
if (fs.existsSync(expanded)) {
|
|
180
|
+
paths.push(expanded);
|
|
181
|
+
return lead;
|
|
182
|
+
}
|
|
183
|
+
return full;
|
|
184
|
+
});
|
|
185
|
+
return {
|
|
186
|
+
text: cleaned.replace(/\s+/g, ' ').trim(),
|
|
187
|
+
attachmentPaths: [...new Set(paths)],
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Validate selected model modalities against attachments.
|
|
193
|
+
* Fail closed — never silently swap models.
|
|
194
|
+
*/
|
|
195
|
+
export function validateAttachmentModalities({ attachments = [], model = {} } = {}) {
|
|
196
|
+
const modalities = new Set(model.input_modalities || model.inputModalities || ['text']);
|
|
197
|
+
const accepted = new Set(
|
|
198
|
+
model.attachment_policy?.accepted_mime_types
|
|
199
|
+
|| model.acceptedMimeTypes
|
|
200
|
+
|| (modalities.has('image') ? ['image/png', 'image/jpeg', 'image/webp', 'image/gif'] : []),
|
|
201
|
+
);
|
|
202
|
+
const images = attachments.filter((a) => a.kind === 'image' || String(a.mimeType || '').startsWith('image/'));
|
|
203
|
+
if (!images.length) return { ok: true, images: [] };
|
|
204
|
+
if (!modalities.has('image')) {
|
|
205
|
+
return {
|
|
206
|
+
ok: false,
|
|
207
|
+
code: 'model_rejects_image',
|
|
208
|
+
message: `${model.id || model.name || 'Selected model'} does not accept image input.`,
|
|
209
|
+
images,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
for (const img of images) {
|
|
213
|
+
const mime = String(img.inference?.mimeType || img.mimeType || '');
|
|
214
|
+
if (accepted.size && mime && !accepted.has(mime) && !accepted.has(img.mimeType)) {
|
|
215
|
+
return {
|
|
216
|
+
ok: false,
|
|
217
|
+
code: 'mime_not_accepted',
|
|
218
|
+
message: `${model.id || 'Model'} does not accept ${mime || img.mimeType}.`,
|
|
219
|
+
images,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return { ok: true, images };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export function formatAttachmentChip(attachment) {
|
|
227
|
+
const token = attachment.metadata?.token || attachment.name;
|
|
228
|
+
const dims = attachment.image
|
|
229
|
+
? `${attachment.image.width}×${attachment.image.height}`
|
|
230
|
+
: '—';
|
|
231
|
+
const kb = attachment.size < 1024
|
|
232
|
+
? `${attachment.size} B`
|
|
233
|
+
: `${(attachment.size / 1024).toFixed(attachment.size >= 10240 ? 0 : 1)} KB`;
|
|
234
|
+
return `${token} ${attachment.mimeType || 'unknown'} · ${dims} · ${kb}`;
|
|
235
|
+
}
|
|
@@ -4,7 +4,7 @@ import { execFile } from 'node:child_process';
|
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { createHash } from 'node:crypto';
|
|
7
|
-
import {
|
|
7
|
+
import { tryResolveGitContext } from '../../packages/agentsam-repository/src/git-context.js';
|
|
8
8
|
import { getRepositoryId, tryReadProjectConfig } from '../lib/project-config.js';
|
|
9
9
|
import { buildMerkleTree } from '../../packages/agentsam-repository/src/merkle/index.js';
|
|
10
10
|
import { gitIgnoredPaths } from '../../packages/agentsam-repository/src/merkle/git-ignore.js';
|
|
@@ -111,7 +111,23 @@ export async function repositorySnapshot({ cwd = process.cwd(), churnDays = 30 }
|
|
|
111
111
|
if (!Number.isInteger(churnDays) || churnDays < 1 || churnDays > 3650) {
|
|
112
112
|
throw new RangeError('churnDays must be an integer from 1..3650');
|
|
113
113
|
}
|
|
114
|
-
const
|
|
114
|
+
const requestedRoot = path.resolve(cwd);
|
|
115
|
+
if (!fs.existsSync(requestedRoot) || !fs.statSync(requestedRoot).isDirectory()) {
|
|
116
|
+
throw new Error(`repository_root_not_found:${requestedRoot}`);
|
|
117
|
+
}
|
|
118
|
+
const resolvedGit = tryResolveGitContext({ cwd: requestedRoot });
|
|
119
|
+
const git = resolvedGit || {
|
|
120
|
+
root: requestedRoot,
|
|
121
|
+
remoteUrl: '',
|
|
122
|
+
remoteHost: null,
|
|
123
|
+
repoFullName: null,
|
|
124
|
+
owner: null,
|
|
125
|
+
repo: null,
|
|
126
|
+
revisionSha: null,
|
|
127
|
+
branch: null,
|
|
128
|
+
detached: false,
|
|
129
|
+
dirty: null,
|
|
130
|
+
};
|
|
115
131
|
const root = git.root;
|
|
116
132
|
const ignored = await gitIgnoredPaths(root);
|
|
117
133
|
const projectConfig = tryReadProjectConfig(root);
|
|
@@ -137,6 +153,7 @@ export async function repositorySnapshot({ cwd = process.cwd(), churnDays = 30 }
|
|
|
137
153
|
repository: {
|
|
138
154
|
repository_id: repositoryId,
|
|
139
155
|
identity_source: projectRepositoryId ? 'project-config' : knowledge.repository_id ? 'knowledge-config' : portableRepositoryId ? 'git-remote' : 'unresolved',
|
|
156
|
+
source_kind: resolvedGit ? 'git' : 'filesystem',
|
|
140
157
|
provider,
|
|
141
158
|
full_name: git.repoFullName,
|
|
142
159
|
remote_url: git.remoteUrl || null,
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI command catalog — machine-readable authority for help, assist tips, and dispatch hints.
|
|
3
|
+
* Alias ≠ authority: skill tips and SAM operation ids live here so help is not a prose-only dump.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** @typedef {{ id: string, aliases?: string[], summary: string, topic: string, skill?: string, operation?: string, common?: boolean }} CliCommandEntry */
|
|
7
|
+
|
|
8
|
+
/** @type {CliCommandEntry[]} */
|
|
9
|
+
export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
10
|
+
{ id: 'help', aliases: ['-h', '--help'], summary: 'Interactive or topic help from this catalog', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
11
|
+
{ id: 'create', summary: 'Scaffold a new AgentSam project from a preset', topic: 'create', skill: 'agentsam-app-fundamentals', common: false },
|
|
12
|
+
{ id: 'add', summary: 'Add an explicit feature/capability selection', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
13
|
+
{ id: 'plugins', summary: 'Install and manage AgentSam plugins', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
14
|
+
{ id: 'dev', summary: 'Run this project’s npm dev script', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
15
|
+
{ id: 'inspect', summary: 'Bounded repository inspect / authority view', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'repository.inspect', common: true },
|
|
16
|
+
{ id: 'capabilities', summary: 'Inspect capability contracts', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
17
|
+
{ id: 'setup', summary: 'Discover → plan → approve → install capabilities (Homebrew-style)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
18
|
+
{ id: 'skills', aliases: ['skill'], summary: 'List or load portable skill instructions', topic: 'create', skill: 'agentsam-app-fundamentals', common: true },
|
|
19
|
+
{ id: 'context', summary: 'Git + bridge context from any repo', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
20
|
+
{ id: 'status', summary: 'Account, models, terminal, and live deploy awareness', topic: 'runtime', skill: 'agentsam-progression-guard', common: true },
|
|
21
|
+
{ id: 'db', summary: 'Project-local SQLite status/init', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
22
|
+
{ id: 'models', summary: 'Probe hosted/local model availability', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
23
|
+
{ id: 'providers', summary: 'Configure machine provider credentials', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
24
|
+
{ id: 'credentials', aliases: ['credential'], summary: 'Audit credentials, drift, and failure remediation (never prints secrets)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
25
|
+
{ id: 'cheat-sheet', aliases: ['cheatsheet'], summary: 'Organized command groups (gcloud-like)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
26
|
+
{ id: 'env', summary: 'Provider profile / shell loader helpers', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
27
|
+
{ id: 'api-key', aliases: ['apikey', 'api-keys'], summary: 'Create/list/rotate AgentSam API keys (aak_*)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
28
|
+
{ id: 'login', summary: 'Sign in and persist machine-local session', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
29
|
+
{ id: 'logout', summary: 'Sign out locally', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
30
|
+
{ id: 'whoami', summary: 'Authenticated account + tokenPermissions', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
31
|
+
{ id: 'resume', summary: 'Resume a saved AgentSam session', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
32
|
+
{ id: 'shell', summary: 'Interactive slash-command shell', topic: 'inside', skill: 'agentsam-app-fundamentals' },
|
|
33
|
+
{ id: 'start-local', summary: 'Local PTY WebSocket service', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
34
|
+
{ id: 'ollama', summary: 'Local Ollama setup/status/models', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
35
|
+
{ id: 'tunnel', summary: 'Cloudflare Tunnel via Wrangler', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
36
|
+
{ id: 'connections', aliases: ['connection'], summary: 'Inspect execution connections', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
37
|
+
{ id: 'compute', summary: 'Alias for google-cloud compute/iam helpers', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
38
|
+
{ id: 'google-cloud', aliases: ['gcp', 'gcloud'], summary: 'Google Cloud auth, projects, compute, IAM SAs, billing, doctor', topic: 'runtime', skill: 'agentsam-app-fundamentals', common: true },
|
|
39
|
+
{ id: 'billing', aliases: ['costs'], summary: 'Billing account relationships (not --billing-project)', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
40
|
+
{ id: 'update', summary: 'Component update preview (gcloud-like)', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
41
|
+
{ id: 'deploy', summary: 'Graduate intentionally to cloud', topic: 'runtime', skill: 'agentsam-progression-guard', common: true },
|
|
42
|
+
{ id: 'deploy-receipt', summary: 'Merkle deploy/checkpoint receipts', topic: 'runtime', skill: 'agentsam-progression-guard' },
|
|
43
|
+
{ id: 'cloudflare', aliases: ['cf'], summary: 'Wrangler reads + Worker CPU profiles', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
44
|
+
{ id: 'go', summary: 'Go product discover/build/deploy', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
45
|
+
{ id: 'rust', aliases: ['wasm', 'rapid-rust'], summary: 'Rust/Wasm scaffold, doctor, check, build, dev, explicit deploy', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
46
|
+
{ id: 'mcp', summary: 'MCP server catalog and client adapters', topic: 'runtime', skill: 'agentsam-cloudflare-workers' },
|
|
47
|
+
{ id: 'eval', summary: 'Context fixtures and live eval telemetry', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
48
|
+
{ id: 'index', summary: 'Plan/run incremental AST (+ optional embeddings)', topic: 'work', skill: 'agentsam-codebaseindex', operation: 'codebaseindex.ingest' },
|
|
49
|
+
{ id: 'search', summary: 'Retrieve indexed code/text', topic: 'work', skill: 'agentsam-codebaseindex' },
|
|
50
|
+
{ id: 'repo', summary: 'Repository snapshot / observations', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'repository.inspect' },
|
|
51
|
+
{ id: 'init', summary: 'Knowledge setup or local scaffold', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
52
|
+
{ id: 'codebaseindex', aliases: ['ingest', 'codebase-index'], summary: 'Guided codebase ingest: materials, allowlist, embeddings, storage', topic: 'work', skill: 'agentsam-codebaseindex', operation: 'codebaseindex.ingest', common: true },
|
|
53
|
+
{ id: 'brand', summary: 'Deterministic brand intelligence', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'brand.scan' },
|
|
54
|
+
{ id: 'plan', summary: 'Composable plans (e.g. brand)', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
55
|
+
{ id: 'security', aliases: ['sca'], summary: 'Dependency + trust-boundary scan', topic: 'work', skill: 'agentsam-progression-guard', operation: 'security.scan', common: true },
|
|
56
|
+
{ id: 'merkle', summary: 'File integrity snapshots and explorer', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
57
|
+
{ id: 'cad', summary: 'Blender/OpenSCAD/FreeCAD CAD tools', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'cad.blender.inspect' },
|
|
58
|
+
{ id: 'dockerize', summary: 'Build/run supported containers', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
59
|
+
{ id: 'mini', summary: 'Create a small local gadget', topic: 'create', skill: 'agentsam-jr-dev' },
|
|
60
|
+
{ id: 'recon', summary: 'Bounded-worker packets + finding reports', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
61
|
+
{ id: 'autorag', summary: 'AutoRAG configure/probe helpers', topic: 'work', skill: 'agentsam-codebaseindex' },
|
|
62
|
+
{ id: 'identity', summary: 'Identity portal, providers, protocol surfaces', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
63
|
+
{ id: 'scaffold', summary: 'Generate CMS or worker-api starter', topic: 'create', skill: 'agentsam-jr-dev' },
|
|
64
|
+
{ id: 'goap', summary: 'GOAP blackboard status/plan', topic: 'inside', skill: 'agentsam-app-fundamentals' },
|
|
65
|
+
{ id: 'app', aliases: ['apps'], summary: 'Bundled AgentSam apps launcher', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
const byId = new Map();
|
|
69
|
+
for (const entry of CLI_COMMAND_CATALOG) {
|
|
70
|
+
byId.set(entry.id, entry);
|
|
71
|
+
for (const alias of entry.aliases || []) byId.set(alias, entry);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @param {string} name
|
|
76
|
+
* @returns {CliCommandEntry|null}
|
|
77
|
+
*/
|
|
78
|
+
export function getCliCommand(name) {
|
|
79
|
+
const key = String(name || '').trim().toLowerCase();
|
|
80
|
+
if (!key) return null;
|
|
81
|
+
return byId.get(key) || null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function listCliCommands(options = {}) {
|
|
85
|
+
let rows = [...CLI_COMMAND_CATALOG];
|
|
86
|
+
if (options.topic) rows = rows.filter((r) => r.topic === options.topic);
|
|
87
|
+
if (options.common) rows = rows.filter((r) => r.common);
|
|
88
|
+
return rows;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Machine baseline: every command surfaces how to load its skill from inside the CLI.
|
|
93
|
+
* @param {CliCommandEntry|string} entryOrId
|
|
94
|
+
* @param {{ write?: (s: string) => void, quiet?: boolean }} [options]
|
|
95
|
+
*/
|
|
96
|
+
export function printAssistTip(entryOrId, options = {}) {
|
|
97
|
+
if (options.quiet) return;
|
|
98
|
+
// Never contaminate machine JSON streams.
|
|
99
|
+
if (options.json || process.argv.includes('--json') || process.argv.includes('--format=json')) return;
|
|
100
|
+
const entry = typeof entryOrId === 'string' ? getCliCommand(entryOrId) : entryOrId;
|
|
101
|
+
if (!entry?.skill) return;
|
|
102
|
+
const write = options.write || ((s) => process.stderr.write(s));
|
|
103
|
+
const op = entry.operation ? ` · sam.invoke("${entry.operation}")` : '';
|
|
104
|
+
write(` tip: use skill ${entry.skill} (agentsam skills ${entry.skill})${op}\n`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Suggest close command ids for unknown input.
|
|
109
|
+
* @param {string} name
|
|
110
|
+
* @param {number} [limit]
|
|
111
|
+
*/
|
|
112
|
+
export function suggestCliCommands(name, limit = 5) {
|
|
113
|
+
const q = String(name || '').toLowerCase();
|
|
114
|
+
if (!q) return listCliCommands({ common: true }).slice(0, limit);
|
|
115
|
+
return CLI_COMMAND_CATALOG
|
|
116
|
+
.map((entry) => {
|
|
117
|
+
const hay = [entry.id, ...(entry.aliases || []), entry.summary].join(' ').toLowerCase();
|
|
118
|
+
let score = 0;
|
|
119
|
+
if (entry.id.startsWith(q) || (entry.aliases || []).some((a) => a.startsWith(q))) score += 3;
|
|
120
|
+
if (hay.includes(q)) score += 1;
|
|
121
|
+
for (const t of q.split(/[^a-z0-9]+/).filter(Boolean)) {
|
|
122
|
+
if (hay.includes(t)) score += 1;
|
|
123
|
+
}
|
|
124
|
+
return { entry, score };
|
|
125
|
+
})
|
|
126
|
+
.filter((x) => x.score > 0)
|
|
127
|
+
.sort((a, b) => b.score - a.score || a.entry.id.localeCompare(b.entry.id))
|
|
128
|
+
.slice(0, limit)
|
|
129
|
+
.map((x) => x.entry);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export const CLI_HELP_TOPICS = Object.freeze([
|
|
133
|
+
{ id: 'start', label: 'Start / resume', summary: 'Enter AgentSam, resume work, identity, models.' },
|
|
134
|
+
{ id: 'work', label: 'Build / inspect', summary: 'Repository intelligence, ingest, security, brand.' },
|
|
135
|
+
{ id: 'runtime', label: 'Runtime / terminal', summary: 'Local, remote, sandbox, and deployment controls.' },
|
|
136
|
+
{ id: 'inside', label: 'Inside AgentSam', summary: 'Shell and GOAP surfaces.' },
|
|
137
|
+
{ id: 'create', label: 'Create / extend', summary: 'Scaffold, add capabilities, identity, skills.' },
|
|
138
|
+
]);
|