@inneranimalmedia/agentsam-sdk 2.6.10 → 2.6.12

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 (624) hide show
  1. package/README.md +3 -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 +2 -2
  10. package/apps/client-cms-editor/frontend/package.json +3 -3
  11. package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
  12. package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
  13. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
  14. package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
  15. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
  16. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
  17. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
  18. package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
  19. package/apps/client-cms-editor/package-lock.json +43 -43
  20. package/apps/client-cms-editor/package.json +3 -3
  21. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +1 -1
  22. package/apps/client-cms-editor/reference/harvest/README.md +1 -1
  23. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +1 -1
  24. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +1 -1
  25. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
  26. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +1 -1
  27. package/apps/client-cms-editor/shared/cms/package.json +1 -1
  28. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
  29. package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
  30. package/docs/MINI.md +4 -2
  31. package/docs/PRODUCT_LIFECYCLE.md +38 -38
  32. package/docs/REPO_FILE_MAP.txt +2 -3
  33. package/docs/SOURCE_ARCHITECTURE.md +1 -1
  34. package/docs/THEME_REFINERY.md +6 -6
  35. package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
  36. package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
  37. package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
  38. package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
  39. package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
  40. package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
  41. package/docs/adr/README.md +25 -0
  42. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
  43. package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +140 -0
  44. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
  45. package/docs/content-studio/REVISION_GATE_2026-09-27.md +4 -4
  46. package/docs/contracts/google-cloud-oauth-setup.md +1 -1
  47. package/docs/engineering/go-portability/01-product-project-deployment-authority.md +69 -0
  48. package/docs/engineering/provider-internal-renames/01-lane-initialization.md +20 -0
  49. package/docs/engineering/provider-internal-renames/01a-runtime-environment-contract.md +115 -0
  50. package/docs/engineering/provider-internal-renames/02-cfoa.md +57 -0
  51. package/docs/engineering/provider-internal-renames/03-gclioa.md +32 -0
  52. package/docs/engineering/provider-internal-renames/04-goaude.md +50 -0
  53. package/docs/engineering/provider-internal-renames/05-gdrv.md +33 -0
  54. package/docs/engineering/provider-internal-renames/06-verification.md +103 -0
  55. package/docs/engineering/provider-internal-renames/README.md +77 -0
  56. package/docs/engineering/provider-internal-renames/runtime-environment-contract.json +220 -0
  57. package/docs/engineering/test-diagnostics/go-cli-test-hang-20261003.md +49 -0
  58. package/docs/engineering/test-diagnostics/go-skip-deploy-docker-fix.md +90 -0
  59. package/docs/knowledge-service-verification.md +3 -3
  60. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
  61. package/docs/plans/AGENTSAM-SUSPEND-QUEUE-KNOWLEDGE-RDP-2026-10-03.md +870 -0
  62. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
  63. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +9 -9
  64. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
  65. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +12 -12
  66. package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
  67. package/docs/plans/RECONCILIATION-2026-09-19.md +6 -6
  68. package/docs/plans/SAM_WORK_PROTOCOL.md +667 -0
  69. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +70 -70
  70. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
  71. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +4 -4
  72. package/docs/prd/PRD-agentsam-analytics.md +174 -0
  73. package/docs/prd/PRD-agentsam-brand.md +181 -0
  74. package/docs/prd/PRD-agentsam-browser.md +177 -0
  75. package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
  76. package/docs/prd/PRD-agentsam-campaign.md +1178 -0
  77. package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
  78. package/docs/prd/PRD-agentsam-content-studio.md +179 -0
  79. package/docs/prd/PRD-agentsam-copro.md +39 -0
  80. package/docs/prd/PRD-agentsam-database-studio.md +175 -0
  81. package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
  82. package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
  83. package/docs/prd/PRD-agentsam-knowledge.md +174 -0
  84. package/docs/prd/PRD-agentsam-local-studio.md +180 -0
  85. package/docs/prd/PRD-agentsam-merch.md +177 -0
  86. package/docs/prd/PRD-agentsam-platform.md +179 -0
  87. package/docs/prd/PRD-agentsam-site-studio.md +180 -0
  88. package/docs/prd/PRD-agentsam-work.md +180 -0
  89. package/docs/prd/README.md +39 -0
  90. package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
  91. package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
  92. package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
  93. package/docs/product/OFFER-PORTFOLIO.md +158 -0
  94. package/docs/product/PACKAGE-TAXONOMY.md +78 -0
  95. package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
  96. package/examples/hyperspace-demo/dist/index.html +13 -0
  97. package/examples/hyperspace-demo/src/main.tsx +227 -110
  98. package/migrations/d1/0020_agentsam_receipt_catalog.sql +35 -0
  99. package/migrations/runtime/0006_agent_run_suspend_activity.sql +53 -0
  100. package/migrations/runtime/0007_queue_control.sql +40 -0
  101. package/migrations/runtime/0008_agent_run_dependencies.sql +24 -0
  102. package/migrations/runtime/0008_analytics_legacy_bootstrap.sql +43 -0
  103. package/migrations/runtime/0009_analytics_authority.sql +108 -0
  104. package/native/agentsam-machine/core/src/lib.rs +2 -2
  105. package/package.json +78 -43
  106. package/packages/agentsam-brand/README.md +3 -0
  107. package/packages/agentsam-brand/package.json +4 -3
  108. package/packages/agentsam-brand/src/public.js +192 -0
  109. package/packages/agentsam-contracts/README.md +1 -1
  110. package/packages/agentsam-contracts/dist/adapter.d.ts +22 -0
  111. package/packages/agentsam-contracts/dist/adapter.js +0 -0
  112. package/packages/agentsam-contracts/dist/agent.d.ts +66 -0
  113. package/packages/agentsam-contracts/dist/agent.js +15 -0
  114. package/packages/agentsam-contracts/dist/artifacts.d.ts +70 -0
  115. package/packages/agentsam-contracts/dist/artifacts.js +0 -0
  116. package/packages/agentsam-contracts/dist/authority.d.ts +21 -0
  117. package/packages/agentsam-contracts/dist/authority.js +0 -0
  118. package/packages/agentsam-contracts/dist/context.d.ts +14 -0
  119. package/packages/agentsam-contracts/dist/context.js +0 -0
  120. package/packages/agentsam-contracts/dist/errors.d.ts +121 -0
  121. package/packages/agentsam-contracts/dist/errors.js +5 -0
  122. package/packages/agentsam-contracts/dist/events.d.ts +53 -0
  123. package/packages/agentsam-contracts/dist/events.js +0 -0
  124. package/packages/agentsam-contracts/dist/execution.d.ts +38 -0
  125. package/packages/agentsam-contracts/dist/execution.js +0 -0
  126. package/packages/agentsam-contracts/dist/hooks.d.ts +31 -0
  127. package/packages/agentsam-contracts/dist/hooks.js +0 -0
  128. package/packages/agentsam-contracts/dist/identity.d.ts +15 -0
  129. package/packages/agentsam-contracts/dist/identity.js +0 -0
  130. package/packages/agentsam-contracts/dist/index.d.ts +16 -0
  131. package/packages/agentsam-contracts/dist/index.js +164 -0
  132. package/packages/agentsam-contracts/dist/models.d.ts +9 -0
  133. package/packages/agentsam-contracts/dist/models.js +0 -0
  134. package/packages/agentsam-contracts/dist/providers.d.ts +27 -0
  135. package/packages/agentsam-contracts/dist/providers.js +0 -0
  136. package/packages/agentsam-contracts/dist/repository.d.ts +56 -0
  137. package/packages/agentsam-contracts/dist/repository.js +15 -0
  138. package/packages/agentsam-contracts/dist/run.d.ts +113 -0
  139. package/packages/agentsam-contracts/dist/run.js +132 -0
  140. package/packages/agentsam-contracts/dist/tools.d.ts +82 -0
  141. package/packages/agentsam-contracts/dist/tools.js +0 -0
  142. package/packages/agentsam-contracts/dist/widgets.d.ts +38 -0
  143. package/packages/agentsam-contracts/dist/widgets.js +0 -0
  144. package/packages/agentsam-contracts/package.json +9 -1
  145. package/packages/agentsam-contracts/scripts/build.mjs +1 -1
  146. package/packages/agentsam-contracts/src/agent.ts +78 -3
  147. package/packages/agentsam-contracts/src/index.ts +2 -0
  148. package/packages/agentsam-contracts/src/run.ts +320 -0
  149. package/packages/agentsam-contracts/src/widgets.ts +58 -0
  150. package/packages/agentsam-contracts/test/contracts.test.mjs +1 -1
  151. package/packages/agentsam-contracts/test/run-contract.test.mjs +94 -0
  152. package/packages/agentsam-errors/package.json +1 -1
  153. package/packages/agentsam-goap/README.md +3 -0
  154. package/packages/agentsam-goap/package.json +2 -2
  155. package/packages/agentsam-hooks/package.json +2 -2
  156. package/packages/agentsam-hooks/src/adapters/agents.js +48 -22
  157. package/packages/agentsam-hooks/src/index.d.ts +16 -0
  158. package/packages/agentsam-knowledge/package.json +1 -1
  159. package/packages/agentsam-knowledge/src/backends/index.js +1 -1
  160. package/packages/agentsam-merch/README.md +62 -0
  161. package/packages/agentsam-merch/bin/agentsam-merch.mjs +16 -0
  162. package/packages/agentsam-merch/package.json +65 -0
  163. package/packages/agentsam-merch/profiles/completeful/dtg-back-large.json +42 -0
  164. package/packages/agentsam-merch/profiles/completeful/laser-engraving.json +39 -0
  165. package/packages/agentsam-merch/profiles/generic/embroidery-digitization.json +22 -0
  166. package/packages/agentsam-merch/schemas/collection-candidate.schema.json +66 -0
  167. package/packages/agentsam-merch/schemas/manufacturing-profile.schema.json +221 -0
  168. package/packages/agentsam-merch/src/adapters-completeful.js +50 -0
  169. package/packages/agentsam-merch/src/cli.js +93 -0
  170. package/packages/agentsam-merch/src/collection-lab.js +60 -0
  171. package/packages/agentsam-merch/src/compatibility.js +501 -0
  172. package/packages/agentsam-merch/src/derivatives.js +112 -0
  173. package/packages/agentsam-merch/src/index.d.ts +316 -0
  174. package/packages/agentsam-merch/src/index.js +46 -0
  175. package/packages/agentsam-merch/src/node/index.d.ts +58 -0
  176. package/packages/agentsam-merch/src/node/index.js +6 -0
  177. package/packages/agentsam-merch/src/node/raster.js +142 -0
  178. package/packages/agentsam-merch/src/node/vector.js +239 -0
  179. package/packages/agentsam-merch/src/product-concepts.js +118 -0
  180. package/packages/agentsam-merch/src/profile-registry.js +104 -0
  181. package/packages/agentsam-merch/src/profile.js +158 -0
  182. package/packages/agentsam-merch/src/transforms.js +215 -0
  183. package/packages/agentsam-merch/test/merch.test.mjs +332 -0
  184. package/packages/agentsam-merch/test/node-transforms.test.mjs +149 -0
  185. package/packages/agentsam-nav/package.json +1 -1
  186. package/packages/agentsam-queue-control/README.md +4 -1
  187. package/packages/agentsam-queue-control/package.json +4 -3
  188. package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +111 -11
  189. package/packages/agentsam-queue-control/src/adapters/cloudflare.js +34 -6
  190. package/packages/agentsam-queue-control/src/adapters/memory.js +11 -2
  191. package/packages/agentsam-queue-control/src/adapters/sqlite.js +259 -0
  192. package/packages/agentsam-queue-control/src/contracts.js +207 -3
  193. package/packages/agentsam-queue-control/src/control-plane.js +62 -2
  194. package/packages/agentsam-queue-control/src/index.js +1 -0
  195. package/packages/agentsam-queue-control/test/queue-control.test.mjs +310 -0
  196. package/packages/agentsam-queue-control/test/sqlite-adapter.test.mjs +91 -0
  197. package/packages/agentsam-rapid-rust/README.md +3 -0
  198. package/packages/agentsam-repository/README.md +3 -0
  199. package/packages/agentsam-repository/package.json +1 -1
  200. package/packages/agentsam-vault/package.json +1 -1
  201. package/packages/agentsam-workbench/README.md +43 -0
  202. package/packages/agentsam-workbench/package.json +15 -4
  203. package/packages/agentsam-workbench/src/agent/AgentConversationSurface.tsx +108 -0
  204. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +25 -8
  205. package/packages/agentsam-workbench/src/agent/AgentRuntimeField.tsx +152 -0
  206. package/packages/agentsam-workbench/src/agent/Composer.tsx +10 -1
  207. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
  208. package/packages/agentsam-workbench/src/agent/RunMode.ts +26 -0
  209. package/packages/agentsam-workbench/src/agent/Thread.tsx +18 -3
  210. package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
  211. package/packages/agentsam-workbench/src/agent/index.ts +3 -0
  212. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
  213. package/packages/agentsam-workbench/src/index.ts +4 -0
  214. package/packages/agentsam-workbench/src/manufacturing/PreflightIndicator.tsx +203 -0
  215. package/packages/agentsam-workbench/src/manufacturing/index.ts +2 -0
  216. package/packages/agentsam-workbench/src/manufacturing/loading.ts +147 -0
  217. package/packages/agentsam-workbench/src/widgets/BuiltinWidget.tsx +22 -0
  218. package/packages/agentsam-workbench/src/widgets/CountdownWidget.tsx +68 -0
  219. package/packages/agentsam-workbench/src/widgets/WidgetFrame.tsx +56 -0
  220. package/packages/agentsam-workbench/src/widgets/countdown.ts +25 -0
  221. package/packages/agentsam-workbench/src/widgets/index.ts +6 -0
  222. package/packages/agentsam-workbench/src/widgets/registry.ts +13 -0
  223. package/packages/agentsam-workbench/src/widgets/useCountdown.ts +128 -0
  224. package/packages/agentsam-workbench/src/widgets/widgets.css +102 -0
  225. package/packages/connectors/{cloudflare → cfoa}/package.json +3 -3
  226. package/packages/heuristic-theme/package.json +1 -1
  227. package/packages/identity/README.md +3 -0
  228. package/packages/identity/backend/README.md +3 -0
  229. package/packages/identity/package.json +1 -1
  230. package/packages/identity/src/frontend/auth-portal/README.md +3 -0
  231. package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
  232. package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
  233. package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
  234. package/packages/identity/src/index.js +1 -1
  235. package/packages/identity/src/oauth/README.md +4 -1
  236. package/packages/identity/src/oauth/credentials.js +1 -1
  237. package/packages/identity/src/server/worker-router.js +1 -1
  238. package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
  239. package/packages/identity/tests/google-desktop-identity-login.test.mjs +1 -1
  240. package/packages/identity/tests/lane1-packed-consumer.test.mjs +1 -1
  241. package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
  242. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +1 -1
  243. package/packages/providers/completeful/README.md +3 -3
  244. package/packages/providers/completeful/package.json +1 -1
  245. package/packages/theme-cypress/README.md +11 -0
  246. package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
  247. package/packages/theme-cypress/prebuild.json +23 -0
  248. package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
  249. package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
  250. package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
  251. package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
  252. package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
  253. package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
  254. package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
  255. package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
  256. package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
  257. package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
  258. package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
  259. package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
  260. package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
  261. package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
  262. package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
  263. package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
  264. package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
  265. package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
  266. package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
  267. package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
  268. package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
  269. package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
  270. package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
  271. package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
  272. package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
  273. package/packages/theme-cypress/site/beliefs.html +175 -0
  274. package/packages/theme-cypress/site/community.html +175 -0
  275. package/packages/theme-cypress/site/connect.html +319 -0
  276. package/packages/theme-cypress/site/donate.html +106 -0
  277. package/packages/theme-cypress/site/groups.html +1352 -0
  278. package/packages/theme-cypress/site/help.html +1 -0
  279. package/packages/theme-cypress/site/icons/clock.svg +4 -0
  280. package/packages/theme-cypress/site/icons/email.svg +4 -0
  281. package/packages/theme-cypress/site/icons/giving.svg +4 -0
  282. package/packages/theme-cypress/site/icons/home.svg +4 -0
  283. package/packages/theme-cypress/site/icons/location.svg +4 -0
  284. package/packages/theme-cypress/site/icons/media.svg +4 -0
  285. package/packages/theme-cypress/site/icons/ministries.svg +6 -0
  286. package/packages/theme-cypress/site/icons/prayer.svg +5 -0
  287. package/packages/theme-cypress/site/icons/visit.svg +6 -0
  288. package/packages/theme-cypress/site/index.html +1013 -0
  289. package/packages/theme-cypress/site/mensgroup.html +477 -0
  290. package/packages/theme-cypress/site/mission.html +512 -0
  291. package/packages/theme-cypress/site/unified-footer.css +172 -0
  292. package/packages/theme-cypress/site/unified-footer.js +175 -0
  293. package/packages/theme-cypress/site/unified-header.css +226 -0
  294. package/packages/theme-cypress/site/unified-header.js +111 -0
  295. package/packages/theme-cypress/site/womansgroup.html +452 -0
  296. package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
  297. package/packages/theme-cypress/src/node.js +69 -0
  298. package/packages/theme-cypress/test/theme.test.mjs +47 -0
  299. package/packages/theme-ember/README.md +11 -0
  300. package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
  301. package/packages/theme-ember/prebuild.json +23 -0
  302. package/packages/theme-ember/site/about.html +1840 -0
  303. package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
  304. package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
  305. package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
  306. package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
  307. package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
  308. package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
  309. package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
  310. package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
  311. package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
  312. package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
  313. package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
  314. package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
  315. package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
  316. package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
  317. package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
  318. package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
  319. package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
  320. package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
  321. package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
  322. package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
  323. package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
  324. package/packages/theme-ember/site/community.html +1664 -0
  325. package/packages/theme-ember/site/index.html +2044 -0
  326. package/packages/theme-ember/site/shop.html +2104 -0
  327. package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
  328. package/packages/theme-ember/src/node.js +69 -0
  329. package/packages/theme-ember/test/theme.test.mjs +47 -0
  330. package/packages/theme-forge/README.md +11 -0
  331. package/packages/theme-forge/package.json +44 -0
  332. package/packages/theme-forge/prebuild.json +23 -0
  333. package/packages/theme-forge/site/apple-touch-icon.png +0 -0
  334. package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
  335. package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
  336. package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
  337. package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
  338. package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
  339. package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
  340. package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
  341. package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
  342. package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
  343. package/packages/theme-forge/site/index.html +5 -0
  344. package/packages/theme-forge/site/manifest.webmanifest +1 -0
  345. package/packages/theme-forge/site/pwa-192x192.png +0 -0
  346. package/packages/theme-forge/site/pwa-512x512.png +0 -0
  347. package/packages/theme-forge/site/sw.js +107 -0
  348. package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
  349. package/packages/theme-forge/src/index.js +76 -0
  350. package/packages/theme-forge/src/node.js +69 -0
  351. package/packages/theme-forge/test/theme.test.mjs +47 -0
  352. package/packages/theme-grove/README.md +11 -0
  353. package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
  354. package/packages/theme-grove/prebuild.json +23 -0
  355. package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
  356. package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
  357. package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
  358. package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
  359. package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
  360. package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
  361. package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
  362. package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
  363. package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
  364. package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
  365. package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
  366. package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
  367. package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
  368. package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
  369. package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
  370. package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
  371. package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
  372. package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
  373. package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
  374. package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
  375. package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
  376. package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
  377. package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
  378. package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
  379. package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
  380. package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
  381. package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
  382. package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
  383. package/packages/theme-grove/site/index.html +1429 -0
  384. package/packages/theme-grove/site/pages/contact.html +664 -0
  385. package/packages/theme-grove/site/pages/gallery.html +216 -0
  386. package/packages/theme-grove/site/pages/privacy.html +180 -0
  387. package/packages/theme-grove/site/pages/process.html +592 -0
  388. package/packages/theme-grove/site/pages/services.html +567 -0
  389. package/packages/theme-grove/site/pages/terms.html +189 -0
  390. package/packages/theme-grove/site/shared/footer.css +140 -0
  391. package/packages/theme-grove/site/shared/footer.html +41 -0
  392. package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
  393. package/packages/theme-grove/src/node.js +69 -0
  394. package/packages/theme-grove/test/theme.test.mjs +47 -0
  395. package/packages/theme-harbor/README.md +11 -0
  396. package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
  397. package/packages/theme-harbor/prebuild.json +23 -0
  398. package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
  399. package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
  400. package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
  401. package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
  402. package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
  403. package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
  404. package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
  405. package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
  406. package/packages/theme-harbor/site/index.html +15 -0
  407. package/packages/theme-harbor/src/index.js +76 -0
  408. package/packages/theme-harbor/src/node.js +69 -0
  409. package/packages/theme-harbor/test/theme.test.mjs +47 -0
  410. package/packages/theme-resolve/README.md +11 -0
  411. package/packages/theme-resolve/package.json +44 -0
  412. package/packages/theme-resolve/prebuild.json +23 -0
  413. package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
  414. package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
  415. package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
  416. package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
  417. package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
  418. package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
  419. package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
  420. package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
  421. package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
  422. package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
  423. package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
  424. package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
  425. package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
  426. package/packages/theme-resolve/site/index.html +22 -0
  427. package/packages/theme-resolve/src/index.js +69 -0
  428. package/packages/theme-resolve/src/node.js +69 -0
  429. package/packages/theme-resolve/test/theme.test.mjs +47 -0
  430. package/packages/theme-scenes/package.json +1 -1
  431. package/packages/theme-scenes/src/registry.js +32 -49
  432. package/packages/theme-summit/README.md +11 -0
  433. package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
  434. package/packages/theme-summit/prebuild.json +23 -0
  435. package/packages/theme-summit/site/adventures.html +450 -0
  436. package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
  437. package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
  438. package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
  439. package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
  440. package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
  441. package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
  442. package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
  443. package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
  444. package/packages/theme-summit/site/business-card.html +315 -0
  445. package/packages/theme-summit/site/chatbot.js +312 -0
  446. package/packages/theme-summit/site/gallery.html +524 -0
  447. package/packages/theme-summit/site/i18n.js +947 -0
  448. package/packages/theme-summit/site/icons.svg +87 -0
  449. package/packages/theme-summit/site/index.html +2415 -0
  450. package/packages/theme-summit/site/pages/about.html +100 -0
  451. package/packages/theme-summit/site/pages/contact.html +117 -0
  452. package/packages/theme-summit/site/pages/dashboard.html +111 -0
  453. package/packages/theme-summit/site/pages/index.html +129 -0
  454. package/packages/theme-summit/site/pages/services.html +125 -0
  455. package/packages/theme-summit/site/shared/footer.html +41 -0
  456. package/packages/theme-summit/site/shared/layout.js +315 -0
  457. package/packages/theme-summit/site/shared/nav.html +19 -0
  458. package/packages/theme-summit/site/shared/styles.css +696 -0
  459. package/packages/theme-summit/site/theme-styles.css +131 -0
  460. package/packages/theme-summit/site/themes.js +442 -0
  461. package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
  462. package/packages/theme-summit/src/node.js +69 -0
  463. package/packages/theme-summit/test/theme.test.mjs +47 -0
  464. package/packages/theme-violet/README.md +11 -0
  465. package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
  466. package/packages/theme-violet/prebuild.json +23 -0
  467. package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
  468. package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
  469. package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
  470. package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
  471. package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
  472. package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
  473. package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
  474. package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
  475. package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
  476. package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
  477. package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
  478. package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
  479. package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
  480. package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
  481. package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
  482. package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
  483. package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
  484. package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
  485. package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
  486. package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
  487. package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
  488. package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
  489. package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
  490. package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
  491. package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
  492. package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
  493. package/packages/theme-violet/site/global/cpas-contact.css +405 -0
  494. package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
  495. package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
  496. package/packages/theme-violet/site/global/cpas-footer.html +38 -0
  497. package/packages/theme-violet/site/global/cpas-header.html +30 -0
  498. package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
  499. package/packages/theme-violet/site/global/cpas-modals.js +802 -0
  500. package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
  501. package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
  502. package/packages/theme-violet/site/global/cpas-shell.js +107 -0
  503. package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
  504. package/packages/theme-violet/site/index.html +141 -0
  505. package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
  506. package/packages/theme-violet/site/pages/about/cta.html +25 -0
  507. package/packages/theme-violet/site/pages/about/hero.html +46 -0
  508. package/packages/theme-violet/site/pages/about/paths.html +24 -0
  509. package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
  510. package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
  511. package/packages/theme-violet/site/pages/home/hero.html +42 -0
  512. package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
  513. package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
  514. package/packages/theme-violet/site/pages/home/mission.html +36 -0
  515. package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
  516. package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
  517. package/packages/theme-violet/site/pages/index.html +141 -0
  518. package/packages/theme-violet/src/index.js +76 -0
  519. package/packages/theme-violet/src/node.js +69 -0
  520. package/packages/theme-violet/test/theme.test.mjs +47 -0
  521. package/packages/work-graph/package.json +1 -1
  522. package/protocol/features/README.md +1 -1
  523. package/protocol/features/catalog.json +12 -12
  524. package/protocol/features/examples/provider-resend.feature.json +2 -2
  525. package/protocol/models/README.md +3 -0
  526. package/protocol/presets/catalog.json +1 -1
  527. package/protocol/receipts/agentsam.receipt.v1.json +95 -0
  528. package/protocol/theme-refinery/prebuild-registry.json +45 -0
  529. package/protocol/theme-refinery/product-metadata.schema.json +63 -26
  530. package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
  531. package/skills/README.md +3 -0
  532. package/src/acp/agent-executor.js +106 -0
  533. package/src/acp/client.js +316 -0
  534. package/src/acp/dependencies.js +426 -0
  535. package/src/acp/http.js +207 -0
  536. package/src/acp/index.js +22 -0
  537. package/src/acp/runs.js +125 -0
  538. package/src/acp/runtime-selection.js +180 -0
  539. package/src/cli/command-catalog.js +3 -0
  540. package/src/cli.js +24 -0
  541. package/src/commands/cloudflare-login.js +1 -1
  542. package/src/commands/cloudflare.js +2 -2
  543. package/src/commands/connections.js +1 -1
  544. package/src/commands/go.js +76 -6
  545. package/src/commands/merch.js +5 -0
  546. package/src/commands/mini.js +1 -1
  547. package/src/commands/receipts.js +140 -0
  548. package/src/commands/run.js +253 -0
  549. package/src/go/container.js +1 -1
  550. package/src/go/contract.js +61 -18
  551. package/src/go/discover.js +0 -4
  552. package/src/go/index.js +13 -1
  553. package/src/go/probe.js +109 -0
  554. package/src/go/{cloudflare.js → providers/cloudflare.js} +36 -136
  555. package/src/go/verify.js +1 -1
  556. package/src/indexing/ingest/inventory.js +1 -1
  557. package/src/lib/deploy/local-studio.js +2 -2
  558. package/src/lib/mini/scaffold.js +1 -1
  559. package/src/lib/whoami-capabilities.js +1 -1
  560. package/src/local/runtime-store.js +8 -0
  561. package/src/mcp/cloudflare-bundles.js +1 -1
  562. package/src/plugins/completeful.js +2 -2
  563. package/src/plugins/index.js +1 -0
  564. package/src/plugins/registry.js +59 -6
  565. package/src/receipts/contract.js +68 -0
  566. package/src/receipts/index.js +20 -0
  567. package/src/receipts/prune.js +64 -0
  568. package/src/receipts/sinks.js +285 -0
  569. package/templates/mini/gadget/app.js +15 -40
  570. package/templates/mini/gadget/index.html +7 -7
  571. package/templates/mini/shared/style.css +1 -1
  572. package/packages/theme-church-site/README.md +0 -10
  573. package/packages/theme-church-site/src/harvest.json +0 -16
  574. package/packages/theme-church-site/test/theme.test.mjs +0 -21
  575. package/packages/theme-companions-site/README.md +0 -10
  576. package/packages/theme-companions-site/src/harvest.json +0 -14
  577. package/packages/theme-companions-site/src/index.js +0 -87
  578. package/packages/theme-companions-site/test/theme.test.mjs +0 -21
  579. package/packages/theme-floors-site/README.md +0 -10
  580. package/packages/theme-floors-site/src/harvest.json +0 -16
  581. package/packages/theme-floors-site/test/theme.test.mjs +0 -21
  582. package/packages/theme-fuelnfree-site/README.md +0 -10
  583. package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
  584. package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
  585. package/packages/theme-handyman-site/README.md +0 -10
  586. package/packages/theme-handyman-site/package.json +0 -41
  587. package/packages/theme-handyman-site/src/harvest.json +0 -12
  588. package/packages/theme-handyman-site/src/index.js +0 -88
  589. package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
  590. package/packages/theme-insurance-site/README.md +0 -10
  591. package/packages/theme-insurance-site/src/harvest.json +0 -12
  592. package/packages/theme-insurance-site/src/index.js +0 -88
  593. package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
  594. package/packages/theme-shinshu-site/README.md +0 -10
  595. package/packages/theme-shinshu-site/src/harvest.json +0 -14
  596. package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
  597. package/protocol/theme-refinery/lineage-registry.json +0 -105
  598. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
  599. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
  600. /package/packages/connectors/{cloudflare → cfoa}/OAUTH_STORAGE_AUDIT.md +0 -0
  601. /package/packages/connectors/{cloudflare → cfoa}/src/api-client.js +0 -0
  602. /package/packages/connectors/{cloudflare → cfoa}/src/capabilities.js +0 -0
  603. /package/packages/connectors/{cloudflare → cfoa}/src/credential.js +0 -0
  604. /package/packages/connectors/{cloudflare → cfoa}/src/families/brand-protection.js +0 -0
  605. /package/packages/connectors/{cloudflare → cfoa}/src/families/keyless.js +0 -0
  606. /package/packages/connectors/{cloudflare → cfoa}/src/families/pages.js +0 -0
  607. /package/packages/connectors/{cloudflare → cfoa}/src/families/scanner.js +0 -0
  608. /package/packages/connectors/{cloudflare → cfoa}/src/families/snippets.js +0 -0
  609. /package/packages/connectors/{cloudflare → cfoa}/src/families/tag-gateway.js +0 -0
  610. /package/packages/connectors/{cloudflare → cfoa}/src/families/tags.js +0 -0
  611. /package/packages/connectors/{cloudflare → cfoa}/src/families/token-validation.js +0 -0
  612. /package/packages/connectors/{cloudflare → cfoa}/src/families/vectorize.js +0 -0
  613. /package/packages/connectors/{cloudflare → cfoa}/src/families/workflows.js +0 -0
  614. /package/packages/connectors/{cloudflare → cfoa}/src/index.js +0 -0
  615. /package/packages/connectors/{cloudflare → cfoa}/src/oauth-persist.js +0 -0
  616. /package/packages/connectors/{cloudflare → cfoa}/src/owner.js +0 -0
  617. /package/packages/connectors/{cloudflare → cfoa}/src/permission-options.js +0 -0
  618. /package/packages/connectors/{cloudflare → cfoa}/src/routes.js +0 -0
  619. /package/packages/connectors/{cloudflare → cfoa}/src/scope-catalog.js +0 -0
  620. /package/packages/connectors/{cloudflare → cfoa}/src/vault.js +0 -0
  621. /package/packages/connectors/{cloudflare → cfoa}/tests/capabilities.test.mjs +0 -0
  622. /package/packages/connectors/{cloudflare → cfoa}/tests/connector.test.mjs +0 -0
  623. /package/packages/connectors/{cloudflare → cfoa}/tests/oauth-persist.test.mjs +0 -0
  624. /package/packages/identity/src/oauth/{google-desktop-exchange.js → goaude.js} +0 -0
