@inneranimalmedia/agentsam-sdk 2.6.2 → 2.6.4

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 (661) hide show
  1. package/AGENTSAM.md +51 -1
  2. package/README.md +95 -0
  3. package/apps/README.md +34 -0
  4. package/apps/cad-creator/README.md +728 -0
  5. package/apps/cad-creator/shared/cad/package.json +19 -0
  6. package/apps/cad-creator/shared/cad/src/domain/operations.ts +7 -0
  7. package/apps/cad-creator/shared/cad/src/domain/project-contract.d.ts +3 -0
  8. package/apps/cad-creator/shared/cad/src/domain/project-contract.js +75 -0
  9. package/apps/cad-creator/shared/cad/src/domain/project-tools.d.ts +1 -0
  10. package/apps/cad-creator/shared/cad/src/domain/project-tools.js +24 -0
  11. package/apps/cad-creator/shared/cad/src/domain/validation.ts +191 -0
  12. package/apps/cad-creator/shared/cad/src/index.ts +4 -0
  13. package/apps/cad-creator/shared/cad/src/robotics/types.ts +232 -0
  14. package/apps/cad-creator/shared/cad/src/types.ts +507 -0
  15. package/apps/cad-creator/shared/cad/tsconfig.json +14 -0
  16. package/bin/agentsam +16 -1
  17. package/docs/AUTORAG.md +58 -0
  18. package/docs/BRAND_INTELLIGENCE.md +30 -0
  19. package/docs/CLI_SHELL.md +4 -2
  20. package/docs/CMS_CONTEXTUAL_COMPOSER.md +38 -0
  21. package/docs/MERKLE.md +4 -0
  22. package/docs/PROJECT_CONFIG.md +3 -0
  23. package/docs/REPOSITORY_KNOWLEDGE.md +2 -0
  24. package/docs/THEME_REFINERY.md +120 -0
  25. package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
  26. package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
  27. package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  28. package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
  29. package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
  30. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +28 -0
  31. package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
  32. package/docs/architecture/PROVIDER-TOOLS-AND-COMPACTION.md +60 -0
  33. package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
  34. package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
  35. package/docs/architecture/SAM_KERNEL.md +181 -0
  36. package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
  37. package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
  38. package/docs/architecture/STORAGE.md +87 -0
  39. package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
  40. package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  41. package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
  42. package/docs/cad-project-tools.md +69 -0
  43. package/docs/cms-scaffolding-pattern-reference.md +73 -0
  44. package/docs/plans/AGENTSAM-INTERACTIVE-UI-REQUIREMENTS-codex-tui-20260919.md +113 -0
  45. package/docs/plans/AGENTSAM-INTERACTIVE-UI-REQUIREMENTS.md +85 -0
  46. package/docs/plans/AGENTSAM-MCP-CLIENT-2026-09-19.md +181 -0
  47. package/docs/plans/ASBD-PORTABLE-WORKGRAPH-UI-DEFERRED.md +34 -0
  48. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +258 -0
  49. package/docs/plans/MULTI-AGENT-SPRINTS-2026-09-19.md +373 -0
  50. package/docs/plans/NEXT-AGENT-HANDOFF.md +167 -0
  51. package/docs/plans/RECONCILIATION-2026-09-19.md +178 -0
  52. package/docs/plugins.md +43 -0
  53. package/docs/tools/README.md +57 -0
  54. package/docs/tools/agent-and-orchestration.md +49 -0
  55. package/docs/tools/browser-and-research.md +46 -0
  56. package/docs/tools/cloudflare-platform.md +32 -0
  57. package/docs/tools/cms.md +25 -0
  58. package/docs/tools/communications.md +41 -0
  59. package/docs/tools/database-and-storage.md +62 -0
  60. package/docs/tools/design-and-media.md +64 -0
  61. package/docs/tools/filesystem-and-code.md +55 -0
  62. package/docs/tools/github.md +56 -0
  63. package/docs/tools/integrations-and-misc.md +16 -0
  64. package/docs/tools/memory.md +21 -0
  65. package/docs/tools/terminal-and-execution.md +29 -0
  66. package/docs/tools/tickets-and-platform.md +30 -0
  67. package/migrations/d1/0001_agentsam_plugin_runtime.sql +177 -0
  68. package/migrations/d1/0002_agentsam_ticket_ownership.sql +8 -0
  69. package/migrations/d1/0002_dynamic_model_policies.sql +23 -0
  70. package/migrations/d1/0003_expand_tool_handler_families.sql +18 -0
  71. package/migrations/d1/0004_project_aware_retrieval_lanes.sql +24 -0
  72. package/migrations/d1/0005_portable_knowledge_identity.sql +104 -0
  73. package/migrations/d1/0006_repair_ops_trail_account_scope.sql +14 -0
  74. package/migrations/d1/0007_repair_ops_trail_agent_run_account.sql +13 -0
  75. package/migrations/d1/0008_backfill_knowledge_run_legacy_tenant.sql +14 -0
  76. package/migrations/d1/0009_normalize_cloudflare_plugin_installations.sql +137 -0
  77. package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
  78. package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
  79. package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
  80. package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
  81. package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
  82. package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
  83. package/migrations/d1/0013_identity_oauth_states.sql +15 -0
  84. package/migrations/d1/0014_auth_event_log.sql +20 -0
  85. package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
  86. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
  87. package/migrations/runtime/0001_cli_runtime.sql +67 -0
  88. package/migrations/runtime/0002_project_sessions.sql +15 -0
  89. package/migrations/runtime/0003_provider_continuations.sql +8 -0
  90. package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
  91. package/package.json +107 -12
  92. package/packages/agentsam-brand/README.md +21 -0
  93. package/packages/agentsam-brand/package.json +22 -0
  94. package/packages/agentsam-brand/src/contract.js +59 -0
  95. package/packages/agentsam-brand/src/extract.js +126 -0
  96. package/packages/agentsam-brand/src/goap-actions.js +73 -0
  97. package/packages/agentsam-brand/src/index.js +48 -0
  98. package/packages/agentsam-brand/src/plan.js +115 -0
  99. package/packages/agentsam-brand/src/resolve.js +139 -0
  100. package/packages/agentsam-brand/src/scan.js +250 -0
  101. package/packages/agentsam-brand/test/brand-scan.test.mjs +106 -0
  102. package/packages/agentsam-contracts/README.md +23 -0
  103. package/packages/agentsam-contracts/package.json +32 -0
  104. package/packages/agentsam-contracts/src/adapter.ts +25 -0
  105. package/packages/agentsam-contracts/src/agent.ts +35 -0
  106. package/packages/agentsam-contracts/src/artifacts.ts +33 -0
  107. package/packages/agentsam-contracts/src/authority.ts +29 -0
  108. package/packages/agentsam-contracts/src/context.ts +16 -0
  109. package/packages/agentsam-contracts/src/errors.ts +62 -0
  110. package/packages/agentsam-contracts/src/events.ts +47 -0
  111. package/packages/agentsam-contracts/src/execution.ts +50 -0
  112. package/packages/agentsam-contracts/src/hooks.ts +40 -0
  113. package/packages/agentsam-contracts/src/identity.ts +16 -0
  114. package/packages/agentsam-contracts/src/index.ts +14 -0
  115. package/packages/agentsam-contracts/src/models.ts +9 -0
  116. package/packages/agentsam-contracts/src/providers.ts +33 -0
  117. package/packages/agentsam-contracts/src/repository.ts +64 -0
  118. package/packages/agentsam-contracts/src/tools.ts +98 -0
  119. package/packages/agentsam-contracts/test/contracts.test.mjs +16 -0
  120. package/packages/agentsam-contracts/test/errors-catalog.test.mjs +25 -0
  121. package/packages/agentsam-contracts/test/repository.test.mjs +18 -0
  122. package/packages/agentsam-contracts/tsconfig.json +12 -0
  123. package/packages/agentsam-errors/package.json +17 -0
  124. package/packages/agentsam-errors/src/adapters/anthropic.js +15 -0
  125. package/packages/agentsam-errors/src/adapters/cad.js +109 -0
  126. package/packages/agentsam-errors/src/adapters/cloudflare.js +21 -0
  127. package/packages/agentsam-errors/src/adapters/cursor.js +4 -0
  128. package/packages/agentsam-errors/src/adapters/device.js +38 -0
  129. package/packages/agentsam-errors/src/adapters/docker.js +28 -0
  130. package/packages/agentsam-errors/src/adapters/gcp.js +14 -0
  131. package/packages/agentsam-errors/src/adapters/github.js +22 -0
  132. package/packages/agentsam-errors/src/adapters/google.js +17 -0
  133. package/packages/agentsam-errors/src/adapters/index.js +55 -0
  134. package/packages/agentsam-errors/src/adapters/internal.js +40 -0
  135. package/packages/agentsam-errors/src/adapters/oauth.js +24 -0
  136. package/packages/agentsam-errors/src/adapters/openai.js +17 -0
  137. package/packages/agentsam-errors/src/adapters/process.js +35 -0
  138. package/packages/agentsam-errors/src/adapters/provider.js +114 -0
  139. package/packages/agentsam-errors/src/envelope.js +239 -0
  140. package/packages/agentsam-errors/src/error.js +24 -0
  141. package/packages/agentsam-errors/src/fingerprint.js +35 -0
  142. package/packages/agentsam-errors/src/index.js +11 -0
  143. package/packages/agentsam-errors/src/normalize.js +30 -0
  144. package/packages/agentsam-errors/src/recovery.js +301 -0
  145. package/packages/agentsam-errors/src/redaction.js +52 -0
  146. package/packages/agentsam-errors/src/render.js +16 -0
  147. package/packages/agentsam-errors/src/retry.js +10 -0
  148. package/packages/agentsam-errors/src/transport.js +52 -0
  149. package/packages/agentsam-errors/src/vocabulary.js +320 -0
  150. package/packages/agentsam-errors/test/envelope.test.mjs +70 -0
  151. package/packages/agentsam-errors/test/providers.test.mjs +99 -0
  152. package/packages/agentsam-errors/test/redaction.test.mjs +21 -0
  153. package/packages/agentsam-errors/test/runtime-cad-device.test.mjs +76 -0
  154. package/packages/agentsam-errors/test/transport.test.mjs +46 -0
  155. package/packages/agentsam-knowledge/package.json +15 -0
  156. package/packages/agentsam-knowledge/src/autorag/index.js +64 -0
  157. package/packages/agentsam-knowledge/src/backends/index.js +26 -0
  158. package/packages/agentsam-knowledge/src/index.js +3 -0
  159. package/packages/agentsam-knowledge/src/providers/index.js +107 -0
  160. package/packages/agentsam-knowledge/test/autorag.test.mjs +42 -0
  161. package/packages/agentsam-nav/README.md +40 -0
  162. package/packages/agentsam-nav/dist/Nav.d.ts +43 -0
  163. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +10 -0
  164. package/packages/agentsam-nav/dist/NavContent.d.ts +2 -0
  165. package/packages/agentsam-nav/dist/NavFooter.d.ts +2 -0
  166. package/packages/agentsam-nav/dist/NavGroup.d.ts +3 -0
  167. package/packages/agentsam-nav/dist/NavHeader.d.ts +2 -0
  168. package/packages/agentsam-nav/dist/NavMenu.d.ts +22 -0
  169. package/packages/agentsam-nav/dist/NavProvider.d.ts +35 -0
  170. package/packages/agentsam-nav/dist/NavTrigger.d.ts +2 -0
  171. package/packages/agentsam-nav/dist/Surfaces.d.ts +41 -0
  172. package/packages/agentsam-nav/dist/browser.d.ts +11 -0
  173. package/packages/agentsam-nav/dist/browser.global.js +132 -0
  174. package/packages/agentsam-nav/dist/browser.js +613 -0
  175. package/packages/agentsam-nav/dist/contracts.d.ts +76 -0
  176. package/packages/agentsam-nav/dist/index.d.ts +11 -0
  177. package/packages/agentsam-nav/dist/index.js +614 -0
  178. package/packages/agentsam-nav/dist/legacy.css +83 -0
  179. package/packages/agentsam-nav/dist/shell.css +113 -0
  180. package/packages/agentsam-nav/dist/theme.css +113 -0
  181. package/packages/agentsam-nav/dist/utils.d.ts +1 -0
  182. package/packages/agentsam-nav/package.json +43 -0
  183. package/packages/agentsam-queue-control/README.md +107 -0
  184. package/packages/agentsam-queue-control/package.json +31 -0
  185. package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +56 -0
  186. package/packages/agentsam-queue-control/src/adapters/cloudflare.js +152 -0
  187. package/packages/agentsam-queue-control/src/adapters/memory.js +38 -0
  188. package/packages/agentsam-queue-control/src/contracts.js +130 -0
  189. package/packages/agentsam-queue-control/src/control-plane.js +141 -0
  190. package/packages/agentsam-queue-control/src/dispatch.js +43 -0
  191. package/packages/agentsam-queue-control/src/index.js +7 -0
  192. package/packages/agentsam-queue-control/src/policy.js +88 -0
  193. package/packages/agentsam-queue-control/src/topology.js +66 -0
  194. package/packages/agentsam-queue-control/test/queue-control.test.mjs +100 -0
  195. package/packages/agentsam-repository/src/goap.js +718 -0
  196. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
  197. package/packages/agentsam-repository/src/index.js +5 -0
  198. package/packages/agentsam-repository/src/merkle/cloudflare-persistence.js +2 -2
  199. package/packages/agentsam-repository/src/tickets.js +184 -0
  200. package/packages/agentsam-repository/src/work-tracking.js +199 -0
  201. package/packages/agentsam-repository/src/workspace-state.js +176 -0
  202. package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +152 -0
  203. package/packages/connectors/cloudflare/src/index.js +297 -15
  204. package/packages/connectors/cloudflare/src/owner.js +43 -40
  205. package/packages/connectors/cloudflare/src/routes.js +176 -26
  206. package/packages/connectors/cloudflare/tests/connector.test.mjs +137 -2
  207. package/packages/heuristic-theme/README.md +11 -0
  208. package/packages/heuristic-theme/package.json +25 -0
  209. package/packages/heuristic-theme/src/index.js +2 -0
  210. package/packages/heuristic-theme/src/registry.js +36 -0
  211. package/packages/heuristic-theme/src/theme.js +41 -0
  212. package/packages/heuristic-theme/test/theme.test.mjs +26 -0
  213. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +64 -0
  214. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +96 -0
  215. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +47 -0
  216. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +83 -0
  217. package/packages/identity/.agentsam/features/oauth-login-portal/ui.json +35 -0
  218. package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
  219. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +31 -0
  220. package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
  221. package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
  222. package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
  223. package/packages/identity/package.json +4 -3
  224. package/packages/identity/src/adapters/cloudflare-d1/ids.js +4 -0
  225. package/packages/identity/src/adapters/cloudflare-d1/index.js +156 -18
  226. package/packages/identity/src/adapters/sqlite/index.js +319 -0
  227. package/packages/identity/src/app/verify-app.js +95 -0
  228. package/packages/identity/src/contracts/identity-store.js +115 -0
  229. package/packages/identity/src/contracts/provider.js +3 -2
  230. package/packages/identity/src/contracts/route-ids.js +30 -0
  231. package/packages/identity/src/contracts/route-projection.js +218 -0
  232. package/packages/identity/src/contracts/routes.js +11 -0
  233. package/packages/identity/src/core/browser-paths.js +4 -5
  234. package/packages/identity/src/core/constants.js +13 -8
  235. package/packages/identity/src/core/session-policy.js +32 -0
  236. package/packages/identity/src/frontend/auth-portal/pages/login.html +16 -9
  237. package/packages/identity/src/frontend/auth-portal/pages/reset.html +3 -3
  238. package/packages/identity/src/frontend/auth-portal/pages/signup.html +3 -3
  239. package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
  240. package/packages/identity/src/index.js +27 -0
  241. package/packages/identity/src/oauth/README.md +10 -4
  242. package/packages/identity/src/oauth/credentials.js +31 -11
  243. package/packages/identity/src/oauth/finalize-inbound.js +1 -1
  244. package/packages/identity/src/oauth/iam-platform.js +13 -12
  245. package/packages/identity/src/oauth/redirect-paths.js +27 -36
  246. package/packages/identity/src/providers/cloudflare/index.js +19 -0
  247. package/packages/identity/src/providers/cloudflare/mapper.js +21 -0
  248. package/packages/identity/src/providers/cloudflare/oauth.js +48 -0
  249. package/packages/identity/src/providers/cloudflare/profile.js +28 -0
  250. package/packages/identity/src/providers/index.js +18 -2
  251. package/packages/identity/src/server/identity-service.js +35 -8
  252. package/packages/identity/src/server/mount-policy.js +30 -0
  253. package/packages/identity/src/server/post-auth.js +79 -0
  254. package/packages/identity/src/server/worker-router.js +153 -66
  255. package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
  256. package/packages/identity/tests/iam-provider.test.mjs +1 -1
  257. package/packages/identity/tests/identity-service.test.mjs +47 -1
  258. package/packages/identity/tests/oauth-credentials.test.mjs +3 -1
  259. package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
  260. package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
  261. package/packages/providers/completeful/README.md +38 -0
  262. package/packages/providers/completeful/package.json +29 -0
  263. package/packages/providers/completeful/src/client.js +162 -0
  264. package/packages/providers/completeful/src/events.js +49 -0
  265. package/packages/providers/completeful/src/index.js +22 -0
  266. package/packages/providers/completeful/src/tools.js +579 -0
  267. package/packages/providers/completeful/src/webhooks.js +55 -0
  268. package/packages/providers/completeful/test/provider.test.mjs +196 -0
  269. package/packages/theme-church-site/README.md +10 -0
  270. package/packages/theme-church-site/package.json +31 -0
  271. package/packages/theme-church-site/src/harvest.json +14 -0
  272. package/packages/theme-church-site/src/index.js +85 -0
  273. package/packages/theme-church-site/test/theme.test.mjs +19 -0
  274. package/packages/theme-companions-site/README.md +10 -0
  275. package/packages/theme-companions-site/package.json +31 -0
  276. package/packages/theme-companions-site/src/harvest.json +12 -0
  277. package/packages/theme-companions-site/src/index.js +83 -0
  278. package/packages/theme-companions-site/test/theme.test.mjs +19 -0
  279. package/packages/theme-floors-site/README.md +10 -0
  280. package/packages/theme-floors-site/package.json +31 -0
  281. package/packages/theme-floors-site/src/harvest.json +14 -0
  282. package/packages/theme-floors-site/src/index.js +83 -0
  283. package/packages/theme-floors-site/test/theme.test.mjs +19 -0
  284. package/packages/theme-fuelnfree-site/README.md +10 -0
  285. package/packages/theme-fuelnfree-site/package.json +31 -0
  286. package/packages/theme-fuelnfree-site/src/harvest.json +13 -0
  287. package/packages/theme-fuelnfree-site/src/index.js +82 -0
  288. package/packages/theme-fuelnfree-site/test/theme.test.mjs +19 -0
  289. package/packages/theme-handyman-site/README.md +10 -0
  290. package/packages/theme-handyman-site/package.json +31 -0
  291. package/packages/theme-handyman-site/src/harvest.json +10 -0
  292. package/packages/theme-handyman-site/src/index.js +84 -0
  293. package/packages/theme-handyman-site/test/theme.test.mjs +19 -0
  294. package/packages/theme-insurance-site/README.md +10 -0
  295. package/packages/theme-insurance-site/package.json +31 -0
  296. package/packages/theme-insurance-site/src/harvest.json +10 -0
  297. package/packages/theme-insurance-site/src/index.js +84 -0
  298. package/packages/theme-insurance-site/test/theme.test.mjs +19 -0
  299. package/packages/theme-shinshu-site/README.md +10 -0
  300. package/packages/theme-shinshu-site/package.json +31 -0
  301. package/packages/theme-shinshu-site/src/harvest.json +12 -0
  302. package/packages/theme-shinshu-site/src/index.js +84 -0
  303. package/packages/theme-shinshu-site/test/theme.test.mjs +19 -0
  304. package/packages/work-graph/README.md +49 -0
  305. package/packages/work-graph/package.json +19 -0
  306. package/packages/work-graph/prototype/README.md +32 -0
  307. package/packages/work-graph/prototype/data/demo-workgraph.js +47 -0
  308. package/packages/work-graph/prototype/renderers/timeline-model.js +21 -0
  309. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +38 -0
  310. package/packages/work-graph/prototype-gnantt.html +655 -0
  311. package/packages/work-graph/src/adapters/business/projects.js +23 -0
  312. package/packages/work-graph/src/adapters/engineering/git.js +22 -0
  313. package/packages/work-graph/src/adapters/engineering/mcp.js +22 -0
  314. package/packages/work-graph/src/index.js +76 -0
  315. package/packages/work-graph/src/renderers/gantt-model.js +11 -0
  316. package/packages/work-graph/src/renderers/timeline.js +16 -0
  317. package/packages/work-graph/test/work-graph.test.mjs +37 -0
  318. package/protocol/README.md +12 -0
  319. package/protocol/apps/agentsam.app.v1.schema.json +51 -0
  320. package/protocol/brand/brandpack.v1.schema.json +43 -0
  321. package/protocol/capabilities/cloudflare-cpu-audit-input.schema.json +30 -6
  322. package/protocol/capabilities/cloudflare-cpu-profile-input.schema.json +18 -4
  323. package/protocol/capabilities/cloudflare-wrangler-native-input.schema.json +59 -10
  324. package/protocol/capabilities/knowledge-search-input.schema.json +35 -0
  325. package/protocol/capabilities/manifest.json +163 -1
  326. package/protocol/capabilities/repository-audit-input.schema.json +39 -6
  327. package/protocol/capabilities/repository-snapshot-input.schema.json +15 -3
  328. package/protocol/capabilities/terminal-exec-input.schema.json +55 -0
  329. package/protocol/commerce/catalog.v1.json +50 -0
  330. package/protocol/credentials/issue.v1.schema.json +38 -0
  331. package/protocol/database/connection.v1.schema.json +41 -0
  332. package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
  333. package/protocol/errors/error-catalog.json +164 -0
  334. package/protocol/errors/error-envelope.schema.json +678 -0
  335. package/protocol/errors/recovery.v1.schema.json +50 -0
  336. package/protocol/features/README.md +57 -0
  337. package/protocol/features/agentsam.feature.v1.schema.json +290 -0
  338. package/protocol/features/catalog.json +65 -0
  339. package/protocol/features/examples/provider-resend.feature.json +17 -0
  340. package/protocol/go/agentsam-go-runtime.v1.json +17 -0
  341. package/protocol/knowledge/LIFECYCLE.md +140 -0
  342. package/protocol/knowledge/README.md +4 -0
  343. package/protocol/presets/catalog.json +128 -19
  344. package/protocol/rpc/v1/errors.proto +24 -0
  345. package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
  346. package/protocol/sam/activity.v1.schema.json +48 -0
  347. package/protocol/sam/answer.v1.schema.json +35 -0
  348. package/protocol/sam/calibration.v1.schema.json +21 -0
  349. package/protocol/sam/decision-receipt.v1.schema.json +29 -0
  350. package/protocol/sam/evaluation.v1.schema.json +19 -0
  351. package/protocol/sam/operation.schema.json +66 -0
  352. package/protocol/sam/outcome.v1.schema.json +36 -0
  353. package/protocol/sam/question.v1.schema.json +26 -0
  354. package/protocol/sam/registry.seed.json +153 -0
  355. package/protocol/sam/result.schema.json +53 -0
  356. package/protocol/sam/state.v1.schema.json +23 -0
  357. package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
  358. package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
  359. package/protocol/theme-refinery/d1-reconciliation.md +48 -0
  360. package/protocol/theme-refinery/product-metadata.schema.json +27 -0
  361. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +318 -0
  362. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +472 -0
  363. package/protocol/theme-refinery/reconciliation-receipt.schema.json +83 -0
  364. package/protocol/ui/icon-registry.mjs +226 -0
  365. package/protocol/ui/icon.v1.schema.json +51 -0
  366. package/services/cad/server.py +249 -2
  367. package/skills/README.md +22 -9
  368. package/skills/agentsam-codebaseindex/SKILL.md +225 -0
  369. package/skills/catalog.json +14 -0
  370. package/src/agent/capability-adapter.js +15 -5
  371. package/src/agent/index.js +2 -1
  372. package/src/agent/model-turn.js +51 -0
  373. package/src/agent/responses-runner.js +304 -38
  374. package/src/capabilities/index.js +1 -0
  375. package/src/capabilities/terminal-exec.js +78 -0
  376. package/src/cli/command-catalog.js +130 -0
  377. package/src/cli/dispatch.js +48 -0
  378. package/src/cli.js +160 -10
  379. package/src/cloudflare/index.js +6 -0
  380. package/src/cloudflare/runtime-status.js +393 -0
  381. package/src/cloudflare/wrangler.js +17 -1
  382. package/src/commands/api-key.js +244 -0
  383. package/src/commands/app.js +138 -0
  384. package/src/commands/autorag.js +77 -0
  385. package/src/commands/brand.js +291 -0
  386. package/src/commands/cad.js +1 -0
  387. package/src/commands/codebaseindex.js +688 -0
  388. package/src/commands/connections.js +126 -29
  389. package/src/commands/context-economics.js +8 -0
  390. package/src/commands/db.js +7 -0
  391. package/src/commands/env.js +155 -27
  392. package/src/commands/eval.js +209 -14
  393. package/src/commands/go.js +678 -0
  394. package/src/commands/goap.js +176 -0
  395. package/src/commands/identity-init.js +27 -3
  396. package/src/commands/identity-protocol.js +195 -0
  397. package/src/commands/interaction-clack.js +115 -0
  398. package/src/commands/knowledge.js +64 -5
  399. package/src/commands/mcp.js +341 -0
  400. package/src/commands/merkle-persist.js +3 -1
  401. package/src/commands/merkle.js +18 -3
  402. package/src/commands/models.js +110 -24
  403. package/src/commands/plugins.js +175 -0
  404. package/src/commands/preferences.js +28 -8
  405. package/src/commands/product.js +53 -10
  406. package/src/commands/providers.js +173 -44
  407. package/src/commands/resume.js +9 -5
  408. package/src/commands/runtime-status.js +154 -0
  409. package/src/commands/shell.js +508 -56
  410. package/src/commands/skill.js +248 -0
  411. package/src/commands/skills.js +1 -1
  412. package/src/commands/start-local.js +4 -0
  413. package/src/commands/status.js +82 -7
  414. package/src/commands/tunnel.js +228 -195
  415. package/src/commands/whoami.js +156 -12
  416. package/src/context/budget.js +6 -0
  417. package/src/context/index.js +2 -1
  418. package/src/context/project-card.js +75 -0
  419. package/src/errors/contract.js +34 -211
  420. package/src/errors/diagnostic.js +95 -51
  421. package/src/errors/index.js +6 -13
  422. package/src/eval/index.js +6 -0
  423. package/src/eval/live.js +439 -0
  424. package/src/features/resolve.js +242 -0
  425. package/src/go/build.js +298 -0
  426. package/src/go/cloudflare.js +608 -0
  427. package/src/go/container.js +120 -0
  428. package/src/go/contract.js +144 -0
  429. package/src/go/discover.js +212 -0
  430. package/src/go/index.js +25 -0
  431. package/src/go/native-probe-runner.mjs +119 -0
  432. package/src/go/official-registry.js +280 -0
  433. package/src/go/official-release.js +10 -0
  434. package/src/go/receipts.js +144 -0
  435. package/src/go/verify.js +38 -0
  436. package/src/index.js +127 -1
  437. package/src/indexing/ingest/discover-models.js +298 -0
  438. package/src/indexing/ingest/inventory.js +243 -0
  439. package/src/indexing/ingest/job-graph.js +181 -0
  440. package/src/indexing/ingest/materials.js +210 -0
  441. package/src/knowledge/config.js +13 -5
  442. package/src/knowledge/engine.js +23 -8
  443. package/src/knowledge/index.js +1 -0
  444. package/src/knowledge/lane-registry.js +46 -0
  445. package/src/knowledge/providers/gemini.js +48 -8
  446. package/src/knowledge/service/client.js +13 -1
  447. package/src/knowledge/service/grpc-codec.js +156 -53
  448. package/src/knowledge/service/job-engine.js +133 -11
  449. package/src/knowledge/service/job-worker.js +34 -5
  450. package/src/knowledge/service/server.js +10 -1
  451. package/src/knowledge/store-discovery.js +77 -0
  452. package/src/lib/account-session.js +8 -2
  453. package/src/lib/agent-instructions.js +3 -0
  454. package/src/lib/auth.js +7 -3
  455. package/src/lib/cad/blender.js +42 -3
  456. package/src/lib/cad/d1-project-store.js +43 -0
  457. package/src/lib/cad/discovery.js +616 -0
  458. package/src/lib/cad/docker-executor.js +352 -0
  459. package/src/lib/cad/freecad.js +253 -0
  460. package/src/lib/cad/index.js +40 -0
  461. package/src/lib/cad/openscad.js +198 -0
  462. package/src/lib/cad/project-cli.d.ts +2 -0
  463. package/src/lib/cad/project-cli.js +21 -0
  464. package/src/lib/cad/project-contract.d.ts +3 -0
  465. package/src/lib/cad/project-contract.js +1 -0
  466. package/src/lib/cad/project-recipe.js +30 -0
  467. package/src/lib/cad/project-runtime.d.ts +2 -0
  468. package/src/lib/cad/project-runtime.js +53 -0
  469. package/src/lib/cad/project-store.js +25 -0
  470. package/src/lib/cad/project-workflows.js +31 -0
  471. package/src/lib/cad-docker.js +21 -2
  472. package/src/lib/cli-preferences.js +17 -2
  473. package/src/lib/core-client.js +37 -18
  474. package/src/lib/deploy/local-studio.js +6 -5
  475. package/src/lib/dockerize.js +3 -0
  476. package/src/lib/execution-approvals.js +1 -0
  477. package/src/lib/identity-scaffold.js +4 -1
  478. package/src/lib/knowledge-docker.js +9 -1
  479. package/src/lib/local-sessions.js +124 -34
  480. package/src/lib/local-status.js +35 -14
  481. package/src/lib/project-config.js +9 -0
  482. package/src/lib/provider-credentials.js +136 -32
  483. package/src/lib/scaffold/resolve-cloudflare-account.js +37 -0
  484. package/src/lib/scaffold/wizards/cms.js +2 -8
  485. package/src/lib/scaffold/wizards/worker-api.js +2 -8
  486. package/src/lib/slash-commands.js +10 -2
  487. package/src/local/migrations.js +109 -1
  488. package/src/local/runtime-store.js +31 -5
  489. package/src/local/sqlite.js +36 -1
  490. package/src/local-fs/capability.js +121 -0
  491. package/src/local-fs/freshness.js +75 -0
  492. package/src/local-fs/index.js +385 -0
  493. package/src/local-fs/paths.js +100 -0
  494. package/src/local-pty/server.js +295 -19
  495. package/src/mcp/authority.js +348 -0
  496. package/src/mcp/client-adapters.js +431 -0
  497. package/src/mcp/client.js +172 -0
  498. package/src/mcp/index.js +47 -0
  499. package/src/mcp/telemetry.js +103 -0
  500. package/src/models/ai-access-onboarding.js +112 -0
  501. package/src/models/catalog.js +329 -51
  502. package/src/models/discovery.js +34 -6
  503. package/src/models/index.js +2 -0
  504. package/src/models/inventory-core.js +190 -0
  505. package/src/models/policy.js +20 -0
  506. package/src/plugins/cloudflare.js +103 -0
  507. package/src/plugins/completeful.js +69 -0
  508. package/src/plugins/contracts.js +86 -0
  509. package/src/plugins/index.js +11 -0
  510. package/src/plugins/registry.js +207 -0
  511. package/src/plugins/resource-scope.js +45 -0
  512. package/src/plugins/runtime.js +118 -0
  513. package/src/plugins/vectorize.js +31 -0
  514. package/src/progression/engine.js +171 -0
  515. package/src/progression/index.js +1 -0
  516. package/src/providers/cloudflare-chat.js +1 -1
  517. package/src/providers/gemini-generate-content.js +2 -1
  518. package/src/providers/openai-responses.js +45 -16
  519. package/src/providers/tool-schema.js +85 -0
  520. package/src/repository/index.js +29 -0
  521. package/src/rpc/generated/errors_pb.js +961 -1
  522. package/src/sam/activity/index.js +183 -0
  523. package/src/sam/client.js +252 -0
  524. package/src/sam/decision/calibration.js +109 -0
  525. package/src/sam/decision/confidence.js +126 -0
  526. package/src/sam/decision/evaluate.js +157 -0
  527. package/src/sam/decision/evaluators/deterministic.js +341 -0
  528. package/src/sam/decision/evaluators/heuristic.js +61 -0
  529. package/src/sam/decision/evaluators/select.js +50 -0
  530. package/src/sam/decision/evaluators/semantic.js +149 -0
  531. package/src/sam/decision/hierarchical.js +61 -0
  532. package/src/sam/decision/index.js +53 -0
  533. package/src/sam/decision/policy.js +86 -0
  534. package/src/sam/decision/questions.js +120 -0
  535. package/src/sam/decision/receipt.js +148 -0
  536. package/src/sam/decision/state.js +117 -0
  537. package/src/sam/decision/types.js +22 -0
  538. package/src/sam/decision/validate.js +200 -0
  539. package/src/sam/define.js +51 -0
  540. package/src/sam/index.js +65 -0
  541. package/src/sam/operations/brand-scan.js +62 -0
  542. package/src/sam/operations/cad-blender-inspect.js +36 -0
  543. package/src/sam/operations/codebaseindex-ingest.js +49 -0
  544. package/src/sam/operations/decision-evaluate.js +59 -0
  545. package/src/sam/operations/planning-astar.js +77 -0
  546. package/src/sam/operations/planning-goap.js +60 -0
  547. package/src/sam/operations/repository-inspect.js +72 -0
  548. package/src/sam/operations/security-scan.js +33 -0
  549. package/src/sam/operations/terminal-exec.js +29 -0
  550. package/src/sam/planning/astar.js +311 -0
  551. package/src/sam/planning/goap.js +177 -0
  552. package/src/sam/planning/index.js +21 -0
  553. package/src/sam/planning/state.js +84 -0
  554. package/src/sam/registry.js +48 -0
  555. package/src/sam/result.js +77 -0
  556. package/src/sam/seed.js +44 -0
  557. package/src/sam/types.js +91 -0
  558. package/src/security/local-vault.js +415 -0
  559. package/src/security/process.js +20 -4
  560. package/src/skills/catalog.js +64 -0
  561. package/src/skills/content-resolver.js +124 -0
  562. package/src/skills/hosted-store.js +37 -0
  563. package/src/skills/index.js +29 -64
  564. package/src/skills/interaction.js +102 -0
  565. package/src/skills/local-store.js +228 -0
  566. package/src/skills/manifest.js +104 -0
  567. package/src/skills/metrics.js +31 -0
  568. package/src/skills/registry.js +184 -0
  569. package/src/skills/runtime.js +287 -0
  570. package/src/skills/slash.js +44 -0
  571. package/src/status/actions.js +192 -0
  572. package/src/tools/hydrate.js +5 -1
  573. package/src/tools/index.js +7 -0
  574. package/src/tools/redact.js +64 -0
  575. package/src/tools/registry.js +83 -0
  576. package/src/tools/runtime.js +257 -0
  577. package/src/tools/search.js +21 -8
  578. package/src/ui/ansi.js +117 -3
  579. package/src/ui/cli/activity.js +76 -7
  580. package/src/ui/cli/footer.js +110 -9
  581. package/src/ui/cli/help.js +96 -96
  582. package/src/ui/wireframes.js +166 -0
  583. package/test/account-session.test.mjs +28 -0
  584. package/test/apps-scaffold-contract.test.mjs +16 -1
  585. package/test/capabilities.test.mjs +1 -1
  586. package/test/cli/api-key-env-whoami.test.mjs +129 -0
  587. package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
  588. package/test/cli/eval-live.test.mjs +219 -0
  589. package/test/cli/go.test.mjs +128 -0
  590. package/test/cli/local-vault-and-provider-setup.test.mjs +268 -0
  591. package/test/cli/mcp-client.test.mjs +245 -0
  592. package/test/cli/runtime-ui.test.mjs +69 -2
  593. package/test/cli/skill-npm-and-env.test.mjs +52 -0
  594. package/test/cli/status-actions.test.mjs +88 -0
  595. package/test/cli/wireframes-go-registry.test.mjs +139 -0
  596. package/test/cloudflare-connector.test.mjs +3 -6
  597. package/test/cloudflare-runtime.test.mjs +8 -1
  598. package/test/context.test.mjs +15 -0
  599. package/test/error-diagnostics.test.mjs +9 -0
  600. package/test/fixtures/cad/courtyard-house.json +208 -0
  601. package/test/go/build-source-identity.test.mjs +31 -0
  602. package/test/go/cloudflare-probe.test.mjs +317 -0
  603. package/test/go/distribution.test.mjs +28 -0
  604. package/test/integration/ai-access-onboarding.test.mjs +47 -0
  605. package/test/integration/app-command.test.mjs +55 -0
  606. package/test/integration/cad-discovery.test.mjs +158 -0
  607. package/test/integration/cad-docker-executor.test.mjs +249 -0
  608. package/test/integration/cad-execution.test.mjs +184 -0
  609. package/test/integration/cad-project-app.test.mjs +31 -0
  610. package/test/integration/cad-project-d1.test.mjs +25 -0
  611. package/test/integration/cad-project-native.test.mjs +24 -0
  612. package/test/integration/cad-project-workflow.test.mjs +9 -0
  613. package/test/integration/cad-project.test.mjs +82 -0
  614. package/test/integration/cli-help.test.mjs +5 -1
  615. package/test/integration/cms-site-tenancy-contract.test.mjs +256 -0
  616. package/test/integration/codebaseindex-ingest.test.mjs +166 -0
  617. package/test/integration/core-client.integration.test.mjs +55 -0
  618. package/test/integration/error-runtime-rpc.test.mjs +71 -0
  619. package/test/integration/features-resolve.test.mjs +128 -0
  620. package/test/integration/icon-registry.test.mjs +67 -0
  621. package/test/integration/ingest-discover-models.test.mjs +30 -0
  622. package/test/integration/install-script.test.mjs +110 -0
  623. package/test/integration/inventory-core.test.mjs +53 -0
  624. package/test/integration/local-fs.test.mjs +113 -0
  625. package/test/integration/plugins-cloudflare.integration.test.mjs +28 -0
  626. package/test/integration/provider-env-cli.test.mjs +3 -2
  627. package/test/integration/runtime-migrations.test.mjs +6 -1
  628. package/test/integration/runtime-status.integration.test.mjs +211 -0
  629. package/test/integration/sam-activity-recovery.test.mjs +147 -0
  630. package/test/integration/sam-decision.test.mjs +584 -0
  631. package/test/integration/sam-kernel.test.mjs +99 -0
  632. package/test/integration/sam-planning-astar.test.mjs +279 -0
  633. package/test/integration/scaffold-cloudflare.test.mjs +46 -0
  634. package/test/integration/skill-runtime.test.mjs +240 -0
  635. package/test/integration/storage-architecture.test.mjs +154 -0
  636. package/test/integration/store-discovery.test.mjs +44 -0
  637. package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
  638. package/test/integration/terminal-exec.integration.test.mjs +86 -0
  639. package/test/integration/tool-runtime.test.mjs +124 -0
  640. package/test/integration/tool-schema.test.mjs +59 -0
  641. package/test/knowledge-service.test.mjs +4 -0
  642. package/test/local-sessions.test.mjs +11 -2
  643. package/test/local-studio-deploy.test.mjs +1 -1
  644. package/test/model-catalog.test.mjs +28 -1
  645. package/test/models.test.mjs +172 -11
  646. package/test/openai-responses.test.mjs +60 -0
  647. package/test/provider-credentials.test.mjs +15 -5
  648. package/test/responses-runner.test.mjs +321 -6
  649. package/test/shell.test.mjs +151 -6
  650. package/test/smoke.mjs +2 -2
  651. package/test/tools-search.test.mjs +33 -0
  652. package/test/unit/website-assets-bindings.test.mjs +60 -0
  653. package/test/whoami-resume.test.mjs +82 -3
  654. package/examples/gorilla-shell/README.md +0 -15
  655. package/src/lib/gorilla-template.js +0 -54
  656. package/templates/gorilla-shell/App.tsx +0 -639
  657. package/templates/gorilla-shell/README.md +0 -34
  658. package/templates/gorilla-shell/index.html +0 -15
  659. package/templates/gorilla-shell/main.jsx +0 -9
  660. package/templates/gorilla-shell/package.json +0 -19
  661. package/templates/gorilla-shell/vite.config.js +0 -21
