@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,225 @@
1
+ /**
2
+ * Cloudflare-hosted MCP portal servers (tool bundles), not OAuth clients.
3
+ *
4
+ * Each entry is an MCP *server* you can register with `agentsam mcp add <name>`.
5
+ * OAuth consent stays granular via feature packs / capability ids — never the
6
+ * full ~315-scope catalog. Managing portals themselves needs mcp-portals.*.
7
+ */
8
+
9
+ import {
10
+ scopesForCapabilities,
11
+ scopesForFeaturePacks,
12
+ } from '../../packages/connectors/cloudflare/src/capabilities.js';
13
+
14
+ /**
15
+ * @typedef {object} CloudflareMcpBundle
16
+ * @property {string} name
17
+ * @property {string} display_name
18
+ * @property {string} url
19
+ * @property {'none'|'bearer'|'cloudflare_portal_oauth'|'user_oauth_cloudflare'} auth_type
20
+ * @property {'streamable_http'|'sse'} protocol
21
+ * @property {string[]} feature_packs — AgentSam CF feature pack ids for AgentSam-side upgrade
22
+ * @property {string[]} capability_ids — finer granulation than packs
23
+ * @property {string[]} portal_manage_scopes — scopes to create/manage this portal via CF API
24
+ * @property {string} description
25
+ */
26
+
27
+ /** @type {readonly CloudflareMcpBundle[]} */
28
+ export const CLOUDFLARE_MCP_SERVER_BUNDLES = Object.freeze([
29
+ {
30
+ name: 'cloudflare-api',
31
+ display_name: 'Cloudflare API (Code Mode)',
32
+ url: 'https://mcp.cloudflare.com/mcp',
33
+ auth_type: 'cloudflare_portal_oauth',
34
+ protocol: 'streamable_http',
35
+ feature_packs: [],
36
+ capability_ids: [],
37
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
38
+ description: 'Full CF API via search/execute tools — Cloudflare hosts OAuth for this portal',
39
+ },
40
+ {
41
+ name: 'cloudflare-docs',
42
+ display_name: 'Cloudflare Docs',
43
+ url: 'https://docs.mcp.cloudflare.com/mcp',
44
+ auth_type: 'none',
45
+ protocol: 'streamable_http',
46
+ feature_packs: [],
47
+ capability_ids: [],
48
+ portal_manage_scopes: ['mcp-portals.read'],
49
+ description: 'Cloudflare developer documentation reference',
50
+ },
51
+ {
52
+ name: 'cloudflare-bindings',
53
+ display_name: 'Cloudflare Workers Bindings',
54
+ url: 'https://bindings.mcp.cloudflare.com/mcp',
55
+ auth_type: 'cloudflare_portal_oauth',
56
+ protocol: 'streamable_http',
57
+ feature_packs: ['data', 'compute', 'ai'],
58
+ capability_ids: [
59
+ 'cloudflare.workers',
60
+ 'cloudflare.d1',
61
+ 'cloudflare.kv',
62
+ 'cloudflare.r2',
63
+ 'cloudflare.workers_ai',
64
+ ],
65
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
66
+ description: 'Workers storage, AI, and compute bindings',
67
+ },
68
+ {
69
+ name: 'cloudflare-builds',
70
+ display_name: 'Cloudflare Workers Builds',
71
+ url: 'https://builds.mcp.cloudflare.com/mcp',
72
+ auth_type: 'cloudflare_portal_oauth',
73
+ protocol: 'streamable_http',
74
+ feature_packs: ['compute'],
75
+ capability_ids: ['cloudflare.workers'],
76
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
77
+ description: 'Workers Builds / CI insights (workers-ci.*)',
78
+ },
79
+ {
80
+ name: 'cloudflare-observability',
81
+ display_name: 'Cloudflare Observability',
82
+ url: 'https://observability.mcp.cloudflare.com/mcp',
83
+ auth_type: 'cloudflare_portal_oauth',
84
+ protocol: 'streamable_http',
85
+ feature_packs: ['compute'],
86
+ capability_ids: ['cloudflare.workers'],
87
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
88
+ description: 'Workers observability / logs / analytics',
89
+ },
90
+ {
91
+ name: 'cloudflare-browser',
92
+ display_name: 'Cloudflare Browser Rendering',
93
+ url: 'https://browser.mcp.cloudflare.com/mcp',
94
+ auth_type: 'cloudflare_portal_oauth',
95
+ protocol: 'streamable_http',
96
+ feature_packs: ['compute'],
97
+ capability_ids: ['cloudflare.browser_rendering'],
98
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
99
+ description: 'Fetch pages, markdown, screenshots',
100
+ },
101
+ {
102
+ name: 'cloudflare-logs',
103
+ display_name: 'Cloudflare Logpush',
104
+ url: 'https://logs.mcp.cloudflare.com/mcp',
105
+ auth_type: 'cloudflare_portal_oauth',
106
+ protocol: 'streamable_http',
107
+ feature_packs: ['analytics'],
108
+ capability_ids: [],
109
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
110
+ description: 'Logpush job health',
111
+ },
112
+ {
113
+ name: 'cloudflare-ai-gateway',
114
+ display_name: 'Cloudflare AI Gateway',
115
+ url: 'https://ai-gateway.mcp.cloudflare.com/mcp',
116
+ auth_type: 'cloudflare_portal_oauth',
117
+ protocol: 'streamable_http',
118
+ feature_packs: ['ai'],
119
+ capability_ids: ['cloudflare.workers_ai'],
120
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
121
+ description: 'AI Gateway request logs',
122
+ },
123
+ {
124
+ name: 'cloudflare-audit-logs',
125
+ display_name: 'Cloudflare Audit Logs',
126
+ url: 'https://auditlogs.mcp.cloudflare.com/mcp',
127
+ auth_type: 'cloudflare_portal_oauth',
128
+ protocol: 'streamable_http',
129
+ feature_packs: ['analytics'],
130
+ capability_ids: [],
131
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
132
+ description: 'Account audit log reports',
133
+ },
134
+ {
135
+ name: 'cloudflare-dns-analytics',
136
+ display_name: 'Cloudflare DNS Analytics',
137
+ url: 'https://dns-analytics.mcp.cloudflare.com/mcp',
138
+ auth_type: 'cloudflare_portal_oauth',
139
+ protocol: 'streamable_http',
140
+ feature_packs: ['dns', 'analytics'],
141
+ capability_ids: [],
142
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
143
+ description: 'DNS performance analytics',
144
+ },
145
+ {
146
+ name: 'cloudflare-graphql',
147
+ display_name: 'Cloudflare GraphQL',
148
+ url: 'https://graphql.mcp.cloudflare.com/mcp',
149
+ auth_type: 'cloudflare_portal_oauth',
150
+ protocol: 'streamable_http',
151
+ feature_packs: ['analytics'],
152
+ capability_ids: [],
153
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
154
+ description: 'Analytics via GraphQL',
155
+ },
156
+ {
157
+ name: 'cloudflare-containers',
158
+ display_name: 'Cloudflare Container Sandbox',
159
+ url: 'https://containers.mcp.cloudflare.com/mcp',
160
+ auth_type: 'cloudflare_portal_oauth',
161
+ protocol: 'streamable_http',
162
+ feature_packs: ['compute'],
163
+ capability_ids: ['cloudflare.containers'],
164
+ portal_manage_scopes: ['mcp-portals.read', 'mcp-portals.write'],
165
+ description: 'Ephemeral sandboxed containers',
166
+ },
167
+ ]);
168
+
169
+ export function listCloudflareMcpBundles() {
170
+ return [...CLOUDFLARE_MCP_SERVER_BUNDLES];
171
+ }
172
+
173
+ export function getCloudflareMcpBundle(name) {
174
+ const key = String(name || '').trim().toLowerCase();
175
+ if (!key) return null;
176
+ return CLOUDFLARE_MCP_SERVER_BUNDLES.find((b) => b.name === key) || null;
177
+ }
178
+
179
+ /**
180
+ * Scopes AgentSam should request (or upgrade) so a CF-connected user can
181
+ * manage / use the portal surface — not Cloudflare's own portal OAuth dance.
182
+ */
183
+ export function scopesForCloudflareMcpBundle(name, options = {}) {
184
+ const bundle = getCloudflareMcpBundle(name);
185
+ if (!bundle) return [];
186
+
187
+ const set = new Set();
188
+ if (options.includePortalManage !== false) {
189
+ for (const s of bundle.portal_manage_scopes || []) set.add(s);
190
+ }
191
+ for (const s of scopesForFeaturePacks(bundle.feature_packs || [], bundle.capability_ids || [])) {
192
+ set.add(s);
193
+ }
194
+ if (options.includeBaseline === false) {
195
+ // scopesForFeaturePacks always includes baseline; strip if caller asks
196
+ for (const s of ['account-settings.read', 'user-details.read', 'memberships.read', 'offline_access']) {
197
+ // keep offline_access — refresh still needed
198
+ if (s !== 'offline_access') set.delete(s);
199
+ }
200
+ }
201
+ return [...set];
202
+ }
203
+
204
+ /** Catalog rows for MCP authority (server presets). */
205
+ export function cloudflareBundlesAsServerCatalog() {
206
+ return CLOUDFLARE_MCP_SERVER_BUNDLES.map((b) => ({
207
+ name: b.name,
208
+ display_name: b.display_name,
209
+ url: b.url,
210
+ auth_type: b.auth_type,
211
+ protocol: b.protocol,
212
+ defaultClients: ['cursor'],
213
+ health_status: 'unknown',
214
+ avg_latency_ms: null,
215
+ error_rate: null,
216
+ description: b.description,
217
+ feature_packs: b.feature_packs,
218
+ capability_ids: b.capability_ids,
219
+ portal_manage_scopes: b.portal_manage_scopes,
220
+ provider: 'cloudflare',
221
+ kind: 'mcp_portal_bundle',
222
+ }));
223
+ }
224
+
225
+ export { scopesForCapabilities, scopesForFeaturePacks };
package/src/mcp/index.js CHANGED
@@ -22,6 +22,8 @@ export {
22
22
  DEFAULT_CLIENT_REGISTRY_URL,
23
23
  CLIENT_REGISTRY_CACHE_SCHEMA,
24
24
  SEED_EXTERNAL_CLIENT_REGISTRY,
25
+ SEED_OFFERABLE_MCP_SERVER_CONNECTIONS,
26
+ listOfferableMcpServerConnections,
25
27
  fetchExternalClientRegistry,
26
28
  listRegisteredClients,
27
29
  isClientRegistered,
@@ -37,8 +39,18 @@ export {
37
39
  pingMcpServer,
38
40
  listMcpTools,
39
41
  callMcpTool,
42
+ withMcpClient,
43
+ buildHeaders,
40
44
  } from './client.js';
41
45
 
46
+ export {
47
+ CLOUDFLARE_MCP_SERVER_BUNDLES,
48
+ listCloudflareMcpBundles,
49
+ getCloudflareMcpBundle,
50
+ scopesForCloudflareMcpBundle,
51
+ cloudflareBundlesAsServerCatalog,
52
+ } from './cloudflare-bundles.js';
53
+
42
54
  export {
43
55
  recordToolReceipt,
44
56
  getSessionToolReceipts,
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Onboarding guidance when a user has no usable AI path yet.
3
+ *
4
+ * Paths (any one unlocks AgentSam model options):
5
+ * 1. Local Ollama + at least one model
6
+ * 2. Provider API key (OpenAI / Anthropic / Gemini / …) → their allotted models
7
+ * 3. Signed-in Local Studio identity + Cloudflare OAuth (Workers AI / account tools)
8
+ */
9
+
10
+ export const LOCAL_STUDIO_ORIGIN = 'https://agentsam.inneranimalmedia.com';
11
+
12
+ /** Identity login (Sign in with Cloudflare) — PKCE public client. */
13
+ export const CF_OAUTH_LOGIN_START = `${LOCAL_STUDIO_ORIGIN}/api/oauth/cloudflare/start?next=/agentsam`;
14
+
15
+ /** Resource connector (MCP / Workers / D1) — same CF OAuth client, different callback. */
16
+ export const CF_OAUTH_CONNECT_START = `${LOCAL_STUDIO_ORIGIN}/api/connections/cloudflare/start`;
17
+
18
+ /** Login portal with explicit next (desktop / CLI). */
19
+ export const LOCAL_STUDIO_LOGIN = `${LOCAL_STUDIO_ORIGIN}/auth/login?next=/agentsam`;
20
+
21
+ /**
22
+ * Redirect URIs that must be registered on the Cloudflare OAuth client
23
+ * "AgentSam Local Studio" (PKCE, Token Authentication Method = None).
24
+ */
25
+ export const CF_OAUTH_REQUIRED_REDIRECTS = Object.freeze([
26
+ `${LOCAL_STUDIO_ORIGIN}/api/oauth/cloudflare/callback`,
27
+ `${LOCAL_STUDIO_ORIGIN}/api/connections/cloudflare/callback`,
28
+ 'http://localhost:3000/api/connections/cloudflare/callback',
29
+ 'http://localhost:3000/api/oauth/cloudflare/callback',
30
+ ]);
31
+
32
+ /**
33
+ * @param {{ inventory?: object, ollama?: object, providers?: object[] }} discovered
34
+ * Shape compatible with discoverIngestModelOptions() / collectModelsStatus().
35
+ */
36
+ export function assessAiAccess(discovered = {}) {
37
+ const providers = discovered.inventory?.providers
38
+ || discovered.providers
39
+ || [];
40
+ const configuredProviders = providers.filter((p) => p?.configured === true);
41
+ const ollamaOnline = Boolean(discovered.ollama?.online || discovered.inventory?.local?.online);
42
+ const ollamaModels = discovered.ollama?.models || discovered.inventory?.local?.models || [];
43
+ const hasOllamaModels = ollamaOnline && Array.isArray(ollamaModels) && ollamaModels.length > 0;
44
+ const hasProviderKeys = configuredProviders.length > 0;
45
+ const embedOptions = Array.isArray(discovered.options)
46
+ ? discovered.options.filter((o) => o.value && o.value !== 'none')
47
+ : [];
48
+
49
+ const ready = hasOllamaModels || hasProviderKeys || embedOptions.length > 0;
50
+
51
+ return {
52
+ ready,
53
+ hasOllamaModels,
54
+ hasProviderKeys,
55
+ configuredProviders: configuredProviders.map((p) => p.id),
56
+ ollamaOnline,
57
+ ollamaModelCount: hasOllamaModels ? ollamaModels.length : 0,
58
+ embedOptionCount: embedOptions.length,
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Human-readable onboarding block for CLI notes / stderr.
64
+ * @param {ReturnType<typeof assessAiAccess>} access
65
+ * @param {{ wantCloudAi?: boolean }} [opts]
66
+ */
67
+ export function formatAiAccessOnboarding(access, opts = {}) {
68
+ const lines = [];
69
+ if (access.ready) {
70
+ lines.push('AI access: ready');
71
+ if (access.hasProviderKeys) {
72
+ lines.push(` providers ${access.configuredProviders.join(', ')}`);
73
+ }
74
+ if (access.hasOllamaModels) {
75
+ lines.push(` ollama online · ${access.ollamaModelCount} model(s)`);
76
+ }
77
+ if (access.embedOptionCount) {
78
+ lines.push(` embed menu ${access.embedOptionCount} option(s)`);
79
+ }
80
+ return lines.join('\n');
81
+ }
82
+
83
+ lines.push('AI access: not configured yet');
84
+ lines.push('');
85
+ lines.push('Pick ONE path to unlock AgentSam model options:');
86
+ lines.push('');
87
+ lines.push(' 1) Local models (Ollama) — free, offline');
88
+ lines.push(' https://ollama.com/download');
89
+ lines.push(' ollama pull mxbai-embed-large');
90
+ lines.push(' ollama pull qwen2.5-coder');
91
+ lines.push(' agentsam ollama status');
92
+ lines.push('');
93
+ lines.push(' 2) Provider API key — use models your key is allotted');
94
+ lines.push(' agentsam providers');
95
+ lines.push(' (OpenAI · Anthropic · Gemini · Cursor · xAI · Cloudflare token)');
96
+ lines.push('');
97
+ lines.push(' 3) Local Studio identity + Cloudflare OAuth');
98
+ lines.push(' (Workers AI / account tools / MCP connector)');
99
+ lines.push(` Login: ${LOCAL_STUDIO_LOGIN}`);
100
+ lines.push(` CF sign-in: ${CF_OAUTH_LOGIN_START}`);
101
+ lines.push(` CF connect: ${CF_OAUTH_CONNECT_START}`);
102
+ if (opts.wantCloudAi) {
103
+ lines.push('');
104
+ lines.push(' Cloudflare OAuth client must allow these redirect URIs:');
105
+ for (const uri of CF_OAUTH_REQUIRED_REDIRECTS) {
106
+ lines.push(` • ${uri}`);
107
+ }
108
+ }
109
+ lines.push('');
110
+ lines.push('AST/text-only indexing still works with embedding: none ($0).');
111
+ return lines.join('\n');
112
+ }
@@ -315,11 +315,19 @@ export async function discoverCloudflareModels(apiToken, accountId, fetchImpl =
315
315
  .map((row) => {
316
316
  const id = clean(row?.name);
317
317
  const task = cloudflareTaskName(row?.task);
318
- if (!id || task.toLowerCase() !== 'text generation') return null;
318
+ const taskLower = task.toLowerCase();
319
+ // Text Generation = chat/agent pool. Text Embeddings = Vectorize / Workers AI embed pool.
320
+ // Never drop embeddings here — chat allowlisting happens in inventory curation only.
321
+ if (!id || (taskLower !== 'text generation' && taskLower !== 'text embeddings')) return null;
322
+ const isEmbed = taskLower === 'text embeddings';
319
323
  return baseRecord('cloudflare', id, {
320
324
  label: id,
321
325
  source_url: url,
322
- capabilities: { workers_ai: true },
326
+ capabilities: {
327
+ workers_ai: true,
328
+ embeddings: isEmbed,
329
+ agent_runtime: !isEmbed,
330
+ },
323
331
  metadata: {
324
332
  task,
325
333
  author: clean(row?.author) || null,
@@ -42,7 +42,15 @@ export function providerIdForService(serviceName) {
42
42
 
43
43
  export function filterWorkersAiCurated(models = [], options = {}) {
44
44
  if (options.curated === false) return [...models];
45
- return models.filter((row) => CURATED.has(String(row?.provider_model_id || row?.model_id || '')));
45
+ // Chat/agent pool: curated allowlist. Embedding models always pass —
46
+ // Vectorize / Workers AI embed lanes must not be limited by the chat allowlist.
47
+ return models.filter((row) => {
48
+ const id = String(row?.provider_model_id || row?.model_id || '');
49
+ const caps = row?.capabilities || {};
50
+ const task = String(row?.metadata?.task || '').toLowerCase();
51
+ if (caps.embeddings === true || task === 'text embeddings' || /embed/i.test(id)) return true;
52
+ return CURATED.has(id);
53
+ });
46
54
  }
47
55
 
48
56
  /**
@@ -19,7 +19,7 @@ export const AGENTSAM_MCP_PLUGIN_MANIFEST = normalizePluginManifest({
19
19
  { capability_key: 'cloudflare.api.execute', domain: 'cloudflare', verb: 'execute', description: 'Execute a bounded Cloudflare API Code Mode program.', is_mutating: true },
20
20
  ],
21
21
  tool_lanes: ['typed', 'mcp', 'api', 'codemode'],
22
- resource_scope: { owner: 'account', oauth_connection_table: 'agentsam_cloudflare_connections' },
22
+ resource_scope: { owner: 'account', oauth_connection_table: 'user_oauth_tokens' },
23
23
  config: {
24
24
  oauth_authority: 'cloudflare',
25
25
  oauth_client_id: 'c0704bd7a7aab7216b362603e1985499',
@@ -1,5 +1,6 @@
1
1
  import { createAgentEvent, createUsageSnapshot } from '../telemetry/index.js';
2
2
  import { diagnosticFromError } from '../errors/index.js';
3
+ import { resolveOllamaEndpoint } from '../../packages/agentsam-knowledge/src/providers/ollama-endpoint.js';
3
4
 
4
5
  function clean(value) { return value == null ? '' : String(value).trim(); }
5
6
  function integer(value) { const n = Number(value ?? 0); return Number.isFinite(n) && n >= 0 ? Math.floor(n) : 0; }
@@ -28,7 +29,7 @@ function callsFromMessage(message = {}) {
28
29
 
29
30
  export function createOllamaChatAdapter(options = {}) {
30
31
  const fetchImpl = options.fetchImpl || fetch;
31
- const endpoint = clean(options.endpoint || process.env.OLLAMA_BASE_URL || 'http://127.0.0.1:11434').replace(/\/$/, '');
32
+ const endpoint = resolveOllamaEndpoint({ endpoint: options.endpoint, env: options.env || process.env });
32
33
 
33
34
  async function send(messages, params = {}) {
34
35
  const record = params.modelRecord || options.modelRecord;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * AgentSam activity event stream — one run, many surfaces (Studio / CLI / desktop).
3
+ * Scene/status/progress come ONLY from these events — never demo timers.
4
+ */
5
+
6
+ export const ACTIVITY_SCHEMA = 'agentsam.activity.v1';
7
+
8
+ export const ACTIVITY_PHASES = Object.freeze([
9
+ 'boot',
10
+ 'observe',
11
+ 'context',
12
+ 'plan',
13
+ 'execute',
14
+ 'verify',
15
+ 'compact',
16
+ 'waiting',
17
+ 'recover',
18
+ 'complete',
19
+ ]);
20
+
21
+ export const ACTIVITY_EVENTS = Object.freeze([
22
+ 'run.started',
23
+ 'phase.changed',
24
+ 'step.started',
25
+ 'step.progress',
26
+ 'step.completed',
27
+ 'decision.made',
28
+ 'tool.started',
29
+ 'tool.completed',
30
+ 'artifact.created',
31
+ 'file.changed',
32
+ 'approval.required',
33
+ 'input.required',
34
+ 'verification.completed',
35
+ 'run.failed',
36
+ 'run.completed',
37
+ ]);
38
+
39
+ /** User-facing labels — never expose choose/score/check as primary copy. */
40
+ export const DECISION_ACTIVITY_LABELS = Object.freeze({
41
+ terminal_lane: 'Selecting execution path',
42
+ retrieval_mode: 'Choosing retrieval path',
43
+ change_risk: 'Assessing change risk',
44
+ requires_approval: 'Checking approval requirements',
45
+ security_review_required: 'Checking security review requirements',
46
+ verification_scope: 'Selecting verification scope',
47
+ skill_candidate: 'Selecting skill',
48
+ });
49
+
50
+ /**
51
+ * @param {object} partial
52
+ */
53
+ export function createActivityEvent(partial = {}) {
54
+ const phase = partial.phase || 'execute';
55
+ const event = partial.event || 'step.progress';
56
+ if (!ACTIVITY_PHASES.includes(phase)) {
57
+ const err = new Error(`invalid_activity_phase:${phase}`);
58
+ err.code = 'invalid_activity_phase';
59
+ throw err;
60
+ }
61
+ if (!ACTIVITY_EVENTS.includes(event)) {
62
+ const err = new Error(`invalid_activity_event:${event}`);
63
+ err.code = 'invalid_activity_event';
64
+ throw err;
65
+ }
66
+ return Object.freeze({
67
+ schema: ACTIVITY_SCHEMA,
68
+ run_id: String(partial.run_id || ''),
69
+ seq: Number.isInteger(partial.seq) ? partial.seq : 0,
70
+ timestamp: partial.timestamp || new Date().toISOString(),
71
+ phase,
72
+ event,
73
+ step_id: partial.step_id ?? null,
74
+ parent_id: partial.parent_id ?? null,
75
+ label: String(partial.label || ''),
76
+ detail: partial.detail ?? null,
77
+ progress: normalizeProgress(partial.progress),
78
+ source: partial.source
79
+ ? {
80
+ kind: partial.source.kind || 'sam',
81
+ name: partial.source.name ?? null,
82
+ }
83
+ : { kind: 'sam', name: null },
84
+ evidence: partial.evidence && typeof partial.evidence === 'object'
85
+ ? { ...partial.evidence }
86
+ : null,
87
+ });
88
+ }
89
+
90
+ function normalizeProgress(progress) {
91
+ if (progress == null) return null;
92
+ if (typeof progress !== 'object') return null;
93
+ const current = Number(progress.current);
94
+ const total = Number(progress.total);
95
+ if (!Number.isFinite(current) || !Number.isFinite(total) || total <= 0) return null;
96
+ return { current, total };
97
+ }
98
+
99
+ /**
100
+ * Map a decision answer to a user-visible activity event (primitives stay in evidence).
101
+ * @param {object} opts
102
+ */
103
+ export function activityFromDecision(opts = {}) {
104
+ const questionId = opts.question_id || opts.answer?.question_id;
105
+ const answer = opts.answer || {};
106
+ const label = DECISION_ACTIVITY_LABELS[questionId]
107
+ || opts.label
108
+ || 'Making a structured decision';
109
+ const valueText = formatAnswerValue(answer);
110
+ return createActivityEvent({
111
+ run_id: opts.run_id,
112
+ seq: opts.seq,
113
+ phase: opts.phase || 'plan',
114
+ event: 'decision.made',
115
+ step_id: opts.step_id ?? null,
116
+ label,
117
+ detail: valueText,
118
+ source: { kind: 'sam', name: answer.evaluator?.kind || 'decision' },
119
+ evidence: {
120
+ decision_id: opts.decision_id ?? null,
121
+ question_id: questionId,
122
+ question_type: answer.type ?? null,
123
+ value: answer.value ?? null,
124
+ confidence_estimate: answer.confidence_estimate ?? null,
125
+ support: answer.support ?? null,
126
+ receipt_id: opts.decision_id ?? null,
127
+ },
128
+ });
129
+ }
130
+
131
+ function formatAnswerValue(answer) {
132
+ if (!answer || answer.value == null) return null;
133
+ if (answer.type === 'check') return answer.value ? 'Required' : 'Not required';
134
+ if (answer.type === 'score') {
135
+ const n = Number(answer.value);
136
+ return Number.isFinite(n) ? (n < 2 ? 'Bounded' : n < 3.5 ? 'Elevated' : 'High') : String(answer.value);
137
+ }
138
+ return String(answer.value);
139
+ }
140
+
141
+ /**
142
+ * In-memory run activity store — Studio SideStage and CLI subscribe to the same seq stream.
143
+ */
144
+ export function createActivityStore(runId) {
145
+ const id = String(runId || `run_${Date.now().toString(36)}`);
146
+ /** @type {object[]} */
147
+ const events = [];
148
+ /** @type {Set<(e: object) => void>} */
149
+ const listeners = new Set();
150
+ let seq = 0;
151
+
152
+ function emit(partial) {
153
+ const event = createActivityEvent({
154
+ ...partial,
155
+ run_id: id,
156
+ seq: ++seq,
157
+ });
158
+ events.push(event);
159
+ for (const fn of listeners) {
160
+ try {
161
+ fn(event);
162
+ } catch {
163
+ /* subscriber errors must not break the run */
164
+ }
165
+ }
166
+ return event;
167
+ }
168
+
169
+ return {
170
+ run_id: id,
171
+ emit,
172
+ on(fn) {
173
+ listeners.add(fn);
174
+ return () => listeners.delete(fn);
175
+ },
176
+ snapshot() {
177
+ return [...events];
178
+ },
179
+ latest() {
180
+ return events[events.length - 1] || null;
181
+ },
182
+ };
183
+ }