@inneranimalmedia/agentsam-sdk 2.6.4 → 2.6.7

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 (699) hide show
  1. package/AGENTSAM.md +40 -0
  2. package/README.md +15 -9
  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 +17 -0
  7. package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
  8. package/apps/client-cms-editor/README.md +100 -0
  9. package/apps/client-cms-editor/agentsam.app.json +74 -0
  10. package/apps/client-cms-editor/backend/README.md +5 -0
  11. package/apps/client-cms-editor/backend/package.json +39 -0
  12. package/apps/client-cms-editor/backend/src/api/client.ts +233 -0
  13. package/apps/client-cms-editor/backend/src/index.ts +6 -0
  14. package/apps/client-cms-editor/backend/src/model.ts +11 -0
  15. package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
  16. package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
  17. package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
  18. package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
  19. package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
  20. package/apps/client-cms-editor/backend/tsconfig.json +20 -0
  21. package/apps/client-cms-editor/backend/worker/index.js +34 -0
  22. package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
  23. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  24. package/apps/client-cms-editor/bin/agentsam-cms.mjs +3 -0
  25. package/apps/client-cms-editor/frontend/index.html +12 -0
  26. package/apps/client-cms-editor/frontend/package.json +42 -0
  27. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +156 -0
  28. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +36 -0
  29. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  30. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  31. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  32. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  33. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  34. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  35. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +1374 -0
  36. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  37. package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
  38. package/apps/client-cms-editor/frontend/src/index.ts +22 -0
  39. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  40. package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
  41. package/apps/client-cms-editor/frontend/src/main.tsx +91 -0
  42. package/apps/client-cms-editor/frontend/src/mount.tsx +113 -0
  43. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
  44. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
  45. package/apps/client-cms-editor/frontend/src/styles/studio.css +158 -0
  46. package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
  47. package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
  48. package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
  49. package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
  50. package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
  51. package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
  52. package/apps/client-cms-editor/frontend/tsconfig.json +36 -0
  53. package/apps/client-cms-editor/frontend/vite.config.ts +25 -0
  54. package/apps/client-cms-editor/package-lock.json +4671 -0
  55. package/apps/client-cms-editor/package.json +135 -0
  56. package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
  57. package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
  58. package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
  59. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  60. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  61. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  62. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  63. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  64. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  65. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  66. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  67. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  68. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  69. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  70. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  71. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  72. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  73. package/apps/client-cms-editor/shared/cms/package.json +31 -0
  74. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  75. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +37 -0
  76. package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
  77. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +90 -0
  78. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  79. package/apps/client-cms-editor/shared/cms/src/index.ts +9 -0
  80. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  81. package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
  82. package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
  83. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  84. package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
  85. package/bin/agentsam-rapid-rust +36 -0
  86. package/contracts/source-types.v1.json +353 -0
  87. package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
  88. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  89. package/docs/MACHINE_INTELLIGENCE.md +120 -0
  90. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  91. package/docs/THEME_REFINERY.md +2 -2
  92. package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
  93. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
  94. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +171 -0
  95. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +12 -4
  96. package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
  97. package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
  98. package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
  99. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
  100. package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
  101. package/docs/contracts/capability-install-planner.md +67 -0
  102. package/docs/contracts/environment-vocabulary.md +195 -0
  103. package/docs/contracts/google-cloud-oauth-setup.md +199 -0
  104. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
  105. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
  106. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
  107. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  108. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
  109. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
  110. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
  111. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
  112. package/docs/plugins.md +2 -2
  113. package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
  114. package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
  115. package/docs/product/README.md +8 -0
  116. package/docs/rapid-rust-wasm.md +35 -0
  117. package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
  118. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  119. package/native/agentsam-machine/Cargo.lock +426 -0
  120. package/native/agentsam-machine/Cargo.toml +9 -0
  121. package/native/agentsam-machine/cli/Cargo.toml +14 -0
  122. package/native/agentsam-machine/cli/src/main.rs +77 -0
  123. package/native/agentsam-machine/core/Cargo.toml +15 -0
  124. package/native/agentsam-machine/core/src/assets.rs +790 -0
  125. package/native/agentsam-machine/core/src/bound.rs +298 -0
  126. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  127. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  128. package/native/agentsam-machine/core/src/lib.rs +1086 -0
  129. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  130. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  131. package/package.json +110 -21
  132. package/packages/agentsam-brand/README.md +107 -12
  133. package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
  134. package/packages/agentsam-brand/package.json +41 -9
  135. package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
  136. package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
  137. package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
  138. package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
  139. package/packages/agentsam-brand/src/adapters/memory.js +31 -0
  140. package/packages/agentsam-brand/src/cli/controller.js +503 -0
  141. package/packages/agentsam-brand/src/cli/wizard.js +526 -0
  142. package/packages/agentsam-brand/src/core/capabilities.js +201 -0
  143. package/packages/agentsam-brand/src/core/derivatives.js +211 -0
  144. package/packages/agentsam-brand/src/core/errors.js +12 -0
  145. package/packages/agentsam-brand/src/core/ingest.js +195 -0
  146. package/packages/agentsam-brand/src/core/inspect.js +109 -0
  147. package/packages/agentsam-brand/src/core/keys.js +83 -0
  148. package/packages/agentsam-brand/src/core/naming.js +142 -0
  149. package/packages/agentsam-brand/src/core/optimize.js +316 -0
  150. package/packages/agentsam-brand/src/core/pack.js +305 -0
  151. package/packages/agentsam-brand/src/core/plan.js +276 -0
  152. package/packages/agentsam-brand/src/core/preview.js +159 -0
  153. package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
  154. package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
  155. package/packages/agentsam-brand/src/core/processors/index.js +148 -0
  156. package/packages/agentsam-brand/src/core/processors/native.js +82 -0
  157. package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
  158. package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
  159. package/packages/agentsam-brand/src/core/promote.js +288 -0
  160. package/packages/agentsam-brand/src/core/receipts.js +155 -0
  161. package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
  162. package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
  163. package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
  164. package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
  165. package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
  166. package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
  167. package/packages/agentsam-brand/src/index.js +193 -36
  168. package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
  169. package/packages/agentsam-brand/src/presets/favicon.json +17 -0
  170. package/packages/agentsam-brand/src/presets/hero.json +12 -0
  171. package/packages/agentsam-brand/src/presets/index.js +40 -0
  172. package/packages/agentsam-brand/src/presets/logo.json +12 -0
  173. package/packages/agentsam-brand/src/presets/model.json +8 -0
  174. package/packages/agentsam-brand/src/presets/og-image.json +10 -0
  175. package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
  176. package/packages/agentsam-brand/src/presets/social-image.json +10 -0
  177. package/packages/agentsam-brand/src/presets/web-image.json +10 -0
  178. package/packages/agentsam-contracts/package.json +13 -3
  179. package/packages/agentsam-contracts/src/artifacts.ts +41 -0
  180. package/packages/agentsam-contracts/src/tools.ts +22 -0
  181. package/packages/agentsam-errors/package.json +13 -3
  182. package/packages/agentsam-knowledge/package.json +18 -4
  183. package/packages/agentsam-knowledge/src/autorag/index.js +11 -4
  184. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  185. package/packages/agentsam-knowledge/src/providers/index.js +6 -4
  186. package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
  187. package/packages/agentsam-knowledge/test/autorag.test.mjs +81 -1
  188. package/packages/agentsam-nav/package.json +26 -8
  189. package/packages/agentsam-queue-control/README.md +1 -1
  190. package/packages/agentsam-queue-control/package.json +7 -2
  191. package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
  192. package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
  193. package/packages/agentsam-rapid-rust/README.md +5 -0
  194. package/packages/agentsam-rapid-rust/src/main.rs +718 -0
  195. package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
  196. package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
  197. package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
  198. package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
  199. package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
  200. package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
  201. package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
  202. package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
  203. package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
  204. package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
  205. package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
  206. package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
  207. package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
  208. package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
  209. package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
  210. package/packages/agentsam-repository/package.json +13 -3
  211. package/packages/agentsam-repository/src/index.js +1 -0
  212. package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
  213. package/packages/agentsam-repository/src/source-types.js +93 -0
  214. package/packages/agentsam-vault/README.md +96 -0
  215. package/packages/agentsam-vault/package.json +42 -0
  216. package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
  217. package/packages/agentsam-vault/src/contracts/credential.js +132 -0
  218. package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
  219. package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
  220. package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
  221. package/packages/agentsam-vault/src/index.d.ts +9 -0
  222. package/packages/agentsam-vault/src/index.js +27 -0
  223. package/packages/agentsam-vault/src/providers/registry.js +90 -0
  224. package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
  225. package/packages/agentsam-workbench/README.md +24 -0
  226. package/packages/agentsam-workbench/package.json +49 -0
  227. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
  228. package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
  229. package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
  230. package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
  231. package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
  232. package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
  233. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
  234. package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
  235. package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
  236. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  237. package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
  238. package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
  239. package/packages/agentsam-workbench/src/agent/index.ts +12 -0
  240. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
  241. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  242. package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
  243. package/packages/agentsam-workbench/src/browser/index.ts +1 -0
  244. package/packages/agentsam-workbench/src/index.ts +6 -0
  245. package/packages/agentsam-workbench/src/project-control.css +160 -0
  246. package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
  247. package/packages/agentsam-workbench/src/projects/index.ts +1 -0
  248. package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
  249. package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
  250. package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
  251. package/packages/agentsam-workbench/src/shell/index.ts +4 -0
  252. package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
  253. package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
  254. package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
  255. package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
  256. package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
  257. package/packages/agentsam-workbench/tsconfig.json +13 -0
  258. package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
  259. package/packages/connectors/cloudflare/package.json +16 -4
  260. package/packages/connectors/cloudflare/src/api-client.js +280 -0
  261. package/packages/connectors/cloudflare/src/capabilities.js +585 -0
  262. package/packages/connectors/cloudflare/src/credential.js +318 -0
  263. package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
  264. package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
  265. package/packages/connectors/cloudflare/src/families/pages.js +151 -0
  266. package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
  267. package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
  268. package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
  269. package/packages/connectors/cloudflare/src/families/tags.js +124 -0
  270. package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
  271. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  272. package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
  273. package/packages/connectors/cloudflare/src/index.js +103 -265
  274. package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
  275. package/packages/connectors/cloudflare/src/owner.js +42 -12
  276. package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
  277. package/packages/connectors/cloudflare/src/routes.js +309 -144
  278. package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
  279. package/packages/connectors/cloudflare/src/vault.js +2 -2
  280. package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
  281. package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -30
  282. package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
  283. package/packages/heuristic-theme/README.md +2 -2
  284. package/packages/heuristic-theme/package.json +8 -3
  285. package/packages/heuristic-theme/src/registry.js +2 -2
  286. package/packages/heuristic-theme/src/theme.js +1 -1
  287. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  288. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  289. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +44 -4
  290. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
  291. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +20 -0
  292. package/packages/identity/README.md +2 -2
  293. package/packages/identity/backend/README.md +1 -1
  294. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -14
  295. package/packages/identity/migrations/apply-portable.js +109 -0
  296. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
  297. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  298. package/packages/identity/package.json +27 -5
  299. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  300. package/packages/identity/scripts/local-identity-bridge.mjs +190 -0
  301. package/packages/identity/scripts/preview-auth-portal.mjs +8 -8
  302. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -372
  303. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  304. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  305. package/packages/identity/src/adapters/portable-store.js +479 -0
  306. package/packages/identity/src/adapters/sqlite/index.js +13 -309
  307. package/packages/identity/src/contracts/auth-config.js +27 -8
  308. package/packages/identity/src/contracts/external-identity.js +1 -1
  309. package/packages/identity/src/contracts/identity-store.js +56 -5
  310. package/packages/identity/src/contracts/provider.js +2 -0
  311. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  312. package/packages/identity/src/core/constants.js +1 -1
  313. package/packages/identity/src/core/session-policy.js +31 -0
  314. package/packages/identity/src/frontend/auth-portal/README.md +2 -1
  315. package/packages/identity/src/frontend/auth-portal/pages/login.html +7 -6
  316. package/packages/identity/src/frontend/auth-portal/pages/reset.html +6 -5
  317. package/packages/identity/src/frontend/auth-portal/pages/signup.html +6 -5
  318. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  319. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +176 -0
  320. package/packages/identity/src/index.js +44 -1
  321. package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
  322. package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
  323. package/packages/identity/src/migrations/README.md +23 -20
  324. package/packages/identity/src/oauth/README.md +10 -5
  325. package/packages/identity/src/oauth/consent-view.js +388 -0
  326. package/packages/identity/src/oauth/credentials.js +39 -20
  327. package/packages/identity/src/oauth/google-desktop-exchange.js +341 -0
  328. package/packages/identity/src/oauth/iam-platform.js +21 -9
  329. package/packages/identity/src/oauth/native-handoff.js +136 -0
  330. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  331. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  332. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  333. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  334. package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
  335. package/packages/identity/src/providers/cloudflare/profile.js +49 -14
  336. package/packages/identity/src/providers/github/oauth.js +1 -2
  337. package/packages/identity/src/providers/github/profile.js +16 -2
  338. package/packages/identity/src/providers/iam/index.js +27 -5
  339. package/packages/identity/src/providers/index.js +11 -3
  340. package/packages/identity/src/server/identity-service.js +33 -3
  341. package/packages/identity/src/server/worker-router.js +171 -88
  342. package/packages/identity/tests/auth-config.test.mjs +3 -2
  343. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  344. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  345. package/packages/identity/tests/identity-init-scaffold.test.mjs +17 -3
  346. package/packages/identity/tests/identity-service.test.mjs +16 -0
  347. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  348. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  349. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  350. package/packages/identity/tests/native-session-worker.test.mjs +64 -0
  351. package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
  352. package/packages/identity/tests/oauth-credentials.test.mjs +21 -8
  353. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
  354. package/packages/identity/tests/preview-auth-portal.test.mjs +5 -3
  355. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  356. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  357. package/packages/providers/completeful/package.json +7 -2
  358. package/packages/runtime-protocol/src/index.js +154 -0
  359. package/packages/theme-church-site/package.json +17 -6
  360. package/packages/theme-church-site/src/harvest.json +4 -2
  361. package/packages/theme-church-site/src/index.js +7 -3
  362. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  363. package/packages/theme-companions-site/package.json +17 -6
  364. package/packages/theme-companions-site/src/harvest.json +4 -2
  365. package/packages/theme-companions-site/src/index.js +7 -3
  366. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  367. package/packages/theme-floors-site/package.json +17 -6
  368. package/packages/theme-floors-site/src/harvest.json +4 -2
  369. package/packages/theme-floors-site/src/index.js +7 -3
  370. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  371. package/packages/theme-fuelnfree-site/package.json +17 -6
  372. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  373. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  374. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  375. package/packages/theme-handyman-site/package.json +17 -6
  376. package/packages/theme-handyman-site/src/harvest.json +4 -2
  377. package/packages/theme-handyman-site/src/index.js +7 -3
  378. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  379. package/packages/theme-insurance-site/package.json +17 -6
  380. package/packages/theme-insurance-site/src/harvest.json +4 -2
  381. package/packages/theme-insurance-site/src/index.js +7 -3
  382. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  383. package/packages/theme-scenes/README.md +164 -0
  384. package/packages/theme-scenes/package.json +54 -0
  385. package/packages/theme-scenes/src/blocks/index.js +30 -0
  386. package/packages/theme-scenes/src/contracts/index.js +286 -0
  387. package/packages/theme-scenes/src/demos/index.js +65 -0
  388. package/packages/theme-scenes/src/index.js +75 -0
  389. package/packages/theme-scenes/src/presets/index.js +263 -0
  390. package/packages/theme-scenes/src/registry.js +187 -0
  391. package/packages/theme-scenes/src/runtime/compile.js +119 -0
  392. package/packages/theme-scenes/src/scenes/index.js +146 -0
  393. package/packages/theme-scenes/src/shell/index.js +47 -0
  394. package/packages/theme-scenes/src/themes/index.js +129 -0
  395. package/packages/theme-scenes/src/visuals/index.js +41 -0
  396. package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
  397. package/packages/theme-shinshu-site/package.json +17 -6
  398. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  399. package/packages/theme-shinshu-site/src/index.js +7 -3
  400. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  401. package/packages/work-graph/package.json +14 -4
  402. package/packages/work-graph/src/index.js +34 -1
  403. package/packages/work-graph/src/renderers/gantt-model.js +24 -0
  404. package/packages/work-graph/test/work-graph.test.mjs +27 -7
  405. package/protocol/FILEMETA_V1.md +2 -2
  406. package/protocol/README.md +15 -7
  407. package/protocol/apps/agentsam.app.v1.schema.json +89 -7
  408. package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
  409. package/protocol/assets/README.md +9 -0
  410. package/protocol/assets/asset-record.v1.schema.json +64 -0
  411. package/protocol/capabilities/manifest.json +1 -1
  412. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  413. package/protocol/presets/catalog.json +2 -2
  414. package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
  415. package/protocol/scoring/README.md +10 -0
  416. package/protocol/scoring/scorecard.v1.schema.json +65 -0
  417. package/protocol/theme-refinery/lineage-registry.json +105 -0
  418. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  419. package/protocol/ui/icon-registry.mjs +1 -0
  420. package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
  421. package/registry/cms-rust-machine-20260928/manifest.json +22 -0
  422. package/registry/cms-rust-machine-20260928/migration.sql +237 -0
  423. package/registry/cms-rust-machine-20260928/receipt.json +21 -0
  424. package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
  425. package/scripts/build_rapid_rust_cli.py +83 -0
  426. package/skills/grok-auth/SKILL.md +110 -0
  427. package/skills/grok-auth/agentsam.skill.json +25 -0
  428. package/skills/grok-auth/references/grok-identity.md +64 -0
  429. package/skills/grok-auth/references/per-user-data.md +49 -0
  430. package/skills/grok-auth/references/prewired-and-env.md +54 -0
  431. package/skills/grok-auth/references/session-ui.md +133 -0
  432. package/skills/grok-auth/references/sign-in-methods.md +55 -0
  433. package/skills/grok-auth/references/wiring.md +71 -0
  434. package/skills/grok-building-games/SKILL.md +213 -0
  435. package/skills/grok-building-games/agentsam.skill.json +25 -0
  436. package/skills/grok-building-games/references/3d-libs.md +64 -0
  437. package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
  438. package/skills/grok-building-games/references/audio.md +129 -0
  439. package/skills/grok-building-games/references/babylon.md +202 -0
  440. package/skills/grok-building-games/references/collision-physics.md +122 -0
  441. package/skills/grok-building-games/references/ecs-architecture.md +111 -0
  442. package/skills/grok-building-games/references/game-feel-juice.md +110 -0
  443. package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
  444. package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
  445. package/skills/grok-building-games/references/genres/fps.md +105 -0
  446. package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
  447. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
  448. package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
  449. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
  450. package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
  451. package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
  452. package/skills/grok-building-games/references/input.md +139 -0
  453. package/skills/grok-building-games/references/phaser.md +277 -0
  454. package/skills/grok-building-games/references/procedural-generation.md +141 -0
  455. package/skills/grok-building-games/references/save-persistence.md +108 -0
  456. package/skills/grok-building-games/references/threejs-foundational.md +148 -0
  457. package/skills/grok-controls/SKILL.md +274 -0
  458. package/skills/grok-controls/agentsam.skill.json +25 -0
  459. package/skills/grok-design-ui/SKILL.md +122 -0
  460. package/skills/grok-design-ui/agentsam.skill.json +25 -0
  461. package/skills/grok-design-ui/references/animations.md +379 -0
  462. package/skills/grok-design-ui/references/performance.md +88 -0
  463. package/skills/grok-design-ui/references/refined-ui.md +384 -0
  464. package/skills/grok-design-ui/references/surfaces.md +247 -0
  465. package/skills/grok-design-ui/references/typography.md +123 -0
  466. package/skills/grok-game-animation-frames/SKILL.md +84 -0
  467. package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
  468. package/skills/grok-game-asset-core/SKILL.md +69 -0
  469. package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
  470. package/skills/grok-game-character-consistency/SKILL.md +69 -0
  471. package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
  472. package/skills/grok-game-tilesets/SKILL.md +65 -0
  473. package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
  474. package/skills/grok-game-ui-icons/SKILL.md +56 -0
  475. package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
  476. package/skills/grok-generate2dmap/LICENSE +21 -0
  477. package/skills/grok-generate2dmap/SKILL.md +120 -0
  478. package/skills/grok-generate2dmap/SOURCE.md +6 -0
  479. package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
  480. package/skills/grok-generate2dmap/references/deliverables.md +101 -0
  481. package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
  482. package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
  483. package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
  484. package/skills/grok-generate2dmap/references/pipeline.md +149 -0
  485. package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
  486. package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
  487. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
  488. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
  489. package/skills/grok-generate2dsprite/LICENSE +21 -0
  490. package/skills/grok-generate2dsprite/SKILL.md +313 -0
  491. package/skills/grok-generate2dsprite/SOURCE.md +6 -0
  492. package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
  493. package/skills/grok-generate2dsprite/references/modes.md +124 -0
  494. package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
  495. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
  496. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
  497. package/skills/grok-imagine/SKILL.md +201 -0
  498. package/skills/grok-imagine/agentsam.skill.json +25 -0
  499. package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
  500. package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
  501. package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
  502. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
  503. package/skills/grok-neon/SKILL.md +157 -0
  504. package/skills/grok-neon/agentsam.skill.json +25 -0
  505. package/skills/grok-og/SKILL.md +102 -0
  506. package/skills/grok-og/agentsam.skill.json +25 -0
  507. package/skills/grok-og/references/brand-pass.md +53 -0
  508. package/skills/grok-og/references/custom-card.md +107 -0
  509. package/skills/grok-og/references/favicon-and-icons.md +48 -0
  510. package/skills/grok-og/references/og-type-contract.md +18 -0
  511. package/skills/grok-og/references/placeholder-card.md +21 -0
  512. package/skills/grok-og/references/x-banner.md +41 -0
  513. package/skills/grok-threejs/SKILL.md +67 -0
  514. package/skills/grok-threejs/agentsam.skill.json +25 -0
  515. package/skills/grok-threejs/references/llms-full.txt +2780 -0
  516. package/skills/grok-video2dsprite/LICENSE +21 -0
  517. package/skills/grok-video2dsprite/SKILL.md +236 -0
  518. package/skills/grok-video2dsprite/SOURCE.md +6 -0
  519. package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
  520. package/skills/grok-video2dsprite/references/pipeline.md +90 -0
  521. package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
  522. package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
  523. package/skills/grok-xai-api/SKILL.md +152 -0
  524. package/skills/grok-xai-api/agentsam.skill.json +25 -0
  525. package/src/attachments/index.js +6 -0
  526. package/src/attachments/intake.js +235 -0
  527. package/src/capabilities/repository-snapshot.js +19 -2
  528. package/src/cli/command-catalog.js +53 -3
  529. package/src/cli/dispatch.js +1 -0
  530. package/src/cli.js +192 -26
  531. package/src/cloudflare/runtime-status.js +2 -1
  532. package/src/commands/account-auth.js +94 -8
  533. package/src/commands/app.js +307 -3
  534. package/src/commands/autorag.js +67 -13
  535. package/src/commands/billing.js +127 -0
  536. package/src/commands/brand.js +74 -60
  537. package/src/commands/cheat-sheet.js +179 -0
  538. package/src/commands/cloudflare-login.js +222 -0
  539. package/src/commands/cloudflare.js +453 -23
  540. package/src/commands/codebaseindex.js +51 -3
  541. package/src/commands/compute.js +4 -0
  542. package/src/commands/connections.js +11 -5
  543. package/src/commands/credentials.js +116 -0
  544. package/src/commands/gcloud-auth.js +427 -0
  545. package/src/commands/google-cloud.js +375 -0
  546. package/src/commands/identity-init.js +2 -2
  547. package/src/commands/knowledge.js +59 -2
  548. package/src/commands/machine-binary.js +103 -0
  549. package/src/commands/machine.js +137 -0
  550. package/src/commands/mcp.js +226 -33
  551. package/src/commands/ollama.js +3 -2
  552. package/src/commands/plugins.js +7 -2
  553. package/src/commands/product.js +36 -0
  554. package/src/commands/runtime-status.js +28 -9
  555. package/src/commands/runtime.js +313 -0
  556. package/src/commands/rust.js +24 -0
  557. package/src/commands/security.js +67 -4
  558. package/src/commands/setup.js +296 -0
  559. package/src/commands/shell.js +16 -3
  560. package/src/commands/start-local.js +2 -2
  561. package/src/commands/status.js +8 -1
  562. package/src/commands/terminal.js +171 -0
  563. package/src/commands/update.js +140 -0
  564. package/src/commands/whoami.js +329 -65
  565. package/src/features/resolve.js +2 -0
  566. package/src/index.js +4 -0
  567. package/src/indexing/ingest/inventory.js +254 -19
  568. package/src/indexing/ingest/materials.js +3 -9
  569. package/src/indexing/ingest/style-evidence.js +181 -0
  570. package/src/knowledge/engine.js +21 -2
  571. package/src/knowledge/runtime-discovery.js +127 -0
  572. package/src/knowledge/source.js +3 -3
  573. package/src/lib/account-session.js +11 -4
  574. package/src/lib/app-authority.js +172 -0
  575. package/src/lib/auth.js +94 -21
  576. package/src/lib/core-client.js +5 -6
  577. package/src/lib/credentials-audit.js +451 -0
  578. package/src/lib/deploy/health.js +24 -6
  579. package/src/lib/detect-context.js +7 -1
  580. package/src/lib/google-cloud-connection.js +270 -0
  581. package/src/lib/google-cloud-inventory.js +385 -0
  582. package/src/lib/google-desktop-oauth.js +372 -0
  583. package/src/lib/google-studio-brokered-oauth.js +158 -0
  584. package/src/lib/identity-scaffold.js +76 -18
  585. package/src/lib/init-options.js +192 -0
  586. package/src/lib/local-scaffold.js +48 -16
  587. package/src/lib/provider-command-remediation.js +308 -0
  588. package/src/lib/provider-credentials.js +8 -0
  589. package/src/lib/scaffold/index.js +8 -2
  590. package/src/lib/scaffold/mcp-server.js +43 -0
  591. package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
  592. package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
  593. package/src/lib/scaffold/wizards/cms.js +93 -0
  594. package/src/lib/scaffold/wizards/mcp-server.js +61 -0
  595. package/src/lib/setup/contract.js +26 -0
  596. package/src/lib/setup/discover.js +116 -0
  597. package/src/lib/setup/execute.js +205 -0
  598. package/src/lib/setup/planner.js +134 -0
  599. package/src/lib/setup/recipes.js +235 -0
  600. package/src/lib/setup/runtime-persist.js +197 -0
  601. package/src/lib/setup/runtime.js +394 -0
  602. package/src/lib/slash-commands.js +2 -0
  603. package/src/lib/terminal/machine-identity.js +95 -0
  604. package/src/lib/terminal-local.js +164 -0
  605. package/src/lib/terminal-scopes.js +52 -0
  606. package/src/lib/whoami-capabilities.js +184 -0
  607. package/src/local-pty/server.js +34 -5
  608. package/src/mcp/authority.js +58 -108
  609. package/src/mcp/client-adapters.js +68 -144
  610. package/src/mcp/client.js +142 -122
  611. package/src/mcp/cloudflare-bundles.js +225 -0
  612. package/src/mcp/index.js +12 -0
  613. package/src/models/discovery.js +40 -22
  614. package/src/models/inventory-core.d.ts +105 -0
  615. package/src/models/inventory-core.js +54 -6
  616. package/src/plugins/cloudflare.js +1 -1
  617. package/src/providers/ollama-chat.js +2 -1
  618. package/src/sam/types.js +27 -2
  619. package/src/security/inventory.js +12 -2
  620. package/src/security/local-vault.js +2 -0
  621. package/src/security/logs.js +3 -0
  622. package/src/security/scan.js +1 -1
  623. package/src/ui/cli/help.js +41 -0
  624. package/test/account-session.test.mjs +3 -3
  625. package/test/app-authority-context.test.mjs +32 -0
  626. package/test/apps-scaffold-contract.test.mjs +3 -2
  627. package/test/cli/api-key-env-whoami.test.mjs +2 -2
  628. package/test/cli/catalog-authority.test.mjs +64 -0
  629. package/test/cli/codebaseindex-plan-ux.test.mjs +1 -1
  630. package/test/cli/machine-command.test.mjs +34 -0
  631. package/test/cli/mcp-client.test.mjs +21 -10
  632. package/test/cli/runtime-persist.test.mjs +56 -0
  633. package/test/cli/rust-command.test.mjs +21 -0
  634. package/test/credentials-audit.test.mjs +113 -0
  635. package/test/deploy-health-scan.test.mjs +29 -1
  636. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
  637. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
  638. package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
  639. package/test/gcloud-auth.test.mjs +111 -0
  640. package/test/google-cloud-connection.test.mjs +83 -0
  641. package/test/google-cloud-inventory.test.mjs +64 -0
  642. package/test/init-options.test.mjs +35 -0
  643. package/test/integration/app-command.test.mjs +30 -0
  644. package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
  645. package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
  646. package/test/integration/cad-project.test.mjs +4 -1
  647. package/test/integration/cms-app-scaffold.test.mjs +77 -0
  648. package/test/integration/cms-site-tenancy-contract.test.mjs +31 -19
  649. package/test/integration/codebaseindex-ingest.test.mjs +89 -0
  650. package/test/integration/database-hosted-honesty.test.mjs +49 -0
  651. package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
  652. package/test/integration/features-resolve.test.mjs +30 -11
  653. package/test/integration/hosted-work-host-authority.test.mjs +47 -0
  654. package/test/integration/inspect-path-cli.test.mjs +46 -0
  655. package/test/integration/inventory-eligibility.test.mjs +59 -0
  656. package/test/integration/inventory-evidence.test.mjs +125 -0
  657. package/test/integration/local-provider-bridge.test.mjs +65 -0
  658. package/test/integration/local-studio-settings-production.test.mjs +40 -0
  659. package/test/integration/lockfile-sync.test.mjs +26 -0
  660. package/test/integration/provider-env-cli.test.mjs +13 -3
  661. package/test/integration/runtime-status.integration.test.mjs +17 -1
  662. package/test/integration/theme-package-registry.test.mjs +31 -0
  663. package/test/knowledge.test.mjs +35 -1
  664. package/test/loopback-oauth.test.mjs +53 -0
  665. package/test/ollama.test.mjs +22 -0
  666. package/test/repository-snapshot-view.test.mjs +2 -2
  667. package/test/security.test.mjs +37 -0
  668. package/test/setup-planner.test.mjs +74 -0
  669. package/test/setup-runtime.test.mjs +51 -0
  670. package/test/terminal/local-pty.mock.test.mjs +3 -1
  671. package/test/terminal-machine-identity.test.mjs +88 -0
  672. package/test/whoami-resume.test.mjs +27 -6
  673. package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
  674. package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
  675. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
  676. package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
  677. package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
  678. package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
  679. package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
  680. package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
  681. package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
  682. package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
  683. package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
  684. package/packages/agentsam-nav/dist/browser.d.ts +0 -11
  685. package/packages/agentsam-nav/dist/browser.global.js +0 -132
  686. package/packages/agentsam-nav/dist/browser.js +0 -613
  687. package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
  688. package/packages/agentsam-nav/dist/index.d.ts +0 -11
  689. package/packages/agentsam-nav/dist/index.js +0 -614
  690. package/packages/agentsam-nav/dist/legacy.css +0 -83
  691. package/packages/agentsam-nav/dist/shell.css +0 -113
  692. package/packages/agentsam-nav/dist/theme.css +0 -113
  693. package/packages/agentsam-nav/dist/utils.d.ts +0 -1
  694. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
  695. package/packages/work-graph/prototype/README.md +0 -32
  696. package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
  697. package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
  698. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
  699. package/packages/work-graph/prototype-gnantt.html +0 -655
