@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,109 @@
1
+ const EXPECTED_HASH = '2e60bba13dc2bc37d75dd2ce5deb25466f19cb2994e20889388948879875eae9';
2
+
3
+ export async function probeGoDeployment(origin, {
4
+ fetchImpl = globalThis.fetch,
5
+ expectedSource = null,
6
+ expectedSourceCommit = null,
7
+ expectedTarget = null,
8
+ edge = true,
9
+ } = {}) {
10
+ const base = String(origin).replace(/\/+$/, '');
11
+ const results = {};
12
+ const checks = {};
13
+ const probedAt = new Date().toISOString();
14
+
15
+ async function request(key, pathname, init = {}) {
16
+ try {
17
+ const res = await fetchImpl(base + pathname, init);
18
+ let body = null;
19
+ try { body = await res.json(); } catch {}
20
+ results[key] = {
21
+ path: pathname,
22
+ status: res.status,
23
+ ok: res.status >= 200 && res.status < 300,
24
+ body,
25
+ };
26
+ return results[key];
27
+ } catch (error) {
28
+ results[key] = { path: pathname, status: 0, ok: false, error: error.message };
29
+ return results[key];
30
+ }
31
+ }
32
+
33
+ if (edge) {
34
+ await request('edge_root', '/', { headers: { Accept: 'application/json' } });
35
+ await request('edge_health', '/edge/health', { headers: { Accept: 'application/json' } });
36
+ }
37
+ await request('health', '/health', { headers: { Accept: 'application/json' } });
38
+ await request('runtime', '/v1/runtime', { headers: { Accept: 'application/json' } });
39
+ await request('capabilities', '/v1/capabilities', { headers: { Accept: 'application/json' } });
40
+ await request('hash', '/v1/hash', {
41
+ method: 'POST',
42
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
43
+ body: JSON.stringify({ input: 'agentsam', algorithm: 'sha256' }),
44
+ });
45
+ await request('inspect', '/v1/inspect', {
46
+ method: 'POST',
47
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
48
+ body: JSON.stringify({ files: [{ path: 'demo.css', content: '.button { color: #2563eb; }' }] }),
49
+ });
50
+ await request('malformed', '/v1/inspect', {
51
+ method: 'POST',
52
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
53
+ body: JSON.stringify({ not_files: true }),
54
+ });
55
+
56
+ const health = results.health?.body;
57
+ const runtime = results.runtime?.body;
58
+ const caps = results.capabilities?.body;
59
+ const malformed = results.malformed?.body;
60
+
61
+ if (edge) {
62
+ checks.edge_root = results.edge_root?.status === 200 && results.edge_root?.body?.edge === 'worker';
63
+ checks.edge_health = results.edge_health?.status === 200 && results.edge_health?.body?.edge === 'worker';
64
+ checks.edge_source = expectedSource
65
+ ? results.edge_root?.body?.source === expectedSource
66
+ : true;
67
+ }
68
+ checks.health = results.health?.status === 200
69
+ && health?.ok === true
70
+ && health?.runtime === 'go'
71
+ && (!expectedTarget || health?.target === expectedTarget);
72
+ checks.source_identity = expectedSource ? health?.build?.source === expectedSource : true;
73
+ checks.source_commit = expectedSourceCommit ? health?.build?.commit === expectedSourceCommit : true;
74
+ checks.runtime = results.runtime?.status === 200
75
+ && runtime?.schema === 'agentsam.go-runtime.v1'
76
+ && runtime?.os === 'linux';
77
+ checks.capabilities = results.capabilities?.status === 200
78
+ && caps?.schema === 'agentsam.go-capabilities.v1'
79
+ && ['hash', 'inspect', 'runtime', 'capabilities'].every((name) => caps?.capabilities?.includes(name));
80
+ checks.hash = results.hash?.status === 200 && results.hash?.body?.hash === EXPECTED_HASH;
81
+ checks.inspect = results.inspect?.status === 200
82
+ && results.inspect?.body?.findings?.some((finding) => finding.kind === 'hardcoded_color' && finding.value === '#2563eb');
83
+ checks.error_envelope = results.malformed?.status === 400
84
+ && malformed?.ok === false
85
+ && malformed?.schema_version === 1
86
+ && malformed?.reason === 'input_invalid'
87
+ && malformed?.code === 'INVALID_ARGUMENT';
88
+
89
+ results.deterministic_hash = { ok: checks.hash };
90
+ results.deterministic_inspect = { ok: checks.inspect };
91
+ results.malformed_rejected = { ok: checks.error_envelope };
92
+ const ok = Object.values(checks).every(Boolean);
93
+ return { origin: base, ok, checks, results, probed_at: probedAt };
94
+ }
95
+
96
+ export async function probeGoDeploymentWithRetry(origin, {
97
+ attempts = 12,
98
+ delayMs = 2500,
99
+ ...options
100
+ } = {}) {
101
+ let latest = null;
102
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
103
+ latest = await probeGoDeployment(origin, options);
104
+ latest.attempt = attempt;
105
+ if (latest.ok) return latest;
106
+ if (attempt < attempts) await new Promise((resolve) => setTimeout(resolve, delayMs));
107
+ }
108
+ return latest || { origin, ok: false, checks: {}, results: {}, probed_at: new Date().toISOString() };
109
+ }
@@ -1,25 +1,21 @@
1
1
  import { spawnSync } from 'node:child_process';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { parseWranglerVersionId } from '../lib/deploy/health.js';
