@inneranimalmedia/agentsam-sdk 2.6.5 → 2.6.8

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 (400) hide show
  1. package/AGENTSAM.md +29 -0
  2. package/README.md +37 -0
  3. package/apps/README.md +5 -0
  4. package/apps/cad-creator/README.md +4 -4
  5. package/apps/cad-creator/shared/cad/package.json +1 -1
  6. package/apps/client-cms-editor/AGENTS.md +12 -7
  7. package/apps/client-cms-editor/README.md +76 -48
  8. package/apps/client-cms-editor/agentsam.app.json +26 -9
  9. package/apps/client-cms-editor/backend/package.json +20 -3
  10. package/apps/client-cms-editor/backend/src/api/client.ts +134 -101
  11. package/apps/client-cms-editor/backend/src/index.ts +1 -1
  12. package/apps/client-cms-editor/backend/src/model.ts +11 -115
  13. package/apps/client-cms-editor/backend/src/preview/bridge.ts +1 -1
  14. package/apps/client-cms-editor/backend/tsconfig.json +6 -1
  15. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  16. package/apps/client-cms-editor/bin/agentsam-cms.mjs +2 -228
  17. package/apps/client-cms-editor/frontend/package.json +16 -7
  18. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +9 -41
  19. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +19 -174
  20. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  21. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  22. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  23. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  24. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  25. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  26. package/apps/client-cms-editor/frontend/src/{CmsEditor.tsx → editor/legacy/CmsEditorPrototype.tsx} +52 -23
  27. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  28. package/apps/client-cms-editor/frontend/src/index.ts +19 -5
  29. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  30. package/apps/client-cms-editor/frontend/src/main.tsx +82 -8
  31. package/apps/client-cms-editor/frontend/src/mount.tsx +92 -30
  32. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +1 -1
  33. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +8 -8
  34. package/apps/client-cms-editor/frontend/src/styles/studio.css +55 -3
  35. package/apps/client-cms-editor/frontend/tsconfig.json +12 -1
  36. package/apps/client-cms-editor/frontend/vite.config.ts +12 -0
  37. package/apps/client-cms-editor/package-lock.json +973 -134
  38. package/apps/client-cms-editor/package.json +118 -6
  39. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  40. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  41. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  42. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  43. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  44. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  45. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  46. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  47. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  48. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  49. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  50. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  51. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  52. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  53. package/apps/client-cms-editor/shared/cms/package.json +17 -7
  54. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  55. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +7 -5
  56. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +32 -0
  57. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  58. package/apps/client-cms-editor/shared/cms/src/index.ts +4 -0
  59. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  60. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  61. package/contracts/source-types.v1.json +353 -0
  62. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  63. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  64. package/docs/REPO_FILE_MAP.txt +132 -0
  65. package/docs/THEME_REFINERY.md +2 -2
  66. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +40 -20
  67. package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
  68. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  69. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  70. package/migrations/d1/0018_goap_control_plane_remaster.sql +40 -0
  71. package/migrations/d1/0019_agentsam_agent_run_plan_todo.sql +14 -0
  72. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +20 -9
  73. package/migrations/runtime/0002_goap_blackboard_v1.sql +15 -0
  74. package/migrations/runtime/0004_agent_run_plan_linkage.sql +8 -0
  75. package/native/agentsam-machine/Cargo.lock +426 -0
  76. package/native/agentsam-machine/Cargo.toml +9 -0
  77. package/native/agentsam-machine/cli/Cargo.toml +21 -0
  78. package/native/agentsam-machine/cli/README.md +21 -0
  79. package/native/agentsam-machine/cli/src/main.rs +77 -0
  80. package/native/agentsam-machine/core/Cargo.toml +22 -0
  81. package/native/agentsam-machine/core/README.md +14 -0
  82. package/native/agentsam-machine/core/build.rs +33 -0
  83. package/native/agentsam-machine/core/contracts/source-types.v1.json +353 -0
  84. package/native/agentsam-machine/core/src/assets.rs +790 -0
  85. package/native/agentsam-machine/core/src/bound.rs +298 -0
  86. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  87. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  88. package/native/agentsam-machine/core/src/lib.rs +1092 -0
  89. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  90. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  91. package/package.json +64 -24
  92. package/packages/agentsam-brand/README.md +1 -1
  93. package/packages/agentsam-brand/package.json +4 -4
  94. package/packages/agentsam-brand/src/index.js +1 -1
  95. package/packages/agentsam-contracts/package.json +13 -3
  96. package/packages/agentsam-contracts/src/tools.ts +22 -0
  97. package/packages/agentsam-errors/package.json +13 -3
  98. package/packages/agentsam-errors/src/index.js +1 -0
  99. package/packages/agentsam-errors/src/tool.js +56 -0
  100. package/packages/agentsam-errors/test/tool.test.mjs +58 -0
  101. package/packages/agentsam-goap/README.md +52 -0
  102. package/packages/agentsam-goap/package.json +37 -0
  103. package/packages/agentsam-goap/src/adapters/d1-sqlite.js +570 -0
  104. package/packages/agentsam-goap/src/adapters/memory.js +199 -0
  105. package/packages/agentsam-goap/src/contracts.js +226 -0
  106. package/packages/agentsam-goap/src/control-plane.js +112 -0
  107. package/packages/agentsam-goap/src/errors.js +157 -0
  108. package/packages/agentsam-goap/src/index.js +5 -0
  109. package/packages/agentsam-goap/src/world.js +202 -0
  110. package/packages/agentsam-goap/test/goap-control-plane.test.mjs +245 -0
  111. package/packages/agentsam-goap/test/world.test.mjs +79 -0
  112. package/packages/agentsam-knowledge/package.json +18 -4
  113. package/packages/agentsam-knowledge/src/autorag/index.js +10 -3
  114. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  115. package/packages/agentsam-knowledge/test/autorag.test.mjs +60 -1
  116. package/packages/agentsam-nav/dist/browser.global.js +21 -18
  117. package/packages/agentsam-nav/dist/browser.js +6807 -130
  118. package/packages/agentsam-nav/dist/index.js +6799 -122
  119. package/packages/agentsam-nav/package.json +24 -6
  120. package/packages/agentsam-queue-control/README.md +1 -1
  121. package/packages/agentsam-queue-control/package.json +7 -2
  122. package/packages/agentsam-rapid-rust/src/main.rs +1 -1
  123. package/packages/agentsam-repository/package.json +13 -3
  124. package/packages/agentsam-repository/src/goap.js +13 -14
  125. package/packages/agentsam-repository/src/source-types.js +8 -0
  126. package/packages/agentsam-repository/src/tickets.js +15 -22
  127. package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +19 -8
  128. package/packages/agentsam-vault/package.json +14 -4
  129. package/packages/agentsam-workbench/package.json +15 -4
  130. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  131. package/packages/agentsam-workbench/src/agent/index.ts +2 -0
  132. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  133. package/packages/connectors/cloudflare/package.json +15 -3
  134. package/packages/connectors/cloudflare/src/api-client.js +3 -2
  135. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  136. package/packages/connectors/cloudflare/src/index.js +1 -0
  137. package/packages/heuristic-theme/README.md +2 -2
  138. package/packages/heuristic-theme/package.json +8 -3
  139. package/packages/heuristic-theme/src/registry.js +2 -2
  140. package/packages/heuristic-theme/src/theme.js +1 -1
  141. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  142. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  143. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +27 -7
  144. package/packages/identity/README.md +2 -2
  145. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -15
  146. package/packages/identity/migrations/apply-portable.js +109 -0
  147. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +1 -1
  148. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  149. package/packages/identity/package.json +27 -6
  150. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  151. package/packages/identity/scripts/local-identity-bridge.mjs +13 -7
  152. package/packages/identity/scripts/preview-auth-portal.mjs +6 -6
  153. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -401
  154. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  155. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  156. package/packages/identity/src/adapters/portable-store.js +479 -0
  157. package/packages/identity/src/adapters/sqlite/index.js +13 -312
  158. package/packages/identity/src/contracts/auth-config.js +0 -1
  159. package/packages/identity/src/contracts/identity-store.js +56 -5
  160. package/packages/identity/src/contracts/provider.js +1 -0
  161. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  162. package/packages/identity/src/core/constants.js +1 -1
  163. package/packages/identity/src/core/session-policy.js +31 -0
  164. package/packages/identity/src/frontend/auth-portal/pages/login.html +6 -6
  165. package/packages/identity/src/frontend/auth-portal/pages/reset.html +5 -5
  166. package/packages/identity/src/frontend/auth-portal/pages/signup.html +5 -5
  167. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  168. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +6 -37
  169. package/packages/identity/src/index.js +28 -1
  170. package/packages/identity/src/migrations/README.md +23 -23
  171. package/packages/identity/src/oauth/README.md +1 -1
  172. package/packages/identity/src/oauth/credentials.js +10 -11
  173. package/packages/identity/src/oauth/google-desktop-exchange.js +195 -27
  174. package/packages/identity/src/oauth/iam-platform.js +21 -9
  175. package/packages/identity/src/oauth/native-handoff.js +136 -0
  176. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  177. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  178. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  179. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  180. package/packages/identity/src/providers/github/oauth.js +1 -2
  181. package/packages/identity/src/providers/github/profile.js +16 -2
  182. package/packages/identity/src/providers/index.js +11 -3
  183. package/packages/identity/src/server/identity-service.js +2 -1
  184. package/packages/identity/src/server/worker-router.js +71 -18
  185. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  186. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  187. package/packages/identity/tests/identity-init-scaffold.test.mjs +15 -4
  188. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  189. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  190. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  191. package/packages/identity/tests/oauth-credentials.test.mjs +4 -4
  192. package/packages/identity/tests/preview-auth-portal.test.mjs +4 -2
  193. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  194. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  195. package/packages/providers/completeful/package.json +7 -2
  196. package/packages/theme-church-site/package.json +17 -6
  197. package/packages/theme-church-site/src/harvest.json +4 -2
  198. package/packages/theme-church-site/src/index.js +7 -3
  199. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  200. package/packages/theme-companions-site/package.json +17 -6
  201. package/packages/theme-companions-site/src/harvest.json +4 -2
  202. package/packages/theme-companions-site/src/index.js +7 -3
  203. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  204. package/packages/theme-floors-site/package.json +17 -6
  205. package/packages/theme-floors-site/src/harvest.json +4 -2
  206. package/packages/theme-floors-site/src/index.js +7 -3
  207. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  208. package/packages/theme-fuelnfree-site/package.json +17 -6
  209. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  210. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  211. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  212. package/packages/theme-handyman-site/package.json +17 -6
  213. package/packages/theme-handyman-site/src/harvest.json +4 -2
  214. package/packages/theme-handyman-site/src/index.js +7 -3
  215. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  216. package/packages/theme-insurance-site/package.json +17 -6
  217. package/packages/theme-insurance-site/src/harvest.json +4 -2
  218. package/packages/theme-insurance-site/src/index.js +7 -3
  219. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  220. package/packages/theme-scenes/README.md +1 -1
  221. package/packages/theme-scenes/package.json +4 -3
  222. package/packages/theme-scenes/src/registry.js +187 -0
  223. package/packages/theme-shinshu-site/package.json +17 -6
  224. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  225. package/packages/theme-shinshu-site/src/index.js +7 -3
  226. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  227. package/packages/work-graph/package.json +14 -4
  228. package/protocol/FILEMETA_V1.md +2 -2
  229. package/protocol/capabilities/manifest.json +1 -1
  230. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  231. package/protocol/presets/catalog.json +2 -2
  232. package/protocol/theme-refinery/lineage-registry.json +105 -0
  233. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  234. package/python/agentsam_sdk/repository/intelligence/discovery.py +27 -2
  235. package/python/agentsam_sdk/repository/intelligence/git.py +4 -0
  236. package/python/tests/test_repository_intelligence.py +30 -0
  237. package/src/cli/command-catalog.js +48 -5
  238. package/src/cli/dispatch.js +1 -0
  239. package/src/cli.js +20 -1
  240. package/src/cloudflare/runtime-status.js +2 -1
  241. package/src/commands/autorag.js +67 -13
  242. package/src/commands/cheat-sheet.js +29 -4
  243. package/src/commands/codebaseindex.js +45 -2
  244. package/src/commands/goap-world.js +134 -0
  245. package/src/commands/goap.js +11 -4
  246. package/src/commands/knowledge.js +59 -2
  247. package/src/commands/machine-binary.js +109 -0
  248. package/src/commands/machine-runtime.js +266 -0
  249. package/src/commands/machine.js +208 -0
  250. package/src/commands/package.js +530 -0
  251. package/src/commands/plan-ledger.js +370 -0
  252. package/src/commands/plan.js +183 -0
  253. package/src/commands/security.js +67 -4
  254. package/src/commands/setup.js +33 -16
  255. package/src/commands/skill.js +78 -17
  256. package/src/commands/status.js +8 -1
  257. package/src/features/resolve.js +1 -0
  258. package/src/knowledge/engine.js +21 -2
  259. package/src/knowledge/runtime-discovery.js +127 -0
  260. package/src/knowledge/source.js +1 -1
  261. package/src/lib/identity-scaffold.js +53 -13
  262. package/src/lib/setup/recipes.js +1 -1
  263. package/src/lib/slash-commands.js +1 -1
  264. package/src/local/runtime-store.js +24 -2
  265. package/src/local/sqlite.js +17 -0
  266. package/src/models/discovery.js +40 -22
  267. package/src/models/inventory-core.d.ts +105 -0
  268. package/src/models/inventory-core.js +54 -6
  269. package/src/sam/operations/package-audit.js +41 -0
  270. package/src/sam/seed.js +2 -0
  271. package/src/security/logs.js +3 -0
  272. package/src/ui/cli/help.js +41 -0
  273. package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +0 -145
  274. package/test/account-session.test.mjs +0 -101
  275. package/test/agent-capabilities.test.mjs +0 -67
  276. package/test/app-authority-context.test.mjs +0 -32
  277. package/test/app-building-skills.test.mjs +0 -61
  278. package/test/apps-scaffold-contract.test.mjs +0 -114
  279. package/test/blender-cad.test.mjs +0 -146
  280. package/test/cad-docker.test.mjs +0 -96
  281. package/test/capabilities.test.mjs +0 -133
  282. package/test/cli/api-key-env-whoami.test.mjs +0 -129
  283. package/test/cli/codebaseindex-plan-ux.test.mjs +0 -37
  284. package/test/cli/eval-live.test.mjs +0 -219
  285. package/test/cli/go.test.mjs +0 -128
  286. package/test/cli/local-vault-and-provider-setup.test.mjs +0 -268
  287. package/test/cli/mcp-client.test.mjs +0 -256
  288. package/test/cli/preferences-runtime.test.mjs +0 -11
  289. package/test/cli/runtime-persist.test.mjs +0 -56
  290. package/test/cli/runtime-ui.test.mjs +0 -141
  291. package/test/cli/rust-command.test.mjs +0 -21
  292. package/test/cli/skill-npm-and-env.test.mjs +0 -52
  293. package/test/cli/status-actions.test.mjs +0 -88
  294. package/test/cli/wireframes-go-registry.test.mjs +0 -139
  295. package/test/cli-preferences.test.mjs +0 -46
  296. package/test/cloudflare-connector.test.mjs +0 -93
  297. package/test/cloudflare-runtime.test.mjs +0 -82
  298. package/test/context.test.mjs +0 -159
  299. package/test/credentials-audit.test.mjs +0 -113
  300. package/test/deploy-health-scan.test.mjs +0 -95
  301. package/test/deploy-receipt.test.mjs +0 -91
  302. package/test/dockerize.test.mjs +0 -93
  303. package/test/error-diagnostics.test.mjs +0 -124
  304. package/test/eval-context.test.mjs +0 -37
  305. package/test/execution-approvals.test.mjs +0 -27
  306. package/test/fixtures/cad/courtyard-house.json +0 -208
  307. package/test/fixtures/knowledge-rpc-worker.mjs +0 -16
  308. package/test/gcloud-auth.test.mjs +0 -111
  309. package/test/go/build-source-identity.test.mjs +0 -31
  310. package/test/go/cloudflare-probe.test.mjs +0 -317
  311. package/test/go/distribution.test.mjs +0 -28
  312. package/test/google-cloud-connection.test.mjs +0 -83
  313. package/test/google-cloud-inventory.test.mjs +0 -64
  314. package/test/indexing-provider.test.mjs +0 -29
  315. package/test/init-options.test.mjs +0 -35
  316. package/test/integration/ai-access-onboarding.test.mjs +0 -47
  317. package/test/integration/app-command.test.mjs +0 -85
  318. package/test/integration/cad-discovery.test.mjs +0 -158
  319. package/test/integration/cad-docker-executor.test.mjs +0 -249
  320. package/test/integration/cad-execution.test.mjs +0 -184
  321. package/test/integration/cad-project-app.test.mjs +0 -31
  322. package/test/integration/cad-project-d1.test.mjs +0 -25
  323. package/test/integration/cad-project-native.test.mjs +0 -24
  324. package/test/integration/cad-project-workflow.test.mjs +0 -9
  325. package/test/integration/cad-project.test.mjs +0 -85
  326. package/test/integration/cli-help.test.mjs +0 -41
  327. package/test/integration/cms-app-scaffold.test.mjs +0 -71
  328. package/test/integration/cms-site-tenancy-contract.test.mjs +0 -257
  329. package/test/integration/codebaseindex-ingest.test.mjs +0 -214
  330. package/test/integration/core-client.integration.test.mjs +0 -55
  331. package/test/integration/error-runtime-rpc.test.mjs +0 -71
  332. package/test/integration/features-resolve.test.mjs +0 -147
  333. package/test/integration/icon-registry.test.mjs +0 -67
  334. package/test/integration/ingest-discover-models.test.mjs +0 -30
  335. package/test/integration/inspect-path-cli.test.mjs +0 -46
  336. package/test/integration/install-script.test.mjs +0 -110
  337. package/test/integration/inventory-core.test.mjs +0 -53
  338. package/test/integration/inventory-evidence.test.mjs +0 -125
  339. package/test/integration/knowledge-rpc.test.mjs +0 -112
  340. package/test/integration/local-fs.test.mjs +0 -113
  341. package/test/integration/merkle-cli.test.mjs +0 -61
  342. package/test/integration/merkle-persistence-identity.test.mjs +0 -48
  343. package/test/integration/plugins-cloudflare.integration.test.mjs +0 -28
  344. package/test/integration/provider-env-cli.test.mjs +0 -50
  345. package/test/integration/provider-factory.test.mjs +0 -197
  346. package/test/integration/repository-company-graph.test.mjs +0 -90
  347. package/test/integration/runtime-migrations.test.mjs +0 -87
  348. package/test/integration/runtime-status.integration.test.mjs +0 -212
  349. package/test/integration/sam-activity-recovery.test.mjs +0 -147
  350. package/test/integration/sam-decision.test.mjs +0 -584
  351. package/test/integration/sam-kernel.test.mjs +0 -99
  352. package/test/integration/sam-planning-astar.test.mjs +0 -279
  353. package/test/integration/scaffold-cloudflare.test.mjs +0 -46
  354. package/test/integration/skill-runtime.test.mjs +0 -240
  355. package/test/integration/storage-architecture.test.mjs +0 -154
  356. package/test/integration/store-discovery.test.mjs +0 -44
  357. package/test/integration/studio-fs-pty-e2e.test.mjs +0 -294
  358. package/test/integration/terminal-exec.integration.test.mjs +0 -86
  359. package/test/integration/tool-runtime.test.mjs +0 -124
  360. package/test/integration/tool-schema.test.mjs +0 -59
  361. package/test/jr-dev-skill.test.mjs +0 -26
  362. package/test/knowledge-context-pack.test.mjs +0 -19
  363. package/test/knowledge-postgres.test.mjs +0 -40
  364. package/test/knowledge-service.test.mjs +0 -110
  365. package/test/knowledge.test.mjs +0 -206
  366. package/test/live/terminal-transport.live.test.mjs +0 -24
  367. package/test/local-sessions.test.mjs +0 -57
  368. package/test/local-studio-deploy.test.mjs +0 -83
  369. package/test/loopback-oauth.test.mjs +0 -53
  370. package/test/merkle-render.test.mjs +0 -31
  371. package/test/mini.test.mjs +0 -140
  372. package/test/model-catalog.test.mjs +0 -70
  373. package/test/models.test.mjs +0 -309
  374. package/test/npm10-lock.test.mjs +0 -29
  375. package/test/ollama.test.mjs +0 -137
  376. package/test/open-url.test.mjs +0 -64
  377. package/test/openai-responses.test.mjs +0 -155
  378. package/test/portable-context.test.mjs +0 -94
  379. package/test/project-config.test.mjs +0 -81
  380. package/test/project-rules.test.mjs +0 -44
  381. package/test/provider-credentials.test.mjs +0 -106
  382. package/test/rehydrate.test.mjs +0 -25
  383. package/test/release-hygiene.test.mjs +0 -42
  384. package/test/repository-snapshot-view.test.mjs +0 -112
  385. package/test/responses-runner.test.mjs +0 -465
  386. package/test/runtime-activity.test.mjs +0 -98
  387. package/test/sdk-worker-contract.test.mjs +0 -72
  388. package/test/security.test.mjs +0 -252
  389. package/test/setup-planner.test.mjs +0 -74
  390. package/test/setup-runtime.test.mjs +0 -51
  391. package/test/shell.test.mjs +0 -281
  392. package/test/skills.test.mjs +0 -22
  393. package/test/smoke.mjs +0 -122
  394. package/test/telemetry.test.mjs +0 -79
  395. package/test/terminal/local-pty.mock.test.mjs +0 -153
  396. package/test/terminal-machine-identity.test.mjs +0 -88
  397. package/test/theme-portability.test.mjs +0 -14
  398. package/test/tools-search.test.mjs +0 -73
  399. package/test/unit/website-assets-bindings.test.mjs +0 -60
  400. package/test/whoami-resume.test.mjs +0 -157
