@inneranimalmedia/agentsam-sdk 2.6.4 → 2.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (699) hide show
  1. package/AGENTSAM.md +40 -0
  2. package/README.md +15 -9
  3. package/apps/README.md +5 -0
  4. package/apps/cad-creator/README.md +4 -4
  5. package/apps/cad-creator/shared/cad/package.json +1 -1
  6. package/apps/client-cms-editor/AGENTS.md +17 -0
  7. package/apps/client-cms-editor/IMPORT_PROVENANCE.json +8 -0
  8. package/apps/client-cms-editor/README.md +100 -0
  9. package/apps/client-cms-editor/agentsam.app.json +74 -0
  10. package/apps/client-cms-editor/backend/README.md +5 -0
  11. package/apps/client-cms-editor/backend/package.json +39 -0
  12. package/apps/client-cms-editor/backend/src/api/client.ts +233 -0
  13. package/apps/client-cms-editor/backend/src/index.ts +6 -0
  14. package/apps/client-cms-editor/backend/src/model.ts +11 -0
  15. package/apps/client-cms-editor/backend/src/preview/bridge.ts +79 -0
  16. package/apps/client-cms-editor/backend/src/preview/urls.ts +55 -0
  17. package/apps/client-cms-editor/backend/src/routing/cms-route.js +293 -0
  18. package/apps/client-cms-editor/backend/src/routing/index.js +10 -0
  19. package/apps/client-cms-editor/backend/src/storefront.ts +52 -0
  20. package/apps/client-cms-editor/backend/tsconfig.json +20 -0
  21. package/apps/client-cms-editor/backend/worker/index.js +34 -0
  22. package/apps/client-cms-editor/backend/wrangler.jsonc +11 -0
  23. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  24. package/apps/client-cms-editor/bin/agentsam-cms.mjs +3 -0
  25. package/apps/client-cms-editor/frontend/index.html +12 -0
  26. package/apps/client-cms-editor/frontend/package.json +42 -0
  27. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +156 -0
  28. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +36 -0
  29. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  30. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  31. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  32. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  33. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  34. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  35. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +1374 -0
  36. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  37. package/apps/client-cms-editor/frontend/src/env.d.ts +14 -0
  38. package/apps/client-cms-editor/frontend/src/index.ts +22 -0
  39. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  40. package/apps/client-cms-editor/frontend/src/lib/content-safety.ts +63 -0
  41. package/apps/client-cms-editor/frontend/src/main.tsx +91 -0
  42. package/apps/client-cms-editor/frontend/src/mount.tsx +113 -0
  43. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +214 -0
  44. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +1739 -0
  45. package/apps/client-cms-editor/frontend/src/styles/studio.css +158 -0
  46. package/apps/client-cms-editor/frontend/src/surfaces/CmsDashboard.tsx +313 -0
  47. package/apps/client-cms-editor/frontend/src/surfaces/CmsGuidedChatHero.tsx +121 -0
  48. package/apps/client-cms-editor/frontend/src/surfaces/CmsHubPage.tsx +132 -0
  49. package/apps/client-cms-editor/frontend/src/surfaces/CmsSiteSwitcher.tsx +176 -0
  50. package/apps/client-cms-editor/frontend/src/surfaces/index.ts +5 -0
  51. package/apps/client-cms-editor/frontend/src/surfaces/types.ts +48 -0
  52. package/apps/client-cms-editor/frontend/tsconfig.json +36 -0
  53. package/apps/client-cms-editor/frontend/vite.config.ts +25 -0
  54. package/apps/client-cms-editor/package-lock.json +4671 -0
  55. package/apps/client-cms-editor/package.json +135 -0
  56. package/apps/client-cms-editor/reference/DONOR_README.md +52 -0
  57. package/apps/client-cms-editor/reference/DONOR_package-lock.json +1253 -0
  58. package/apps/client-cms-editor/reference/DONOR_tsconfig.json +15 -0
  59. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  60. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  61. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  62. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  63. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  64. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  65. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  66. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  67. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  68. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  69. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  70. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  71. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  72. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  73. package/apps/client-cms-editor/shared/cms/package.json +31 -0
  74. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  75. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +37 -0
  76. package/apps/client-cms-editor/shared/cms/src/cloudflare-bindings.ts +51 -0
  77. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +90 -0
  78. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  79. package/apps/client-cms-editor/shared/cms/src/index.ts +9 -0
  80. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  81. package/apps/client-cms-editor/shared/cms/src/publication.ts +24 -0
  82. package/apps/client-cms-editor/shared/cms/src/routes.ts +11 -0
  83. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  84. package/apps/client-cms-editor/shared/cms/tsconfig.json +12 -0
  85. package/bin/agentsam-rapid-rust +36 -0
  86. package/contracts/source-types.v1.json +353 -0
  87. package/docs/AUTH_IDENTITY_CONTRACT.md +2 -0
  88. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  89. package/docs/MACHINE_INTELLIGENCE.md +120 -0
  90. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  91. package/docs/THEME_REFINERY.md +2 -2
  92. package/docs/WINDOWS_RUNTIME_INSTALL.md +30 -0
  93. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +188 -0
  94. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +171 -0
  95. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +12 -4
  96. package/docs/architecture/R2_SLUG_NAMESPACE.md +20 -0
  97. package/docs/architecture/WORK_PRODUCT_EXTRACTION.md +97 -0
  98. package/docs/brand/AGENT_SAM_ICON_GRAMMAR.md +70 -0
  99. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +71 -0
  100. package/docs/content-studio/REVISION_GATE_2026-09-27.md +501 -0
  101. package/docs/contracts/capability-install-planner.md +67 -0
  102. package/docs/contracts/environment-vocabulary.md +195 -0
  103. package/docs/contracts/google-cloud-oauth-setup.md +199 -0
  104. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +1 -1
  105. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +290 -0
  106. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +394 -0
  107. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  108. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +227 -0
  109. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +221 -0
  110. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +145 -0
  111. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +215 -0
  112. package/docs/plugins.md +2 -2
  113. package/docs/product/AGENTSAM_PRODUCT_EXPERIENCE_STANDARD.md +280 -0
  114. package/docs/product/LOCAL_STUDIO_DESKTOP_EXPERIENCE.md +139 -0
  115. package/docs/product/README.md +8 -0
  116. package/docs/rapid-rust-wasm.md +35 -0
  117. package/migrations/d1/0016_cloudflare_oauth_user_oauth_tokens_ssot.sql +14 -0
  118. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  119. package/native/agentsam-machine/Cargo.lock +426 -0
  120. package/native/agentsam-machine/Cargo.toml +9 -0
  121. package/native/agentsam-machine/cli/Cargo.toml +14 -0
  122. package/native/agentsam-machine/cli/src/main.rs +77 -0
  123. package/native/agentsam-machine/core/Cargo.toml +15 -0
  124. package/native/agentsam-machine/core/src/assets.rs +790 -0
  125. package/native/agentsam-machine/core/src/bound.rs +298 -0
  126. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  127. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  128. package/native/agentsam-machine/core/src/lib.rs +1086 -0
  129. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  130. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  131. package/package.json +110 -21
  132. package/packages/agentsam-brand/README.md +107 -12
  133. package/packages/agentsam-brand/bin/agentsam-brand.mjs +9 -0
  134. package/packages/agentsam-brand/package.json +41 -9
  135. package/packages/agentsam-brand/src/adapters/cloudflare-images.js +453 -0
  136. package/packages/agentsam-brand/src/adapters/cloudflare-r2.js +74 -0
  137. package/packages/agentsam-brand/src/adapters/d1-registry.js +26 -0
  138. package/packages/agentsam-brand/src/adapters/filesystem.js +59 -0
  139. package/packages/agentsam-brand/src/adapters/memory.js +31 -0
  140. package/packages/agentsam-brand/src/cli/controller.js +503 -0
  141. package/packages/agentsam-brand/src/cli/wizard.js +526 -0
  142. package/packages/agentsam-brand/src/core/capabilities.js +201 -0
  143. package/packages/agentsam-brand/src/core/derivatives.js +211 -0
  144. package/packages/agentsam-brand/src/core/errors.js +12 -0
  145. package/packages/agentsam-brand/src/core/ingest.js +195 -0
  146. package/packages/agentsam-brand/src/core/inspect.js +109 -0
  147. package/packages/agentsam-brand/src/core/keys.js +83 -0
  148. package/packages/agentsam-brand/src/core/naming.js +142 -0
  149. package/packages/agentsam-brand/src/core/optimize.js +316 -0
  150. package/packages/agentsam-brand/src/core/pack.js +305 -0
  151. package/packages/agentsam-brand/src/core/plan.js +276 -0
  152. package/packages/agentsam-brand/src/core/preview.js +159 -0
  153. package/packages/agentsam-brand/src/core/processors/cloudflare.js +68 -0
  154. package/packages/agentsam-brand/src/core/processors/contract.js +203 -0
  155. package/packages/agentsam-brand/src/core/processors/index.js +148 -0
  156. package/packages/agentsam-brand/src/core/processors/native.js +82 -0
  157. package/packages/agentsam-brand/src/core/processors/sharp.js +113 -0
  158. package/packages/agentsam-brand/src/core/processors/squoosh-binary.js +195 -0
  159. package/packages/agentsam-brand/src/core/promote.js +288 -0
  160. package/packages/agentsam-brand/src/core/receipts.js +155 -0
  161. package/packages/agentsam-brand/src/core/v2/compile.js +280 -0
  162. package/packages/agentsam-brand/src/core/v2/derivatives-semantic.js +207 -0
  163. package/packages/agentsam-brand/src/core/v2/ingest-graph.js +387 -0
  164. package/packages/agentsam-brand/src/core/v2/roles.js +180 -0
  165. package/packages/agentsam-brand/src/core/v2/schema.js +209 -0
  166. package/packages/agentsam-brand/src/core/v2/templates.js +114 -0
  167. package/packages/agentsam-brand/src/index.js +193 -36
  168. package/packages/agentsam-brand/src/presets/app-icon.json +16 -0
  169. package/packages/agentsam-brand/src/presets/favicon.json +17 -0
  170. package/packages/agentsam-brand/src/presets/hero.json +12 -0
  171. package/packages/agentsam-brand/src/presets/index.js +40 -0
  172. package/packages/agentsam-brand/src/presets/logo.json +12 -0
  173. package/packages/agentsam-brand/src/presets/model.json +8 -0
  174. package/packages/agentsam-brand/src/presets/og-image.json +10 -0
  175. package/packages/agentsam-brand/src/presets/product-shot.json +11 -0
  176. package/packages/agentsam-brand/src/presets/social-image.json +10 -0
  177. package/packages/agentsam-brand/src/presets/web-image.json +10 -0
  178. package/packages/agentsam-contracts/package.json +13 -3
  179. package/packages/agentsam-contracts/src/artifacts.ts +41 -0
  180. package/packages/agentsam-contracts/src/tools.ts +22 -0
  181. package/packages/agentsam-errors/package.json +13 -3
  182. package/packages/agentsam-knowledge/package.json +18 -4
  183. package/packages/agentsam-knowledge/src/autorag/index.js +11 -4
  184. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  185. package/packages/agentsam-knowledge/src/providers/index.js +6 -4
  186. package/packages/agentsam-knowledge/src/providers/ollama-endpoint.js +31 -0
  187. package/packages/agentsam-knowledge/test/autorag.test.mjs +81 -1
  188. package/packages/agentsam-nav/package.json +26 -8
  189. package/packages/agentsam-queue-control/README.md +1 -1
  190. package/packages/agentsam-queue-control/package.json +7 -2
  191. package/packages/agentsam-rapid-rust/Cargo.lock +344 -0
  192. package/packages/agentsam-rapid-rust/Cargo.toml +18 -0
  193. package/packages/agentsam-rapid-rust/README.md +5 -0
  194. package/packages/agentsam-rapid-rust/src/main.rs +718 -0
  195. package/packages/agentsam-rapid-rust/templates/api/Cargo.toml.tmpl +18 -0
  196. package/packages/agentsam-rapid-rust/templates/api/src/lib.rs.tmpl +17 -0
  197. package/packages/agentsam-rapid-rust/templates/common/README.md.tmpl +22 -0
  198. package/packages/agentsam-rapid-rust/templates/common/package.json.tmpl +12 -0
  199. package/packages/agentsam-rapid-rust/templates/common/wrangler.toml.tmpl +6 -0
  200. package/packages/agentsam-rapid-rust/templates/crypto-auth/Cargo.toml.tmpl +21 -0
  201. package/packages/agentsam-rapid-rust/templates/crypto-auth/src/lib.rs.tmpl +32 -0
  202. package/packages/agentsam-rapid-rust/templates/data-processor/Cargo.toml.tmpl +18 -0
  203. package/packages/agentsam-rapid-rust/templates/data-processor/src/lib.rs.tmpl +41 -0
  204. package/packages/agentsam-rapid-rust/templates/shared-core/Cargo.toml.tmpl +9 -0
  205. package/packages/agentsam-rapid-rust/templates/shared-core/core/Cargo.toml.tmpl +7 -0
  206. package/packages/agentsam-rapid-rust/templates/shared-core/core/src/lib.rs.tmpl +23 -0
  207. package/packages/agentsam-rapid-rust/templates/shared-core/worker/Cargo.toml.tmpl +12 -0
  208. package/packages/agentsam-rapid-rust/templates/shared-core/worker/src/lib.rs.tmpl +16 -0
  209. package/packages/agentsam-rapid-rust/templates/shared-core/wrangler.toml.tmpl +6 -0
  210. package/packages/agentsam-repository/package.json +13 -3
  211. package/packages/agentsam-repository/src/index.js +1 -0
  212. package/packages/agentsam-repository/src/merkle/semantic.js +3 -10
  213. package/packages/agentsam-repository/src/source-types.js +93 -0
  214. package/packages/agentsam-vault/README.md +96 -0
  215. package/packages/agentsam-vault/package.json +42 -0
  216. package/packages/agentsam-vault/src/contracts/credential.d.ts +78 -0
  217. package/packages/agentsam-vault/src/contracts/credential.js +132 -0
  218. package/packages/agentsam-vault/src/crypto/aes-gcm.d.ts +30 -0
  219. package/packages/agentsam-vault/src/crypto/aes-gcm.js +107 -0
  220. package/packages/agentsam-vault/src/crypto/oauth-envelope.js +150 -0
  221. package/packages/agentsam-vault/src/index.d.ts +9 -0
  222. package/packages/agentsam-vault/src/index.js +27 -0
  223. package/packages/agentsam-vault/src/providers/registry.js +90 -0
  224. package/packages/agentsam-vault/src/runtime/resolver.js +77 -0
  225. package/packages/agentsam-workbench/README.md +24 -0
  226. package/packages/agentsam-workbench/package.json +49 -0
  227. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +41 -0
  228. package/packages/agentsam-workbench/src/agent/ArtifactCard.tsx +9 -0
  229. package/packages/agentsam-workbench/src/agent/Composer.tsx +102 -0
  230. package/packages/agentsam-workbench/src/agent/ConnectedAgentPanel.tsx +194 -0
  231. package/packages/agentsam-workbench/src/agent/ContextualComposer.tsx +788 -0
  232. package/packages/agentsam-workbench/src/agent/GoalStatusStrip.tsx +38 -0
  233. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +86 -0
  234. package/packages/agentsam-workbench/src/agent/ModelSelect.tsx +19 -0
  235. package/packages/agentsam-workbench/src/agent/Thread.tsx +56 -0
  236. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  237. package/packages/agentsam-workbench/src/agent/ToolReceipt.tsx +11 -0
  238. package/packages/agentsam-workbench/src/agent/contextual-composer.css +611 -0
  239. package/packages/agentsam-workbench/src/agent/index.ts +12 -0
  240. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +12 -0
  241. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  242. package/packages/agentsam-workbench/src/browser/BrowserFrame.tsx +37 -0
  243. package/packages/agentsam-workbench/src/browser/index.ts +1 -0
  244. package/packages/agentsam-workbench/src/index.ts +6 -0
  245. package/packages/agentsam-workbench/src/project-control.css +160 -0
  246. package/packages/agentsam-workbench/src/projects/ProjectsSurface.tsx +131 -0
  247. package/packages/agentsam-workbench/src/projects/index.ts +1 -0
  248. package/packages/agentsam-workbench/src/shell/Breadcrumb.tsx +35 -0
  249. package/packages/agentsam-workbench/src/shell/ResizableStage.tsx +99 -0
  250. package/packages/agentsam-workbench/src/shell/SidePanel.tsx +5 -0
  251. package/packages/agentsam-workbench/src/shell/index.ts +4 -0
  252. package/packages/agentsam-workbench/src/shell/surfaceRegistry.ts +29 -0
  253. package/packages/agentsam-workbench/src/terminal/TerminalSurface.tsx +5 -0
  254. package/packages/agentsam-workbench/src/terminal/index.ts +1 -0
  255. package/packages/agentsam-workbench/src/timeline/GanttBoard.tsx +258 -0
  256. package/packages/agentsam-workbench/src/timeline/index.ts +1 -0
  257. package/packages/agentsam-workbench/tsconfig.json +13 -0
  258. package/packages/connectors/cloudflare/OAUTH_STORAGE_AUDIT.md +53 -0
  259. package/packages/connectors/cloudflare/package.json +16 -4
  260. package/packages/connectors/cloudflare/src/api-client.js +280 -0
  261. package/packages/connectors/cloudflare/src/capabilities.js +585 -0
  262. package/packages/connectors/cloudflare/src/credential.js +318 -0
  263. package/packages/connectors/cloudflare/src/families/brand-protection.js +123 -0
  264. package/packages/connectors/cloudflare/src/families/keyless.js +114 -0
  265. package/packages/connectors/cloudflare/src/families/pages.js +151 -0
  266. package/packages/connectors/cloudflare/src/families/scanner.js +123 -0
  267. package/packages/connectors/cloudflare/src/families/snippets.js +207 -0
  268. package/packages/connectors/cloudflare/src/families/tag-gateway.js +46 -0
  269. package/packages/connectors/cloudflare/src/families/tags.js +124 -0
  270. package/packages/connectors/cloudflare/src/families/token-validation.js +95 -0
  271. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  272. package/packages/connectors/cloudflare/src/families/workflows.js +156 -0
  273. package/packages/connectors/cloudflare/src/index.js +103 -265
  274. package/packages/connectors/cloudflare/src/oauth-persist.js +336 -0
  275. package/packages/connectors/cloudflare/src/owner.js +42 -12
  276. package/packages/connectors/cloudflare/src/permission-options.js +1064 -0
  277. package/packages/connectors/cloudflare/src/routes.js +309 -144
  278. package/packages/connectors/cloudflare/src/scope-catalog.js +345 -0
  279. package/packages/connectors/cloudflare/src/vault.js +2 -2
  280. package/packages/connectors/cloudflare/tests/capabilities.test.mjs +276 -0
  281. package/packages/connectors/cloudflare/tests/connector.test.mjs +26 -30
  282. package/packages/connectors/cloudflare/tests/oauth-persist.test.mjs +125 -0
  283. package/packages/heuristic-theme/README.md +2 -2
  284. package/packages/heuristic-theme/package.json +8 -3
  285. package/packages/heuristic-theme/src/registry.js +2 -2
  286. package/packages/heuristic-theme/src/theme.js +1 -1
  287. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  288. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  289. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +44 -4
  290. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +10 -4
  291. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +20 -0
  292. package/packages/identity/README.md +2 -2
  293. package/packages/identity/backend/README.md +1 -1
  294. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -14
  295. package/packages/identity/migrations/apply-portable.js +109 -0
  296. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +48 -0
  297. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  298. package/packages/identity/package.json +27 -5
  299. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  300. package/packages/identity/scripts/local-identity-bridge.mjs +190 -0
  301. package/packages/identity/scripts/preview-auth-portal.mjs +8 -8
  302. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -372
  303. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  304. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  305. package/packages/identity/src/adapters/portable-store.js +479 -0
  306. package/packages/identity/src/adapters/sqlite/index.js +13 -309
  307. package/packages/identity/src/contracts/auth-config.js +27 -8
  308. package/packages/identity/src/contracts/external-identity.js +1 -1
  309. package/packages/identity/src/contracts/identity-store.js +56 -5
  310. package/packages/identity/src/contracts/provider.js +2 -0
  311. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  312. package/packages/identity/src/core/constants.js +1 -1
  313. package/packages/identity/src/core/session-policy.js +31 -0
  314. package/packages/identity/src/frontend/auth-portal/README.md +2 -1
  315. package/packages/identity/src/frontend/auth-portal/pages/login.html +7 -6
  316. package/packages/identity/src/frontend/auth-portal/pages/reset.html +6 -5
  317. package/packages/identity/src/frontend/auth-portal/pages/signup.html +6 -5
  318. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  319. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +176 -0
  320. package/packages/identity/src/index.js +44 -1
  321. package/packages/identity/src/migrations/0001_identity_core.sql +19 -2
  322. package/packages/identity/src/migrations/0003_accounts_ssot.sql +20 -0
  323. package/packages/identity/src/migrations/README.md +23 -20
  324. package/packages/identity/src/oauth/README.md +10 -5
  325. package/packages/identity/src/oauth/consent-view.js +388 -0
  326. package/packages/identity/src/oauth/credentials.js +39 -20
  327. package/packages/identity/src/oauth/google-desktop-exchange.js +341 -0
  328. package/packages/identity/src/oauth/iam-platform.js +21 -9
  329. package/packages/identity/src/oauth/native-handoff.js +136 -0
  330. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  331. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  332. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  333. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  334. package/packages/identity/src/providers/cloudflare/oauth.js +3 -4
  335. package/packages/identity/src/providers/cloudflare/profile.js +49 -14
  336. package/packages/identity/src/providers/github/oauth.js +1 -2
  337. package/packages/identity/src/providers/github/profile.js +16 -2
  338. package/packages/identity/src/providers/iam/index.js +27 -5
  339. package/packages/identity/src/providers/index.js +11 -3
  340. package/packages/identity/src/server/identity-service.js +33 -3
  341. package/packages/identity/src/server/worker-router.js +171 -88
  342. package/packages/identity/tests/auth-config.test.mjs +3 -2
  343. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  344. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  345. package/packages/identity/tests/identity-init-scaffold.test.mjs +17 -3
  346. package/packages/identity/tests/identity-service.test.mjs +16 -0
  347. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  348. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  349. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  350. package/packages/identity/tests/native-session-worker.test.mjs +64 -0
  351. package/packages/identity/tests/oauth-consent-view.test.mjs +106 -0
  352. package/packages/identity/tests/oauth-credentials.test.mjs +21 -8
  353. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +58 -0
  354. package/packages/identity/tests/preview-auth-portal.test.mjs +5 -3
  355. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  356. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  357. package/packages/providers/completeful/package.json +7 -2
  358. package/packages/runtime-protocol/src/index.js +154 -0
  359. package/packages/theme-church-site/package.json +17 -6
  360. package/packages/theme-church-site/src/harvest.json +4 -2
  361. package/packages/theme-church-site/src/index.js +7 -3
  362. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  363. package/packages/theme-companions-site/package.json +17 -6
  364. package/packages/theme-companions-site/src/harvest.json +4 -2
  365. package/packages/theme-companions-site/src/index.js +7 -3
  366. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  367. package/packages/theme-floors-site/package.json +17 -6
  368. package/packages/theme-floors-site/src/harvest.json +4 -2
  369. package/packages/theme-floors-site/src/index.js +7 -3
  370. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  371. package/packages/theme-fuelnfree-site/package.json +17 -6
  372. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  373. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  374. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  375. package/packages/theme-handyman-site/package.json +17 -6
  376. package/packages/theme-handyman-site/src/harvest.json +4 -2
  377. package/packages/theme-handyman-site/src/index.js +7 -3
  378. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  379. package/packages/theme-insurance-site/package.json +17 -6
  380. package/packages/theme-insurance-site/src/harvest.json +4 -2
  381. package/packages/theme-insurance-site/src/index.js +7 -3
  382. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  383. package/packages/theme-scenes/README.md +164 -0
  384. package/packages/theme-scenes/package.json +54 -0
  385. package/packages/theme-scenes/src/blocks/index.js +30 -0
  386. package/packages/theme-scenes/src/contracts/index.js +286 -0
  387. package/packages/theme-scenes/src/demos/index.js +65 -0
  388. package/packages/theme-scenes/src/index.js +75 -0
  389. package/packages/theme-scenes/src/presets/index.js +263 -0
  390. package/packages/theme-scenes/src/registry.js +187 -0
  391. package/packages/theme-scenes/src/runtime/compile.js +119 -0
  392. package/packages/theme-scenes/src/scenes/index.js +146 -0
  393. package/packages/theme-scenes/src/shell/index.js +47 -0
  394. package/packages/theme-scenes/src/themes/index.js +129 -0
  395. package/packages/theme-scenes/src/visuals/index.js +41 -0
  396. package/packages/theme-scenes/test/theme-scenes.test.mjs +179 -0
  397. package/packages/theme-shinshu-site/package.json +17 -6
  398. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  399. package/packages/theme-shinshu-site/src/index.js +7 -3
  400. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  401. package/packages/work-graph/package.json +14 -4
  402. package/packages/work-graph/src/index.js +34 -1
  403. package/packages/work-graph/src/renderers/gantt-model.js +24 -0
  404. package/packages/work-graph/test/work-graph.test.mjs +27 -7
  405. package/protocol/FILEMETA_V1.md +2 -2
  406. package/protocol/README.md +15 -7
  407. package/protocol/apps/agentsam.app.v1.schema.json +89 -7
  408. package/protocol/apps/agentsam.host-install.v1.schema.json +36 -0
  409. package/protocol/assets/README.md +9 -0
  410. package/protocol/assets/asset-record.v1.schema.json +64 -0
  411. package/protocol/capabilities/manifest.json +1 -1
  412. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  413. package/protocol/presets/catalog.json +2 -2
  414. package/protocol/runtime/agentsam.runtime.v1.schema.json +75 -0
  415. package/protocol/scoring/README.md +10 -0
  416. package/protocol/scoring/scorecard.v1.schema.json +65 -0
  417. package/protocol/theme-refinery/lineage-registry.json +105 -0
  418. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  419. package/protocol/ui/icon-registry.mjs +1 -0
  420. package/registry/cms-rust-machine-20260928/installable-products.json +31 -0
  421. package/registry/cms-rust-machine-20260928/manifest.json +22 -0
  422. package/registry/cms-rust-machine-20260928/migration.sql +237 -0
  423. package/registry/cms-rust-machine-20260928/receipt.json +21 -0
  424. package/registry/cms-rust-machine-20260928/receipt.sql +27 -0
  425. package/scripts/build_rapid_rust_cli.py +83 -0
  426. package/skills/grok-auth/SKILL.md +110 -0
  427. package/skills/grok-auth/agentsam.skill.json +25 -0
  428. package/skills/grok-auth/references/grok-identity.md +64 -0
  429. package/skills/grok-auth/references/per-user-data.md +49 -0
  430. package/skills/grok-auth/references/prewired-and-env.md +54 -0
  431. package/skills/grok-auth/references/session-ui.md +133 -0
  432. package/skills/grok-auth/references/sign-in-methods.md +55 -0
  433. package/skills/grok-auth/references/wiring.md +71 -0
  434. package/skills/grok-building-games/SKILL.md +213 -0
  435. package/skills/grok-building-games/agentsam.skill.json +25 -0
  436. package/skills/grok-building-games/references/3d-libs.md +64 -0
  437. package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
  438. package/skills/grok-building-games/references/audio.md +129 -0
  439. package/skills/grok-building-games/references/babylon.md +202 -0
  440. package/skills/grok-building-games/references/collision-physics.md +122 -0
  441. package/skills/grok-building-games/references/ecs-architecture.md +111 -0
  442. package/skills/grok-building-games/references/game-feel-juice.md +110 -0
  443. package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
  444. package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
  445. package/skills/grok-building-games/references/genres/fps.md +105 -0
  446. package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
  447. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
  448. package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
  449. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
  450. package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
  451. package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
  452. package/skills/grok-building-games/references/input.md +139 -0
  453. package/skills/grok-building-games/references/phaser.md +277 -0
  454. package/skills/grok-building-games/references/procedural-generation.md +141 -0
  455. package/skills/grok-building-games/references/save-persistence.md +108 -0
  456. package/skills/grok-building-games/references/threejs-foundational.md +148 -0
  457. package/skills/grok-controls/SKILL.md +274 -0
  458. package/skills/grok-controls/agentsam.skill.json +25 -0
  459. package/skills/grok-design-ui/SKILL.md +122 -0
  460. package/skills/grok-design-ui/agentsam.skill.json +25 -0
  461. package/skills/grok-design-ui/references/animations.md +379 -0
  462. package/skills/grok-design-ui/references/performance.md +88 -0
  463. package/skills/grok-design-ui/references/refined-ui.md +384 -0
  464. package/skills/grok-design-ui/references/surfaces.md +247 -0
  465. package/skills/grok-design-ui/references/typography.md +123 -0
  466. package/skills/grok-game-animation-frames/SKILL.md +84 -0
  467. package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
  468. package/skills/grok-game-asset-core/SKILL.md +69 -0
  469. package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
  470. package/skills/grok-game-character-consistency/SKILL.md +69 -0
  471. package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
  472. package/skills/grok-game-tilesets/SKILL.md +65 -0
  473. package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
  474. package/skills/grok-game-ui-icons/SKILL.md +56 -0
  475. package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
  476. package/skills/grok-generate2dmap/LICENSE +21 -0
  477. package/skills/grok-generate2dmap/SKILL.md +120 -0
  478. package/skills/grok-generate2dmap/SOURCE.md +6 -0
  479. package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
  480. package/skills/grok-generate2dmap/references/deliverables.md +101 -0
  481. package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
  482. package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
  483. package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
  484. package/skills/grok-generate2dmap/references/pipeline.md +149 -0
  485. package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
  486. package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
  487. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
  488. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
  489. package/skills/grok-generate2dsprite/LICENSE +21 -0
  490. package/skills/grok-generate2dsprite/SKILL.md +313 -0
  491. package/skills/grok-generate2dsprite/SOURCE.md +6 -0
  492. package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
  493. package/skills/grok-generate2dsprite/references/modes.md +124 -0
  494. package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
  495. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
  496. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
  497. package/skills/grok-imagine/SKILL.md +201 -0
  498. package/skills/grok-imagine/agentsam.skill.json +25 -0
  499. package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
  500. package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
  501. package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
  502. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
  503. package/skills/grok-neon/SKILL.md +157 -0
  504. package/skills/grok-neon/agentsam.skill.json +25 -0
  505. package/skills/grok-og/SKILL.md +102 -0
  506. package/skills/grok-og/agentsam.skill.json +25 -0
  507. package/skills/grok-og/references/brand-pass.md +53 -0
  508. package/skills/grok-og/references/custom-card.md +107 -0
  509. package/skills/grok-og/references/favicon-and-icons.md +48 -0
  510. package/skills/grok-og/references/og-type-contract.md +18 -0
  511. package/skills/grok-og/references/placeholder-card.md +21 -0
  512. package/skills/grok-og/references/x-banner.md +41 -0
  513. package/skills/grok-threejs/SKILL.md +67 -0
  514. package/skills/grok-threejs/agentsam.skill.json +25 -0
  515. package/skills/grok-threejs/references/llms-full.txt +2780 -0
  516. package/skills/grok-video2dsprite/LICENSE +21 -0
  517. package/skills/grok-video2dsprite/SKILL.md +236 -0
  518. package/skills/grok-video2dsprite/SOURCE.md +6 -0
  519. package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
  520. package/skills/grok-video2dsprite/references/pipeline.md +90 -0
  521. package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
  522. package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
  523. package/skills/grok-xai-api/SKILL.md +152 -0
  524. package/skills/grok-xai-api/agentsam.skill.json +25 -0
  525. package/src/attachments/index.js +6 -0
  526. package/src/attachments/intake.js +235 -0
  527. package/src/capabilities/repository-snapshot.js +19 -2
  528. package/src/cli/command-catalog.js +53 -3
  529. package/src/cli/dispatch.js +1 -0
  530. package/src/cli.js +192 -26
  531. package/src/cloudflare/runtime-status.js +2 -1
  532. package/src/commands/account-auth.js +94 -8
  533. package/src/commands/app.js +307 -3
  534. package/src/commands/autorag.js +67 -13
  535. package/src/commands/billing.js +127 -0
  536. package/src/commands/brand.js +74 -60
  537. package/src/commands/cheat-sheet.js +179 -0
  538. package/src/commands/cloudflare-login.js +222 -0
  539. package/src/commands/cloudflare.js +453 -23
  540. package/src/commands/codebaseindex.js +51 -3
  541. package/src/commands/compute.js +4 -0
  542. package/src/commands/connections.js +11 -5
  543. package/src/commands/credentials.js +116 -0
  544. package/src/commands/gcloud-auth.js +427 -0
  545. package/src/commands/google-cloud.js +375 -0
  546. package/src/commands/identity-init.js +2 -2
  547. package/src/commands/knowledge.js +59 -2
  548. package/src/commands/machine-binary.js +103 -0
  549. package/src/commands/machine.js +137 -0
  550. package/src/commands/mcp.js +226 -33
  551. package/src/commands/ollama.js +3 -2
  552. package/src/commands/plugins.js +7 -2
  553. package/src/commands/product.js +36 -0
  554. package/src/commands/runtime-status.js +28 -9
  555. package/src/commands/runtime.js +313 -0
  556. package/src/commands/rust.js +24 -0
  557. package/src/commands/security.js +67 -4
  558. package/src/commands/setup.js +296 -0
  559. package/src/commands/shell.js +16 -3
  560. package/src/commands/start-local.js +2 -2
  561. package/src/commands/status.js +8 -1
  562. package/src/commands/terminal.js +171 -0
  563. package/src/commands/update.js +140 -0
  564. package/src/commands/whoami.js +329 -65
  565. package/src/features/resolve.js +2 -0
  566. package/src/index.js +4 -0
  567. package/src/indexing/ingest/inventory.js +254 -19
  568. package/src/indexing/ingest/materials.js +3 -9
  569. package/src/indexing/ingest/style-evidence.js +181 -0
  570. package/src/knowledge/engine.js +21 -2
  571. package/src/knowledge/runtime-discovery.js +127 -0
  572. package/src/knowledge/source.js +3 -3
  573. package/src/lib/account-session.js +11 -4
  574. package/src/lib/app-authority.js +172 -0
  575. package/src/lib/auth.js +94 -21
  576. package/src/lib/core-client.js +5 -6
  577. package/src/lib/credentials-audit.js +451 -0
  578. package/src/lib/deploy/health.js +24 -6
  579. package/src/lib/detect-context.js +7 -1
  580. package/src/lib/google-cloud-connection.js +270 -0
  581. package/src/lib/google-cloud-inventory.js +385 -0
  582. package/src/lib/google-desktop-oauth.js +372 -0
  583. package/src/lib/google-studio-brokered-oauth.js +158 -0
  584. package/src/lib/identity-scaffold.js +76 -18
  585. package/src/lib/init-options.js +192 -0
  586. package/src/lib/local-scaffold.js +48 -16
  587. package/src/lib/provider-command-remediation.js +308 -0
  588. package/src/lib/provider-credentials.js +8 -0
  589. package/src/lib/scaffold/index.js +8 -2
  590. package/src/lib/scaffold/mcp-server.js +43 -0
  591. package/src/lib/scaffold/templates/mcp-server/index.js +397 -0
  592. package/src/lib/scaffold/templates/mcp-server/presets.js +39 -0
  593. package/src/lib/scaffold/wizards/cms.js +93 -0
  594. package/src/lib/scaffold/wizards/mcp-server.js +61 -0
  595. package/src/lib/setup/contract.js +26 -0
  596. package/src/lib/setup/discover.js +116 -0
  597. package/src/lib/setup/execute.js +205 -0
  598. package/src/lib/setup/planner.js +134 -0
  599. package/src/lib/setup/recipes.js +235 -0
  600. package/src/lib/setup/runtime-persist.js +197 -0
  601. package/src/lib/setup/runtime.js +394 -0
  602. package/src/lib/slash-commands.js +2 -0
  603. package/src/lib/terminal/machine-identity.js +95 -0
  604. package/src/lib/terminal-local.js +164 -0
  605. package/src/lib/terminal-scopes.js +52 -0
  606. package/src/lib/whoami-capabilities.js +184 -0
  607. package/src/local-pty/server.js +34 -5
  608. package/src/mcp/authority.js +58 -108
  609. package/src/mcp/client-adapters.js +68 -144
  610. package/src/mcp/client.js +142 -122
  611. package/src/mcp/cloudflare-bundles.js +225 -0
  612. package/src/mcp/index.js +12 -0
  613. package/src/models/discovery.js +40 -22
  614. package/src/models/inventory-core.d.ts +105 -0
  615. package/src/models/inventory-core.js +54 -6
  616. package/src/plugins/cloudflare.js +1 -1
  617. package/src/providers/ollama-chat.js +2 -1
  618. package/src/sam/types.js +27 -2
  619. package/src/security/inventory.js +12 -2
  620. package/src/security/local-vault.js +2 -0
  621. package/src/security/logs.js +3 -0
  622. package/src/security/scan.js +1 -1
  623. package/src/ui/cli/help.js +41 -0
  624. package/test/account-session.test.mjs +3 -3
  625. package/test/app-authority-context.test.mjs +32 -0
  626. package/test/apps-scaffold-contract.test.mjs +3 -2
  627. package/test/cli/api-key-env-whoami.test.mjs +2 -2
  628. package/test/cli/catalog-authority.test.mjs +64 -0
  629. package/test/cli/codebaseindex-plan-ux.test.mjs +1 -1
  630. package/test/cli/machine-command.test.mjs +34 -0
  631. package/test/cli/mcp-client.test.mjs +21 -10
  632. package/test/cli/runtime-persist.test.mjs +56 -0
  633. package/test/cli/rust-command.test.mjs +21 -0
  634. package/test/credentials-audit.test.mjs +113 -0
  635. package/test/deploy-health-scan.test.mjs +29 -1
  636. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
  637. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
  638. package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
  639. package/test/gcloud-auth.test.mjs +111 -0
  640. package/test/google-cloud-connection.test.mjs +83 -0
  641. package/test/google-cloud-inventory.test.mjs +64 -0
  642. package/test/init-options.test.mjs +35 -0
  643. package/test/integration/app-command.test.mjs +30 -0
  644. package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
  645. package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
  646. package/test/integration/cad-project.test.mjs +4 -1
  647. package/test/integration/cms-app-scaffold.test.mjs +77 -0
  648. package/test/integration/cms-site-tenancy-contract.test.mjs +31 -19
  649. package/test/integration/codebaseindex-ingest.test.mjs +89 -0
  650. package/test/integration/database-hosted-honesty.test.mjs +49 -0
  651. package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
  652. package/test/integration/features-resolve.test.mjs +30 -11
  653. package/test/integration/hosted-work-host-authority.test.mjs +47 -0
  654. package/test/integration/inspect-path-cli.test.mjs +46 -0
  655. package/test/integration/inventory-eligibility.test.mjs +59 -0
  656. package/test/integration/inventory-evidence.test.mjs +125 -0
  657. package/test/integration/local-provider-bridge.test.mjs +65 -0
  658. package/test/integration/local-studio-settings-production.test.mjs +40 -0
  659. package/test/integration/lockfile-sync.test.mjs +26 -0
  660. package/test/integration/provider-env-cli.test.mjs +13 -3
  661. package/test/integration/runtime-status.integration.test.mjs +17 -1
  662. package/test/integration/theme-package-registry.test.mjs +31 -0
  663. package/test/knowledge.test.mjs +35 -1
  664. package/test/loopback-oauth.test.mjs +53 -0
  665. package/test/ollama.test.mjs +22 -0
  666. package/test/repository-snapshot-view.test.mjs +2 -2
  667. package/test/security.test.mjs +37 -0
  668. package/test/setup-planner.test.mjs +74 -0
  669. package/test/setup-runtime.test.mjs +51 -0
  670. package/test/terminal/local-pty.mock.test.mjs +3 -1
  671. package/test/terminal-machine-identity.test.mjs +88 -0
  672. package/test/whoami-resume.test.mjs +27 -6
  673. package/packages/agentsam-brand/test/brand-scan.test.mjs +0 -106
  674. package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
  675. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
  676. package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
  677. package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
  678. package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
  679. package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
  680. package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
  681. package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
  682. package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
  683. package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
  684. package/packages/agentsam-nav/dist/browser.d.ts +0 -11
  685. package/packages/agentsam-nav/dist/browser.global.js +0 -132
  686. package/packages/agentsam-nav/dist/browser.js +0 -613
  687. package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
  688. package/packages/agentsam-nav/dist/index.d.ts +0 -11
  689. package/packages/agentsam-nav/dist/index.js +0 -614
  690. package/packages/agentsam-nav/dist/legacy.css +0 -83
  691. package/packages/agentsam-nav/dist/shell.css +0 -113
  692. package/packages/agentsam-nav/dist/theme.css +0 -113
  693. package/packages/agentsam-nav/dist/utils.d.ts +0 -1
  694. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
  695. package/packages/work-graph/prototype/README.md +0 -32
  696. package/packages/work-graph/prototype/data/demo-workgraph.js +0 -47
  697. package/packages/work-graph/prototype/renderers/timeline-model.js +0 -21
  698. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +0 -38
  699. package/packages/work-graph/prototype-gnantt.html +0 -655