4
+ import { parseWranglerVersionId } from '../../lib/deploy/health.js';
5
5
  import {
6
6
  writeDeploymentReceipt,
7
7
  writeDeploymentValidationReceipt,
8
8
  writeProductRegistryLocal,
9
9
  writeProductValidationLocal,
10
10
  buildProductRow,
11
- } from './receipts.js';
12
- import { applyInnerAnimalMediaOfficialGoProductRegistry } from './official-registry.js';
13
- import { SDK_ROOT } from './discover.js';
14
-
15
- const EXPECTED_HASH = '2e60bba13dc2bc37d75dd2ce5deb25466f19cb2994e20889388948879875eae9';
11
+ } from '../receipts.js';
12
+ import { applyInnerAnimalMediaOfficialGoProductRegistry } from '../official-registry.js';
13
+ import { SDK_ROOT } from '../discover.js';
14
+ import { resolveWranglerBin } from '../contract.js';
15
+ import { probeGoDeploymentWithRetry } from '../probe.js';
16
16
 
17
17
  function resolveWranglerInvocation(productRoot) {
18
- const js = path.join(productRoot, 'node_modules', 'wrangler', 'bin', 'wrangler.js');
19
- if (fs.existsSync(js)) return { command: process.execPath, args: [js] };
20
- const bin = path.join(productRoot, 'node_modules', '.bin', 'wrangler');
21
- if (fs.existsSync(bin)) return { command: bin, args: [] };
22
- return { command: 'npx', args: ['--yes', 'wrangler'] };
18
+ return resolveWranglerBin(productRoot);
23
19
  }
24
20
 