@@ -0,0 +1,91 @@
1
+ import assert from 'node:assert/strict';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import test from 'node:test';
6
+ import { createLocalSqliteDatabase } from '../../../src/local/sqlite.js';
7
+ import { applyRuntimeMigrations } from '../../../src/local/migrations.js';
8
+ import {
9
+ SqliteQueueAdapter,
10
+ QueueControl,
11
+ buildQueueTopology,
12
+ createJobEnvelope,
13
+ } from '../src/index.js';
14
+
15
+ async function fixture() {
16
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-queue-sqlite-'));
17
+ const db = await createLocalSqliteDatabase(path.join(dir, 'agentsam.sqlite'));
18
+ await applyRuntimeMigrations(db);
19
+ return { dir, db, close: () => db.close() };
20
+ }
21
+
22
+ test('SQLite adapter persists delayed work and leases due jobs without polling models', async (t) => {
23
+ const fx = await fixture();
24
+ t.after(fx.close);
25
+ const topology = buildQueueTopology({ namespace: 'test', environment: 'local' });
26
+ const adapter = new SqliteQueueAdapter({ database: fx.db, leaseOwner: 'worker-a', leaseTtlSeconds: 30 });
27
+ const control = new QueueControl({ adapter, topology });
28
+
29
+ const enqueued = await control.enqueue(
30
+ { kind: 'repository.index', account_id: 'acct_1' },
31
+ {
32
+ account_id: 'acct_1',
33
+ id: 'job_delayed',
34
+ available_at: 120,
35
+ created_at: 100,
36
+ idempotency_key: 'idx:repo:a',
37
+ },
38
+ );
39
+ const queue = enqueued.plan.physical_queue;
40
+
41
+ assert.equal(await adapter.depth(queue), 1);
42
+ assert.deepEqual(await adapter.pull(queue, 1, { now: 119 }), []);
43
+
44
+ const first = await adapter.pull(queue, 1, { now: 120, owner: 'worker-a', ttl_seconds: 30 });
45
+ assert.equal(first.length, 1);
46
+ assert.equal(first[0].status, 'claimed');
47
+ assert.equal(first[0].lease_owner, 'worker-a');
48
+ assert.equal(first[0].lease_expires_at, 150);
49
+ assert.equal(first[0].lease_generation, 1);
50
+
51
+ assert.deepEqual(await adapter.pull(queue, 1, { now: 149, owner: 'worker-b' }), []);
52
+
53
+ const reclaimed = await adapter.pull(queue, 1, { now: 150, owner: 'worker-b', ttl_seconds: 20 });
54
+ assert.equal(reclaimed.length, 1);
55
+ assert.equal(reclaimed[0].lease_owner, 'worker-b');
56
+ assert.equal(reclaimed[0].lease_generation, 2);
57
+
58
+ const ack = await adapter.ack(reclaimed[0], { status: 'completed', result: { indexed: 3 }, now: 151 });
59
+ assert.equal(ack.updated, 1);
60
+ assert.equal(await adapter.depth(queue), 0);
61
+ assert.equal((await adapter.get('job_delayed')).status, 'completed');
62
+ });
63
+
64
+ test('SQLite adapter deduplicates stable idempotency keys across repeated enqueue attempts', async (t) => {
65
+ const fx = await fixture();
66
+ t.after(fx.close);
67
+ const adapter = new SqliteQueueAdapter({ database: fx.db });
68
+ const queue = 'agentsam-local-jobs';
69
+
70
+ const first = createJobEnvelope({
71
+ id: 'job_a',
72
+ account_id: 'acct_1',
73
+ kind: 'deployment.poll',
74
+ idempotency_key: 'deploy:123',
75
+ created_at: 10,
76
+ });
77
+ const duplicate = createJobEnvelope({
78
+ id: 'job_b',
79
+ account_id: 'acct_1',
80
+ kind: 'deployment.poll',
81
+ idempotency_key: 'deploy:123',
82
+ created_at: 11,
83
+ });
84
+
85
+ assert.equal((await adapter.publish(queue, first)).accepted, 1);
86
+ const second = await adapter.publish(queue, duplicate);
87
+ assert.equal(second.accepted, 0);
88
+ assert.equal(second.deduplicated, true);
89
+ assert.equal(second.existing_job_id, 'job_a');
90
+ assert.equal(await adapter.depth(queue), 1);
91
+ });
@@ -3,3 +3,6 @@
3
3
  Native Rust CLI source for `agentsam rust` / `agentsam-rapid-rust`.
