@inneranimalmedia/agentsam-sdk 2.6.4 → 2.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (699) hide show
  1. package/AGENTSAM.md +40 -0
  2. package/README.md +15 -9
  3. package/apps/README.md +5 -0
  4. package/apps/cad-creator/README.md +4 -4
  5. package/apps/cad-creator/shared/cad/package.json +1 -1
  6. package/apps/client-cms-editor/AGENTS.md +17 -0
  7. package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
  8. package/apps/client-cms-editor/README.md +100 -0
  9. package/apps/client-cms-editor/agentsam.app.json +74 -0
  10. package/apps/client-cms-editor/backend/README.md +5 -0
  11. package/apps/client-cms-editor/backend/package.json +39 -0
  12. package/apps/client-cms-editor/backend/src/api/client.ts +233 -0
  13. package/apps/client-cms-editor/backend/src/index.ts +6 -0
  14. package/apps/client-cms-editor/backend/src/model.ts +11 -0
  15. package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
  16. package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
  17. package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
  18. package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
  19. package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
  20. package/apps/client-cms-editor/backend/tsconfig.json +20 -0
  21. package/apps/client-cms-editor/backend/worker/index.js +34 -0
  22. package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
  23. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  24. package/apps/client-cms-editor/bin/agentsam-cms.mjs +3 -0
  25. package/apps/client-cms-editor/frontend/index.html +12 -0
  26. package/apps/client-cms-editor/frontend/package.json +42 -0
  27. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +156 -0
  28. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +36 -0
  29. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  30. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  31. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  32. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  33. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  34. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  35. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +1374 -0
  36. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  37. package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
  38. package/apps/client-cms-editor/frontend/src/index.ts +22 -0
  39. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  40. package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
  41. package/apps/client-cms-editor/frontend/src/main.tsx +91 -0
  42. package/apps/client-cms-editor/frontend/src/mount.tsx +113 -0
  43. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
  44. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
  45. package/apps/client-cms-editor/frontend/src/styles/studio.css +158 -0
  46. package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
  47. package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
  48. package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
  49. package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
  50. package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
  51. package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
  52. package/apps/client-cms-editor/frontend/tsconfig.json +36 -0
  53. package/apps/client-cms-editor/frontend/vite.config.ts +25 -0
  54. package/apps/client-cms-editor/package-lock.json +4671 -0
  55. package/apps/client-cms-editor/package.json +135 -0
  56. package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
  57. package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
  58. package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
  59. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  60. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  61. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  62. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  63. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  64. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  65. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  66. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  67. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  68. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  69. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  70. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  71. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  72. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  73. package/apps/client-cms-editor/shared/cms/package.json +31 -0
  74. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  75. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +37 -0
  76. package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
  77. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +90 -0
  78. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  79. package/apps/client-cms-editor/shared/cms/src/index.ts +9 -0
  80. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  81. package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
  82. package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
  83. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  84. package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
  85. package/bin/agentsam-rapid-rust +36 -0
  86. package/contracts/source-types.v1.json +353 -0
  87. package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
  88. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  89. package/docs/MACHINE_INTELLIGENCE.md +120 -0
  90. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  91. package/docs/THEME_REFINERY.md +2 -2
  92. package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
  93. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
  94. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +171 -0
  95. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +12 -4
  96. package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
  97. package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
  98. package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
  99. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
  100. package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
  101. package/docs/contracts/capability-install-planner.md +67 -0
  102. package/docs/contracts/environment-vocabulary.md +195 -0
  103. package/docs/contracts/google-cloud-oauth-setup.md +199 -0
  104. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
  105. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
  106. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
  107. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  108. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
  109. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
  110. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
  111. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
  112. package/docs/plugins.md +2 -2
  113. package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
  114. package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
  115. package/docs/product/README.md +8 -0
  116. package/docs/rapid-rust-wasm.md +35 -0
  117. package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
  118. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  119. package/native/agentsam-machine/Cargo.lock +426 -0
  120. package/native/agentsam-machine/Cargo.toml +9 -0
  121. package/native/agentsam-machine/cli/Cargo.toml +14 -0
  122. package/native/agentsam-machine/cli/src/main.rs +77 -0
  123. package/native/agentsam-machine/core/Cargo.toml +15 -0
  124. package/native/agentsam-machine/core/src/assets.rs +790 -0
  125. package/native/agentsam-machine/core/src/bound.rs +298 -0
  126. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  127. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  128. package/native/agentsam-machine/core/src/lib.rs +1086 -0
  129. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  130. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  131. package/package.json +110 -21
  132. package/packages/agentsam-brand/README.md +107 -12
  133. package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
  134. package/packages/agentsam-brand/package.json +41 -9
  135. package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
  136. package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
  137. package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
  138. package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
  139. package/packages/agentsam-brand/src/adapters/memory.js +31 -0
  140. package/packages/agentsam-brand/src/cli/controller.js +503 -0
  141. package/packages/agentsam-brand/src/cli/wizard.js +526 -0
  142. package/packages/agentsam-brand/src/core/capabilities.js +201 -0
  143. package/packages/agentsam-brand/src/core/derivatives.js +211 -0
  144. package/packages/agentsam-brand/src/core/errors.js +12 -0
  145. package/packages/agentsam-brand/src/core/ingest.js +195 -0
  146. package/packages/agentsam-brand/src/core/inspect.js +109 -0
  147. package/packages/agentsam-brand/src/core/keys.js +83 -0
  148. package/packages/agentsam-brand/src/core/naming.js +142 -0
  149. package/packages/agentsam-brand/src/core/optimize.js +316 -0
  150. package/packages/agentsam-brand/src/core/pack.js +305 -0
  151. package/packages/agentsam-brand/src/core/plan.js +276 -0
  152. package/packages/agentsam-brand/src/core/preview.js +159 -0
  153. package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
  154. package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
  155. package/packages/agentsam-brand/src/core/processors/index.js +148 -0
  156. package/packages/agentsam-brand/src/core/processors/native.js +82 -0
  157. package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
  158. package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
  159. package/packages/agentsam-brand/src/core/promote.js +288 -0
  160. package/packages/agentsam-brand/src/core/receipts.js +155 -0
  161. package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
  162. package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
  163. package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
  164. package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
  165. package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
  166. package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
  167. package/packages/agentsam-brand/src/index.js +193 -36
  168. package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
  169. package/packages/agentsam-brand/src/presets/favicon.json +17 -0
  170. package/packages/agentsam-brand/src/presets/hero.json +12 -0
  171. package/packages/agentsam-brand/src/presets/index.js +40 -0
  172. package/packages/agentsam-brand/src/presets/logo.json +12 -0
  173. package/packages/agentsam-brand/src/presets/model.json +8 -0
  174. package/packages/agentsam-brand/src/presets/og-image.json +10 -0
  175. package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
  176. package/packages/agentsam-brand/src/presets/social-image.json +10 -0
  177. package/packages/agentsam-brand/src/presets/web-image.json +10 -0
  178. package/packages/agentsam-contracts/package.json +13 -3
  179. package/packages/agentsam-contracts/src/artifacts.ts +41 -0
  180. package/packages/agentsam-contracts/src/tools.ts +22 -0
  181. package/packages/agentsam-errors/package.json +13 -3
  182. package/packages/agentsam-knowledge/package.json +18 -4
  183. package/packages/agentsam-knowledge/src/autorag/index.js +11 -4
  184. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  185. package/packages/agentsam-knowledge/src/providers/index.js +6 -4
  186. package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
  187. package/packages/agentsam-knowledge/test/autorag.test.mjs +81 -1
  188. package/packages/agentsam-nav/package.json +26 -8
  189. package/packages/agentsam-queue-control/README.md +1 -1
  190. package/packages/agentsam-queue-control/package.json +7 -2
  191. package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
  192. package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
  193. package/packages/agentsam-rapid-rust/README.md +5 -0
  194. package/packages/agentsam-rapid-rust/src/main.rs +718 -0
  195. package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
  196. package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
  197. package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
  198. package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
  199. package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
  200. package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
  201. package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
  202. package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
  203. package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
  204. package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
  205. package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
  206. package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
  207. package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
  208. package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
  209. package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
  210. package/packages/agentsam-repository/package.json +13 -3
  211. package/packages/agentsam-repository/src/index.js +1 -0
  212. package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
  213. package/packages/agentsam-repository/src/source-types.js +93 -0
  214. package/packages/agentsam-vault/README.md +96 -0
  215. package/packages/agentsam-vault/package.json +42 -0
  216. package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
  217. package/packages/agentsam-vault/src/contracts/credential.js +132 -0
  218. package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
  219. package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
  220. package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
  221. package/packages/agentsam-vault/src/index.d.ts +9 -0
  222. package/packages/agentsam-vault/src/index.js +27 -0
  223. package/packages/agentsam-vault/src/providers/registry.js +90 -0
  224. package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
  225. package/packages/agentsam-workbench/README.md +24 -0
  226. package/packages/agentsam-workbench/package.json +49 -0
  227. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
  228. package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
  229. package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
  230. package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
  231. package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
  232. package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
  233. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
  234. package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
  235. package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
  236. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  237. package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
  238. package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
  239. package/packages/agentsam-workbench/src/agent/index.ts +12 -0
  240. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
  241. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  242. package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
  243. package/packages/agentsam-workbench/src/browser/index.ts +1 -0
  244. package/packages/agentsam-workbench/src/index.ts +6 -0
  245. package/packages/agentsam-workbench/src/project-control.css +160 -0
  246. package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
  247. package/packages/agentsam-workbench/src/projects/index.ts +1 -0
  248. package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
  249. package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
  250. package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
  251. package/packages/agentsam-workbench/src/shell/index.ts +4 -0
  252. package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
  253. package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
  254. package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
  255. package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
  256. package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
  257. package/packages/agentsam-workbench/tsconfig.json +13 -0
  258. package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
  259. package/packages/connectors/cloudflare/package.json +16 -4
  260. package/packages/connectors/cloudflare/src/api-client.js +280 -0
  261. package/packages/connectors/cloudflare/src/capabilities.js +585 -0
  262. package/packages/connectors/cloudflare/src/credential.js +318 -0
  263. package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
  264. package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
  265. package/packages/connectors/cloudflare/src/families/pages.js +151 -0
  266. package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
  267. package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
  268. package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
  269. package/packages/connectors/cloudflare/src/families/tags.js +124 -0
  270. package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
  271. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  272. package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
  273. package/packages/connectors/cloudflare/src/index.js +103 -265
  274. package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
  275. package/packages/connectors/cloudflare/src/owner.js +42 -12
  276. package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
  277. package/packages/connectors/cloudflare/src/routes.js +309 -144
  278. package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
  279. package/packages/connectors/cloudflare/src/vault.js +2 -2
  280. package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
  281. package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -30
  282. package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
  283. package/packages/heuristic-theme/README.md +2 -2
  284. package/packages/heuristic-theme/package.json +8 -3
  285. package/packages/heuristic-theme/src/registry.js +2 -2
  286. package/packages/heuristic-theme/src/theme.js +1 -1
  287. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  288. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  289. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +44 -4
  290. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
  291. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +20 -0
  292. package/packages/identity/README.md +2 -2
  293. package/packages/identity/backend/README.md +1 -1
  294. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -14
  295. package/packages/identity/migrations/apply-portable.js +109 -0
  296. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
  297. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  298. package/packages/identity/package.json +27 -5
  299. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  300. package/packages/identity/scripts/local-identity-bridge.mjs +190 -0
  301. package/packages/identity/scripts/preview-auth-portal.mjs +8 -8
  302. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -372
  303. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  304. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  305. package/packages/identity/src/adapters/portable-store.js +479 -0
  306. package/packages/identity/src/adapters/sqlite/index.js +13 -309
  307. package/packages/identity/src/contracts/auth-config.js +27 -8
  308. package/packages/identity/src/contracts/external-identity.js +1 -1
  309. package/packages/identity/src/contracts/identity-store.js +56 -5
  310. package/packages/identity/src/contracts/provider.js +2 -0
  311. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  312. package/packages/identity/src/core/constants.js +1 -1
  313. package/packages/identity/src/core/session-policy.js +31 -0
  314. package/packages/identity/src/frontend/auth-portal/README.md +2 -1
  315. package/packages/identity/src/frontend/auth-portal/pages/login.html +7 -6
  316. package/packages/identity/src/frontend/auth-portal/pages/reset.html +6 -5
  317. package/packages/identity/src/frontend/auth-portal/pages/signup.html +6 -5
  318. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  319. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +176 -0
  320. package/packages/identity/src/index.js +44 -1
  321. package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
  322. package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
  323. package/packages/identity/src/migrations/README.md +23 -20
  324. package/packages/identity/src/oauth/README.md +10 -5
  325. package/packages/identity/src/oauth/consent-view.js +388 -0
  326. package/packages/identity/src/oauth/credentials.js +39 -20
  327. package/packages/identity/src/oauth/google-desktop-exchange.js +341 -0
  328. package/packages/identity/src/oauth/iam-platform.js +21 -9
  329. package/packages/identity/src/oauth/native-handoff.js +136 -0
  330. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  331. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  332. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  333. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  334. package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
  335. package/packages/identity/src/providers/cloudflare/profile.js +49 -14
  336. package/packages/identity/src/providers/github/oauth.js +1 -2
  337. package/packages/identity/src/providers/github/profile.js +16 -2
  338. package/packages/identity/src/providers/iam/index.js +27 -5
  339. package/packages/identity/src/providers/index.js +11 -3
  340. package/packages/identity/src/server/identity-service.js +33 -3
  341. package/packages/identity/src/server/worker-router.js +171 -88
  342. package/packages/identity/tests/auth-config.test.mjs +3 -2
  343. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  344. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  345. package/packages/identity/tests/identity-init-scaffold.test.mjs +17 -3
  346. package/packages/identity/tests/identity-service.test.mjs +16 -0
  347. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  348. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  349. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  350. package/packages/identity/tests/native-session-worker.test.mjs +64 -0
  351. package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
  352. package/packages/identity/tests/oauth-credentials.test.mjs +21 -8
  353. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
  354. package/packages/identity/tests/preview-auth-portal.test.mjs +5 -3
  355. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  356. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  357. package/packages/providers/completeful/package.json +7 -2
  358. package/packages/runtime-protocol/src/index.js +154 -0
  359. package/packages/theme-church-site/package.json +17 -6
  360. package/packages/theme-church-site/src/harvest.json +4 -2
  361. package/packages/theme-church-site/src/index.js +7 -3
  362. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  363. package/packages/theme-companions-site/package.json +17 -6
  364. package/packages/theme-companions-site/src/harvest.json +4 -2
  365. package/packages/theme-companions-site/src/index.js +7 -3
  366. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  367. package/packages/theme-floors-site/package.json +17 -6
  368. package/packages/theme-floors-site/src/harvest.json +4 -2
  369. package/packages/theme-floors-site/src/index.js +7 -3
  370. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  371. package/packages/theme-fuelnfree-site/package.json +17 -6
  372. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  373. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  374. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  375. package/packages/theme-handyman-site/package.json +17 -6
  376. package/packages/theme-handyman-site/src/harvest.json +4 -2
  377. package/packages/theme-handyman-site/src/index.js +7 -3
  378. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  379. package/packages/theme-insurance-site/package.json +17 -6
  380. package/packages/theme-insurance-site/src/harvest.json +4 -2
  381. package/packages/theme-insurance-site/src/index.js +7 -3
  382. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  383. package/packages/theme-scenes/README.md +164 -0
  384. package/packages/theme-scenes/package.json +54 -0
  385. package/packages/theme-scenes/src/blocks/index.js +30 -0
  386. package/packages/theme-scenes/src/contracts/index.js +286 -0
  387. package/packages/theme-scenes/src/demos/index.js +65 -0
  388. package/packages/theme-scenes/src/index.js +75 -0
  389. package/packages/theme-scenes/src/presets/index.js +263 -0
  390. package/packages/theme-scenes/src/registry.js +187 -0
  391. package/packages/theme-scenes/src/runtime/compile.js +119 -0
  392. package/packages/theme-scenes/src/scenes/index.js +146 -0
  393. package/packages/theme-scenes/src/shell/index.js +47 -0
  394. package/packages/theme-scenes/src/themes/index.js +129 -0
  395. package/packages/theme-scenes/src/visuals/index.js +41 -0
  396. package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
  397. package/packages/theme-shinshu-site/package.json +17 -6
  398. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  399. package/packages/theme-shinshu-site/src/index.js +7 -3
  400. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  401. package/packages/work-graph/package.json +14 -4
  402. package/packages/work-graph/src/index.js +34 -1
  403. package/packages/work-graph/src/renderers/gantt-model.js +24 -0
  404. package/packages/work-graph/test/work-graph.test.mjs +27 -7
  405. package/protocol/FILEMETA_V1.md +2 -2
  406. package/protocol/README.md +15 -7
  407. package/protocol/apps/agentsam.app.v1.schema.json +89 -7
  408. package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
  409. package/protocol/assets/README.md +9 -0
  410. package/protocol/assets/asset-record.v1.schema.json +64 -0
  411. package/protocol/capabilities/manifest.json +1 -1
  412. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  413. package/protocol/presets/catalog.json +2 -2
  414. package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
  415. package/protocol/scoring/README.md +10 -0
  416. package/protocol/scoring/scorecard.v1.schema.json +65 -0
  417. package/protocol/theme-refinery/lineage-registry.json +105 -0
  418. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  419. package/protocol/ui/icon-registry.mjs +1 -0
  420. package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
  421. package/registry/cms-rust-machine-20260928/manifest.json +22 -0
  422. package/registry/cms-rust-machine-20260928/migration.sql +237 -0
  423. package/registry/cms-rust-machine-20260928/receipt.json +21 -0
  424. package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
  425. package/scripts/build_rapid_rust_cli.py +83 -0
  426. package/skills/grok-auth/SKILL.md +110 -0
  427. package/skills/grok-auth/agentsam.skill.json +25 -0
  428. package/skills/grok-auth/references/grok-identity.md +64 -0
  429. package/skills/grok-auth/references/per-user-data.md +49 -0
  430. package/skills/grok-auth/references/prewired-and-env.md +54 -0
  431. package/skills/grok-auth/references/session-ui.md +133 -0
  432. package/skills/grok-auth/references/sign-in-methods.md +55 -0
  433. package/skills/grok-auth/references/wiring.md +71 -0
  434. package/skills/grok-building-games/SKILL.md +213 -0
  435. package/skills/grok-building-games/agentsam.skill.json +25 -0
  436. package/skills/grok-building-games/references/3d-libs.md +64 -0
  437. package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
  438. package/skills/grok-building-games/references/audio.md +129 -0
  439. package/skills/grok-building-games/references/babylon.md +202 -0
  440. package/skills/grok-building-games/references/collision-physics.md +122 -0
  441. package/skills/grok-building-games/references/ecs-architecture.md +111 -0
  442. package/skills/grok-building-games/references/game-feel-juice.md +110 -0
  443. package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
  444. package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
  445. package/skills/grok-building-games/references/genres/fps.md +105 -0
  446. package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
  447. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
  448. package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
  449. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
  450. package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
  451. package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
  452. package/skills/grok-building-games/references/input.md +139 -0
  453. package/skills/grok-building-games/references/phaser.md +277 -0
  454. package/skills/grok-building-games/references/procedural-generation.md +141 -0
  455. package/skills/grok-building-games/references/save-persistence.md +108 -0
  456. package/skills/grok-building-games/references/threejs-foundational.md +148 -0
  457. package/skills/grok-controls/SKILL.md +274 -0
  458. package/skills/grok-controls/agentsam.skill.json +25 -0
  459. package/skills/grok-design-ui/SKILL.md +122 -0
  460. package/skills/grok-design-ui/agentsam.skill.json +25 -0
  461. package/skills/grok-design-ui/references/animations.md +379 -0
  462. package/skills/grok-design-ui/references/performance.md +88 -0
  463. package/skills/grok-design-ui/references/refined-ui.md +384 -0
  464. package/skills/grok-design-ui/references/surfaces.md +247 -0
  465. package/skills/grok-design-ui/references/typography.md +123 -0
  466. package/skills/grok-game-animation-frames/SKILL.md +84 -0
  467. package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
  468. package/skills/grok-game-asset-core/SKILL.md +69 -0
  469. package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
  470. package/skills/grok-game-character-consistency/SKILL.md +69 -0
  471. package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
  472. package/skills/grok-game-tilesets/SKILL.md +65 -0
  473. package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
  474. package/skills/grok-game-ui-icons/SKILL.md +56 -0
  475. package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
  476. package/skills/grok-generate2dmap/LICENSE +21 -0
  477. package/skills/grok-generate2dmap/SKILL.md +120 -0
  478. package/skills/grok-generate2dmap/SOURCE.md +6 -0
  479. package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
  480. package/skills/grok-generate2dmap/references/deliverables.md +101 -0
  481. package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
  482. package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
  483. package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
  484. package/skills/grok-generate2dmap/references/pipeline.md +149 -0
  485. package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
  486. package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
  487. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
  488. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
  489. package/skills/grok-generate2dsprite/LICENSE +21 -0
  490. package/skills/grok-generate2dsprite/SKILL.md +313 -0
  491. package/skills/grok-generate2dsprite/SOURCE.md +6 -0
  492. package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
  493. package/skills/grok-generate2dsprite/references/modes.md +124 -0
  494. package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
  495. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
  496. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
  497. package/skills/grok-imagine/SKILL.md +201 -0
  498. package/skills/grok-imagine/agentsam.skill.json +25 -0
  499. package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
  500. package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
  501. package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
  502. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
  503. package/skills/grok-neon/SKILL.md +157 -0
  504. package/skills/grok-neon/agentsam.skill.json +25 -0
  505. package/skills/grok-og/SKILL.md +102 -0
  506. package/skills/grok-og/agentsam.skill.json +25 -0
  507. package/skills/grok-og/references/brand-pass.md +53 -0
  508. package/skills/grok-og/references/custom-card.md +107 -0
  509. package/skills/grok-og/references/favicon-and-icons.md +48 -0
  510. package/skills/grok-og/references/og-type-contract.md +18 -0
  511. package/skills/grok-og/references/placeholder-card.md +21 -0
  512. package/skills/grok-og/references/x-banner.md +41 -0
  513. package/skills/grok-threejs/SKILL.md +67 -0
  514. package/skills/grok-threejs/agentsam.skill.json +25 -0
  515. package/skills/grok-threejs/references/llms-full.txt +2780 -0
  516. package/skills/grok-video2dsprite/LICENSE +21 -0
  517. package/skills/grok-video2dsprite/SKILL.md +236 -0
  518. package/skills/grok-video2dsprite/SOURCE.md +6 -0
  519. package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
  520. package/skills/grok-video2dsprite/references/pipeline.md +90 -0
  521. package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
  522. package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
  523. package/skills/grok-xai-api/SKILL.md +152 -0
  524. package/skills/grok-xai-api/agentsam.skill.json +25 -0
  525. package/src/attachments/index.js +6 -0
  526. package/src/attachments/intake.js +235 -0
  527. package/src/capabilities/repository-snapshot.js +19 -2
  528. package/src/cli/command-catalog.js +53 -3
  529. package/src/cli/dispatch.js +1 -0
  530. package/src/cli.js +192 -26
  531. package/src/cloudflare/runtime-status.js +2 -1
  532. package/src/commands/account-auth.js +94 -8
  533. package/src/commands/app.js +307 -3
  534. package/src/commands/autorag.js +67 -13
  535. package/src/commands/billing.js +127 -0
  536. package/src/commands/brand.js +74 -60
  537. package/src/commands/cheat-sheet.js +179 -0
  538. package/src/commands/cloudflare-login.js +222 -0
  539. package/src/commands/cloudflare.js +453 -23
  540. package/src/commands/codebaseindex.js +51 -3
  541. package/src/commands/compute.js +4 -0
  542. package/src/commands/connections.js +11 -5
  543. package/src/commands/credentials.js +116 -0
  544. package/src/commands/gcloud-auth.js +427 -0
  545. package/src/commands/google-cloud.js +375 -0
  546. package/src/commands/identity-init.js +2 -2
  547. package/src/commands/knowledge.js +59 -2
  548. package/src/commands/machine-binary.js +103 -0
  549. package/src/commands/machine.js +137 -0
  550. package/src/commands/mcp.js +226 -33
  551. package/src/commands/ollama.js +3 -2
  552. package/src/commands/plugins.js +7 -2
  553. package/src/commands/product.js +36 -0
  554. package/src/commands/runtime-status.js +28 -9
  555. package/src/commands/runtime.js +313 -0
  556. package/src/commands/rust.js +24 -0
  557. package/src/commands/security.js +67 -4
  558. package/src/commands/setup.js +296 -0
  559. package/src/commands/shell.js +16 -3
  560. package/src/commands/start-local.js +2 -2
  561. package/src/commands/status.js +8 -1
  562. package/src/commands/terminal.js +171 -0
  563. package/src/commands/update.js +140 -0
  564. package/src/commands/whoami.js +329 -65
  565. package/src/features/resolve.js +2 -0
  566. package/src/index.js +4 -0
  567. package/src/indexing/ingest/inventory.js +254 -19
  568. package/src/indexing/ingest/materials.js +3 -9
  569. package/src/indexing/ingest/style-evidence.js +181 -0
  570. package/src/knowledge/engine.js +21 -2
  571. package/src/knowledge/runtime-discovery.js +127 -0
  572. package/src/knowledge/source.js +3 -3
  573. package/src/lib/account-session.js +11 -4
  574. package/src/lib/app-authority.js +172 -0
  575. package/src/lib/auth.js +94 -21
  576. package/src/lib/core-client.js +5 -6
  577. package/src/lib/credentials-audit.js +451 -0
  578. package/src/lib/deploy/health.js +24 -6
  579. package/src/lib/detect-context.js +7 -1
  580. package/src/lib/google-cloud-connection.js +270 -0
  581. package/src/lib/google-cloud-inventory.js +385 -0
  582. package/src/lib/google-desktop-oauth.js +372 -0
  583. package/src/lib/google-studio-brokered-oauth.js +158 -0
  584. package/src/lib/identity-scaffold.js +76 -18
  585. package/src/lib/init-options.js +192 -0
  586. package/src/lib/local-scaffold.js +48 -16
  587. package/src/lib/provider-command-remediation.js +308 -0
  588. package/src/lib/provider-credentials.js +8 -0
  589. package/src/lib/scaffold/index.js +8 -2
  590. package/src/lib/scaffold/mcp-server.js +43 -0
  591. package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
  592. package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
  593. package/src/lib/scaffold/wizards/cms.js +93 -0
  594. package/src/lib/scaffold/wizards/mcp-server.js +61 -0
  595. package/src/lib/setup/contract.js +26 -0
  596. package/src/lib/setup/discover.js +116 -0
  597. package/src/lib/setup/execute.js +205 -0
  598. package/src/lib/setup/planner.js +134 -0
  599. package/src/lib/setup/recipes.js +235 -0
  600. package/src/lib/setup/runtime-persist.js +197 -0
  601. package/src/lib/setup/runtime.js +394 -0
  602. package/src/lib/slash-commands.js +2 -0
  603. package/src/lib/terminal/machine-identity.js +95 -0
  604. package/src/lib/terminal-local.js +164 -0
  605. package/src/lib/terminal-scopes.js +52 -0
  606. package/src/lib/whoami-capabilities.js +184 -0
  607. package/src/local-pty/server.js +34 -5
  608. package/src/mcp/authority.js +58 -108
  609. package/src/mcp/client-adapters.js +68 -144
  610. package/src/mcp/client.js +142 -122
  611. package/src/mcp/cloudflare-bundles.js +225 -0
  612. package/src/mcp/index.js +12 -0
  613. package/src/models/discovery.js +40 -22
  614. package/src/models/inventory-core.d.ts +105 -0
  615. package/src/models/inventory-core.js +54 -6
  616. package/src/plugins/cloudflare.js +1 -1
  617. package/src/providers/ollama-chat.js +2 -1
  618. package/src/sam/types.js +27 -2
  619. package/src/security/inventory.js +12 -2
  620. package/src/security/local-vault.js +2 -0
  621. package/src/security/logs.js +3 -0
  622. package/src/security/scan.js +1 -1
  623. package/src/ui/cli/help.js +41 -0
  624. package/test/account-session.test.mjs +3 -3
  625. package/test/app-authority-context.test.mjs +32 -0
  626. package/test/apps-scaffold-contract.test.mjs +3 -2
  627. package/test/cli/api-key-env-whoami.test.mjs +2 -2
  628. package/test/cli/catalog-authority.test.mjs +64 -0
  629. package/test/cli/codebaseindex-plan-ux.test.mjs +1 -1
  630. package/test/cli/machine-command.test.mjs +34 -0
  631. package/test/cli/mcp-client.test.mjs +21 -10
  632. package/test/cli/runtime-persist.test.mjs +56 -0
  633. package/test/cli/rust-command.test.mjs +21 -0
  634. package/test/credentials-audit.test.mjs +113 -0
  635. package/test/deploy-health-scan.test.mjs +29 -1
  636. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
  637. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
  638. package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
  639. package/test/gcloud-auth.test.mjs +111 -0
  640. package/test/google-cloud-connection.test.mjs +83 -0
  641. package/test/google-cloud-inventory.test.mjs +64 -0
  642. package/test/init-options.test.mjs +35 -0
  643. package/test/integration/app-command.test.mjs +30 -0
  644. package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
  645. package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
  646. package/test/integration/cad-project.test.mjs +4 -1
  647. package/test/integration/cms-app-scaffold.test.mjs +77 -0
  648. package/test/integration/cms-site-tenancy-contract.test.mjs +31 -19
  649. package/test/integration/codebaseindex-ingest.test.mjs +89 -0
  650. package/test/integration/database-hosted-honesty.test.mjs +49 -0
  651. package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
  652. package/test/integration/features-resolve.test.mjs +30 -11
  653. package/test/integration/hosted-work-host-authority.test.mjs +47 -0
  654. package/test/integration/inspect-path-cli.test.mjs +46 -0
  655. package/test/integration/inventory-eligibility.test.mjs +59 -0
  656. package/test/integration/inventory-evidence.test.mjs +125 -0
  657. package/test/integration/local-provider-bridge.test.mjs +65 -0
  658. package/test/integration/local-studio-settings-production.test.mjs +40 -0
  659. package/test/integration/lockfile-sync.test.mjs +26 -0
  660. package/test/integration/provider-env-cli.test.mjs +13 -3
  661. package/test/integration/runtime-status.integration.test.mjs +17 -1
  662. package/test/integration/theme-package-registry.test.mjs +31 -0
  663. package/test/knowledge.test.mjs +35 -1
  664. package/test/loopback-oauth.test.mjs +53 -0
  665. package/test/ollama.test.mjs +22 -0
  666. package/test/repository-snapshot-view.test.mjs +2 -2
  667. package/test/security.test.mjs +37 -0
  668. package/test/setup-planner.test.mjs +74 -0
  669. package/test/setup-runtime.test.mjs +51 -0
  670. package/test/terminal/local-pty.mock.test.mjs +3 -1
  671. package/test/terminal-machine-identity.test.mjs +88 -0
  672. package/test/whoami-resume.test.mjs +27 -6
  673. package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
  674. package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
  675. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
  676. package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
  677. package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
  678. package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
  679. package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
  680. package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
  681. package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
  682. package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
  683. package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
  684. package/packages/agentsam-nav/dist/browser.d.ts +0 -11
  685. package/packages/agentsam-nav/dist/browser.global.js +0 -132
  686. package/packages/agentsam-nav/dist/browser.js +0 -613
  687. package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
  688. package/packages/agentsam-nav/dist/index.d.ts +0 -11
  689. package/packages/agentsam-nav/dist/index.js +0 -614
  690. package/packages/agentsam-nav/dist/legacy.css +0 -83
  691. package/packages/agentsam-nav/dist/shell.css +0 -113
  692. package/packages/agentsam-nav/dist/theme.css +0 -113
  693. package/packages/agentsam-nav/dist/utils.d.ts +0 -1
  694. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
  695. package/packages/work-graph/prototype/README.md +0 -32
  696. package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
  697. package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
  698. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
  699. package/packages/work-graph/prototype-gnantt.html +0 -655
