@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,262 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AgentSam CMS CLI — scaffold / import theme / local multipage runtime.
4
+ * Bin entry must remain a plain relative .js path so npm publish keeps it.
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { spawnSync } from 'node:child_process';
9
+ import { fileURLToPath, pathToFileURL } from 'node:url';
10
+
11
+ const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
12
+ const sdkRoot = path.resolve(packageRoot, '../..');
13
+ const manifestPath = path.join(packageRoot, 'agentsam.app.json');
14
+ const PERSISTENCE = new Set(['sqlite', 'd1']);
15
+ const STARTERS = new Set(['heuristic', 'blank', 'iasf', 'import']);
16
+
17
+ function usage() {
18
+ console.log(`
19
+ AgentSam website + CMS kit
20
+
21
+ agentsam-cms --help
22
+ agentsam-cms info
23
+ agentsam-cms doctor
24
+ agentsam-cms create <directory> --starter heuristic|blank|iasf|import [--theme <path>] [--persistence sqlite|d1]
25
+ agentsam-cms import-theme <sourceDirOrZip> --out <theme-pack-dir>
26
+ agentsam-cms dev [--db <sqlitePath>] [--site <siteId>] [--port 4317]
27
+ agentsam-cms scaffold <directory> [--persistence sqlite|d1] (legacy alias of create --starter heuristic)
28
+ agentsam-cms preview
29
+
30
+ Local-first:
31
+ create → SQLite + starter/theme → agentsam-cms dev
32
+ → http://localhost:4317/ public multipage site
33
+ → http://localhost:4317/cms protected CMS surface
34
+ `.trim());
35
+ }
36
+
37
+ function info() {
38
+ console.log(JSON.stringify(JSON.parse(fs.readFileSync(manifestPath, 'utf8')), null, 2));
39
+ }
40
+
41
+ function doctor() {
42
+ const required = ['frontend', 'backend', 'shared', 'bin', 'package.json', 'agentsam.app.json', 'dist'];
43
+ const missing = required.filter((rel) => !fs.existsSync(path.join(packageRoot, rel)));
44
+ if (missing.length) {
45
+ console.error('doctor failed; missing:', missing.join(', '));
46
+ process.exit(1);
47
+ }
48
+ for (const rel of ['dist/index.js', 'dist/sqlite-adapter.js', 'dist/import/index.js', 'dist/local/index.js']) {
49
+ if (!fs.existsSync(path.join(packageRoot, rel))) {
50
+ console.error(`doctor failed; run npm run build (missing ${rel})`);
51
+ process.exit(1);
52
+ }
53
+ }
54
+ console.log('✓ client-cms-editor layout ok');
55
+ }
56
+
57
+ async function loadDist(rel) {
58
+ return import(pathToFileURL(path.join(packageRoot, rel)).href);
59
+ }
60
+
61
+ function parseArgs(args) {
62
+ const out = { _: [] };
63
+ for (let i = 0; i < args.length; i += 1) {
64
+ const a = args[i];
65
+ if (a.startsWith('--')) {
66
+ const key = a.slice(2);
67
+ const val = args[i + 1] && !args[i + 1].startsWith('--') ? args[++i] : true;
68
+ out[key] = val;
69
+ } else {
70
+ out._.push(a);
71
+ }
72
+ }
73
+ return out;
74
+ }
75
+
76
+ async function importThemeCmd(args) {
77
+ const parsed = parseArgs(args);
78
+ const source = parsed._[0];
79
+ const outDir = parsed.out;
80
+ if (!source || !outDir) throw new Error('usage: agentsam-cms import-theme <source> --out <dir>');
81
+ const { importThemeFromSource } = await loadDist('dist/import/index.js');
82
+ const pack = importThemeFromSource(path.resolve(source), {
83
+ outDir: path.resolve(outDir),
84
+ packId: typeof parsed['pack-id'] === 'string' ? parsed['pack-id'] : undefined,
85
+ });
86
+ console.log(`✓ imported theme → ${path.resolve(outDir)}`);
87
+ console.log(` pages: ${pack.manifest.pages.join(', ')}`);
88
+ console.log(` assets: ${pack.manifest.assetCount} · donor candidates: ${pack.donorCandidates.length}`);
89
+ }
90
+
91
+ async function createCmd(args) {
92
+ const parsed = parseArgs(args);
93
+ const target = parsed._[0];
94
+ if (!target) throw new Error('create requires a target directory');
95
+ const starter = String(parsed.starter || 'heuristic');
96
+ if (!STARTERS.has(starter)) throw new Error(`unsupported starter "${starter}"; choose heuristic|blank|iasf|import`);
97
+ const persistence = String(parsed.persistence || 'sqlite');
98
+ if (!PERSISTENCE.has(persistence)) {
99
+ throw new Error(`unsupported persistence "${persistence}"; choose sqlite or d1`);
100
+ }
101
+ if (starter === 'import' && !parsed.theme) {
102
+ throw new Error('create --starter import requires --theme <directory-or-zip>');
103
+ }
104
+
105
+ const targetRoot = path.resolve(process.cwd(), target);
106
+ if (fs.existsSync(targetRoot) && fs.readdirSync(targetRoot).length) {
107
+ throw new Error(`target directory is not empty: ${targetRoot}`);
108
+ }
109
+ fs.mkdirSync(targetRoot, { recursive: true });
110
+ fs.mkdirSync(path.join(targetRoot, '.agentsam', 'assets'), { recursive: true });
111
+ fs.mkdirSync(path.join(targetRoot, 'public'), { recursive: true });
112
+
113
+ const cfg = {
114
+ schema: 'agentsam.cms.project.v1',
115
+ starter,
116
+ persistence,
117
+ siteId: starter === 'import' ? 'imported' : starter,
118
+ dbPath: '.agentsam/cms.sqlite',
119
+ assetsDir: '.agentsam/assets',
120
+ port: 4317,
121
+ cmsBase: '/cms',
122
+ auth: { mode: 'local-dev-principal' },
123
+ };
124
+ fs.writeFileSync(path.join(targetRoot, 'cms.config.json'), `${JSON.stringify(cfg, null, 2)}\n`);
125
+ fs.writeFileSync(
126
+ path.join(targetRoot, 'agentsam.app.json'),
127
+ `${JSON.stringify(
128
+ {
129
+ schema: 'agentsam.app.v1',
130
+ id: path.basename(targetRoot),
131
+ product_id: 'cms',
132
+ name: path.basename(targetRoot),
133
+ kind: 'customer-site',
134
+ package: '@inneranimalmedia/client-cms-editor',
135
+ },
136
+ null,
137
+ 2,
138
+ )}\n`,
139
+ );
140
+
141
+ if (persistence !== 'sqlite') {
142
+ console.log(`✓ created project shell at ${targetRoot} (persistence=${persistence})`);
143
+ console.log(' connect a CmsEditorAdapter before dev; local SQLite path skipped');
144
+ return;
145
+ }
146
+
147
+ const { SqliteCmsAdapter } = await loadDist('dist/sqlite-adapter.js');
148
+ const rootMod = await loadDist('dist/index.js');
149
+ const { installStarterPack } = rootMod;
150
+ const dbPath = path.join(targetRoot, cfg.dbPath);
151
+ const adapter = new SqliteCmsAdapter(dbPath);
152
+ try {
153
+ let pack;
154
+ if (starter === 'heuristic') {
155
+ pack = rootMod.heuristicStarterPack;
156
+ } else if (starter === 'blank') {
157
+ pack = rootMod.blankStarterPack;
158
+ } else if (starter === 'iasf') {
159
+ pack = rootMod.iasfStarterPack;
160
+ if (!pack) throw new Error('iasfStarterPack export missing — rebuild client-cms-editor');
161
+ } else {
162
+ const { importThemeFromSource } = await loadDist('dist/import/index.js');
163
+ const themeOut = path.join(targetRoot, 'starter', 'imported-theme-pack');
164
+ const themePack = importThemeFromSource(path.resolve(String(parsed.theme)), {
165
+ outDir: themeOut,
166
+ packId: 'imported',
167
+ });
168
+ pack = themePack.starterPack;
169
+ cfg.themePack = 'starter/imported-theme-pack';
170
+ fs.writeFileSync(path.join(targetRoot, 'cms.config.json'), `${JSON.stringify(cfg, null, 2)}\n`);
171
+ }
172
+
173
+ const installed = await installStarterPack(adapter, pack, { siteId: cfg.siteId });
174
+ for (const pageId of installed.pageIds) {
175
+ await adapter.publish(pageId);
176
+ }
177
+ console.log(`✓ created ${starter} project at ${targetRoot}`);
178
+ console.log(` sqlite: ${cfg.dbPath}`);
179
+ console.log(` pages published: ${installed.pageIds.length}`);
180
+ console.log(` next: cd ${target} && npx agentsam-cms dev`);
181
+ } finally {
182
+ adapter.close();
183
+ }
184
+ }
185
+
186
+ async function devCmd(args) {
187
+ const parsed = parseArgs(args);
188
+ const cwd = process.cwd();
189
+ const cfgPath = path.join(cwd, 'cms.config.json');
190
+ const cfg = fs.existsSync(cfgPath) ? JSON.parse(fs.readFileSync(cfgPath, 'utf8')) : {};
191
+ const dbPath = path.resolve(cwd, String(parsed.db || cfg.dbPath || '.agentsam/cms.sqlite'));
192
+ const siteId = String(parsed.site || cfg.siteId || 'heuristic');
193
+ const port = Number(parsed.port || cfg.port || 4317);
194
+
195
+ if (!fs.existsSync(dbPath)) {
196
+ throw new Error(`sqlite db missing at ${dbPath} — run agentsam-cms create first`);
197
+ }
198
+
199
+ const { SqliteCmsAdapter } = await loadDist('dist/sqlite-adapter.js');
200
+ const { startLocalCmsRuntime } = await loadDist('dist/local/index.js');
201
+ const adapter = new SqliteCmsAdapter(dbPath);
202
+ const runtime = await startLocalCmsRuntime({
203
+ adapter,
204
+ siteId,
205
+ port,
206
+ cmsBase: cfg.cmsBase || '/cms',
207
+ });
208
+ console.log(`✓ local CMS runtime`);
209
+ console.log(` public ${runtime.origin}/`);
210
+ console.log(` cms ${runtime.origin}/cms`);
211
+ console.log(` sqlite ${dbPath}`);
212
+ console.log(' Ctrl+C to stop');
213
+
214
+ const shutdown = async () => {
215
+ await runtime.close();
216
+ adapter.close();
217
+ process.exit(0);
218
+ };
219
+ process.on('SIGINT', shutdown);
220
+ process.on('SIGTERM', shutdown);
221
+ }
222
+
223
+ function preview(args) {
224
+ const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
225
+ const script = pkg.scripts?.preview ? 'preview' : pkg.scripts?.dev ? 'dev' : null;
226
+ if (!script) {
227
+ console.error('no preview/dev script in package.json');
228
+ process.exit(1);
229
+ }
230
+ const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
231
+ const result = spawnSync(npmCmd, ['run', script, '--', ...args], {
232
+ cwd: packageRoot,
233
+ stdio: 'inherit',
234
+ shell: process.platform === 'win32',
235
+ });
236
+ process.exit(result.status ?? 1);
237
+ }
238
+
239
+ function scaffoldLegacy(args) {
240
+ const parsed = parseArgs(args);
241
+ return createCmd([parsed._[0], '--starter', 'heuristic', '--persistence', parsed.persistence || 'sqlite'].filter(Boolean));
242
+ }
243
+
244
+ const [cmd = 'help', ...rest] = process.argv.slice(2);
245
+ try {
246
+ if (cmd === '--help' || cmd === '-h' || cmd === 'help') usage();
247
+ else if (cmd === 'info') info();
248
+ else if (cmd === 'doctor') doctor();
249
+ else if (cmd === 'create') await createCmd(rest);
250
+ else if (cmd === 'import-theme') await importThemeCmd(rest);
251
+ else if (cmd === 'dev') await devCmd(rest);
252
+ else if (cmd === 'scaffold') await scaffoldLegacy(rest);
253
+ else if (cmd === 'preview') preview(rest);
254
+ else {
255
+ console.error(`unknown command: ${cmd}`);
256
+ usage();
257
+ process.exit(1);
258
+ }
259
+ } catch (err) {
260
+ console.error(String(err?.message || err));
261
+ process.exit(1);
262
+ }
@@ -1,229 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { spawnSync } from 'node:child_process';
5
- import { fileURLToPath } from 'node:url';
6
-
7
- const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
8
- const sdkRoot = path.resolve(packageRoot, '../..');
9
- const manifestPath = path.join(packageRoot, 'agentsam.app.json');
10
- const PERSISTENCE = new Set(['sqlite', 'd1', 'localStorage']);
11
-
12
- function usage() {
13
- console.log(`
14
- AgentSam CMS Editor
15
-
16
- agentsam-cms [preview]
17
- agentsam-cms info
18
- agentsam-cms doctor
19
- agentsam-cms scaffold <directory> [--persistence sqlite|d1|localStorage]
20
-
21
- preview
22
- Run the app preview script when present.
23
-
24
- info
25
- Print the AgentSam app manifest.
26
-
27
- doctor
28
- Verify frontend/backend/shared layout.
29
-
30
- scaffold
31
- Copy editable source into a new directory.
32
- sqlite local authority for desktop/offline use
33
- d1 cloud authority through the CMS API
34
- localStorage browser draft cache only; never authoritative
35
- `.trim());
36
- }
37
-
38
- function info() {
39
- console.log(JSON.stringify(JSON.parse(fs.readFileSync(manifestPath, 'utf8')), null, 2));
40
- }
41
-
42
- function doctor() {
43
- const required = ['frontend', 'backend', 'shared', 'bin', 'package.json', 'agentsam.app.json'];
44
- const missing = required.filter((rel) => !fs.existsSync(path.join(packageRoot, rel)));
45
- if (missing.length) {
46
- console.error('doctor failed; missing:', missing.join(', '));
47
- process.exit(1);
48
- }
49
- console.log('✓ client-cms-editor layout ok');
50
- }
51
-
52
- function parseScaffoldArgs(args) {
53
- const target = args[0];
54
- let persistence = 'sqlite';
55
- for (let i = 1; i < args.length; i += 1) {
56
- if (args[i] === '--persistence') {
57
- persistence = String(args[i + 1] || '').trim();
58
- i += 1;
59
- }
60
- }
61
- if (!PERSISTENCE.has(persistence)) {
62
- throw new Error(`unsupported persistence "${persistence}"; choose sqlite, d1, or localStorage`);
63
- }
64
- return { target, persistence };
65
- }
66
-
67
- const COPY_SKIP = new Set(['node_modules', 'dist', 'coverage', '.git', '.wrangler', '.agentsam']);
68
-
69
- function copySource(source, target) {
70
- fs.cpSync(source, target, {
71
- recursive: true,
72
- filter(candidate) {
73
- if (candidate === source) return true;
74
- return !candidate
75
- .split(path.sep)
76
- .some((part) => COPY_SKIP.has(part));
77
- },
78
- });
79
- }
80
-
81
- function readJson(file) {
82
- return JSON.parse(fs.readFileSync(file, 'utf8'));
83
- }
84
-
85
- function writeJson(file, value) {
86
- fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}
87
- `);
88
- }
89
-
90
- function makeStandaloneWorkspace(targetRoot) {
91
- const rootPackage = path.join(targetRoot, 'package.json');
92
- const rootPkg = readJson(rootPackage);
93
- rootPkg.workspaces = [...new Set([...(rootPkg.workspaces || []), 'packages/*'])];
94
- writeJson(rootPackage, rootPkg);
95
-
96
- const packageFiles = [
97
- path.join(targetRoot, 'frontend/package.json'),
98
- path.join(targetRoot, 'shared/cms/package.json'),
99
- ];
100
- for (const file of packageFiles) {
101
- if (!fs.existsSync(file)) continue;
102
- const pkg = readJson(file);
103
- for (const section of ['dependencies', 'devDependencies']) {
104
- if (!pkg[section]) continue;
105
- for (const name of [
106
- '@inneranimalmedia/agentsam-contracts',
107
- '@inneranimalmedia/agentsam-workbench',
108
- ]) {
109
- if (pkg[section][name]?.startsWith?.('file:')) pkg[section][name] = '0.1.0';
110
- }
111
- }
112
- writeJson(file, pkg);
113
- }
114
- }
115
-
116
- function runtimeConfig(persistence) {
117
- if (persistence === 'sqlite') {
118
- return {
119
- schema: 'agentsam.cms.runtime.v1',
120
- app_id: 'client-cms-editor',
121
- run_target: 'local',
122
- authority: 'sqlite',
123
- cache: 'localStorage',
124
- cache_only: false,
125
- };
126
- }
127
- if (persistence === 'd1') {
128
- return {
129
- schema: 'agentsam.cms.runtime.v1',
130
- app_id: 'client-cms-editor',
131
- run_target: 'cloudflare',
132
- authority: 'd1',
133
- cache: 'localStorage',
134
- cache_only: false,
135
- };
136
- }
137
- return {
138
- schema: 'agentsam.cms.runtime.v1',
139
- app_id: 'client-cms-editor',
140
- run_target: 'browser',
141
- authority: null,
142
- cache: 'localStorage',
143
- cache_only: true,
144
- note: 'localStorage is a draft/offline cache only; configure SQLite or D1 before authoritative publish.',
145
- };
146
- }
147
-
148
- function scaffold(targetArg, { persistence = 'sqlite' } = {}) {
149
- if (!targetArg) throw new Error('scaffold requires a target directory');
150
- const targetRoot = path.resolve(process.cwd(), targetArg);
151
- if (fs.existsSync(targetRoot) && fs.readdirSync(targetRoot).length) {
152
- throw new Error(`target directory is not empty: ${targetRoot}`);
153
- }
154
- fs.mkdirSync(targetRoot, { recursive: true });
155
-
156
- for (const relative of [
157
- 'frontend',
158
- 'backend',
159
- 'shared',
160
- 'bin',
161
- '.gitignore',
162
- 'package.json',
163
- 'README.md',
164
- 'agentsam.app.json',
165
- 'IMPORT_PROVENANCE.json',
166
- ]) {
167
- const source = path.join(packageRoot, relative);
168
- if (!fs.existsSync(source)) continue;
169
- copySource(source, path.join(targetRoot, relative));
170
- }
171
-
172
- const portablePackages = [
173
- 'agentsam-contracts',
174
- 'agentsam-workbench',
175
- ];
176
- for (const name of portablePackages) {
177
- const source = path.join(sdkRoot, 'packages', name);
178
- if (!fs.existsSync(source)) {
179
- throw new Error(`required scaffold package missing: packages/${name}`);
180
- }
181
- copySource(source, path.join(targetRoot, 'packages', name));
182
- }
183
- makeStandaloneWorkspace(targetRoot);
184
-
185
- const stateDir = path.join(targetRoot, '.agentsam');
186
- fs.mkdirSync(stateDir, { recursive: true });
187
- fs.writeFileSync(
188
- path.join(stateDir, 'cms-runtime.json'),
189
- `${JSON.stringify(runtimeConfig(persistence), null, 2)}\n`,
190
- );
191
-
192
- console.log(`✓ scaffolded CMS editor into ${targetRoot}`);
193
- console.log(` persistence: ${persistence}${persistence === 'localStorage' ? ' (cache only)' : ''}`);
194
- }
195
-
196
- function preview(args) {
197
- const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8'));
198
- const script = pkg.scripts?.preview ? 'preview' : pkg.scripts?.dev ? 'dev' : null;
199
- if (!script) {
200
- console.error('no preview/dev script in package.json');
201
- process.exit(1);
202
- }
203
- const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
204
- const result = spawnSync(npmCmd, ['run', script, '--', ...args], {
205
- cwd: packageRoot,
206
- stdio: 'inherit',
207
- shell: process.platform === 'win32',
208
- });
209
- process.exit(result.status ?? 1);
210
- }
211
-
212
- const [cmd = 'preview', ...rest] = process.argv.slice(2);
213
- try {
214
- if (cmd === '--help' || cmd === '-h' || cmd === 'help') usage();
215
- else if (cmd === 'info') info();
216
- else if (cmd === 'doctor') doctor();
217
- else if (cmd === 'scaffold') {
218
- const { target, persistence } = parseScaffoldArgs(rest);
219
- scaffold(target, { persistence });
220
- } else if (cmd === 'preview') preview(rest);
221
- else {
222
- console.error(`unknown command: ${cmd}`);
223
- usage();
224
- process.exit(1);
225
- }
226
- } catch (err) {
227
- console.error(String(err?.message || err));
228
- process.exit(1);
229
- }
2
+ /** Re-export shim — canonical CLI entry is agentsam-cms.js (npm-publish safe). */
3
+ import './agentsam-cms.js';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@inneranimalmedia/agentsam-cms-frontend",
3
- "version": "0.1.0",
4
- "private": true,
3
+ "version": "2.6.7",
4
+ "description": "Internal CMS frontend (bundled into @inneranimalmedia/client-cms-editor — not published separately).",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./src/index.ts",
@@ -15,10 +15,8 @@
15
15
  "test": "vitest run --passWithNoTests"
16
16
  },
17
17
  "dependencies": {
18
- "@inneranimalmedia/agentsam-cms-backend": "0.1.0",
19
- "@inneranimalmedia/agentsam-cms-shared": "0.1.0",
20
- "@inneranimalmedia/agentsam-contracts": "file:../../../packages/agentsam-contracts",
21
- "@inneranimalmedia/agentsam-workbench": "file:../../../packages/agentsam-workbench",
18
+ "@inneranimalmedia/agentsam-cms-backend": "2.6.7",
19
+ "@inneranimalmedia/agentsam-cms-shared": "2.6.7",
22
20
  "react": "^19.2.0",
23
21
  "react-dom": "^19.2.0"
24
22
  },
@@ -29,5 +27,16 @@
29
27
  "typescript": "^5.9.3",
30
28
  "vite": "^6.4.3",
31
29
  "vitest": "^4.1.11"
32
- }
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
37
+ "directory": "apps/client-cms-editor/frontend"
38
+ },
39
+ "files": [
40
+ "src"
41
+ ]
33
42
  }
@@ -1,14 +1,9 @@
1
- import { useEffect, useMemo, useRef, useState } from 'react';
2
- import type { AgentPrincipal, AgentWorkbenchAdapter } from '@inneranimalmedia/agentsam-contracts';
3
- import { ConnectedAgentPanel } from '@inneranimalmedia/agentsam-workbench/agent';
4
- import { createCmsAgentContextProvider } from '@inneranimalmedia/agentsam-cms-shared';
1
+ import { useEffect, useRef, useState } from 'react';
5
2
  import './styles/agentsam-drawer.css';
6
3
 
7
4
  export type AgentSamDrawerProps = {
8
5
  open: boolean;
9
6
  onClose: () => void;
10
- adapter?: AgentWorkbenchAdapter | null;
11
- principal?: AgentPrincipal | null;
12
7
  projectId: string;
13
8
  conversationId: string;
14
9
  route?: string;
@@ -18,40 +13,22 @@ export type AgentSamDrawerProps = {
18
13
  selectionLabel?: string | null;
19
14
  pendingPrompt?: string | null;
20
15
  onPendingPromptConsumed?: () => void;
16
+ /** Host-provided live AgentSam panel; when omitted, demo shell is shown. */
17
+ children?: React.ReactNode;
21
18
  };
22
19
 
23
20
  /**
24
- * FnF-style AgentSam Side Assistant — docked slide-in chat.
25
- * Ports fuelnfreetime admin agentsam drawer UX into the CMS editor shell.
21
+ * CMS side-assistant chrome. Live AgentSam UI is injected by the host via children.
22
+ * Core package never imports agentsam-workbench.
26
23
  */
27
24
  export function AgentSamDrawer({
28
25
  open,
29
26
  onClose,
30
- adapter,
31
- principal,
32
- projectId,
33
- conversationId,
34
- route,
35
- pageId,
36
- sectionId,
37
- blockId,
38
27
  selectionLabel,
39
28
  pendingPrompt,
40
29
  onPendingPromptConsumed,
30
+ children,
41
31
  }: AgentSamDrawerProps) {
42
- const contextProvider = useMemo(() => createCmsAgentContextProvider(() => ({
43
- principal: principal || {
44
- accountId: 'demo',
45
- authUserId: 'demo',
46
- displayName: 'Demo',
47
- },
48
- projectId,
49
- route,
50
- pageId,
51
- sectionId,
52
- blockId,
53
- })), [principal, projectId, route, pageId, sectionId, blockId]);
54
-
55
32
  const status = selectionLabel
56
33
  ? `Editing “${selectionLabel}”`
57
34
  : 'Context-aware admin chat';
@@ -84,16 +61,7 @@ export function AgentSamDrawer({
84
61
  </button>
85
62
  </header>
86
63
 
87
- {adapter ? (
88
- <ConnectedAgentPanel
89
- className="agentsam-connected"
90
- adapter={adapter}
91
- contextProvider={contextProvider}
92
- conversationId={conversationId}
93
- header={null}
94
- empty={<div className="agentsam-empty">Ask about this page, sections, or publish flow. I’ll use the current CMS selection.</div>}
95
- />
96
- ) : (
64
+ {children || (
97
65
  <DemoDrawerChat
98
66
  selectionLabel={selectionLabel}
99
67
  pendingPrompt={pendingPrompt}
@@ -117,7 +85,7 @@ function DemoDrawerChat({
117
85
  const [messages, setMessages] = useState<{ role: 'user' | 'assistant'; text: string }[]>([
118
86
  {
119
87
  role: 'assistant',
120
- text: 'Ask about this page, store operations, customers, content, or repository work. I’ll route the request using the current CMS context.',
88
+ text: 'Ask about this page or content. Bind a host AgentSam panel to run live tools — this shell is chrome only.',
121
89
  },
122
90
  ]);
123
91
  const [value, setValue] = useState('');
@@ -147,7 +115,7 @@ function DemoDrawerChat({
147
115
  ...prev,
148
116
  {
149
117
  role: 'assistant',
150
- text: `Got it${scope}. In demo mode this drawer mirrors the FnF Side Assistant — bind an AgentSam adapter to run live tools.`,
118
+ text: `Got it${scope}. No AgentSam host is attached — provide CmsAgentHost.renderDrawer from the consumer to enable live tools.`,
151
119
  },
152
120
  ]);
153
121
  setBusy(false);