@inneranimalmedia/agentsam-sdk 2.6.9 → 2.6.11
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/README.md +21 -0
- package/TRADEMARKS.md +22 -0
- package/apps/README.md +3 -0
- package/apps/cad-creator/LICENSE +21 -0
- package/apps/cad-creator/README.md +4 -1
- package/apps/cad-creator/shared/cad/package.json +1 -1
- package/apps/client-cms-editor/LICENSE +21 -0
- package/apps/client-cms-editor/README.md +3 -0
- package/apps/client-cms-editor/backend/package.json +3 -3
- package/apps/client-cms-editor/frontend/package.json +4 -4
- package/apps/client-cms-editor/package-lock.json +43 -43
- package/apps/client-cms-editor/package.json +3 -3
- package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +1 -1
- package/apps/client-cms-editor/reference/harvest/README.md +1 -1
- package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +1 -1
- package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +1 -1
- package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +1 -1
- package/apps/client-cms-editor/shared/cms/package.json +2 -2
- package/docs/MINI.md +4 -2
- package/docs/REPO_FILE_MAP.txt +0 -1
- package/docs/SOURCE_ARCHITECTURE.md +1 -1
- package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +140 -0
- package/docs/architecture/HOOKS-MODELS-SELF-HOSTING-PLAN.md +199 -0
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
- package/docs/engineering/go-portability/01-product-project-deployment-authority.md +69 -0
- package/docs/engineering/provider-internal-renames/01-lane-initialization.md +20 -0
- package/docs/engineering/provider-internal-renames/01a-runtime-environment-contract.md +115 -0
- package/docs/engineering/provider-internal-renames/02-cfoa.md +57 -0
- package/docs/engineering/provider-internal-renames/03-gclioa.md +32 -0
- package/docs/engineering/provider-internal-renames/04-goaude.md +50 -0
- package/docs/engineering/provider-internal-renames/05-gdrv.md +33 -0
- package/docs/engineering/provider-internal-renames/06-verification.md +103 -0
- package/docs/engineering/provider-internal-renames/README.md +77 -0
- package/docs/engineering/provider-internal-renames/runtime-environment-contract.json +220 -0
- package/docs/engineering/test-diagnostics/go-cli-test-hang-20261003.md +49 -0
- package/docs/engineering/test-diagnostics/go-skip-deploy-docker-fix.md +90 -0
- package/docs/knowledge-service-verification.md +3 -3
- package/docs/plans/AGENTSAM-SUSPEND-QUEUE-KNOWLEDGE-RDP-2026-10-03.md +870 -0
- package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +9 -9
- package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +11 -11
- package/docs/plans/RECONCILIATION-2026-09-19.md +6 -6
- package/docs/plans/SAM_WORK_PROTOCOL.md +667 -0
- package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +2 -2
- package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +3 -3
- package/examples/hyperspace-demo/index.html +16 -0
- package/examples/hyperspace-demo/package.json +21 -0
- package/examples/hyperspace-demo/src/main.tsx +277 -0
- package/examples/hyperspace-demo/tsconfig.json +9 -0
- package/examples/hyperspace-demo/vite.config.ts +24 -0
- package/migrations/d1/0020_agentsam_receipt_catalog.sql +35 -0
- package/migrations/runtime/0005_agentsam_hooks.sql +87 -0
- package/migrations/runtime/0006_agent_run_suspend_activity.sql +53 -0
- package/migrations/runtime/0007_queue_control.sql +40 -0
- package/migrations/runtime/0008_agent_run_dependencies.sql +24 -0
- package/migrations/runtime/0008_analytics_legacy_bootstrap.sql +43 -0
- package/migrations/runtime/0009_analytics_authority.sql +108 -0
- package/package.json +45 -14
- package/packages/agentsam-brand/README.md +3 -0
- package/packages/agentsam-brand/package.json +2 -2
- package/packages/agentsam-brand/src/core/v2/compile.js +1 -1
- package/packages/agentsam-brand/src/core/v2/schema.js +1 -1
- package/packages/agentsam-contracts/dist/adapter.d.ts +22 -0
- package/packages/agentsam-contracts/dist/adapter.js +0 -0
- package/packages/agentsam-contracts/dist/agent.d.ts +66 -0
- package/packages/agentsam-contracts/dist/agent.js +15 -0
- package/packages/agentsam-contracts/dist/artifacts.d.ts +70 -0
- package/packages/agentsam-contracts/dist/artifacts.js +0 -0
- package/packages/agentsam-contracts/dist/authority.d.ts +21 -0
- package/packages/agentsam-contracts/dist/authority.js +0 -0
- package/packages/agentsam-contracts/dist/context.d.ts +14 -0
- package/packages/agentsam-contracts/dist/context.js +0 -0
- package/packages/agentsam-contracts/dist/errors.d.ts +121 -0
- package/packages/agentsam-contracts/dist/errors.js +5 -0
- package/packages/agentsam-contracts/dist/events.d.ts +53 -0
- package/packages/agentsam-contracts/dist/events.js +0 -0
- package/packages/agentsam-contracts/dist/execution.d.ts +38 -0
- package/packages/agentsam-contracts/dist/execution.js +0 -0
- package/packages/agentsam-contracts/dist/hooks.d.ts +31 -0
- package/packages/agentsam-contracts/dist/hooks.js +0 -0
- package/packages/agentsam-contracts/dist/identity.d.ts +15 -0
- package/packages/agentsam-contracts/dist/identity.js +0 -0
- package/packages/agentsam-contracts/dist/index.d.ts +16 -0
- package/packages/agentsam-contracts/dist/index.js +164 -0
- package/packages/agentsam-contracts/dist/models.d.ts +9 -0
- package/packages/agentsam-contracts/dist/models.js +0 -0
- package/packages/agentsam-contracts/dist/providers.d.ts +27 -0
- package/packages/agentsam-contracts/dist/providers.js +0 -0
- package/packages/agentsam-contracts/dist/repository.d.ts +56 -0
- package/packages/agentsam-contracts/dist/repository.js +15 -0
- package/packages/agentsam-contracts/dist/run.d.ts +113 -0
- package/packages/agentsam-contracts/dist/run.js +132 -0
- package/packages/agentsam-contracts/dist/tools.d.ts +82 -0
- package/packages/agentsam-contracts/dist/tools.js +0 -0
- package/packages/agentsam-contracts/dist/widgets.d.ts +38 -0
- package/packages/agentsam-contracts/dist/widgets.js +0 -0
- package/packages/agentsam-contracts/package.json +9 -1
- package/packages/agentsam-contracts/scripts/build.mjs +1 -1
- package/packages/agentsam-contracts/src/agent.ts +78 -3
- package/packages/agentsam-contracts/src/errors.ts +19 -10
- package/packages/agentsam-contracts/src/index.ts +2 -0
- package/packages/agentsam-contracts/src/run.ts +320 -0
- package/packages/agentsam-contracts/src/widgets.ts +58 -0
- package/packages/agentsam-contracts/test/contracts.test.mjs +1 -1
- package/packages/agentsam-contracts/test/run-contract.test.mjs +94 -0
- package/packages/agentsam-errors/package.json +11 -3
- package/packages/agentsam-errors/protocol/agentsam.error.v2.schema.json +821 -0
- package/packages/agentsam-errors/protocol/error-catalog.json +3512 -0
- package/packages/agentsam-errors/src/envelope.js +63 -11
- package/packages/agentsam-errors/src/error.js +6 -0
- package/packages/agentsam-errors/src/fingerprint.js +9 -1
- package/packages/agentsam-errors/src/normalize.js +51 -6
- package/packages/agentsam-errors/src/recovery.js +9 -35
- package/packages/agentsam-errors/src/transport.js +6 -1
- package/packages/agentsam-errors/src/vocabulary.js +515 -126
- package/packages/agentsam-errors/test/catalog-v2.test.mjs +106 -0
- package/packages/agentsam-errors/types/index.d.ts +157 -0
- package/packages/agentsam-goap/README.md +3 -0
- package/packages/agentsam-goap/package.json +2 -2
- package/packages/agentsam-hooks/README.md +206 -0
- package/packages/agentsam-hooks/bin/agentsam-hooks.mjs +64 -0
- package/packages/agentsam-hooks/bindings/go/command.go +55 -0
- package/packages/agentsam-hooks/bindings/go/errors_generated.go +402 -0
- package/packages/agentsam-hooks/bindings/go/go.mod +3 -0
- package/packages/agentsam-hooks/bindings/go/hooks.go +285 -0
- package/packages/agentsam-hooks/bindings/go/hooks_test.go +48 -0
- package/packages/agentsam-hooks/bindings/rust/Cargo.toml +11 -0
- package/packages/agentsam-hooks/bindings/rust/src/errors_generated.rs +396 -0
- package/packages/agentsam-hooks/bindings/rust/src/lib.rs +397 -0
- package/packages/agentsam-hooks/package.json +69 -0
- package/packages/agentsam-hooks/schema/manifest.json +54 -0
- package/packages/agentsam-hooks/scripts/clean-protocol.mjs +17 -0
- package/packages/agentsam-hooks/scripts/sync-protocol.mjs +27 -0
- package/packages/agentsam-hooks/src/adapters/agents.js +108 -0
- package/packages/agentsam-hooks/src/adapters/callback.js +4 -0
- package/packages/agentsam-hooks/src/adapters/capability.js +122 -0
- package/packages/agentsam-hooks/src/adapters/command.js +104 -0
- package/packages/agentsam-hooks/src/adapters/composite.js +31 -0
- package/packages/agentsam-hooks/src/adapters/http.js +58 -0
- package/packages/agentsam-hooks/src/adapters/lsp.js +116 -0
- package/packages/agentsam-hooks/src/adapters/mcp.js +76 -0
- package/packages/agentsam-hooks/src/adapters/provider.js +129 -0
- package/packages/agentsam-hooks/src/config.js +143 -0
- package/packages/agentsam-hooks/src/contracts.js +284 -0
- package/packages/agentsam-hooks/src/errors-generated.js +2732 -0
- package/packages/agentsam-hooks/src/index.d.ts +209 -0
- package/packages/agentsam-hooks/src/index.js +14 -0
- package/packages/agentsam-hooks/src/policy.js +34 -0
- package/packages/agentsam-hooks/src/runtime.js +312 -0
- package/packages/agentsam-hooks/src/store.js +264 -0
- package/packages/agentsam-hooks/test/adapters.test.mjs +216 -0
- package/packages/agentsam-hooks/test/runtime.test.mjs +258 -0
- package/packages/agentsam-knowledge/package.json +1 -1
- package/packages/agentsam-knowledge/src/backends/index.js +1 -1
- package/packages/agentsam-merch/README.md +62 -0
- package/packages/agentsam-merch/bin/agentsam-merch.mjs +16 -0
- package/packages/agentsam-merch/package.json +65 -0
- package/packages/agentsam-merch/profiles/completeful/dtg-back-large.json +42 -0
- package/packages/agentsam-merch/profiles/completeful/laser-engraving.json +39 -0
- package/packages/agentsam-merch/profiles/generic/embroidery-digitization.json +22 -0
- package/packages/agentsam-merch/schemas/collection-candidate.schema.json +66 -0
- package/packages/agentsam-merch/schemas/manufacturing-profile.schema.json +221 -0
- package/packages/agentsam-merch/src/adapters-completeful.js +50 -0
- package/packages/agentsam-merch/src/cli.js +93 -0
- package/packages/agentsam-merch/src/collection-lab.js +60 -0
- package/packages/agentsam-merch/src/compatibility.js +501 -0
- package/packages/agentsam-merch/src/derivatives.js +112 -0
- package/packages/agentsam-merch/src/index.d.ts +316 -0
- package/packages/agentsam-merch/src/index.js +46 -0
- package/packages/agentsam-merch/src/node/index.d.ts +58 -0
- package/packages/agentsam-merch/src/node/index.js +6 -0
- package/packages/agentsam-merch/src/node/raster.js +142 -0
- package/packages/agentsam-merch/src/node/vector.js +239 -0
- package/packages/agentsam-merch/src/product-concepts.js +118 -0
- package/packages/agentsam-merch/src/profile-registry.js +104 -0
- package/packages/agentsam-merch/src/profile.js +158 -0
- package/packages/agentsam-merch/src/transforms.js +215 -0
- package/packages/agentsam-merch/test/merch.test.mjs +332 -0
- package/packages/agentsam-merch/test/node-transforms.test.mjs +149 -0
- package/packages/agentsam-nav/dist/Nav.d.ts +43 -0
- package/packages/agentsam-nav/dist/NavCollapsible.d.ts +10 -0
- package/packages/agentsam-nav/dist/NavContent.d.ts +2 -0
- package/packages/agentsam-nav/dist/NavFooter.d.ts +2 -0
- package/packages/agentsam-nav/dist/NavGroup.d.ts +3 -0
- package/packages/agentsam-nav/dist/NavHeader.d.ts +2 -0
- package/packages/agentsam-nav/dist/NavMenu.d.ts +22 -0
- package/packages/agentsam-nav/dist/NavProvider.d.ts +35 -0
- package/packages/agentsam-nav/dist/NavTrigger.d.ts +2 -0
- package/packages/agentsam-nav/dist/Surfaces.d.ts +41 -0
- package/packages/agentsam-nav/dist/browser.d.ts +11 -0
- package/packages/agentsam-nav/dist/browser.global.js +172 -0
- package/packages/agentsam-nav/dist/browser.js +9688 -0
- package/packages/agentsam-nav/dist/contracts.d.ts +76 -0
- package/packages/agentsam-nav/dist/index.d.ts +11 -0
- package/packages/agentsam-nav/dist/index.js +9689 -0
- package/packages/agentsam-nav/dist/legacy.css +83 -0
- package/packages/agentsam-nav/dist/shell.css +113 -0
- package/packages/agentsam-nav/dist/theme.css +113 -0
- package/packages/agentsam-nav/dist/utils.d.ts +1 -0
- package/packages/agentsam-nav/package.json +1 -1
- package/packages/agentsam-queue-control/README.md +4 -1
- package/packages/agentsam-queue-control/package.json +4 -3
- package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +111 -11
- package/packages/agentsam-queue-control/src/adapters/cloudflare.js +34 -6
- package/packages/agentsam-queue-control/src/adapters/memory.js +11 -2
- package/packages/agentsam-queue-control/src/adapters/sqlite.js +259 -0
- package/packages/agentsam-queue-control/src/contracts.js +207 -3
- package/packages/agentsam-queue-control/src/control-plane.js +62 -2
- package/packages/agentsam-queue-control/src/index.js +1 -0
- package/packages/agentsam-queue-control/test/queue-control.test.mjs +310 -0
- package/packages/agentsam-queue-control/test/sqlite-adapter.test.mjs +91 -0
- package/packages/agentsam-rapid-rust/README.md +3 -0
- package/packages/agentsam-repository/README.md +3 -0
- package/packages/agentsam-repository/package.json +1 -1
- package/packages/agentsam-vault/package.json +1 -1
- package/packages/agentsam-workbench/README.md +43 -0
- package/packages/agentsam-workbench/package.json +14 -4
- package/packages/agentsam-workbench/src/agent/AgentConversationSurface.tsx +108 -0
- package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +25 -8
- package/packages/agentsam-workbench/src/agent/AgentRuntimeField.tsx +152 -0
- package/packages/agentsam-workbench/src/agent/Composer.tsx +10 -1
- package/packages/agentsam-workbench/src/agent/RunMode.ts +26 -0
- package/packages/agentsam-workbench/src/agent/Thread.tsx +18 -3
- package/packages/agentsam-workbench/src/agent/index.ts +3 -0
- package/packages/agentsam-workbench/src/index.ts +4 -0
- package/packages/agentsam-workbench/src/manufacturing/PreflightIndicator.tsx +203 -0
- package/packages/agentsam-workbench/src/manufacturing/index.ts +2 -0
- package/packages/agentsam-workbench/src/manufacturing/loading.ts +147 -0
- package/packages/agentsam-workbench/src/widgets/BuiltinWidget.tsx +22 -0
- package/packages/agentsam-workbench/src/widgets/CountdownWidget.tsx +68 -0
- package/packages/agentsam-workbench/src/widgets/WidgetFrame.tsx +56 -0
- package/packages/agentsam-workbench/src/widgets/countdown.ts +25 -0
- package/packages/agentsam-workbench/src/widgets/index.ts +6 -0
- package/packages/agentsam-workbench/src/widgets/registry.ts +13 -0
- package/packages/agentsam-workbench/src/widgets/useCountdown.ts +128 -0
- package/packages/agentsam-workbench/src/widgets/widgets.css +102 -0
- package/packages/connectors/{cloudflare → cfoa}/package.json +3 -3
- package/packages/heuristic-theme/package.json +1 -1
- package/packages/identity/README.md +3 -0
- package/packages/identity/backend/README.md +3 -0
- package/packages/identity/package.json +2 -2
- package/packages/identity/src/frontend/auth-portal/README.md +3 -0
- package/packages/identity/src/index.js +1 -1
- package/packages/identity/src/oauth/README.md +4 -1
- package/packages/identity/src/oauth/credentials.js +1 -1
- package/packages/identity/src/server/worker-router.js +1 -1
- package/packages/identity/tests/google-desktop-identity-login.test.mjs +1 -1
- package/packages/identity/tests/lane1-packed-consumer.test.mjs +1 -1
- package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +1 -1
- package/packages/providers/completeful/package.json +1 -1
- package/packages/theme-church-site/package.json +2 -2
- package/packages/theme-companions-site/package.json +2 -2
- package/packages/theme-floors-site/package.json +2 -2
- package/packages/theme-fuelnfree-site/package.json +2 -2
- package/packages/theme-handyman-site/package.json +2 -2
- package/packages/theme-insurance-site/package.json +2 -2
- package/packages/theme-scenes/package.json +1 -1
- package/packages/theme-shinshu-site/package.json +2 -2
- package/packages/work-graph/package.json +1 -1
- package/protocol/apps/agentsam.app.v1.schema.json +1 -1
- package/protocol/apps/agentsam.host-install.v1.schema.json +1 -1
- package/protocol/assets/asset-record.v1.schema.json +1 -1
- package/protocol/brand/brandpack.v1.schema.json +1 -1
- package/protocol/capabilities/capability-manifest.schema.json +1 -1
- package/protocol/capabilities/knowledge-search-input.schema.json +1 -0
- package/protocol/credentials/issue.v1.schema.json +1 -1
- package/protocol/database/agentsam.schema-pack.v1.schema.json +1 -1
- package/protocol/database/connection.v1.schema.json +1 -1
- package/protocol/embeddings/embedding-profile.v1.schema.json +1 -1
- package/protocol/errors/README.md +36 -0
- package/protocol/errors/agentsam.error.v2.schema.json +821 -0
- package/protocol/errors/error-catalog.json +3506 -158
- package/protocol/errors/error-envelope.schema.json +195 -52
- package/protocol/errors/recovery.v1.schema.json +1 -1
- package/protocol/features/agentsam.feature.v1.schema.json +1 -1
- package/protocol/hooks/README.md +18 -0
- package/protocol/hooks/agentsam.hook.output.v1.schema.json +27 -0
- package/protocol/hooks/agentsam.hook.receipt.v1.schema.json +61 -0
- package/protocol/hooks/agentsam.hook.v1.schema.json +35 -0
- package/protocol/hooks/agentsam.hooks.config.v1.schema.json +78 -0
- package/protocol/local-engine/benchmark.v1.schema.json +1 -1
- package/protocol/local-engine/engine.v1.schema.json +1 -1
- package/protocol/models/README.md +3 -0
- package/protocol/models/model-inventory-v2.schema.json +1 -1
- package/protocol/models/provider-model-snapshot.v1.schema.json +22 -0
- package/protocol/receipts/agentsam.receipt.v1.json +95 -0
- package/protocol/rpc/v1/errors.proto +1 -0
- package/protocol/runtime/agentsam.runtime.v1.schema.json +1 -1
- package/protocol/runtime/workspace-fs.v1.schema.json +1 -1
- package/protocol/sam/activity.v1.schema.json +1 -1
- package/protocol/sam/answer.v1.schema.json +1 -1
- package/protocol/sam/calibration.v1.schema.json +1 -1
- package/protocol/sam/decision-receipt.v1.schema.json +1 -1
- package/protocol/sam/evaluation.v1.schema.json +1 -1
- package/protocol/sam/operation.schema.json +1 -1
- package/protocol/sam/outcome.v1.schema.json +1 -1
- package/protocol/sam/question.v1.schema.json +1 -1
- package/protocol/sam/result.schema.json +1 -1
- package/protocol/sam/state.v1.schema.json +1 -1
- package/protocol/scoring/scorecard.v1.schema.json +1 -1
- package/protocol/skills/agentsam.interaction.v1.schema.json +1 -1
- package/protocol/skills/agentsam.skill.v1.schema.json +1 -1
- package/protocol/theme-refinery/product-metadata.schema.json +1 -1
- package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +6 -6
- package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +6 -6
- package/protocol/theme-refinery/reconciliation-receipt.schema.json +1 -1
- package/protocol/ui/icon.v1.schema.json +1 -1
- package/python/README.md +20 -0
- package/python/agentsam_sdk/errors/__init__.py +4 -0
- package/python/agentsam_sdk/errors/vocabulary.py +2730 -0
- package/python/agentsam_sdk/hooks/__init__.py +32 -0
- package/python/agentsam_sdk/hooks/adapters.py +132 -0
- package/python/agentsam_sdk/hooks/contracts.py +121 -0
- package/python/agentsam_sdk/hooks/runtime.py +253 -0
- package/python/tests/test_hooks.py +115 -0
- package/skills/README.md +3 -0
- package/src/acp/agent-executor.js +106 -0
- package/src/acp/client.js +316 -0
- package/src/acp/dependencies.js +426 -0
- package/src/acp/http.js +207 -0
- package/src/acp/index.js +22 -0
- package/src/acp/runs.js +125 -0
- package/src/acp/runtime-selection.js +180 -0
- package/src/agent/responses-runner.js +145 -1
- package/src/cli/command-catalog.js +4 -0
- package/src/cli.js +33 -0
- package/src/commands/cheat-sheet.js +1 -0
- package/src/commands/cloudflare-login.js +1 -1
- package/src/commands/cloudflare.js +2 -2
- package/src/commands/connections.js +1 -1
- package/src/commands/go.js +76 -6
- package/src/commands/hooks.js +260 -0
- package/src/commands/merch.js +5 -0
- package/src/commands/mini.js +1 -1
- package/src/commands/models.js +1 -1
- package/src/commands/receipts.js +140 -0
- package/src/commands/run.js +253 -0
- package/src/commands/shell.js +114 -9
- package/src/errors/diagnostic.js +9 -9
- package/src/go/container.js +1 -1
- package/src/go/contract.js +61 -18
- package/src/go/discover.js +0 -4
- package/src/go/index.js +13 -1
- package/src/go/probe.js +109 -0
- package/src/go/{cloudflare.js → providers/cloudflare.js} +36 -136
- package/src/go/verify.js +1 -1
- package/src/index.js +32 -0
- package/src/indexing/ingest/inventory.js +1 -1
- package/src/knowledge/service/grpc-codec.js +2 -0
- package/src/lib/deploy/local-studio.js +2 -2
- package/src/lib/mini/scaffold.js +1 -1
- package/src/lib/slash-commands.js +1 -0
- package/src/lib/whoami-capabilities.js +1 -1
- package/src/local/runtime-store.js +54 -0
- package/src/mcp/cloudflare-bundles.js +1 -1
- package/src/models/catalog.js +0 -49
- package/src/models/inventory-core.js +69 -0
- package/src/plugins/index.js +9 -1
- package/src/plugins/registry.js +115 -6
- package/src/receipts/contract.js +68 -0
- package/src/receipts/index.js +20 -0
- package/src/receipts/prune.js +64 -0
- package/src/receipts/sinks.js +285 -0
- package/src/rpc/generated/errors_pb.js +49 -1
- package/src/tools/runtime.js +13 -5
- package/templates/mini/gadget/app.js +15 -40
- package/templates/mini/gadget/index.html +7 -7
- package/templates/mini/shared/style.css +1 -1
- /package/packages/connectors/{cloudflare → cfoa}/OAUTH_STORAGE_AUDIT.md +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/api-client.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/capabilities.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/credential.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/brand-protection.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/keyless.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/pages.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/scanner.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/snippets.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/tag-gateway.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/tags.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/token-validation.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/vectorize.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/families/workflows.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/index.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/oauth-persist.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/owner.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/permission-options.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/routes.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/scope-catalog.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/src/vault.js +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/tests/capabilities.test.mjs +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/tests/connector.test.mjs +0 -0
- /package/packages/connectors/{cloudflare → cfoa}/tests/oauth-persist.test.mjs +0 -0
- /package/packages/identity/src/oauth/{google-desktop-exchange.js → goaude.js} +0 -0
package/src/acp/runs.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { appendAgentRunEvent, createLocalQueueControl } from './dependencies.js';
|
|
3
|
+
|
|
4
|
+
function clean(value) {
|
|
5
|
+
return value == null ? '' : String(value).trim();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function object(value) {
|
|
9
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create a portable root AgentSam run and schedule it as an agent.run job.
|
|
14
|
+
*
|
|
15
|
+
* This is a control-plane operation only. It does not call a model. A runtime
|
|
16
|
+
* consumer later claims the queued job and performs execution.
|
|
17
|
+
*/
|
|
18
|
+
export async function createRootRun(database, {
|
|
19
|
+
runId = null,
|
|
20
|
+
accountId = null,
|
|
21
|
+
conversationId = null,
|
|
22
|
+
objective = '',
|
|
23
|
+
role = 'lead',
|
|
24
|
+
mode = 'agent',
|
|
25
|
+
modelKey = null,
|
|
26
|
+
reasoningEffort = null,
|
|
27
|
+
serviceTier = null,
|
|
28
|
+
runtimeRequirements = {},
|
|
29
|
+
metadata = {},
|
|
30
|
+
priority = 'normal',
|
|
31
|
+
sourceClient = 'agentsam-acp',
|
|
32
|
+
surface = 'control-plane',
|
|
33
|
+
} = {}) {
|
|
34
|
+
if (!database || typeof database.prepare !== 'function') {
|
|
35
|
+
throw new TypeError('database with prepare() is required');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const id = clean(runId) || `arun_${randomUUID()}`;
|
|
39
|
+
const account = clean(accountId) || 'local';
|
|
40
|
+
const now = Math.floor(Date.now() / 1000);
|
|
41
|
+
const resolvedMode = clean(mode) || 'agent';
|
|
42
|
+
const resolvedRole = clean(role) || 'lead';
|
|
43
|
+
const resolvedObjective = clean(objective);
|
|
44
|
+
const requirements = object(runtimeRequirements);
|
|
45
|
+
const meta = object(metadata);
|
|
46
|
+
|
|
47
|
+
await database.prepare(`
|
|
48
|
+
INSERT INTO agentsam_agent_run (
|
|
49
|
+
id, account_id, conversation_id, source_client, surface, mode, model_key,
|
|
50
|
+
reasoning_effort, requested_service_tier, selected_by, status,
|
|
51
|
+
created_at_unix, updated_at_unix
|
|
52
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'automatic', 'queued', ?, ?)
|
|
53
|
+
`).bind(
|
|
54
|
+
id,
|
|
55
|
+
account,
|
|
56
|
+
clean(conversationId) || null,
|
|
57
|
+
clean(sourceClient) || 'agentsam-acp',
|
|
58
|
+
clean(surface) || 'control-plane',
|
|
59
|
+
resolvedMode,
|
|
60
|
+
clean(modelKey) || null,
|
|
61
|
+
clean(reasoningEffort) || null,
|
|
62
|
+
clean(serviceTier) || null,
|
|
63
|
+
now,
|
|
64
|
+
now,
|
|
65
|
+
).run();
|
|
66
|
+
|
|
67
|
+
await appendAgentRunEvent(database, {
|
|
68
|
+
runId: id,
|
|
69
|
+
eventType: 'run.created',
|
|
70
|
+
phase: 'boot',
|
|
71
|
+
label: 'Agent run created',
|
|
72
|
+
evidence: {
|
|
73
|
+
objective: resolvedObjective || null,
|
|
74
|
+
role: resolvedRole,
|
|
75
|
+
runtime_requirements: requirements,
|
|
76
|
+
},
|
|
77
|
+
dedupeKey: `root:${id}:created`,
|
|
78
|
+
createdAt: now,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
await appendAgentRunEvent(database, {
|
|
82
|
+
runId: id,
|
|
83
|
+
eventType: 'run.queued',
|
|
84
|
+
phase: 'boot',
|
|
85
|
+
label: 'Agent run queued',
|
|
86
|
+
evidence: { role: resolvedRole },
|
|
87
|
+
dedupeKey: `root:${id}:queued`,
|
|
88
|
+
createdAt: now,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const queueControl = createLocalQueueControl(database);
|
|
92
|
+
const queued = await queueControl.enqueue(
|
|
93
|
+
{
|
|
94
|
+
kind: 'agent.run',
|
|
95
|
+
account_id: account,
|
|
96
|
+
priority,
|
|
97
|
+
payload: {
|
|
98
|
+
run_id: id,
|
|
99
|
+
parent_run_id: null,
|
|
100
|
+
objective: resolvedObjective || null,
|
|
101
|
+
role: resolvedRole,
|
|
102
|
+
runtime_requirements: requirements,
|
|
103
|
+
metadata: meta,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: `job_agent_run_${id}`,
|
|
108
|
+
account_id: account,
|
|
109
|
+
source_run_id: id,
|
|
110
|
+
conversation_id: clean(conversationId) || null,
|
|
111
|
+
idempotency_key: `agent-run:${id}`,
|
|
112
|
+
priority,
|
|
113
|
+
metadata: meta,
|
|
114
|
+
},
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
schema: 'agentsam.run-start.v1',
|
|
119
|
+
run_id: id,
|
|
120
|
+
status: 'queued',
|
|
121
|
+
queue: queued.plan?.physical_queue || null,
|
|
122
|
+
queue_job: queued.job,
|
|
123
|
+
published: queued.published,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { capabilitiesSatisfy, RUNTIME_PROTOCOL_SCHEMA } from '../../packages/runtime-protocol/src/index.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULT_RUNNABLE_STATUSES = Object.freeze(['ready', 'online', 'sleeping']);
|
|
4
|
+
|
|
5
|
+
function clean(value) {
|
|
6
|
+
return value == null ? '' : String(value).trim();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function stringList(value) {
|
|
10
|
+
if (Array.isArray(value)) return value.map(clean).filter(Boolean);
|
|
11
|
+
const one = clean(value);
|
|
12
|
+
return one ? [one] : [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function normalizeRequiredCapabilities(value = {}) {
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
return Object.freeze(Object.fromEntries(value.map(clean).filter(Boolean).map((key) => [key, true])));
|
|
18
|
+
}
|
|
19
|
+
if (!value || typeof value !== 'object') return Object.freeze({});
|
|
20
|
+
return Object.freeze(Object.fromEntries(
|
|
21
|
+
Object.entries(value).map(([key, enabled]) => [clean(key), Boolean(enabled)]).filter(([key]) => key),
|
|
22
|
+
));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function normalizeRuntimeRequirements(value = {}) {
|
|
26
|
+
const input = value && typeof value === 'object' ? value : {};
|
|
27
|
+
const exact = {};
|
|
28
|
+
for (const field of [
|
|
29
|
+
'provider',
|
|
30
|
+
'substrate',
|
|
31
|
+
'provider_product',
|
|
32
|
+
'lifecycle',
|
|
33
|
+
'runtime_adapter',
|
|
34
|
+
'architecture',
|
|
35
|
+
'os',
|
|
36
|
+
'transport',
|
|
37
|
+
'auth_mode',
|
|
38
|
+
]) {
|
|
39
|
+
const resolved = clean(input[field]);
|
|
40
|
+
if (resolved) exact[field] = resolved;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
schema: 'agentsam.runtime-requirements.v1',
|
|
45
|
+
exact: Object.freeze(exact),
|
|
46
|
+
capabilities: normalizeRequiredCapabilities(input.capabilities),
|
|
47
|
+
statuses: Object.freeze(
|
|
48
|
+
stringList(input.statuses ?? input.status).length
|
|
49
|
+
? stringList(input.statuses ?? input.status)
|
|
50
|
+
: [...DEFAULT_RUNNABLE_STATUSES],
|
|
51
|
+
),
|
|
52
|
+
preferredProviders: Object.freeze(stringList(input.preferred_providers ?? input.preferredProviders)),
|
|
53
|
+
preferredSubstrates: Object.freeze(stringList(input.preferred_substrates ?? input.preferredSubstrates)),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function unwrapRuntime(candidate) {
|
|
58
|
+
if (candidate?.runtime && typeof candidate.runtime === 'object') {
|
|
59
|
+
return { id: clean(candidate.id || candidate.runtime_id || candidate.runtime.id) || null, runtime: candidate.runtime };
|
|
60
|
+
}
|
|
61
|
+
return { id: clean(candidate?.id || candidate?.runtime_id) || null, runtime: candidate || {} };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function matchRuntimeCandidate(candidate, requirements = {}) {
|
|
65
|
+
const normalized = requirements?.schema === 'agentsam.runtime-requirements.v1'
|
|
66
|
+
? requirements
|
|
67
|
+
: normalizeRuntimeRequirements(requirements);
|
|
68
|
+
const { id, runtime } = unwrapRuntime(candidate);
|
|
69
|
+
const mismatches = [];
|
|
70
|
+
|
|
71
|
+
if (runtime.schema && runtime.schema !== RUNTIME_PROTOCOL_SCHEMA) {
|
|
72
|
+
mismatches.push({ field: 'schema', required: RUNTIME_PROTOCOL_SCHEMA, actual: runtime.schema });
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
for (const [field, required] of Object.entries(normalized.exact)) {
|
|
76
|
+
if (clean(runtime[field]) !== required) {
|
|
77
|
+
mismatches.push({ field, required, actual: clean(runtime[field]) || null });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const capabilityMatch = capabilitiesSatisfy(normalized.capabilities, runtime.capabilities || {});
|
|
82
|
+
for (const missing of capabilityMatch.missing) {
|
|
83
|
+
mismatches.push({ field: 'capabilities.' + missing, required: true, actual: runtime.capabilities?.[missing] ?? false });
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (normalized.statuses.length && !normalized.statuses.includes(clean(runtime.status))) {
|
|
87
|
+
mismatches.push({
|
|
88
|
+
field: 'status',
|
|
89
|
+
required: normalized.statuses,
|
|
90
|
+
actual: clean(runtime.status) || null,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return Object.freeze({
|
|
95
|
+
ok: mismatches.length === 0,
|
|
96
|
+
id,
|
|
97
|
+
runtime,
|
|
98
|
+
mismatches: Object.freeze(mismatches),
|
|
99
|
+
missingCapabilities: Object.freeze(capabilityMatch.missing),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function preferenceIndex(list, value) {
|
|
104
|
+
const index = list.indexOf(clean(value));
|
|
105
|
+
return index === -1 ? Number.MAX_SAFE_INTEGER : index;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function readinessIndex(status) {
|
|
109
|
+
const value = clean(status);
|
|
110
|
+
if (value === 'ready') return 0;
|
|
111
|
+
if (value === 'online') return 1;
|
|
112
|
+
if (value === 'sleeping') return 2;
|
|
113
|
+
return 3;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Hard-filter using agentsam.runtime.v1, then apply only explicit preferences.
|
|
118
|
+
* There is no cloud-provider-specific hidden score.
|
|
119
|
+
*/
|
|
120
|
+
export function selectRuntimeCandidate(candidates = [], requirements = {}) {
|
|
121
|
+
const normalized = normalizeRuntimeRequirements(requirements);
|
|
122
|
+
const evaluations = candidates.map((candidate, index) => ({
|
|
123
|
+
index,
|
|
124
|
+
candidate,
|
|
125
|
+
match: matchRuntimeCandidate(candidate, normalized),
|
|
126
|
+
}));
|
|
127
|
+
const eligible = evaluations.filter((row) => row.match.ok);
|
|
128
|
+
|
|
129
|
+
eligible.sort((a, b) => {
|
|
130
|
+
const ap = preferenceIndex(normalized.preferredProviders, a.match.runtime.provider);
|
|
131
|
+
const bp = preferenceIndex(normalized.preferredProviders, b.match.runtime.provider);
|
|
132
|
+
if (ap !== bp) return ap - bp;
|
|
133
|
+
|
|
134
|
+
const as = preferenceIndex(normalized.preferredSubstrates, a.match.runtime.substrate);
|
|
135
|
+
const bs = preferenceIndex(normalized.preferredSubstrates, b.match.runtime.substrate);
|
|
136
|
+
if (as !== bs) return as - bs;
|
|
137
|
+
|
|
138
|
+
const ar = readinessIndex(a.match.runtime.status);
|
|
139
|
+
const br = readinessIndex(b.match.runtime.status);
|
|
140
|
+
if (ar !== br) return ar - br;
|
|
141
|
+
|
|
142
|
+
const aid = a.match.id || '';
|
|
143
|
+
const bid = b.match.id || '';
|
|
144
|
+
if (aid && bid && aid !== bid) return aid.localeCompare(bid);
|
|
145
|
+
return a.index - b.index;
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
if (!eligible.length) {
|
|
149
|
+
const error = new Error('runtime_unavailable');
|
|
150
|
+
error.code = 'runtime_unavailable';
|
|
151
|
+
error.requirements = normalized;
|
|
152
|
+
error.diagnostics = evaluations.map(({ match }) => ({
|
|
153
|
+
id: match.id,
|
|
154
|
+
provider: match.runtime.provider ?? null,
|
|
155
|
+
substrate: match.runtime.substrate ?? null,
|
|
156
|
+
status: match.runtime.status ?? null,
|
|
157
|
+
mismatches: match.mismatches,
|
|
158
|
+
}));
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const selected = eligible[0].match;
|
|
163
|
+
return Object.freeze({
|
|
164
|
+
schema: 'agentsam.runtime-selection.v1',
|
|
165
|
+
runtime_id: selected.id,
|
|
166
|
+
runtime: selected.runtime,
|
|
167
|
+
requirements: normalized,
|
|
168
|
+
eligible_count: eligible.length,
|
|
169
|
+
rejected_count: evaluations.length - eligible.length,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function createRuntimeSelector({ listRuntimes } = {}) {
|
|
174
|
+
if (typeof listRuntimes !== 'function') throw new TypeError('listRuntimes function is required');
|
|
175
|
+
return async function resolveRuntime(requirements = {}, context = {}) {
|
|
176
|
+
const candidates = await listRuntimes(context);
|
|
177
|
+
if (!Array.isArray(candidates)) throw new TypeError('runtime registry must return an array');
|
|
178
|
+
return selectRuntimeCandidate(candidates, requirements);
|
|
179
|
+
};
|
|
180
|
+
}
|
|
@@ -7,6 +7,11 @@ import { searchToolCards, hydrateToolSchemas } from '../tools/index.js';
|
|
|
7
7
|
import { createAgentEvent } from '../telemetry/index.js';
|
|
8
8
|
import { diagnosticFromError } from '../errors/index.js';
|
|
9
9
|
import { runAgentSamModelTurn } from './model-turn.js';
|
|
10
|
+
import {
|
|
11
|
+
createHookedCapabilityAdapter,
|
|
12
|
+
createHookedProviderAdapter,
|
|
13
|
+
ensureHookRuntime,
|
|
14
|
+
} from '../../packages/agentsam-hooks/src/index.js';
|
|
10
15
|
|
|
11
16
|
const RUNTIME_OWNED_KEYS = new Set(['account_id', 'user_id', 'tenant_id', 'workspace_id', 'connection_id', 'runtime_lease_id', 'execution_id']);
|
|
12
17
|
|
|
@@ -229,7 +234,7 @@ function toolOutputInput(outputs) {
|
|
|
229
234
|
}));
|
|
230
235
|
}
|
|
231
236
|
|
|
232
|
-
|
|
237
|
+
async function runAgentSamTurnCore(options = {}) {
|
|
233
238
|
const provider = options.provider;
|
|
234
239
|
if (!provider?.create || !provider?.continueWithToolOutputs) throw new TypeError('Responses provider adapter is required');
|
|
235
240
|
if (!options.capabilityAdapter) throw new TypeError('capabilityAdapter is required');
|
|
@@ -615,5 +620,144 @@ export async function runAgentSamTurn(options = {}) {
|
|
|
615
620
|
});
|
|
616
621
|
}
|
|
617
622
|
|
|
623
|
+
function hookInvocation(options = {}) {
|
|
624
|
+
return {
|
|
625
|
+
session_id: options.sessionId,
|
|
626
|
+
run_id: options.runId,
|
|
627
|
+
turn_id: options.turnId,
|
|
628
|
+
message_id: options.messageId,
|
|
629
|
+
agent_id: options.agentId,
|
|
630
|
+
source: options.source || 'agentsam-sdk',
|
|
631
|
+
metadata: options.hookMetadata,
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Provider-neutral AgentSam turn with optional lifecycle instrumentation.
|
|
637
|
+
*
|
|
638
|
+
* Passing `hookRuntime` (or a plain `hooks` registry) instruments the model
|
|
639
|
+
* and capability adapters without teaching the orchestration loop any
|
|
640
|
+
* provider, MCP, LSP, or sub-agent wire format. An agent_stop hook may request
|
|
641
|
+
* another bounded turn; continuation reuses provider state and cumulative
|
|
642
|
+
* usage instead of constructing a hidden second session.
|
|
643
|
+
*/
|
|
644
|
+
export async function runAgentSamTurn(options = {}) {
|
|
645
|
+
const hookSource = options.hookRuntime || options.hooks;
|
|
646
|
+
if (!hookSource) return runAgentSamTurnCore(options);
|
|
647
|
+
|
|
648
|
+
const hooks = ensureHookRuntime(hookSource);
|
|
649
|
+
const cwd = path.resolve(options.cwd || process.cwd());
|
|
650
|
+
const invocation = hookInvocation(options);
|
|
651
|
+
const submitted = await hooks.dispatch('user_prompt_submitted', {
|
|
652
|
+
prompt: clean(options.prompt),
|
|
653
|
+
cwd,
|
|
654
|
+
}, invocation, { cwd });
|
|
655
|
+
const submittedPrompt = clean(submitted.input.prompt);
|
|
656
|
+
if (!submittedPrompt) throw new TypeError('prompt is required');
|
|
657
|
+
const transformed = await hooks.dispatch('user_prompt_transformed', {
|
|
658
|
+
original_prompt: clean(options.prompt),
|
|
659
|
+
transformed_prompt: submittedPrompt,
|
|
660
|
+
cwd,
|
|
661
|
+
}, invocation, { cwd });
|
|
662
|
+
const prompt = clean(transformed.input.transformed_prompt);
|
|
663
|
+
if (!prompt) throw new TypeError('transformed prompt is required');
|
|
664
|
+
const additionalContext = [submitted.output.additional_context, transformed.output.additional_context]
|
|
665
|
+
.filter(Boolean).join('\n\n');
|
|
666
|
+
const instrumented = {
|
|
667
|
+
...options,
|
|
668
|
+
prompt,
|
|
669
|
+
provider: createHookedProviderAdapter(options.provider, {
|
|
670
|
+
hookRuntime: hooks,
|
|
671
|
+
invocation,
|
|
672
|
+
cwd,
|
|
673
|
+
requestPermission: options.requestPermission,
|
|
674
|
+
maxRetries: options.maxHookRetries,
|
|
675
|
+
}),
|
|
676
|
+
capabilityAdapter: createHookedCapabilityAdapter(options.capabilityAdapter, {
|
|
677
|
+
hookRuntime: hooks,
|
|
678
|
+
invocation,
|
|
679
|
+
cwd,
|
|
680
|
+
requestPermission: options.requestPermission,
|
|
681
|
+
maxRetries: options.maxHookRetries,
|
|
682
|
+
}),
|
|
683
|
+
...(additionalContext && options.instructions != null
|
|
684
|
+
? { instructions: [String(options.instructions), additionalContext].filter(Boolean).join('\n\n') }
|
|
685
|
+
: {}),
|
|
686
|
+
...(additionalContext && options.instructions == null
|
|
687
|
+
? {
|
|
688
|
+
contextItems: [
|
|
689
|
+
...(options.contextItems || []),
|
|
690
|
+
{ kind: 'hook', ref: 'hook://user-prompt/context', priority: 95, content: additionalContext },
|
|
691
|
+
],
|
|
692
|
+
}
|
|
693
|
+
: {}),
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
const maxContinuations = Number.isInteger(options.maxHookContinuations)
|
|
697
|
+
? Math.max(0, Math.min(options.maxHookContinuations, 8))
|
|
698
|
+
: 4;
|
|
699
|
+
const continuationReceipts = [];
|
|
700
|
+
let current = instrumented;
|
|
701
|
+
let result;
|
|
702
|
+
let totalCost = 0;
|
|
703
|
+
let totalRounds = 0;
|
|
704
|
+
let totalCalls = 0;
|
|
705
|
+
let totalElapsedMs = 0;
|
|
706
|
+
let hookContinuations = 0;
|
|
707
|
+
const costBreakdown = { input: 0, cached_input: 0, cache_write: 0, output: 0 };
|
|
708
|
+
const allToolReceipts = [];
|
|
709
|
+
const allContinuationCompactions = [];
|
|
710
|
+
|
|
711
|
+
for (let continuationIndex = 0; ; continuationIndex += 1) {
|
|
712
|
+
result = await runAgentSamTurnCore(current);
|
|
713
|
+
totalCost += Number(result.total_cost_usd || 0);
|
|
714
|
+
totalRounds += Number(result.run_budget?.tool_rounds || 0);
|
|
715
|
+
totalCalls += Number(result.run_budget?.tool_calls || 0);
|
|
716
|
+
totalElapsedMs += Number(result.run_budget?.elapsed_ms || 0);
|
|
717
|
+
for (const key of Object.keys(costBreakdown)) costBreakdown[key] += Number(result.cost_breakdown_usd?.[key] || 0);
|
|
718
|
+
allToolReceipts.push(...(result.tool_receipts || []));
|
|
719
|
+
allContinuationCompactions.push(...(result.continuation_compactions || []));
|
|
720
|
+
const stopped = await hooks.dispatch('agent_stop', {
|
|
721
|
+
stop_reason: result.output_text ? 'completed' : 'no_output',
|
|
722
|
+
stop_hook_active: continuationIndex > 0,
|
|
723
|
+
output_text: result.output_text,
|
|
724
|
+
continuation_index: continuationIndex,
|
|
725
|
+
run_budget: result.run_budget,
|
|
726
|
+
}, invocation, { cwd });
|
|
727
|
+
continuationReceipts.push(...stopped.receipts);
|
|
728
|
+
if (stopped.output.decision !== 'block') break;
|
|
729
|
+
if (continuationIndex >= maxContinuations) throw new Error(`hook_continuation_limit_exceeded:${maxContinuations}`);
|
|
730
|
+
const reason = clean(stopped.output.reason);
|
|
731
|
+
if (!reason) throw new Error('hook_continuation_reason_required');
|
|
732
|
+
hookContinuations += 1;
|
|
733
|
+
current = {
|
|
734
|
+
...instrumented,
|
|
735
|
+
prompt: reason,
|
|
736
|
+
previousProviderState: result.provider_state,
|
|
737
|
+
previousUsageSnapshot: result.usage_snapshot,
|
|
738
|
+
cumulativeUsage: result.cumulative_usage,
|
|
739
|
+
};
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
return Object.freeze({
|
|
743
|
+
...result,
|
|
744
|
+
...(submitted.output.suppress_output === true || transformed.output.suppress_output === true
|
|
745
|
+
? { output_text: '', suppressed_by_hook: true } : {}),
|
|
746
|
+
total_cost_usd: totalCost,
|
|
747
|
+
cost_breakdown_usd: Object.freeze(costBreakdown),
|
|
748
|
+
tool_receipts: Object.freeze(allToolReceipts),
|
|
749
|
+
continuation_compactions: Object.freeze(allContinuationCompactions),
|
|
750
|
+
run_budget: Object.freeze({
|
|
751
|
+
...result.run_budget,
|
|
752
|
+
tool_rounds: totalRounds,
|
|
753
|
+
tool_calls: totalCalls,
|
|
754
|
+
elapsed_ms: totalElapsedMs,
|
|
755
|
+
hook_continuations: hookContinuations,
|
|
756
|
+
max_hook_continuations: maxContinuations,
|
|
757
|
+
}),
|
|
758
|
+
hook_receipts: Object.freeze([...submitted.receipts, ...transformed.receipts, ...continuationReceipts]),
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
|
|
618
762
|
/** @deprecated Use runAgentSamTurn(). */
|
|
619
763
|
export const runResponsesAgent = runAgentSamTurn;
|
|
@@ -16,6 +16,8 @@ export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
|
16
16
|
{ id: 'machine', summary: 'Deterministic local machine perception (inspect / asset discovery)', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'machine.inspect', common: true },
|
|
17
17
|
{ id: 'engine', summary: 'Discover, audit, benchmark, and govern local AI engines', topic: 'runtime', skill: 'agentsam-app-fundamentals', operation: 'engine.audit', common: true },
|
|
18
18
|
{ id: 'package', summary: 'Audit, verify, and plan publication of distributable packages', topic: 'work', skill: 'agentsam-progression-guard', operation: 'package.audit', common: true, usage: ['agentsam package audit [--public] [--offline] [--json]', 'agentsam package status <name> [--offline] [--json]', 'agentsam package verify <name> [--offline] [--json]', 'agentsam package publish-plan [--offline] [--json]'] },
|
|
19
|
+
{ id: 'merch', summary: 'Preflight designs against portable manufacturing profiles', topic: 'work', skill: 'agentsam-app-fundamentals', operation: 'merch.preflight', common: true, usage: ['agentsam merch profiles', 'agentsam merch build <manifest.json> [--all-compatible]'] },
|
|
20
|
+
{ id: 'receipts', summary: 'Inspect receipt proofs and prune ephemeral AgentSam workdirs', topic: 'runtime', skill: 'agentsam-progression-guard', operation: 'receipts.inspect', common: true, usage: ['agentsam receipts list [--limit 20] [--repo <id>]', 'agentsam receipts show <receipt-id>', 'agentsam receipts failures [--repo <id>]', 'agentsam receipts prune [--max-tmp-gb 1.0] [--dry-run]'] },
|
|
19
21
|
{ id: 'capabilities', summary: 'Inspect capability contracts', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
20
22
|
{
|
|
21
23
|
id: 'setup',
|
|
@@ -47,6 +49,7 @@ export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
|
47
49
|
},
|
|
48
50
|
{ id: 'db', summary: 'Project-local SQLite status/init', topic: 'runtime', skill: 'agentsam-app-fundamentals' },
|
|
49
51
|
{ id: 'models', summary: 'Probe hosted/local model availability', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
52
|
+
{ id: 'hooks', aliases: ['hook'], summary: 'Inspect lifecycle hooks, sources, and execution receipts', topic: 'runtime', skill: 'agentsam-app-fundamentals', common: true, usage: ['agentsam hooks status', 'agentsam hooks list', 'agentsam hooks executions [--limit N]', 'agentsam hooks init'] },
|
|
50
53
|
{ id: 'providers', summary: 'Configure machine provider credentials', topic: 'start', skill: 'agentsam-app-fundamentals' },
|
|
51
54
|
{ id: 'credentials', aliases: ['credential'], summary: 'Audit credentials, drift, and failure remediation (never prints secrets)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
52
55
|
{ id: 'cheat-sheet', aliases: ['cheatsheet'], summary: 'Organized command groups (gcloud-like)', topic: 'start', skill: 'agentsam-app-fundamentals', common: true },
|
|
@@ -105,6 +108,7 @@ export const CLI_COMMAND_CATALOG = Object.freeze([
|
|
|
105
108
|
{ id: 'autorag', summary: 'AutoRAG configure/probe helpers', topic: 'work', skill: 'agentsam-codebaseindex' },
|
|
106
109
|
{ id: 'identity', summary: 'Identity portal, providers, protocol surfaces', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
107
110
|
{ id: 'scaffold', summary: 'Generate CMS or worker-api starter', topic: 'create', skill: 'agentsam-jr-dev' },
|
|
111
|
+
{ id: 'run', aliases: ['runs'], summary: 'Inspect and control AgentSam runs across local or hosted control planes', topic: 'work', skill: 'agentsam-app-fundamentals' },
|
|
108
112
|
{ id: 'goap', summary: 'GOAP blackboard status/plan', topic: 'inside', skill: 'agentsam-app-fundamentals' },
|
|
109
113
|
{ id: 'app', aliases: ['apps'], summary: 'Bundled AgentSam apps launcher', topic: 'create', skill: 'agentsam-app-fundamentals' },
|
|
110
114
|
]);
|
package/src/cli.js
CHANGED
|
@@ -33,6 +33,8 @@ import { runMerkle } from './commands/merkle.js';
|
|
|
33
33
|
import { runDeployReceipt } from './commands/deploy-receipt.js';
|
|
34
34
|
import { runSecurity } from './commands/security.js';
|
|
35
35
|
import { runPackage } from './commands/package.js';
|
|
36
|
+
import { runMerch } from './commands/merch.js';
|
|
37
|
+
import { runReceipts } from './commands/receipts.js';
|
|
36
38
|
import { runRecon } from './commands/recon.js';
|
|
37
39
|
import { runCad } from './commands/cad.js';
|
|
38
40
|
import { runMachine } from './commands/machine.js';
|
|
@@ -52,12 +54,14 @@ import { runLogin, runLogout } from './commands/account-auth.js';
|
|
|
52
54
|
import { runPlugins } from './commands/plugins.js';
|
|
53
55
|
import { runCredentials } from './commands/credentials.js';
|
|
54
56
|
import { runCheatSheet } from './commands/cheat-sheet.js';
|
|
57
|
+
import { runHooks } from './commands/hooks.js';
|
|
55
58
|
import { runCompute } from './commands/compute.js';
|
|
56
59
|
import { runGoogleCloud } from './commands/google-cloud.js';
|
|
57
60
|
import { runBilling } from './commands/billing.js';
|
|
58
61
|
import { runUpdate } from './commands/update.js';
|
|
59
62
|
import { runSetup } from './commands/setup.js';
|
|
60
63
|
import { runRuntime } from './commands/runtime.js';
|
|
64
|
+
import { runRun } from './commands/run.js';
|
|
61
65
|
import { applyPresetSelection, runAdd, runCapabilities, runDev, runInspect } from './commands/product.js';
|
|
62
66
|
import { listPresets, resolvePreset } from './presets/index.js';
|
|
63
67
|
import {
|
|
@@ -503,6 +507,14 @@ if (command === '--version' || command === '-v') {
|
|
|
503
507
|
reportCliError(e);
|
|
504
508
|
process.exit(1);
|
|
505
509
|
}
|
|
510
|
+
} else if (command === 'hooks' || command === 'hook') {
|
|
511
|
+
try {
|
|
512
|
+
const code = await runHooks(rest);
|
|
513
|
+
if (typeof code === 'number' && code !== 0) process.exitCode = code;
|
|
514
|
+
} catch (e) {
|
|
515
|
+
reportCliError(e);
|
|
516
|
+
process.exitCode = 1;
|
|
517
|
+
}
|
|
506
518
|
} else if (command === 'app' || command === 'apps') {
|
|
507
519
|
try {
|
|
508
520
|
await runApp(rest);
|
|
@@ -615,6 +627,13 @@ if (command === '--version' || command === '-v') {
|
|
|
615
627
|
if (!e?.reported) reportCliError(e);
|
|
616
628
|
process.exitCode = 1;
|
|
617
629
|
}
|
|
630
|
+
} else if (command === 'run' || command === 'runs') {
|
|
631
|
+
try {
|
|
632
|
+
await runRun(rest);
|
|
633
|
+
} catch (e) {
|
|
634
|
+
if (!e?.reported) reportCliError(e);
|
|
635
|
+
process.exitCode = 1;
|
|
636
|
+
}
|
|
618
637
|
} else if (command === 'rust' || command === 'wasm' || command === 'rapid-rust') {
|
|
619
638
|
try {
|
|
620
639
|
await runRust(rest);
|
|
@@ -747,6 +766,20 @@ if (command === '--version' || command === '-v') {
|
|
|
747
766
|
reportCliError(e);
|
|
748
767
|
process.exitCode = 1;
|
|
749
768
|
}
|
|
769
|
+
} else if (command === 'merch') {
|
|
770
|
+
try {
|
|
771
|
+
await runMerch(rest);
|
|
772
|
+
} catch (e) {
|
|
773
|
+
reportCliError(e);
|
|
774
|
+
process.exitCode = 1;
|
|
775
|
+
}
|
|
776
|
+
} else if (command === 'receipts') {
|
|
777
|
+
try {
|
|
778
|
+
await runReceipts(rest);
|
|
779
|
+
} catch (e) {
|
|
780
|
+
reportCliError(e);
|
|
781
|
+
process.exitCode = 1;
|
|
782
|
+
}
|
|
750
783
|
} else if (command === 'security' || command === 'sca') {
|
|
751
784
|
await runSecurity(rest);
|
|
752
785
|
} else if (command === 'skills') {
|
|
@@ -75,6 +75,7 @@ const GROUPS = Object.freeze([
|
|
|
75
75
|
label: 'AI',
|
|
76
76
|
commands: [
|
|
77
77
|
['models', 'Hosted + local model probes'],
|
|
78
|
+
['hooks', 'Lifecycle sources, dispatch order, and receipts'],
|
|
78
79
|
['skills', 'Portable skill vocabulary'],
|
|
79
80
|
['context', 'Context economics + git bridge'],
|
|
80
81
|
['usage / session', 'Spend and resume receipts'],
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
getCloudflareFeaturePack,
|
|
17
17
|
scopesForFeaturePacks,
|
|
18
18
|
scopesForCapabilities,
|
|
19
|
-
} from '../../packages/connectors/
|
|
19
|
+
} from '../../packages/connectors/cfoa/src/index.js';
|
|
20
20
|
|
|
21
21
|
function clean(value) {
|
|
22
22
|
return value == null ? '' : String(value).trim();
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
tokenValidation,
|
|
22
22
|
pages,
|
|
23
23
|
snippets,
|
|
24
|
-
} from '../../packages/connectors/
|
|
25
|
-
import { AGENTSAM_TAG_VOCABULARY as TAG_VOCAB } from '../../packages/connectors/
|
|
24
|
+
} from '../../packages/connectors/cfoa/src/index.js';
|
|
25
|
+
import { AGENTSAM_TAG_VOCABULARY as TAG_VOCAB } from '../../packages/connectors/cfoa/src/families/tags.js';
|
|
26
26
|
import {
|
|
27
27
|
isCloudflareLoginFamily,
|
|
28
28
|
runCloudflareBrowserOAuthLogin,
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
CLOUDFLARE_FIXTURE_CLIENT_ID,
|
|
8
8
|
cloudflareConnectionSafeStatus,
|
|
9
9
|
resolveCloudflareOAuthClient,
|
|
10
|
-
} from '../../packages/connectors/
|
|
10
|
+
} from '../../packages/connectors/cfoa/src/index.js';
|
|
11
11
|
import { resolveIamIssuer } from '../../packages/identity/src/contracts/auth-config.js';
|
|
12
12
|
import { collectRuntimeStatus } from './runtime-status.js';
|
|
13
13
|
|