4
4
 
5
5
  It scaffolds Cloudflare `workers-rs` projects, performs local Wasm checks/builds, runs Wrangler locally, and gates live deployment behind an explicit `--yes`. Compiled binaries are not committed; use `scripts/build_rapid_rust_cli.py` to build/install one.
6
+
7
+ <!-- agentsam:trademark-notice -->
8
+ > Independent project. Not affiliated with, endorsed by, or sponsored by Cloudflare, Inc. or by any other company whose products are named here. Cloudflare is a registered trademark of Cloudflare, Inc. Other names are trademarks of their respective owners. See [TRADEMARKS](https://github.com/SamPrimeaux/agentsam-sdk/blob/main/TRADEMARKS.md).
@@ -13,3 +13,6 @@ It owns deterministic repository identity and Merkle behavior that must be reusa
13
13
  It does **not** own authenticated account sessions, CLI commands, UI rendering, knowledge retrieval, deployment orchestration, or product application state. Those layers consume this package through explicit imports.
14
14
 
15
15
  The workspace is private while the extraction stabilizes. Cross-repository consumers should continue using the published `@inneranimalmedia/agentsam-sdk` facade until this package receives its own release policy.
16
+
17
+ <!-- agentsam:trademark-notice -->
18
+ > Independent project. Not affiliated with, endorsed by, or sponsored by Cloudflare, Inc. or by any other company whose products are named here. Cloudflare is a registered trademark of Cloudflare, Inc. Other names are trademarks of their respective owners. See [TRADEMARKS](https://github.com/SamPrimeaux/agentsam-sdk/blob/main/TRADEMARKS.md).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-repository",
3
- "version": "2.6.10",
3
+ "version": "2.6.12",
4
4
  "description": "Portable AgentSam repository identity, Merkle, semantic file metadata, persistence, and repository graph runtime contracts.",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-vault",
3
- "version": "2.6.10",
3
+ "version": "2.6.12",
4
4
  "type": "module",
5
5
  "description": "AgentSam credential vault core — contracts, AES-GCM crypto, provider registry, resolver. UI lives in agentsam-key-manager.",
6
6
  "main": "./src/index.js",
@@ -22,3 +22,46 @@ values are withheld. Cross-origin and sandboxed iframe contents are not inspecte
22
22
  their host frame may be selected as a contextual resource. Mark semantic ancestors
23
23
  with `data-agentsam-resource` and excluded controls with `data-annotation-control`.
24
24
  Local Studio stages the annotation in its active conversation draft for review.
25
+
26
+
27
+ ## Conversation and runtime surfaces
28
+
29
+ `AgentConversationSurface` is the portable thread + persistent-composer ownership
30
+ boundary. Product apps provide state and actions; the surface guarantees that
31
+ moving between an empty conversation and an active thread does not replace the
32
+ composer DOM ownership.
33
+
34
+ `AgentRuntimeField` projects `@inneranimalmedia/agentsam-loading-scene` into the
35
+ same surface. A lead thread and each co-worker may bind separate controllers, so
36
+ parallel work can show independent semantic scenes and task narration without
37
+ duplicating renderer code in product apps.
38
+
39
+ ```tsx
40
+ <AgentConversationSurface
41
+ empty={messages.length === 0}
42
+ runtime={<AgentRuntimeField controller={runtimeController} />}
43
+ thread={<AgentThread messages={messages} />}
44
+ composer={<AgentComposer {...composerProps} />}
45
+ />
46
+ ```
47
+
48
+ The workbench owns presentation mechanics. The host still owns model/provider
49
+ selection, tool execution, persistence, permissions, runtime events, queueing and
50
+ cancel semantics.
51
+
52
+ ## Widgets
53
+
54
+ `@inneranimalmedia/agentsam-workbench/widgets` is the shared widget surface:
55
+ `WidgetFrame` (size/state chrome around any widget body), `useCountdown`, and
56
+ `CountdownWidget`. Widget identity — kind, sizes, data source, deep link — comes
57
+ from the framework-neutral contracts in `@inneranimalmedia/agentsam-contracts/widgets`.
58
+
59
+ Countdown time authority is an absolute deadline, not accumulated interval
60
+ ticks: remaining time is derived from `Date.now()` on every render tick, so a
61
+ sleeping or backgrounded tab cannot corrupt the timer. Import
62
+ `@inneranimalmedia/agentsam-workbench/widgets/widgets.css` once in the host;
63
+ the widget tokens inherit the host theme.
64
+
65
+ Widgets are app-native primitives, not installable prebuilds — the host decides
66
+ where a widget appears and what its data means. Local Studio's `/widgets`
67
+ utilities surface is the proof consumer.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-workbench",
3
- "version": "2.6.10",
3
+ "version": "2.6.12",
4
4
  "description": "Reusable AgentSam workbench primitives for agent threads, composer, browser, terminal and resizable work surfaces.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -36,16 +36,27 @@
36
36
  "./agent/mini-agentsam.css": "./dist/agent/mini-agentsam.css",
37
37
  "./agent/contextual-composer.css": "./dist/agent/contextual-composer.css",
38
38
  "./agent/tool-permission.css": "./dist/agent/tool-permission.css",
39
- "./project-control.css": "./dist/project-control.css"
39
+ "./project-control.css": "./dist/project-control.css",
40
+ "./manufacturing": {
41
+ "types": "./dist/manufacturing/index.d.ts",
42
+ "import": "./dist/manufacturing/index.js"
43
+ },
44
+ "./widgets": {
45
+ "types": "./dist/widgets/index.d.ts",
46
+ "import": "./dist/widgets/index.js"
47
+ },
48
+ "./widgets/widgets.css": "./dist/widgets/widgets.css"
40
49
  },
41
50
  "scripts": {
42
51
  "typecheck": "node scripts/ensure-local-deps.mjs && tsc --noEmit -p tsconfig.json",
43
- "test": "node --test test/*.test.mjs",
52
+ "test": "npm run build && node --test test/*.test.mjs",
44
53
  "build": "node scripts/build.mjs",
45
54
  "prepack": "npm run build"
46
55
  },
47
56
  "dependencies": {
48
- "@inneranimalmedia/agentsam-contracts": "2.6.10"
57
+ "@inneranimalmedia/agentsam-contracts": "2.6.12",
58
+ "@inneranimalmedia/agentsam-loading-scene": "2.6.12",
59
+ "lucide-react": "^0.510.0"
49
60
  },
50
61
  "peerDependencies": {
51
62
  "react": ">=18",
@@ -0,0 +1,108 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+
3
+ export type AgentConversationSurfaceProps = {
4
+ empty?: boolean;
5
+ thread: ReactNode;
6
+ composer: ReactNode;
7
+ emptyState?: ReactNode;
8
+ runtime?: ReactNode;
9
+ status?: ReactNode;
10
+ className?: string;
11
+ bodyClassName?: string;
12
+ composerClassName?: string;
13
+ style?: CSSProperties;
14
+ };
15
+
16
+ /**
17
+ * Portable thread + persistent composer surface.
18
+ *
19
+ * The composer slot is never conditionally removed when a conversation moves
20
+ * from empty/startup to active. Hosts can restyle the surface, but the DOM
21
+ * ownership contract remains stable across web/desktop/product adapters.
22
+ */
23
+ export function AgentConversationSurface({
24
+ empty = false,
25
+ thread,
26
+ composer,
27
+ emptyState,
28
+ runtime,
29
+ status,
30
+ className,
31
+ bodyClassName,
32
+ composerClassName,
33
+ style,
34
+ }: AgentConversationSurfaceProps) {
35
+ return (
36
+ <section
37
+ className={className}
38
+ data-agent-conversation-surface=""
39
+ data-agent-conversation-empty={empty ? 'true' : 'false'}
40
+ style={{
41
+ position: 'relative',
42
+ display: 'flex',
43
+ minWidth: 0,
44
+ minHeight: 0,
45
+ flex: 1,
46
+ flexDirection: 'column',
47
+ overflow: 'hidden',
48
+ ...style,
49
+ }}
50
+ >
51
+ {runtime}
52
+
53
+ <div
54
+ className={bodyClassName}
55
+ data-agent-conversation-body=""
56
+ data-agent-conversation-body-empty={empty ? 'true' : 'false'}
57
+ style={{
58
+ display: 'flex',
59
+ minWidth: 0,
60
+ minHeight: 0,
61
+ flex: '1 1 auto',
62
+ flexDirection: 'column',
63
+ overflow: 'hidden',
64
+ }}
65
+ >
66
+ {empty ? (
67
+ emptyState ? (
68
+ <div
69
+ data-agent-conversation-empty-state=""
70
+ style={{
71
+ display: 'flex',
72
+ minWidth: 0,
73
+ minHeight: 0,
74
+ flex: '1 1 auto',
75
+ alignItems: 'center',
76
+ justifyContent: 'center',
77
+ }}
78
+ >
79
+ {emptyState}
80
+ </div>
81
+ ) : null
82
+ ) : (
83
+ thread
84
+ )}
85
+ </div>
86
+
87
+ {status ? (
88
+ <div data-agent-conversation-status="" style={{ flexShrink: 0 }}>
89
+ {status}
90
+ </div>
91
+ ) : null}
92
+
93
+ <div
94
+ className={composerClassName}
95
+ data-agent-conversation-composer=""
96
+ style={{
97
+ position: 'relative',
98
+ zIndex: 2,
99
+ width: '100%',
100
+ flexShrink: 0,
101
+ }}
102
+ >
103
+ {composer}
104
+ </div>
105
+
106
+ </section>
107
+ );
108
+ }
@@ -3,6 +3,7 @@ import type { AgentMessage, ModelOption } from '@inneranimalmedia/agentsam-contr
3
3
  import { AgentThread } from './Thread';
4
4
  import { AgentComposer } from './Composer';
5
5
  import { AgentModelSelect } from './ModelSelect';
6
+ import { AgentConversationSurface } from './AgentConversationSurface';
6
7
 
7
8
  export interface AgentPanelProps {
8
9
  messages: AgentMessage[];
@@ -24,17 +25,33 @@ export function AgentPanel(props: AgentPanelProps) {
24
25
  const modelControl = props.models?.length && props.selectedModelId && props.onModelChange
25
26
  ? <AgentModelSelect value={props.selectedModelId} models={props.models} onChange={props.onModelChange} />
26
27
  : null;
28
+ const thread = (
29
+ <AgentThread
30
+ messages={props.messages}
31
+ streaming={props.streaming}
32
+ renderMessage={props.renderMessage}
33
+ empty={props.empty}
34
+ />
35
+ );
36
+ const composer = (
37
+ <AgentComposer
38
+ value={props.draft}
39
+ onChange={props.onDraftChange}
40
+ onSend={props.onSend}
41
+ onCancel={props.onCancel}
42
+ streaming={props.streaming}
43
+ toolbarStart={modelControl}
44
+ />
45
+ );
46
+
27
47
  return (
28
48
  <section className={props.className} data-agent-panel="">
29
49
  {props.header}
30
- <AgentThread messages={props.messages} streaming={props.streaming} renderMessage={props.renderMessage} empty={props.empty} />
31
- <AgentComposer
32
- value={props.draft}
33
- onChange={props.onDraftChange}
34
- onSend={props.onSend}
35
- onCancel={props.onCancel}
36
- streaming={props.streaming}
37
- toolbarStart={modelControl}
50
+ <AgentConversationSurface
51
+ empty={props.messages.length === 0}
52
+ thread={thread}
53
+ composer={composer}
54
+ emptyState={props.empty}
38
55
  />
39
56
  </section>
40
57
  );
@@ -0,0 +1,152 @@
1
+ import { useEffect, useRef, type CSSProperties } from 'react';
2
+ import type {
3
+ LoadingSceneController,
4
+ ScenePreset,
5
+ } from '@inneranimalmedia/agentsam-loading-scene';
6
+ import {
7
+ HyperspaceRenderer,
8
+ computationalHyperspace,
9
+ } from '@inneranimalmedia/agentsam-loading-scene';
10
+ import {
11
+ LoadingSceneNarration,
12
+ useLoadingScene,
13
+ } from '@inneranimalmedia/agentsam-loading-scene/react';
14
+
15
+ export type AgentRuntimeFieldProps = {
16
+ controller: LoadingSceneController;
17
+ preset?: ScenePreset;
18
+ blocking?: boolean;
19
+ className?: string;
20
+ style?: CSSProperties;
21
+ activeOpacity?: number;
22
+ passiveOpacity?: number;
23
+ narration?: boolean;
24
+ narrationStyle?: CSSProperties;
25
+ };
26
+
27
+ /**
28
+ * Reusable workbench runtime surface.
29
+ *
30
+ * Product apps own runtime state and event production. This primitive owns the
31
+ * presentation contract: one persistent semantic scene, task-aware narration,
32
+ * resize handling and blocking/non-blocking composition.
33
+ */
34
+ export function AgentRuntimeField({
35
+ controller,
36
+ preset = computationalHyperspace,
37
+ blocking = false,
38
+ className,
39
+ style,
40
+ activeOpacity = 1,
41
+ passiveOpacity = 0.34,
42
+ narration = true,
43
+ narrationStyle,
44
+ }: AgentRuntimeFieldProps) {
45
+ const scene = useLoadingScene(controller);
46
+ const hostRef = useRef<HTMLDivElement | null>(null);
47
+ const canvasRef = useRef<HTMLCanvasElement | null>(null);
48
+ const rendererRef = useRef<HyperspaceRenderer | null>(null);
49
+
50
+ useEffect(() => {
51
+ const host = hostRef.current;
52
+ const canvas = canvasRef.current;
53
+ if (!host || !canvas) return;
54
+
55
+ const renderer = new HyperspaceRenderer(preset, {
56
+ canvas,
57
+ reducedMotion: 'auto',
58
+ });
59
+ rendererRef.current = renderer;
60
+
61
+ const fit = () => renderer.setSize(host.clientWidth, host.clientHeight);
62
+ fit();
63
+
64
+ const observer =
65
+ typeof ResizeObserver !== 'undefined' ? new ResizeObserver(fit) : null;
66
+ observer?.observe(host);
67
+ renderer.setScene(controller.getScene());
68
+
69
+ return () => {
70
+ observer?.disconnect();
71
+ renderer.dispose();
72
+ rendererRef.current = null;
73
+ };
74
+ }, [controller, preset]);
75
+
76
+ useEffect(() => {
77
+ const renderer = rendererRef.current;
78
+ if (!renderer) return;
79
+
80
+ renderer.setScene(scene);
81
+ if (
82
+ scene.status === 'running' ||
83
+ scene.status === 'waiting' ||
84
+ scene.status === 'error'
85
+ ) {
86
+ renderer.resume();
87
+ return;
88
+ }
89
+
90
+ const timeout = window.setTimeout(
91
+ () => renderer.suspend(),
92
+ preset.transition.settleMs + 300,
93
+ );
94
+ return () => window.clearTimeout(timeout);
95
+ }, [scene, preset]);
96
+
97
+ const active =
98
+ blocking ||
99
+ scene.status === 'running' ||
100
+ scene.status === 'waiting' ||
101
+ scene.status === 'error';
102
+
103
+ return (
104
+ <div
105
+ ref={hostRef}
106
+ data-agent-runtime-field=""
107
+ aria-hidden={active ? undefined : true}
108
+ className={className}
109
+ style={{
110
+ position: 'absolute',
111
+ inset: 0,
112
+ overflow: 'hidden',
113
+ pointerEvents: blocking ? 'auto' : 'none',
114
+ opacity: active ? 1 : 0,
115
+ transition: 'opacity 500ms ease',
116
+ background: blocking ? preset.palette.canvas : 'transparent',
117
+ ...style,
118
+ }}
119
+ >
120
+ <canvas
121
+ ref={canvasRef}
122
+ aria-hidden="true"
123
+ style={{
124
+ position: 'absolute',
125
+ inset: 0,
126
+ width: '100%',
127
+ height: '100%',
128
+ opacity: blocking ? activeOpacity : passiveOpacity,
129
+ }}
130
+ />
131
+
132
+ {active && narration ? (
133
+ <LoadingSceneNarration
134
+ controller={controller}
135
+ preset={preset}
136
+ align={blocking ? 'center' : 'start'}
137
+ showStudy
138
+ showMeta
139
+ style={{
140
+ position: 'absolute',
141
+ left: blocking ? '50%' : 18,
142
+ top: blocking ? '50%' : 'auto',
143
+ bottom: blocking ? 'auto' : 18,
144
+ transform: blocking ? 'translate(-50%, -50%)' : undefined,
145
+ pointerEvents: 'none',
146
+ ...narrationStyle,
147
+ }}
148
+ />
149
+ ) : null}
150
+ </div>
151
+ );
152
+ }
@@ -1,4 +1,5 @@
1
1
  import { useRef, type KeyboardEvent, type ReactNode, type TextareaHTMLAttributes } from 'react';
2
+ import type { AgentRunMode } from '@inneranimalmedia/agentsam-contracts';
2
3
 
3
4
  export interface AgentComposerProps {
4
5
  value: string;
@@ -17,6 +18,8 @@ export interface AgentComposerProps {
17
18
  toolbarClassName?: string;
18
19
  textareaProps?: Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'placeholder'>;
19
20
  maxHeight?: number;
21
+ /** Semantic run mode. Hosts own behavior; the primitive exposes it for accessible styling. */
22
+ runMode?: AgentRunMode;
20
23
  }
21
24
 
22
25
  /**
@@ -43,6 +46,7 @@ export function AgentComposer({
43
46
  toolbarClassName,
44
47
  textareaProps,
45
48
  maxHeight = 220,
49
+ runMode = 'agent',
46
50
  }: AgentComposerProps) {
47
51
  const areaRef = useRef<HTMLTextAreaElement>(null);
48
52
 
@@ -66,7 +70,12 @@ export function AgentComposer({
66
70
  const defaultStop = <button type="button" onClick={() => void onCancel?.()}>Stop</button>;
67
71
 
68
72
  return (
69
- <div className={containerClassName} data-agent-composer="" aria-busy={streaming || undefined}>
73
+ <div
74
+ className={containerClassName}
75
+ data-agent-composer=""
76
+ data-agent-mode={runMode}
77
+ aria-busy={streaming || undefined}
78
+ >
70
79
  <textarea
71
80
  {...textareaProps}
72
81
  ref={areaRef}
@@ -1,3 +1,4 @@
1
+ import { ArrowUp, Maximize2, Minimize2, X } from 'lucide-react';
1
2
  import { useEffect, useRef, useState, type ReactNode, type CSSProperties } from 'react';
2
3
 
3
4
  export interface AnnotationSelection {
@@ -11,7 +12,7 @@ export interface MiniAgentSamProps {
11
12
  selecting: boolean;
12
13
  onSelectingChange: (value: boolean) => void;
13
14
  onSubmit: (prompt: string, selection: AnnotationSelection) => void | Promise<void>;
14
- renderComposer?: (props: { value: string; onChange: (value: string) => void; onSend: () => void; busy: boolean }) => ReactNode;
15
+ renderComposer?: (props: { value: string; onChange: (value: string) => void; onSend: () => void; busy: boolean; expanded: boolean }) => ReactNode;
15
16
  scope?: () => HTMLElement | null;
16
17
  }
17
18
 
@@ -24,6 +25,8 @@ export function MiniAgentSam({ selecting, onSelectingChange, onSubmit, renderCom
24
25
  const [value, setValue] = useState('');
25
26
  const [busy, setBusy] = useState(false);
26
27
  const [status, setStatus] = useState('');
28
+ const [expanded, setExpanded] = useState(false);
29
+ const lastTouch = useRef(0);
27
30
  const target = useRef<Element | null>(null);
28
31
  const panel = useRef<HTMLElement>(null);
29
32
  const [panelHeight, setPanelHeight] = useState(200);
@@ -66,6 +69,22 @@ export function MiniAgentSam({ selecting, onSelectingChange, onSubmit, renderCom
66
69
  return () => { observer.disconnect(); window.removeEventListener('scroll', update, true); window.removeEventListener('resize', update); window.removeEventListener('keydown', escape); };
67
70
  }, [onSelectingChange]);
68
71
  useEffect(() => { if (!panel.current) return; const observer = new ResizeObserver(() => setPanelHeight(panel.current?.offsetHeight || 200)); observer.observe(panel.current); return () => observer.disconnect(); }, [selection]);
72
+ useEffect(() => {
73
+ if (!expanded || !selection) return;
74
+ const previous = document.activeElement as HTMLElement | null;
75
+ const area = panel.current?.querySelector('textarea');
76
+ area?.focus();
77
+ const trap = (event: KeyboardEvent) => {
78
+ if (event.key === 'Escape') { event.preventDefault(); event.stopImmediatePropagation(); setExpanded(false); return; }
79
+ if (event.key !== 'Tab') return;
80
+ const nodes = Array.from(panel.current?.querySelectorAll<HTMLElement>('button:not(:disabled), textarea, input, [tabindex="0"]') || []);
81
+ const first = nodes[0], last = nodes[nodes.length - 1];
82
+ if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last?.focus(); }
83
+ else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first?.focus(); }
84
+ };
85
+ window.addEventListener('keydown', trap, true);
86
+ return () => { window.removeEventListener('keydown', trap, true); previous?.focus(); };
87
+ }, [expanded, selection]);
69
88
  async function submit() {
70
89
  if (!value.trim() || !selection || busy) return;
71
90
  setBusy(true); setStatus('');
@@ -77,10 +96,15 @@ export function MiniAgentSam({ selecting, onSelectingChange, onSubmit, renderCom
77
96
  return <div data-mini-agentsam="" style={{ pointerEvents: 'none' }}>
78
97
  {selecting && <div className="mini-agentsam-hint" role="status">Select an element to annotate · Esc to cancel</div>}
79
98
  {bounds && (selecting || selection) && <div className="mini-agentsam-outline" style={{ left: bounds.left, top: bounds.top, width: bounds.width, height: bounds.height }} />}
80
- {selection && <section ref={panel} className="mini-agentsam-panel" aria-label="miniAgentSam" style={style}>
81
- <div className="mini-agentsam-heading"><span title={selection.label}>{selection.label || selection.tag}</span><button type="button" aria-label="Close miniAgentSam" onClick={() => { setSelection(null); setBounds(null); }}>×</button></div>
82
- {renderComposer ? renderComposer({ value, onChange: setValue, onSend: () => void submit(), busy }) : <><textarea aria-label="Annotation instructions" placeholder="Ask about this…" value={value} onChange={(event) => setValue(event.target.value)} /><button type="button" disabled={busy || !value.trim()} onClick={() => void submit()}>Send</button></>}
99
+ {selection && expanded && <div className="mini-agentsam-review-backdrop" onClick={() => setExpanded(false)} />}
100
+ {selection && <section ref={panel} className="mini-agentsam-panel" data-expanded={expanded ? 'true' : 'false'} role={expanded ? 'dialog' : undefined} aria-modal={expanded ? true : undefined} aria-label={expanded ? 'Review annotation message' : 'miniAgentSam'} style={expanded ? undefined : style}
101
+ onDoubleClick={(event) => { if (!(event.target as Element).closest('button')) setExpanded(true); }}
102
+ onPointerUp={(event) => { if (event.pointerType !== 'touch' || (event.target as Element).closest('button')) return; const now = Date.now(); if (now - lastTouch.current < 300) setExpanded(true); lastTouch.current = now; }}>
103
+
104
+ <div className="mini-agentsam-heading"><span title={selection.label}>{selection.label || selection.tag}</span><button type="button" aria-label={expanded ? "Collapse message" : "Expand message"} title={expanded ? "Collapse message" : "Review entire message"} aria-expanded={expanded} onClick={() => setExpanded((value) => !value)}>{expanded ? <Minimize2 size={16} /> : <Maximize2 size={16} />}</button><button type="button" aria-label="Close miniAgentSam" onClick={() => { setSelection(null); setBounds(null); setExpanded(false); }}><X size={18} /></button></div>
105
+ {renderComposer ? renderComposer({ value, onChange: setValue, onSend: () => void submit(), busy, expanded }) : <><textarea aria-label="Annotation instructions" placeholder="Ask about this…" value={value} onChange={(event) => setValue(event.target.value)} /><button type="button" disabled={busy || !value.trim()} className="mini-agentsam-send" aria-label="Send annotation" onClick={() => void submit()}><ArrowUp size={18} /></button></>}
83
106
  {status && <p role="status">{status}</p>}
84
107
  </section>}
85
108
  </div>;
86
109
  }
110
+
@@ -0,0 +1,26 @@
1
+ import type { AgentRunMode } from '@inneranimalmedia/agentsam-contracts';
2
+
3
+ export type AgentRunModeTone = 'blue' | 'yellow' | 'red' | 'multicolor' | 'green';
4
+
5
+ export type AgentRunModeProfile = Readonly<{
6
+ id: AgentRunMode;
7
+ label: string;
8
+ description: string;
9
+ tone: AgentRunModeTone;
10
+ }>;
11
+
12
+ /**
13
+ * Presentation metadata for the canonical AgentSam run modes.
14
+ * Runtime meaning remains owned by @inneranimalmedia/agentsam-contracts.
15
+ */
16
+ export const AGENT_RUN_MODE_PROFILES: readonly AgentRunModeProfile[] = Object.freeze([
17
+ { id: 'agent', label: 'Agent', description: 'Execute and open surfaces', tone: 'blue' },
18
+ { id: 'plan', label: 'Plan', description: 'Design technical plans', tone: 'yellow' },
19
+ { id: 'debug', label: 'Debug', description: 'Inspect, prove, and fix', tone: 'red' },
20
+ { id: 'multitask', label: 'Multitask', description: 'Coordinate managed workflows', tone: 'multicolor' },
21
+ { id: 'ask', label: 'Ask', description: 'Talk and answer questions', tone: 'green' },
22
+ ]);
23
+
24
+ export function agentRunModeProfile(mode: AgentRunMode): AgentRunModeProfile {
25
+ return AGENT_RUN_MODE_PROFILES.find((profile) => profile.id === mode) ?? AGENT_RUN_MODE_PROFILES[0]!;
26
+ }