@inneranimalmedia/agentsam-sdk 2.6.5 → 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 (371) hide show
  1. package/AGENTSAM.md +29 -0
  2. package/apps/README.md +5 -0
  3. package/apps/cad-creator/README.md +4 -4
  4. package/apps/cad-creator/shared/cad/package.json +1 -1
  5. package/apps/client-cms-editor/AGENTS.md +12 -7
  6. package/apps/client-cms-editor/README.md +76 -48
  7. package/apps/client-cms-editor/agentsam.app.json +26 -9
  8. package/apps/client-cms-editor/backend/package.json +20 -3
  9. package/apps/client-cms-editor/backend/src/api/client.ts +134 -101
  10. package/apps/client-cms-editor/backend/src/index.ts +1 -1
  11. package/apps/client-cms-editor/backend/src/model.ts +11 -115
  12. package/apps/client-cms-editor/backend/src/preview/bridge.ts +1 -1
  13. package/apps/client-cms-editor/backend/tsconfig.json +6 -1
  14. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  15. package/apps/client-cms-editor/bin/agentsam-cms.mjs +2 -228
  16. package/apps/client-cms-editor/frontend/package.json +16 -7
  17. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +9 -41
  18. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +19 -174
  19. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  20. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  21. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  22. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  23. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  24. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  25. package/apps/client-cms-editor/frontend/src/{CmsEditor.tsx → editor/legacy/CmsEditorPrototype.tsx} +52 -23
  26. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  27. package/apps/client-cms-editor/frontend/src/index.ts +19 -5
  28. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  29. package/apps/client-cms-editor/frontend/src/main.tsx +82 -8
  30. package/apps/client-cms-editor/frontend/src/mount.tsx +92 -30
  31. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +1 -1
  32. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +8 -8
  33. package/apps/client-cms-editor/frontend/src/styles/studio.css +55 -3
  34. package/apps/client-cms-editor/frontend/tsconfig.json +12 -1
  35. package/apps/client-cms-editor/frontend/vite.config.ts +12 -0
  36. package/apps/client-cms-editor/package-lock.json +973 -134
  37. package/apps/client-cms-editor/package.json +118 -6
  38. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  39. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  40. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  41. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  42. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  43. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  44. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  45. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  46. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  47. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  48. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  49. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  50. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  51. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  52. package/apps/client-cms-editor/shared/cms/package.json +17 -7
  53. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  54. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +7 -5
  55. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +32 -0
  56. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  57. package/apps/client-cms-editor/shared/cms/src/index.ts +4 -0
  58. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  59. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  60. package/contracts/source-types.v1.json +353 -0
  61. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  62. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  63. package/docs/THEME_REFINERY.md +2 -2
  64. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +40 -20
  65. package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
  66. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  67. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  68. package/native/agentsam-machine/Cargo.lock +426 -0
  69. package/native/agentsam-machine/Cargo.toml +9 -0
  70. package/native/agentsam-machine/cli/Cargo.toml +14 -0
  71. package/native/agentsam-machine/cli/src/main.rs +77 -0
  72. package/native/agentsam-machine/core/Cargo.toml +15 -0
  73. package/native/agentsam-machine/core/src/assets.rs +790 -0
  74. package/native/agentsam-machine/core/src/bound.rs +298 -0
  75. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  76. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  77. package/native/agentsam-machine/core/src/lib.rs +1086 -0
  78. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  79. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  80. package/package.json +51 -21
  81. package/packages/agentsam-brand/README.md +1 -1
  82. package/packages/agentsam-brand/package.json +4 -4
  83. package/packages/agentsam-brand/src/index.js +1 -1
  84. package/packages/agentsam-contracts/package.json +13 -3
  85. package/packages/agentsam-contracts/src/tools.ts +22 -0
  86. package/packages/agentsam-errors/package.json +13 -3
  87. package/packages/agentsam-knowledge/package.json +18 -4
  88. package/packages/agentsam-knowledge/src/autorag/index.js +10 -3
  89. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  90. package/packages/agentsam-knowledge/test/autorag.test.mjs +60 -1
  91. package/packages/agentsam-nav/package.json +24 -6
  92. package/packages/agentsam-queue-control/README.md +1 -1
  93. package/packages/agentsam-queue-control/package.json +7 -2
  94. package/packages/agentsam-rapid-rust/src/main.rs +1 -1
  95. package/packages/agentsam-repository/package.json +13 -3
  96. package/packages/agentsam-repository/src/source-types.js +8 -0
  97. package/packages/agentsam-vault/package.json +14 -4
  98. package/packages/agentsam-workbench/package.json +15 -4
  99. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  100. package/packages/agentsam-workbench/src/agent/index.ts +2 -0
  101. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  102. package/packages/connectors/cloudflare/package.json +13 -3
  103. package/packages/connectors/cloudflare/src/api-client.js +3 -2
  104. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  105. package/packages/connectors/cloudflare/src/index.js +1 -0
  106. package/packages/heuristic-theme/README.md +2 -2
  107. package/packages/heuristic-theme/package.json +8 -3
  108. package/packages/heuristic-theme/src/registry.js +2 -2
  109. package/packages/heuristic-theme/src/theme.js +1 -1
  110. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  111. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  112. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +27 -7
  113. package/packages/identity/README.md +2 -2
  114. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -15
  115. package/packages/identity/migrations/apply-portable.js +109 -0
  116. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +1 -1
  117. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  118. package/packages/identity/package.json +27 -6
  119. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  120. package/packages/identity/scripts/local-identity-bridge.mjs +13 -7
  121. package/packages/identity/scripts/preview-auth-portal.mjs +6 -6
  122. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -401
  123. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  124. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  125. package/packages/identity/src/adapters/portable-store.js +479 -0
  126. package/packages/identity/src/adapters/sqlite/index.js +13 -312
  127. package/packages/identity/src/contracts/auth-config.js +0 -1
  128. package/packages/identity/src/contracts/identity-store.js +56 -5
  129. package/packages/identity/src/contracts/provider.js +1 -0
  130. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  131. package/packages/identity/src/core/constants.js +1 -1
  132. package/packages/identity/src/core/session-policy.js +31 -0
  133. package/packages/identity/src/frontend/auth-portal/pages/login.html +6 -6
  134. package/packages/identity/src/frontend/auth-portal/pages/reset.html +5 -5
  135. package/packages/identity/src/frontend/auth-portal/pages/signup.html +5 -5
  136. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  137. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +6 -37
  138. package/packages/identity/src/index.js +28 -1
  139. package/packages/identity/src/migrations/README.md +23 -23
  140. package/packages/identity/src/oauth/README.md +1 -1
  141. package/packages/identity/src/oauth/credentials.js +10 -11
  142. package/packages/identity/src/oauth/google-desktop-exchange.js +195 -27
  143. package/packages/identity/src/oauth/iam-platform.js +21 -9
  144. package/packages/identity/src/oauth/native-handoff.js +136 -0
  145. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  146. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  147. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  148. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  149. package/packages/identity/src/providers/github/oauth.js +1 -2
  150. package/packages/identity/src/providers/github/profile.js +16 -2
  151. package/packages/identity/src/providers/index.js +11 -3
  152. package/packages/identity/src/server/identity-service.js +2 -1
  153. package/packages/identity/src/server/worker-router.js +71 -18
  154. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  155. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  156. package/packages/identity/tests/identity-init-scaffold.test.mjs +15 -4
  157. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  158. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  159. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  160. package/packages/identity/tests/oauth-credentials.test.mjs +4 -4
  161. package/packages/identity/tests/preview-auth-portal.test.mjs +4 -2
  162. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  163. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  164. package/packages/providers/completeful/package.json +7 -2
  165. package/packages/theme-church-site/package.json +17 -6
  166. package/packages/theme-church-site/src/harvest.json +4 -2
  167. package/packages/theme-church-site/src/index.js +7 -3
  168. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  169. package/packages/theme-companions-site/package.json +17 -6
  170. package/packages/theme-companions-site/src/harvest.json +4 -2
  171. package/packages/theme-companions-site/src/index.js +7 -3
  172. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  173. package/packages/theme-floors-site/package.json +17 -6
  174. package/packages/theme-floors-site/src/harvest.json +4 -2
  175. package/packages/theme-floors-site/src/index.js +7 -3
  176. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  177. package/packages/theme-fuelnfree-site/package.json +17 -6
  178. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  179. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  180. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  181. package/packages/theme-handyman-site/package.json +17 -6
  182. package/packages/theme-handyman-site/src/harvest.json +4 -2
  183. package/packages/theme-handyman-site/src/index.js +7 -3
  184. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  185. package/packages/theme-insurance-site/package.json +17 -6
  186. package/packages/theme-insurance-site/src/harvest.json +4 -2
  187. package/packages/theme-insurance-site/src/index.js +7 -3
  188. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  189. package/packages/theme-scenes/README.md +1 -1
  190. package/packages/theme-scenes/package.json +4 -3
  191. package/packages/theme-scenes/src/registry.js +187 -0
  192. package/packages/theme-shinshu-site/package.json +17 -6
  193. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  194. package/packages/theme-shinshu-site/src/index.js +7 -3
  195. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  196. package/packages/work-graph/package.json +14 -4
  197. package/protocol/FILEMETA_V1.md +2 -2
  198. package/protocol/capabilities/manifest.json +1 -1
  199. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  200. package/protocol/presets/catalog.json +2 -2
  201. package/protocol/theme-refinery/lineage-registry.json +105 -0
  202. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  203. package/skills/grok-auth/SKILL.md +110 -0
  204. package/skills/grok-auth/agentsam.skill.json +25 -0
  205. package/skills/grok-auth/references/grok-identity.md +64 -0
  206. package/skills/grok-auth/references/per-user-data.md +49 -0
  207. package/skills/grok-auth/references/prewired-and-env.md +54 -0
  208. package/skills/grok-auth/references/session-ui.md +133 -0
  209. package/skills/grok-auth/references/sign-in-methods.md +55 -0
  210. package/skills/grok-auth/references/wiring.md +71 -0
  211. package/skills/grok-building-games/SKILL.md +213 -0
  212. package/skills/grok-building-games/agentsam.skill.json +25 -0
  213. package/skills/grok-building-games/references/3d-libs.md +64 -0
  214. package/skills/grok-building-games/references/ai-pathfinding.md +122 -0
  215. package/skills/grok-building-games/references/audio.md +129 -0
  216. package/skills/grok-building-games/references/babylon.md +202 -0
  217. package/skills/grok-building-games/references/collision-physics.md +122 -0
  218. package/skills/grok-building-games/references/ecs-architecture.md +111 -0
  219. package/skills/grok-building-games/references/game-feel-juice.md +110 -0
  220. package/skills/grok-building-games/references/genres/board-card-chess.md +89 -0
  221. package/skills/grok-building-games/references/genres/endless-runner.md +83 -0
  222. package/skills/grok-building-games/references/genres/fps.md +105 -0
  223. package/skills/grok-building-games/references/genres/platformer-2d.md +97 -0
  224. package/skills/grok-building-games/references/genres/puzzle-match3-tetris.md +131 -0
  225. package/skills/grok-building-games/references/genres/racing-kart.md +106 -0
  226. package/skills/grok-building-games/references/genres/topdown-twin-stick.md +97 -0
  227. package/skills/grok-building-games/references/genres/tower-defense.md +84 -0
  228. package/skills/grok-building-games/references/genres/voxel-minecraft.md +89 -0
  229. package/skills/grok-building-games/references/input.md +139 -0
  230. package/skills/grok-building-games/references/phaser.md +277 -0
  231. package/skills/grok-building-games/references/procedural-generation.md +141 -0
  232. package/skills/grok-building-games/references/save-persistence.md +108 -0
  233. package/skills/grok-building-games/references/threejs-foundational.md +148 -0
  234. package/skills/grok-controls/SKILL.md +274 -0
  235. package/skills/grok-controls/agentsam.skill.json +25 -0
  236. package/skills/grok-design-ui/SKILL.md +122 -0
  237. package/skills/grok-design-ui/agentsam.skill.json +25 -0
  238. package/skills/grok-design-ui/references/animations.md +379 -0
  239. package/skills/grok-design-ui/references/performance.md +88 -0
  240. package/skills/grok-design-ui/references/refined-ui.md +384 -0
  241. package/skills/grok-design-ui/references/surfaces.md +247 -0
  242. package/skills/grok-design-ui/references/typography.md +123 -0
  243. package/skills/grok-game-animation-frames/SKILL.md +84 -0
  244. package/skills/grok-game-animation-frames/agentsam.skill.json +25 -0
  245. package/skills/grok-game-asset-core/SKILL.md +69 -0
  246. package/skills/grok-game-asset-core/agentsam.skill.json +25 -0
  247. package/skills/grok-game-character-consistency/SKILL.md +69 -0
  248. package/skills/grok-game-character-consistency/agentsam.skill.json +25 -0
  249. package/skills/grok-game-tilesets/SKILL.md +65 -0
  250. package/skills/grok-game-tilesets/agentsam.skill.json +25 -0
  251. package/skills/grok-game-ui-icons/SKILL.md +56 -0
  252. package/skills/grok-game-ui-icons/agentsam.skill.json +25 -0
  253. package/skills/grok-generate2dmap/LICENSE +21 -0
  254. package/skills/grok-generate2dmap/SKILL.md +120 -0
  255. package/skills/grok-generate2dmap/SOURCE.md +6 -0
  256. package/skills/grok-generate2dmap/agentsam.skill.json +25 -0
  257. package/skills/grok-generate2dmap/references/deliverables.md +101 -0
  258. package/skills/grok-generate2dmap/references/layered-map-contract.md +209 -0
  259. package/skills/grok-generate2dmap/references/map-strategies.md +341 -0
  260. package/skills/grok-generate2dmap/references/object-production-gate.md +24 -0
  261. package/skills/grok-generate2dmap/references/pipeline.md +149 -0
  262. package/skills/grok-generate2dmap/references/prop-pack-contract.md +174 -0
  263. package/skills/grok-generate2dmap/references/side-scroll-stages.md +29 -0
  264. package/skills/grok-generate2dmap/scripts/compose_layered_preview.py +157 -0
  265. package/skills/grok-generate2dmap/scripts/extract_prop_pack.py +369 -0
  266. package/skills/grok-generate2dsprite/LICENSE +21 -0
  267. package/skills/grok-generate2dsprite/SKILL.md +313 -0
  268. package/skills/grok-generate2dsprite/SOURCE.md +6 -0
  269. package/skills/grok-generate2dsprite/agentsam.skill.json +25 -0
  270. package/skills/grok-generate2dsprite/references/modes.md +124 -0
  271. package/skills/grok-generate2dsprite/references/prompt-rules.md +315 -0
  272. package/skills/grok-generate2dsprite/scripts/generate2dsprite.py +1031 -0
  273. package/skills/grok-generate2dsprite/scripts/make_layout_guide.py +109 -0
  274. package/skills/grok-imagine/SKILL.md +201 -0
  275. package/skills/grok-imagine/agentsam.skill.json +25 -0
  276. package/skills/grok-multiplayer-p2p/SKILL.md +111 -0
  277. package/skills/grok-multiplayer-p2p/agentsam.skill.json +25 -0
  278. package/skills/grok-multiplayer-p2p/references/react-binding.md +144 -0
  279. package/skills/grok-multiplayer-p2p/references/signaling-relay.md +269 -0
  280. package/skills/grok-neon/SKILL.md +157 -0
  281. package/skills/grok-neon/agentsam.skill.json +25 -0
  282. package/skills/grok-og/SKILL.md +102 -0
  283. package/skills/grok-og/agentsam.skill.json +25 -0
  284. package/skills/grok-og/references/brand-pass.md +53 -0
  285. package/skills/grok-og/references/custom-card.md +107 -0
  286. package/skills/grok-og/references/favicon-and-icons.md +48 -0
  287. package/skills/grok-og/references/og-type-contract.md +18 -0
  288. package/skills/grok-og/references/placeholder-card.md +21 -0
  289. package/skills/grok-og/references/x-banner.md +41 -0
  290. package/skills/grok-threejs/SKILL.md +67 -0
  291. package/skills/grok-threejs/agentsam.skill.json +25 -0
  292. package/skills/grok-threejs/references/llms-full.txt +2780 -0
  293. package/skills/grok-video2dsprite/LICENSE +21 -0
  294. package/skills/grok-video2dsprite/SKILL.md +236 -0
  295. package/skills/grok-video2dsprite/SOURCE.md +6 -0
  296. package/skills/grok-video2dsprite/agentsam.skill.json +25 -0
  297. package/skills/grok-video2dsprite/references/pipeline.md +90 -0
  298. package/skills/grok-video2dsprite/references/prompt-rules.md +63 -0
  299. package/skills/grok-video2dsprite/scripts/video2dsprite.py +490 -0
  300. package/skills/grok-xai-api/SKILL.md +152 -0
  301. package/skills/grok-xai-api/agentsam.skill.json +25 -0
  302. package/src/cli/command-catalog.js +46 -4
  303. package/src/cli/dispatch.js +1 -0
  304. package/src/cli.js +10 -0
  305. package/src/cloudflare/runtime-status.js +2 -1
  306. package/src/commands/autorag.js +67 -13
  307. package/src/commands/cheat-sheet.js +29 -4
  308. package/src/commands/codebaseindex.js +45 -2
  309. package/src/commands/knowledge.js +59 -2
  310. package/src/commands/machine-binary.js +103 -0
  311. package/src/commands/machine.js +137 -0
  312. package/src/commands/security.js +67 -4
  313. package/src/commands/setup.js +33 -16
  314. package/src/commands/status.js +8 -1
  315. package/src/features/resolve.js +1 -0
  316. package/src/knowledge/engine.js +21 -2
  317. package/src/knowledge/runtime-discovery.js +127 -0
  318. package/src/lib/identity-scaffold.js +53 -13
  319. package/src/lib/setup/recipes.js +1 -1
  320. package/src/models/discovery.js +40 -22
  321. package/src/models/inventory-core.d.ts +105 -0
  322. package/src/models/inventory-core.js +54 -6
  323. package/src/security/logs.js +3 -0
  324. package/src/ui/cli/help.js +41 -0
  325. package/test/apps-scaffold-contract.test.mjs +3 -2
  326. package/test/cli/api-key-env-whoami.test.mjs +2 -2
  327. package/test/cli/catalog-authority.test.mjs +64 -0
  328. package/test/cli/machine-command.test.mjs +34 -0
  329. package/test/fixtures/project-authority/customer-app/.agentsam/app.json +5 -0
  330. package/test/fixtures/project-authority/customer-app/apps/my-product/index.ts +1 -0
  331. package/test/fixtures/project-authority/customer-app/wrangler.toml +17 -0
  332. package/test/integration/autorag-project-authority.integration.test.mjs +51 -0
  333. package/test/integration/autorag-runtime-discovery.test.mjs +107 -0
  334. package/test/integration/cms-app-scaffold.test.mjs +37 -31
  335. package/test/integration/cms-site-tenancy-contract.test.mjs +28 -17
  336. package/test/integration/codebaseindex-ingest.test.mjs +41 -0
  337. package/test/integration/database-hosted-honesty.test.mjs +49 -0
  338. package/test/integration/desktop-keychain-boundary.test.mjs +45 -0
  339. package/test/integration/hosted-work-host-authority.test.mjs +47 -0
  340. package/test/integration/inventory-eligibility.test.mjs +59 -0
  341. package/test/integration/local-provider-bridge.test.mjs +65 -0
  342. package/test/integration/local-studio-settings-production.test.mjs +40 -0
  343. package/test/integration/lockfile-sync.test.mjs +26 -0
  344. package/test/integration/provider-env-cli.test.mjs +13 -3
  345. package/test/integration/runtime-status.integration.test.mjs +16 -1
  346. package/test/integration/theme-package-registry.test.mjs +31 -0
  347. package/test/repository-snapshot-view.test.mjs +2 -2
  348. package/test/security.test.mjs +14 -0
  349. package/test/terminal-machine-identity.test.mjs +2 -2
  350. package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +0 -145
  351. package/packages/agentsam-nav/dist/Nav.d.ts +0 -43
  352. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +0 -10
  353. package/packages/agentsam-nav/dist/NavContent.d.ts +0 -2
  354. package/packages/agentsam-nav/dist/NavFooter.d.ts +0 -2
  355. package/packages/agentsam-nav/dist/NavGroup.d.ts +0 -3
  356. package/packages/agentsam-nav/dist/NavHeader.d.ts +0 -2
  357. package/packages/agentsam-nav/dist/NavMenu.d.ts +0 -22
  358. package/packages/agentsam-nav/dist/NavProvider.d.ts +0 -35
  359. package/packages/agentsam-nav/dist/NavTrigger.d.ts +0 -2
  360. package/packages/agentsam-nav/dist/Surfaces.d.ts +0 -41
  361. package/packages/agentsam-nav/dist/browser.d.ts +0 -11
  362. package/packages/agentsam-nav/dist/browser.global.js +0 -132
  363. package/packages/agentsam-nav/dist/browser.js +0 -613
  364. package/packages/agentsam-nav/dist/contracts.d.ts +0 -76
  365. package/packages/agentsam-nav/dist/index.d.ts +0 -11
  366. package/packages/agentsam-nav/dist/index.js +0 -614
  367. package/packages/agentsam-nav/dist/legacy.css +0 -83
  368. package/packages/agentsam-nav/dist/shell.css +0 -113
  369. package/packages/agentsam-nav/dist/theme.css +0 -113
  370. package/packages/agentsam-nav/dist/utils.d.ts +0 -1
  371. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +0 -670