@@ -0,0 +1,328 @@
1
+ PRAGMA foreign_keys = ON;
2
+
3
+ -- Account -> site ownership only. No tenant_id or workspace_id.
4
+
5
+ CREATE TABLE IF NOT EXISTS cms_sites (
6
+ account_id TEXT NOT NULL,
7
+ id TEXT NOT NULL,
8
+ slug TEXT NOT NULL,
9
+ name TEXT NOT NULL,
10
+ domain TEXT,
11
+ status TEXT NOT NULL DEFAULT 'harvest',
12
+ source_repo TEXT,
13
+ source_ref TEXT,
14
+ created_at TEXT NOT NULL,
15
+ updated_at TEXT NOT NULL,
16
+ PRIMARY KEY (account_id, id),
17
+ UNIQUE (account_id, slug)
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS cms_brand_profiles (
21
+ account_id TEXT NOT NULL,
22
+ id TEXT NOT NULL,
23
+ site_id TEXT NOT NULL,
24
+ profile_key TEXT NOT NULL,
25
+ name TEXT NOT NULL,
26
+ role TEXT NOT NULL,
27
+ source_file TEXT,
28
+ status TEXT NOT NULL DEFAULT 'candidate',
29
+ PRIMARY KEY (account_id, id),
30
+ UNIQUE (account_id, site_id, profile_key),
31
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS cms_brand_tokens (
35
+ account_id TEXT NOT NULL,
36
+ id TEXT NOT NULL,
37
+ site_id TEXT NOT NULL,
38
+ profile_id TEXT NOT NULL,
39
+ token_key TEXT NOT NULL,
40
+ category TEXT NOT NULL,
41
+ value_text TEXT NOT NULL,
42
+ confidence REAL NOT NULL DEFAULT 1.0,
43
+ status TEXT NOT NULL DEFAULT 'observed',
44
+ source_file TEXT,
45
+ source_line INTEGER,
46
+ PRIMARY KEY (account_id, id),
47
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE,
48
+ FOREIGN KEY (account_id, profile_id) REFERENCES cms_brand_profiles(account_id, id) ON DELETE CASCADE
49
+ );
50
+
51
+ CREATE TABLE IF NOT EXISTS cms_routes (
52
+ account_id TEXT NOT NULL,
53
+ id TEXT NOT NULL,
54
+ site_id TEXT NOT NULL,
55
+ path TEXT NOT NULL,
56
+ route_kind TEXT NOT NULL,
57
+ title TEXT,
58
+ source_file TEXT,
59
+ source_symbol TEXT,
60
+ status TEXT NOT NULL DEFAULT 'candidate',
61
+ PRIMARY KEY (account_id, id),
62
+ UNIQUE (account_id, site_id, path),
63
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
64
+ );
65
+
66
+ CREATE TABLE IF NOT EXISTS cms_layouts (
67
+ account_id TEXT NOT NULL,
68
+ id TEXT NOT NULL,
69
+ site_id TEXT NOT NULL,
70
+ route_id TEXT,
71
+ layout_key TEXT NOT NULL,
72
+ name TEXT NOT NULL,
73
+ source_file TEXT,
74
+ source_symbol TEXT,
75
+ status TEXT NOT NULL DEFAULT 'candidate',
76
+ structure_json TEXT NOT NULL DEFAULT '{}',
77
+ PRIMARY KEY (account_id, id),
78
+ UNIQUE (account_id, site_id, layout_key),
79
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE,
80
+ FOREIGN KEY (account_id, route_id) REFERENCES cms_routes(account_id, id) ON DELETE CASCADE
81
+ );
82
+
83
+ CREATE TABLE IF NOT EXISTS cms_sections (
84
+ account_id TEXT NOT NULL,
85
+ id TEXT NOT NULL,
86
+ site_id TEXT NOT NULL,
87
+ route_id TEXT,
88
+ layout_id TEXT,
89
+ section_key TEXT NOT NULL,
90
+ name TEXT NOT NULL,
91
+ section_type TEXT NOT NULL,
92
+ zone TEXT,
93
+ position INTEGER NOT NULL DEFAULT 0,
94
+ authority TEXT NOT NULL DEFAULT 'harvest',
95
+ status TEXT NOT NULL DEFAULT 'candidate',
96
+ source_file TEXT,
97
+ source_line INTEGER,
98
+ source_symbol TEXT,
99
+ props_json TEXT NOT NULL DEFAULT '{}',
100
+ PRIMARY KEY (account_id, id),
101
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
102
+ );
103
+
104
+ CREATE TABLE IF NOT EXISTS cms_navigation (
105
+ account_id TEXT NOT NULL,
106
+ id TEXT NOT NULL,
107
+ site_id TEXT NOT NULL,
108
+ nav_key TEXT NOT NULL,
109
+ name TEXT NOT NULL,
110
+ location TEXT NOT NULL,
111
+ source_file TEXT,
112
+ source_symbol TEXT,
113
+ status TEXT NOT NULL DEFAULT 'candidate',
114
+ PRIMARY KEY (account_id, id),
115
+ UNIQUE (account_id, site_id, nav_key),
116
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
117
+ );
118
+
119
+ CREATE TABLE IF NOT EXISTS cms_navigation_items (
120
+ account_id TEXT NOT NULL,
121
+ id TEXT NOT NULL,
122
+ site_id TEXT NOT NULL,
123
+ navigation_id TEXT NOT NULL,
124
+ position INTEGER NOT NULL,
125
+ label TEXT NOT NULL,
126
+ href TEXT NOT NULL,
127
+ item_kind TEXT NOT NULL DEFAULT 'internal',
128
+ source_file TEXT,
129
+ source_line INTEGER,
130
+ status TEXT NOT NULL DEFAULT 'candidate',
131
+ PRIMARY KEY (account_id, id),
132
+ FOREIGN KEY (account_id, navigation_id) REFERENCES cms_navigation(account_id, id) ON DELETE CASCADE
133
+ );
134
+
135
+ CREATE TABLE IF NOT EXISTS cms_content_items (
136
+ account_id TEXT NOT NULL,
137
+ id TEXT NOT NULL,
138
+ site_id TEXT NOT NULL,
139
+ collection_key TEXT NOT NULL,
140
+ item_key TEXT NOT NULL,
141
+ item_type TEXT NOT NULL,
142
+ title TEXT,
143
+ slug TEXT,
144
+ authority TEXT NOT NULL DEFAULT 'sample',
145
+ status TEXT NOT NULL DEFAULT 'sample',
146
+ source_file TEXT,
147
+ source_line INTEGER,
148
+ data_json TEXT NOT NULL DEFAULT '{}',
149
+ PRIMARY KEY (account_id, id),
150
+ UNIQUE (account_id, site_id, collection_key, item_key),
151
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
152
+ );
153
+
154
+ CREATE TABLE IF NOT EXISTS cms_assets (
155
+ account_id TEXT NOT NULL,
156
+ id TEXT NOT NULL,
157
+ site_id TEXT NOT NULL,
158
+ asset_key TEXT NOT NULL,
159
+ asset_kind TEXT NOT NULL,
160
+ uri TEXT,
161
+ local_path TEXT,
162
+ authority TEXT NOT NULL DEFAULT 'reference',
163
+ status TEXT NOT NULL DEFAULT 'candidate',
164
+ source_file TEXT,
165
+ source_line INTEGER,
166
+ PRIMARY KEY (account_id, id),
167
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
168
+ );
169
+
170
+ CREATE TABLE IF NOT EXISTS cms_drafts (
171
+ account_id TEXT NOT NULL,
172
+ id TEXT NOT NULL,
173
+ site_id TEXT NOT NULL,
174
+ route_id TEXT,
175
+ name TEXT NOT NULL,
176
+ status TEXT NOT NULL DEFAULT 'working',
177
+ snapshot_json TEXT NOT NULL DEFAULT '{}',
178
+ created_at TEXT NOT NULL,
179
+ updated_at TEXT NOT NULL,
180
+ PRIMARY KEY (account_id, id),
181
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
182
+ );
183
+
184
+ CREATE TABLE IF NOT EXISTS cms_change_sets (
185
+ account_id TEXT NOT NULL,
186
+ id TEXT NOT NULL,
187
+ site_id TEXT NOT NULL,
188
+ draft_id TEXT NOT NULL,
189
+ sequence INTEGER NOT NULL,
190
+ source_kind TEXT NOT NULL DEFAULT 'human',
191
+ patch_json TEXT NOT NULL,
192
+ status TEXT NOT NULL DEFAULT 'accepted',
193
+ created_at TEXT NOT NULL,
194
+ PRIMARY KEY (account_id, id),
195
+ UNIQUE (account_id, draft_id, sequence),
196
+ FOREIGN KEY (account_id, draft_id) REFERENCES cms_drafts(account_id, id) ON DELETE CASCADE
197
+ );
198
+
199
+ CREATE TABLE IF NOT EXISTS cms_publications (
200
+ account_id TEXT NOT NULL,
201
+ id TEXT NOT NULL,
202
+ site_id TEXT NOT NULL,
203
+ revision INTEGER NOT NULL,
204
+ snapshot_json TEXT NOT NULL,
205
+ status TEXT NOT NULL DEFAULT 'published',
206
+ created_at TEXT NOT NULL,
207
+ published_at TEXT,
208
+ PRIMARY KEY (account_id, id),
209
+ UNIQUE (account_id, site_id, revision),
210
+ FOREIGN KEY (account_id, site_id) REFERENCES cms_sites(account_id, id) ON DELETE CASCADE
211
+ );
212
+
213
+ CREATE TABLE IF NOT EXISTS harvest_runs (
214
+ id TEXT PRIMARY KEY,
215
+ account_id TEXT NOT NULL,
216
+ site_id TEXT NOT NULL,
217
+ source_repo TEXT NOT NULL,
218
+ source_ref TEXT NOT NULL,
219
+ source_commit TEXT NOT NULL,
220
+ created_at TEXT NOT NULL
221
+ );
222
+
223
+ CREATE TABLE IF NOT EXISTS harvest_sources (
224
+ id TEXT PRIMARY KEY,
225
+ run_id TEXT NOT NULL,
226
+ lane TEXT NOT NULL,
227
+ path TEXT NOT NULL,
228
+ sha256 TEXT NOT NULL,
229
+ bytes INTEGER NOT NULL,
230
+ source_commit TEXT NOT NULL,
231
+ FOREIGN KEY (run_id) REFERENCES harvest_runs(id) ON DELETE CASCADE
232
+ );
233
+
234
+ CREATE TABLE IF NOT EXISTS harvest_findings (
235
+ id TEXT PRIMARY KEY,
236
+ run_id TEXT NOT NULL,
237
+ account_id TEXT NOT NULL,
238
+ site_id TEXT NOT NULL,
239
+ category TEXT NOT NULL,
240
+ severity TEXT NOT NULL,
241
+ signal TEXT NOT NULL,
242
+ message TEXT NOT NULL,
243
+ source_file TEXT,
244
+ source_line INTEGER,
245
+ status TEXT NOT NULL DEFAULT 'review',
246
+ FOREIGN KEY (run_id) REFERENCES harvest_runs(id) ON DELETE CASCADE
247
+ );
248
+
249
+ CREATE TABLE IF NOT EXISTS harvest_candidates (
250
+ id TEXT PRIMARY KEY,
251
+ run_id TEXT NOT NULL,
252
+ account_id TEXT NOT NULL,
253
+ site_id TEXT NOT NULL,
254
+ candidate_kind TEXT NOT NULL,
255
+ candidate_key TEXT NOT NULL,
256
+ value_text TEXT,
257
+ confidence REAL NOT NULL DEFAULT 0.5,
258
+ source_file TEXT,
259
+ source_line INTEGER,
260
+ status TEXT NOT NULL DEFAULT 'review',
261
+ metadata_json TEXT NOT NULL DEFAULT '{}',
262
+ FOREIGN KEY (run_id) REFERENCES harvest_runs(id) ON DELETE CASCADE
263
+ );
264
+
265
+ CREATE TABLE IF NOT EXISTS tooling_probe_runs (
266
+ id TEXT PRIMARY KEY,
267
+ account_id TEXT NOT NULL,
268
+ site_id TEXT NOT NULL,
269
+ profile TEXT NOT NULL,
270
+ sdk_root TEXT,
271
+ fixture_root TEXT,
272
+ started_at TEXT NOT NULL,
273
+ finished_at TEXT,
274
+ ok INTEGER
275
+ );
276
+
277
+ CREATE TABLE IF NOT EXISTS tooling_probe_steps (
278
+ id TEXT PRIMARY KEY,
279
+ probe_run_id TEXT NOT NULL,
280
+ step_key TEXT NOT NULL,
281
+ category TEXT NOT NULL,
282
+ command_json TEXT NOT NULL,
283
+ cwd TEXT NOT NULL,
284
+ mutability TEXT NOT NULL,
285
+ network_mode TEXT NOT NULL,
286
+ started_at TEXT NOT NULL,
287
+ finished_at TEXT,
288
+ exit_code INTEGER,
289
+ ok INTEGER,
290
+ stdout_text TEXT,
291
+ stderr_text TEXT,
292
+ FOREIGN KEY (probe_run_id) REFERENCES tooling_probe_runs(id) ON DELETE CASCADE
293
+ );
294
+
295
+
296
+ -- Historical archive/theme intake provenance.
297
+ CREATE TABLE IF NOT EXISTS archive_ingests (
298
+ id TEXT PRIMARY KEY,
299
+ account_id TEXT NOT NULL,
300
+ site_id TEXT NOT NULL,
301
+ source_path TEXT NOT NULL,
302
+ source_kind TEXT NOT NULL,
303
+ source_sha256 TEXT,
304
+ quarantine_path TEXT NOT NULL,
305
+ classification TEXT NOT NULL,
306
+ created_at TEXT NOT NULL,
307
+ manifest_json TEXT NOT NULL
308
+ );
309
+
310
+ CREATE TABLE IF NOT EXISTS archive_files (
311
+ id TEXT PRIMARY KEY,
312
+ ingest_id TEXT NOT NULL,
313
+ relative_path TEXT NOT NULL,
314
+ bytes INTEGER NOT NULL,
315
+ sha256 TEXT NOT NULL,
316
+ category TEXT NOT NULL,
317
+ FOREIGN KEY (ingest_id) REFERENCES archive_ingests(id) ON DELETE CASCADE
318
+ );
319
+
320
+ CREATE TABLE IF NOT EXISTS archive_outputs (
321
+ id TEXT PRIMARY KEY,
322
+ ingest_id TEXT NOT NULL,
323
+ output_kind TEXT NOT NULL,
324
+ path TEXT NOT NULL,
325
+ bytes INTEGER NOT NULL,
326
+ sha256 TEXT NOT NULL,
327
+ FOREIGN KEY (ingest_id) REFERENCES archive_ingests(id) ON DELETE CASCADE
328
+ );
@@ -1,21 +1,31 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-cms-shared",
3
- "version": "0.1.0",
4
- "private": true,
3
+ "version": "2.6.7",
4
+ "description": "Internal CMS shared contracts (bundled into @inneranimalmedia/client-cms-editor — not published separately).",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./src/index.ts",
8
8
  "./publication": "./src/publication.ts",
9
9
  "./bindings": "./src/cloudflare-bindings.ts",
10
- "./context": "./src/agent-context.ts"
10
+ "./context": "./src/agent-context.ts",
11
+ "./adapter": "./src/adapter.ts",
12
+ "./host": "./src/host.ts"
11
13
  },
12
14
  "scripts": {
13
15
  "typecheck": "tsc --noEmit -p tsconfig.json"
14
16
  },
15
- "dependencies": {
16
- "@inneranimalmedia/agentsam-contracts": "file:../../../../packages/agentsam-contracts"
17
- },
18
17
  "devDependencies": {
19
18
  "typescript": "^5.9.3"
20
- }
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
26
+ "directory": "apps/client-cms-editor/shared/cms"
27
+ },
28
+ "files": [
29
+ "src"
30
+ ]
21
31
  }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Portable CMS persistence/transport contract.