@@ -0,0 +1,137 @@
1
+ -- Cloudflare OAuth is represented by two distinct account-scoped plugin
2
+ -- installations. Preserve the row IDs so historic health evidence remains
3
+ -- attached while normalizing the public plugin contract.
4
+
5
+ ALTER TABLE agentsam_cloudflare_oauth_state ADD COLUMN return_to TEXT;
6
+
7
+ -- Local Studio's public PKCE client is the executable AgentSam MCP plugin.
8
+ UPDATE agentsam_plugins
9
+ SET plugin_key = 'agentsam-mcp',
10
+ provider_key = 'cloudflare',
11
+ plugin_kind = 'oauth',
12
+ category = 'developer_platform',
13
+ display_name = 'AgentSam MCP',
14
+ short_name = 'AgentSam MCP',
15
+ description = 'Connect a Cloudflare account to AgentSam through the Local Studio PKCE approval flow.',
16
+ mention_aliases_json = '["@agentsam-mcp","agentsam mcp"]',
17
+ endpoint_url = 'https://api.cloudflare.com/client/v4',
18
+ transport = 'http_rest',
19
+ auth_type = 'oauth',
20
+ oauth_connect_url = '/api/connections/cloudflare/start',
21
+ capabilities_json = '["cloudflare.api.docs","cloudflare.api.search","cloudflare.api.execute"]',
22
+ tool_lanes_json = '["typed","mcp","api","codemode"]',
23
+ resource_scope_json = '{"owner":"account","oauth_connection_table":"agentsam_cloudflare_connections"}',
24
+ config_json = '{"oauth_authority":"cloudflare","oauth_client_id":"c0704bd7a7aab7216b362603e1985499","authorization_endpoint":"https://dash.cloudflare.com/oauth2/auth","token_endpoint":"https://dash.cloudflare.com/oauth2/token","revoke_endpoint":"https://dash.cloudflare.com/oauth2/revoke","userinfo_endpoint":"https://dash.cloudflare.com/oauth2/userinfo","callback_url":"https://agentsam.inneranimalmedia.com/api/connections/cloudflare/callback","token_auth_method":"none_pkce"}',
25
+ metadata_json = '{"execution_strategy":"runtime_selected","client_name":"AgentSam Local Studio","client_uri":"https://agentsam.inneranimalmedia.com"}',
26
+ health_strategy = 'oauth_probe',
27
+ updated_at = unixepoch()
28
+ WHERE plugin_key = 'cloudflare'
29
+ AND provider_key = 'cloudflare'
30
+ AND installation_key = 'local-studio-pkce'
31
+ AND auth_type = 'oauth';
32
+
33
+ -- Inner Animal Media Platform uses its own confidential Cloudflare client and
34
+ -- host-owned token resolver. It is intentionally distinct from AgentSam MCP.
35
+ UPDATE agentsam_plugins
36
+ SET plugin_key = 'inneranimalmedia-cf-oauth',
37
+ installation_key = 'default',
38
+ provider_key = 'cloudflare',
39
+ plugin_kind = 'oauth',
40
+ category = 'developer_platform',
41
+ display_name = 'Inner Animal Media Cloudflare OAuth',
42
+ short_name = 'IAM Cloudflare',
43
+ description = 'Inner Animal Media Platform confidential Cloudflare OAuth connection.',
44
+ mention_aliases_json = '["@inneranimalmedia-cf-oauth"]',
45
+ endpoint_url = 'https://dash.cloudflare.com/oauth2/auth',
46
+ transport = 'http_rest',
47
+ auth_type = 'oauth_via_iam',
48
+ oauth_connect_url = 'https://inneranimalmedia.com/api/oauth/cloudflare/start',
49
+ resource_scope_json = '{"owner":"account","token_authority":"inneranimalmedia_platform"}',
50
+ config_json = '{"oauth_client_id":"0f2f3c826d800118b70863d8d59e12cc","client_name":"Inner Animal Media Platform","client_uri":"https://inneranimalmedia.com","callback_url":"https://inneranimalmedia.com/api/oauth/cloudflare/callback","authorization_endpoint":"https://dash.cloudflare.com/oauth2/auth","token_endpoint":"https://dash.cloudflare.com/oauth2/token","token_auth_method":"client_secret_basic","secret_authority":"inneranimalmedia_platform_vault"}',
51
+ metadata_json = '{"execution_strategy":"host_owned","client_visibility":"public"}',
52
+ health_strategy = 'oauth_probe',
53
+ updated_at = unixepoch()
54
+ WHERE plugin_key = 'cloudflare'
55
+ AND provider_key = 'cloudflare'
56
+ AND installation_key = 'iam-oauth'
57
+ AND auth_type = 'oauth_via_iam';
58
+
59
+ INSERT INTO agentsam_capabilities (capability_key, domain, verb, description, is_mutating, is_active, created_at, updated_at)
60
+ VALUES
61
+ ('cloudflare.api.docs', 'cloudflare', 'read', 'Search Cloudflare developer documentation.', 0, 1, unixepoch(), unixepoch()),
62
+ ('cloudflare.api.search', 'cloudflare', 'search', 'Search Cloudflare OpenAPI operations.', 0, 1, unixepoch(), unixepoch()),
63
+ ('cloudflare.api.execute', 'cloudflare', 'execute', 'Execute an approved Cloudflare API program.', 1, 1, unixepoch(), unixepoch())
64
+ ON CONFLICT(capability_key) DO UPDATE SET
65
+ domain=excluded.domain, verb=excluded.verb, description=excluded.description,
66
+ is_mutating=excluded.is_mutating, is_active=1, updated_at=unixepoch();
67
+
68
+ INSERT INTO agentsam_tools (
69
+ id, tool_name, display_name, tool_category, handler_type, description,
70
+ input_schema, handler_config, intent_tags, risk_level, requires_approval,
71
+ requires_confirmation, is_active, tool_key, capability_key, handler_key,
72
+ domain, oauth_visible, dispatch_target, connector_visible, connector_priority,
73
+ connector_access_class, account_id, plugin_key, plugin_id, created_at, updated_at
74
+ )
75
+ SELECT
76
+ 'ast_' || lower(hex(randomblob(8))),
77
+ 'agentsam_mcp_docs__' || p.id,
78
+ 'Cloudflare docs', 'integrations', 'cf', 'Search Cloudflare developer documentation.',
79
+ '{"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":false}',
80
+ '{"server_url":"https://mcp.cloudflare.com/mcp","remote_tool":"docs"}',
81
+ '["cloudflare","docs","search"]', 'low', 0, 0, 1,
82
+ 'agentsam-mcp.docs', 'cloudflare.api.docs', 'agentsam-mcp.docs',
83
+ 'cloudflare', 1, 'mcp', 1, 50, 'read', p.account_id, p.plugin_key, p.id, unixepoch(), unixepoch()
84
+ FROM agentsam_plugins p
85
+ WHERE p.plugin_key = 'agentsam-mcp' AND p.installation_key = 'local-studio-pkce'
86
+ AND NOT EXISTS (SELECT 1 FROM agentsam_tools t WHERE t.plugin_id = p.id AND t.tool_key = 'agentsam-mcp.docs');
87
+
88
+ INSERT INTO agentsam_tools (
89
+ id, tool_name, display_name, tool_category, handler_type, description,
90
+ input_schema, handler_config, intent_tags, risk_level, requires_approval,
91
+ requires_confirmation, is_active, tool_key, capability_key, handler_key,
92
+ domain, oauth_visible, dispatch_target, connector_visible, connector_priority,
93
+ connector_access_class, account_id, plugin_key, plugin_id, created_at, updated_at
94
+ )
95
+ SELECT
96
+ 'ast_' || lower(hex(randomblob(8))),
97
+ 'agentsam_mcp_search__' || p.id,
98
+ 'Search Cloudflare API', 'integrations', 'cf', 'Search Cloudflare OpenAPI operations before executing code.',
99
+ '{"type":"object","properties":{"query":{"type":"string"}},"required":["query"],"additionalProperties":false}',
100
+ '{"server_url":"https://mcp.cloudflare.com/mcp","remote_tool":"search","network":"none"}',
101
+ '["cloudflare","openapi","search"]', 'low', 0, 0, 1,
102
+ 'agentsam-mcp.search', 'cloudflare.api.search', 'agentsam-mcp.search',
103
+ 'cloudflare', 1, 'plugin', 1, 50, 'read', p.account_id, p.plugin_key, p.id, unixepoch(), unixepoch()
104
+ FROM agentsam_plugins p
105
+ WHERE p.plugin_key = 'agentsam-mcp' AND p.installation_key = 'local-studio-pkce'
106
+ AND NOT EXISTS (SELECT 1 FROM agentsam_tools t WHERE t.plugin_id = p.id AND t.tool_key = 'agentsam-mcp.search');
107
+
108
+ INSERT INTO agentsam_tools (
109
+ id, tool_name, display_name, tool_category, handler_type, description,
110
+ input_schema, handler_config, intent_tags, risk_level, requires_approval,
111
+ requires_confirmation, is_active, tool_key, capability_key, handler_key,
112
+ domain, oauth_visible, dispatch_target, connector_visible, connector_priority,
113
+ connector_access_class, account_id, plugin_key, plugin_id, created_at, updated_at
114
+ )
115
+ SELECT
116
+ 'ast_' || lower(hex(randomblob(8))),
117
+ 'agentsam_mcp_execute__' || p.id,
118
+ 'Execute Cloudflare API', 'integrations', 'cf', 'Run an approved AgentSam Cloudflare API program.',
119
+ '{"type":"object","properties":{"code":{"type":"string"},"account_id":{"type":"string"}},"required":["code"],"additionalProperties":false}',
120
+ '{"server_url":"https://mcp.cloudflare.com/mcp","remote_tool":"execute","network":"cloudflare_api_only"}',
121
+ '["cloudflare","api","execute"]', 'high', 1, 1, 1,
122
+ 'agentsam-mcp.execute', 'cloudflare.api.execute', 'agentsam-mcp.execute',
123
+ 'cloudflare', 1, 'codemode', 1, 50, 'write', p.account_id, p.plugin_key, p.id, unixepoch(), unixepoch()
124
+ FROM agentsam_plugins p
125
+ WHERE p.plugin_key = 'agentsam-mcp' AND p.installation_key = 'local-studio-pkce'
126
+ AND NOT EXISTS (SELECT 1 FROM agentsam_tools t WHERE t.plugin_id = p.id AND t.tool_key = 'agentsam-mcp.execute');
127
+
128
+ INSERT INTO agentsam_tool_capabilities (tool_id, capability_key, requirement_type, is_primary, operations_json, created_at)
129
+ SELECT t.id, t.capability_key, 'required', 1, json_array(t.handler_key), unixepoch()
130
+ FROM agentsam_tools t
131
+ JOIN agentsam_plugins p ON p.id = t.plugin_id
132
+ WHERE p.plugin_key = 'agentsam-mcp' AND p.installation_key = 'local-studio-pkce'
133
+ AND t.tool_key IN ('agentsam-mcp.docs', 'agentsam-mcp.search', 'agentsam-mcp.execute')
134
+ AND NOT EXISTS (
135
+ SELECT 1 FROM agentsam_tool_capabilities c
136
+ WHERE c.tool_id = t.id AND c.capability_key = t.capability_key
137
+ );
@@ -0,0 +1,140 @@
1
+ -- 0010_portable_tickets_memory.sql
2
+ -- Portable GOAP / ticket + memory spine for new AgentSam projects (local SQLite or D1).
3
+ -- Account-owned tickets — NOT Inner Animal Media's shared platform DB.
4
+ -- Every write path MUST populate account_id and repository_id (NULL = broken implementation).
5
+
6
+ CREATE TABLE IF NOT EXISTS agentsam_tickets (
7
+ id TEXT PRIMARY KEY,
8
+ title TEXT NOT NULL,
9
+ status TEXT NOT NULL
10
+ CHECK (status IN ('backlog', 'active', 'blocked', 'in_review', 'shipped', 'abandoned')),
11
+ status_reason TEXT,
12
+ project TEXT,
13
+ subsystem TEXT,
14
+ tags TEXT,
15
+ priority TEXT,
16
+ doc_path TEXT,
17
+ blocks TEXT,
18
+ blocked_by TEXT,
19
+ supersedes TEXT,
20
+ created_at INTEGER NOT NULL,
21
+ updated_at INTEGER NOT NULL,
22
+ closed_at INTEGER,
23
+ dedup_key TEXT,
24
+ consecutive_pass_count INTEGER,
25
+ last_gate_run_id INTEGER,
26
+ last_gate_ok_at INTEGER,
27
+ required_pass_count INTEGER,
28
+ description TEXT,
29
+ client_id TEXT,
30
+ due_at INTEGER,
31
+ surface TEXT NOT NULL DEFAULT 'platform',
32
+ start_at INTEGER,
33
+ estimated_minutes INTEGER,
34
+ percent_complete INTEGER NOT NULL DEFAULT 0,
35
+ owner_kind TEXT NOT NULL DEFAULT 'unassigned',
36
+ owner_ref TEXT,
37
+ parent_ticket_id TEXT,
38
+ agent_run_id TEXT,
39
+ worktree TEXT,
40
+ linked_commit TEXT,
41
+ source TEXT NOT NULL DEFAULT 'manual',
42
+ account_id TEXT NOT NULL,
43
+ repository_id TEXT NOT NULL
44
+ );
45
+
46
+ CREATE INDEX IF NOT EXISTS idx_agentsam_tickets_account_repository
47
+ ON agentsam_tickets(account_id, repository_id, updated_at DESC);
48
+
49
+ CREATE INDEX IF NOT EXISTS idx_agentsam_tickets_status
50
+ ON agentsam_tickets(account_id, status, updated_at DESC);
51
+
52
+ CREATE TABLE IF NOT EXISTS agentsam_ticket_events (
53
+ id TEXT PRIMARY KEY,
54
+ ticket_id TEXT NOT NULL REFERENCES agentsam_tickets(id) ON DELETE CASCADE,
55
+ event_type TEXT NOT NULL,
56
+ from_status TEXT,
57
+ to_status TEXT,
58
+ detail TEXT,
59
+ commit_sha TEXT,
60
+ created_at INTEGER NOT NULL,
61
+ actor_type TEXT,
62
+ actor_id TEXT,
63
+ media_asset_id TEXT,
64
+ account_id TEXT NOT NULL,
65
+ repository_id TEXT NOT NULL
66
+ );
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_agentsam_ticket_events_ticket
69
+ ON agentsam_ticket_events(ticket_id, created_at);
70
+
71
+ CREATE TABLE IF NOT EXISTS agentsam_memory (
72
+ id TEXT PRIMARY KEY NOT NULL,
73
+ account_id TEXT NOT NULL,
74
+ repository_id TEXT NOT NULL,
75
+ project_id TEXT,
76
+ memory_key TEXT NOT NULL,
77
+ memory_type TEXT NOT NULL
78
+ CHECK (memory_type IN (
79
+ 'fact', 'preference', 'decision', 'policy', 'state', 'procedure'
80
+ )),
81
+ title TEXT,
82
+ content TEXT NOT NULL,
83
+ summary TEXT,
84
+ importance INTEGER NOT NULL DEFAULT 5
85
+ CHECK (importance BETWEEN 1 AND 10),
86
+ tags TEXT NOT NULL DEFAULT '[]',
87
+ status TEXT NOT NULL DEFAULT 'active'
88
+ CHECK (status IN ('active', 'archived', 'deleted')),
89
+ is_pinned INTEGER NOT NULL DEFAULT 0,
90
+ content_hash TEXT NOT NULL,
91
+ source TEXT,
92
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
93
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
94
+ revision INTEGER NOT NULL DEFAULT 1,
95
+ semantic_hash TEXT,
96
+ sensitivity TEXT NOT NULL DEFAULT 'normal'
97
+ CHECK (sensitivity IN ('normal','internal','confidential','secret')),
98
+ source_client TEXT,
99
+ source_ref TEXT,
100
+ supersedes_id TEXT,
101
+ expires_at INTEGER,
102
+ scope_type TEXT,
103
+ scope_id TEXT,
104
+ idempotency_key TEXT,
105
+ metadata_json TEXT NOT NULL DEFAULT '{}'
106
+ CHECK (json_valid(metadata_json)),
107
+ UNIQUE(account_id, memory_key)
108
+ );
109
+
110
+ CREATE INDEX IF NOT EXISTS idx_agentsam_memory_account_repo
111
+ ON agentsam_memory(account_id, repository_id, updated_at DESC);
112
+
113
+ CREATE TABLE IF NOT EXISTS agentsam_memory_outbox (
114
+ id TEXT PRIMARY KEY NOT NULL,
115
+ memory_id TEXT NOT NULL,
116
+ account_id TEXT NOT NULL,
117
+ repository_id TEXT NOT NULL,
118
+ revision INTEGER NOT NULL,
119
+ content_hash TEXT NOT NULL,
120
+ semantic_hash TEXT NOT NULL,
121
+ operation TEXT NOT NULL DEFAULT 'upsert'
122
+ CHECK (operation IN ('upsert','deactivate','delete')),
123
+ projection_target TEXT NOT NULL DEFAULT 'node_api_pgvector'
124
+ CHECK (projection_target = 'node_api_pgvector'),
125
+ payload_json TEXT NOT NULL DEFAULT '{}'
126
+ CHECK (json_valid(payload_json)),
127
+ status TEXT NOT NULL DEFAULT 'pending'
128
+ CHECK (status IN ('pending','processing','completed','failed')),
129
+ attempts INTEGER NOT NULL DEFAULT 0,
130
+ next_attempt_at INTEGER,
131
+ locked_at INTEGER,
132
+ last_error TEXT,
133
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
134
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
135
+ UNIQUE(memory_id, revision, operation)
136
+ );
137
+
138
+ CREATE INDEX IF NOT EXISTS idx_agentsam_memory_outbox_pending
139
+ ON agentsam_memory_outbox(status, next_attempt_at)
140
+ WHERE status IN ('pending','failed');
@@ -0,0 +1,185 @@
1
+ -- 0011_agentsam_skill_v2.sql
2
+ -- Skill redesign: identity/config · metrics · retrieval (three tables).
3
+ -- Fresh installs: apply this file directly.
4
+ -- Production hosts with legacy agentsam_skill: use 0011b_agentsam_skill_v2_cutover.sql
5
+ --
6
+ -- Ownership: account_id only (no tenant_id / user_id / person_uuid / workspace_id / scope).
7
+ -- No FK to agentsam_account — that table is not present on IAM D1; account_id aligns with
8
+ -- accounts.id (au_*) when the row is account-owned.
9
+ --
10
+ -- Published npm lane: partial unique on slash_trigger WHERE is_published = 1
11
+ -- (two accounts cannot both publish the same /trigger).
12
+
13
+ CREATE TABLE IF NOT EXISTS agentsam_skill (
14
+ id TEXT PRIMARY KEY,
15
+ account_id TEXT NOT NULL,
16
+
17
+ name TEXT NOT NULL,
18
+ slash_trigger TEXT NOT NULL
19
+ CHECK (slash_trigger GLOB '/[a-z0-9][a-z0-9-]*'),
20
+
21
+ npm_package_name TEXT,
22
+ npm_version TEXT,
23
+ is_published INTEGER NOT NULL DEFAULT 0 CHECK (is_published IN (0,1)),
24
+
25
+ description TEXT NOT NULL DEFAULT '',
26
+ content_markdown TEXT NOT NULL DEFAULT '',
27
+ file_path TEXT NOT NULL DEFAULT '',
28
+ content_checksum TEXT NOT NULL DEFAULT '',
29
+
30
+ globs TEXT NOT NULL DEFAULT '[]',
31
+ always_apply INTEGER NOT NULL DEFAULT 0 CHECK (always_apply IN (0,1)),
32
+ task_types_json TEXT NOT NULL DEFAULT '[]',
33
+ route_keys_json TEXT NOT NULL DEFAULT '[]',
34
+
35
+ access_mode TEXT NOT NULL DEFAULT 'read_write'
36
+ CHECK (access_mode IN ('read_only','read_write')),
37
+
38
+ icon TEXT NOT NULL DEFAULT '',
39
+ tags_json TEXT NOT NULL DEFAULT '[]',
40
+ metadata_json TEXT NOT NULL DEFAULT '{}',
41
+
42
+ invocation_count INTEGER NOT NULL DEFAULT 0,
43
+ last_invoked_at TEXT,
44
+
45
+ version INTEGER NOT NULL DEFAULT 1,
46
+ is_active INTEGER NOT NULL DEFAULT 1 CHECK (is_active IN (0,1)),
47
+ sort_order INTEGER NOT NULL DEFAULT 0,
48
+
49
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
50
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
51
+
52
+ UNIQUE (account_id, slash_trigger),
53
+ UNIQUE (npm_package_name, npm_version)
54
+ );
55
+
56
+ CREATE INDEX IF NOT EXISTS idx_skill_account ON agentsam_skill(account_id);
57
+ CREATE INDEX IF NOT EXISTS idx_skill_active ON agentsam_skill(is_active) WHERE is_active = 1;
58
+ CREATE INDEX IF NOT EXISTS idx_skill_published ON agentsam_skill(is_published) WHERE is_published = 1;
59
+
60
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_published_slash
61
+ ON agentsam_skill(slash_trigger) WHERE is_published = 1;
62
+
63
+ CREATE TABLE IF NOT EXISTS agentsam_skill_metrics (
64
+ skill_id TEXT PRIMARY KEY REFERENCES agentsam_skill(id) ON DELETE CASCADE,
65
+ byte_size INTEGER NOT NULL DEFAULT 0,
66
+ char_count INTEGER NOT NULL DEFAULT 0,
67
+ line_count INTEGER NOT NULL DEFAULT 0,
68
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
69
+ estimation_method TEXT NOT NULL DEFAULT 'chars_div_4'
70
+ CHECK (estimation_method IN ('chars_div_4','tiktoken_cl100k','tiktoken_o200k','provider_reported')),
71
+ computed_at TEXT NOT NULL DEFAULT (datetime('now'))
72
+ );
73
+
74
+ CREATE TABLE IF NOT EXISTS agentsam_skill_retrieval (
75
+ id TEXT PRIMARY KEY,
76
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
77
+
78
+ provider TEXT NOT NULL CHECK (provider IN (
79
+ 'local_fs',
80
+ 'cloudflare_d1',
81
+ 'cloudflare_hyperdrive',
82
+ 'cloudflare_r2',
83
+ 'cloudflare_vectorize',
84
+ 'supabase_postgres',
85
+ 'supabase_vectorize'
86
+ )),
87
+ strategy TEXT NOT NULL CHECK (strategy IN (
88
+ 'relational',
89
+ 'object_store',
90
+ 'vector_index',
91
+ 'none'
92
+ )),
93
+
94
+ is_primary INTEGER NOT NULL DEFAULT 0 CHECK (is_primary IN (0,1)),
95
+
96
+ index_name TEXT,
97
+ namespace TEXT,
98
+ connection_ref TEXT,
99
+ embedding_model TEXT,
100
+ dimensions INTEGER,
101
+
102
+ config_json TEXT NOT NULL DEFAULT '{}',
103
+ last_synced_at TEXT,
104
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
105
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
106
+
107
+ UNIQUE (skill_id, provider, strategy)
108
+ );
109
+
110
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_skill_retrieval_primary
111
+ ON agentsam_skill_retrieval(skill_id) WHERE is_primary = 1;
112
+
113
+ CREATE INDEX IF NOT EXISTS idx_skill_retrieval_skill ON agentsam_skill_retrieval(skill_id);
114
+
115
+ CREATE TABLE IF NOT EXISTS agentsam_skill_revision (
116
+ id TEXT PRIMARY KEY DEFAULT ('skillrev_' || lower(hex(randomblob(8)))),
117
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
118
+ content_markdown TEXT NOT NULL,
119
+ version INTEGER NOT NULL,
120
+ changed_by TEXT NOT NULL DEFAULT 'system',
121
+ change_note TEXT,
122
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
123
+ );
124
+
125
+ CREATE INDEX IF NOT EXISTS idx_skill_revision_skill_id ON agentsam_skill_revision(skill_id);
126
+ CREATE INDEX IF NOT EXISTS idx_skill_revision_version ON agentsam_skill_revision(skill_id, version);
127
+
128
+ CREATE TABLE IF NOT EXISTS agentsam_skill_invocation (
129
+ id TEXT PRIMARY KEY DEFAULT ('skillinv_' || lower(hex(randomblob(8)))),
130
+ skill_id TEXT NOT NULL REFERENCES agentsam_skill(id) ON DELETE CASCADE,
131
+ account_id TEXT NOT NULL,
132
+ repository_id TEXT,
133
+ conversation_id TEXT,
134
+ trigger_method TEXT NOT NULL DEFAULT 'slash'
135
+ CHECK (trigger_method IN ('slash','at','auto','api')),
136
+ input_summary TEXT,
137
+ success INTEGER NOT NULL DEFAULT 1,
138
+ error_message TEXT,
139
+ duration_ms INTEGER,
140
+ model_used TEXT,
141
+ tokens_in INTEGER DEFAULT 0,
142
+ tokens_out INTEGER DEFAULT 0,
143
+ cost_usd REAL DEFAULT 0.0,
144
+ invoked_at TEXT NOT NULL DEFAULT (datetime('now'))
145
+ );
146
+
147
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_skill_id ON agentsam_skill_invocation(skill_id);
148
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_account ON agentsam_skill_invocation(account_id);
149
+ CREATE INDEX IF NOT EXISTS idx_skill_invoc_invoked ON agentsam_skill_invocation(invoked_at);
150
+
151
+ -- updated_at bump (D1/SQLite)
152
+ -- Avoid recursion: only bump when the statement did not already set updated_at.
153
+ CREATE TRIGGER IF NOT EXISTS trg_skill_updated_at
154
+ AFTER UPDATE ON agentsam_skill
155
+ WHEN NEW.updated_at IS OLD.updated_at
156
+ BEGIN
157
+ UPDATE agentsam_skill SET updated_at = datetime('now') WHERE id = NEW.id;
158
+ END;
159
+
160
+ -- Auto metrics on insert/content change (chars/4 heuristic)
161
+ CREATE TRIGGER IF NOT EXISTS trg_skill_metrics_insert
162
+ AFTER INSERT ON agentsam_skill
163
+ BEGIN
164
+ INSERT INTO agentsam_skill_metrics (skill_id, byte_size, char_count, line_count, estimated_tokens)
165
+ VALUES (
166
+ NEW.id,
167
+ LENGTH(CAST(NEW.content_markdown AS BLOB)),
168
+ LENGTH(NEW.content_markdown),
169
+ LENGTH(NEW.content_markdown) - LENGTH(REPLACE(NEW.content_markdown, char(10), '')) + 1,
170
+ CAST(LENGTH(NEW.content_markdown) / 4.0 AS INTEGER)
171
+ );
172
+ END;
173
+
174
+ CREATE TRIGGER IF NOT EXISTS trg_skill_metrics_update
175
+ AFTER UPDATE OF content_markdown ON agentsam_skill
176
+ BEGIN
177
+ UPDATE agentsam_skill_metrics SET
178
+ byte_size = LENGTH(CAST(NEW.content_markdown AS BLOB)),
179
+ char_count = LENGTH(NEW.content_markdown),
180
+ line_count = LENGTH(NEW.content_markdown) - LENGTH(REPLACE(NEW.content_markdown, char(10), '')) + 1,
181
+ estimated_tokens = CAST(LENGTH(NEW.content_markdown) / 4.0 AS INTEGER),
182
+ estimation_method = 'chars_div_4',
183
+ computed_at = datetime('now')
184
+ WHERE skill_id = NEW.id;
185
+ END;
@@ -0,0 +1,22 @@
1
+ -- 0011b_agentsam_skill_v2_cutover.sql
2
+ -- ORCHESTRATION NOTES (do not run this whole file via wrangler --file on large DBs —
3
+ -- D1 import may D1_RESET_DO). Apply in steps:
4
+ --
5
+ -- 1) RENAME (one statement each):
6
+ -- ALTER TABLE agentsam_skill RENAME TO agentsam_skill_legacy;
7
+ -- ALTER TABLE agentsam_skill_revision RENAME TO agentsam_skill_revision_legacy;
8
+ -- ALTER TABLE agentsam_skill_invocation RENAME TO agentsam_skill_invocation_legacy;
9
+ -- 2) DDL: --file migrations/d1/0011_agentsam_skill_v2.sql
10
+ -- 3) Backfill skills: --file migrations/d1/0011c_agentsam_skill_v2_backfill.sql
11
+ -- 4) Retrieval+revisions: --file migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql
12
+ -- 5) Verify counts: skill == legacy == metrics == retrieval; revisions match legacy.
13
+ -- 6) Keep *_legacy until verified. Drop only after a bake period.
14
+ --
15
+ -- Applied remotely on inneranimalmedia-business 2026-09-25 (88 skills).
16
+ -- Notes:
17
+ -- - No FK to agentsam_account (table absent); account_id aligns with accounts.au_* when present.
18
+ -- - Partial unique idx_skill_published_slash included (published slash triggers globally unique).
19
+ -- - Empty slash_trigger → /skill-{id-slug}; dual vectorize → /vectorize-lanes-dual.
20
+ -- - Dropped columns preserved under metadata_json.legacy.
21
+
22
+ SELECT 'see header comments — run cutover in steps' AS note;
@@ -0,0 +1,76 @@
1
+ -- Backfill agentsam_skill v2 from agentsam_skill_legacy (run after 0011 DDL + rename).
2
+ -- Empty slash_trigger → derive from skill id (avoids /unnamed collisions).
3
+
4
+ INSERT INTO agentsam_skill (
5
+ id, account_id, name, slash_trigger,
6
+ description, content_markdown, file_path, content_checksum,
7
+ globs, always_apply, task_types_json, route_keys_json,
8
+ access_mode, icon, tags_json, metadata_json,
9
+ invocation_count, last_invoked_at, version, is_active, sort_order,
10
+ created_at, updated_at
11
+ )
12
+ SELECT
13
+ l.id,
14
+ CASE
15
+ WHEN l.user_id GLOB 'au_*' THEN l.user_id
16
+ WHEN l.user_id = 'sam_primeaux' THEN 'au_8a5b76b737a9f14c'
17
+ WHEN l.user_id IN ('platform', 'system') THEN l.user_id
18
+ WHEN l.person_uuid IS NOT NULL AND TRIM(l.person_uuid) != '' THEN 'person:' || l.person_uuid
19
+ WHEN l.tenant_id IS NOT NULL AND TRIM(l.tenant_id) != '' THEN 'tenant:' || l.tenant_id
20
+ ELSE 'account_orphan'
21
+ END,
22
+ COALESCE(NULLIF(TRIM(l.name), ''), l.id),
23
+ CASE
24
+ WHEN l.id = 'skill_agentsam_dual_vectorize_lanes' THEN '/vectorize-lanes-dual'
25
+ WHEN l.slash_trigger IS NULL OR TRIM(l.slash_trigger) = ''
26
+ THEN '/skill-' || lower(substr(replace(replace(l.id, 'skill_', ''), '_', '-'), 1, 40))
27
+ WHEN lower(CASE
28
+ WHEN l.slash_trigger GLOB '/*' THEN l.slash_trigger
29
+ ELSE '/' || l.slash_trigger
30
+ END) GLOB '/[a-z0-9][a-z0-9-]*'
31
+ THEN lower(CASE
32
+ WHEN l.slash_trigger GLOB '/*' THEN l.slash_trigger
33
+ ELSE '/' || l.slash_trigger
34
+ END)
35
+ ELSE '/skill-' || lower(substr(replace(replace(l.id, 'skill_', ''), '_', '-'), 1, 40))
36
+ END,
37
+ COALESCE(l.description, ''),
38
+ COALESCE(l.content_markdown, ''),
39
+ COALESCE(l.file_path, ''),
40
+ '',
41
+ CASE
42
+ WHEN l.globs IS NULL OR TRIM(l.globs) = '' THEN '[]'
43
+ WHEN l.globs GLOB '[*' THEN l.globs
44
+ ELSE json_array(l.globs)
45
+ END,
46
+ COALESCE(l.always_apply, 0),
47
+ COALESCE(NULLIF(TRIM(l.task_types_json), ''), '[]'),
48
+ COALESCE(NULLIF(TRIM(l.route_keys_json), ''), '[]'),
49
+ CASE
50
+ WHEN l.access_mode IN ('read_only', 'read_write') THEN l.access_mode
51
+ ELSE 'read_write'
52
+ END,
53
+ COALESCE(l.icon, ''),
54
+ COALESCE(NULLIF(TRIM(l.tags_json), ''), '[]'),
55
+ json_object(
56
+ 'legacy', json_object(
57
+ 'tenant_id', l.tenant_id,
58
+ 'user_id', l.user_id,
59
+ 'person_uuid', l.person_uuid,
60
+ 'workspace_id', l.workspace_id,
61
+ 'scope', l.scope,
62
+ 'default_model_key', l.default_model_key,
63
+ 'model_constraints_json', l.model_constraints_json,
64
+ 'token_estimate', l.token_estimate,
65
+ 'retrieval_strategy', l.retrieval_strategy,
66
+ 'slash_trigger_raw', l.slash_trigger
67
+ )
68
+ ),
69
+ COALESCE(l.invocation_count, 0),
70
+ l.last_invoked_at,
71
+ COALESCE(l.version, 1),
72
+ COALESCE(l.is_active, 1),
73
+ COALESCE(l.sort_order, 0),
74
+ COALESCE(l.created_at, datetime('now')),
75
+ COALESCE(l.updated_at, datetime('now'))
76
+ FROM agentsam_skill_legacy l;
@@ -0,0 +1,50 @@
1
+ -- Retrieval + revision backfill after skill rows exist.
2
+
3
+ INSERT INTO agentsam_skill_retrieval (
4
+ id, skill_id, provider, strategy, is_primary,
5
+ index_name, connection_ref, config_json
6
+ )
7
+ SELECT
8
+ 'skillret_' || lower(hex(randomblob(8))),
9
+ s.id,
10
+ CASE
11
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
12
+ THEN 'cloudflare_r2'
13
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('vectorize', 'vector')
14
+ THEN 'cloudflare_vectorize'
15
+ ELSE 'cloudflare_d1'
16
+ END,
17
+ CASE
18
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
19
+ THEN 'object_store'
20
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('vectorize', 'vector')
21
+ THEN 'vector_index'
22
+ ELSE 'relational'
23
+ END,
24
+ 1,
25
+ NULLIF(TRIM(s.file_path), ''),
26
+ CASE
27
+ WHEN lower(COALESCE(json_extract(s.metadata_json, '$.legacy.retrieval_strategy'), '')) IN ('r2', 'object_store')
28
+ THEN 'WEBSITE_ASSETS'
29
+ ELSE 'DB'
30
+ END,
31
+ '{}'
32
+ FROM agentsam_skill s
33
+ WHERE NOT EXISTS (
34
+ SELECT 1 FROM agentsam_skill_retrieval r WHERE r.skill_id = s.id
35
+ );
36
+
37
+ INSERT INTO agentsam_skill_revision (
38
+ id, skill_id, content_markdown, version, changed_by, change_note, created_at
39
+ )
40
+ SELECT
41
+ r.id,
42
+ r.skill_id,
43
+ r.content_markdown,
44
+ r.version,
45
+ COALESCE(NULLIF(TRIM(r.changed_by), ''), 'system'),
46
+ r.change_note,
47
+ COALESCE(r.created_at, datetime('now'))
48
+ FROM agentsam_skill_revision_legacy r
49
+ WHERE EXISTS (SELECT 1 FROM agentsam_skill s WHERE s.id = r.skill_id)
50
+ AND NOT EXISTS (SELECT 1 FROM agentsam_skill_revision x WHERE x.id = r.id);