25
21
  function runWrangler(wrangler, args, {
@@ -56,8 +52,11 @@ function publicAccount(account) {
56
52
  };
57
53
  }
58
54
 
59
- export function resolveConfiguredDeploymentUrl(productRoot) {
60
- const configPath = path.join(productRoot, 'wrangler.jsonc');
55
+ export function resolveConfiguredDeploymentUrl(
56
+ productRoot,
57
+ configName = 'wrangler.jsonc',
58
+ ) {
59
+ const configPath = path.join(productRoot, configName);
61
60
  if (!fs.existsSync(configPath)) return null;
62
61
 
63
62
  try {
@@ -189,8 +188,9 @@ function deploymentArgs({
189
188
  dryRun = false,
190
189
  source = null,
191
190
  builtAt = null,
191
+ configName = 'wrangler.jsonc',
192
192
  } = {}) {
193
- const args = ['deploy', '-c', 'wrangler.jsonc'];
193
+ const args = ['deploy', '-c', configName];
194
194
  if (source?.identity) args.push('--var', 'AGENTSAM_BUILD_SOURCE:' + source.identity);
195
195
  if (source?.commit) args.push('--var', 'AGENTSAM_BUILD_COMMIT:' + source.commit);
196
196
  if (builtAt) args.push('--var', 'AGENTSAM_BUILT_AT:' + builtAt);
@@ -225,8 +225,16 @@ export async function deployGoCloudflare({
225
225
  spawn = spawnSync,
226
226
  fetchImpl = globalThis.fetch,
227
227
  } = {}) {
228
- const wranglerConfig = path.join(productRoot, 'wrangler.jsonc');
229
- if (!fs.existsSync(wranglerConfig)) throw new Error('wrangler_config_missing: ' + wranglerConfig);
228
+ const configName = officialRelease
229
+ ? 'wrangler.inneranimalmedia.jsonc'
230
+ : 'wrangler.jsonc';
231
+
232
+ const wranglerConfig = path.join(productRoot, configName);
233
+ if (!fs.existsSync(wranglerConfig)) {
234
+ const err = new Error('wrangler_config_missing: ' + wranglerConfig);
235
+ err.code = 'wrangler_config_missing';
236
+ throw err;
237
+ }
230
238
 
231
239
  let cfIdentity = cloudflareIdentity;
232
240
  if (!skipDeploy) {
@@ -247,15 +255,6 @@ export async function deployGoCloudflare({
247
255
  accountId = cfIdentity.account.id;
248
256
  }
249
257
 
250
- const docker = spawn('docker', ['info'], { encoding: 'utf8' });
251
- const dockerOk = docker.status === 0;
252
- if (!dockerOk && !skipDeploy) {
253
- const err = new Error('docker_unavailable');
254
- err.detail = (docker.stderr || docker.stdout || '').trim().slice(0, 400);
255
- err.hint = 'Cloudflare Containers require a local container engine for image build.';
256
- throw err;
257
- }
258
-
259
258
  const wrangler = resolveWranglerInvocation(productRoot);
260
259
  let deployOutput = '';
261
260
  let deployed = false;
@@ -267,7 +266,12 @@ export async function deployGoCloudflare({
267
266
  } else if (dryRun) {
268
267
  const res = runWrangler(
269
268
  wrangler,
270
- deploymentArgs({ dryRun: true, source, builtAt }),
269
+ deploymentArgs({
270
+ dryRun: true,
271
+ source,
272
+ builtAt,
273
+ configName,
274
+ }),
271
275
  { productRoot, spawn, accountId },
272
276
  );
273
277
  deployOutput = res.output;
@@ -280,7 +284,11 @@ export async function deployGoCloudflare({
280
284
  } else {
281
285
  const res = runWrangler(
282
286
  wrangler,
283
- deploymentArgs({ source, builtAt }),
287
+ deploymentArgs({
288
+ source,
289
+ builtAt,
290
+ configName,
291
+ }),
284
292
  { productRoot, spawn, accountId },
285
293
  );
286
294
  deployOutput = res.output;
@@ -347,7 +355,7 @@ export async function deployGoCloudflare({
347
355
 
348
356
  const url = deployed
349
357
  ? (
350
- resolveConfiguredDeploymentUrl(productRoot)
358
+ resolveConfiguredDeploymentUrl(productRoot, configName)
351
359
  || extractWorkersDevUrl(deployOutput)
352
360
  || guessWorkersDevUrl(product)
353
361
  )
@@ -483,7 +491,6 @@ export async function deployGoCloudflare({
483
491
  productPath,
484
492
  productRow,
485
493
  registry,
486
- dockerOk,
487
494
  cloudflare: cfIdentity,
488
495
  deployOutput,
489
496
  };
@@ -499,110 +506,3 @@ export function guessWorkersDevUrl(product) {
499
506
  return account ? 'https://' + product + '.' + account + '.workers.dev' : null;
500
507
  }
501
508
 
502
- export async function probeGoDeployment(origin, {
503
- fetchImpl = globalThis.fetch,
504
- expectedSource = null,
505
- expectedSourceCommit = null,
506
- expectedTarget = null,
507
- edge = true,
508
- } = {}) {
509
- const base = String(origin).replace(/\/+$/, '');
510
- const results = {};
511
- const checks = {};
512
- const probedAt = new Date().toISOString();
513
-
514
- async function request(key, pathname, init = {}) {
515
- try {
516
- const res = await fetchImpl(base + pathname, init);
517
- let body = null;
518
- try { body = await res.json(); } catch {}
519
- results[key] = {
520
- path: pathname,
521
- status: res.status,
522
- ok: res.status >= 200 && res.status < 300,
523
- body,
524
- };
525
- return results[key];
526
- } catch (error) {
527
- results[key] = { path: pathname, status: 0, ok: false, error: error.message };
528
- return results[key];
529
- }
530
- }
531
-
532
- if (edge) {
533
- await request('edge_root', '/', { headers: { Accept: 'application/json' } });
534
- await request('edge_health', '/edge/health', { headers: { Accept: 'application/json' } });
535
- }
536
- await request('health', '/health', { headers: { Accept: 'application/json' } });
537
- await request('runtime', '/v1/runtime', { headers: { Accept: 'application/json' } });
538
- await request('capabilities', '/v1/capabilities', { headers: { Accept: 'application/json' } });
539
- await request('hash', '/v1/hash', {
540
- method: 'POST',
541
- headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
542
- body: JSON.stringify({ input: 'agentsam', algorithm: 'sha256' }),
543
- });
544
- await request('inspect', '/v1/inspect', {
545
- method: 'POST',
546
- headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
547
- body: JSON.stringify({ files: [{ path: 'demo.css', content: '.button { color: #2563eb; }' }] }),
548
- });
549
- await request('malformed', '/v1/inspect', {
550
- method: 'POST',
551
- headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
552
- body: JSON.stringify({ not_files: true }),
553
- });
554
-
555
- const health = results.health?.body;
556
- const runtime = results.runtime?.body;
557
- const caps = results.capabilities?.body;
558
- const malformed = results.malformed?.body;
559
-
560
- if (edge) {
561
- checks.edge_root = results.edge_root?.status === 200 && results.edge_root?.body?.edge === 'worker';
562
- checks.edge_health = results.edge_health?.status === 200 && results.edge_health?.body?.edge === 'worker';
563
- checks.edge_source = expectedSource
564
- ? results.edge_root?.body?.source === expectedSource
565
- : true;
566
- }
567
- checks.health = results.health?.status === 200
568
- && health?.ok === true
569
- && health?.runtime === 'go'
570
- && (!expectedTarget || health?.target === expectedTarget);
571
- checks.source_identity = expectedSource ? health?.build?.source === expectedSource : true;
572
- checks.source_commit = expectedSourceCommit ? health?.build?.commit === expectedSourceCommit : true;
573
- checks.runtime = results.runtime?.status === 200
574
- && runtime?.schema === 'agentsam.go-runtime.v1'
575
- && runtime?.os === 'linux';
576
- checks.capabilities = results.capabilities?.status === 200
577
- && caps?.schema === 'agentsam.go-capabilities.v1'
578
- && ['hash', 'inspect', 'runtime', 'capabilities'].every((name) => caps?.capabilities?.includes(name));
579
- checks.hash = results.hash?.status === 200 && results.hash?.body?.hash === EXPECTED_HASH;
580
- checks.inspect = results.inspect?.status === 200
581
- && results.inspect?.body?.findings?.some((finding) => finding.kind === 'hardcoded_color' && finding.value === '#2563eb');
582
- checks.error_envelope = results.malformed?.status === 400
583
- && malformed?.ok === false
584
- && malformed?.schema_version === 1
585
- && malformed?.reason === 'input_invalid'
586
- && malformed?.code === 'INVALID_ARGUMENT';
587
-
588
- results.deterministic_hash = { ok: checks.hash };
589
- results.deterministic_inspect = { ok: checks.inspect };
590
- results.malformed_rejected = { ok: checks.error_envelope };
591
- const ok = Object.values(checks).every(Boolean);
592
- return { origin: base, ok, checks, results, probed_at: probedAt };
593
- }
594
-
595
- export async function probeGoDeploymentWithRetry(origin, {
596
- attempts = 12,
597
- delayMs = 2500,
598
- ...options
599
- } = {}) {
600
- let latest = null;
601
- for (let attempt = 1; attempt <= attempts; attempt += 1) {
602
- latest = await probeGoDeployment(origin, options);
603
- latest.attempt = attempt;
604
- if (latest.ok) return latest;
605
- if (attempt < attempts) await new Promise((resolve) => setTimeout(resolve, delayMs));
606
- }
607
- return latest || { origin, ok: false, checks: {}, results: {}, probed_at: new Date().toISOString() };
608
- }
package/src/go/verify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { readLatestStatus } from './receipts.js';
2
- import { probeGoDeployment } from './cloudflare.js';
2
+ import { probeGoDeployment } from './probe.js';
3
3
  import { runGoTests, runGoVet } from './build.js';
4
4
 
5
5
  export async function verifyGoProduct({
package/src/index.js CHANGED
@@ -25,6 +25,37 @@ export {
25
25
  suggestCliCommands,
26
26
  } from './cli/command-catalog.js';
27
27
  export { routeIntent } from './lib/router.js';
28
+ export {
29
+ HOOK_PROTOCOL_SCHEMA,
30
+ HOOK_CONFIG_SCHEMA,
31
+ HOOK_RECEIPT_SCHEMA,
32
+ HOOK_EVENTS,
33
+ PERMISSION_DECISIONS,
34
+ ERROR_HANDLING_DECISIONS,
35
+ HOOK_FAILURE_MODES,
36
+ AgentSamHooks,
37
+ HookExecutionError,
38
+ HookPermissionError,
39
+ normalizeHookEvent,
40
+ normalizeHookOutput,
41
+ createHookEnvelope,
42
+ createHookRuntime,
43
+ createHookRuntimeFromConfig,
44
+ createHookStore,
45
+ registerStoredHooks,
46
+ ensureHookRuntime,
47
+ findHookConfig,
48
+ loadHookConfig,
49
+ createCallbackHookAdapter,
50
+ createCommandHookAdapter,
51
+ createHttpHookAdapter,
52
+ createHookedProviderAdapter,
53
+ createHookedCapabilityAdapter,
54
+ createCompositeCapabilityAdapter,
55
+ createMcpCapabilityAdapter,
56
+ createLspCapabilityAdapter,
57
+ createAgentCapabilityAdapter,
58
+ } from '../packages/agentsam-hooks/src/index.js';
28
59
  export { searchToolCards, toToolCard, hydrateToolSchemas } from './tools/index.js';
29
60
  export {
30
61
  AGENTSAM_PLUGIN_SCHEMA_VERSION,
@@ -36,6 +67,7 @@ export {
36
67
  listPlugins,
37
68
  listPluginTools,
38
69
  recordPluginHealthCheck,
70
+ recordAiPluginModelDiscovery,
39
71
  recordToolCall,
40
72
  createPluginRuntime,
41
73
  createPluginCapabilityAdapter,
@@ -57,7 +57,7 @@ const CATEGORY_TOOLING = new Set([
57
57
  /** Generated / historical — review before including. */
58
58
  const CATEGORY_GENERATED = new Set([
59
59
  'generated', 'fixtures', 'snapshots', 'artifacts',
60
- 'site', 'sites', 'templates', 'level-1', 'focus-timer',
60
+ 'site', 'sites', 'templates', 'level-1',
61
61
  ]);
62
62
 
63
63
  /** AgentSam / config control plane — review. */
@@ -77,6 +77,7 @@ export function encodeErrorDetail(value) {
77
77
  detail.setDomain(envelope.domain);
78
78
  if (envelope.tool) detail.setTool(envelope.tool);
79
79
  if (envelope.stage) detail.setStage(envelope.stage);
80
+ if (envelope.native_stage) detail.setNativeStage(envelope.native_stage);
80
81
  detail.setRemediationAction(envelope.remediation.action);
81
82
  if (envelope.remediation.message) detail.setRemediationMessage(envelope.remediation.message);
82
83
  detail.setFingerprint(envelope.fingerprint);
@@ -115,6 +116,7 @@ export function decodeErrorDetail(detail) {
115
116
  domain: detail.hasDomain?.() ? detail.getDomain() : 'runtime',
116
117
  tool: detail.hasTool?.() ? detail.getTool() : null,
117
118
  stage: detail.hasStage?.() ? detail.getStage() : null,
119
+ native_stage: detail.hasNativeStage?.() ? detail.getNativeStage() : null,
118
120
  remediation: {
119
121
  action: detail.hasRemediationAction?.() ? detail.getRemediationAction() : undefined,
120
122
  message: detail.hasRemediationMessage?.() ? detail.getRemediationMessage() : null,
@@ -12,7 +12,7 @@ export const DEPLOY_INPUT_GLOBS = Object.freeze([
12
12
  'apps/local-studio',
13
13
  'packages/agentsam-contracts',
14
14
  'packages/agentsam-workbench',
15
- 'packages/connectors/cloudflare',
15
+ 'packages/connectors/cfoa',
16
16
  ]);
17
17
 
18
18
  export function findRepoRoot(start = process.cwd()) {
@@ -176,7 +176,7 @@ export async function runLocalStudioDeploy({
176
176
  target.wranglerConfig,
177
177
  path.join(target.appRoot, '.env.cloudflare.example'),
178
178
  path.join(target.appRoot, 'backend/worker/index.js'),
179
- path.join(target.repoRoot, 'packages/connectors/cloudflare/src/index.js'),
179
+ path.join(target.repoRoot, 'packages/connectors/cfoa/src/index.js'),
180
180
  ]);
181
181
  }
182
182
  if (plan.skip) {
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url';
4
4
 
5
5
  const templateRoot = fileURLToPath(new URL('../../../templates/mini/', import.meta.url));
6
6
  export const MINI_TEMPLATES = Object.freeze({
7
- gadget: 'A working focus timer',
7
+ gadget: 'A blank interactive widget canvas',
8
8
  page: 'A small editable landing page',
9
9
  data: 'A searchable JSON viewer',
10
10
  });
@@ -12,6 +12,7 @@ export const SLASH_COMMANDS = [
12
12
  { cmd: '/context', description: 'Show model context economics; add repo for Git bridge context', lane: 'context' },
13
13
  { cmd: '/status', description: 'Honest project awareness: account, models, terminal, live deploy', lane: 'local' },
14
14
  { cmd: '/models', description: 'Probe providers and provider-verified known models', lane: 'model' },
15
+ { cmd: '/hooks', description: 'Inspect lifecycle hook sources, order, and execution receipts', lane: 'agent' },
15
16
  { cmd: '/providers', description: 'Configure and verify machine provider credentials', lane: 'model' },
16
17
  { cmd: '/credentials', description: 'Audit credentials, drift, and remediation (never prints secrets)', lane: 'identity' },
17
18
  { cmd: '/cheat-sheet', description: 'Organized Agent Sam command groups', lane: 'local' },
@@ -9,7 +9,7 @@ import { listProviderCredentialStatus } from './provider-credentials.js';
9
9
  import {
10
10
  listCloudflareFeaturePacks,
11
11
  scopesForFeaturePacks,
12
- } from '../../packages/connectors/cloudflare/src/index.js';
12
+ } from '../../packages/connectors/cfoa/src/index.js';
13
13
  import { projectTerminalCapability } from './terminal-scopes.js';
14
14
 
15
15
  function clean(value) {
@@ -4,6 +4,8 @@ import { createLocalSqliteDatabase } from './sqlite.js';
4
4
  import { applyRuntimeMigrations } from './migrations.js';
5
5
  import { findCliProjectRoot } from '../lib/cli-preferences.js';
6
6
  import { getLocalDatabasePath, tryReadProjectConfig } from '../lib/project-config.js';
7
+ import { createHookStore } from '../../packages/agentsam-hooks/src/store.js';
8
+ import { reconcileParentAfterChildTerminal } from '../acp/dependencies.js';
7
9
 
8
10
  function clean(value) { return value == null ? '' : String(value).trim(); }
9
11
  function hash(value) { return createHash('sha256').update(String(value || '')).digest('hex'); }
@@ -114,6 +116,13 @@ export async function finishRuntimeRun(value = {}) {
114
116
  Number.isFinite(Number(value.latency_ms)) ? Math.max(0, Math.round(Number(value.latency_ms))) : null,
115
117
  value.id,
116
118
  ).run();
119
+
120
+ await reconcileParentAfterChildTerminal(db, {
121
+ runId: value.id,
122
+ status: clean(value.status) || 'completed',
123
+ errorCode: clean(value.error_code) || null,
124
+ errorMessage: clean(value.error_message) || null,
125
+ });
117
126
  });
118
127
  }
119
128
 
@@ -187,3 +196,48 @@ export async function pruneExpiredRuntimeState(value = {}) {
187
196
  return { digests: Number(digests.changes || 0), compactions: Number(compactions.changes || 0), approvals_expired: Number(approvals.changes || 0) };
188
197
  });
189
198
  }
199
+
200
+ function hookStore(db, value = {}) {
201
+ return createHookStore(db, { ownerId: clean(value.owner_id || value.account_id) || 'local' });
202
+ }
203
+
204
+ export async function listRuntimeHooks(value = {}) {
205
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).listHooks({
206
+ activeOnly: value.activeOnly,
207
+ event_type: value.event_type,
208
+ context: value.context,
209
+ }));
210
+ }
211
+
212
+ export async function upsertRuntimeHook(value = {}) {
213
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).upsertHook(value));
214
+ }
215
+
216
+ export async function setRuntimeHookActive(value = {}) {
217
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).setHookActive(value.hook_id || value.hook_key, value.active));
218
+ }
219
+
220
+ export async function removeRuntimeHook(value = {}) {
221
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).removeHook(value.hook_id || value.hook_key));
222
+ }
223
+
224
+ export async function recordRuntimeHookReceipt(value = {}) {
225
+ if (!value.receipt) return null;
226
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).recordExecution(value.receipt, {
227
+ source_kind: value.source_kind,
228
+ hook_id: value.hook_id,
229
+ invocation_id: value.invocation_id,
230
+ agent_run_id: value.agent_run_id,
231
+ session_id: value.session_id,
232
+ conversation_id: value.conversation_id,
233
+ context: value.context,
234
+ }));
235
+ }
236
+
237
+ export async function listRuntimeHookExecutions(value = {}) {
238
+ return withStore(value.projectRoot || value.cwd, (db) => hookStore(db, value).listExecutions({
239
+ hook_key: value.hook_key,
240
+ status: value.status,
241
+ limit: value.limit,
242
+ }));
243
+ }
@@ -9,7 +9,7 @@
9
9
  import {
10
10
  scopesForCapabilities,
11
11
  scopesForFeaturePacks,
12
- } from '../../packages/connectors/cloudflare/src/capabilities.js';
12
+ } from '../../packages/connectors/cfoa/src/capabilities.js';
13
13
 
14
14
  /**
15
15
  * @typedef {object} CloudflareMcpBundle
@@ -7,7 +7,6 @@ const DOCS = Object.freeze({
7
7
  gpt56Sol: 'https://developers.openai.com/api/docs/models/gpt-5.6-sol',
8
8
  gpt56Terra: 'https://developers.openai.com/api/docs/models/gpt-5.6-terra',
9
9
  gpt56Luna: 'https://developers.openai.com/api/docs/models/gpt-5.6-luna',
10
- gpt53Codex: 'https://developers.openai.com/api/docs/models/gpt-5.3-codex',
11
10
  embeddingLarge: 'https://developers.openai.com/api/docs/models/text-embedding-3-large',
12
11
  embeddingSmall: 'https://developers.openai.com/api/docs/models/text-embedding-3-small',
13
12
  });
@@ -226,53 +225,6 @@ const GPT_56_LUNA = openAiAgentModel({
226
225
  pricing: freezePricing({ input: 0.2, cachedInput: 0.02, cacheWrite: 0.25, output: 1.2, source: DOCS.gpt56Luna }),
227
226
  });
228
227
 
229
- const GPT_53_CODEX = openAiAgentModel({
230
- id: 'gpt-5.3-codex',
231
- label: 'GPT-5.3-Codex',
232
- source: DOCS.gpt53Codex,
233
- reasoning: ['low', 'medium', 'high', 'xhigh'],
234
- contextWindow: 400_000,
235
- maxOutputTokens: 128_000,
236
- knowledgeCutoff: '2025-08-31',
237
- description: 'Agentic coding model for Codex-style software workflows.',
238
- pricing: freezePricing({
239
- input: 1.75,
240
- cachedInput: 0.175,
241
- cacheWrite: 0,
242
- output: 14,
243
- source: DOCS.gpt53Codex,
244
- longContext: false,
245
- processing: false,
246
- }),
247
- capabilities: {
248
- web_search: false,
249
- file_search: false,
250
- image_generation: false,
251
- code_interpreter: false,
252
- hosted_shell: false,
253
- apply_patch: false,
254
- skills: false,
255
- computer_use: false,
256
- mcp: false,
257
- tool_search: false,
258
- async_tool_calls: false,
259
- mid_turn_steering: false,
260
- configuration_update: false,
261
- fast: false,
262
- flex: false,
263
- },
264
- serviceTiers: ['default'],
265
- contextPolicy: Object.freeze({
266
- target_input_tokens: 100_000,
267
- compact_at_tokens: 160_000,
268
- intervene_at_tokens: 210_000,
269
- max_normal_input_tokens: 240_000,
270
- pricing_threshold_tokens: null,
271
- max_cumulative_input_tokens: 400_000,
272
- safety_margin_tokens: 20_000,
273
- }),
274
- });
275
-
276
228
  const TEXT_EMBEDDING_3_LARGE = openAiEmbeddingModel({
277
229
  id: 'text-embedding-3-large',
278
230
  label: 'text-embedding-3-large',
@@ -296,7 +248,6 @@ export const MODEL_CATALOG = Object.freeze([
296
248
  GPT_56_LUNA,
297
249
  GPT_56_TERRA,
298
250
  GPT_56_SOL,
299
- GPT_53_CODEX,
300
251
  TEXT_EMBEDDING_3_LARGE,
301
252
  TEXT_EMBEDDING_3_SMALL,
302
253
  ]);