@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.
Files changed (392) hide show
  1. package/README.md +21 -0
  2. package/TRADEMARKS.md +22 -0
  3. package/apps/README.md +3 -0
  4. package/apps/cad-creator/LICENSE +21 -0
  5. package/apps/cad-creator/README.md +4 -1
  6. package/apps/cad-creator/shared/cad/package.json +1 -1
  7. package/apps/client-cms-editor/LICENSE +21 -0
  8. package/apps/client-cms-editor/README.md +3 -0
  9. package/apps/client-cms-editor/backend/package.json +3 -3
  10. package/apps/client-cms-editor/frontend/package.json +4 -4
  11. package/apps/client-cms-editor/package-lock.json +43 -43
  12. package/apps/client-cms-editor/package.json +3 -3
  13. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +1 -1
  14. package/apps/client-cms-editor/reference/harvest/README.md +1 -1
  15. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +1 -1
  16. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +1 -1
  17. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +1 -1
  18. package/apps/client-cms-editor/shared/cms/package.json +2 -2
  19. package/docs/MINI.md +4 -2
  20. package/docs/REPO_FILE_MAP.txt +0 -1
  21. package/docs/SOURCE_ARCHITECTURE.md +1 -1
  22. package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +140 -0
  23. package/docs/architecture/HOOKS-MODELS-SELF-HOSTING-PLAN.md +199 -0
  24. package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
  25. package/docs/engineering/go-portability/01-product-project-deployment-authority.md +69 -0
  26. package/docs/engineering/provider-internal-renames/01-lane-initialization.md +20 -0
  27. package/docs/engineering/provider-internal-renames/01a-runtime-environment-contract.md +115 -0
  28. package/docs/engineering/provider-internal-renames/02-cfoa.md +57 -0
  29. package/docs/engineering/provider-internal-renames/03-gclioa.md +32 -0
  30. package/docs/engineering/provider-internal-renames/04-goaude.md +50 -0
  31. package/docs/engineering/provider-internal-renames/05-gdrv.md +33 -0
  32. package/docs/engineering/provider-internal-renames/06-verification.md +103 -0
  33. package/docs/engineering/provider-internal-renames/README.md +77 -0
  34. package/docs/engineering/provider-internal-renames/runtime-environment-contract.json +220 -0
  35. package/docs/engineering/test-diagnostics/go-cli-test-hang-20261003.md +49 -0
  36. package/docs/engineering/test-diagnostics/go-skip-deploy-docker-fix.md +90 -0
  37. package/docs/knowledge-service-verification.md +3 -3
  38. package/docs/plans/AGENTSAM-SUSPEND-QUEUE-KNOWLEDGE-RDP-2026-10-03.md +870 -0
  39. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +9 -9
  40. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +11 -11
  41. package/docs/plans/RECONCILIATION-2026-09-19.md +6 -6
  42. package/docs/plans/SAM_WORK_PROTOCOL.md +667 -0
  43. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +2 -2
  44. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +3 -3
  45. package/examples/hyperspace-demo/index.html +16 -0
  46. package/examples/hyperspace-demo/package.json +21 -0
  47. package/examples/hyperspace-demo/src/main.tsx +277 -0
  48. package/examples/hyperspace-demo/tsconfig.json +9 -0
  49. package/examples/hyperspace-demo/vite.config.ts +24 -0
  50. package/migrations/d1/0020_agentsam_receipt_catalog.sql +35 -0
  51. package/migrations/runtime/0005_agentsam_hooks.sql +87 -0
  52. package/migrations/runtime/0006_agent_run_suspend_activity.sql +53 -0
  53. package/migrations/runtime/0007_queue_control.sql +40 -0
  54. package/migrations/runtime/0008_agent_run_dependencies.sql +24 -0
  55. package/migrations/runtime/0008_analytics_legacy_bootstrap.sql +43 -0
  56. package/migrations/runtime/0009_analytics_authority.sql +108 -0
  57. package/package.json +45 -14
  58. package/packages/agentsam-brand/README.md +3 -0
  59. package/packages/agentsam-brand/package.json +2 -2
  60. package/packages/agentsam-brand/src/core/v2/compile.js +1 -1
  61. package/packages/agentsam-brand/src/core/v2/schema.js +1 -1
  62. package/packages/agentsam-contracts/dist/adapter.d.ts +22 -0
  63. package/packages/agentsam-contracts/dist/adapter.js +0 -0
  64. package/packages/agentsam-contracts/dist/agent.d.ts +66 -0
  65. package/packages/agentsam-contracts/dist/agent.js +15 -0
  66. package/packages/agentsam-contracts/dist/artifacts.d.ts +70 -0
  67. package/packages/agentsam-contracts/dist/artifacts.js +0 -0
  68. package/packages/agentsam-contracts/dist/authority.d.ts +21 -0
  69. package/packages/agentsam-contracts/dist/authority.js +0 -0
  70. package/packages/agentsam-contracts/dist/context.d.ts +14 -0
  71. package/packages/agentsam-contracts/dist/context.js +0 -0
  72. package/packages/agentsam-contracts/dist/errors.d.ts +121 -0
  73. package/packages/agentsam-contracts/dist/errors.js +5 -0
  74. package/packages/agentsam-contracts/dist/events.d.ts +53 -0
  75. package/packages/agentsam-contracts/dist/events.js +0 -0
  76. package/packages/agentsam-contracts/dist/execution.d.ts +38 -0
  77. package/packages/agentsam-contracts/dist/execution.js +0 -0
  78. package/packages/agentsam-contracts/dist/hooks.d.ts +31 -0
  79. package/packages/agentsam-contracts/dist/hooks.js +0 -0
  80. package/packages/agentsam-contracts/dist/identity.d.ts +15 -0
  81. package/packages/agentsam-contracts/dist/identity.js +0 -0
  82. package/packages/agentsam-contracts/dist/index.d.ts +16 -0
  83. package/packages/agentsam-contracts/dist/index.js +164 -0
  84. package/packages/agentsam-contracts/dist/models.d.ts +9 -0
  85. package/packages/agentsam-contracts/dist/models.js +0 -0
  86. package/packages/agentsam-contracts/dist/providers.d.ts +27 -0
  87. package/packages/agentsam-contracts/dist/providers.js +0 -0
  88. package/packages/agentsam-contracts/dist/repository.d.ts +56 -0
  89. package/packages/agentsam-contracts/dist/repository.js +15 -0
  90. package/packages/agentsam-contracts/dist/run.d.ts +113 -0
  91. package/packages/agentsam-contracts/dist/run.js +132 -0
  92. package/packages/agentsam-contracts/dist/tools.d.ts +82 -0
  93. package/packages/agentsam-contracts/dist/tools.js +0 -0
  94. package/packages/agentsam-contracts/dist/widgets.d.ts +38 -0
  95. package/packages/agentsam-contracts/dist/widgets.js +0 -0
  96. package/packages/agentsam-contracts/package.json +9 -1
  97. package/packages/agentsam-contracts/scripts/build.mjs +1 -1
  98. package/packages/agentsam-contracts/src/agent.ts +78 -3
  99. package/packages/agentsam-contracts/src/errors.ts +19 -10
  100. package/packages/agentsam-contracts/src/index.ts +2 -0
  101. package/packages/agentsam-contracts/src/run.ts +320 -0
  102. package/packages/agentsam-contracts/src/widgets.ts +58 -0
  103. package/packages/agentsam-contracts/test/contracts.test.mjs +1 -1
  104. package/packages/agentsam-contracts/test/run-contract.test.mjs +94 -0
  105. package/packages/agentsam-errors/package.json +11 -3
  106. package/packages/agentsam-errors/protocol/agentsam.error.v2.schema.json +821 -0
  107. package/packages/agentsam-errors/protocol/error-catalog.json +3512 -0
  108. package/packages/agentsam-errors/src/envelope.js +63 -11
  109. package/packages/agentsam-errors/src/error.js +6 -0
  110. package/packages/agentsam-errors/src/fingerprint.js +9 -1
  111. package/packages/agentsam-errors/src/normalize.js +51 -6
  112. package/packages/agentsam-errors/src/recovery.js +9 -35
  113. package/packages/agentsam-errors/src/transport.js +6 -1
  114. package/packages/agentsam-errors/src/vocabulary.js +515 -126
  115. package/packages/agentsam-errors/test/catalog-v2.test.mjs +106 -0
  116. package/packages/agentsam-errors/types/index.d.ts +157 -0
  117. package/packages/agentsam-goap/README.md +3 -0
  118. package/packages/agentsam-goap/package.json +2 -2
  119. package/packages/agentsam-hooks/README.md +206 -0
  120. package/packages/agentsam-hooks/bin/agentsam-hooks.mjs +64 -0
  121. package/packages/agentsam-hooks/bindings/go/command.go +55 -0
  122. package/packages/agentsam-hooks/bindings/go/errors_generated.go +402 -0
  123. package/packages/agentsam-hooks/bindings/go/go.mod +3 -0
  124. package/packages/agentsam-hooks/bindings/go/hooks.go +285 -0
  125. package/packages/agentsam-hooks/bindings/go/hooks_test.go +48 -0
  126. package/packages/agentsam-hooks/bindings/rust/Cargo.toml +11 -0
  127. package/packages/agentsam-hooks/bindings/rust/src/errors_generated.rs +396 -0
  128. package/packages/agentsam-hooks/bindings/rust/src/lib.rs +397 -0
  129. package/packages/agentsam-hooks/package.json +69 -0
  130. package/packages/agentsam-hooks/schema/manifest.json +54 -0
  131. package/packages/agentsam-hooks/scripts/clean-protocol.mjs +17 -0
  132. package/packages/agentsam-hooks/scripts/sync-protocol.mjs +27 -0
  133. package/packages/agentsam-hooks/src/adapters/agents.js +108 -0
  134. package/packages/agentsam-hooks/src/adapters/callback.js +4 -0
  135. package/packages/agentsam-hooks/src/adapters/capability.js +122 -0
  136. package/packages/agentsam-hooks/src/adapters/command.js +104 -0
  137. package/packages/agentsam-hooks/src/adapters/composite.js +31 -0
  138. package/packages/agentsam-hooks/src/adapters/http.js +58 -0
  139. package/packages/agentsam-hooks/src/adapters/lsp.js +116 -0
  140. package/packages/agentsam-hooks/src/adapters/mcp.js +76 -0
  141. package/packages/agentsam-hooks/src/adapters/provider.js +129 -0
  142. package/packages/agentsam-hooks/src/config.js +143 -0
  143. package/packages/agentsam-hooks/src/contracts.js +284 -0
  144. package/packages/agentsam-hooks/src/errors-generated.js +2732 -0
  145. package/packages/agentsam-hooks/src/index.d.ts +209 -0
  146. package/packages/agentsam-hooks/src/index.js +14 -0
  147. package/packages/agentsam-hooks/src/policy.js +34 -0
  148. package/packages/agentsam-hooks/src/runtime.js +312 -0
  149. package/packages/agentsam-hooks/src/store.js +264 -0
  150. package/packages/agentsam-hooks/test/adapters.test.mjs +216 -0
  151. package/packages/agentsam-hooks/test/runtime.test.mjs +258 -0
  152. package/packages/agentsam-knowledge/package.json +1 -1
  153. package/packages/agentsam-knowledge/src/backends/index.js +1 -1
  154. package/packages/agentsam-merch/README.md +62 -0
  155. package/packages/agentsam-merch/bin/agentsam-merch.mjs +16 -0
  156. package/packages/agentsam-merch/package.json +65 -0
  157. package/packages/agentsam-merch/profiles/completeful/dtg-back-large.json +42 -0
  158. package/packages/agentsam-merch/profiles/completeful/laser-engraving.json +39 -0
  159. package/packages/agentsam-merch/profiles/generic/embroidery-digitization.json +22 -0
  160. package/packages/agentsam-merch/schemas/collection-candidate.schema.json +66 -0
  161. package/packages/agentsam-merch/schemas/manufacturing-profile.schema.json +221 -0
  162. package/packages/agentsam-merch/src/adapters-completeful.js +50 -0
  163. package/packages/agentsam-merch/src/cli.js +93 -0
  164. package/packages/agentsam-merch/src/collection-lab.js +60 -0
  165. package/packages/agentsam-merch/src/compatibility.js +501 -0
  166. package/packages/agentsam-merch/src/derivatives.js +112 -0
  167. package/packages/agentsam-merch/src/index.d.ts +316 -0
  168. package/packages/agentsam-merch/src/index.js +46 -0
  169. package/packages/agentsam-merch/src/node/index.d.ts +58 -0
  170. package/packages/agentsam-merch/src/node/index.js +6 -0
  171. package/packages/agentsam-merch/src/node/raster.js +142 -0
  172. package/packages/agentsam-merch/src/node/vector.js +239 -0
  173. package/packages/agentsam-merch/src/product-concepts.js +118 -0
  174. package/packages/agentsam-merch/src/profile-registry.js +104 -0
  175. package/packages/agentsam-merch/src/profile.js +158 -0
  176. package/packages/agentsam-merch/src/transforms.js +215 -0
  177. package/packages/agentsam-merch/test/merch.test.mjs +332 -0
  178. package/packages/agentsam-merch/test/node-transforms.test.mjs +149 -0
  179. package/packages/agentsam-nav/dist/Nav.d.ts +43 -0
  180. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +10 -0
  181. package/packages/agentsam-nav/dist/NavContent.d.ts +2 -0
  182. package/packages/agentsam-nav/dist/NavFooter.d.ts +2 -0
  183. package/packages/agentsam-nav/dist/NavGroup.d.ts +3 -0
  184. package/packages/agentsam-nav/dist/NavHeader.d.ts +2 -0
  185. package/packages/agentsam-nav/dist/NavMenu.d.ts +22 -0
  186. package/packages/agentsam-nav/dist/NavProvider.d.ts +35 -0
  187. package/packages/agentsam-nav/dist/NavTrigger.d.ts +2 -0
  188. package/packages/agentsam-nav/dist/Surfaces.d.ts +41 -0
  189. package/packages/agentsam-nav/dist/browser.d.ts +11 -0
  190. package/packages/agentsam-nav/dist/browser.global.js +172 -0
  191. package/packages/agentsam-nav/dist/browser.js +9688 -0
  192. package/packages/agentsam-nav/dist/contracts.d.ts +76 -0
  193. package/packages/agentsam-nav/dist/index.d.ts +11 -0
  194. package/packages/agentsam-nav/dist/index.js +9689 -0
  195. package/packages/agentsam-nav/dist/legacy.css +83 -0
  196. package/packages/agentsam-nav/dist/shell.css +113 -0
  197. package/packages/agentsam-nav/dist/theme.css +113 -0
  198. package/packages/agentsam-nav/dist/utils.d.ts +1 -0
  199. package/packages/agentsam-nav/package.json +1 -1
  200. package/packages/agentsam-queue-control/README.md +4 -1
  201. package/packages/agentsam-queue-control/package.json +4 -3
  202. package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +111 -11
  203. package/packages/agentsam-queue-control/src/adapters/cloudflare.js +34 -6
  204. package/packages/agentsam-queue-control/src/adapters/memory.js +11 -2
  205. package/packages/agentsam-queue-control/src/adapters/sqlite.js +259 -0
  206. package/packages/agentsam-queue-control/src/contracts.js +207 -3
  207. package/packages/agentsam-queue-control/src/control-plane.js +62 -2
  208. package/packages/agentsam-queue-control/src/index.js +1 -0
  209. package/packages/agentsam-queue-control/test/queue-control.test.mjs +310 -0
  210. package/packages/agentsam-queue-control/test/sqlite-adapter.test.mjs +91 -0
  211. package/packages/agentsam-rapid-rust/README.md +3 -0
  212. package/packages/agentsam-repository/README.md +3 -0
  213. package/packages/agentsam-repository/package.json +1 -1
  214. package/packages/agentsam-vault/package.json +1 -1
  215. package/packages/agentsam-workbench/README.md +43 -0
  216. package/packages/agentsam-workbench/package.json +14 -4
  217. package/packages/agentsam-workbench/src/agent/AgentConversationSurface.tsx +108 -0
  218. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +25 -8
  219. package/packages/agentsam-workbench/src/agent/AgentRuntimeField.tsx +152 -0
  220. package/packages/agentsam-workbench/src/agent/Composer.tsx +10 -1
  221. package/packages/agentsam-workbench/src/agent/RunMode.ts +26 -0
  222. package/packages/agentsam-workbench/src/agent/Thread.tsx +18 -3
  223. package/packages/agentsam-workbench/src/agent/index.ts +3 -0
  224. package/packages/agentsam-workbench/src/index.ts +4 -0
  225. package/packages/agentsam-workbench/src/manufacturing/PreflightIndicator.tsx +203 -0
  226. package/packages/agentsam-workbench/src/manufacturing/index.ts +2 -0
  227. package/packages/agentsam-workbench/src/manufacturing/loading.ts +147 -0
  228. package/packages/agentsam-workbench/src/widgets/BuiltinWidget.tsx +22 -0
  229. package/packages/agentsam-workbench/src/widgets/CountdownWidget.tsx +68 -0
  230. package/packages/agentsam-workbench/src/widgets/WidgetFrame.tsx +56 -0
  231. package/packages/agentsam-workbench/src/widgets/countdown.ts +25 -0
  232. package/packages/agentsam-workbench/src/widgets/index.ts +6 -0
  233. package/packages/agentsam-workbench/src/widgets/registry.ts +13 -0
  234. package/packages/agentsam-workbench/src/widgets/useCountdown.ts +128 -0
  235. package/packages/agentsam-workbench/src/widgets/widgets.css +102 -0
  236. package/packages/connectors/{cloudflare → cfoa}/package.json +3 -3
  237. package/packages/heuristic-theme/package.json +1 -1
  238. package/packages/identity/README.md +3 -0
  239. package/packages/identity/backend/README.md +3 -0
  240. package/packages/identity/package.json +2 -2
  241. package/packages/identity/src/frontend/auth-portal/README.md +3 -0
  242. package/packages/identity/src/index.js +1 -1
  243. package/packages/identity/src/oauth/README.md +4 -1
  244. package/packages/identity/src/oauth/credentials.js +1 -1
  245. package/packages/identity/src/server/worker-router.js +1 -1
  246. package/packages/identity/tests/google-desktop-identity-login.test.mjs +1 -1
  247. package/packages/identity/tests/lane1-packed-consumer.test.mjs +1 -1
  248. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +1 -1
  249. package/packages/providers/completeful/package.json +1 -1
  250. package/packages/theme-church-site/package.json +2 -2
  251. package/packages/theme-companions-site/package.json +2 -2
  252. package/packages/theme-floors-site/package.json +2 -2
  253. package/packages/theme-fuelnfree-site/package.json +2 -2
  254. package/packages/theme-handyman-site/package.json +2 -2
  255. package/packages/theme-insurance-site/package.json +2 -2
  256. package/packages/theme-scenes/package.json +1 -1
  257. package/packages/theme-shinshu-site/package.json +2 -2
  258. package/packages/work-graph/package.json +1 -1
  259. package/protocol/apps/agentsam.app.v1.schema.json +1 -1
  260. package/protocol/apps/agentsam.host-install.v1.schema.json +1 -1
  261. package/protocol/assets/asset-record.v1.schema.json +1 -1
  262. package/protocol/brand/brandpack.v1.schema.json +1 -1
  263. package/protocol/capabilities/capability-manifest.schema.json +1 -1
  264. package/protocol/capabilities/knowledge-search-input.schema.json +1 -0
  265. package/protocol/credentials/issue.v1.schema.json +1 -1
  266. package/protocol/database/agentsam.schema-pack.v1.schema.json +1 -1
  267. package/protocol/database/connection.v1.schema.json +1 -1
  268. package/protocol/embeddings/embedding-profile.v1.schema.json +1 -1
  269. package/protocol/errors/README.md +36 -0
  270. package/protocol/errors/agentsam.error.v2.schema.json +821 -0
  271. package/protocol/errors/error-catalog.json +3506 -158
  272. package/protocol/errors/error-envelope.schema.json +195 -52
  273. package/protocol/errors/recovery.v1.schema.json +1 -1
  274. package/protocol/features/agentsam.feature.v1.schema.json +1 -1
  275. package/protocol/hooks/README.md +18 -0
  276. package/protocol/hooks/agentsam.hook.output.v1.schema.json +27 -0
  277. package/protocol/hooks/agentsam.hook.receipt.v1.schema.json +61 -0
  278. package/protocol/hooks/agentsam.hook.v1.schema.json +35 -0
  279. package/protocol/hooks/agentsam.hooks.config.v1.schema.json +78 -0
  280. package/protocol/local-engine/benchmark.v1.schema.json +1 -1
  281. package/protocol/local-engine/engine.v1.schema.json +1 -1
  282. package/protocol/models/README.md +3 -0
  283. package/protocol/models/model-inventory-v2.schema.json +1 -1
  284. package/protocol/models/provider-model-snapshot.v1.schema.json +22 -0
  285. package/protocol/receipts/agentsam.receipt.v1.json +95 -0
  286. package/protocol/rpc/v1/errors.proto +1 -0
  287. package/protocol/runtime/agentsam.runtime.v1.schema.json +1 -1
  288. package/protocol/runtime/workspace-fs.v1.schema.json +1 -1
  289. package/protocol/sam/activity.v1.schema.json +1 -1
  290. package/protocol/sam/answer.v1.schema.json +1 -1
  291. package/protocol/sam/calibration.v1.schema.json +1 -1
  292. package/protocol/sam/decision-receipt.v1.schema.json +1 -1
  293. package/protocol/sam/evaluation.v1.schema.json +1 -1
  294. package/protocol/sam/operation.schema.json +1 -1
  295. package/protocol/sam/outcome.v1.schema.json +1 -1
  296. package/protocol/sam/question.v1.schema.json +1 -1
  297. package/protocol/sam/result.schema.json +1 -1
  298. package/protocol/sam/state.v1.schema.json +1 -1
  299. package/protocol/scoring/scorecard.v1.schema.json +1 -1
  300. package/protocol/skills/agentsam.interaction.v1.schema.json +1 -1
  301. package/protocol/skills/agentsam.skill.v1.schema.json +1 -1
  302. package/protocol/theme-refinery/product-metadata.schema.json +1 -1
  303. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +6 -6
  304. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +6 -6
  305. package/protocol/theme-refinery/reconciliation-receipt.schema.json +1 -1
  306. package/protocol/ui/icon.v1.schema.json +1 -1
  307. package/python/README.md +20 -0
  308. package/python/agentsam_sdk/errors/__init__.py +4 -0
  309. package/python/agentsam_sdk/errors/vocabulary.py +2730 -0
  310. package/python/agentsam_sdk/hooks/__init__.py +32 -0
  311. package/python/agentsam_sdk/hooks/adapters.py +132 -0
  312. package/python/agentsam_sdk/hooks/contracts.py +121 -0
  313. package/python/agentsam_sdk/hooks/runtime.py +253 -0
  314. package/python/tests/test_hooks.py +115 -0
  315. package/skills/README.md +3 -0
  316. package/src/acp/agent-executor.js +106 -0
  317. package/src/acp/client.js +316 -0
  318. package/src/acp/dependencies.js +426 -0
  319. package/src/acp/http.js +207 -0
  320. package/src/acp/index.js +22 -0
  321. package/src/acp/runs.js +125 -0
  322. package/src/acp/runtime-selection.js +180 -0
  323. package/src/agent/responses-runner.js +145 -1
  324. package/src/cli/command-catalog.js +4 -0
  325. package/src/cli.js +33 -0
  326. package/src/commands/cheat-sheet.js +1 -0
  327. package/src/commands/cloudflare-login.js +1 -1
  328. package/src/commands/cloudflare.js +2 -2
  329. package/src/commands/connections.js +1 -1
  330. package/src/commands/go.js +76 -6
  331. package/src/commands/hooks.js +260 -0
  332. package/src/commands/merch.js +5 -0
  333. package/src/commands/mini.js +1 -1
  334. package/src/commands/models.js +1 -1
  335. package/src/commands/receipts.js +140 -0
  336. package/src/commands/run.js +253 -0
  337. package/src/commands/shell.js +114 -9
  338. package/src/errors/diagnostic.js +9 -9
  339. package/src/go/container.js +1 -1
  340. package/src/go/contract.js +61 -18
  341. package/src/go/discover.js +0 -4
  342. package/src/go/index.js +13 -1
  343. package/src/go/probe.js +109 -0
  344. package/src/go/{cloudflare.js → providers/cloudflare.js} +36 -136
  345. package/src/go/verify.js +1 -1
  346. package/src/index.js +32 -0
  347. package/src/indexing/ingest/inventory.js +1 -1
  348. package/src/knowledge/service/grpc-codec.js +2 -0
  349. package/src/lib/deploy/local-studio.js +2 -2
  350. package/src/lib/mini/scaffold.js +1 -1
  351. package/src/lib/slash-commands.js +1 -0
  352. package/src/lib/whoami-capabilities.js +1 -1
  353. package/src/local/runtime-store.js +54 -0
  354. package/src/mcp/cloudflare-bundles.js +1 -1
  355. package/src/models/catalog.js +0 -49
  356. package/src/models/inventory-core.js +69 -0
  357. package/src/plugins/index.js +9 -1
  358. package/src/plugins/registry.js +115 -6
  359. package/src/receipts/contract.js +68 -0
  360. package/src/receipts/index.js +20 -0
  361. package/src/receipts/prune.js +64 -0
  362. package/src/receipts/sinks.js +285 -0
  363. package/src/rpc/generated/errors_pb.js +49 -1
  364. package/src/tools/runtime.js +13 -5
  365. package/templates/mini/gadget/app.js +15 -40
  366. package/templates/mini/gadget/index.html +7 -7
  367. package/templates/mini/shared/style.css +1 -1
  368. /package/packages/connectors/{cloudflare → cfoa}/OAUTH_STORAGE_AUDIT.md +0 -0
  369. /package/packages/connectors/{cloudflare → cfoa}/src/api-client.js +0 -0
  370. /package/packages/connectors/{cloudflare → cfoa}/src/capabilities.js +0 -0
  371. /package/packages/connectors/{cloudflare → cfoa}/src/credential.js +0 -0
  372. /package/packages/connectors/{cloudflare → cfoa}/src/families/brand-protection.js +0 -0
  373. /package/packages/connectors/{cloudflare → cfoa}/src/families/keyless.js +0 -0
  374. /package/packages/connectors/{cloudflare → cfoa}/src/families/pages.js +0 -0
  375. /package/packages/connectors/{cloudflare → cfoa}/src/families/scanner.js +0 -0
  376. /package/packages/connectors/{cloudflare → cfoa}/src/families/snippets.js +0 -0
  377. /package/packages/connectors/{cloudflare → cfoa}/src/families/tag-gateway.js +0 -0
  378. /package/packages/connectors/{cloudflare → cfoa}/src/families/tags.js +0 -0
  379. /package/packages/connectors/{cloudflare → cfoa}/src/families/token-validation.js +0 -0
  380. /package/packages/connectors/{cloudflare → cfoa}/src/families/vectorize.js +0 -0
  381. /package/packages/connectors/{cloudflare → cfoa}/src/families/workflows.js +0 -0
  382. /package/packages/connectors/{cloudflare → cfoa}/src/index.js +0 -0
  383. /package/packages/connectors/{cloudflare → cfoa}/src/oauth-persist.js +0 -0
  384. /package/packages/connectors/{cloudflare → cfoa}/src/owner.js +0 -0
  385. /package/packages/connectors/{cloudflare → cfoa}/src/permission-options.js +0 -0
  386. /package/packages/connectors/{cloudflare → cfoa}/src/routes.js +0 -0
  387. /package/packages/connectors/{cloudflare → cfoa}/src/scope-catalog.js +0 -0
  388. /package/packages/connectors/{cloudflare → cfoa}/src/vault.js +0 -0
  389. /package/packages/connectors/{cloudflare → cfoa}/tests/capabilities.test.mjs +0 -0
  390. /package/packages/connectors/{cloudflare → cfoa}/tests/connector.test.mjs +0 -0
  391. /package/packages/connectors/{cloudflare → cfoa}/tests/oauth-persist.test.mjs +0 -0
  392. /package/packages/identity/src/oauth/{google-desktop-exchange.js → goaude.js} +0 -0
@@ -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
- export async function runAgentSamTurn(options = {}) {
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/cloudflare/src/index.js';
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/cloudflare/src/index.js';
25
- import { AGENTSAM_TAG_VOCABULARY as TAG_VOCAB } from '../../packages/connectors/cloudflare/src/families/tags.js';
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/cloudflare/src/index.js';
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