@@ -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,13 +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';
13
25
  import { planGoap, GOAP_ENGINE } from '../sam/planning/goap.js';
14
26
  import { suggestNextActions } from '../progression/index.js';
15
27
  import { createRuntimeActivity } from '../ui/runtime-activity.js';
16
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
+
17
47
  function parseArgs(argv = []) {
18
- 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
+ };
19
57
  for (let i = 0; i < argv.length; i += 1) {
20
58
  const a = argv[i];
21
59
  if (a === '--json') out.json = true;
@@ -67,25 +105,44 @@ export async function runBrand(argv = []) {
67
105
  const action = sub || 'summary';
68
106
 
69
107
  if (action === 'help' || action === '--help') {
70
- 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]
71
109
 
72
- summary (default) Short brand intelligence overview
73
- scan Deterministic evidence extraction (no model)
74
- resolve Cluster tokens into inferred roles
75
- inspect [conflicts] Show conflicts / component families
76
- plan [--goap] Normalization plan (preserve → improve)
77
- apply --dry-run Mutation stub (writes require future approval)
78
- verify Stub verification gate
110
+ Brand intelligence:
111
+ summary|scan|resolve|inspect|plan|apply
79
112
 
80
- Options:
81
- --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.
82
129
  `);
83
130
  return;
84
131
  }
85
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
+
86
143
  if (action === 'apply') {
87
144
  if (!opts.dryRun) {
88
- 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');
89
146
  process.exitCode = 2;
90
147
  return;
91
148
  }
@@ -99,17 +156,6 @@ Options:
99
156
  return;
100
157
  }
101
158
 
102
- if (action === 'verify') {
103
- const out = {
104
- capability: 'brand.verify',
105
- status: 'stub',
106
- message: 'Verify will re-scan and diff against .agentsam/brand/contract.json',
107
- };
108
- if (opts.json) console.log(JSON.stringify(out, null, 2));
109
- else console.log(out.message);
110
- return;
111
- }
112
-
113
159
  const tty = process.stdout.isTTY && !opts.json;
114
160
  const activity = tty ? createRuntimeActivity({ label: 'Brand intelligence' }) : null;
115
161
  const onEvent = (ev) => {
@@ -123,11 +169,7 @@ Options:
123
169
  const snapshot = await loadSnapshot(opts);
124
170
 
125
171
  if (action === 'summary' || action === 'scan' || action === 'resolve' || action === 'inspect' || action === 'plan') {
126
- const scan = await brandScan({
127
- cwd: opts.cwd,
128
- snapshot,
129
- onEvent,
130
- });
172
+ const scan = await brandScan({ cwd: opts.cwd, snapshot, onEvent });
131
173
 
132
174
  if (action === 'scan') {
133
175
  const enriched = attachProgression('brand.scan', scan, opts.json);
@@ -137,8 +179,6 @@ Options:
137
179
  console.log(`\nBrand scan complete · ${scan.repository.snapshot_id}`);
138
180
  console.log(` colors ${scan.tokens.colors.length}`);
139
181
  console.log(` conflicts ${scan.conflicts.length}`);
140
- console.log(` css files ${scan.sources.css}`);
141
- console.log(` components ${scan.sources.components}`);
142
182
  console.log(` hash ${scan.content_hash}`);
143
183
  }
144
184
  return;
@@ -152,28 +192,21 @@ Options:
152
192
  else {
153
193
  console.log(`\nBrand resolve · ${Object.keys(resolved.resolved.colors).length} color roles`);
154
194
  console.log(` ambiguities ${resolved.ambiguities.length}`);
155
- for (const a of resolved.ambiguities.slice(0, 5)) {
156
- console.log(` ? ${a.question}`);
157
- }
158
195
  }
159
196
  return;
160
197
  }
161
198
 
162
199
  if (action === 'inspect') {
200
+ // brand intelligence inspect (conflicts) — asset inspect is ASSET_ACTIONS
163
201
  const focus = rest[0] || 'conflicts';
164
202
  const payload = focus === 'components'
165
203
  ? { capability: 'brand.inspect', focus, components: scan.components, patterns: scan.patterns }
166
204
  : { capability: 'brand.inspect', focus, conflicts: scan.conflicts, colors: scan.tokens.colors.slice(0, 20) };
167
205
  if (opts.json) console.log(JSON.stringify(payload, null, 2));
168
- else if (focus === 'components') {
169
- console.log('\nComponent families');
170
- for (const [k, v] of Object.entries(scan.components).slice(0, 20)) {
171
- console.log(` ${k} ×${v.count}`);
172
- }
173
- } else {
206
+ else {
174
207
  console.log(`\nConflicts (${scan.conflicts.length})`);
175
208
  for (const c of scan.conflicts.slice(0, 15)) {
176
- console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance} · n=${c.occurrences}`);
209
+ console.log(` ${c.values?.join(' ≈ ')} · d=${c.distance}`);
177
210
  }
