@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
@@ -1,17 +1,50 @@
1
+ /**
2
+ * MCP *client* adapters — hosts that consume MCP servers (Cursor, Claude, …).
3
+ *
4
+ * Cloudflare MCP portal hostnames are offerable *server* connections
5
+ * (see SEED_OFFERABLE_MCP_SERVER_CONNECTIONS / cloudflare-bundles.js) — not
6
+ * OAuth client registry rows.
7
+ */
1
8
  import fs from 'node:fs';
2
- import os from 'node:os';
3
9
  import path from 'node:path';
4
10
  import { getMcpDir, homeDirectory } from './authority.js';
11
+ import { listCloudflareMcpBundles } from './cloudflare-bundles.js';
5
12
 
6
13
  export const DEFAULT_CLIENT_REGISTRY_URL = 'https://mcp.inneranimalmedia.com/api/mcp/clients';
7
14
  export const CLIENT_REGISTRY_CACHE_SCHEMA = 'agentsam.mcp.client-registry.v1';
8
15
 
9
16
  /**
10
- * Seed external MCP client registry snapshot derived directly from D1 table:
11
- * `agentsam_mcp_oauth_external_client_registry`.
12
- *
13
- * This acts as the baseline cache for offline or pre-fetch execution,
14
- * respecting `is_active` and `sort_order`.
17
+ * Offerable MCP server connections (including every CF portal hostname).
18
+ * These are what `agentsam mcp add` / Studio connection pickers should list.
19
+ */
20
+ export const SEED_OFFERABLE_MCP_SERVER_CONNECTIONS = Object.freeze([
21
+ {
22
+ connection_key: 'inneranimalmedia',
23
+ display_name: 'Inner Animal Media MCP',
24
+ url: 'https://mcp.inneranimalmedia.com/mcp',
25
+ kind: 'mcp_server',
26
+ provider: 'inneranimalmedia',
27
+ },
28
+ ...listCloudflareMcpBundles().map((b) => ({
29
+ connection_key: b.name,
30
+ display_name: b.display_name,
31
+ url: b.url,
32
+ kind: 'mcp_server',
33
+ provider: 'cloudflare',
34
+ host: new URL(b.url).hostname,
35
+ feature_packs: b.feature_packs,
36
+ portal_manage_scopes: b.portal_manage_scopes,
37
+ notes: b.description,
38
+ })),
39
+ ]);
40
+
41
+ export function listOfferableMcpServerConnections() {
42
+ return [...SEED_OFFERABLE_MCP_SERVER_CONNECTIONS];
43
+ }
44
+
45
+ /**
46
+ * Seed for OAuth/external *client* registry only (who connects TO an MCP server).
47
+ * Do not put Cloudflare portal hostnames here — those belong in the server catalog.
15
48
  */
