@inneranimalmedia/agentsam-sdk 2.6.5 → 2.6.8

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 (400) hide show
  1. package/AGENTSAM.md +29 -0
  2. package/README.md +37 -0
  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 +12 -7
  7. package/apps/client-cms-editor/README.md +76 -48
  8. package/apps/client-cms-editor/agentsam.app.json +26 -9
  9. package/apps/client-cms-editor/backend/package.json +20 -3
  10. package/apps/client-cms-editor/backend/src/api/client.ts +134 -101
  11. package/apps/client-cms-editor/backend/src/index.ts +1 -1
  12. package/apps/client-cms-editor/backend/src/model.ts +11 -115
  13. package/apps/client-cms-editor/backend/src/preview/bridge.ts +1 -1
  14. package/apps/client-cms-editor/backend/tsconfig.json +6 -1
  15. package/apps/client-cms-editor/bin/agentsam-cms.js +262 -0
  16. package/apps/client-cms-editor/bin/agentsam-cms.mjs +2 -228
  17. package/apps/client-cms-editor/frontend/package.json +16 -7
  18. package/apps/client-cms-editor/frontend/src/AgentSamDrawer.tsx +9 -41
  19. package/apps/client-cms-editor/frontend/src/CmsAgentSurface.tsx +19 -174
  20. package/apps/client-cms-editor/frontend/src/adapters/heuristic.ts +29 -0
  21. package/apps/client-cms-editor/frontend/src/adapters/http.ts +628 -0
  22. package/apps/client-cms-editor/frontend/src/adapters/memory.ts +510 -0
  23. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +213 -0
  24. package/apps/client-cms-editor/frontend/src/editor/CmsEditorProvider.tsx +20 -0
  25. package/apps/client-cms-editor/frontend/src/editor/canvas/PreviewCanvas.tsx +53 -0
  26. package/apps/client-cms-editor/frontend/src/{CmsEditor.tsx → editor/legacy/CmsEditorPrototype.tsx} +52 -23
  27. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +218 -0
  28. package/apps/client-cms-editor/frontend/src/index.ts +19 -5
  29. package/apps/client-cms-editor/frontend/src/lib/agent-host.ts +24 -0
  30. package/apps/client-cms-editor/frontend/src/main.tsx +82 -8
  31. package/apps/client-cms-editor/frontend/src/mount.tsx +92 -30
  32. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +1 -1
  33. package/apps/client-cms-editor/frontend/src/styles/cmsShell.css +8 -8
  34. package/apps/client-cms-editor/frontend/src/styles/studio.css +55 -3
  35. package/apps/client-cms-editor/frontend/tsconfig.json +12 -1
  36. package/apps/client-cms-editor/frontend/vite.config.ts +12 -0
  37. package/apps/client-cms-editor/package-lock.json +973 -134
  38. package/apps/client-cms-editor/package.json +118 -6
  39. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +201 -0
  40. package/apps/client-cms-editor/reference/harvest/PROVENANCE_HISTORY.txt +10 -0
  41. package/apps/client-cms-editor/reference/harvest/README.md +8 -0
  42. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +135 -0
  43. package/apps/client-cms-editor/reference/harvest/plans/CHATGPT-IDENTITY-HARVEST.md +83 -0
  44. package/apps/client-cms-editor/reference/harvest/plans/CMS-EDITOR-HARVEST.md +166 -0
  45. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +196 -0
  46. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +137 -0
  47. package/apps/client-cms-editor/reference/harvest/plans/NO-IMPLICIT-SIDE-EFFECTS.md +87 -0
  48. package/apps/client-cms-editor/reference/harvest/plans/STOREFRONT-SURFACE-MAP.md +140 -0
  49. package/apps/client-cms-editor/reference/harvest/plans/THEME-INNERANIMALS-HARVEST.md +137 -0
  50. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +63 -0
  51. package/apps/client-cms-editor/reference/harvest/plans/harvest-manifest.json +97 -0
  52. package/apps/client-cms-editor/reference/harvest/plans/local-cms-harvest-schema.sql +328 -0
  53. package/apps/client-cms-editor/shared/cms/package.json +17 -7
  54. package/apps/client-cms-editor/shared/cms/src/adapter.ts +204 -0
  55. package/apps/client-cms-editor/shared/cms/src/agent-context.ts +7 -5
  56. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +32 -0
  57. package/apps/client-cms-editor/shared/cms/src/host.ts +82 -0
  58. package/apps/client-cms-editor/shared/cms/src/index.ts +4 -0
  59. package/apps/client-cms-editor/shared/cms/src/map.ts +115 -0
  60. package/apps/client-cms-editor/shared/cms/src/starter-pack.ts +158 -0
  61. package/contracts/source-types.v1.json +353 -0
  62. package/docs/CMS_CONTEXTUAL_COMPOSER.md +1 -1
  63. package/docs/PRODUCT_LIFECYCLE.md +566 -0
  64. package/docs/REPO_FILE_MAP.txt +132 -0
  65. package/docs/THEME_REFINERY.md +2 -2
  66. package/docs/architecture/AGENTSAM_RUNTIME_PROTOCOL.md +40 -20
  67. package/docs/content-studio/REVISION_GATE_2026-09-27.md +1 -1
  68. package/docs/plans/LOCAL_STUDIO_DESKTOP_RELEASE_2026-09-29.md +150 -0
  69. package/migrations/d1/0017_identity_native_oauth.sql +21 -0
  70. package/migrations/d1/0018_goap_control_plane_remaster.sql +40 -0
  71. package/migrations/d1/0019_agentsam_agent_run_plan_todo.sql +14 -0
  72. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +20 -9
  73. package/migrations/runtime/0002_goap_blackboard_v1.sql +15 -0
  74. package/migrations/runtime/0004_agent_run_plan_linkage.sql +8 -0
  75. package/native/agentsam-machine/Cargo.lock +426 -0
  76. package/native/agentsam-machine/Cargo.toml +9 -0
  77. package/native/agentsam-machine/cli/Cargo.toml +21 -0
  78. package/native/agentsam-machine/cli/README.md +21 -0
  79. package/native/agentsam-machine/cli/src/main.rs +77 -0
  80. package/native/agentsam-machine/core/Cargo.toml +22 -0
  81. package/native/agentsam-machine/core/README.md +14 -0
  82. package/native/agentsam-machine/core/build.rs +33 -0
  83. package/native/agentsam-machine/core/contracts/source-types.v1.json +353 -0
  84. package/native/agentsam-machine/core/src/assets.rs +790 -0
  85. package/native/agentsam-machine/core/src/bound.rs +298 -0
  86. package/native/agentsam-machine/core/src/enrich.rs +706 -0
  87. package/native/agentsam-machine/core/src/frontend.rs +442 -0
  88. package/native/agentsam-machine/core/src/lib.rs +1092 -0
  89. package/native/agentsam-machine/core/src/liquid.rs +528 -0
  90. package/native/agentsam-machine/core/src/source_types.rs +78 -0
  91. package/package.json +64 -24
  92. package/packages/agentsam-brand/README.md +1 -1
  93. package/packages/agentsam-brand/package.json +4 -4
  94. package/packages/agentsam-brand/src/index.js +1 -1
  95. package/packages/agentsam-contracts/package.json +13 -3
  96. package/packages/agentsam-contracts/src/tools.ts +22 -0
  97. package/packages/agentsam-errors/package.json +13 -3
  98. package/packages/agentsam-errors/src/index.js +1 -0
  99. package/packages/agentsam-errors/src/tool.js +56 -0
  100. package/packages/agentsam-errors/test/tool.test.mjs +58 -0
  101. package/packages/agentsam-goap/README.md +52 -0
  102. package/packages/agentsam-goap/package.json +37 -0
  103. package/packages/agentsam-goap/src/adapters/d1-sqlite.js +570 -0
  104. package/packages/agentsam-goap/src/adapters/memory.js +199 -0
  105. package/packages/agentsam-goap/src/contracts.js +226 -0
  106. package/packages/agentsam-goap/src/control-plane.js +112 -0
  107. package/packages/agentsam-goap/src/errors.js +157 -0
  108. package/packages/agentsam-goap/src/index.js +5 -0
  109. package/packages/agentsam-goap/src/world.js +202 -0
  110. package/packages/agentsam-goap/test/goap-control-plane.test.mjs +245 -0
  111. package/packages/agentsam-goap/test/world.test.mjs +79 -0
  112. package/packages/agentsam-knowledge/package.json +18 -4
  113. package/packages/agentsam-knowledge/src/autorag/index.js +10 -3
  114. package/packages/agentsam-knowledge/src/backends/index.js +33 -1
  115. package/packages/agentsam-knowledge/test/autorag.test.mjs +60 -1
  116. package/packages/agentsam-nav/dist/browser.global.js +21 -18
  117. package/packages/agentsam-nav/dist/browser.js +6807 -130
  118. package/packages/agentsam-nav/dist/index.js +6799 -122
  119. package/packages/agentsam-nav/package.json +24 -6
  120. package/packages/agentsam-queue-control/README.md +1 -1
  121. package/packages/agentsam-queue-control/package.json +7 -2
  122. package/packages/agentsam-rapid-rust/src/main.rs +1 -1
  123. package/packages/agentsam-repository/package.json +13 -3
  124. package/packages/agentsam-repository/src/goap.js +13 -14
  125. package/packages/agentsam-repository/src/source-types.js +8 -0
  126. package/packages/agentsam-repository/src/tickets.js +15 -22
  127. package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +19 -8
  128. package/packages/agentsam-vault/package.json +14 -4
  129. package/packages/agentsam-workbench/package.json +15 -4
  130. package/packages/agentsam-workbench/src/agent/ToolPermissionRequest.tsx +94 -0
  131. package/packages/agentsam-workbench/src/agent/index.ts +2 -0
  132. package/packages/agentsam-workbench/src/agent/tool-permission.css +134 -0
  133. package/packages/connectors/cloudflare/package.json +15 -3
  134. package/packages/connectors/cloudflare/src/api-client.js +3 -2
  135. package/packages/connectors/cloudflare/src/families/vectorize.js +127 -0
  136. package/packages/connectors/cloudflare/src/index.js +1 -0
  137. package/packages/heuristic-theme/README.md +2 -2
  138. package/packages/heuristic-theme/package.json +8 -3
  139. package/packages/heuristic-theme/src/registry.js +2 -2
  140. package/packages/heuristic-theme/src/theme.js +1 -1
  141. package/packages/heuristic-theme/test/theme.test.mjs +1 -1
  142. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +1 -1
  143. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +27 -7
  144. package/packages/identity/README.md +2 -2
  145. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +18 -15
  146. package/packages/identity/migrations/apply-portable.js +109 -0
  147. package/packages/identity/migrations/sqlite/004_identity_oauth_consent_catalog.sql +1 -1
  148. package/packages/identity/migrations/sqlite/005_identity_company_native.sql +52 -0
  149. package/packages/identity/package.json +27 -6
  150. package/packages/identity/schema/agentsam.identity/manifest.json +101 -0
  151. package/packages/identity/scripts/local-identity-bridge.mjs +13 -7
  152. package/packages/identity/scripts/preview-auth-portal.mjs +6 -6
  153. package/packages/identity/src/adapters/cloudflare-d1/index.js +8 -401
  154. package/packages/identity/src/adapters/iam-compat/index.js +540 -0
  155. package/packages/identity/src/adapters/portable-d1/index.js +18 -0
  156. package/packages/identity/src/adapters/portable-store.js +479 -0
  157. package/packages/identity/src/adapters/sqlite/index.js +13 -312
  158. package/packages/identity/src/contracts/auth-config.js +0 -1
  159. package/packages/identity/src/contracts/identity-store.js +56 -5
  160. package/packages/identity/src/contracts/provider.js +1 -0
  161. package/packages/identity/src/contracts/sign-in-options.js +104 -0
  162. package/packages/identity/src/core/constants.js +1 -1
  163. package/packages/identity/src/core/session-policy.js +31 -0
  164. package/packages/identity/src/frontend/auth-portal/pages/login.html +6 -6
  165. package/packages/identity/src/frontend/auth-portal/pages/reset.html +5 -5
  166. package/packages/identity/src/frontend/auth-portal/pages/signup.html +5 -5
  167. package/packages/identity/src/frontend/auth-portal/shared/company-branding.js +1 -1
  168. package/packages/identity/src/frontend/auth-portal/shared/desktop-identity-bridge.js +6 -37
  169. package/packages/identity/src/index.js +28 -1
  170. package/packages/identity/src/migrations/README.md +23 -23
  171. package/packages/identity/src/oauth/README.md +1 -1
  172. package/packages/identity/src/oauth/credentials.js +10 -11
  173. package/packages/identity/src/oauth/google-desktop-exchange.js +195 -27
  174. package/packages/identity/src/oauth/iam-platform.js +21 -9
  175. package/packages/identity/src/oauth/native-handoff.js +136 -0
  176. package/packages/identity/src/providers/chatgpt/headers.js +65 -0
  177. package/packages/identity/src/providers/chatgpt/index.js +86 -0
  178. package/packages/identity/src/providers/chatgpt/mapper.js +43 -0
  179. package/packages/identity/src/providers/chatgpt/paths.js +45 -0
  180. package/packages/identity/src/providers/github/oauth.js +1 -2
  181. package/packages/identity/src/providers/github/profile.js +16 -2
  182. package/packages/identity/src/providers/index.js +11 -3
  183. package/packages/identity/src/server/identity-service.js +2 -1
  184. package/packages/identity/src/server/worker-router.js +71 -18
  185. package/packages/identity/tests/chatgpt-provider.test.mjs +75 -0
  186. package/packages/identity/tests/google-desktop-identity-login.test.mjs +210 -0
  187. package/packages/identity/tests/identity-init-scaffold.test.mjs +15 -4
  188. package/packages/identity/tests/lane1-identity-store-parity.test.mjs +527 -0
  189. package/packages/identity/tests/lane1-packed-consumer.test.mjs +175 -0
  190. package/packages/identity/tests/native-oauth-handoff.test.mjs +292 -0
  191. package/packages/identity/tests/oauth-credentials.test.mjs +4 -4
  192. package/packages/identity/tests/preview-auth-portal.test.mjs +4 -2
  193. package/packages/identity/tests/session-routes-policy.test.mjs +13 -1
  194. package/packages/identity/tests/worker-runtime-boundary.test.mjs +11 -0
  195. package/packages/providers/completeful/package.json +7 -2
  196. package/packages/theme-church-site/package.json +17 -6
  197. package/packages/theme-church-site/src/harvest.json +4 -2
  198. package/packages/theme-church-site/src/index.js +7 -3
  199. package/packages/theme-church-site/test/theme.test.mjs +4 -2
  200. package/packages/theme-companions-site/package.json +17 -6
  201. package/packages/theme-companions-site/src/harvest.json +4 -2
  202. package/packages/theme-companions-site/src/index.js +7 -3
  203. package/packages/theme-companions-site/test/theme.test.mjs +4 -2
  204. package/packages/theme-floors-site/package.json +17 -6
  205. package/packages/theme-floors-site/src/harvest.json +4 -2
  206. package/packages/theme-floors-site/src/index.js +7 -3
  207. package/packages/theme-floors-site/test/theme.test.mjs +4 -2
  208. package/packages/theme-fuelnfree-site/package.json +17 -6
  209. package/packages/theme-fuelnfree-site/src/harvest.json +4 -2
  210. package/packages/theme-fuelnfree-site/src/index.js +7 -3
  211. package/packages/theme-fuelnfree-site/test/theme.test.mjs +4 -2
  212. package/packages/theme-handyman-site/package.json +17 -6
  213. package/packages/theme-handyman-site/src/harvest.json +4 -2
  214. package/packages/theme-handyman-site/src/index.js +7 -3
  215. package/packages/theme-handyman-site/test/theme.test.mjs +4 -2
  216. package/packages/theme-insurance-site/package.json +17 -6
  217. package/packages/theme-insurance-site/src/harvest.json +4 -2
  218. package/packages/theme-insurance-site/src/index.js +7 -3
  219. package/packages/theme-insurance-site/test/theme.test.mjs +4 -2
  220. package/packages/theme-scenes/README.md +1 -1
  221. package/packages/theme-scenes/package.json +4 -3
  222. package/packages/theme-scenes/src/registry.js +187 -0
  223. package/packages/theme-shinshu-site/package.json +17 -6
  224. package/packages/theme-shinshu-site/src/harvest.json +4 -2
  225. package/packages/theme-shinshu-site/src/index.js +7 -3
  226. package/packages/theme-shinshu-site/test/theme.test.mjs +4 -2
  227. package/packages/work-graph/package.json +14 -4
  228. package/protocol/FILEMETA_V1.md +2 -2
  229. package/protocol/capabilities/manifest.json +1 -1
  230. package/protocol/database/agentsam.schema-pack.v1.schema.json +72 -0
  231. package/protocol/presets/catalog.json +2 -2
  232. package/protocol/theme-refinery/lineage-registry.json +105 -0
  233. package/protocol/theme-refinery/product-metadata.schema.json +21 -1
  234. package/python/agentsam_sdk/repository/intelligence/discovery.py +27 -2
  235. package/python/agentsam_sdk/repository/intelligence/git.py +4 -0
  236. package/python/tests/test_repository_intelligence.py +30 -0
  237. package/src/cli/command-catalog.js +48 -5
  238. package/src/cli/dispatch.js +1 -0
  239. package/src/cli.js +20 -1
  240. package/src/cloudflare/runtime-status.js +2 -1
  241. package/src/commands/autorag.js +67 -13
  242. package/src/commands/cheat-sheet.js +29 -4
  243. package/src/commands/codebaseindex.js +45 -2
  244. package/src/commands/goap-world.js +134 -0
  245. package/src/commands/goap.js +11 -4
  246. package/src/commands/knowledge.js +59 -2
  247. package/src/commands/machine-binary.js +109 -0
  248. package/src/commands/machine-runtime.js +266 -0
  249. package/src/commands/machine.js +208 -0
  250. package/src/commands/package.js +530 -0
  251. package/src/commands/plan-ledger.js +370 -0
  252. package/src/commands/plan.js +183 -0
  253. package/src/commands/security.js +67 -4
  254. package/src/commands/setup.js +33 -16
  255. package/src/commands/skill.js +78 -17
  256. package/src/commands/status.js +8 -1
  257. package/src/features/resolve.js +1 -0
  258. package/src/knowledge/engine.js +21 -2
  259. package/src/knowledge/runtime-discovery.js +127 -0
  260. package/src/knowledge/source.js +1 -1
  261. package/src/lib/identity-scaffold.js +53 -13
  262. package/src/lib/setup/recipes.js +1 -1
  263. package/src/lib/slash-commands.js +1 -1
  264. package/src/local/runtime-store.js +24 -2
  265. package/src/local/sqlite.js +17 -0
  266. package/src/models/discovery.js +40 -22
  267. package/src/models/inventory-core.d.ts +105 -0
  268. package/src/models/inventory-core.js +54 -6
  269. package/src/sam/operations/package-audit.js +41 -0
  270. package/src/sam/seed.js +2 -0
  271. package/src/security/logs.js +3 -0
  272. package/src/ui/cli/help.js +41 -0
  273. package/apps/client-cms-editor/backend/src/demo-bootstrap.ts +0 -145
  274. package/test/account-session.test.mjs +0 -101
  275. package/test/agent-capabilities.test.mjs +0 -67
  276. package/test/app-authority-context.test.mjs +0 -32
  277. package/test/app-building-skills.test.mjs +0 -61
  278. package/test/apps-scaffold-contract.test.mjs +0 -114
  279. package/test/blender-cad.test.mjs +0 -146
  280. package/test/cad-docker.test.mjs +0 -96
  281. package/test/capabilities.test.mjs +0 -133
  282. package/test/cli/api-key-env-whoami.test.mjs +0 -129
  283. package/test/cli/codebaseindex-plan-ux.test.mjs +0 -37
  284. package/test/cli/eval-live.test.mjs +0 -219
  285. package/test/cli/go.test.mjs +0 -128
  286. package/test/cli/local-vault-and-provider-setup.test.mjs +0 -268
  287. package/test/cli/mcp-client.test.mjs +0 -256
  288. package/test/cli/preferences-runtime.test.mjs +0 -11
  289. package/test/cli/runtime-persist.test.mjs +0 -56
  290. package/test/cli/runtime-ui.test.mjs +0 -141
  291. package/test/cli/rust-command.test.mjs +0 -21
  292. package/test/cli/skill-npm-and-env.test.mjs +0 -52
  293. package/test/cli/status-actions.test.mjs +0 -88
  294. package/test/cli/wireframes-go-registry.test.mjs +0 -139
  295. package/test/cli-preferences.test.mjs +0 -46
  296. package/test/cloudflare-connector.test.mjs +0 -93
  297. package/test/cloudflare-runtime.test.mjs +0 -82
  298. package/test/context.test.mjs +0 -159
  299. package/test/credentials-audit.test.mjs +0 -113
  300. package/test/deploy-health-scan.test.mjs +0 -95
  301. package/test/deploy-receipt.test.mjs +0 -91
  302. package/test/dockerize.test.mjs +0 -93
  303. package/test/error-diagnostics.test.mjs +0 -124
  304. package/test/eval-context.test.mjs +0 -37
  305. package/test/execution-approvals.test.mjs +0 -27
  306. package/test/fixtures/cad/courtyard-house.json +0 -208
  307. package/test/fixtures/knowledge-rpc-worker.mjs +0 -16
  308. package/test/gcloud-auth.test.mjs +0 -111
  309. package/test/go/build-source-identity.test.mjs +0 -31
  310. package/test/go/cloudflare-probe.test.mjs +0 -317
  311. package/test/go/distribution.test.mjs +0 -28
  312. package/test/google-cloud-connection.test.mjs +0 -83
  313. package/test/google-cloud-inventory.test.mjs +0 -64
  314. package/test/indexing-provider.test.mjs +0 -29
  315. package/test/init-options.test.mjs +0 -35
  316. package/test/integration/ai-access-onboarding.test.mjs +0 -47
  317. package/test/integration/app-command.test.mjs +0 -85
  318. package/test/integration/cad-discovery.test.mjs +0 -158
  319. package/test/integration/cad-docker-executor.test.mjs +0 -249
  320. package/test/integration/cad-execution.test.mjs +0 -184
  321. package/test/integration/cad-project-app.test.mjs +0 -31
  322. package/test/integration/cad-project-d1.test.mjs +0 -25
  323. package/test/integration/cad-project-native.test.mjs +0 -24
  324. package/test/integration/cad-project-workflow.test.mjs +0 -9
  325. package/test/integration/cad-project.test.mjs +0 -85
  326. package/test/integration/cli-help.test.mjs +0 -41
  327. package/test/integration/cms-app-scaffold.test.mjs +0 -71
  328. package/test/integration/cms-site-tenancy-contract.test.mjs +0 -257
  329. package/test/integration/codebaseindex-ingest.test.mjs +0 -214
  330. package/test/integration/core-client.integration.test.mjs +0 -55
  331. package/test/integration/error-runtime-rpc.test.mjs +0 -71
  332. package/test/integration/features-resolve.test.mjs +0 -147
  333. package/test/integration/icon-registry.test.mjs +0 -67
  334. package/test/integration/ingest-discover-models.test.mjs +0 -30
  335. package/test/integration/inspect-path-cli.test.mjs +0 -46
  336. package/test/integration/install-script.test.mjs +0 -110
  337. package/test/integration/inventory-core.test.mjs +0 -53
  338. package/test/integration/inventory-evidence.test.mjs +0 -125
  339. package/test/integration/knowledge-rpc.test.mjs +0 -112
  340. package/test/integration/local-fs.test.mjs +0 -113
  341. package/test/integration/merkle-cli.test.mjs +0 -61
  342. package/test/integration/merkle-persistence-identity.test.mjs +0 -48
  343. package/test/integration/plugins-cloudflare.integration.test.mjs +0 -28
  344. package/test/integration/provider-env-cli.test.mjs +0 -50
  345. package/test/integration/provider-factory.test.mjs +0 -197
  346. package/test/integration/repository-company-graph.test.mjs +0 -90
  347. package/test/integration/runtime-migrations.test.mjs +0 -87
  348. package/test/integration/runtime-status.integration.test.mjs +0 -212
  349. package/test/integration/sam-activity-recovery.test.mjs +0 -147
  350. package/test/integration/sam-decision.test.mjs +0 -584
  351. package/test/integration/sam-kernel.test.mjs +0 -99
  352. package/test/integration/sam-planning-astar.test.mjs +0 -279
  353. package/test/integration/scaffold-cloudflare.test.mjs +0 -46
  354. package/test/integration/skill-runtime.test.mjs +0 -240
  355. package/test/integration/storage-architecture.test.mjs +0 -154
  356. package/test/integration/store-discovery.test.mjs +0 -44
  357. package/test/integration/studio-fs-pty-e2e.test.mjs +0 -294
  358. package/test/integration/terminal-exec.integration.test.mjs +0 -86
  359. package/test/integration/tool-runtime.test.mjs +0 -124
  360. package/test/integration/tool-schema.test.mjs +0 -59
  361. package/test/jr-dev-skill.test.mjs +0 -26
  362. package/test/knowledge-context-pack.test.mjs +0 -19
  363. package/test/knowledge-postgres.test.mjs +0 -40
  364. package/test/knowledge-service.test.mjs +0 -110
  365. package/test/knowledge.test.mjs +0 -206
  366. package/test/live/terminal-transport.live.test.mjs +0 -24
  367. package/test/local-sessions.test.mjs +0 -57
  368. package/test/local-studio-deploy.test.mjs +0 -83
  369. package/test/loopback-oauth.test.mjs +0 -53
  370. package/test/merkle-render.test.mjs +0 -31
  371. package/test/mini.test.mjs +0 -140
  372. package/test/model-catalog.test.mjs +0 -70
  373. package/test/models.test.mjs +0 -309
  374. package/test/npm10-lock.test.mjs +0 -29
  375. package/test/ollama.test.mjs +0 -137
  376. package/test/open-url.test.mjs +0 -64
  377. package/test/openai-responses.test.mjs +0 -155
  378. package/test/portable-context.test.mjs +0 -94
  379. package/test/project-config.test.mjs +0 -81
  380. package/test/project-rules.test.mjs +0 -44
  381. package/test/provider-credentials.test.mjs +0 -106
  382. package/test/rehydrate.test.mjs +0 -25
  383. package/test/release-hygiene.test.mjs +0 -42
  384. package/test/repository-snapshot-view.test.mjs +0 -112
  385. package/test/responses-runner.test.mjs +0 -465
  386. package/test/runtime-activity.test.mjs +0 -98
  387. package/test/sdk-worker-contract.test.mjs +0 -72
  388. package/test/security.test.mjs +0 -252
  389. package/test/setup-planner.test.mjs +0 -74
  390. package/test/setup-runtime.test.mjs +0 -51
  391. package/test/shell.test.mjs +0 -281
  392. package/test/skills.test.mjs +0 -22
  393. package/test/smoke.mjs +0 -122
  394. package/test/telemetry.test.mjs +0 -79
  395. package/test/terminal/local-pty.mock.test.mjs +0 -153
  396. package/test/terminal-machine-identity.test.mjs +0 -88
  397. package/test/theme-portability.test.mjs +0 -14
  398. package/test/tools-search.test.mjs +0 -73
  399. package/test/unit/website-assets-bindings.test.mjs +0 -60
  400. package/test/whoami-resume.test.mjs +0 -157