3
+ *
4
+ * The editor depends on this interface — not on any host's private CMS routes
5
+ * or invented Worker binding product sources. Hosts implement adapters:
6
+ * - SQLite (desktop / offline authority)
7
+ * - Cloudflare D1 + R2 (cloud authority via OAuth-proven resources)
8
+ * - custom HTTP backend
9
+ * - embedding application backends (one consumer implementation each)
10
+ *
11
+ * localStorage is never an adapter. It may cache UI chrome only.
12
+ *
13
+ * Required methods are authoring CRUD. Adapters that cannot support a method
14
+ * must throw a typed capability error — never silently drop editor actions.
15
+ */
16
+
17
+ import type {
18
+ CmsEditorBlock,
19
+ CmsEditorPage,
20
+ CmsEditorSection,
21
+ CmsEditorSite,
22
+ CmsSiteCreateInput,
23
+ CmsSiteRecord,
24
+ CmsSiteUpdatePatch,
25
+ } from './editor-types';
26
+ import type { CmsPublicationSnapshot } from './publication';
27
+
28
+ export type { CmsPublicationSnapshot } from './publication';
29
+
30
+ export type CmsRevision = {
31
+ id: string;
32
+ pageId: string;
33
+ kind: 'draft' | 'publication';
34
+ createdAt: string;
35
+ label?: string;
36
+ snapshot?: unknown;
37
+ };
38
+
39
+ export type CmsAsset = {
40
+ id: string;
41
+ name: string;
42
+ mimeType?: string;
43
+ size?: number;
44
+ url?: string;
45
+ key?: string;
46
+ createdAt?: string;
47
+ metadata?: Record<string, unknown>;
48
+ };
49
+
50
+ export type CmsCapabilityErrorCode =
51
+ | 'cms_capability_unsupported'
52
+ | 'cms_adapter_not_configured'
53
+ | 'cms_source_not_found'
54
+ | 'cms_permission_denied';
55
+
56
+ export class CmsCapabilityError extends Error {
57
+ readonly code: CmsCapabilityErrorCode;
58
+ readonly capability: string;
59
+
60
+ constructor(capability: string, message?: string, code: CmsCapabilityErrorCode = 'cms_capability_unsupported') {
61
+ super(message || `CMS adapter does not support ${capability}`);
62
+ this.name = 'CmsCapabilityError';
63
+ this.code = code;
64
+ this.capability = capability;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Required content-authoring contract for a real CMS editor.
70
+ * Optional methods must not be used as a way to dilute CRUD.
71
+ */
72
+ export type CmsEditorAdapter = {
73
+ // Site lifecycle
74
+ listSites(): Promise<CmsSiteRecord[]>;
75
+ getSite(siteId: string): Promise<CmsSiteRecord>;
76
+ createSite(input: CmsSiteCreateInput): Promise<CmsSiteRecord>;
77
+ updateSite(siteId: string, patch: CmsSiteUpdatePatch): Promise<CmsSiteRecord>;
78
+ deleteSite(siteId: string): Promise<void>;
79
+ /** Hydrated aggregate (site metadata + page tree). */
80
+ loadSite(siteId: string): Promise<CmsEditorSite>;
81
+
82
+ // Pages
83
+ listPages(siteId: string): Promise<CmsEditorPage[]>;
84
+ getPage(pageId: string): Promise<CmsEditorPage>;
85
+ createPage(
86
+ siteId: string,
87
+ input: Partial<CmsEditorPage> & { title: string; slug: string },
88
+ ): Promise<CmsEditorPage>;
89
+ updatePage(pageId: string, patch: Partial<CmsEditorPage>): Promise<CmsEditorPage>;
90
+ deletePage(pageId: string): Promise<void>;
91
+
92
+ // Sections
93
+ listSections(pageId: string): Promise<CmsEditorSection[]>;
94
+ getSection(sectionId: string): Promise<CmsEditorSection>;
95
+ createSection(
96
+ pageId: string,
97
+ input: Partial<CmsEditorSection> & { name: string },
98
+ ): Promise<CmsEditorSection>;
99
+ updateSection(
100
+ sectionId: string,
101
+ patch: Partial<CmsEditorSection>,
102
+ ): Promise<CmsEditorSection>;
103
+ deleteSection(sectionId: string): Promise<void>;
104
+ reorderSections(pageId: string, sectionIds: string[]): Promise<void>;
105
+ setSectionVisibility(sectionId: string, visible: boolean): Promise<void>;
106
+
107
+ // Blocks
108
+ listBlocks(sectionId: string): Promise<CmsEditorBlock[]>;
109
+ getBlock(blockId: string): Promise<CmsEditorBlock>;
110
+ createBlock(
111
+ sectionId: string,
112
+ input: Partial<CmsEditorBlock> & { type: string },
113
+ ): Promise<CmsEditorBlock>;
114
+ updateBlock(
115
+ blockId: string,
116
+ patch: Partial<CmsEditorBlock>,
117
+ ): Promise<CmsEditorBlock>;
118
+ deleteBlock(blockId: string): Promise<void>;
119
+ reorderBlocks?(sectionId: string, blockIds: string[]): Promise<void>;
120
+
121
+ // Draft / revisions
122
+ saveDraft(pageId: string, payload: unknown): Promise<CmsRevision>;
123
+ getRevision(revisionId: string): Promise<CmsRevision>;
124
+ listRevisions(pageId: string): Promise<CmsRevision[]>;
125
+ restoreRevision(pageId: string, revisionId: string): Promise<CmsEditorPage>;
126
+
127
+ // Publication
128
+ previewDraft(pageId: string): Promise<{ previewUrl?: string; snapshot: unknown }>;
129
+ publish(pageId: string, options?: { revisionId?: string }): Promise<CmsPublicationSnapshot>;
130
+ getPublishedRevision(pageId: string): Promise<CmsPublicationSnapshot | null>;
131
+
132
+ // Assets
133
+ listAssets(siteId: string): Promise<CmsAsset[]>;
134
+ getAsset(assetId: string): Promise<CmsAsset>;
135
+ uploadAsset(
136
+ siteId: string,
137
+ file: Blob,
138
+ meta?: { name?: string; metadata?: Record<string, unknown> },
139
+ ): Promise<CmsAsset>;
140
+ updateAsset(
141
+ assetId: string,
142
+ patch: Partial<Pick<CmsAsset, 'name' | 'metadata' | 'url' | 'key'>>,
143
+ ): Promise<CmsAsset>;
144
+ deleteAsset(assetId: string): Promise<void>;
145
+ };
146
+
147
+ /** Capability ids used when reporting honest unsupported operations. */
148
+ export const CMS_ADAPTER_CAPABILITIES = Object.freeze([
149
+ 'listSites',
150
+ 'getSite',
151
+ 'createSite',
152
+ 'updateSite',
153
+ 'deleteSite',
154
+ 'loadSite',
155
+ 'listPages',
156
+ 'getPage',
157
+ 'createPage',
158
+ 'updatePage',
159
+ 'deletePage',
160
+ 'listSections',
161
+ 'getSection',
162
+ 'createSection',
163
+ 'updateSection',
164
+ 'deleteSection',
165
+ 'reorderSections',
166
+ 'setSectionVisibility',
167
+ 'listBlocks',
168
+ 'getBlock',
169
+ 'createBlock',
170
+ 'updateBlock',
171
+ 'deleteBlock',
172
+ 'reorderBlocks',
173
+ 'saveDraft',
174
+ 'getRevision',
175
+ 'listRevisions',
176
+ 'restoreRevision',
177
+ 'previewDraft',
178
+ 'publish',
179
+ 'getPublishedRevision',
180
+ 'listAssets',
181
+ 'getAsset',
182
+ 'uploadAsset',
183
+ 'updateAsset',
184
+ 'deleteAsset',
185
+ ] as const);
186
+
187
+ export type CmsAdapterCapability = (typeof CMS_ADAPTER_CAPABILITIES)[number];
188
+
189
+ export type CmsAdapterKind = 'sqlite' | 'd1_r2' | 'http' | 'custom';
190
+
191
+ export type CmsAdapterDescriptor = {
192
+ kind: CmsAdapterKind;
193
+ label: string;
194
+ /** Provenance of the backing store — never invented product resources. */
195
+ provenance: {
196
+ kind: 'native_runtime' | 'oauth_discovery' | 'user_configured' | 'http_endpoint';
197
+ runtimeId?: string;
198
+ connectionId?: string;
199
+ resourceId?: string;
200
+ endpoint?: string;
201
+ };
202
+ /** Explicit list of supported capabilities; omit only when fully implementing CmsEditorAdapter. */
203
+ capabilities?: CmsAdapterCapability[];
204
+ };
@@ -1,7 +1,7 @@
1
- import type { AgentContext, AgentContextProvider, AgentPrincipal } from '@inneranimalmedia/agentsam-contracts';
1
+ import type { CmsAgentContext, CmsAgentContextProvider, CmsHostPrincipal } from './host';
2
2
 
3
3
  export type CmsAgentContextInput = {
4
- principal: AgentPrincipal;
4
+ principal: CmsHostPrincipal;
5
5
  projectId: string;
6
6
  route?: string;
7
7
  pageId?: string | null;
@@ -10,11 +10,11 @@ export type CmsAgentContextInput = {
10
10
  publicationRevision?: number | null;
11
11
  };
12
12
 
13
- export function createCmsAgentContext(input: CmsAgentContextInput): AgentContext {
13
+ export function createCmsAgentContext(input: CmsAgentContextInput): CmsAgentContext {
14
14
  return {
15
15
  surface: 'cms',
16
16
  accountId: input.principal.accountId,
17
- authUserId: input.principal.authUserId,
17
+ subjectId: input.principal.subjectId,
18
18
  projectId: input.projectId,
19
19
  metadata: {
20
20
  route: input.route ?? null,
@@ -26,7 +26,9 @@ export function createCmsAgentContext(input: CmsAgentContextInput): AgentContext
26
26
  };
27
27
  }
28
28
 
29
- export function createCmsAgentContextProvider(getInput: () => CmsAgentContextInput | Promise<CmsAgentContextInput>): AgentContextProvider {
29
+ export function createCmsAgentContextProvider(
30
+ getInput: () => CmsAgentContextInput | Promise<CmsAgentContextInput>,
31
+ ): CmsAgentContextProvider {
30
32
  return {
31
33
  async getContext() {
32
34
  return createCmsAgentContext(await getInput());
@@ -35,6 +35,17 @@ export type CmsEditorPage = {
35
35
  metaDescription: string;
36
36
  };
37
37
 
38
+ export type CmsEditorSiteTheme = {
39
+ cssVars: Record<string, string>;
40
+ };
41
+
42
+ export type CmsEditorSiteSchemas = {
43
+ protocol_version: number;
44
+ sections: unknown[];
45
+ blocks: unknown[];
46
+ fields?: unknown[];
47
+ };
48
+
38
49
  export type CmsEditorSite = {
39
50
  id: string;
40
51
  name: string;
@@ -43,8 +54,29 @@ export type CmsEditorSite = {
43
54
  edited: string;
44
55
  color: string;
45
56
  pages: CmsEditorPage[];
57
+ /** Site-level theme authority (starter pack + editor). */
58
+ theme?: CmsEditorSiteTheme;
59
+ /** Site-level schema registry (starter pack + editor). */
60
+ schemas?: CmsEditorSiteSchemas;
46
61
  };
47
62
 
63
+ /** Site metadata without hydrated page trees (aggregate reads use loadSite). */
64
+ export type CmsSiteRecord = Omit<CmsEditorSite, 'pages'>;
65
+
66
+ export type CmsSiteCreateInput = {
67
+ id?: string;
68
+ name: string;
69
+ domain?: string;
70
+ initials?: string;
71
+ color?: string;
72
+ theme?: CmsEditorSiteTheme;
73
+ schemas?: CmsEditorSiteSchemas;
74
+ };
75
+
76
+ export type CmsSiteUpdatePatch = Partial<
77
+ Pick<CmsEditorSite, 'name' | 'initials' | 'domain' | 'edited' | 'color' | 'theme' | 'schemas'>
78
+ >;
79
+
48
80
  export type CmsEditorSelection = {
49
81
  kind: CmsEditorTargetKind;
50
82
  pageId: string | null;