178
211
  }
179
212
  return;
@@ -183,7 +216,6 @@ Options:
183
216
  return runBrandPlanInner({ scan, resolved, opts });
184
217
  }
185
218
 
186
- // summary
187
219
  const contract = buildBrandContractDraft({ scan, resolved });
188
220
  const plan = brandPlan({ scan, resolved, contract });
189
221
  const { next_actions } = suggestNextActions({ capability: 'brand.scan', result: scan });
@@ -201,8 +233,6 @@ Options:
201
233
  else {
202
234
  console.log(`\nBrand · ${scan.repository.snapshot_id}`);
203
235
  console.log(` ${plan.summary.colors} colors · ${plan.summary.near_duplicate_pairs} near-duplicates`);
204
- console.log(` ${plan.summary.button_families} button families · ${plan.summary.header_families} header/nav families`);
205
- console.log(` confidence colors=${resolved.confidence.colors} typography=${resolved.confidence.typography}`);
206
236
  printNext(next_actions);
207
237
  }
208
238
  }
@@ -231,11 +261,6 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
231
261
  cost: planned.total_cost ?? planned.cost,
232
262
  engine: planned.engine || GOAP_ENGINE,
233
263
  status: planned.status,
234
- expanded_states: planned.expanded_states,
235
- generated_states: planned.generated_states,
236
- frontier_peak: planned.frontier_peak,
237
- elapsed_ms: planned.elapsed_ms,
238
- error: planned.error,
239
264
  };