@@ -1,214 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { describe, it, before } from 'node:test';
3
- import fs from 'node:fs';
4
- import os from 'node:os';
5
- import path from 'node:path';
6
- import { execFileSync } from 'node:child_process';
7
- import {
8
- getCliCommand,
9
- listCliCommands,
10
- printAssistTip,
11
- suggestCliCommands,
12
- } from '../../src/cli/command-catalog.js';
13
- import { parsePastedPaths, classifyMaterial, stageMaterials } from '../../src/indexing/ingest/materials.js';
14
- import { ensureSeedOperations, getSamOperation, AgentSamClient } from '../../src/sam/index.js';
15
- import { getSkill, loadSkill } from '../../src/skills/index.js';
16
- import { resolveHelpTopic, renderHelpOverview } from '../../src/ui/cli/help.js';
17
- import { runCodebaseindexIngest } from '../../src/commands/codebaseindex.js';
18
- import { buildInventory } from '../../src/indexing/ingest/inventory.js';
19
-
20
- describe('CLI command catalog assist', () => {
21
- it('maps ingest alias to codebaseindex with skill tip', () => {
22
- const entry = getCliCommand('ingest');
23
- assert.equal(entry?.id, 'codebaseindex');
24
- assert.equal(entry?.skill, 'agentsam-codebaseindex');
25
- assert.equal(entry?.operation, 'codebaseindex.ingest');
26
- });
27
-
28
- it('prints tip: use skill for every catalogued command', () => {
29
- const chunks = [];
30
- for (const entry of listCliCommands()) {
31
- if (!entry.skill) continue;
32
- printAssistTip(entry, { write: (s) => chunks.push(s) });
33
- }
34
- const text = chunks.join('');
35
- assert.match(text, /tip: use skill agentsam-codebaseindex/);
36
- assert.match(text, /tip: use skill agentsam-app-fundamentals/);
37
- });
38
-
39
- it('suggests commands for typos', () => {
40
- const hits = suggestCliCommands('codebase');
41
- assert.ok(hits.some((h) => h.id === 'codebaseindex'));
42
- });
43
- });
44
-
45
- describe('material paste/drop intake', () => {
46
- it('parses pasted multi-path text', () => {
47
- const paths = parsePastedPaths('/tmp/a.tar.gz\n"./site build"/index.html screenshot.png');
48
- assert.ok(paths.includes('/tmp/a.tar.gz'));
49
- assert.ok(paths.some((p) => p.includes('index.html') || p.endsWith('screenshot.png')));
50
- });
51
-
52
- it('stages html and classifies archives', () => {
53
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-ingest-'));
54
- const html = path.join(root, 'page.html');
55
- fs.writeFileSync(html, '<html><body>hi</body></html>');
56
- const classified = classifyMaterial(html);
57
- assert.equal(classified.kind, 'document');
58
-
59
- const tarPath = path.join(root, 'site.tar');
60
- const bundle = path.join(root, 'bundle');
61
- fs.mkdirSync(bundle);
62
- fs.writeFileSync(path.join(bundle, 'index.html'), '<html>build</html>');
63
- execFileSync('tar', ['-cf', tarPath, '-C', bundle, '.']);
64
-
65
- const staged = stageMaterials({ root, materials: [html, tarPath] });
66
- assert.equal(staged.schema, 'agentsam.ingest.materials.v1');
67
- assert.ok(staged.include.length >= 1);
68
- assert.ok(staged.assets.some((a) => a.kind === 'document') || staged.items.some((i) => i.kind === 'archive'));
69
- assert.ok(fs.existsSync(path.join(root, staged.stage_root, 'manifest.json')));
70
- });
71
- });
72
-
73
- describe('codebaseindex SAM primitive', () => {
74
- before(() => ensureSeedOperations());
75
-
76
- it('registers codebaseindex.ingest', () => {
77
- const op = getSamOperation('codebaseindex.ingest');
78
- assert.ok(op);
79
- assert.equal(op.execution.model, 'optional');
80
- assert.deepEqual(op.cli.command[0], ['codebaseindex']);
81
- });
82
-
83
- it('skill agentsam-codebaseindex loads', () => {
84
- assert.ok(getSkill('ingest'));
85
- const loaded = loadSkill('agentsam-codebaseindex');
86
- assert.match(loaded.instructions, /codebaseindex\.ingest/);
87
- assert.match(loaded.instructions, /sam\.codebaseindex\.index\.run/);
88
- });
89
-
90
- it('describe + discover surface ingest', async () => {
91
- const sam = new AgentSamClient();
92
- const info = await sam.describe('codebaseindex.ingest');
93
- assert.equal(info.ok, true);
94
- const found = await sam.discover({ query: 'ingest archive embedding' });
95
- assert.ok(found.operations.some((c) => c.id === 'codebaseindex.ingest'));
96
- });
97
-
98
- it('plan-only ingest via invoke (repo allowlist)', async () => {
99
- const sam = new AgentSamClient();
100
- const result = await sam.invoke('codebaseindex.ingest', {
101
- root: process.cwd(),
102
- include: ['src/sam'],
103
- exclude: ['node_modules', '.git'],
104
- embeddingChoice: 'none',
105
- planOnly: true,
106
- });
107
- assert.equal(result.ok, true);
108
- assert.equal(result.data?.pipeline, 'sam.codebaseindex.index.run');
109
- assert.equal(result.data?.mode, 'plan');
110
- });
111
- });
112
-
113
- describe('codebaseindex real execution', () => {
114
- it('publishes, smoke-searches, completes the graph, and returns portable paths', async () => {
115
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-codebaseindex-run-'));
116
- fs.mkdirSync(path.join(root, 'src'), { recursive: true });
117
- fs.writeFileSync(
118
- path.join(root, 'src', 'demo.js'),
119
- 'export function hello() { return "hello AgentSam"; }\n',
120
- );
121
-
122
- const result = await runCodebaseindexIngest({
123
- root,
124
- include: ['src'],
125
- exclude: [],
126
- embeddingChoice: 'none',
127
- embed: false,
128
- planOnly: false,
129
- });
130
-
131
- assert.equal(result.mode, 'run');
132
- assert.equal(result.root, '.');
133
- assert.equal(result.inventory.root, '.');
134
-
135
- assert.equal(result.index.published, true);
136
- assert.equal(result.job_graph.status, 'completed');
137
- assert.equal(result.job_graph.current, null);
138
- assert.equal(
139
- result.job_graph.nodes.find((node) => node.id === 'embedding.generate')?.status,
140
- 'skipped',
141
- );
142
- assert.equal(
143
- result.job_graph.nodes.find((node) => node.id === 'search.smoke')?.status,
144
- 'done',
145
- );
146
-
147
- assert.equal(
148
- result.search_smoke.generation_id,
149
- result.index.generation_id,
150
- );
151
- assert.ok(result.search_smoke.sources_included >= 1);
152
- });
153
- });
154
-
155
- describe('catalog-driven help', () => {
156
- it('resolves ingest topic from catalog', () => {
157
- const topic = resolveHelpTopic('ingest');
158
- assert.ok(topic);
159
- assert.ok(topic.rows.some(([cmd]) => cmd.includes('codebaseindex')));
160
- });
161
-
162
- it('overview mentions skill baseline', () => {
163
- const text = renderHelpOverview('2.6.3');
164
- assert.match(text, /tip: use skill/);
165
- assert.match(text, /command catalog/i);
166
- });
167
- });
168
-
169
- describe('Cargo workspace inventory', () => {
170
- it('treats workspace members as source and keeps generated/operational state out of the starting scope', () => {
171
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-cargo-workspace-'));
172
- try {
173
- fs.writeFileSync(path.join(root, 'Cargo.toml'), `[workspace]
174
- members = [
175
- "core",
176
- "worker",
177
- ]
178
- resolver = "2"
179
- `);
180
- for (const crate of ['core', 'worker']) {
181
- fs.mkdirSync(path.join(root, crate, 'src'), { recursive: true });
182
- fs.writeFileSync(path.join(root, crate, 'Cargo.toml'), `[package]
183
- name = "${crate}"
184
- version = "0.1.0"
185
- edition = "2024"
186
- `);
187
- fs.writeFileSync(path.join(root, crate, 'src', 'lib.rs'), `pub fn ${crate}_value() -> u32 { 1 }
188
- `);
189
- }
190
- fs.mkdirSync(path.join(root, 'docs'), { recursive: true });
191
- fs.writeFileSync(path.join(root, 'docs', 'README.md'), '# docs\n');
192
- fs.mkdirSync(path.join(root, 'target'), { recursive: true });
193
- fs.writeFileSync(path.join(root, 'target', 'build.txt'), 'generated\n');
194
- fs.mkdirSync(path.join(root, '.agentsam', 'machine'), { recursive: true });
195
- fs.writeFileSync(path.join(root, '.agentsam', 'machine', 'state.sqlite'), '');
196
-
197
- const inventory = buildInventory({ root });
198
- assert.deepEqual(inventory.cargo_workspace_roots, ['core', 'worker']);
199
- assert.ok(inventory.categories.source.includes('core'));
200
- assert.ok(inventory.categories.source.includes('worker'));
201
- assert.ok(inventory.categories.docs.includes('docs'));
202
- assert.ok(inventory.categories.dependencies.includes('target'));
203
- assert.ok(inventory.categories.operational.includes('.agentsam'));
204
-
205
- assert.ok(inventory.suggested.include.includes('core'));
206
- assert.ok(inventory.suggested.include.includes('worker'));
207
- assert.ok(inventory.suggested.include.includes('docs'));
208
- assert.ok(inventory.suggested.exclude.includes('target'));
209
- assert.ok(inventory.suggested.exclude.includes('.agentsam'));
210
- } finally {
211
- fs.rmSync(root, { recursive: true, force: true });
212
- }
213
- });
214
- });
@@ -1,55 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import fs from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import test from 'node:test';
6
- import { getJson } from '../../src/lib/core-client.js';
7
- import { saveAccountSession } from '../../src/lib/account-session.js';
8
-
9
- test('core client accepts an already-resolved browser OAuth bearer without reclassifying it as an API key', async () => {
10
- let authorization = '';
11
- const result = await getJson('/api/sdk/context', {
12
- bearer: 'browser_oauth_access_token',
13
- env: { IAM_OAUTH_ISSUER: 'https://iam.example.test' },
14
- fetchImpl: async (_url, options) => {
15
- authorization = options.headers.Authorization;
16
- return { ok: true, async json() { return { ok: true }; } };
17
- },
18
- });
19
- assert.equal(result.ok, true);
20
- assert.equal(authorization, 'Bearer browser_oauth_access_token');
21
- });
22
-
23
- test('legacy string credential form is treated as a resolved bearer for both API keys and OAuth tokens', async () => {
24
- const original = globalThis.fetch;
25
- let authorization = '';
26
- globalThis.fetch = async (_url, options) => {
27
- authorization = options.headers.Authorization;
28
- return { ok: true, async json() { return { ok: true }; } };
29
- };
30
- try {
31
- await getJson('/api/sdk/context', 'browser_oauth_access_token');
32
- assert.equal(authorization, 'Bearer browser_oauth_access_token');
33
- } finally {
34
- globalThis.fetch = original;
35
- }
36
- });
37
-
38
- test('core client refreshes browser OAuth once when IAM returns 401 before local expiry', async t => {
39
- const home = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-core-client-'));
40
- t.after(() => fs.rmSync(home, { recursive: true, force: true }));
41
- saveAccountSession({ access_token: 'stale_browser_token', refresh_token: 'refresh_token', expires_in: 3600 }, { home });
42
- const seen = [];
43
- const result = await getJson('/api/sdk/context', {
44
- home,
45
- env: { IAM_OAUTH_ISSUER: 'https://iam.example.test' },
46
- refreshImpl: async () => ({ access_token: 'fresh_browser_token', refresh_token: 'refresh_token' }),
47
- fetchImpl: async (_url, options) => {
48
- seen.push(options.headers.Authorization);
49
- const ok = seen.length > 1;
50
- return { ok, status: ok ? 200 : 401, async json() { return ok ? { ok: true } : { error: 'Unauthorized' }; } };
51
- },
52
- });
53
- assert.equal(result.ok, true);
54
- assert.deepEqual(seen, ['Bearer stale_browser_token', 'Bearer fresh_browser_token']);
55
- });
@@ -1,71 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
-
4
- import {
5
- AgentSamError,
6
- createErrorEnvelope,
7
- } from '../../packages/agentsam-errors/src/index.js';
8
- import {
9
- decodeErrorDetail,
10
- decodeJob,
11
- encodeErrorDetail,
12
- encodeJob,
13
- fromGrpcError,
14
- toGrpcError,
15
- } from '../../src/knowledge/service/grpc-codec.js';
16
-
17
- function sampleEnvelope() {
18
- return createErrorEnvelope({
19
- reason: 'provider_budget_exhausted',
20
- message: 'Provider account budget is exhausted.',
21
- source: { kind: 'provider', name: 'openai', service: 'responses' },
22
- resolution_owner: 'agentsam',
23
- severity: 'blocking_internal',
24
- remediation: { action: 'inspect_platform', message: 'AgentSam must inspect its platform-owned OpenAI account.' },
25
- domain: 'provider',
26
- tool: 'openai',
27
- stage: 'request',
28
- provider: 'openai',
29
- provider_code: 'project_spend_limit_exceeded',
30
- request_id: 'req_123',
31
- trace_id: 'trace_123',
32
- transport: 'grpc',
33
- resource: { type: 'provider_account', id: 'platform', name: 'OpenAI' },
34
- native: { code: 'project_spend_limit_exceeded', exception_type: 'insufficient_quota' },
35
- environment: { component: 'responses', runtime: 'node', platform: 'linux' },
36
- details: { tier: 'default' },
37
- });
38
- }
39
-
40
- test('protobuf ErrorDetail preserves the canonical AgentSam envelope', () => {
41
- const source = sampleEnvelope();
42
- const roundTrip = decodeErrorDetail(encodeErrorDetail(source));
43
- assert.deepEqual(roundTrip, source);
44
- });
45
-
46
- test('gRPC exception metadata round-trips one canonical AgentSamError', () => {
47
- const source = sampleEnvelope();
48
- const wireError = toGrpcError(new AgentSamError(source));
49
- const decoded = fromGrpcError(wireError);
50
- assert.ok(decoded instanceof AgentSamError);
51
- assert.deepEqual(decoded.envelope, source);
52
- assert.equal(decoded.grpcCode, 8);
53
- assert.equal(decoded.rpcCode, 'RESOURCE_EXHAUSTED');
54
- });
55
-
56
- test('durable job protobuf retains structured failure and compatibility message', () => {
57
- const failure = sampleEnvelope();
58
- const message = encodeJob({
59
- id: '11111111-1111-1111-1111-111111111111',
60
- status: 'failed',
61
- attempts: 2,
62
- created_at: '2026-09-17T00:00:00.000Z',
63
- updated_at: '2026-09-17T00:01:00.000Z',
64
- result: null,
65
- failure,
66
- });
67
- const decoded = decodeJob(message);
68
- assert.equal(decoded.status, 'failed');
69
- assert.deepEqual(decoded.failure, failure);
70
- assert.equal(decoded.error, failure.message);
71
- });
@@ -1,147 +0,0 @@
1
- /**
2
- * Feature-packet resolver tests — package-local oauth-login-portal compartment.
3
- */
4
- import assert from 'node:assert/strict';
5
- import fs from 'node:fs';
6
- import os from 'node:os';
7
- import path from 'node:path';
8
- import test from 'node:test';
9
- import { fileURLToPath } from 'node:url';
10
-
11
- import {
12
- formatResourcesSummary,
13
- getIdentityProviderTemplate,
14
- loadIdentityResources,
15
- loadOAuthLoginPortalFeature,
16
- resolveAuthFeature,
17
- writeFeatureSelections,
18
- writeFeaturesResolved,
19
- } from '../../src/features/resolve.js';
20
-
21
- const SDK_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
22
-
23
- test('oauth-login-portal feature packet loads with artifacts', () => {
24
- const feature = loadOAuthLoginPortalFeature();
25
- assert.equal(feature.id, 'identity.oauth-login-portal');
26
- assert.ok(Array.isArray(feature.artifacts));
27
- assert.ok(feature.artifacts.some((a) => a.kind === 'provider-catalog'));
28
- assert.ok(!fs.existsSync(path.join(SDK_ROOT, 'protocol/identity')));
29
- assert.ok(!fs.existsSync(path.join(SDK_ROOT, 'protocol/features/auth.json')));
30
- });
31
-
32
- test('auth feature resolves real D1 resources, not a pretend iam-d1 profile', () => {
33
- const resolved = resolveAuthFeature({
34
- selected: true,
35
- capabilities: ['identity.init'],
36
- provider_template: 'google',
37
- selected_at: '2026-09-24T04:25:12.860Z',
38
- });
39
- assert.equal(resolved.provider_template, 'google');
40
- assert.equal(resolved.provider.id, 'google');
41
- assert.equal(resolved.provider.status, 'ready');
42
- assert.equal(resolved.schema_profile, undefined);
43
- assert.equal(resolved.resources.engine, 'd1');
44
- assert.deepEqual(resolved.resources.migration_sources, [
45
- 'src/migrations/0001_identity_core.sql',
46
- 'src/migrations/0002_company.sql',
47
- 'src/migrations/0003_accounts_ssot.sql',
48
- ]);
49
- const names = resolved.resources.tables.map((t) => t.name);
50
- assert.deepEqual(names, [
51
- 'accounts',
52
- 'auth_users',
53
- 'auth_sessions',
54
- 'account_identities',
55
- 'oauth_states',
56
- 'password_reset_tokens',
57
- 'company',
58
- ]);
59
- assert.match(formatResourcesSummary(resolved.resources), /tables=accounts,auth_users,/);
60
- assert.doesNotMatch(formatResourcesSummary(resolved.resources), /iam-d1/);
61
- });
62
-
63
- test('legacy iam provider_template normalizes to inneranimalmedia', () => {
64
- const resolved = resolveAuthFeature({
65
- selected: true,
66
- capabilities: ['identity.init'],
67
- provider_template: 'iam',
68
- });
69
- assert.equal(resolved.provider_template, 'inneranimalmedia');
70
- assert.equal(resolved.provider.id, 'inneranimalmedia');
71
- assert.equal(resolved.provider.oauth_provider_key, 'iam');
72
- assert.equal(resolved.provider.status, 'ready');
73
- });
74
-
75
- test('cloudflare is registered ready in provider catalog', () => {
76
- const provider = getIdentityProviderTemplate('cloudflare');
77
- assert.equal(provider?.status, 'ready');
78
- assert.equal(provider?.registered, true);
79
- });
80
-
81
- test('resources.json indexes D1 tables without owning DDL', () => {
82
- const resources = loadIdentityResources();
83
- assert.equal(resources.engine, 'd1');
84
- assert.deepEqual(resources.migration_sources, [
85
- 'src/migrations/0001_identity_core.sql',
86
- 'src/migrations/0002_company.sql',
87
- 'src/migrations/0003_accounts_ssot.sql',
88
- ]);
89
- const names = resources.tables.map((t) => t.name);
90
- assert.ok(names.includes('auth_users'));
91
- assert.ok(names.includes('company'));
92
- });
93
-
94
- test('writeFeatureSelections emits schema_version 2 and resolved snapshot', () => {
95
- const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-features-'));
96
- try {
97
- fs.mkdirSync(path.join(cwd, '.agentsam'), { recursive: true });
98
- const { state_path, resolved_path, snapshot } = writeFeatureSelections(cwd, {
99
- schema_version: 2,
100
- features: {
101
- auth: {
102
- selected: true,
103
- capabilities: ['identity.init'],
104
- provider_template: 'inneranimalmedia',
105
- selected_at: '2026-09-24T04:25:12.860Z',
106
- },
107
- },
108
- });
109
- const state = JSON.parse(fs.readFileSync(state_path, 'utf8'));
110
- assert.equal(state.schema_version, 2);
111
- assert.equal(state.features.auth.provider_template, 'inneranimalmedia');
112
- assert.equal(snapshot.features.auth.resources.engine, 'd1');
113
- assert.ok(snapshot.features.auth.resources.tables.some((t) => t.name === 'auth_users'));
114
- assert.equal(snapshot.features.auth.schema_profile, undefined);
115
- assert.ok(fs.existsSync(resolved_path));
116
- } finally {
117
- fs.rmSync(cwd, { recursive: true, force: true });
118
- }
119
- });
120
-
121
- test('sdk-style project selections resolve against package packet without local machine state', () => {
122
- const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-sdk-feature-select-'));
123
- try {
124
- const { snapshot } = writeFeaturesResolved(cwd, null, {
125
- selections: {
126
- schema_version: 2,
127
- features: {
128
- auth: {
129
- selected: true,
130
- capabilities: ['identity.init'],
131
- provider_template: 'inneranimalmedia',
132
- },
133
- },
134
- },
135
- });
136
- assert.equal(snapshot.schema, 'agentsam.features.resolved.v1');
137
- assert.equal(snapshot.features.auth.provider_template, 'inneranimalmedia');
138
- assert.equal(snapshot.features.auth.feature.id, 'identity.oauth-login-portal');
139
- assert.equal(snapshot.features.auth.resources.engine, 'd1');
140
- assert.match(
141
- formatResourcesSummary(snapshot.features.auth.resources),
142
- /auth_users,auth_sessions,account_identities/,
143
- );
144
- } finally {
145
- fs.rmSync(cwd, { recursive: true, force: true });
146
- }
147
- });
@@ -1,67 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { describe, it } from 'node:test';
3
- import {
4
- AGENTSAM_ICON_KEYS,
5
- normalizeIconKey,
6
- isAgentsamIconKey,
7
- resolveCliIconGlyph,
8
- createIconRenderer,
9
- ICON_ALIASES,
10
- } from '../../protocol/ui/icon-registry.mjs';
11
- import iconSchema from '../../protocol/ui/icon.v1.schema.json' with { type: 'json' };
12
-
13
- describe('agentsam.icon.v1', () => {
14
- it('schema enum matches registry keys', () => {
15
- assert.deepEqual([...(iconSchema.enum || [])].sort(), [...AGENTSAM_ICON_KEYS].sort());
16
- });
17
-
18
- it('includes generic fallback and first-class AgentSam concepts', () => {
19
- for (const key of [
20
- 'generic',
21
- 'database',
22
- 'vector',
23
- 'identity',
24
- 'key',
25
- 'brand',
26
- 'theme',
27
- 'app',
28
- 'repository',
29
- 'connection',
30
- 'metrics',
31
- ]) {
32
- assert.equal(isAgentsamIconKey(key), true, key);
33
- }
34
- });
35
-
36
- it('normalizes aliases and rejects lucide/emoji-like values to generic', () => {
37
- assert.equal(normalizeIconKey('db'), 'database');
38
- assert.equal(normalizeIconKey('repo'), 'repository');
39
- assert.equal(normalizeIconKey('lucide-database'), 'database');
40
- assert.equal(normalizeIconKey('🗄️'), 'generic');
41
- assert.equal(normalizeIconKey(''), 'generic');
42
- assert.equal(normalizeIconKey('unknown-future-key'), 'generic');
43
- });
44
-
45
- it('createIconRenderer falls back to generic without throwing', () => {
46
- const render = createIconRenderer(
47
- { database: 'DB', generic: 'G', identity: 'ID' },
48
- 'FALLBACK',
49
- );
50
- assert.equal(render('database'), 'DB');
51
- assert.equal(render('db'), 'DB');
52
- assert.equal(render('not-a-real-icon'), 'G');
53
- assert.equal(render('identity'), 'ID');
54
- });
55
-
56
- it('CLI glyphs always resolve', () => {
57
- assert.ok(resolveCliIconGlyph('database'));
58
- assert.equal(resolveCliIconGlyph('totally-unknown'), resolveCliIconGlyph('generic'));
59
- });
60
-
61
- it('aliases only map to canonical vocabulary', () => {
62
- for (const [from, to] of Object.entries(ICON_ALIASES)) {
63
- assert.equal(isAgentsamIconKey(to), true, `${from} → ${to}`);
64
- assert.equal(normalizeIconKey(from), to);
65
- }
66
- });
67
- });
@@ -1,30 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { describe, it } from 'node:test';
3
- import {
4
- encodeEmbeddingChoice,
5
- parseEmbeddingChoice,
6
- looksLikeEmbedModel,
7
- } from '../../src/indexing/ingest/discover-models.js';
8
-
9
- describe('ingest model discovery helpers', () => {
10
- it('encodes/decodes embedding choices without breaking model ids that contain colons', () => {
11
- const value = encodeEmbeddingChoice('ollama', 'mxbai-embed-large:latest', 1024);
12
- assert.equal(value, 'ollama|mxbai-embed-large:latest|1024');
13
- const parsed = parseEmbeddingChoice(value);
14
- assert.equal(parsed.provider, 'ollama');
15
- assert.equal(parsed.model, 'mxbai-embed-large:latest');
16
- assert.equal(parsed.dimensions, 1024);
17
- });
18
-
19
- it('treats none as disabled embedding', () => {
20
- const parsed = parseEmbeddingChoice('none');
21
- assert.equal(parsed.provider, 'none');
22
- assert.equal(parsed.dimensions, 0);
23
- });
24
-
25
- it('classifies ollama embed vs chat tags', () => {
26
- assert.equal(looksLikeEmbedModel('mxbai-embed-large:latest'), true);
27
- assert.equal(looksLikeEmbedModel('nomic-embed-text'), true);
28
- assert.equal(looksLikeEmbedModel('qwen2.5-coder:latest'), false);
29
- });
30
- });
@@ -1,46 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import fs from 'node:fs';
4
- import os from 'node:os';
5
- import path from 'node:path';
6
- import { spawnSync } from 'node:child_process';
7
- import { fileURLToPath } from 'node:url';
8
-
9
- const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
10
- const CLI = path.join(ROOT, 'bin/agentsam');
11
-
12
- function run(args, cwd = ROOT) {
13
- return spawnSync(process.execPath, [CLI, ...args], {
14
- cwd,
15
- encoding: 'utf8',
16
- env: { ...process.env, NO_COLOR: '1' },
17
- });
18
- }
19
-
20
- function jsonFrom(text) {
21
- const start = text.indexOf('{');
22
- assert.notEqual(start, -1, `expected JSON output, received: ${text}`);
23
- return JSON.parse(text.slice(start));
24
- }
25
-
26
- test('agentsam inspect --help documents the positional path world-state contract', () => {
27
- const result = run(['inspect', '--help']);
28
- assert.equal(result.status, 0, result.stderr);
29
- assert.match(result.stdout, /agentsam inspect \[path\]/);
30
- assert.match(result.stdout, /deterministic repository world state/i);
31
- assert.match(result.stdout, /No model, embeddings, network, provider spend/i);
32
- });
33
-
34
- test('agentsam inspect accepts a repository path as the first positional argument', () => {
35
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'agentsam-inspect-path-'));
36
- fs.writeFileSync(path.join(root, 'package.json'), JSON.stringify({ name: 'inspect-fixture', version: '1.0.0' }));
37
- fs.mkdirSync(path.join(root, 'src'));
38
- fs.writeFileSync(path.join(root, 'src/index.js'), 'export function fixture() { return 42; }\n');
39
-
40
- const result = run(['inspect', root, '--json', '--index']);
41
- assert.equal(result.status, 0, result.stderr || result.stdout);
42
- const output = jsonFrom(result.stdout);
43
- assert.ok(output.snapshot_id);
44
- assert.ok(output.merkle_root || output.tree?.merkle_root);
45
- assert.match(JSON.stringify(output), /inspect-fixture|src\/index\.js/);
46
- });