@@ -1,319 +1,23 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import {
5
- IDENTITY_STORE_SCHEMA_VERSION,
6
- IdentitySchemaError,
7
- } from '../../contracts/identity-store.js';
8
- import { newAccountIdentityId, newAuthEventId, newAuthUserId, newSessionId, nowUnix } from '../cloudflare-d1/ids.js';
9
- import { SESSION_POLICY } from '../../core/constants.js';
10
-
11
- const HERE = path.dirname(fileURLToPath(import.meta.url));
12
- export const SQLITE_MIGRATIONS_DIR = path.resolve(HERE, '../../../migrations/sqlite');
13
-
14
1
  /**
15
- * Apply identity.core + identity.oauth-client (+ optional oauth-server) to a
16
- * D1-shaped db ({ prepare().bind().run|first|all }).
17
- *
18
- * @param {{ prepare: Function }} db
19
- * @param {{ includeOAuthServer?: boolean }} [opts]
2
+ * Local SQLite IdentityStore — portable identity_* schema, zero Cloudflare/IAM.
3
+ * Shares the portable store implementation because Node SQLite is exposed through
4
+ * the same prepare/bind/first/run shape as D1-shaped bindings.
20
5
  */
21
- export async function applySqliteIdentityMigrations(db, opts = {}) {
22
- const files = [
23
- '001_identity_core.sql',
24
- '002_identity_oauth_client.sql',
25
- ];
26
- if (opts.includeOAuthServer) files.push('003_identity_oauth_server.sql');
27
-
28
- for (const file of files) {
29
- const sql = fs.readFileSync(path.join(SQLITE_MIGRATIONS_DIR, file), 'utf8');
30
- if (typeof db.exec === 'function') {
31
- db.exec(sql);
32
- continue;
33
- }
34
- // D1-shaped: run statement-by-statement (no multi-exec).
35
- const stripped = sql.replace(/\/\*[\s\S]*?\*\//g, '');
36
- const statements = stripped
37
- .split(';')
38
- .map((s) => s.replace(/--[^\n]*/g, '').trim())
39
- .filter(Boolean);
40
- for (const statement of statements) {
41
- await db.prepare(statement).run();
42
- }
43
- }
44
- }
45
-
46
- async function hashValue(value) {
47
- const v = String(value || '').trim();
48
- if (!v) return null;
49
- const bytes = new TextEncoder().encode(v);
50
- const digest = await crypto.subtle.digest('SHA-256', bytes);
51
- return Array.from(new Uint8Array(digest)).map((b) => b.toString(16).padStart(2, '0')).join('');
52
- }
6
+ export {
7
+ applyPortableIdentityMigrations,
8
+ applySqliteIdentityMigrations,
9
+ PORTABLE_IDENTITY_MIGRATIONS_DIR,
10
+ SQLITE_MIGRATIONS_DIR,
11
+ resolveIdentitySchemaPack,
12
+ IDENTITY_SCHEMA_PACK_MANIFEST_PATH,
13
+ } from '../../../migrations/apply-portable.js';
53
14
 
54
- async function requireSchema(db) {
55
- let row;
56
- try {
57
- row = await db.prepare(
58
- `SELECT value FROM identity_schema_meta WHERE key = 'schema_version' LIMIT 1`,
59
- ).bind().first();
60
- } catch (err) {
61
- throw new IdentitySchemaError(
62
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
63
- 'identity.core migrations not applied — run applySqliteIdentityMigrations()',
64
- { cause: String(err?.message || err) },
65
- );
66
- }
67
- const version = Number(row?.value || 0);
68
- if (version < IDENTITY_STORE_SCHEMA_VERSION) {
69
- throw new IdentitySchemaError(
70
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
71
- `identity schema_version=${version}, required=${IDENTITY_STORE_SCHEMA_VERSION}`,
72
- { version, required: IDENTITY_STORE_SCHEMA_VERSION },
73
- );
74
- }
75
- }
15
+ import { createPortableIdentityStore } from '../portable-store.js';
76
16
 
77
17
  /**
78
- * Local SQLite IdentityStore — full offline identity, no Cloudflare/IAM.
79
18
  * @param {{ prepare: Function }} db D1-shaped binding (see createLocalSqliteDatabase)
80
19
  * @param {{ sessionTtlSeconds?: number, skipSchemaCheck?: boolean }} [options]
81
20
  */
82
21
  export function createSqliteIdentityAdapter(db, options = {}) {
83
- if (!db?.prepare) throw new Error('sqlite_identity_adapter_requires_db');
84
- const sessionTtlSeconds = options.sessionTtlSeconds ?? SESSION_POLICY.browser.ttlSeconds;
85
- let schemaReady = Boolean(options.skipSchemaCheck);
86
-
87
- async function ensure() {
88
- if (schemaReady) return;
89
- await requireSchema(db);
90
- schemaReady = true;
91
- }
92
-
93
- return Object.freeze({
94
- schemaVersion: IDENTITY_STORE_SCHEMA_VERSION,
95
- sessionTtlSeconds,
96
- backend: 'sqlite',
97
-
98
- async findUserByEmail(email) {
99
- await ensure();
100
- const row = await db.prepare(
101
- `SELECT id, email, display_name, password_hash, salt, status, created_at, updated_at
102
- FROM identity_users WHERE email = ? COLLATE NOCASE LIMIT 1`,
103
- ).bind(String(email || '').trim().toLowerCase()).first();
104
- return row || null;
105
- },
106
-
107
- async findUserById(userId) {
108
- await ensure();
109
- const row = await db.prepare(
110
- `SELECT id, email, display_name, password_hash, salt, status, created_at, updated_at
111
- FROM identity_users WHERE id = ? LIMIT 1`,
112
- ).bind(userId).first();
113
- return row || null;
114
- },
115
-
116
- async createUser({ email, passwordHash, salt, displayName }) {
117
- await ensure();
118
- const id = newAuthUserId();
119
- const ts = nowUnix();
120
- const normalizedEmail = String(email || '').trim().toLowerCase();
121
- await db.prepare(
122
- `INSERT INTO identity_users (id, email, display_name, password_hash, salt, status, created_at, updated_at)
123
- VALUES (?, ?, ?, ?, ?, 'active', ?, ?)`,
124
- ).bind(id, normalizedEmail, displayName || null, passwordHash || null, salt || null, ts, ts).run();
125
- return this.findUserById(id);
126
- },
127
-
128
- async updateUserPassword(userId, passwordHash, salt) {
129
- await ensure();
130
- const ts = nowUnix();
131
- await db.prepare(
132
- `UPDATE identity_users SET password_hash = ?, salt = ?, updated_at = ? WHERE id = ?`,
133
- ).bind(passwordHash, salt, ts, userId).run();
134
- },
135
-
136
- async findUserByProvider(provider, providerSubject) {
137
- await ensure();
138
- const row = await db.prepare(
139
- `SELECT u.id, u.email, u.display_name, u.password_hash, u.salt, u.status, u.created_at, u.updated_at
140
- FROM identity_external_accounts ea
141
- JOIN identity_users u ON u.id = ea.user_id
142
- WHERE ea.provider = ? AND ea.provider_subject = ?
143
- LIMIT 1`,
144
- ).bind(provider, providerSubject).first();
145
- return row || null;
146
- },
147
-
148
- async upsertProviderIdentity({ accountId, provider, providerSubject, email }) {
149
- await ensure();
150
- const existing = await db.prepare(
151
- `SELECT id FROM identity_external_accounts WHERE provider = ? AND provider_subject = ? LIMIT 1`,
152
- ).bind(provider, providerSubject).first();
153
- const ts = nowUnix();
154
- if (existing?.id) {
155
- await db.prepare(
156
- `UPDATE identity_external_accounts SET user_id = ?, email = ?, updated_at = ? WHERE id = ?`,
157
- ).bind(accountId, email || null, ts, existing.id).run();
158
- return existing.id;
159
- }
160
- const id = newAccountIdentityId();
161
- await db.prepare(
162
- `INSERT INTO identity_external_accounts (id, user_id, provider, provider_subject, email, created_at, updated_at)
163
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
164
- ).bind(id, accountId, provider, providerSubject, email || null, ts, ts).run();
165
- return id;
166
- },
167
-
168
- async createSession({ userId, email, provider, providerSubject, displayName }) {
169
- await ensure();
170
- const id = newSessionId();
171
- const ts = nowUnix();
172
- const expiresAt = ts + sessionTtlSeconds;
173
- await db.prepare(
174
- `INSERT INTO identity_sessions
175
- (id, user_id, email, provider, provider_subject, display_name, expires_at, created_at, last_active_at)
176
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
177
- ).bind(
178
- id, userId, email || null, provider || 'email', providerSubject || null,
179
- displayName || null, expiresAt, ts, ts,
180
- ).run();
181
- return {
182
- id, user_id: userId, email, provider: provider || 'email',
183
- provider_subject: providerSubject || null, display_name: displayName || null,
184
- expires_at: expiresAt, created_at: ts,
185
- };
186
- },
187
-
188
- async getSession(sessionId) {
189
- await ensure();
190
- const row = await db.prepare(
191
- `SELECT id, user_id, email, provider, provider_subject, display_name, expires_at, revoked_at, created_at, last_active_at
192
- FROM identity_sessions WHERE id = ? LIMIT 1`,
193
- ).bind(sessionId).first();
194
- if (!row || row.revoked_at || row.expires_at <= nowUnix()) return null;
195
- return row;
196
- },
197
-
198
- async revokeSession(sessionId, reason = 'logout') {
199
- await ensure();
200
- const ts = nowUnix();
201
- await db.prepare(
202
- `UPDATE identity_sessions SET revoked_at = ?, last_active_at = ? WHERE id = ? AND revoked_at IS NULL`,
203
- ).bind(ts, ts, sessionId).run();
204
- return { ok: true, reason };
205
- },
206
-
207
- async createOAuthTransaction({ state, provider, codeVerifier, returnTo, appId, ttlSeconds = 600 }) {
208
- await ensure();
209
- if (!appId) {
210
- throw new IdentitySchemaError(
211
- 'OAUTH_TRANSACTION_APP_ID_REQUIRED',
212
- 'OAuth transactions must include app_id — refusing to create orphan auth state',
213
- );
214
- }
215
- const ts = nowUnix();
216
- await db.prepare(
217
- `INSERT INTO identity_oauth_transactions
218
- (state, provider, code_verifier, return_to, app_id, expires_at, created_at, consumed_at)
219
- VALUES (?, ?, ?, ?, ?, ?, ?, NULL)`,
220
- ).bind(state, provider, codeVerifier, returnTo || null, appId, ts + ttlSeconds, ts).run();
221
- },
222
-
223
- /** @deprecated Use createOAuthTransaction */
224
- async saveOAuthState(input) {
225
- return this.createOAuthTransaction({
226
- ...input,
227
- returnTo: input.redirectTo ?? input.returnTo,
228
- appId: input.appId,
229
- });
230
- },
231
-
232
- async consumeOAuthTransaction(state) {
233
- await ensure();
234
- const row = await db.prepare(
235
- `SELECT state, provider, code_verifier, return_to, app_id, expires_at, created_at, consumed_at
236
- FROM identity_oauth_transactions WHERE state = ? LIMIT 1`,
237
- ).bind(state).first();
238
- if (!row) return null;
239
- const ts = nowUnix();
240
- await db.prepare(
241
- `UPDATE identity_oauth_transactions SET consumed_at = ? WHERE state = ?`,
242
- ).bind(ts, state).run();
243
- await db.prepare(`DELETE FROM identity_oauth_transactions WHERE state = ?`).bind(state).run();
244
- if (row.consumed_at) return null;
245
- if (row.expires_at <= ts) return null;
246
- if (!row.app_id) {
247
- throw new IdentitySchemaError(
248
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
249
- 'OAuth transaction missing app_id — refuse silent pre-app_id semantics',
250
- );
251
- }
252
- return {
253
- state: row.state,
254
- provider: row.provider,
255
- code_verifier: row.code_verifier,
256
- redirect_to: row.return_to,
257
- return_to: row.return_to,
258
- app_id: row.app_id,
259
- expires_at: row.expires_at,
260
- created_at: row.created_at,
261
- consumed_at: ts,
262
- };
263
- },
264
-
265
- /** @deprecated Use consumeOAuthTransaction */
266
- async consumeOAuthState(state) {
267
- return this.consumeOAuthTransaction(state);
268
- },
269
-
270
- async logAuthEvent({
271
- userId, accountId, eventType, status = 'ok', provider,
272
- session, capabilities, activity, client, metadata, request,
273
- }) {
274
- try {
275
- await ensure();
276
- const ip = request?.headers?.get?.('cf-connecting-ip') || request?.headers?.get?.('x-forwarded-for') || '';
277
- const ua = request?.headers?.get?.('user-agent') || '';
278
- const [ipHash, uaHash] = await Promise.all([hashValue(ip), hashValue(ua)]);
279
- const envelope = {
280
- ...(metadata && typeof metadata === 'object' ? metadata : {}),
281
- ...(accountId ? { accountId } : {}),
282
- ...(session ? { session } : {}),
283
- ...(capabilities ? { capabilities } : {}),
284
- ...(activity ? { activity } : {}),
285
- ...(client ? { client } : {}),
286
- };
287
- await db.prepare(
288
- `INSERT INTO identity_auth_events
289
- (id, user_id, event_type, status, provider, metadata_json, ip_hash, user_agent_hash, created_at)
290
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
291
- ).bind(
292
- newAuthEventId(), userId || null, eventType, status, provider || null,
293
- JSON.stringify(envelope), ipHash, uaHash, nowUnix(),
294
- ).run();
295
- } catch {
296
- /* never break auth on audit failure */
297
- }
298
- },
299
-
300
- async countAuthActivity(userId) {
301
- await ensure();
302
- if (!userId) return { loginCount: 0, activeSessionCount: 0, lastLoginAt: null };
303
- const logins = await db.prepare(
304
- `SELECT COUNT(*) AS c, MAX(created_at) AS last_at
305
- FROM identity_auth_events
306
- WHERE user_id = ? AND event_type = 'login' AND status = 'ok'`,
307
- ).bind(userId).first();
308
- const sessions = await db.prepare(
309
- `SELECT COUNT(*) AS c FROM identity_sessions
310
- WHERE user_id = ? AND revoked_at IS NULL AND expires_at > ?`,
311
- ).bind(userId, nowUnix()).first();
312
- return {
313
- loginCount: Number(logins?.c || 0),
314
- activeSessionCount: Number(sessions?.c || 0),
315
- lastLoginAt: logins?.last_at != null ? Number(logins.last_at) : null,
316
- };
317
- },
318
- });
22
+ return createPortableIdentityStore(db, { ...options, backend: 'sqlite' });
319
23
  }
@@ -4,12 +4,13 @@
4
4
  * Browser login sessions and reusable API credentials are intentionally
5
5
  * separate: login sessions are opaque, machine-local session state while
6
6
  * AGENTSAM_API_KEY is an explicit delegated account credential.
7
+ *
8
+ * Namespaces (do not collapse):
9
+ * PLATFORM issuer → IAM_OAUTH_ISSUER (account API)
10
+ * APP host → agentsam.app.json hosts[] (e.g. local-studio)
11
+ * Never treat Local Studio host origin as an alias of IAM_OAUTH_ISSUER.
7
12
  */
8
13
 
9
- export const DEFAULT_IAM_OAUTH_ISSUER = 'https://inneranimalmedia.com';
10
- /** @deprecated Use DEFAULT_IAM_OAUTH_ISSUER. */
11
- export const DEFAULT_IAM_ORIGIN = DEFAULT_IAM_OAUTH_ISSUER;
12
-
13
14
  export const AGENTSAM_AUTH_ENV = Object.freeze({
14
15
  iamIssuer: 'IAM_OAUTH_ISSUER',
15
16
  iamOrigin: 'IAM_ORIGIN',
@@ -17,8 +18,22 @@ export const AGENTSAM_AUTH_ENV = Object.freeze({
17
18
  iamClientSecret: 'IAM_CLIENT_SECRET',
18
19
  apiKey: 'AGENTSAM_API_KEY',
19
20
  bridgeKey: 'AGENTSAM_BRIDGE_KEY',
21
+ googleClientId: 'GOOGLE_CLIENT_ID',
22
+ googleClientSecret: 'GOOGLE_CLIENT_SECRET',
23
+ googleDesktopClientId: 'GOOGLE_DESKTOP_CLIENT_ID',
24
+ githubClientId: 'GITHUB_CLIENT_ID',
25
+ githubClientSecret: 'GITHUB_CLIENT_SECRET',
26
+ cloudflareOauthClientId: 'CLOUDFLARE_OAUTH_CLIENT_ID',
27
+ cloudflareOauthClientSecret: 'CLOUDFLARE_OAUTH_CLIENT_SECRET',
20
28
  });
21
29
 
30
+ /**
31
+ * Hosted AgentSam platform compatibility issuer — not an APP host and never a
32
+ * portable Local Studio default. Portable apps use packages/identity locally
33
+ * unless an installation explicitly selects a remote IAM adapter.
34
+ */
35
+ export const PLATFORM_ACCOUNT_ISSUER = 'https://inneranimalmedia.com';
36
+
22
37
  export const AGENTSAM_AUTH_CONTRACT = Object.freeze({
23
38
  version: 2,
24
39
  authority: 'agentsam-sdk',
@@ -27,6 +42,7 @@ export const AGENTSAM_AUTH_CONTRACT = Object.freeze({
27
42
  origin: AGENTSAM_AUTH_ENV.iamOrigin,
28
43
  clientId: AGENTSAM_AUTH_ENV.iamClientId,
29
44
  clientSecret: AGENTSAM_AUTH_ENV.iamClientSecret,
45
+ defaultIssuer: PLATFORM_ACCOUNT_ISSUER,
30
46
  }),
31
47
  apiKey: Object.freeze({
32
48
  env: AGENTSAM_AUTH_ENV.apiKey,
@@ -55,11 +71,14 @@ function normalizeOrigin(value) {
55
71
  return clean(value).replace(/\/+$/, '');
56
72
  }
57
73
 
58
- /** Resolve canonical IAM issuer. IAM_OAUTH_ISSUER wins; IAM_ORIGIN is compatibility only. */
74
+ /**
75
+ * Resolve PLATFORM account issuer.
76
+ * Order: explicit → IAM_OAUTH_ISSUER → IAM_ORIGIN → PLATFORM_ACCOUNT_ISSUER.
77
+ * Does not read APP host origins.
78
+ */
59
79
  export function resolveIamIssuer(env = {}, explicit = '') {
60
- return normalizeOrigin(
61
- explicit || env?.IAM_OAUTH_ISSUER || env?.IAM_ORIGIN || DEFAULT_IAM_OAUTH_ISSUER,
62
- );
80
+ return normalizeOrigin(explicit || env?.IAM_OAUTH_ISSUER || env?.IAM_ORIGIN || '')
81
+ || PLATFORM_ACCOUNT_ISSUER;
63
82
  }
64
83
 
65
84
  /** @deprecated Use resolveIamIssuer. Same resolution order as issuer. */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Portable external identity shape — storage-agnostic.
3
- * Adapters map this into application-specific account_identities rows.
3
+ * Adapters map this into account_identities rows that point at accounts (SSOT).
4
4
  */
5
5
 
6
6
  /** @typedef {import('../provider-contract.js').NormalizedExternalIdentity} NormalizedExternalIdentity */
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * Portable IdentityStore contract.
3
- * Adapters (SQLite, D1, Postgres) implement this — the identity service never
4
- * imports Cloudflare/D1 APIs directly for product logic.
3
+ * Adapters (SQLite, portable D1, IAM-compat) implement this — the identity service
4
+ * never imports Cloudflare/D1 APIs directly for product logic.
5
+ *
6
+ * Company / native handoff / provider-connection behavior belong on this contract
7
+ * (not undocumented adapter-only magic). Password recovery remains a separate
8
+ * storage-agnostic service (createPasswordResetService + injected {get,put,delete});
9
+ * adapters supply user lookup / password update hooks, not a mandatory SQL reset table.
5
10
  */
6
11
 
7
12
  /**
@@ -24,6 +29,7 @@
24
29
  * @property {string|null} [provider]
25
30
  * @property {string|null} [provider_subject]
26
31
  * @property {string|null} [display_name]
32
+ * @property {'browser'|'desktop'} [type]
27
33
  * @property {number} expires_at
28
34
  * @property {number|null} [revoked_at]
29
35
  * @property {number} created_at
@@ -37,6 +43,9 @@
37
43
  * @property {string} code_verifier
38
44
  * @property {string|null} [return_to]
39
45
  * @property {string} app_id
46
+ * @property {'desktop'|string|null} [client_type]
47
+ * @property {string|null} [native_challenge]
48
+ * @property {string|null} [native_redirect]
40
49
  * @property {number} expires_at
41
50
  * @property {number} created_at
42
51
  * @property {number|null} [consumed_at]
@@ -57,6 +66,37 @@
57
66
  * @property {Request} [request]
58
67
  */
59
68
 
69
+ /**
70
+ * @typedef {object} CompanyProfile
71
+ * @property {string} id
72
+ * @property {string} slug
73
+ * @property {string} name
74
+ * @property {string|null} [legalName]
75
+ * @property {string|null} [logoUrl]
76
+ * @property {string|null} [faviconUrl]
77
+ * @property {string|null} [primaryColor]
78
+ * @property {string|null} [authBgColor]
79
+ * @property {string|null} [supportEmail]
80
+ * @property {string|null} [websiteUrl]
81
+ * @property {string|null} [tagline]
82
+ * @property {object} [meta]
83
+ * @property {number} [createdAt]
84
+ * @property {number} [updatedAt]
85
+ */
86
+
87
+ /**
88
+ * @typedef {object} ProviderConnection
89
+ * @property {string} id
90
+ * @property {string} user_id
91
+ * @property {string} provider
92
+ * @property {string[]} granted_scopes
93
+ * @property {string} credential_ref
94
+ * @property {number|null} [expires_at]
95
+ * @property {boolean} [refreshable]
96
+ * @property {number} created_at
97
+ * @property {number} updated_at
98
+ */
99
+
60
100
  /**
61
101
  * @typedef {object} IdentityStore
62
102
  * @property {number} schemaVersion
@@ -66,21 +106,32 @@
66
106
  * @property {(userId: string, passwordHash: string, salt: string) => Promise<void>} updateUserPassword
67
107
  * @property {(provider: string, providerSubject: string) => Promise<IdentityUser|null>} findUserByProvider
68
108
  * @property {(input: { accountId: string, provider: string, providerSubject: string, email?: string|null }) => Promise<string>} upsertProviderIdentity
69
- * @property {(input: { userId: string, email?: string|null, provider?: string, providerSubject?: string|null, displayName?: string|null }) => Promise<IdentitySession>} createSession
109
+ * @property {(input: { userId: string, email?: string|null, provider?: string, providerSubject?: string|null, displayName?: string|null, type?: 'browser'|'desktop' }) => Promise<IdentitySession>} createSession
70
110
  * @property {(sessionId: string) => Promise<IdentitySession|null>} getSession
71
111
  * @property {(sessionId: string, reason?: string) => Promise<{ ok: true, reason: string }>} revokeSession
72
- * @property {(input: { state: string, provider: string, codeVerifier: string, returnTo?: string|null, appId: string, ttlSeconds?: number }) => Promise<void>} createOAuthTransaction
112
+ * @property {(input: { state: string, provider: string, codeVerifier: string, returnTo?: string|null, appId: string, ttlSeconds?: number, clientType?: string, nativeChallenge?: string, nativeRedirect?: string }) => Promise<void>} createOAuthTransaction
73
113
  * @property {(state: string) => Promise<OAuthTransaction|null>} consumeOAuthTransaction
74
114
  * @property {(input: AuthEventInput) => Promise<void>} logAuthEvent
75
115
  * @property {(userId: string) => Promise<{ loginCount: number, activeSessionCount: number, lastLoginAt: number|null }>} [countAuthActivity]
116
+ * @property {(input: { handoffHash: string, sessionId: string, challenge: string, ttlSeconds?: number }) => Promise<void>} createNativeHandoff
117
+ * @property {(handoffHash: string) => Promise<{ session_id: string, challenge: string }|null>} consumeNativeHandoff
118
+ * @property {(slug?: string) => Promise<CompanyProfile|null>} getCompanyBySlug
119
+ * @property {(hostname: string|null|undefined) => Promise<CompanyProfile|null>} getCompanyByHost
120
+ * @property {() => Promise<CompanyProfile|null>} getDefaultCompany
121
+ * @property {(input: object) => Promise<CompanyProfile|null>} upsertCompany
122
+ * @property {(input: { userId: string, provider: string, credentialRef: string, grantedScopes?: string[], expiresAt?: number|null, refreshable?: boolean }) => Promise<string>} upsertProviderConnection
123
+ * @property {(userId: string, provider: string) => Promise<ProviderConnection|null>} getProviderConnection
76
124
  */
77
125
 
78
- export const IDENTITY_STORE_SCHEMA_VERSION = 1;
126
+ /** Portable pack schema_version after 005_identity_company_native. */
127
+ export const IDENTITY_STORE_SCHEMA_VERSION = 2;
79
128
 
80
129
  export const IDENTITY_PACKS = Object.freeze({
81
130
  CORE: 'identity.core',
82
131
  OAUTH_CLIENT: 'identity.oauth-client',
83
132
  OAUTH_SERVER: 'identity.oauth-server',
133
+ /** Optional future — not part of portable core. Recovery stays KV/injected today. */
134
+ RECOVERY: 'identity.recovery',
84
135
  });
85
136
 
86
137
  /**
@@ -3,8 +3,10 @@
3
3
  export const IdentityProviders = Object.freeze([
4
4
  'email',
5
5
  'google',
6
+ 'google_desktop',
6
7
  'github',
7
8
  'gcp',
8
9
  'inneranimalmedia',
9
10
  'cloudflare',
11
+ 'chatgpt',
10
12
  ]);
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Stock sign-in options for OAuth / CMS editor first-run setup.
3
+ * user123 picks from these prepackaged providers when wiring auth.
4
+ */
5
+
6
+ /** @typedef {'oauth' | 'oidc' | 'hosted_headers' | 'local'} StockSignInKind */
7
+
8
+ /**
9
+ * @typedef {object} StockSignInOption
10
+ * @property {string} id
11
+ * @property {string} label
12
+ * @property {string} [shortLabel]
13
+ * @property {StockSignInKind} kind
14
+ * @property {'ready' | 'scaffold'} status
15
+ * @property {string} description
16
+ * @property {string[]} [aliases]
17
+ * @property {string[]} [requiredEnv]
18
+ * @property {string[]} [optionalEnv]
19
+ * @property {string} [implementation]
20
+ * @property {boolean} [cmsDefault]
21
+ */
22
+
23
+ /** @type {readonly StockSignInOption[]} */
24
+ export const STOCK_SIGN_IN_OPTIONS = Object.freeze([
25
+ {
26
+ id: 'cloudflare',
27
+ label: 'Cloudflare',
28
+ shortLabel: 'Cloudflare',
29
+ kind: 'oauth',
30
+ status: 'ready',
31
+ description: 'Sign in with Cloudflare account OAuth (PKCE-capable).',
32
+ requiredEnv: ['CLOUDFLARE_OAUTH_CLIENT_ID'],
33
+ optionalEnv: ['CLOUDFLARE_OAUTH_CLIENT_SECRET'],
34
+ implementation: 'src/providers/cloudflare',
35
+ },
36
+ {
37
+ id: 'google',
38
+ label: 'Google',
39
+ shortLabel: 'Google',
40
+ kind: 'oauth',
41
+ status: 'ready',
42
+ description: 'Sign in with Google (browser OAuth confidential client).',
43
+ requiredEnv: ['GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET'],
44
+ implementation: 'src/providers/google',
45
+ },
46
+ {
47
+ id: 'inneranimalmedia',
48
+ label: 'Inner Animal Media',
49
+ shortLabel: 'IAM',
50
+ kind: 'oidc',
51
+ status: 'ready',
52
+ description: 'Sign in with Inner Animal Media platform identity (OIDC).',
53
+ aliases: ['iam'],
54
+ requiredEnv: ['IAM_CLIENT_ID', 'IAM_CLIENT_SECRET'],
55
+ optionalEnv: ['IAM_OAUTH_ISSUER', 'IAM_ORIGIN'],
56
+ implementation: 'src/providers/iam',
57
+ cmsDefault: true,
58
+ },
59
+ {
60
+ id: 'chatgpt',
61
+ label: 'ChatGPT',
62
+ shortLabel: 'ChatGPT',
63
+ kind: 'hosted_headers',
64
+ status: 'ready',
65
+ description:
66
+ 'Sign in via ChatGPT / OpenAI Apps SDK hosted identity (oai-authenticated headers → NormalizedExternalIdentity).',
67
+ aliases: ['openai', 'chatgpt-hosted'],
68
+ requiredEnv: [],
69
+ implementation: 'src/providers/chatgpt',
70
+ },
71
+ ]);
72
+
73
+ /** Canonical ids offered on CMS / OAuth prebuild pickers. */
74
+ export const CMS_STOCK_SIGN_IN_IDS = Object.freeze(
75
+ STOCK_SIGN_IN_OPTIONS.map((row) => row.id),
76
+ );
77
+
78
+ /**
79
+ * @param {string} id
80
+ * @returns {StockSignInOption | null}
81
+ */
82
+ export function getStockSignInOption(id) {
83
+ const key = String(id || '')
84
+ .trim()
85
+ .toLowerCase()
86
+ .replace(/-/g, '_');
87
+ if (!key) return null;
88
+ if (key === 'iam') {
89
+ return STOCK_SIGN_IN_OPTIONS.find((row) => row.id === 'inneranimalmedia') || null;
90
+ }
91
+ if (key === 'openai' || key === 'chatgpt_hosted') {
92
+ return STOCK_SIGN_IN_OPTIONS.find((row) => row.id === 'chatgpt') || null;
93
+ }
94
+ return (
95
+ STOCK_SIGN_IN_OPTIONS.find((row) => row.id === key) ||
96
+ STOCK_SIGN_IN_OPTIONS.find((row) => (row.aliases || []).includes(String(id || '').trim().toLowerCase())) ||
97
+ null
98
+ );
99
+ }
100
+
101
+ /** @returns {StockSignInOption[]} */
102
+ export function listStockSignInOptions() {
103
+ return [...STOCK_SIGN_IN_OPTIONS];
104
+ }
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { SESSION_POLICY } from './session-policy.js';
8
8
 
9
- export { SESSION_POLICY, clampAgentSessionTtl } from './session-policy.js';
9
+ export { SESSION_POLICY, clampAgentSessionTtl, shouldRenewDesktopSession } from './session-policy.js';
10
10
 
11
11
  export const AUTH_COOKIE_NAME = 'session';
12
12