@@ -1,403 +1,10 @@
1
- import { SESSION_POLICY } from '../../core/constants.js';
2
- import { IdentitySchemaError } from '../../contracts/identity-store.js';
3
- import { IDENTITY_STORE_SCHEMA_VERSION } from '../../contracts/identity-store.js';
4
- import { newAccountIdentityId, newAuthUserId, newSessionId, newAuthEventId, nowUnix } from './ids.js';
5
- import { DEFAULT_COMPANY_ID, DEFAULT_COMPANY_SLUG, normalizeCompanyRow } from '../../contracts/company.js';
6
-
7
-
8
1
  /**
9
- * @typedef {object} D1Database
10
- * @property {(sql: string) => { bind: (...args: unknown[]) => { first: () => Promise<unknown>, run: () => Promise<unknown>, all: () => Promise<{ results?: unknown[] }> } }} prepare
2
+ * Stable compatibility export path.
3
+ * createCloudflareD1Adapter remains IAM-compat behavior
4
+ * (accounts, auth_users, auth_sessions, company, ...).
5
+ * Do NOT repoint this path at portable identity_* tables.
11
6
  */
12
-
13
- /**
14
- * Portable Cloudflare D1 adapter for customer identity tables.
15
- * @param {D1Database} db
16
- * @param {{ sessionTtlSeconds?: number }} [options]
17
- */
18
- async function hashValue(value) {
19
- const v = String(value || '').trim();
20
- if (!v) return null;
21
- const bytes = new TextEncoder().encode(v);
22
- const digest = await crypto.subtle.digest('SHA-256', bytes);
23
- return Array.from(new Uint8Array(digest)).map((b) => b.toString(16).padStart(2, '0')).join('');
24
- }
25
-
26
- export function createCloudflareD1Adapter(db, options = {}) {
27
- if (!db?.prepare) {
28
- throw new Error('cloudflare_d1_adapter_requires_db_binding');
29
- }
30
- const sessionTtlSeconds = options.sessionTtlSeconds ?? SESSION_POLICY.browser.ttlSeconds;
31
-
32
- return Object.freeze({
33
- schemaVersion: IDENTITY_STORE_SCHEMA_VERSION,
34
- sessionTtlSeconds,
35
- backend: 'cloudflare-d1',
36
-
37
- /**
38
- * Append-only login/logout/failed-attempt audit trail (auth_event_log).
39
- * Never throws — an observability write must not break a real auth flow.
40
- * status remains the event outcome only ('ok' | 'failed').
41
- * Richer context (session, capabilities, activity, client) goes in metadata_json.
42
- * ip/userAgent are hashed (SHA-256) — raw values are never persisted.
43
- */
44
- async logAuthEvent({
45
- userId,
46
- accountId,
47
- eventType,
48
- status = 'ok',
49
- provider,
50
- session,
51
- capabilities,
52
- activity,
53
- client,
54
- metadata,
55
- request,
56
- }) {
57
- try {
58
- const ip = request?.headers?.get?.('cf-connecting-ip') || request?.headers?.get?.('x-forwarded-for') || '';
59
- const ua = request?.headers?.get?.('user-agent') || '';
60
- const [ipHash, uaHash] = await Promise.all([hashValue(ip), hashValue(ua)]);
61
- const envelope = {
62
- ...(metadata && typeof metadata === 'object' ? metadata : {}),
63
- ...(accountId ? { accountId } : {}),
64
- ...(session ? { session } : {}),
65
- ...(capabilities ? { capabilities } : {}),
66
- ...(activity ? { activity } : {}),
67
- ...(client ? { client } : {}),
68
- };
69
- await db.prepare(
70
- `INSERT INTO auth_event_log
71
- (id, user_id, event_type, status, provider, metadata_json, ip_hash, user_agent_hash)
72
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
73
- ).bind(
74
- newAuthEventId(),
75
- userId || null,
76
- eventType,
77
- status,
78
- provider || null,
79
- JSON.stringify(envelope),
80
- ipHash,
81
- uaHash,
82
- ).run();
83
- } catch {
84
- // Never let audit logging break a real login/OAuth flow.
85
- }
86
- },
87
-
88
- /**
89
- * Account/session activity snapshot for auth receipts (not event outcome).
90
- * @param {string} userId
91
- */
92
- async countAuthActivity(userId) {
93
- if (!userId) {
94
- return { loginCount: 0, activeSessionCount: 0, lastLoginAt: null };
95
- }
96
- try {
97
- const logins = await db.prepare(
98
- `SELECT COUNT(*) AS c, MAX(created_at) AS last_at
99
- FROM auth_event_log
100
- WHERE user_id = ? AND event_type = 'login' AND status = 'ok'`,
101
- ).bind(userId).first();
102
- const sessions = await db.prepare(
103
- `SELECT COUNT(*) AS c FROM auth_sessions
104
- WHERE user_id = ? AND revoked_at IS NULL AND expires_at > ?`,
105
- ).bind(userId, nowUnix()).first();
106
- return {
107
- loginCount: Number(logins?.c || 0),
108
- activeSessionCount: Number(sessions?.c || 0),
109
- lastLoginAt: logins?.last_at != null ? Number(logins.last_at) : null,
110
- };
111
- } catch {
112
- return { loginCount: 0, activeSessionCount: 0, lastLoginAt: null };
113
- }
114
- },
115
-
116
- async findUserByEmail(email) {
117
- const row = await db.prepare(
118
- `SELECT id, email, display_name, password_hash, salt, status, created_at, updated_at
119
- FROM auth_users WHERE email = ? COLLATE NOCASE LIMIT 1`,
120
- ).bind(String(email || '').trim().toLowerCase()).first();
121
- return row || null;
122
- },
123
-
124
- async findUserById(userId) {
125
- const row = await db.prepare(
126
- `SELECT id, email, display_name, password_hash, salt, status, created_at, updated_at
127
- FROM auth_users WHERE id = ? LIMIT 1`,
128
- ).bind(userId).first();
129
- return row || null;
130
- },
131
-
132
- async createUser({ email, passwordHash, salt, displayName }) {
133
- const id = newAuthUserId();
134
- const ts = nowUnix();
135
- const normalizedEmail = String(email || '').trim().toLowerCase();
136
- // accounts = SSOT; auth_users = login principal (1:1 id in portable scaffold).
137
- await db.prepare(
138
- `INSERT INTO accounts (id, email, display_name, status, created_at, updated_at)
139
- VALUES (?, ?, ?, 'active', ?, ?)`,
140
- ).bind(id, normalizedEmail, displayName || null, ts, ts).run();
141
- await db.prepare(
142
- `INSERT INTO auth_users (id, email, display_name, password_hash, salt, status, created_at, updated_at)
143
- VALUES (?, ?, ?, ?, ?, 'active', ?, ?)`,
144
- ).bind(id, normalizedEmail, displayName || null, passwordHash || null, salt || null, ts, ts).run();
145
- return this.findUserById(id);
146
- },
147
-
148
- async updateUserPassword(userId, passwordHash, salt) {
149
- const ts = nowUnix();
150
- await db.prepare(
151
- `UPDATE auth_users SET password_hash = ?, salt = ?, updated_at = ? WHERE id = ?`,
152
- ).bind(passwordHash, salt, ts, userId).run();
153
- await db.prepare(
154
- `UPDATE accounts SET updated_at = ? WHERE id = ?`,
155
- ).bind(ts, userId).run().catch(() => {});
156
- },
157
-
158
- async findUserByProvider(provider, providerSubject) {
159
- const row = await db.prepare(
160
- `SELECT u.id, u.email, u.display_name, u.password_hash, u.salt, u.status, u.created_at, u.updated_at
161
- FROM account_identities ai
162
- JOIN accounts a ON a.id = ai.account_id
163
- JOIN auth_users u ON u.id = a.id
164
- WHERE ai.provider = ? AND ai.provider_subject = ?
165
- AND COALESCE(a.status, 'active') = 'active'
166
- LIMIT 1`,
167
- ).bind(provider, providerSubject).first();
168
- return row || null;
169
- },
170
-
171
- async upsertProviderIdentity({ accountId, provider, providerSubject, email }) {
172
- // Ensure SSOT account row exists (OAuth may create identity before password user).
173
- const ts = nowUnix();
174
- const account = await db.prepare(
175
- `SELECT id FROM accounts WHERE id = ? LIMIT 1`,
176
- ).bind(accountId).first();
177
- if (!account?.id) {
178
- const authUser = await this.findUserById(accountId);
179
- if (!authUser) throw new Error('account_ssot_missing');
180
- await db.prepare(
181
- `INSERT INTO accounts (id, email, display_name, status, created_at, updated_at)
182
- VALUES (?, ?, ?, 'active', ?, ?)`,
183
- ).bind(
184
- accountId,
185
- authUser.email,
186
- authUser.display_name || null,
187
- authUser.created_at || ts,
188
- ts,
189
- ).run();
190
- }
191
-
192
- const existing = await db.prepare(
193
- `SELECT id FROM account_identities WHERE provider = ? AND provider_subject = ? LIMIT 1`,
194
- ).bind(provider, providerSubject).first();
195
- if (existing?.id) {
196
- await db.prepare(
197
- `UPDATE account_identities SET account_id = ?, email = ?, updated_at = ? WHERE id = ?`,
198
- ).bind(accountId, email || null, ts, existing.id).run();
199
- return existing.id;
200
- }
201
- const id = newAccountIdentityId();
202
- await db.prepare(
203
- `INSERT INTO account_identities (id, account_id, provider, provider_subject, email, created_at, updated_at)
204
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
205
- ).bind(id, accountId, provider, providerSubject, email || null, ts, ts).run();
206
- return id;
207
- },
208
-
209
- async createSession({ userId, email, provider, providerSubject, displayName }) {
210
- const id = newSessionId();
211
- const ts = nowUnix();
212
- const expiresAt = ts + sessionTtlSeconds;
213
- await db.prepare(
214
- `INSERT INTO auth_sessions
215
- (id, user_id, email, provider, provider_subject, display_name, expires_at, created_at, last_active_at)
216
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
217
- ).bind(
218
- id,
219
- userId,
220
- email || null,
221
- provider || 'email',
222
- providerSubject || null,
223
- displayName || null,
224
- expiresAt,
225
- ts,
226
- ts,
227
- ).run();
228
- return {
229
- id,
230
- user_id: userId,
231
- email,
232
- provider: provider || 'email',
233
- provider_subject: providerSubject || null,
234
- display_name: displayName || null,
235
- expires_at: expiresAt,
236
- created_at: ts,
237
- };
238
- },
239
-
240
- async getSession(sessionId) {
241
- const row = await db.prepare(
242
- `SELECT id, user_id, email, provider, provider_subject, display_name, expires_at, revoked_at, created_at, last_active_at
243
- FROM auth_sessions WHERE id = ? LIMIT 1`,
244
- ).bind(sessionId).first();
245
- if (!row) return null;
246
- if (row.revoked_at) return null;
247
- if (row.expires_at <= nowUnix()) return null;
248
- return row;
249
- },
250
-
251
- async revokeSession(sessionId, reason = 'logout') {
252
- const ts = nowUnix();
253
- await db.prepare(
254
- `UPDATE auth_sessions SET revoked_at = ?, last_active_at = ? WHERE id = ? AND revoked_at IS NULL`,
255
- ).bind(ts, ts, sessionId).run();
256
- return { ok: true, reason };
257
- },
258
-
259
- async createOAuthTransaction({ state, provider, codeVerifier, returnTo, redirectTo, appId, ttlSeconds = 600 }) {
260
- if (!appId) {
261
- throw new IdentitySchemaError(
262
- 'OAUTH_TRANSACTION_APP_ID_REQUIRED',
263
- 'OAuth transactions must include app_id',
264
- );
265
- }
266
- const ts = nowUnix();
267
- const expiresAt = ts + ttlSeconds;
268
- try {
269
- await db.prepare(
270
- `INSERT INTO identity_oauth_states
271
- (state, provider, code_verifier, redirect_to, app_id, expires_at, created_at)
272
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
273
- ).bind(state, provider, codeVerifier, returnTo ?? redirectTo ?? null, appId, expiresAt, ts).run();
274
- } catch (err) {
275
- throw new IdentitySchemaError(
276
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
277
- 'identity_oauth_states.app_id required — apply migration 0015 (no silent pre-app_id fallback)',
278
- { cause: String(err?.message || err) },
279
- );
280
- }
281
- },
282
-
283
- /** @deprecated Use createOAuthTransaction */
284
- async saveOAuthState(input) {
285
- return this.createOAuthTransaction(input);
286
- },
287
-
288
- async consumeOAuthTransaction(state) {
289
- let row;
290
- try {
291
- row = await db.prepare(
292
- `SELECT state, provider, code_verifier, redirect_to, app_id, expires_at, created_at
293
- FROM identity_oauth_states WHERE state = ? LIMIT 1`,
294
- ).bind(state).first();
295
- } catch (err) {
296
- throw new IdentitySchemaError(
297
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
298
- 'identity_oauth_states.app_id column missing — apply migration 0015',
299
- { cause: String(err?.message || err) },
300
- );
301
- }
302
- if (!row) return null;
303
- await db.prepare(`DELETE FROM identity_oauth_states WHERE state = ?`).bind(state).run();
304
- if (row.expires_at <= nowUnix()) return null;
305
- if (!row.app_id) {
306
- throw new IdentitySchemaError(
307
- 'IDENTITY_SCHEMA_MIGRATION_REQUIRED',
308
- 'OAuth transaction missing app_id — refuse silent pre-app_id semantics',
309
- );
310
- }
311
- return {
312
- state: row.state,
313
- provider: row.provider,
314
- code_verifier: row.code_verifier,
315
- redirect_to: row.redirect_to,
316
- return_to: row.redirect_to,
317
- app_id: row.app_id,
318
- expires_at: row.expires_at,
319
- created_at: row.created_at,
320
- };
321
- },
322
-
323
- /** @deprecated Use consumeOAuthTransaction */
324
- async consumeOAuthState(state) {
325
- return this.consumeOAuthTransaction(state);
326
- },
327
-
328
- async getCompanyBySlug(slug = DEFAULT_COMPANY_SLUG) {
329
- const row = await db.prepare(
330
- `SELECT id, slug, name, legal_name, logo_url, favicon_url, primary_color, auth_bg_color,
331
- support_email, website_url, tagline, meta_json, created_at, updated_at
332
- FROM company WHERE slug = ? LIMIT 1`,
333
- ).bind(slug).first();
334
- return normalizeCompanyRow(row);
335
- },
336
-
337
- async getDefaultCompany() {
338
- const bySlug = await this.getCompanyBySlug(DEFAULT_COMPANY_SLUG);
339
- if (bySlug) return bySlug;
340
- const row = await db.prepare(
341
- `SELECT id, slug, name, legal_name, logo_url, favicon_url, primary_color, auth_bg_color,
342
- support_email, website_url, tagline, meta_json, created_at, updated_at
343
- FROM company WHERE id = ? LIMIT 1`,
344
- ).bind(DEFAULT_COMPANY_ID).first();
345
- return normalizeCompanyRow(row);
346
- },
347
-
348
- async upsertCompany(input) {
349
- const ts = nowUnix();
350
- const id = input.id || DEFAULT_COMPANY_ID;
351
- const slug = input.slug || DEFAULT_COMPANY_SLUG;
352
- const existing = await db.prepare(`SELECT id FROM company WHERE id = ? OR slug = ? LIMIT 1`)
353
- .bind(id, slug).first();
354
- const metaJson = input.meta ? JSON.stringify(input.meta) : (input.metaJson ?? null);
355
- if (existing?.id) {
356
- await db.prepare(
357
- `UPDATE company SET
358
- slug = ?, name = ?, legal_name = ?, logo_url = ?, favicon_url = ?,
359
- primary_color = ?, auth_bg_color = ?, support_email = ?, website_url = ?,
360
- tagline = ?, meta_json = ?, updated_at = ?
361
- WHERE id = ?`,
362
- ).bind(
363
- slug,
364
- input.name,
365
- input.legalName ?? null,
366
- input.logoUrl ?? null,
367
- input.faviconUrl ?? null,
368
- input.primaryColor ?? null,
369
- input.authBgColor ?? null,
370
- input.supportEmail ?? null,
371
- input.websiteUrl ?? null,
372
- input.tagline ?? null,
373
- metaJson,
374
- ts,
375
- existing.id,
376
- ).run();
377
- return this.getCompanyBySlug(slug);
378
- }
379
- await db.prepare(
380
- `INSERT INTO company
381
- (id, slug, name, legal_name, logo_url, favicon_url, primary_color, auth_bg_color,
382
- support_email, website_url, tagline, meta_json, created_at, updated_at)
383
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
384
- ).bind(
385
- id,
386
- slug,
387
- input.name,
388
- input.legalName ?? null,
389
- input.logoUrl ?? null,
390
- input.faviconUrl ?? null,
391
- input.primaryColor ?? null,
392
- input.authBgColor ?? null,
393
- input.supportEmail ?? null,
394
- input.websiteUrl ?? null,
395
- input.tagline ?? null,
396
- metaJson,
397
- ts,
398
- ts,
399
- ).run();
400
- return this.getCompanyBySlug(slug);
401
- },
402
- });
403
- }
7
+ export {
8
+ createIamCompatIdentityAdapter,
9
+ createCloudflareD1Adapter,
10
+ } from '../iam-compat/index.js';