@@ -52,16 +52,7 @@ describe('cloudflare connector', () => {
52
52
  });
53
53
 
54
54
  it('keeps connector return paths same-origin', async () => {
55
- const calls = [];
56
- const DB = {
57
- prepare(sql) {
58
- return {
59
- args: [],
60
- bind(...args) { this.args = args; return this; },
61
- async run() { calls.push({ sql, args: this.args }); return { success: true }; },
62
- };
63
- },
64
- };
55
+ const oauthState = new Map();
65
56
  const response = await handleCloudflareConnectionRequest(
66
57
  new Request('https://agentsam.example/api/connections/cloudflare/start?return_to=https://untrusted.example/after', {
67
58
  headers: {
@@ -70,19 +61,17 @@ describe('cloudflare connector', () => {
70
61
  },
71
62
  }),
72
63
  {
73
- DB,
64
+ oauthState,
74
65
  fixtureSessions: new Map([['fixture', 'user_123']]),
75
66
  CLOUDFLARE_OAUTH_CLIENT_ID: 'real-client-id',
76
67
  },
77
68
  );
78
69
  assert.equal(response.status, 200);
79
- assert.equal(
80
- calls.some((call) => call.sql.includes('DELETE FROM agentsam_cloudflare_oauth_state WHERE created_at < unixepoch() - 600')),
81
- true,
82
- );
83
- const stateInsert = calls.find((call) => call.sql.includes('INSERT INTO agentsam_cloudflare_oauth_state'));
84
- assert.ok(stateInsert);
85
- assert.equal(stateInsert.args.at(-1), null);
70
+ const body = await response.json();
71
+ assert.equal(body.ok, true);
72
+ assert.equal(oauthState.size, 1);
73
+ const stored = [...oauthState.values()][0];
74
+ assert.equal(stored.returnTo, '');
86
75
  });
87
76
 
88
77
  it('redirects browser starts to Cloudflare authorization', async () => {
@@ -108,9 +97,15 @@ describe('cloudflare connector', () => {
108
97
  });
109
98
 
110
99
  it('consumes callback state and stores only encrypted OAuth tokens', async () => {
111
- const now = Math.floor(Date.now() / 1000);
112
100
  const calls = [];
113
- const statements = [];
101
+ const oauthState = new Map([
102
+ ['state_123', {
103
+ ownerId: 'user_123',
104
+ verifier: 'verifier',
105
+ returnTo: '',
106
+ createdAt: Math.floor(Date.now() / 1000),
107
+ }],
108
+ ]);
114
109
  const DB = {
115
110
  prepare(sql) {
116
111
  const statement = {
@@ -121,9 +116,6 @@ describe('cloudflare connector', () => {
121
116
  return this;
122
117
  },
123
118
  async first() {
124
- if (sql.includes('agentsam_cloudflare_oauth_state')) {
125
- return { owner_id: 'user_123', code_verifier: 'verifier', created_at: now };
126
- }
127
119
  return null;
128
120
  },
129
121
  async run() {
@@ -131,7 +123,6 @@ describe('cloudflare connector', () => {
131
123
  return { success: true };
132
124
  },
133
125
  };
134
- statements.push(statement);
135
126
  return statement;
136
127
  },
137
128
  async batch(batchStatements) {
@@ -146,7 +137,7 @@ describe('cloudflare connector', () => {
146
137
  return new Response(JSON.stringify({
147
138
  access_token: 'access-plaintext',
148
139
  refresh_token: 'refresh-plaintext',
149
- account_id: 'account_123',
140
+ account_id: 'abc123abc123abc123abc123abc123ab',
150
141
  scope: 'd1.read workers-scripts.write',
151
142
  expires_in: 3600,
152
143
  }), { status: 200, headers: { 'content-type': 'application/json' } });
@@ -157,6 +148,7 @@ describe('cloudflare connector', () => {
157
148
  new Request('https://agentsam.example/api/connections/cloudflare/callback?code=code_123&state=state_123'),
158
149
  {
159
150
  DB,
151
+ oauthState,
160
152
  CLOUDFLARE_OAUTH_CLIENT_ID: 'real-client-id',
161
153
  CLOUDFLARE_OAUTH_CLIENT_SECRET: 'obsolete-secret-must-not-be-sent',
162
154
  VAULT_MASTER_KEY: '01234567890123456789012345678901',
@@ -167,11 +159,15 @@ describe('cloudflare connector', () => {
167
159
  response.headers.get('location'),
168
160
  'https://agentsam.example/settings/integrations?connection=cloudflare&result=connected',
169
161
  );
170
- assert.equal(calls.some((call) => call.sql.includes('DELETE FROM agentsam_cloudflare_oauth_state')), true);
171
- const insert = calls.find((call) => call.sql.includes('INSERT INTO agentsam_cloudflare_connections'));
172
- assert.ok(insert);
173
- assert.notEqual(insert.args[4], 'access-plaintext');
174
- assert.notEqual(insert.args[5], 'refresh-plaintext');
162
+ assert.equal(oauthState.has('state_123'), false);
163
+ const insert = calls.find((call) => call.sql.includes('INSERT INTO user_oauth_tokens'));
164
+ assert.ok(insert, 'expected user_oauth_tokens insert (SSOT)');
165
+ // With vault: plaintext args are null; ciphertext is not plaintext tokens.
166
+ assert.equal(insert.args[3], null); // access_token plaintext
167
+ assert.equal(insert.args[4], null); // refresh_token plaintext
168
+ assert.notEqual(insert.args[5], 'access-plaintext'); // access_token_encrypted
169
+ assert.notEqual(insert.args[6], 'refresh-plaintext'); // refresh_token_encrypted
170
+ assert.equal(calls.some((call) => call.sql.includes('agentsam_cloudflare_connections')), false);
175
171
  } finally {
176
172
  globalThis.fetch = originalFetch;
177
173
  }
@@ -0,0 +1,125 @@
1
+ import assert from 'node:assert/strict';
2
+ import { describe, it } from 'node:test';
3
+ import {
4
+ resolveCloudflareAccountId,
5
+ unionScopes,
6
+ upsertCloudflareUserOauthToken,
7
+ } from '../src/oauth-persist.js';
8
+
9
+ describe('oauth-persist spine', () => {
10
+ it('unions scopes without duplicates', () => {
11
+ assert.deepEqual(
12
+ unionScopes(['d1.read', 'offline_access'], ['d1.read', 'workers-scripts.write']).sort(),
13
+ ['d1.read', 'offline_access', 'workers-scripts.write'].sort(),
14
+ );
15
+ });
16
+
17
+ it('requires explicit selection when Cloudflare exposes multiple accounts', async () => {
18
+ const result = await resolveCloudflareAccountId('token', {
19
+ fetchImpl: async () => ({
20
+ ok: true,
21
+ async json() {
22
+ return {
23
+ result: [
24
+ { id: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', name: 'A' },
25
+ { id: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', name: 'B' },
26
+ ],
27
+ };
28
+ },
29
+ }),
30
+ });
31
+ assert.equal(result?.error, 'cloudflare_account_selection_required');
32
+ assert.equal(result?.accounts?.length, 2);
33
+ });
34
+
35
+ it('rejects provider labels and synthetic values as account identifiers', async () => {
36
+ const result = await upsertCloudflareUserOauthToken(
37
+ { DB: { prepare() { throw new Error('should not query'); } } },
38
+ { userId: 'au_1', accessToken: 'token', accountId: 'Cloudflare' },
39
+ );
40
+ assert.equal(result.ok, false);
41
+ assert.equal(result.error, 'cloudflare_account_identifier_required');
42
+ });
43
+
44
+ it('upserts with client_id provenance and scope union (no connected_via_app)', async () => {
45
+ const rows = new Map();
46
+ const sqlSeen = [];
47
+ const env = {
48
+ VAULT_MASTER_KEY: 'test-vault-material',
49
+ DB: {
50
+ prepare(sql) {
51
+ sqlSeen.push(String(sql));
52
+ return {
53
+ bind(...args) {
54
+ return {
55
+ async first() {
56
+ if (String(sql).includes('SELECT')) {
57
+ return rows.get(`${args[0]}|${args[2]}`) || null;
58
+ }
59
+ return null;
60
+ },
61
+ async run() {
62
+ if (String(sql).includes('INSERT')) {
63
+ // Encrypted-only path: plaintext [3]/[4] are null; ciphertext [5]/[6].
64
+ const key = `${args[0]}|${args[2]}`;
65
+ const prior = rows.get(key);
66
+ rows.set(key, {
67
+ scopes: args[7],
68
+ scope: args[7],
69
+ metadata_json: args[11],
70
+ access_token: args[3],
71
+ refresh_token: args[4],
72
+ created_at: prior?.created_at || args[12],
73
+ });
74
+ }
75
+ return { success: true };
76
+ },
77
+ };
78
+ },
79
+ };
80
+ },
81
+ },
82
+ };
83
+
84
+ const r1 = await upsertCloudflareUserOauthToken(env, {
85
+ userId: 'au_1',
86
+ accessToken: 'tok1',
87
+ scopes: 'd1.read offline_access',
88
+ accountId: 'abc123abc123abc123abc123abc123ab',
89
+ clientId: 'c0704bd7a7aab7216b362603e1985499',
90
+ capabilitySet: ['cloudflare.d1'],
91
+ });
92
+ assert.equal(r1.ok, true);
93
+ assert.equal(r1.status, 'connected');
94
+ assert.equal(r1.provenance.connected_via_client_id, 'c0704bd7a7aab7216b362603e1985499');
95
+ assert.equal(r1.provenance.connected_via_app, undefined);
96
+
97
+ rows.set('au_1|abc123abc123abc123abc123abc123ab', {
98
+ scopes: 'd1.read offline_access',
99
+ scope: 'd1.read offline_access',
100
+ metadata_json: JSON.stringify({
101
+ cloudflare_account_id: 'abc123abc123abc123abc123abc123ab',
102
+ connected_via_client_id: 'c0704bd7a7aab7216b362603e1985499',
103
+ connected_via_app: 'should_be_stripped',
104
+ }),
105
+ access_token: 'tok1',
106
+ refresh_token: null,
107
+ created_at: 1,
108
+ });
109
+
110
+ const r2 = await upsertCloudflareUserOauthToken(env, {
111
+ userId: 'au_1',
112
+ accessToken: 'tok2',
113
+ scopes: 'workers-scripts.write',
114
+ accountId: 'abc123abc123abc123abc123abc123ab',
115
+ clientId: 'c0704bd7a7aab7216b362603e1985499',
116
+ capabilitySet: ['cloudflare.workers'],
117
+ });
118
+ assert.equal(r2.ok, true);
119
+ assert.ok(r2.scopes.includes('d1.read'));
120
+ assert.ok(r2.scopes.includes('workers-scripts.write'));
121
+ const upsertSql = sqlSeen.find((sql) => sql.includes('ON CONFLICT(user_id, provider, account_identifier)'));
122
+ assert.match(upsertSql || '', /last_refresh_error_code = NULL/);
123
+ assert.match(upsertSql || '', /refresh_failure_count = 0/);
124
+ });
125
+ });
@@ -1,9 +1,9 @@
1
- # @inneranimalmedia/heuristic-theme
1
+ # @inneranimalmedia/theme-heuristic
2
2
 
3
3
  Stock AgentSam CMS storefront shell theme. Exports a deterministic theme contract consumed by CMS presets and `theme.storefront.shell`.
4
4
 
5
5
  ```js
6
- import { createStorefrontShellTheme } from "@inneranimalmedia/heuristic-theme";
6
+ import { createStorefrontShellTheme } from "@inneranimalmedia/theme-heuristic";
7
7
 
8
8
  const theme = createStorefrontShellTheme();
9
9
  ```
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@inneranimalmedia/heuristic-theme",
3
- "version": "0.1.0",
2
+ "name": "@inneranimalmedia/theme-heuristic",
3
+ "version": "2.6.7",
4
4
  "description": "Stock AgentSam CMS storefront shell theme contract (heuristic-theme).",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
@@ -21,5 +21,10 @@
21
21
  "publishConfig": {
22
22
  "access": "public"
23
23
  },
24
- "license": "MIT"
24
+ "license": "MIT",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/SamPrimeaux/agentsam-sdk.git",
28
+ "directory": "packages/heuristic-theme"
29
+ }
25
30
  }
@@ -14,11 +14,11 @@ export function createHeuristicThemeProductRow({ accountId, repositoryId = null
14
14
  status: "wired",
15
15
  repository_id: repositoryId,
16
16
  canonical_path: "packages/heuristic-theme",
17
- package_name: "@inneranimalmedia/heuristic-theme",
17
+ package_name: "@inneranimalmedia/theme-heuristic",
18
18
  metadata: {
19
19
  origin: "gallery_mount",
20
20
  normalization_state: "wired",
21
- package: "@inneranimalmedia/heuristic-theme",
21
+ package: "@inneranimalmedia/theme-heuristic",
22
22
  preview_kind: "live",
23
23
  capabilities: ["theme.storefront.shell"],
24
24
  app_manifest: null,
@@ -32,7 +32,7 @@ export function createStorefrontShellTheme() {
32
32
  { type: "footer", label: "Footer" },
33
33
  ],
34
34
  metadata: {
35
- package: "@inneranimalmedia/heuristic-theme",
35
+ package: "@inneranimalmedia/theme-heuristic",
36
36
  capability: "theme.storefront.shell",
37
37
  deterministic: true,
38
38
  demoSite: "demo",
@@ -10,7 +10,7 @@ test("createStorefrontShellTheme returns stable stock contract", () => {
10
10
  assert.ok(theme.surfaces.includes("cms.editor"));
11
11
  assert.ok(theme.slots.shell.includes("header"));
12
12
  assert.equal(theme.tokens["--color-accent"], "#1e6a6f");
13
- assert.equal(theme.metadata.package, "@inneranimalmedia/heuristic-theme");
13
+ assert.equal(theme.metadata.package, "@inneranimalmedia/theme-heuristic");
14
14
  assert.deepEqual(createStorefrontShellTheme(), theme);
15
15
  });
16
16
 
@@ -5,7 +5,7 @@
5
5
  "kind": "integration",
6
6
  "status": "extracted",
7
7
  "package": {
8
- "name": "@inneranimalmedia/agentsam-sdk-identity",
8
+ "name": "@inneranimalmedia/agentsam-identity",
9
9
  "version": "2.6.3",
10
10
  "directory": "packages/identity"
11
11
  },
@@ -5,7 +5,9 @@
5
5
  "providers": [
6
6
  {
7
7
  "id": "inneranimalmedia",
8
- "aliases": ["iam"],
8
+ "aliases": [
9
+ "iam"
10
+ ],
9
11
  "oauth_provider_key": "iam",
10
12
  "kind": "oidc",
11
13
  "status": "ready",
@@ -35,7 +37,27 @@
35
37
  "required_configuration": [
36
38
  "GOOGLE_CLIENT_ID",
37
39
  "GOOGLE_CLIENT_SECRET"
38
- ]
40
+ ],
41
+ "notes": "Web browser OAuth (confidential client). For Desktop/CLI PKCE use google_desktop."
42
+ },
43
+ {
44
+ "id": "google_desktop",
45
+ "aliases": [
46
+ "google-desktop"
47
+ ],
48
+ "kind": "oauth",
49
+ "status": "ready",
50
+ "implementation": "src/providers/google",
51
+ "capabilities": [
52
+ "identity.oauth.authorize",
53
+ "identity.oauth.desktop_exchange",
54
+ "identity.profile.resolve"
55
+ ],
56
+ "required_configuration": [
57
+ "GOOGLE_DESKTOP_CLIENT_ID"
58
+ ],
59
+ "optional_configuration": [],
60
+ "notes": "Desktop/public PKCE client (Console type Desktop app). Uses system browser + loopback redirect and no embedded client secret."
39
61
  },
40
62
  {
41
63
  "id": "github",
@@ -61,7 +83,7 @@
61
83
  "identity.oauth.authorize",
62
84
  "identity.profile.resolve"
63
85
  ],
64
- "notes": "Contract + authorize URL only — exchange not implemented."
86
+ "notes": "Contract + authorize URL only \u2014 exchange not implemented."
65
87
  },
66
88
  {
67
89
  "id": "email",
@@ -90,7 +112,25 @@
90
112
  "optional_configuration": [
91
113
  "CLOUDFLARE_OAUTH_CLIENT_SECRET"
92
114
  ],
93
- "notes": "Registered in identityProviders. Client secret optional for PKCE-only clients."
115
+ "notes": "Cloudflare sign-in (same Worker secrets as the Cloudflare resource connector). Client secret optional for PKCE-only clients (Token Authentication Method = None)."
116
+ },
117
+ {
118
+ "id": "chatgpt",
119
+ "aliases": [
120
+ "openai",
121
+ "chatgpt-hosted"
122
+ ],
123
+ "kind": "hosted_headers",
124
+ "status": "ready",
125
+ "registered": true,
126
+ "implementation": "src/providers/chatgpt",
127
+ "capabilities": [
128
+ "identity.hosted.headers",
129
+ "identity.profile.resolve",
130
+ "cms.auth_host"
131
+ ],
132
+ "required_configuration": [],
133
+ "notes": "ChatGPT / OpenAI Apps SDK hosted identity. Reads oai-authenticated-* request headers and normalizes to NormalizedExternalIdentity (provider=chatgpt). Not classic OAuth client credentials — use createChatGptCmsAuthHost for /cms protection."
94
134
  }
95
135
  ]
96
136
  }
@@ -4,13 +4,19 @@
4
4
  "engine": "d1",
5
5
  "migration_sources": [
6
6
  "src/migrations/0001_identity_core.sql",
7
- "src/migrations/0002_company.sql"
7
+ "src/migrations/0002_company.sql",
8
+ "src/migrations/0003_accounts_ssot.sql"
8
9
  ],
9
- "notes": "Migration files remain the schema authority. This JSON is an index/contract only.",
10
+ "notes": "Migration files remain the schema authority. accounts is the account SSOT; account_identities is IdP linkage only.",
10
11
  "tables": [
12
+ {
13
+ "name": "accounts",
14
+ "purpose": "account SSOT (row of record)",
15
+ "source": "src/migrations/0001_identity_core.sql"
16
+ },
11
17
  {
12
18
  "name": "auth_users",
13
- "purpose": "canonical user identity",
19
+ "purpose": "login principal (1:1 with accounts.id in portable scaffold)",
14
20
  "source": "src/migrations/0001_identity_core.sql"
15
21
  },
16
22
  {
@@ -21,7 +27,7 @@
21
27
  },
22
28
  {
23
29
  "name": "account_identities",
24
- "purpose": "external identity/provider mapping",
30
+ "purpose": "IdP linkage only (provider + subject → accounts.id) — not the account SSOT",
25
31
  "owner_column": "account_id",
26
32
  "source": "src/migrations/0001_identity_core.sql"
27
33
  },
@@ -39,12 +39,32 @@
39
39
  "access": "public",
40
40
  "provider": "google"
41
41
  },
42
+ {
43
+ "path": "/api/oauth/google/callback",
44
+ "kind": "api",
45
+ "access": "public",
46
+ "provider": "google"
47
+ },
48
+ {
49
+ "path": "/api/oauth/google/desktop-exchange",
50
+ "method": "POST",
51
+ "kind": "api",
52
+ "access": "public",
53
+ "provider": "google_desktop",
54
+ "notes": "CLI/desktop PKCE broker — loopback redirect_uri only"
55
+ },
42
56
  {
43
57
  "path": "/api/oauth/github/start",
44
58
  "kind": "api",
45
59
  "access": "public",
46
60
  "provider": "github"
47
61
  },
62
+ {
63
+ "path": "/api/oauth/github/callback",
64
+ "kind": "api",
65
+ "access": "public",
66
+ "provider": "github"
67
+ },
48
68
  {
49
69
  "path": "/api/oauth/inneranimalmedia/start",
50
70
  "kind": "api",
@@ -20,14 +20,14 @@ identity.login(request); // alpha: throws until Identity Service adapter is wi
20
20
  identity.session.fromRequest(request); // alpha: throws until adapter is wired
21
21
  ```
22
22
 
23
- **Alpha scope:** contracts, D1 adapter, Worker router, `agentsam identity init` scaffold (`app/frontend` + `backend` + migrations), and `agentsam identity preview`. Default OAuth: minted `IAM_CLIENT_ID` + `IAM_CLIENT_SECRET`. Developer Google/GitHub BYOK still supported when those env pairs are set.
23
+ **Alpha scope:** contracts, D1 adapter, Worker router, `agentsam identity init` scaffold (`app/frontend` + `backend` + migrations), and `agentsam identity preview`. Default OAuth: minted `IAM_CLIENT_ID` + `IAM_CLIENT_SECRET`. BYOK options: Google web, Google Desktop (`GOOGLE_DESKTOP_CLIENT_ID`), GitHub, Cloudflare (`CLOUDFLARE_OAUTH_CLIENT_*`). **Stock CMS sign-in picker:** Cloudflare · Google · Inner Animal Media · ChatGPT (`hosted_headers` via Apps SDK). **Account SSOT:** `accounts` (not `account_identities` — that table is IdP linkage only).
24
24
 
25
25
  ## Layout
26
26
 
27
27
  ```
28
28
  src/
29
29
  core/ identity · sessions · accounts · recovery
30
- providers/ google · github · gcp · email
30
+ providers/ google · github · gcp · email · iam · cloudflare · chatgpt
31
31
  oauth/ authorize/callback (extract from IAM — next sprint)
32
32
  adapters/ inneranimalmedia · cloudflare-d1
33
33
  contracts/
@@ -11,7 +11,7 @@ Worker-side identity: providers, OAuth finalize, sessions, adapters.
11
11
  | `oauth/callback.js` | `src/core/auth/oauth-finalize.js` → `finalizeInboundOAuth` | **bulletproof path** |
12
12
  | `oauth/authorize.js` | `src/api/auth.js` OAuth start handlers | PKCE + state — next sprint |
13
13
  | `core/session-service.js` | `src/core/auth.js` | cookie, `createLoginSession`, revoke |
14
- | `core/account-linking.js` | `ensureIdentityPlaneBeforeSession`, `ensureAppUser` | account_identities |
14
+ | `core/account-linking.js` | `ensureIdentityPlaneBeforeSession`, `ensureAppUser` | **accounts** SSOT + account_identities (IdP link) |
15
15
  | `adapters/inneranimalmedia/*` | D1 writes in auth side-effects | tenant/workspace stays adapter-only |
16
16
 
17
17
  ## Rule
@@ -1,31 +1,35 @@
1
- # Identity schema mapping — portable ↔ Cloudflare D1
1
+ # Identity schema mapping — portable ↔ Cloudflare D1 (IAM compat)
2
2
 
3
3
  Portable SQLite (`packages/identity/migrations/sqlite/`) is the product schema.
4
- The D1 adapter maps existing hosted table names without requiring a big-bang rename.
4
+ The IAM-compat adapter maps existing hosted table names without requiring a big-bang rename.
5
5
 
6
- | Portable (SQLite) | Hosted D1 (current) | Notes |
6
+ | Portable (SQLite / portable D1) | Hosted D1 (IAM compat) | Notes |
7
7
  |---|---|---|
8
- | `identity_users` | `auth_users` | Same columns |
9
- | `identity_external_accounts` | `account_identities` | `user_id` ↔ `account_id` |
10
- | `identity_sessions` | `auth_sessions` | Same columns |
11
- | `identity_auth_events` | `auth_event_log` | Same columns |
12
- | `identity_oauth_transactions` | `identity_oauth_states` → migrate to `identity_oauth_transactions` | Requires `app_id NOT NULL`; no silent pre-app_id fallback |
13
- | `identity_provider_connections` | (new / connector tables) | `credential_ref` → vault/KMS; never store raw tokens in D1 rows |
8
+ | `identity_users` / account plane | **`accounts`** + `auth_users` | **Account SSOT** — row of record |
9
+ | `identity_external_accounts` | `account_identities` | IdP linkage only |
10
+ | `identity_sessions` (+ `type`) | `auth_sessions` (+ `type`) | browser / desktop |
11
+ | `identity_auth_events` | `auth_event_log` | Same semantics |
12
+ | `identity_oauth_transactions` (+ native cols) | `identity_oauth_states` | Requires `app_id NOT NULL`; native cols optional |
13
+ | `identity_native_handoffs` | `identity_native_handoffs` | Single-use desktop pickup |
14
+ | `identity_companies` | `company` | Branding / host resolution |
15
+ | `identity_provider_connections` | `identity_provider_connections` (or connector tables) | `credential_ref` only — never raw secrets |
14
16
  | `identity_app_registry` | cache of `agentsam.app.json` | Disk manifests remain SSOT |
15
17
  | `identity_route_registry` | projection cache | Disk manifests remain SSOT |
16
18
  | `identity_oauth_clients` … | optional `identity.oauth-server` pack | Only if product is an AS |
17
19
 
20
+ Password recovery is **not** a portable core table. It uses `createPasswordResetService` with an injected `{get,put,delete}` store. Optional `identity.recovery` pack may exist later.
21
+
18
22
  ## Schema version
19
23
 
20
- Both adapters read `identity_schema_meta.schema_version` (SQLite) or
21
- `PRAGMA`/meta row. Missing `app_id` on OAuth transactions is an
22
- `IdentitySchemaError('IDENTITY_SCHEMA_MIGRATION_REQUIRED')`, not a soft
23
- downgrade.
24
+ Portable adapters read `identity_schema_meta.schema_version`. Lane 1 requires version **2** (after `005_identity_company_native.sql`). Missing `app_id` on OAuth transactions is an `IdentitySchemaError`, not a soft downgrade.
24
25
 
25
26
  ## Packs
26
27
 
27
28
  | Pack | Apply when |
28
29
  |---|---|
29
- | `identity.core` | Always (local + hosted) |
30
+ | `identity.core` | Always (local + hosted portable) |
30
31
  | `identity.oauth-client` | Signing into external IdPs |
31
32
  | `identity.oauth-server` | Product issues its own codes/tokens |
33
+
34
+ Family manifest: `packages/identity/schema/agentsam.identity/manifest.json`
35
+ Generic contract: `protocol/database/agentsam.schema-pack.v1.schema.json`
@@ -0,0 +1,109 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ const HERE = path.dirname(fileURLToPath(import.meta.url));
6
+
7
+ /** Package-owned portable SQL SSOT (resolves inside installed npm package). */
8
+ export const PORTABLE_IDENTITY_MIGRATIONS_DIR = path.resolve(HERE, 'sqlite');
9
+
10
+ /** @deprecated Prefer PORTABLE_IDENTITY_MIGRATIONS_DIR */
11
+ export const SQLITE_MIGRATIONS_DIR = PORTABLE_IDENTITY_MIGRATIONS_DIR;
12
+
13
+ export const IDENTITY_SCHEMA_PACK_MANIFEST_PATH = path.resolve(
14
+ HERE,
15
+ '../schema/agentsam.identity/manifest.json',
16
+ );
17
+
18
+ /**
19
+ * Resolve the agentsam.identity pack-family manifest from the installed package.
20
+ * @returns {{ manifest: object, manifestPath: string, sqlDir: string }}
21
+ */
22
+ export function resolveIdentitySchemaPack() {
23
+ const manifestPath = IDENTITY_SCHEMA_PACK_MANIFEST_PATH;
24
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
25
+ return {
26
+ manifest,
27
+ manifestPath,
28
+ sqlDir: PORTABLE_IDENTITY_MIGRATIONS_DIR,
29
+ };
30
+ }
31
+
32
+ function listPortableMigrationFiles(opts = {}) {
33
+ const files = [
34
+ '001_identity_core.sql',
35
+ '002_identity_oauth_client.sql',
36
+ '005_identity_company_native.sql',
37
+ ];
38
+ if (opts.includeOAuthServer) {
39
+ files.push('003_identity_oauth_server.sql');
40
+ files.push('004_identity_oauth_consent_catalog.sql');
41
+ }
42
+ return files;
43
+ }
44
+
45
+ function isIgnorableMigrationError(err) {
46
+ const msg = String(err?.message || err || '').toLowerCase();
47
+ return (
48
+ msg.includes('duplicate column')
49
+ || msg.includes('already exists')
50
+ || msg.includes('duplicate column name')
51
+ );
52
+ }
53
+
54
+ async function runSql(db, sql) {
55
+ if (typeof db.exec === 'function') {
56
+ try {
57
+ db.exec(sql);
58
+ return;
59
+ } catch (err) {
60
+ // Multi-statement exec may fail mid-file on duplicate ALTER; fall through to statements.
61
+ if (!isIgnorableMigrationError(err) && !/alter table/i.test(sql)) throw err;
62
+ }
63
+ }
64
+ const stripped = sql.replace(/\/\*[\s\S]*?\*\//g, '');
65
+ const statements = stripped
66
+ .split(';')
67
+ .map((s) => s.replace(/--[^\n]*/g, '').trim())
68
+ .filter(Boolean);
69
+ for (const statement of statements) {
70
+ try {
71
+ if (typeof db.exec === 'function' && !db.prepare) {
72
+ db.exec(statement);
73
+ } else {
74
+ await db.prepare(statement).run();
75
+ }
76
+ } catch (err) {
77
+ if (isIgnorableMigrationError(err)) continue;
78
+ throw err;
79
+ }
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Apply portable agentsam.identity SQL pack to a SQLite or D1-shaped target.
85
+ * Same SQL sources for both; executor differs by driver API.
86
+ *
87
+ * @param {{ prepare?: Function, exec?: Function }} target
88
+ * @param {{ includeOAuthServer?: boolean }} [opts]
89
+ */
90
+ export async function applyPortableIdentityMigrations(target, opts = {}) {
91
+ if (!target || (typeof target.exec !== 'function' && typeof target.prepare !== 'function')) {
92
+ throw new Error('applyPortableIdentityMigrations_requires_db_target');
93
+ }
94
+ const files = listPortableMigrationFiles(opts);
95
+ for (const file of files) {
96
+ const sqlPath = path.join(PORTABLE_IDENTITY_MIGRATIONS_DIR, file);
97
+ const sql = fs.readFileSync(sqlPath, 'utf8');
98
+ await runSql(target, sql);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Stable compatibility alias — same portable pack, same sources.
104
+ * @param {{ prepare?: Function, exec?: Function }} db
105
+ * @param {{ includeOAuthServer?: boolean }} [opts]
106
+ */
107
+ export async function applySqliteIdentityMigrations(db, opts = {}) {
108
+ return applyPortableIdentityMigrations(db, opts);
109
+ }