@inneranimalmedia/agentsam-sdk 2.6.3 → 2.6.5

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 (608) hide show
  1. package/AGENTSAM.md +17 -0
  2. package/README.md +31 -10
  3. package/apps/client-cms-editor/AGENTS.md +12 -0
  4. package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
  5. package/apps/client-cms-editor/README.md +72 -0
  6. package/apps/client-cms-editor/agentsam.app.json +57 -0
  7. package/apps/client-cms-editor/backend/README.md +5 -0
  8. package/apps/client-cms-editor/backend/package.json +22 -0
  9. package/apps/client-cms-editor/backend/src/api/client.ts +200 -0
  10. package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +145 -0
  11. package/apps/client-cms-editor/backend/src/index.ts +6 -0
  12. package/apps/client-cms-editor/backend/src/model.ts +115 -0
  13. package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
  14. package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
  15. package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
  16. package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
  17. package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
  18. package/apps/client-cms-editor/backend/tsconfig.json +15 -0
  19. package/apps/client-cms-editor/backend/worker/index.js +34 -0
  20. package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
  21. package/apps/client-cms-editor/bin/agentsam-cms.mjs +229 -0
  22. package/apps/client-cms-editor/frontend/index.html +12 -0
  23. package/apps/client-cms-editor/frontend/package.json +33 -0
  24. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +188 -0
  25. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +191 -0
  26. package/apps/client-cms-editor/frontend/src/CmsEditor.tsx +1345 -0
  27. package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
  28. package/apps/client-cms-editor/frontend/src/index.ts +8 -0
  29. package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
  30. package/apps/client-cms-editor/frontend/src/main.tsx +17 -0
  31. package/apps/client-cms-editor/frontend/src/mount.tsx +51 -0
  32. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
  33. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
  34. package/apps/client-cms-editor/frontend/src/styles/studio.css +106 -0
  35. package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
  36. package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
  37. package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
  38. package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
  39. package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
  40. package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
  41. package/apps/client-cms-editor/frontend/tsconfig.json +25 -0
  42. package/apps/client-cms-editor/frontend/vite.config.ts +13 -0
  43. package/apps/client-cms-editor/package-lock.json +3832 -0
  44. package/apps/client-cms-editor/package.json +23 -0
  45. package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
  46. package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
  47. package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
  48. package/apps/client-cms-editor/shared/cms/package.json +21 -0
  49. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +35 -0
  50. package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
  51. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +58 -0
  52. package/apps/client-cms-editor/shared/cms/src/index.ts +5 -0
  53. package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
  54. package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
  55. package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
  56. package/bin/agentsam +16 -1
  57. package/bin/agentsam-rapid-rust +36 -0
  58. package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
  59. package/docs/BRAND_INTELLIGENCE.md +1 -1
  60. package/docs/MACHINE_INTELLIGENCE.md +120 -0
  61. package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
  62. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
  63. package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
  64. package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
  65. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +151 -0
  66. package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  67. package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
  68. package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
  69. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +36 -0
  70. package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
  71. package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
  72. package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
  73. package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
  74. package/docs/architecture/SAM_KERNEL.md +181 -0
  75. package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
  76. package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
  77. package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
  78. package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
  79. package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  80. package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
  81. package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
  82. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
  83. package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
  84. package/docs/contracts/capability-install-planner.md +67 -0
  85. package/docs/contracts/environment-vocabulary.md +195 -0
  86. package/docs/contracts/google-cloud-oauth-setup.md +199 -0
  87. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
  88. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
  89. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
  90. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
  91. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
  92. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
  93. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
  94. package/docs/plugins.md +2 -2
  95. package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
  96. package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
  97. package/docs/product/README.md +8 -0
  98. package/docs/rapid-rust-wasm.md +35 -0
  99. package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
  100. package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
  101. package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
  102. package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
  103. package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
  104. package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
  105. package/migrations/d1/0013_identity_oauth_states.sql +15 -0
  106. package/migrations/d1/0014_auth_event_log.sql +20 -0
  107. package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
  108. package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
  109. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
  110. package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
  111. package/package.json +88 -14
  112. package/packages/agentsam-brand/README.md +106 -11
  113. package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
  114. package/packages/agentsam-brand/package.json +39 -7
  115. package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
  116. package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
  117. package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
  118. package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
  119. package/packages/agentsam-brand/src/adapters/memory.js +31 -0
  120. package/packages/agentsam-brand/src/cli/controller.js +503 -0
  121. package/packages/agentsam-brand/src/cli/wizard.js +526 -0
  122. package/packages/agentsam-brand/src/core/capabilities.js +201 -0
  123. package/packages/agentsam-brand/src/core/derivatives.js +211 -0
  124. package/packages/agentsam-brand/src/core/errors.js +12 -0
  125. package/packages/agentsam-brand/src/core/ingest.js +195 -0
  126. package/packages/agentsam-brand/src/core/inspect.js +109 -0
  127. package/packages/agentsam-brand/src/core/keys.js +83 -0
  128. package/packages/agentsam-brand/src/core/naming.js +142 -0
  129. package/packages/agentsam-brand/src/core/optimize.js +316 -0
  130. package/packages/agentsam-brand/src/core/pack.js +305 -0
  131. package/packages/agentsam-brand/src/core/plan.js +276 -0
  132. package/packages/agentsam-brand/src/core/preview.js +159 -0
  133. package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
  134. package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
  135. package/packages/agentsam-brand/src/core/processors/index.js +148 -0
  136. package/packages/agentsam-brand/src/core/processors/native.js +82 -0
  137. package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
  138. package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
  139. package/packages/agentsam-brand/src/core/promote.js +288 -0
  140. package/packages/agentsam-brand/src/core/receipts.js +155 -0
  141. package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
  142. package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
  143. package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
  144. package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
  145. package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
  146. package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
  147. package/packages/agentsam-brand/src/index.js +193 -36
  148. package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
  149. package/packages/agentsam-brand/src/presets/favicon.json +17 -0
  150. package/packages/agentsam-brand/src/presets/hero.json +12 -0
  151. package/packages/agentsam-brand/src/presets/index.js +40 -0
  152. package/packages/agentsam-brand/src/presets/logo.json +12 -0
  153. package/packages/agentsam-brand/src/presets/model.json +8 -0
  154. package/packages/agentsam-brand/src/presets/og-image.json +10 -0
  155. package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
  156. package/packages/agentsam-brand/src/presets/social-image.json +10 -0
  157. package/packages/agentsam-brand/src/presets/web-image.json +10 -0
  158. package/packages/agentsam-contracts/src/artifacts.ts +41 -0
  159. package/packages/agentsam-contracts/src/errors.ts +16 -0
  160. package/packages/agentsam-errors/src/envelope.js +53 -0
  161. package/packages/agentsam-errors/src/index.js +1 -0
  162. package/packages/agentsam-errors/src/recovery.js +301 -0
  163. package/packages/agentsam-knowledge/src/autorag/index.js +1 -1
  164. package/packages/agentsam-knowledge/src/providers/index.js +20 -6
  165. package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
  166. package/packages/agentsam-knowledge/test/autorag.test.mjs +22 -1
  167. package/packages/agentsam-nav/package.json +2 -2
  168. package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
  169. package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
  170. package/packages/agentsam-rapid-rust/README.md +5 -0
  171. package/packages/agentsam-rapid-rust/src/main.rs +718 -0
  172. package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
  173. package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
  174. package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
  175. package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
  176. package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
  177. package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
  178. package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
  179. package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
  180. package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
  181. package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
  182. package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
  183. package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
  184. package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
  185. package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
  186. package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
  187. package/packages/agentsam-repository/src/index.js +1 -0
  188. package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
  189. package/packages/agentsam-repository/src/source-types.js +85 -0
  190. package/packages/agentsam-vault/README.md +96 -0
  191. package/packages/agentsam-vault/package.json +32 -0
  192. package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
  193. package/packages/agentsam-vault/src/contracts/credential.js +132 -0
  194. package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
  195. package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
  196. package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
  197. package/packages/agentsam-vault/src/index.d.ts +9 -0
  198. package/packages/agentsam-vault/src/index.js +27 -0
  199. package/packages/agentsam-vault/src/providers/registry.js +90 -0
  200. package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
  201. package/packages/agentsam-workbench/README.md +24 -0
  202. package/packages/agentsam-workbench/package.json +38 -0
  203. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
  204. package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
  205. package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
  206. package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
  207. package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
  208. package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
  209. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
  210. package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
  211. package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
  212. package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
  213. package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
  214. package/packages/agentsam-workbench/src/agent/index.ts +10 -0
  215. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
  216. package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
  217. package/packages/agentsam-workbench/src/browser/index.ts +1 -0
  218. package/packages/agentsam-workbench/src/index.ts +6 -0
  219. package/packages/agentsam-workbench/src/project-control.css +160 -0
  220. package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
  221. package/packages/agentsam-workbench/src/projects/index.ts +1 -0
  222. package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
  223. package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
  224. package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
  225. package/packages/agentsam-workbench/src/shell/index.ts +4 -0
  226. package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
  227. package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
  228. package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
  229. package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
  230. package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
  231. package/packages/agentsam-workbench/tsconfig.json +13 -0
  232. package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
  233. package/packages/connectors/cloudflare/package.json +3 -1
  234. package/packages/connectors/cloudflare/src/api-client.js +279 -0
  235. package/packages/connectors/cloudflare/src/capabilities.js +585 -0
  236. package/packages/connectors/cloudflare/src/credential.js +318 -0
  237. package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
  238. package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
  239. package/packages/connectors/cloudflare/src/families/pages.js +151 -0
  240. package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
  241. package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
  242. package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
  243. package/packages/connectors/cloudflare/src/families/tags.js +124 -0
  244. package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
  245. package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
  246. package/packages/connectors/cloudflare/src/index.js +102 -265
  247. package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
  248. package/packages/connectors/cloudflare/src/owner.js +42 -12
  249. package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
  250. package/packages/connectors/cloudflare/src/routes.js +318 -144
  251. package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
  252. package/packages/connectors/cloudflare/src/vault.js +2 -2
  253. package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
  254. package/packages/connectors/cloudflare/tests/connector.test.mjs +51 -30
  255. package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
  256. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  257. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +22 -2
  258. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
  259. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +31 -2
  260. package/packages/identity/README.md +1 -1
  261. package/packages/identity/backend/README.md +1 -1
  262. package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
  263. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +32 -0
  264. package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
  265. package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
  266. package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
  267. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
  268. package/packages/identity/package.json +3 -2
  269. package/packages/identity/scripts/local-identity-bridge.mjs +184 -0
  270. package/packages/identity/scripts/preview-auth-portal.mjs +7 -7
  271. package/packages/identity/src/adapters/cloudflare-d1/index.js +153 -24
  272. package/packages/identity/src/adapters/sqlite/index.js +322 -0
  273. package/packages/identity/src/app/verify-app.js +95 -0
  274. package/packages/identity/src/contracts/auth-config.js +28 -8
  275. package/packages/identity/src/contracts/external-identity.js +1 -1
  276. package/packages/identity/src/contracts/identity-store.js +115 -0
  277. package/packages/identity/src/contracts/provider.js +1 -0
  278. package/packages/identity/src/contracts/route-ids.js +30 -0
  279. package/packages/identity/src/contracts/route-projection.js +218 -0
  280. package/packages/identity/src/contracts/routes.js +11 -0
  281. package/packages/identity/src/core/browser-paths.js +4 -5
  282. package/packages/identity/src/core/constants.js +13 -8
  283. package/packages/identity/src/core/session-policy.js +32 -0
  284. package/packages/identity/src/frontend/auth-portal/README.md +2 -1
  285. package/packages/identity/src/frontend/auth-portal/pages/login.html +16 -15
  286. package/packages/identity/src/frontend/auth-portal/pages/reset.html +9 -8
  287. package/packages/identity/src/frontend/auth-portal/pages/signup.html +9 -8
  288. package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
  289. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  290. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +207 -0
  291. package/packages/identity/src/index.js +41 -0
  292. package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
  293. package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
  294. package/packages/identity/src/migrations/README.md +5 -2
  295. package/packages/identity/src/oauth/README.md +19 -8
  296. package/packages/identity/src/oauth/consent-view.js +388 -0
  297. package/packages/identity/src/oauth/credentials.js +46 -19
  298. package/packages/identity/src/oauth/finalize-inbound.js +1 -1
  299. package/packages/identity/src/oauth/google-desktop-exchange.js +173 -0
  300. package/packages/identity/src/oauth/iam-platform.js +8 -7
  301. package/packages/identity/src/oauth/redirect-paths.js +27 -36
  302. package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
  303. package/packages/identity/src/providers/cloudflare/profile.js +49 -14
  304. package/packages/identity/src/providers/iam/index.js +27 -5
  305. package/packages/identity/src/server/identity-service.js +61 -15
  306. package/packages/identity/src/server/mount-policy.js +30 -0
  307. package/packages/identity/src/server/post-auth.js +79 -0
  308. package/packages/identity/src/server/worker-router.js +208 -146
  309. package/packages/identity/tests/auth-config.test.mjs +3 -2
  310. package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
  311. package/packages/identity/tests/iam-provider.test.mjs +1 -1
  312. package/packages/identity/tests/identity-init-scaffold.test.mjs +3 -0
  313. package/packages/identity/tests/identity-service.test.mjs +52 -5
  314. package/packages/identity/tests/native-session-worker.test.mjs +64 -0
  315. package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
  316. package/packages/identity/tests/oauth-credentials.test.mjs +20 -5
  317. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
  318. package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
  319. package/packages/identity/tests/preview-auth-portal.test.mjs +3 -3
  320. package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
  321. package/packages/runtime-protocol/src/index.js +154 -0
  322. package/packages/theme-church-site/package.json +2 -1
  323. package/packages/theme-church-site/src/index.js +1 -0
  324. package/packages/theme-companions-site/package.json +2 -1
  325. package/packages/theme-companions-site/src/index.js +1 -0
  326. package/packages/theme-floors-site/package.json +2 -1
  327. package/packages/theme-floors-site/src/index.js +1 -0
  328. package/packages/theme-fuelnfree-site/package.json +2 -1
  329. package/packages/theme-fuelnfree-site/src/index.js +1 -0
  330. package/packages/theme-handyman-site/package.json +2 -1
  331. package/packages/theme-handyman-site/src/index.js +1 -0
  332. package/packages/theme-insurance-site/package.json +2 -1
  333. package/packages/theme-insurance-site/src/index.js +1 -0
  334. package/packages/theme-scenes/README.md +164 -0
  335. package/packages/theme-scenes/package.json +53 -0
  336. package/packages/theme-scenes/src/blocks/index.js +30 -0
  337. package/packages/theme-scenes/src/contracts/index.js +286 -0
  338. package/packages/theme-scenes/src/demos/index.js +65 -0
  339. package/packages/theme-scenes/src/index.js +75 -0
  340. package/packages/theme-scenes/src/presets/index.js +263 -0
  341. package/packages/theme-scenes/src/runtime/compile.js +119 -0
  342. package/packages/theme-scenes/src/scenes/index.js +146 -0
  343. package/packages/theme-scenes/src/shell/index.js +47 -0
  344. package/packages/theme-scenes/src/themes/index.js +129 -0
  345. package/packages/theme-scenes/src/visuals/index.js +41 -0
  346. package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
  347. package/packages/theme-shinshu-site/package.json +2 -1
  348. package/packages/theme-shinshu-site/src/index.js +1 -0
  349. package/packages/work-graph/src/index.js +34 -1
  350. package/packages/work-graph/src/renderers/gantt-model.js +24 -0
  351. package/packages/work-graph/test/work-graph.test.mjs +27 -7
  352. package/protocol/README.md +15 -7
  353. package/protocol/apps/agentsam.app.v1.schema.json +133 -0
  354. package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
  355. package/protocol/assets/README.md +9 -0
  356. package/protocol/assets/asset-record.v1.schema.json +64 -0
  357. package/protocol/brand/brandpack.v1.schema.json +43 -0
  358. package/protocol/credentials/issue.v1.schema.json +38 -0
  359. package/protocol/database/connection.v1.schema.json +41 -0
  360. package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
  361. package/protocol/errors/error-envelope.schema.json +135 -1
  362. package/protocol/errors/recovery.v1.schema.json +50 -0
  363. package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
  364. package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
  365. package/protocol/sam/activity.v1.schema.json +48 -0
  366. package/protocol/sam/answer.v1.schema.json +35 -0
  367. package/protocol/sam/calibration.v1.schema.json +21 -0
  368. package/protocol/sam/decision-receipt.v1.schema.json +29 -0
  369. package/protocol/sam/evaluation.v1.schema.json +19 -0
  370. package/protocol/sam/operation.schema.json +66 -0
  371. package/protocol/sam/outcome.v1.schema.json +36 -0
  372. package/protocol/sam/question.v1.schema.json +26 -0
  373. package/protocol/sam/registry.seed.json +153 -0
  374. package/protocol/sam/result.schema.json +53 -0
  375. package/protocol/sam/state.v1.schema.json +23 -0
  376. package/protocol/scoring/README.md +10 -0
  377. package/protocol/scoring/scorecard.v1.schema.json +65 -0
  378. package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
  379. package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
  380. package/protocol/ui/icon-registry.mjs +227 -0
  381. package/protocol/ui/icon.v1.schema.json +51 -0
  382. package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
  383. package/registry/cms-rust-machine-20260928/manifest.json +22 -0
  384. package/registry/cms-rust-machine-20260928/migration.sql +237 -0
  385. package/registry/cms-rust-machine-20260928/receipt.json +21 -0
  386. package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
  387. package/scripts/build_rapid_rust_cli.py +83 -0
  388. package/skills/README.md +22 -9
  389. package/skills/agentsam-codebaseindex/SKILL.md +225 -0
  390. package/skills/catalog.json +14 -0
  391. package/src/attachments/index.js +6 -0
  392. package/src/attachments/intake.js +235 -0
  393. package/src/capabilities/repository-snapshot.js +19 -2
  394. package/src/cli/command-catalog.js +138 -0
  395. package/src/cli/dispatch.js +48 -0
  396. package/src/cli.js +225 -27
  397. package/src/commands/account-auth.js +94 -8
  398. package/src/commands/api-key.js +244 -0
  399. package/src/commands/app.js +365 -29
  400. package/src/commands/billing.js +127 -0
  401. package/src/commands/brand.js +86 -74
  402. package/src/commands/cheat-sheet.js +154 -0
  403. package/src/commands/cloudflare-login.js +222 -0
  404. package/src/commands/cloudflare.js +453 -23
  405. package/src/commands/codebaseindex.js +693 -0
  406. package/src/commands/compute.js +4 -0
  407. package/src/commands/connections.js +11 -5
  408. package/src/commands/credentials.js +116 -0
  409. package/src/commands/env.js +152 -25
  410. package/src/commands/gcloud-auth.js +427 -0
  411. package/src/commands/go.js +366 -53
  412. package/src/commands/google-cloud.js +375 -0
  413. package/src/commands/identity-init.js +2 -2
  414. package/src/commands/interaction-clack.js +115 -0
  415. package/src/commands/mcp.js +226 -33
  416. package/src/commands/models.js +1 -1
  417. package/src/commands/ollama.js +3 -2
  418. package/src/commands/plugins.js +7 -2
  419. package/src/commands/product.js +36 -0
  420. package/src/commands/providers.js +62 -14
  421. package/src/commands/runtime-status.js +28 -9
  422. package/src/commands/runtime.js +313 -0
  423. package/src/commands/rust.js +24 -0
  424. package/src/commands/setup.js +279 -0
  425. package/src/commands/shell.js +59 -5
  426. package/src/commands/skill.js +248 -0
  427. package/src/commands/skills.js +1 -1
  428. package/src/commands/start-local.js +6 -2
  429. package/src/commands/terminal.js +171 -0
  430. package/src/commands/update.js +140 -0
  431. package/src/commands/whoami.js +392 -56
  432. package/src/features/resolve.js +1 -0
  433. package/src/go/build.js +229 -39
  434. package/src/go/cloudflare.js +506 -105
  435. package/src/go/container.js +120 -0
  436. package/src/go/contract.js +9 -4
  437. package/src/go/discover.js +149 -33
  438. package/src/go/index.js +15 -3
  439. package/src/go/native-probe-runner.mjs +119 -0
  440. package/src/go/{registry.js → official-registry.js} +64 -7
  441. package/src/go/official-release.js +10 -0
  442. package/src/go/receipts.js +77 -10
  443. package/src/go/verify.js +9 -2
  444. package/src/index.js +31 -0
  445. package/src/indexing/ingest/discover-models.js +298 -0
  446. package/src/indexing/ingest/inventory.js +478 -0
  447. package/src/indexing/ingest/job-graph.js +181 -0
  448. package/src/indexing/ingest/materials.js +204 -0
  449. package/src/indexing/ingest/style-evidence.js +181 -0
  450. package/src/knowledge/source.js +3 -3
  451. package/src/lib/account-session.js +11 -4
  452. package/src/lib/app-authority.js +172 -0
  453. package/src/lib/auth.js +94 -21
  454. package/src/lib/core-client.js +5 -6
  455. package/src/lib/credentials-audit.js +451 -0
  456. package/src/lib/deploy/health.js +24 -6
  457. package/src/lib/detect-context.js +7 -1
  458. package/src/lib/google-cloud-connection.js +270 -0
  459. package/src/lib/google-cloud-inventory.js +385 -0
  460. package/src/lib/google-desktop-oauth.js +372 -0
  461. package/src/lib/google-studio-brokered-oauth.js +158 -0
  462. package/src/lib/identity-scaffold.js +24 -6
  463. package/src/lib/init-options.js +192 -0
  464. package/src/lib/local-scaffold.js +48 -16
  465. package/src/lib/provider-command-remediation.js +308 -0
  466. package/src/lib/provider-credentials.js +71 -21
  467. package/src/lib/scaffold/index.js +8 -2
  468. package/src/lib/scaffold/mcp-server.js +43 -0
  469. package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
  470. package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
  471. package/src/lib/scaffold/wizards/cms.js +93 -0
  472. package/src/lib/scaffold/wizards/mcp-server.js +61 -0
  473. package/src/lib/setup/contract.js +26 -0
  474. package/src/lib/setup/discover.js +116 -0
  475. package/src/lib/setup/execute.js +205 -0
  476. package/src/lib/setup/planner.js +134 -0
  477. package/src/lib/setup/recipes.js +235 -0
  478. package/src/lib/setup/runtime-persist.js +197 -0
  479. package/src/lib/setup/runtime.js +394 -0
  480. package/src/lib/slash-commands.js +3 -0
  481. package/src/lib/terminal/machine-identity.js +95 -0
  482. package/src/lib/terminal-local.js +164 -0
  483. package/src/lib/terminal-scopes.js +52 -0
  484. package/src/lib/whoami-capabilities.js +184 -0
  485. package/src/local-fs/capability.js +121 -0
  486. package/src/local-fs/freshness.js +75 -0
  487. package/src/local-fs/index.js +385 -0
  488. package/src/local-fs/paths.js +100 -0
  489. package/src/local-pty/server.js +326 -21
  490. package/src/mcp/authority.js +58 -108
  491. package/src/mcp/client-adapters.js +68 -144
  492. package/src/mcp/client.js +142 -122
  493. package/src/mcp/cloudflare-bundles.js +225 -0
  494. package/src/mcp/index.js +12 -0
  495. package/src/models/ai-access-onboarding.js +112 -0
  496. package/src/models/discovery.js +10 -2
  497. package/src/models/inventory-core.js +9 -1
  498. package/src/plugins/cloudflare.js +1 -1
  499. package/src/providers/ollama-chat.js +2 -1
  500. package/src/sam/activity/index.js +183 -0
  501. package/src/sam/client.js +252 -0
  502. package/src/sam/decision/calibration.js +109 -0
  503. package/src/sam/decision/confidence.js +126 -0
  504. package/src/sam/decision/evaluate.js +157 -0
  505. package/src/sam/decision/evaluators/deterministic.js +341 -0
  506. package/src/sam/decision/evaluators/heuristic.js +61 -0
  507. package/src/sam/decision/evaluators/select.js +50 -0
  508. package/src/sam/decision/evaluators/semantic.js +149 -0
  509. package/src/sam/decision/hierarchical.js +61 -0
  510. package/src/sam/decision/index.js +53 -0
  511. package/src/sam/decision/policy.js +86 -0
  512. package/src/sam/decision/questions.js +120 -0
  513. package/src/sam/decision/receipt.js +148 -0
  514. package/src/sam/decision/state.js +117 -0
  515. package/src/sam/decision/types.js +22 -0
  516. package/src/sam/decision/validate.js +200 -0
  517. package/src/sam/define.js +51 -0
  518. package/src/sam/index.js +65 -0
  519. package/src/sam/operations/brand-scan.js +62 -0
  520. package/src/sam/operations/cad-blender-inspect.js +36 -0
  521. package/src/sam/operations/codebaseindex-ingest.js +49 -0
  522. package/src/sam/operations/decision-evaluate.js +59 -0
  523. package/src/sam/operations/planning-astar.js +77 -0
  524. package/src/sam/operations/planning-goap.js +60 -0
  525. package/src/sam/operations/repository-inspect.js +72 -0
  526. package/src/sam/operations/security-scan.js +33 -0
  527. package/src/sam/operations/terminal-exec.js +29 -0
  528. package/src/sam/planning/astar.js +311 -0
  529. package/src/sam/planning/goap.js +177 -0
  530. package/src/sam/planning/index.js +21 -0
  531. package/src/sam/planning/state.js +84 -0
  532. package/src/sam/registry.js +48 -0
  533. package/src/sam/result.js +77 -0
  534. package/src/sam/seed.js +44 -0
  535. package/src/sam/types.js +116 -0
  536. package/src/security/inventory.js +12 -2
  537. package/src/security/local-vault.js +2 -0
  538. package/src/security/scan.js +1 -1
  539. package/src/skills/catalog.js +64 -0
  540. package/src/skills/content-resolver.js +124 -0
  541. package/src/skills/hosted-store.js +37 -0
  542. package/src/skills/index.js +29 -64
  543. package/src/skills/interaction.js +102 -0
  544. package/src/skills/local-store.js +228 -0
  545. package/src/skills/manifest.js +104 -0
  546. package/src/skills/metrics.js +31 -0
  547. package/src/skills/registry.js +184 -0
  548. package/src/skills/runtime.js +287 -0
  549. package/src/skills/slash.js +44 -0
  550. package/src/ui/cli/help.js +94 -101
  551. package/test/account-session.test.mjs +3 -3
  552. package/test/app-authority-context.test.mjs +32 -0
  553. package/test/cli/api-key-env-whoami.test.mjs +129 -0
  554. package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
  555. package/test/cli/go.test.mjs +62 -5
  556. package/test/cli/mcp-client.test.mjs +21 -10
  557. package/test/cli/runtime-persist.test.mjs +56 -0
  558. package/test/cli/rust-command.test.mjs +21 -0
  559. package/test/cli/skill-npm-and-env.test.mjs +52 -0
  560. package/test/cli/wireframes-go-registry.test.mjs +87 -2
  561. package/test/credentials-audit.test.mjs +113 -0
  562. package/test/deploy-health-scan.test.mjs +29 -1
  563. package/test/gcloud-auth.test.mjs +111 -0
  564. package/test/go/build-source-identity.test.mjs +31 -0
  565. package/test/go/cloudflare-probe.test.mjs +274 -10
  566. package/test/go/distribution.test.mjs +28 -0
  567. package/test/google-cloud-connection.test.mjs +83 -0
  568. package/test/google-cloud-inventory.test.mjs +64 -0
  569. package/test/init-options.test.mjs +35 -0
  570. package/test/integration/ai-access-onboarding.test.mjs +47 -0
  571. package/test/integration/app-command.test.mjs +30 -0
  572. package/test/integration/cad-project.test.mjs +4 -1
  573. package/test/integration/cli-help.test.mjs +1 -1
  574. package/test/integration/cms-app-scaffold.test.mjs +71 -0
  575. package/test/integration/cms-site-tenancy-contract.test.mjs +9 -8
  576. package/test/integration/codebaseindex-ingest.test.mjs +214 -0
  577. package/test/integration/features-resolve.test.mjs +30 -11
  578. package/test/integration/icon-registry.test.mjs +67 -0
  579. package/test/integration/ingest-discover-models.test.mjs +30 -0
  580. package/test/integration/inspect-path-cli.test.mjs +46 -0
  581. package/test/integration/install-script.test.mjs +12 -9
  582. package/test/integration/inventory-evidence.test.mjs +125 -0
  583. package/test/integration/local-fs.test.mjs +113 -0
  584. package/test/integration/provider-env-cli.test.mjs +2 -1
  585. package/test/integration/runtime-status.integration.test.mjs +2 -1
  586. package/test/integration/sam-activity-recovery.test.mjs +147 -0
  587. package/test/integration/sam-decision.test.mjs +584 -0
  588. package/test/integration/sam-kernel.test.mjs +99 -0
  589. package/test/integration/sam-planning-astar.test.mjs +279 -0
  590. package/test/integration/skill-runtime.test.mjs +240 -0
  591. package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
  592. package/test/knowledge.test.mjs +35 -1
  593. package/test/loopback-oauth.test.mjs +53 -0
  594. package/test/models.test.mjs +14 -7
  595. package/test/ollama.test.mjs +22 -0
  596. package/test/security.test.mjs +23 -0
  597. package/test/setup-planner.test.mjs +74 -0
  598. package/test/setup-runtime.test.mjs +51 -0
  599. package/test/shell.test.mjs +4 -4
  600. package/test/terminal/local-pty.mock.test.mjs +3 -1
  601. package/test/terminal-machine-identity.test.mjs +88 -0
  602. package/test/whoami-resume.test.mjs +27 -6
  603. package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
  604. package/packages/work-graph/prototype/README.md +0 -32
  605. package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
  606. package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
  607. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
  608. package/packages/work-graph/prototype-gnantt.html +0 -655
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Billing relationships — not --billing-project (quota attribution).
3
+ */
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+
7
+ const execFileAsync = promisify(execFile);
8
+
9
+ function writeLine(write, value = '') {
10
+ write(`${value}\n`);
11
+ }
12
+
13
+ async function runGcloud(args, env) {
14
+ try {
15
+ const { stdout, stderr } = await execFileAsync('gcloud', args, {
16
+ timeout: 30000,
17
+ env,
18
+ maxBuffer: 1024 * 1024,
19
+ });
20
+ return { ok: true, stdout: String(stdout || ''), stderr: String(stderr || '') };
21
+ } catch (error) {
22
+ return {
23
+ ok: false,
24
+ stdout: String(error?.stdout || ''),
25
+ stderr: String(error?.stderr || error?.message || ''),
26
+ };
27
+ }
28
+ }
29
+
30
+ function printHelp(write) {
31
+ writeLine(write, '');
32
+ writeLine(write, ' agentsam billing');
33
+ writeLine(write, ' agentsam billing accounts');
34
+ writeLine(write, ' agentsam billing project [PROJECT_ID]');
35
+ writeLine(write, ' agentsam billing budgets --account XXXXXX-XXXXXX-XXXXXX');
36
+ writeLine(write, '');
37
+ writeLine(write, ' Note: gcloud --billing-project only attributes quota for one CLI call.');
38
+ writeLine(write, ' It does not show historical spend. Use Cloud Billing reports / BigQuery export for costs.');
39
+ writeLine(write, ' Future: agentsam costs gcp|cloudflare|models');
40
+ writeLine(write, '');
41
+ }
42
+
43
+ export async function runBilling(argv = [], options = {}) {
44
+ const write = options.write || ((s) => process.stdout.write(s));
45
+ const env = options.env || process.env;
46
+ const json = argv.includes('--json');
47
+ const args = argv.filter((a) => a !== '--json');
48
+
49
+ if (!args.length || args[0] === 'help' || args[0] === '--help' || args[0] === '-h') {
50
+ printHelp(write);
51
+ if (!args.length) {
52
+ // Default: accounts list
53
+ args.push('accounts');
54
+ } else {
55
+ return 0;
56
+ }
57
+ }
58
+
59
+ if (args[0] === 'accounts') {
60
+ const result = await runGcloud(['billing', 'accounts', 'list', '--format=table(name,displayName,open)'], env);
61
+ if (!result.ok) {
62
+ write(result.stderr || result.stdout);
63
+ return 1;
64
+ }
65
+ if (json) write(JSON.stringify({ ok: true, stdout: result.stdout }, null, 2) + '\n');
66
+ else {
67
+ writeLine(write, '');
68
+ writeLine(write, ' Agent Sam · billing accounts');
69
+ writeLine(write, ' (relationship inventory — not a spend dashboard)');
70
+ writeLine(write, '');
71
+ write(result.stdout.endsWith('\n') ? result.stdout : `${result.stdout}\n`);
72
+ }
73
+ return 0;
74
+ }
75
+
76
+ if (args[0] === 'project') {
77
+ let project = args[1] || '';
78
+ if (!project) {
79
+ const cfg = await runGcloud(['config', 'get-value', 'project'], env);
80
+ project = cfg.stdout.trim();
81
+ }
82
+ if (!project || project === '(unset)') {
83
+ writeLine(write, ' ✕ Pass a project id or set gcloud config project.');
84
+ return 1;
85
+ }
86
+ const result = await runGcloud(['billing', 'projects', 'describe', project, '--format=yaml(billingAccountName,billingEnabled,projectId)'], env);
87
+ if (!result.ok) {
88
+ write(result.stderr || result.stdout);
89
+ return 1;
90
+ }
91
+ write(result.stdout.endsWith('\n') ? result.stdout : `${result.stdout}\n`);
92
+ return 0;
93
+ }
94
+
95
+ if (args[0] === 'budgets') {
96
+ let account = '';
97
+ for (let i = 1; i < args.length; i += 1) {
98
+ if (args[i] === '--account') account = args[++i] || '';
99
+ else if (args[i].startsWith('--account=')) account = args[i].slice('--account='.length);
100
+ else if (!args[i].startsWith('-') && !account) account = args[i];
101
+ }
102
+ if (!account || account.includes('XXXX')) {
103
+ writeLine(write, ' ✕ Pass a real billing account id from: agentsam billing accounts');
104
+ writeLine(write, ' Example: agentsam billing budgets --account 017E01-4426EF-21356F');
105
+ return 1;
106
+ }
107
+ const name = account.startsWith('billingAccounts/') ? account : `billingAccounts/${account}`;
108
+ const result = await runGcloud(['billing', 'budgets', 'list', '--billing-account', name.replace(/^billingAccounts\//, ''), '--format=table(displayName,amount,budgetFilter)'], env);
109
+ // gcloud wants the id without prefix sometimes; try both on failure
110
+ if (!result.ok) {
111
+ const retry = await runGcloud(['billing', 'budgets', 'list', `--billing-account=${account.replace(/^billingAccounts\//, '')}`], env);
112
+ if (!retry.ok) {
113
+ write(retry.stderr || result.stderr || retry.stdout);
114
+ writeLine(write, '');
115
+ writeLine(write, ' Tip: copy ACCOUNT_ID from `agentsam billing accounts` — not the placeholder XXXXXX-XXXXXX-XXXXXX.');
116
+ return 1;
117
+ }
118
+ write(retry.stdout.endsWith('\n') ? retry.stdout : `${retry.stdout}\n`);
119
+ return 0;
120
+ }
121
+ write(result.stdout.endsWith('\n') ? result.stdout : `${result.stdout}\n`);
122
+ return 0;
123
+ }
124
+
125
+ printHelp(write);
126
+ return 1;
127
+ }
@@ -1,5 +1,15 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
+ import {
4
+ cancel,
5
+ confirm,
6
+ intro,
7
+ isCancel,
8
+ note,
9
+ outro,
10
+ select,
11
+ text,
12
+ } from '@clack/prompts';
3
13
  import { repositorySnapshot } from '../capabilities/index.js';
4
14
  import {
5
15
  brandScan,
@@ -9,12 +19,41 @@ import {
9
19
  brandGoapActions,
10
20
  brandWorldFromPlan,
11
21
  brandGoalFromPlan,
22
+ runBrandAssetCommand,
23
+ runBrandPromoteWizard,
12
24
  } from '../../packages/agentsam-brand/src/index.js';
25
+ import { planGoap, GOAP_ENGINE } from '../sam/planning/goap.js';
13
26
  import { suggestNextActions } from '../progression/index.js';
14
27
  import { createRuntimeActivity } from '../ui/runtime-activity.js';
15
28
 
29
+ const ASSET_ACTIONS = new Set([
30
+ 'inspect',
31
+ 'derive',
32
+ 'assets',
33
+ 'promote',
34
+ 'publish',
35
+ 'verify',
36
+ 'presets',
37
+ 'pack',
38
+ 'preview',
39
+ 'ingest',
40
+ 'build',
41
+ 'templates',
42
+ 'roles',
43
+ 'optimize',
44
+ 'processors',
45
+ ]);
46
+
16
47
  function parseArgs(argv = []) {
17
- const out = { json: false, cwd: process.cwd(), dryRun: false, goap: false, write: false, positionals: [] };
48
+ const out = {
49
+ json: false,
50
+ cwd: process.cwd(),
51
+ dryRun: false,
52
+ goap: false,
53
+ write: false,
54
+ positionals: [],
55
+ passthrough: [...argv],
56
+ };
18
57
  for (let i = 0; i < argv.length; i += 1) {
19
58
  const a = argv[i];
20
59
  if (a === '--json') out.json = true;
@@ -66,25 +105,44 @@ export async function runBrand(argv = []) {
66
105
  const action = sub || 'summary';
67
106
 
68
107
  if (action === 'help' || action === '--help') {
69
- console.log(`usage: agentsam brand [summary|scan|resolve|inspect|plan|apply|verify] [options]
108
+ console.log(`usage: agentsam brand [summary|scan|resolve|inspect|plan|apply|assets|promote|ingest|build|pack|preview|publish|verify|derive|optimize|processors|presets|templates|roles]
70
109
 
71
- summary (default) Short brand intelligence overview
72
- scan Deterministic evidence extraction (no model)
73
- resolve Cluster tokens into inferred roles
74
- inspect [conflicts] Show conflicts / component families
75
- plan [--goap] Normalization plan (preserve → improve)
76
- apply --dry-run Mutation stub (writes require future approval)
77
- verify Stub verification gate
110
+ Brand intelligence:
111
+ summary|scan|resolve|inspect|plan|apply
78
112
 
79
- Options:
80
- --json --cwd <path> --snapshot-file <file> --write
113
+ Brand compiler (v2 — brand.pack.json is source of truth):
114
+ agentsam brand ingest ./exports --brand acme --template product-saas
115
+ agentsam brand build --from .agentsam/brand/packs/acme
116
+ agentsam brand preview --from .agentsam/brand/dist/acme
117
+ agentsam brand optimize ./hero.png --role hero.landscape --target web
118
+ agentsam brand processors
119
+ agentsam brand templates
120
+ agentsam brand roles
121
+
122
+ Legacy single-asset (still valid):
123
+ agentsam brand pack --brand acme --asset app-icon --source ./master.png --preset app-icon --out ./acme.zip
124
+ agentsam brand promote --brand acme --asset logo --source - --preset logo
125
+ agentsam brand presets
126
+
127
+ Encoders (sharp / squoosh binary / native / CF) are processors — never the CLI contract.
128
+ ZIP / studio / production publish are compiled representations of brand.pack.json.
81
129
  `);
82
130
  return;
83
131
  }
84
132
 
133
+ // Asset/promote surface → shared controller (also used by agentsam-brand bin)
134
+ if (ASSET_ACTIONS.has(action)) {
135
+ const code = await runBrandAssetCommand(argv, {
136
+ runWizard: runBrandPromoteWizard,
137
+ prompts: { intro, outro, cancel, isCancel, select, text, confirm, note },
138
+ });
139
+ if (typeof code === 'number' && code !== 0) process.exitCode = code;
140
+ return;
141
+ }
142
+
85
143
  if (action === 'apply') {
86
144
  if (!opts.dryRun) {
87
- console.error('brand apply requires --dry-run until mutations are gated (side_effects: repository-write)');
145
+ console.error('brand apply requires --dry-run until mutations are gated');
88
146
  process.exitCode = 2;
89
147
  return;
90
148
  }
@@ -98,17 +156,6 @@ Options:
98
156
  return;
99
157
  }
100
158
 
101
- if (action === 'verify') {
102
- const out = {
103
- capability: 'brand.verify',
104
- status: 'stub',
105
- message: 'Verify will re-scan and diff against .agentsam/brand/contract.json',
106
- };
107
- if (opts.json) console.log(JSON.stringify(out, null, 2));
108
- else console.log(out.message);
109
- return;
110
- }
111
-
112
159
  const tty = process.stdout.isTTY && !opts.json;
113
160
  const activity = tty ? createRuntimeActivity({ label: 'Brand intelligence' }) : null;
114
161
  const onEvent = (ev) => {
@@ -122,11 +169,7 @@ Options:
122
169
  const snapshot = await loadSnapshot(opts);
123
170
 
124
171
  if (action === 'summary' || action === 'scan' || action === 'resolve' || action === 'inspect' || action === 'plan') {
125
- const scan = await brandScan({
126
- cwd: opts.cwd,
127
- snapshot,
128
- onEvent,
129
- });
172
+ const scan = await brandScan({ cwd: opts.cwd, snapshot, onEvent });
130
173
 
131
174
  if (action === 'scan') {
132
175
  const enriched = attachProgression('brand.scan', scan, opts.json);
@@ -136,8 +179,6 @@ Options:
136
179
  console.log(`\nBrand scan complete · ${scan.repository.snapshot_id}`);
137
180
  console.log(` colors ${scan.tokens.colors.length}`);
138
181
  console.log(` conflicts ${scan.conflicts.length}`);
139
- console.log(` css files ${scan.sources.css}`);
140
- console.log(` components ${scan.sources.components}`);
141
182
  console.log(` hash ${scan.content_hash}`);
142
183
  }
143
184
  return;
@@ -151,28 +192,21 @@ Options:
151
192
  else {
152
193
  console.log(`\nBrand resolve · ${Object.keys(resolved.resolved.colors).length} color roles`);
153
194
  console.log(` ambiguities ${resolved.ambiguities.length}`);
154
- for (const a of resolved.ambiguities.slice(0, 5)) {
155
- console.log(` ? ${a.question}`);
156
- }
157
195
  }
158
196
  return;
159
197
  }
160
198
 
161
199
  if (action === 'inspect') {
200
+ // brand intelligence inspect (conflicts) — asset inspect is ASSET_ACTIONS
162
201
  const focus = rest[0] || 'conflicts';
163
202
  const payload = focus === 'components'
164
203
  ? { capability: 'brand.inspect', focus, components: scan.components, patterns: scan.patterns }
165
204
  : { capability: 'brand.inspect', focus, conflicts: scan.conflicts, colors: scan.tokens.colors.slice(0, 20) };
166
205
  if (opts.json) console.log(JSON.stringify(payload, null, 2));
167
- else if (focus === 'components') {
168
- console.log('\nComponent families');
169
- for (const [k, v] of Object.entries(scan.components).slice(0, 20)) {
170
- console.log(` ${k} ×${v.count}`);
171
- }
172
- } else {
206
+ else {
173
207
  console.log(`\nConflicts (${scan.conflicts.length})`);
174
208
  for (const c of scan.conflicts.slice(0, 15)) {
175
- console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance} · n=${c.occurrences}`);
209
+ console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance}`);
176
210
  }
177
211
  }
178
212
  return;
@@ -182,7 +216,6 @@ Options:
182
216
  return runBrandPlanInner({ scan, resolved, opts });
183
217
  }
184
218
 
185
- // summary
186
219
  const contract = buildBrandContractDraft({ scan, resolved });
187
220
  const plan = brandPlan({ scan, resolved, contract });
188
221
  const { next_actions } = suggestNextActions({ capability: 'brand.scan', result: scan });
@@ -200,8 +233,6 @@ Options:
200
233
  else {
201
234
  console.log(`\nBrand · ${scan.repository.snapshot_id}`);
202
235
  console.log(` ${plan.summary.colors} colors · ${plan.summary.near_duplicate_pairs} near-duplicates`);
203
- console.log(` ${plan.summary.button_families} button families · ${plan.summary.header_families} header/nav families`);
204
- console.log(` confidence colors=${resolved.confidence.colors} typography=${resolved.confidence.typography}`);
205
236
  printNext(next_actions);
206
237
  }
207
238
  }
@@ -218,26 +249,18 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
218
249
  const world = brandWorldFromPlan(plan);
219
250
  const goal = brandGoalFromPlan(plan);
220
251
  const actions = brandGoapActions();
221
- const sequence = [];
222
- const state = { ...world };
223
- // greedy applicable actions by cost until goal satisfied or stuck
224
- for (let guard = 0; guard < 20; guard += 1) {
225
- const done = Object.entries(goal).every(([k, v]) => state[k] === v);
226
- if (done) break;
227
- const candidates = actions
228
- .filter((a) => Object.entries(a.preconditions || {}).every(([k, v]) => state[k] === v))
229
- .filter((a) => !sequence.includes(a.id))
230
- .sort((a, b) => (a.cost || 1) - (b.cost || 1));
231
- if (!candidates.length) break;
232
- const next = candidates[0];
233
- sequence.push(next.id);
234
- Object.assign(state, next.effects || {});
235
- }
252
+ const planned = planGoap({
253
+ initialState: world,
254
+ goal,
255
+ actions,
256
+ maxExpansions: 10_000,
257
+ });
236
258
  goap = {
237
- ok: sequence.length > 0,
238
- plan: sequence,
239
- cost: sequence.reduce((n, id) => n + (actions.find((a) => a.id === id)?.cost || 0), 0),
240
- engine: 'brand-goap-greedy',
259
+ ok: planned.ok,
260
+ plan: planned.plan,
261
+ cost: planned.total_cost ?? planned.cost,
262
+ engine: planned.engine || GOAP_ENGINE,
263
+ status: planned.status,
241
264
  };
242
265
  }
243
266
  const enriched = attachProgression('brand.plan', plan, opts.json);
@@ -252,8 +275,6 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
252
275
  else {
253
276
  console.log('\nBrand coherence plan');
254
277
  console.log(` philosophy ${plan.philosophy}`);
255
- console.log(` colors ${plan.summary.colors} (${plan.summary.near_duplicate_pairs} near-dup pairs)`);
256
- console.log(' steps');
257
278
  for (const [i, s] of plan.steps.entries()) {
258
279
  console.log(` ${i + 1}. [${s.action}] ${s.title}`);
259
280
  }
@@ -265,16 +286,7 @@ export async function runPlan(argv = []) {
265
286
  const opts = parseArgs(argv);
266
287
  const [domain, ...rest] = opts.positionals;
267
288
  if (!domain || domain === 'help') {
268
- console.log(`usage: agentsam plan <domain>
269
-
270
- Domains:
271
- brand [--goap] [--json] [--write]
272
- security (use: agentsam security scan)
273
- repository (use: agentsam inspect)
274
- release (use: agentsam status / package verify)
275
-
276
- Composable grammar: agentsam plan brand
277
- `);
289
+ console.log(`usage: agentsam plan <domain>\n\nDomains:\n brand [--goap] [--json] [--write]\n`);
278
290
  return;
279
291
  }
280
292
  if (domain === 'brand') {
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Canonical Agent Sam cheat-sheet — gcloud-like command groups.
3
+ * Old top-level commands remain as compatibility aliases.
4
+ */
5
+
6
+ const GROUPS = Object.freeze([
7
+ {
8
+ id: 'work',
9
+ label: 'Work',
10
+ commands: [
11
+ ['project / create', 'Scaffold or enter a project'],
12
+ ['work / goap', 'Goals, blackboard, plans'],
13
+ ['brand / plan', 'Brand intelligence and composable plans'],
14
+ ['artifacts', 'Receipts and deploy evidence'],
15
+ ],
16
+ },
17
+ {
18
+ id: 'repository',
19
+ label: 'Repository',
20
+ commands: [
21
+ ['inspect', 'Bounded repository authority view'],
22
+ ['recon', 'Bounded-worker finding packets'],
23
+ ['codebaseindex', 'AST ingest + optional embeddings'],
24
+ ['merkle', 'Integrity snapshots'],
25
+ ['security', 'Dependency + trust-boundary scan'],
26
+ ],
27
+ },
28
+ {
29
+ id: 'runtime',
30
+ label: 'Runtime',
31
+ commands: [
32
+ ['terminal / shell', 'Interactive slash-command shell'],
33
+ ['connections', 'Account, terminal, Worker, Cloudflare evidence'],
34
+ ['tunnel', 'Real Cloudflare Tunnels via Wrangler'],
35
+ ['go', 'Go product discover/build/deploy'],
36
+ ['dockerize', 'Supported containers'],
37
+ ['compute', 'Google Cloud VM / IAM helpers'],
38
+ ['gcloud auth login', 'Desktop PKCE Google Cloud connection (auto callback)'],
39
+ ['gcloud auth login --web', 'Hosted Local Studio identity (openid/email/profile)'],
40
+ ['gcloud auth login --sdk', 'Native Google Cloud SDK OAuth (optional)'],
41
+ ['google-cloud', 'Projects · compute · IAM SAs · billing · doctor'],
42
+ ],
43
+ },
44
+ {
45
+ id: 'providers',
46
+ label: 'Providers',
47
+ commands: [
48
+ ['setup', 'Discover → plan → approve → install (brew-style)'],
49
+ ['providers', 'Configure / verify model + infra credentials'],
50
+ ['models', 'Provider-verified model catalog'],
51
+ ['cloudflare', 'Wrangler reads + Worker profiles'],
52
+ ['google-cloud', 'Customer GCP connection inventory'],
53
+ ['gcloud auth login', 'Desktop PKCE Google Cloud (auto callback)'],
54
+ ['credentials audit', 'Configured · verified · drift (names only)'],
55
+ ['plugins', 'Install and manage plugins'],
56
+ ],
57
+ },
58
+ {
59
+ id: 'data',
60
+ label: 'Data',
61
+ commands: [
62
+ ['db', 'Project-local SQLite'],
63
+ ['knowledge / search', 'Indexed retrieval'],
64
+ ['autorag', 'AutoRAG helpers'],
65
+ ],
66
+ },
67
+ {
68
+ id: 'ai',
69
+ label: 'AI',
70
+ commands: [
71
+ ['models', 'Hosted + local model probes'],
72
+ ['skills', 'Portable skill vocabulary'],
73
+ ['context', 'Context economics + git bridge'],
74
+ ['usage / session', 'Spend and resume receipts'],
75
+ ],
76
+ },
77
+ {
78
+ id: 'identity',
79
+ label: 'Identity',
80
+ commands: [
81
+ ['whoami', 'Account + safe credential status'],
82
+ ['login / logout', 'Browser OAuth session'],
83
+ ['env', 'Vault/keychain shell loader'],
84
+ ['api-key', 'Create/rotate aak_* keys'],
85
+ ['identity', 'Portable OAuth portal surfaces'],
86
+ ],
87
+ },
88
+ {
89
+ id: 'apps',
90
+ label: 'Apps',
91
+ commands: [
92
+ ['app / local-studio', 'Bundled Local Studio launcher'],
93
+ ['cad', 'CAD project tools'],
94
+ ['brand', 'Brand intelligence'],
95
+ ],
96
+ },
97
+ {
98
+ id: 'system',
99
+ label: 'System',
100
+ commands: [
101
+ ['status', 'Account · models · terminal · live deploy'],
102
+ ['doctor / credentials audit --verify', 'Auth + drift health'],
103
+ ['update', 'Component update preview (gcloud-like)'],
104
+ ['billing', 'Billing account relationships (not --billing-project)'],
105
+ ['cheat-sheet', 'This page'],
106
+ ['version', 'agentsam --version'],
107
+ ],
108
+ },
109
+ ]);
110
+
111
+ export function listCheatSheetGroups() {
112
+ return GROUPS.map((group) => ({
113
+ id: group.id,
114
+ label: group.label,
115
+ commands: group.commands.map(([cmd, summary]) => ({ cmd, summary })),
116
+ }));
117
+ }
118
+
119
+ export function renderCheatSheet(version) {
120
+ const lines = [
121
+ '',
122
+ ` Agent Sam cheat-sheet${version ? ` · v${version}` : ''}`,
123
+ ' Organized hierarchy · old top-level commands remain compatibility aliases.',
124
+ '',
125
+ ];
126
+ for (const group of GROUPS) {
127
+ lines.push(` ${group.label}`);
128
+ for (const [cmd, summary] of group.commands) {
129
+ lines.push(` ${String(cmd).padEnd(42)} ${summary}`);
130
+ }
131
+ lines.push('');
132
+ }
133
+ lines.push(' Failure follow-through');
134
+ lines.push(' agentsam credentials remediate -- gcloud edge-cloud service-accounts keys create');
135
+ lines.push(' agentsam credentials audit --verify --drift --names-only');
136
+ lines.push('');
137
+ lines.push(' Docs');
138
+ lines.push(' docs/contracts/environment-vocabulary.md');
139
+ lines.push(' docs/AUTH_IDENTITY_CONTRACT.md');
140
+ lines.push('');
141
+ return lines.join('\n');
142
+ }
143
+
144
+ export function runCheatSheet(argv = [], options = {}) {
145
+ const write = options.write || ((s) => process.stdout.write(s));
146
+ const json = argv.includes('--json');
147
+ const version = options.version || '';
148
+ if (json) {
149
+ write(JSON.stringify({ schema_version: 'agentsam-cheat-sheet-v1', version, groups: listCheatSheetGroups() }, null, 2) + '\n');
150
+ return 0;
151
+ }
152
+ write(renderCheatSheet(version));
153
+ return 0;
154
+ }