240
265
  }
241
266
  const enriched = attachProgression('brand.plan', plan, opts.json);
@@ -250,8 +275,6 @@ async function runBrandPlanInner({ scan, resolved, opts }) {
250
275
  else {
251
276
  console.log('\nBrand coherence plan');
252
277
  console.log(` philosophy ${plan.philosophy}`);
253
- console.log(` colors ${plan.summary.colors} (${plan.summary.near_duplicate_pairs} near-dup pairs)`);
254
- console.log(' steps');
255
278
  for (const [i, s] of plan.steps.entries()) {
256
279
  console.log(` ${i + 1}. [${s.action}] ${s.title}`);
257
280
  }
@@ -263,16 +286,7 @@ export async function runPlan(argv = []) {
263
286
  const opts = parseArgs(argv);
264
287
  const [domain, ...rest] = opts.positionals;
265
288
  if (!domain || domain === 'help') {
266
- console.log(`usage: agentsam plan <domain>
267
-
268
- Domains:
269
- brand [--goap] [--json] [--write]
270
- security (use: agentsam security scan)
271
- repository (use: agentsam inspect)
272
- release (use: agentsam status / package verify)
273
-
274
- Composable grammar: agentsam plan brand
275
- `);
289
+ console.log(`usage: agentsam plan <domain>\n\nDomains:\n brand [--goap] [--json] [--write]\n`);
276
290
  return;
277
291
  }
278
292
  if (domain === 'brand') {
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Canonical Agent Sam cheat-sheet — gcloud-like command groups.
3
+ * Old top-level commands remain as compatibility aliases.
4
+ * Every row shows a copy-pasteable `agentsam …` invocation.
5
+ */
6
+
7
+ const GROUPS = Object.freeze([
8
+ {
9
+ id: 'work',
10
+ label: 'Work',
11
+ commands: [
12
+ ['project / create', 'Scaffold or enter a project'],
13
+ ['work / goap', 'Goals, blackboard, plans'],
14
+ ['brand / plan', 'Brand intelligence and composable plans'],
15
+ ['artifacts', 'Receipts and deploy evidence'],
16
+ ],
17
+ },
18
+ {
19
+ id: 'repository',
20
+ label: 'Repository',
21
+ commands: [
22
+ ['inspect', 'Bounded repository authority view'],
23
+ ['machine', 'Deterministic local perception + asset discovery'],
24
+ ['machine inspect', 'Inspect a path (file or directory)'],
25
+ ['recon', 'Bounded-worker finding packets'],
26
+ ['codebaseindex', 'AST ingest + optional embeddings'],
27
+ ['index', 'Project inventory + knowledge index commands'],
28
+ ['index status', 'Show knowledge index freshness'],
29
+ ['search', 'Retrieve from the local knowledge index'],
30
+ ['merkle', 'Integrity snapshots'],
31
+ ['security', 'Dependency + trust-boundary scan'],
32
+ ],
33
+ },
34
+ {
35
+ id: 'runtime',
36
+ label: 'Runtime',
37
+ commands: [
38
+ ['terminal / shell', 'Interactive slash-command shell'],
39
+ ['connections', 'Account, terminal, Worker, Cloudflare evidence'],
40
+ ['tunnel', 'Real Cloudflare Tunnels via Wrangler'],
41
+ ['go', 'Go product discover/build/deploy'],
42
+ ['dockerize', 'Supported containers'],
43
+ ['compute', 'Google Cloud VM / IAM helpers'],
44
+ ['gcloud auth login', 'Desktop PKCE Google Cloud connection (auto callback)'],
45
+ ['gcloud auth login --web', 'Hosted Local Studio identity (openid/email/profile)'],
46
+ ['gcloud auth login --sdk', 'Native Google Cloud SDK OAuth (optional)'],
47
+ ['google-cloud', 'Projects · compute · IAM SAs · billing · doctor'],
48
+ ],
49
+ },
50
+ {
51
+ id: 'providers',
52
+ label: 'Providers',
53
+ commands: [
54
+ ['setup', 'Discover → plan → approve → install (brew-style)'],
55
+ ['providers', 'Configure / verify model + infra credentials'],
56
+ ['models', 'Provider-verified model catalog'],
57
+ ['cloudflare', 'Wrangler reads + Worker profiles'],
58
+ ['google-cloud', 'Customer GCP connection inventory'],
59
+ ['gcloud auth login', 'Desktop PKCE Google Cloud (auto callback)'],
60
+ ['credentials audit', 'Configured · verified · drift (names only)'],
61
+ ['plugins', 'Install and manage plugins'],
62
+ ],
63
+ },
64
+ {
65
+ id: 'data',
66
+ label: 'Data',
67
+ commands: [
68
+ ['db', 'Project-local SQLite'],
69
+ ['knowledge / search', 'Indexed retrieval'],
70
+ ['autorag', 'AutoRAG helpers'],
71
+ ],
72
+ },
73
+ {
74
+ id: 'ai',
75
+ label: 'AI',
76
+ commands: [
77
+ ['models', 'Hosted + local model probes'],
78
+ ['skills', 'Portable skill vocabulary'],
79
+ ['context', 'Context economics + git bridge'],
80
+ ['usage / session', 'Spend and resume receipts'],
81
+ ],
82
+ },
83
+ {
84
+ id: 'identity',
85
+ label: 'Identity',
86
+ commands: [
87
+ ['whoami', 'Account + safe credential status'],
88
+ ['login / logout', 'Browser OAuth session'],
89
+ ['env', 'Vault/keychain shell loader'],
90
+ ['api-key', 'Create/rotate aak_* keys'],
91
+ ['identity', 'Portable OAuth portal surfaces'],
92
+ ],
93
+ },
94
+ {
95
+ id: 'apps',
96
+ label: 'Apps',
97
+ commands: [
98
+ ['app / local-studio', 'Bundled Local Studio launcher'],
99
+ ['cad', 'CAD project tools'],
100
+ ['brand', 'Brand intelligence'],
101
+ ],
102
+ },
103
+ {
104
+ id: 'system',
105
+ label: 'System',
106
+ commands: [
107
+ ['status', 'Account · models · terminal · live deploy'],
108
+ ['doctor / credentials audit --verify', 'Auth + drift health'],
109
+ ['update', 'Component update preview (gcloud-like)'],
110
+ ['billing', 'Billing account relationships (not --billing-project)'],
111
+ ['cheat-sheet', 'This page'],
112
+ ['version', 'Print CLI version'],
113
+ ],
114
+ },
115
+ ]);
116
+
117
+ /** Expand "a / b" rows into copy-pasteable `agentsam …` invocations. */
118
+ export function agentsamInvocations(cmd) {
119
+ const raw = String(cmd || '').trim();
120
+ if (!raw) return [];
121
+ if (raw.includes(' / ')) {
122
+ return raw.split(' / ').map((part) => `agentsam ${part.trim()}`);
123
+ }
124
+ return [`agentsam ${raw}`];
125
+ }
126
+
127
+ export function listCheatSheetGroups() {
128
+ return GROUPS.map((group) => ({
129
+ id: group.id,
130
+ label: group.label,
131
+ commands: group.commands.map(([cmd, summary]) => ({
132
+ cmd,
133
+ summary,
134
+ invocations: agentsamInvocations(cmd),
135
+ })),
136
+ }));
137
+ }
138
+
139
+ export function renderCheatSheet(version) {
140
+ const lines = [
141
+ '',
142
+ ` Agent Sam cheat-sheet${version ? ` · v${version}` : ''}`,
143
+ ' Organized hierarchy · each row shows a runnable `agentsam …` command.',
144
+ '',
145
+ ];
146
+ for (const group of GROUPS) {
147
+ lines.push(` ${group.label}`);
148
+ for (const [cmd, summary] of group.commands) {
149
+ const invocations = agentsamInvocations(cmd);
150
+ const primary = invocations[0] || `agentsam ${cmd}`;
151
+ lines.push(` ${primary.padEnd(52)} ${summary}`);
152
+ for (const extra of invocations.slice(1)) {
153
+ lines.push(` ${extra.padEnd(52)} (same group)`);
154
+ }
155
+ }
156
+ lines.push('');
157
+ }
158
+ lines.push(' Failure follow-through');
159
+ lines.push(' agentsam credentials remediate -- gcloud edge-cloud service-accounts keys create');
160
+ lines.push(' agentsam credentials audit --verify --drift --names-only');
161
+ lines.push('');
162
+ lines.push(' Docs');
163
+ lines.push(' docs/contracts/environment-vocabulary.md');
164
+ lines.push(' docs/AUTH_IDENTITY_CONTRACT.md');
165
+ lines.push('');
166
+ return lines.join('\n');
167
+ }
168
+
169
+ export function runCheatSheet(argv = [], options = {}) {
170
+ const write = options.write || ((s) => process.stdout.write(s));
171
+ const json = argv.includes('--json');
172
+ const version = options.version || '';
173
+ if (json) {
174
+ write(JSON.stringify({ schema_version: 'agentsam-cheat-sheet-v1', version, groups: listCheatSheetGroups() }, null, 2) + '\n');
175
+ return 0;
176
+ }
177
+ write(renderCheatSheet(version));
178
+ return 0;
179
+ }
@@ -0,0 +1,222 @@
1
+ /**
2
+ * agentsam_cf_browser_oauth — authorize Cloudflare API scopes via browser OAuth.
3
+ *
4
+ * Feature packs expand to scoped OAuth requests so users never scroll 300+ CF
5
+ * permissions. Flow: IAM-authenticated CLI → ENTER → open authorize URL → CF consent.
6
+ */
7
+ import { resolveAccountAuthority } from '../lib/auth.js';
8
+ import { promptToOpenUrl } from '../lib/open-url.js';
9
+ import {
10
+ LOCAL_STUDIO_APP_ID,
11
+ resolveLocalStudioHostOrigin,
12
+ resolvePlatformAccountIssuer,
13
+ } from '../lib/app-authority.js';
14
+ import {
15
+ listCloudflareFeaturePacks,
16
+ getCloudflareFeaturePack,
17
+ scopesForFeaturePacks,
18
+ scopesForCapabilities,
19
+ } from '../../packages/connectors/cloudflare/src/index.js';
20
+
21
+ function clean(value) {
22
+ return value == null ? '' : String(value).trim();
23
+ }
24
+
25
+ function writeLine(write, value = '') {
26
+ write(`${value}\n`);
27
+ }
28
+
29
+ function parseLoginArgs(argv = []) {
30
+ const out = {
31
+ packs: [],
32
+ capabilities: [],
33
+ json: false,
34
+ listPacks: false,
35
+ help: false,
36
+ open: true,
37
+ };
38
+ for (let i = 0; i < argv.length; i += 1) {
39
+ const arg = argv[i];
40
+ if (arg === '--json') out.json = true;
41
+ else if (arg === '--help' || arg === '-h') out.help = true;
42
+ else if (arg === '--list-packs' || arg === 'packs') out.listPacks = true;
43
+ else if (arg === '--no-open') out.open = false;
44
+ else if (arg === '--pack' || arg === '--packs') {
45
+ const raw = argv[++i] || '';
46
+ out.packs.push(...raw.split(',').map((s) => s.trim()).filter(Boolean));
47
+ } else if (arg.startsWith('--pack=')) {
48
+ out.packs.push(...arg.slice('--pack='.length).split(',').map((s) => s.trim()).filter(Boolean));
49
+ } else if (arg === '--capability' || arg === '--capabilities') {
50
+ const raw = argv[++i] || '';
51
+ out.capabilities.push(...raw.split(',').map((s) => s.trim()).filter(Boolean));
52
+ } else if (arg.startsWith('--capability=')) {
53
+ out.capabilities.push(...arg.slice('--capability='.length).split(',').map((s) => s.trim()).filter(Boolean));
54
+ } else if (!arg.startsWith('-') && getCloudflareFeaturePack(arg)) {
55
+ out.packs.push(arg);
56
+ } else {
57
+ throw new Error(`unknown cloudflare login option: ${arg}`);
58
+ }
59
+ }
60
+ return out;
61
+ }
62
+
63
+ const LOGIN_HELP = `Agent Sam · Cloudflare browser OAuth (agentsam_cf_browser_oauth)
64
+
65
+ Authorize Cloudflare API access without picking from 300+ scopes.
66
+ Feature packs expand to OAuth scopes on the Local Studio APP host.
67
+
68
+ Namespaces (do not collapse):
69
+ APP.id local-studio
70
+ HOST.origin from apps/local-studio/agentsam.app.json hosts[]
71
+ PLATFORM issuer IAM_OAUTH_ISSUER (account API — separate)
72
+
73
+ agentsam cloudflare login --pack agentsam
74
+ agentsam cloudflare login --pack data,ai
75
+ agentsam cloudflare login --capability cloudflare.d1,cloudflare.hyperdrive
76
+ agentsam cloudflare login --list-packs
77
+ agentsam cloudflare authorize --pack data # alias
78
+
79
+ Flow
80
+ 1. Account auth: AGENTSAM_API_KEY + IAM_OAUTH_ISSUER (PLATFORM).
81
+ 2. CLI prints Local Studio HOST authorize URL; press ENTER to open.
82
+ 3. Cloudflare consent for that pack only (AgentSam Local Studio OAuth client).
83
+ `;
84
+
85
+ /**
86
+ * Build Cloudflare connection OAuth start URL from local-studio APP HOST.
87
+ * Packs expand client-side; HOST serves /api/connections/cloudflare/start.
88
+ */
89
+ export function buildCloudflareBrowserOAuthStartUrl(options = {}) {
90
+ const packs = (options.packs || []).map((p) => String(p).trim().toLowerCase()).filter(Boolean);
91
+ const capabilities = (options.capabilities || []).map((c) => String(c).trim()).filter(Boolean);
92
+
93
+ for (const id of packs) {
94
+ if (id !== 'baseline' && !getCloudflareFeaturePack(id)) {
95
+ const err = new Error(`unknown Cloudflare feature pack: ${id}`);
96
+ err.code = 'unknown_feature_pack';
97
+ throw err;
98
+ }
99
+ }
100
+
101
+ const effectivePacks = packs.length ? packs : ['agentsam'];
102
+ const scopes = scopesForFeaturePacks(effectivePacks, capabilities);
103
+ const hostOrigin = resolveLocalStudioHostOrigin({
104
+ root: options.root,
105
+ role: options.hostRole || 'production',
106
+ hostId: options.hostId,
107
+ });
108
+ const startPath = options.startPath
109
+ || '/api/connections/cloudflare/start';
110
+ const start = new URL(startPath, `${hostOrigin}/`);
111
+ start.searchParams.set('packs', effectivePacks.join(','));
112
+ if (capabilities.length) start.searchParams.set('capabilities', capabilities.join(','));
113
+ if (options.returnTo) start.searchParams.set('return_to', options.returnTo);
114
+
115
+ return {
116
+ kind: 'agentsam_cf_browser_oauth',
117
+ app_id: LOCAL_STUDIO_APP_ID,
118
+ host_origin: hostOrigin,
119
+ platform_issuer: resolvePlatformAccountIssuer(options.env || process.env, options.issuer || ''),
120
+ authorize_url: start.toString(),
121
+ path_kind: 'app_host_connections',
122
+ packs: effectivePacks,
123
+ capabilities,
124
+ scope_count: scopes.length,
125
+ scopes,
126
+ packs_detail: effectivePacks.map((id) => {
127
+ const pack = getCloudflareFeaturePack(id);
128
+ return pack
129
+ ? { id: pack.id, label: pack.label, description: pack.description, capabilities: pack.capabilities }
130
+ : { id, label: id };
131
+ }),
132
+ note: 'OAuth client + scopes authorize on local-studio HOST; account identity stays on PLATFORM IAM_OAUTH_ISSUER.',
133
+ };
134
+ }
135
+
136
+ export async function runCloudflareBrowserOAuthLogin(argv = [], options = {}) {
137
+ const args = parseLoginArgs(argv);
138
+ const write = options.write || ((text) => process.stdout.write(text));
139
+ const env = options.env || process.env;
140
+
141
+ if (args.help) {
142
+ write(LOGIN_HELP);
143
+ return { ok: true, help: true };
144
+ }
145
+
146
+ if (args.listPacks) {
147
+ const packs = listCloudflareFeaturePacks().map((pack) => ({
148
+ id: pack.id,
149
+ label: pack.label,
150
+ description: pack.description,
151
+ capabilities: pack.capabilities,
152
+ scope_count: scopesForCapabilities({ capabilities: pack.capabilities, includeBaseline: true }).length,
153
+ }));
154
+ const payload = {
155
+ schema: 'agentsam.cloudflare.feature_packs.v1',
156
+ kind: 'agentsam_cf_browser_oauth',
157
+ mitigation: 'Authorize by pack (product need), not by scrolling 300+ Cloudflare scopes. Upgrade later with another --pack.',
158
+ packs,
159
+ };
160
+ write(args.json ? `${JSON.stringify(payload, null, 2)}\n` : LOGIN_HELP);
161
+ return payload;
162
+ }
163
+
164
+ const authority = await (options.authorityLoader || resolveAccountAuthority)({
165
+ env,
166
+ home: options.home,
167
+ fetchImpl: options.fetchImpl,
168
+ refreshImpl: options.refreshImpl,
169
+ });
170
+ if (!authority.value) {
171
+ const err = new Error(
172
+ authority.error
173
+ || 'Sign in first: agentsam login (or export AGENTSAM_API_KEY)',
174
+ );
175
+ err.code = 'account_auth_required';
176
+ throw err;
177
+ }
178
+
179
+ const plan = buildCloudflareBrowserOAuthStartUrl({
180
+ env,
181
+ packs: args.packs,
182
+ capabilities: args.capabilities,
183
+ issuer: options.issuer,
184
+ });
185
+
186
+ if (args.json && !args.open) {
187
+ write(`${JSON.stringify(plan, null, 2)}\n`);
188
+ return plan;
189
+ }
190
+
191
+ writeLine(write, '');
192
+ writeLine(write, ' Agent Sam · Cloudflare browser OAuth');
193
+ writeLine(write, ` kind agentsam_cf_browser_oauth`);
194
+ writeLine(write, ` packs ${plan.packs.join(', ')}`);
195
+ writeLine(write, ` scopes ${plan.scope_count} (pack-expanded; not the full CF catalog)`);
196
+ for (const pack of plan.packs_detail) {
197
+ writeLine(write, ` · ${pack.id.padEnd(12)} ${pack.description || pack.label || ''}`);
198
+ }
199
+ writeLine(write, '');
200
+
201
+ if (args.open !== false) {
202
+ const promptImpl = options.promptToOpenUrlImpl || promptToOpenUrl;
203
+ await promptImpl(plan.authorize_url, {
204
+ heading: 'Authorize Cloudflare for AgentSam at:',
205
+ prompt: 'Press ENTER to open Cloudflare consent in your browser.',
206
+ input: options.input,
207
+ output: options.output || process.stdout,
208
+ openImpl: options.openImpl,
209
+ });
210
+ writeLine(write, ' After approving scopes in the browser, return here.');
211
+ writeLine(write, ' Next: agentsam cloudflare status --json');
212
+ writeLine(write, ' agentsam whoami --json');
213
+ writeLine(write, '');
214
+ }
215
+
216
+ if (args.json) write(`${JSON.stringify(plan, null, 2)}\n`);
217
+ return { ok: true, ...plan };
218
+ }
219
+
220
+ export function isCloudflareLoginFamily(family) {
221
+ return family === 'login' || family === 'authorize' || family === 'oauth' || family === 'packs';
222
+ }