16
49
  export const SEED_EXTERNAL_CLIENT_REGISTRY = Object.freeze([
17
50
  {
@@ -32,105 +65,6 @@ export const SEED_EXTERNAL_CLIENT_REGISTRY = Object.freeze([
32
65
  is_active: 1,
33
66
  notes: 'OpenAI ChatGPT connector_platform_oauth + per-connector redirect',
34
67
  },
35
- {
36
- client_key: 'cf_docs_mcp',
37
- display_name: 'Cloudflare Docs',
38
- oauth_client_id: 'iam_mcp_inneranimalmedia',
39
- redirect_host_patterns: ['docs.mcp.cloudflare.com'],
40
- sort_order: 10,
41
- is_active: 1,
42
- notes: 'https://docs.mcp.cloudflare.com/mcp — CF docs reference',
43
- },
44
- {
45
- client_key: 'cf_bindings_mcp',
46
- display_name: 'Cloudflare Workers Bindings',
47
- oauth_client_id: 'iam_mcp_inneranimalmedia',
48
- redirect_host_patterns: ['bindings.mcp.cloudflare.com'],
49
- sort_order: 11,
50
- is_active: 1,
51
- notes: 'https://bindings.mcp.cloudflare.com/mcp — Workers storage, AI, compute',
52
- },
53
- {
54
- client_key: 'cf_builds_mcp',
55
- display_name: 'Cloudflare Workers Builds',
56
- oauth_client_id: 'iam_mcp_inneranimalmedia',
57
- redirect_host_patterns: ['builds.mcp.cloudflare.com'],
58
- sort_order: 12,
59
- is_active: 1,
60
- notes: 'https://builds.mcp.cloudflare.com/mcp — CI/CD insights',
61
- },
62
- {
63
- client_key: 'cf_observability_mcp',
64
- display_name: 'Cloudflare Observability',
65
- oauth_client_id: 'iam_mcp_inneranimalmedia',
66
- redirect_host_patterns: ['observability.mcp.cloudflare.com'],
67
- sort_order: 13,
68
- is_active: 1,
69
- notes: 'https://observability.mcp.cloudflare.com/mcp — logs and analytics',
70
- },
71
- {
72
- client_key: 'cf_browser_mcp',
73
- display_name: 'Cloudflare Browser Rendering',
74
- oauth_client_id: 'iam_mcp_inneranimalmedia',
75
- redirect_host_patterns: ['browser.mcp.cloudflare.com'],
76
- sort_order: 14,
77
- is_active: 1,
78
- notes: 'https://browser.mcp.cloudflare.com/mcp — fetch pages, markdown, screenshots',
79
- },
80
- {
81
- client_key: 'cf_logs_mcp',
82
- display_name: 'Cloudflare Logpush',
83
- oauth_client_id: 'iam_mcp_inneranimalmedia',
84
- redirect_host_patterns: ['logs.mcp.cloudflare.com'],
85
- sort_order: 15,
86
- is_active: 1,
87
- notes: 'https://logs.mcp.cloudflare.com/mcp — Logpush job health',
88
- },
89
- {
90
- client_key: 'cf_ai_gateway_mcp',
91
- display_name: 'Cloudflare AI Gateway',
92
- oauth_client_id: 'iam_mcp_inneranimalmedia',
93
- redirect_host_patterns: ['ai-gateway.mcp.cloudflare.com'],
94
- sort_order: 16,
95
- is_active: 1,
96
- notes: 'https://ai-gateway.mcp.cloudflare.com/mcp — AI request logs',
97
- },
98
- {
99
- client_key: 'cf_audit_logs_mcp',
100
- display_name: 'Cloudflare Audit Logs',
101
- oauth_client_id: 'iam_mcp_inneranimalmedia',
102
- redirect_host_patterns: ['auditlogs.mcp.cloudflare.com'],
103
- sort_order: 17,
104
- is_active: 1,
105
- notes: 'https://auditlogs.mcp.cloudflare.com/mcp — audit log reports',
106
- },
107
- {
108
- client_key: 'cf_dns_analytics_mcp',
109
- display_name: 'Cloudflare DNS Analytics',
110
- oauth_client_id: 'iam_mcp_inneranimalmedia',
111
- redirect_host_patterns: ['dns-analytics.mcp.cloudflare.com'],
112
- sort_order: 18,
113
- is_active: 1,
114
- notes: 'https://dns-analytics.mcp.cloudflare.com/mcp — DNS performance',
115
- },
116
- {
117
- client_key: 'cf_graphql_mcp',
118
- display_name: 'Cloudflare GraphQL',
119
- oauth_client_id: 'iam_mcp_inneranimalmedia',
120
- redirect_host_patterns: ['graphql.mcp.cloudflare.com'],
121
- sort_order: 19,
122
- is_active: 1,
123
- notes: 'https://graphql.mcp.cloudflare.com/mcp — analytics via GraphQL',
124
- },
125
- {
126
- client_key: 'cf_codemode_mcp',
127
- display_name: 'Cloudflare Code Mode',
128
- oauth_client_id: 'iam_mcp_inneranimalmedia',
129
- redirect_host_patterns: ['mcp.cloudflare.com'],
130
- sort_order: 20,
131
- is_active: 1,
132
- notes: 'https://mcp.cloudflare.com/mcp — full CF API in 2 tools, ~1000 tokens',
133
- },
134
68
  {
135
69
  client_key: 'claude',
136
70
  display_name: 'Claude.ai',
@@ -140,15 +74,6 @@ export const SEED_EXTERNAL_CLIENT_REGISTRY = Object.freeze([
140
74
  is_active: 1,
141
75
  notes: 'Anthropic Claude.ai MCP auth_callback',
142
76
  },
143
- {
144
- client_key: 'cf_containers_mcp',
145
- display_name: 'Cloudflare Container Sandbox',
146
- oauth_client_id: 'iam_mcp_inneranimalmedia',
147
- redirect_host_patterns: ['containers.mcp.cloudflare.com'],
148
- sort_order: 21,
149
- is_active: 1,
150
- notes: 'https://containers.mcp.cloudflare.com/mcp — ephemeral ~10min sandboxed containers',
151
- },
152
77
  {
153
78
  client_key: 'cursor',
154
79
  display_name: 'Cursor',
@@ -156,13 +81,11 @@ export const SEED_EXTERNAL_CLIENT_REGISTRY = Object.freeze([
156
81
  redirect_host_patterns: ['mcp.inneranimalmedia.com', 'cursor.com', 'www.cursor.com'],
157
82
  sort_order: 30,
158
83
  is_active: 1,
159
- notes: 'Cursor desktop (cursor://, localhost:8787) + Cursor Agents',
84
+ notes: 'Cursor desktop (cursor://, localhost) + Cursor Agents',
160
85
  },
161
86
  ]);
162
87
 
163
- /**
164
- * Dynamic list of all recognized active client keys.
165
- */
88
+ /** Active client keys from seed (IDE hosts only). */
166
89
  export const SUPPORTED_CLIENTS = Object.freeze(
167
90
  SEED_EXTERNAL_CLIENT_REGISTRY.filter((c) => Number(c.is_active) !== 0).map((c) => c.client_key),
168
91
  );
@@ -222,8 +145,14 @@ export async function fetchExternalClientRegistry(options = {}) {
222
145
  if (res.ok) {
223
146
  const body = await res.json();
224
147
  if (body?.ok && Array.isArray(body.clients)) {
225
- writeCachedClientRegistry(body.clients, options);
226
- return body.clients.filter((c) => Number(c.is_active) !== 0);
148
+ // Never treat MCP portal hostnames as clients even if a stale API row says so.
149
+ const clients = body.clients.filter((c) => {
150
+ if (Number(c.is_active) === 0) return false;
151
+ const key = String(c.client_key || '').toLowerCase();
152
+ return !key.startsWith('cf_') && !key.includes('mcp.cloudflare');
153
+ });
154
+ writeCachedClientRegistry(clients, options);
155
+ return clients;
227
156
  }
228
157
  }
229
158
  } catch {
@@ -241,7 +170,10 @@ export async function fetchExternalClientRegistry(options = {}) {
241
170
  export function listRegisteredClients(options = {}) {
242
171
  const cached = loadCachedClientRegistry(options);
243
172
  if (cached?.clients?.length) {
244
- return cached.clients;
173
+ return cached.clients.filter((c) => {
174
+ const key = String(c.client_key || '').toLowerCase();
175
+ return !key.startsWith('cf_');
176
+ });
245
177
  }
246
178
  return SEED_EXTERNAL_CLIENT_REGISTRY.filter((c) => Number(c.is_active) !== 0);
247
179
  }
@@ -276,12 +208,10 @@ export function getClientConfigPath(clientName, options = {}) {
276
208
  return path.join(getMcpDir(options), 'clients', 'chatgpt-connector.json');
277
209
  }
278
210
 
279
- // AgentSam apps/ family and standalone binary adapter
280
211
  if (client === 'agentsam') {
281
212
  return path.join(home, '.agentsam', 'mcp.json');
282
213
  }
283
214
 
284
- // Any other active client in registry: adapter configuration JSON
285
215
  if (isClientRegistered(client, options)) {
286
216
  return path.join(getMcpDir(options), 'clients', `${client}.json`);
287
217
  }
@@ -293,29 +223,25 @@ export function detectInstalledClients(options = {}) {
293
223
  const detected = [];
294
224
  const home = homeDirectory(options);
295
225
 
296
- // Check Cursor
297
226
  const cursorDir = path.join(home, '.cursor');
298
- if (fs.existsSync(cursorDir)) {
299
- detected.push('cursor');
300
- }
227
+ if (fs.existsSync(cursorDir)) detected.push('cursor');
301
228
 
302
- // Check Claude
303
- const claudeConfig = getClientConfigPath('claude', options);
304
- if (fs.existsSync(path.dirname(claudeConfig))) {
305
- detected.push('claude');
229
+ try {
230
+ const claudeConfig = getClientConfigPath('claude', options);
231
+ if (fs.existsSync(path.dirname(claudeConfig))) detected.push('claude');
232
+ } catch {
233
+ // ignore
306
234
  }
307
235
 
308
- // Check ChatGPT
309
- const chatgptConfig = getClientConfigPath('chatgpt', options);
310
- if (fs.existsSync(chatgptConfig)) {
311
- detected.push('chatgpt');
236
+ try {
237
+ const chatgptConfig = getClientConfigPath('chatgpt', options);
238
+ if (fs.existsSync(chatgptConfig)) detected.push('chatgpt');
239
+ } catch {
240
+ // ignore
312
241
  }
313
242
 
314
- // Check AgentSam family adapter target (~/.agentsam)
315
243
  const agentsamDir = path.join(home, '.agentsam');
316
- if (fs.existsSync(agentsamDir)) {
317
- detected.push('agentsam');
318
- }
244
+ if (fs.existsSync(agentsamDir)) detected.push('agentsam');
319
245
 
320
246
  return detected;
321
247
  }
@@ -338,13 +264,12 @@ export function syncServerToClient(clientName, serverName, serverConfig, options
338
264
  const configPath = getClientConfigPath(clientName, options);
339
265
  const client = clean(clientName).toLowerCase();
340
266
 
341
- // ChatGPT connector payload export
342
267
  if (client === 'chatgpt') {
343
268
  const chatgptPayload = {
344
269
  schema: 'agentsam.mcp.client-adapter.chatgpt.v1',
345
270
  name: serverName,
346
271
  server_url: serverConfig.url,
347
- protocol: serverConfig.protocol || 'sse',
272
+ protocol: serverConfig.protocol || 'streamable_http',
348
273
  auth: serverConfig.auth || { type: 'none' },
349
274
  description: serverConfig.metadata?.description || `MCP Server connection for ${serverName}`,
350
275
  instructions: 'Use in ChatGPT Custom GPTs or ChatGPT Developer Mode Action Connectors.',
@@ -354,7 +279,6 @@ export function syncServerToClient(clientName, serverName, serverConfig, options
354
279
  return { client, configPath, synced: true };
355
280
  }
356
281
 
357
- // Default Cursor / Claude mcpServers schema
358
282
  const existing = readJsonSafe(configPath) || { mcpServers: {} };
359
283
  if (!existing.mcpServers || typeof existing.mcpServers !== 'object') {
360
284
  existing.mcpServers = {};
@@ -362,10 +286,10 @@ export function syncServerToClient(clientName, serverName, serverConfig, options
362
286
 
363
287
  const headers = {};
364
288
  if (serverConfig.auth?.token) {
365
- headers['Authorization'] = `Bearer ${serverConfig.auth.token}`;
289
+ headers.Authorization = `Bearer ${serverConfig.auth.token}`;
366
290
  }
367
291
  if (client === 'cursor') {
368
- headers['Accept'] = 'application/json, text/event-stream';
292
+ headers.Accept = 'application/json, text/event-stream';
369
293
  }
370
294
 
371
295
  existing.mcpServers[serverName] = {
package/src/mcp/client.js CHANGED
@@ -1,5 +1,22 @@
1
+ /**
2
+ * MCP JSON-RPC client for AgentSam CLI (ping / tools/list / tools/call).
3
+ *
4
+ * Prefers Streamable HTTP (current MCP remote transport), falls back to SSE.
5
+ * Does not invent connection presets — callers pass a concrete serverConfig.
6
+ */
1
7
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
8
  import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
9
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
10
+ import { createRequire } from 'node:module';
11
+
12
+ const require = createRequire(import.meta.url);
13
+ const PKG_VERSION = (() => {
14
+ try {
15
+ return require('../../package.json').version || '0.0.0';
16
+ } catch {
17
+ return '0.0.0';
18
+ }
19
+ })();
3
20
 
4
21
  function clean(value) {
5
22
  return value == null ? '' : String(value).trim();
@@ -7,57 +24,121 @@ function clean(value) {
7
24
 
8
25
  export function buildHeaders(serverConfig = {}) {
9
26
  const headers = {
10
- 'Accept': 'application/json, text/event-stream',
11
- 'User-Agent': 'AgentSam-SDK/2.6.2 (MCP Client)',
27
+ Accept: 'application/json, text/event-stream',
28
+ 'User-Agent': `AgentSam-SDK/${PKG_VERSION} (MCP Client)`,
12
29
  };
13
30
  const token = clean(serverConfig.auth?.token);
14
31
  if (token) {
15
- headers['Authorization'] = `Bearer ${token}`;
32
+ headers.Authorization = `Bearer ${token}`;
16
33
  }
17
34
  return headers;
18
35
  }
19
36
 
37
+ /**
38
+ * @template T
39
+ * @param {object} serverConfig
40
+ * @param {(client: import('@modelcontextprotocol/sdk/client/index.js').Client, transport: string) => Promise<T>} fn
41
+ * @param {{ timeoutMs?: number }} [options]
42
+ * @returns {Promise<{ ok: true, value: T, transport: string } | { ok: false, error: string, transport?: string }>}
43
+ */
44
+ export async function withMcpClient(serverConfig, fn, options = {}) {
45
+ const url = clean(serverConfig.url);
46
+ if (!url) return { ok: false, error: 'missing_mcp_server_url' };
47
+
48
+ const headers = buildHeaders(serverConfig);
49
+ const requestInit = { headers };
50
+ const errors = [];
51
+
52
+ const tryTransport = async (label, createTransport) => {
53
+ const transport = createTransport();
54
+ const client = new Client(
55
+ { name: 'agentsam-sdk', version: PKG_VERSION },
56
+ { capabilities: {} },
57
+ );
58
+ const timer = setTimeout(() => {
59
+ try { transport.close?.(); } catch { /* ignore */ }
60
+ }, options.timeoutMs || 15000);
61
+ try {
62
+ await client.connect(transport);
63
+ const value = await fn(client, label);
64
+ return { ok: true, value, transport: label };
65
+ } finally {
66
+ clearTimeout(timer);
67
+ try { await transport.close?.(); } catch { /* ignore */ }
68
+ }
69
+ };
70
+
71
+ try {
72
+ return await tryTransport(
73
+ 'streamable_http',
74
+ () => new StreamableHTTPClientTransport(new URL(url), { requestInit }),
75
+ );
76
+ } catch (err) {
77
+ errors.push(`streamable_http:${err?.message || err}`);
78
+ }
79
+
80
+ try {
81
+ return await tryTransport(
82
+ 'sse',
83
+ () => new SSEClientTransport(new URL(url), { requestInit }),
84
+ );
85
+ } catch (err) {
86
+ errors.push(`sse:${err?.message || err}`);
87
+ }
88
+
89
+ return { ok: false, error: errors.join(' | ') || 'mcp_connect_failed' };
90
+ }
91
+
20
92
  export async function pingMcpServer(serverConfig = {}, options = {}) {
21
93
  const url = clean(serverConfig.url);
22
94
  if (!url) throw new Error('missing_mcp_server_url');
23
95
 
24
96
  const startMs = Date.now();
25
- const headers = buildHeaders(serverConfig);
26
- const timeoutMs = options.timeoutMs || 5000;
97
+ const connected = await withMcpClient(
98
+ serverConfig,
99
+ async (client) => {
100
+ // listTools is a cheap post-initialize probe across CF portals
101
+ const tools = await client.listTools().catch(() => ({ tools: [] }));
102
+ return { toolCount: tools?.tools?.length ?? 0 };
103
+ },
104
+ { timeoutMs: options.timeoutMs || 8000 },
105
+ );
106
+
107
+ const latencyMs = Date.now() - startMs;
108
+ if (connected.ok) {
109
+ return {
110
+ ok: true,
111
+ status: 200,
112
+ statusText: 'connected',
113
+ latencyMs,
114
+ url,
115
+ transport: connected.transport,
116
+ toolCount: connected.value?.toolCount ?? null,
117
+ };
118
+ }
27
119
 
120
+ // Last-resort HTTP reachability (does not prove MCP session)
28
121
  try {
29
- const controller = new AbortController();
30
- const timer = setTimeout(() => controller.abort(), timeoutMs);
31
-
32
- // First attempt an HTTP OPTIONS or GET / health ping
122
+ const headers = buildHeaders(serverConfig);
33
123
  const res = await fetch(url, {
34
- method: 'GET',
35
- headers,
36
- signal: controller.signal,
37
- }).catch(async () => {
38
- // If GET returns 405/404, try POST with JSON-RPC ping
39
- return await fetch(url, {
40
- method: 'POST',
41
- headers: { ...headers, 'Content-Type': 'application/json' },
42
- body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'ping' }),
43
- signal: controller.signal,
44
- });
124
+ method: 'POST',
125
+ headers: { ...headers, 'Content-Type': 'application/json' },
126
+ body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'ping' }),
127
+ signal: AbortSignal.timeout(options.timeoutMs || 5000),
45
128
  });
46
-
47
- clearTimeout(timer);
48
- const latencyMs = Date.now() - startMs;
49
-
50
129
  return {
51
130
  ok: res.status < 500,
52
131
  status: res.status,
53
132
  statusText: res.statusText,
54
- latencyMs,
133
+ latencyMs: Date.now() - startMs,
55
134
  url,
135
+ transport: 'http_jsonrpc_ping',
136
+ warning: connected.error,
56
137
  };
57
138
  } catch (err) {
58
139
  return {
59
140
  ok: false,
60
- error: err.name === 'AbortError' ? 'timeout' : err.message,
141
+ error: connected.error || (err.name === 'TimeoutError' || err.name === 'AbortError' ? 'timeout' : err.message),
61
142
  latencyMs: Date.now() - startMs,
62
143
  url,
63
144
  };
@@ -65,108 +146,47 @@ export async function pingMcpServer(serverConfig = {}, options = {}) {
65
146
  }
66
147
 
67
148
  export async function listMcpTools(serverConfig = {}, options = {}) {
68
- const url = clean(serverConfig.url);
69
- if (!url) throw new Error('missing_mcp_server_url');
70
-
71
- const headers = buildHeaders(serverConfig);
72
-
73
- // Try standard JSON-RPC tools/list via POST first (fastest across Cloudflare Workers)
74
- try {
75
- const res = await fetch(url, {
76
- method: 'POST',
77
- headers: { ...headers, 'Content-Type': 'application/json' },
78
- body: JSON.stringify({
79
- jsonrpc: '2.0',
80
- id: 'tools-list-1',
81
- method: 'tools/list',
82
- params: {},
83
- }),
84
- signal: AbortSignal.timeout(options.timeoutMs || 8000),
85
- });
86
-
87
- if (res.ok) {
88
- const data = await res.json();
89
- if (data?.result?.tools && Array.isArray(data.result.tools)) {
90
- return {
91
- tools: data.result.tools,
92
- count: data.result.tools.length,
93
- transport: 'http_jsonrpc',
94
- };
95
- }
96
- }
97
- } catch {
98
- // Fall back to SSE transport below
99
- }
100
-
101
- // Fallback to SSE transport via @modelcontextprotocol/sdk
102
- try {
103
- const transport = new SSEClientTransport(new URL(url), {
104
- requestInit: { headers },
105
- });
106
- const client = new Client({ name: 'agentsam-sdk', version: '2.6.2' }, { capabilities: {} });
107
- await client.connect(transport);
108
- const toolsResult = await client.listTools();
109
- await transport.close();
110
-
149
+ const connected = await withMcpClient(
150
+ serverConfig,
151
+ async (client) => client.listTools(),
152
+ { timeoutMs: options.timeoutMs || 12000 },
153
+ );
154
+
155
+ if (connected.ok) {
156
+ const tools = connected.value?.tools || [];
111
157
  return {
112
- tools: toolsResult.tools || [],
113
- count: toolsResult.tools?.length || 0,
114
- transport: 'sse_sdk',
115
- };
116
- } catch (err) {
117
- return {
118
- tools: [],
119
- count: 0,
120
- error: err.message,
158
+ tools,
159
+ count: tools.length,
160
+ transport: connected.transport,
121
161
  };
122
162
  }
163
+
164
+ return {
165
+ tools: [],
166
+ count: 0,
167
+ error: connected.error,
168
+ };
123
169
  }
124
170
 
125
171
  export async function callMcpTool(serverConfig = {}, toolName, args = {}, options = {}) {
126
- const url = clean(serverConfig.url);
127
- if (!url) throw new Error('missing_mcp_server_url');
128
-
129
172
  const startMs = Date.now();
130
- const headers = buildHeaders(serverConfig);
131
-
132
- try {
133
- const res = await fetch(url, {
134
- method: 'POST',
135
- headers: { ...headers, 'Content-Type': 'application/json' },
136
- body: JSON.stringify({
137
- jsonrpc: '2.0',
138
- id: `call-${Date.now()}`,
139
- method: 'tools/call',
140
- params: {
141
- name: toolName,
142
- arguments: args,
143
- },
144
- }),
145
- signal: AbortSignal.timeout(options.timeoutMs || 30000),
146
- });
147
-
148
- const latencyMs = Date.now() - startMs;
149
- if (!res.ok) {
150
- return {
151
- ok: false,
152
- status: res.status,
153
- error: `HTTP ${res.status}: ${res.statusText}`,
154
- latencyMs,
155
- };
156
- }
157
-
158
- const data = await res.json();
159
- return {
160
- ok: !data.error && !data.result?.isError,
161
- result: data.result,
162
- error: data.error?.message || (data.result?.isError ? JSON.stringify(data.result.content) : null),
163
- latencyMs,
164
- };
165
- } catch (err) {
166
- return {
167
- ok: false,
168
- error: err.message,
169
- latencyMs: Date.now() - startMs,
170
- };
173
+ const connected = await withMcpClient(
174
+ serverConfig,
175
+ async (client) => client.callTool({ name: toolName, arguments: args }),
176
+ { timeoutMs: options.timeoutMs || 30000 },
177
+ );
178
+
179
+ const latencyMs = Date.now() - startMs;
180
+ if (!connected.ok) {
181
+ return { ok: false, error: connected.error, latencyMs };
171
182
  }
183
+
184
+ const result = connected.value;
185
+ return {
186
+ ok: !result?.isError,
187
+ result,
188
+ error: result?.isError ? JSON.stringify(result.content) : null,
189
+ latencyMs,
190
+ transport: connected.transport,
191
+ };
172
192
  }