@inneranimalmedia/agentsam-sdk 2.6.2 → 2.6.4

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 (661) hide show
  1. package/AGENTSAM.md +51 -1
  2. package/README.md +95 -0
  3. package/apps/README.md +34 -0
  4. package/apps/cad-creator/README.md +728 -0
  5. package/apps/cad-creator/shared/cad/package.json +19 -0
  6. package/apps/cad-creator/shared/cad/src/domain/operations.ts +7 -0
  7. package/apps/cad-creator/shared/cad/src/domain/project-contract.d.ts +3 -0
  8. package/apps/cad-creator/shared/cad/src/domain/project-contract.js +75 -0
  9. package/apps/cad-creator/shared/cad/src/domain/project-tools.d.ts +1 -0
  10. package/apps/cad-creator/shared/cad/src/domain/project-tools.js +24 -0
  11. package/apps/cad-creator/shared/cad/src/domain/validation.ts +191 -0
  12. package/apps/cad-creator/shared/cad/src/index.ts +4 -0
  13. package/apps/cad-creator/shared/cad/src/robotics/types.ts +232 -0
  14. package/apps/cad-creator/shared/cad/src/types.ts +507 -0
  15. package/apps/cad-creator/shared/cad/tsconfig.json +14 -0
  16. package/bin/agentsam +16 -1
  17. package/docs/AUTORAG.md +58 -0
  18. package/docs/BRAND_INTELLIGENCE.md +30 -0
  19. package/docs/CLI_SHELL.md +4 -2
  20. package/docs/CMS_CONTEXTUAL_COMPOSER.md +38 -0
  21. package/docs/MERKLE.md +4 -0
  22. package/docs/PROJECT_CONFIG.md +3 -0
  23. package/docs/REPOSITORY_KNOWLEDGE.md +2 -0
  24. package/docs/THEME_REFINERY.md +120 -0
  25. package/docs/architecture/AGENTSAM_DISTRIBUTION_OWNERSHIP.md +176 -0
  26. package/docs/architecture/AGENTSAM_GO_RUNTIME.md +282 -0
  27. package/docs/architecture/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  28. package/docs/architecture/FS_E2E_CLOSURE_RECEIPT.md +59 -0
  29. package/docs/architecture/LOCAL_FS_AUTHORITY.md +38 -0
  30. package/docs/architecture/LOCAL_STUDIO_CLOUDFLARE_OAUTH.md +28 -0
  31. package/docs/architecture/PLAN_CLI_AND_LOCAL_STUDIO_DESKTOP.md +96 -0
  32. package/docs/architecture/PROVIDER-TOOLS-AND-COMPACTION.md +60 -0
  33. package/docs/architecture/SAM_ACTIVITY_RECOVERY_RECEIPT.md +39 -0
  34. package/docs/architecture/SAM_DECISION_WORK_RECEIPT.md +54 -0
  35. package/docs/architecture/SAM_KERNEL.md +181 -0
  36. package/docs/architecture/SAM_MACHINE_NORMALIZATION_PRECOMMIT_REPORT.md +208 -0
  37. package/docs/architecture/SLASH_SKILLS_PORTABLE.md +116 -0
  38. package/docs/architecture/STORAGE.md +87 -0
  39. package/docs/architecture/fs-e2e-receipt.latest.json +42 -0
  40. package/docs/architecture/previews/codebaseindex-guided-path/CODEBASEINDEX_GUIDED_PATH.md +202 -0
  41. package/docs/architecture/previews/codebaseindex-guided-path/index.html +321 -0
  42. package/docs/cad-project-tools.md +69 -0
  43. package/docs/cms-scaffolding-pattern-reference.md +73 -0
  44. package/docs/plans/AGENTSAM-INTERACTIVE-UI-REQUIREMENTS-codex-tui-20260919.md +113 -0
  45. package/docs/plans/AGENTSAM-INTERACTIVE-UI-REQUIREMENTS.md +85 -0
  46. package/docs/plans/AGENTSAM-MCP-CLIENT-2026-09-19.md +181 -0
  47. package/docs/plans/ASBD-PORTABLE-WORKGRAPH-UI-DEFERRED.md +34 -0
  48. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +258 -0
  49. package/docs/plans/MULTI-AGENT-SPRINTS-2026-09-19.md +373 -0
  50. package/docs/plans/NEXT-AGENT-HANDOFF.md +167 -0
  51. package/docs/plans/RECONCILIATION-2026-09-19.md +178 -0
  52. package/docs/plugins.md +43 -0
  53. package/docs/tools/README.md +57 -0
  54. package/docs/tools/agent-and-orchestration.md +49 -0
  55. package/docs/tools/browser-and-research.md +46 -0
  56. package/docs/tools/cloudflare-platform.md +32 -0
  57. package/docs/tools/cms.md +25 -0
  58. package/docs/tools/communications.md +41 -0
  59. package/docs/tools/database-and-storage.md +62 -0
  60. package/docs/tools/design-and-media.md +64 -0
  61. package/docs/tools/filesystem-and-code.md +55 -0
  62. package/docs/tools/github.md +56 -0
  63. package/docs/tools/integrations-and-misc.md +16 -0
  64. package/docs/tools/memory.md +21 -0
  65. package/docs/tools/terminal-and-execution.md +29 -0
  66. package/docs/tools/tickets-and-platform.md +30 -0
  67. package/migrations/d1/0001_agentsam_plugin_runtime.sql +177 -0
  68. package/migrations/d1/0002_agentsam_ticket_ownership.sql +8 -0
  69. package/migrations/d1/0002_dynamic_model_policies.sql +23 -0
  70. package/migrations/d1/0003_expand_tool_handler_families.sql +18 -0
  71. package/migrations/d1/0004_project_aware_retrieval_lanes.sql +24 -0
  72. package/migrations/d1/0005_portable_knowledge_identity.sql +104 -0
  73. package/migrations/d1/0006_repair_ops_trail_account_scope.sql +14 -0
  74. package/migrations/d1/0007_repair_ops_trail_agent_run_account.sql +13 -0
  75. package/migrations/d1/0008_backfill_knowledge_run_legacy_tenant.sql +14 -0
  76. package/migrations/d1/0009_normalize_cloudflare_plugin_installations.sql +137 -0
  77. package/migrations/d1/0010_portable_tickets_memory.sql +140 -0
  78. package/migrations/d1/0011_agentsam_skill_v2.sql +185 -0
  79. package/migrations/d1/0011b_agentsam_skill_v2_cutover.sql +22 -0
  80. package/migrations/d1/0011c_agentsam_skill_v2_backfill.sql +76 -0
  81. package/migrations/d1/0011d_agentsam_skill_v2_retrieval_revisions.sql +50 -0
  82. package/migrations/d1/0012_agentsam_tools_required_seed.sql +67 -0
  83. package/migrations/d1/0013_identity_oauth_states.sql +15 -0
  84. package/migrations/d1/0014_auth_event_log.sql +20 -0
  85. package/migrations/d1/0015_identity_oauth_state_app_id.sql +3 -0
  86. package/migrations/d1/README_PORTABLE_CONTROL_PLANE.md +16 -0
  87. package/migrations/runtime/0001_cli_runtime.sql +67 -0
  88. package/migrations/runtime/0002_project_sessions.sql +15 -0
  89. package/migrations/runtime/0003_provider_continuations.sql +8 -0
  90. package/migrations/sqlite/agentsam_skill_retrieval.portable.sql +42 -0
  91. package/package.json +107 -12
  92. package/packages/agentsam-brand/README.md +21 -0
  93. package/packages/agentsam-brand/package.json +22 -0
  94. package/packages/agentsam-brand/src/contract.js +59 -0
  95. package/packages/agentsam-brand/src/extract.js +126 -0
  96. package/packages/agentsam-brand/src/goap-actions.js +73 -0
  97. package/packages/agentsam-brand/src/index.js +48 -0
  98. package/packages/agentsam-brand/src/plan.js +115 -0
  99. package/packages/agentsam-brand/src/resolve.js +139 -0
  100. package/packages/agentsam-brand/src/scan.js +250 -0
  101. package/packages/agentsam-brand/test/brand-scan.test.mjs +106 -0
  102. package/packages/agentsam-contracts/README.md +23 -0
  103. package/packages/agentsam-contracts/package.json +32 -0
  104. package/packages/agentsam-contracts/src/adapter.ts +25 -0
  105. package/packages/agentsam-contracts/src/agent.ts +35 -0
  106. package/packages/agentsam-contracts/src/artifacts.ts +33 -0
  107. package/packages/agentsam-contracts/src/authority.ts +29 -0
  108. package/packages/agentsam-contracts/src/context.ts +16 -0
  109. package/packages/agentsam-contracts/src/errors.ts +62 -0
  110. package/packages/agentsam-contracts/src/events.ts +47 -0
  111. package/packages/agentsam-contracts/src/execution.ts +50 -0
  112. package/packages/agentsam-contracts/src/hooks.ts +40 -0
  113. package/packages/agentsam-contracts/src/identity.ts +16 -0
  114. package/packages/agentsam-contracts/src/index.ts +14 -0
  115. package/packages/agentsam-contracts/src/models.ts +9 -0
  116. package/packages/agentsam-contracts/src/providers.ts +33 -0
  117. package/packages/agentsam-contracts/src/repository.ts +64 -0
  118. package/packages/agentsam-contracts/src/tools.ts +98 -0
  119. package/packages/agentsam-contracts/test/contracts.test.mjs +16 -0
  120. package/packages/agentsam-contracts/test/errors-catalog.test.mjs +25 -0
  121. package/packages/agentsam-contracts/test/repository.test.mjs +18 -0
  122. package/packages/agentsam-contracts/tsconfig.json +12 -0
  123. package/packages/agentsam-errors/package.json +17 -0
  124. package/packages/agentsam-errors/src/adapters/anthropic.js +15 -0
  125. package/packages/agentsam-errors/src/adapters/cad.js +109 -0
  126. package/packages/agentsam-errors/src/adapters/cloudflare.js +21 -0
  127. package/packages/agentsam-errors/src/adapters/cursor.js +4 -0
  128. package/packages/agentsam-errors/src/adapters/device.js +38 -0
  129. package/packages/agentsam-errors/src/adapters/docker.js +28 -0
  130. package/packages/agentsam-errors/src/adapters/gcp.js +14 -0
  131. package/packages/agentsam-errors/src/adapters/github.js +22 -0
  132. package/packages/agentsam-errors/src/adapters/google.js +17 -0
  133. package/packages/agentsam-errors/src/adapters/index.js +55 -0
  134. package/packages/agentsam-errors/src/adapters/internal.js +40 -0
  135. package/packages/agentsam-errors/src/adapters/oauth.js +24 -0
  136. package/packages/agentsam-errors/src/adapters/openai.js +17 -0
  137. package/packages/agentsam-errors/src/adapters/process.js +35 -0
  138. package/packages/agentsam-errors/src/adapters/provider.js +114 -0
  139. package/packages/agentsam-errors/src/envelope.js +239 -0
  140. package/packages/agentsam-errors/src/error.js +24 -0
  141. package/packages/agentsam-errors/src/fingerprint.js +35 -0
  142. package/packages/agentsam-errors/src/index.js +11 -0
  143. package/packages/agentsam-errors/src/normalize.js +30 -0
  144. package/packages/agentsam-errors/src/recovery.js +301 -0
  145. package/packages/agentsam-errors/src/redaction.js +52 -0
  146. package/packages/agentsam-errors/src/render.js +16 -0
  147. package/packages/agentsam-errors/src/retry.js +10 -0
  148. package/packages/agentsam-errors/src/transport.js +52 -0
  149. package/packages/agentsam-errors/src/vocabulary.js +320 -0
  150. package/packages/agentsam-errors/test/envelope.test.mjs +70 -0
  151. package/packages/agentsam-errors/test/providers.test.mjs +99 -0
  152. package/packages/agentsam-errors/test/redaction.test.mjs +21 -0
  153. package/packages/agentsam-errors/test/runtime-cad-device.test.mjs +76 -0
  154. package/packages/agentsam-errors/test/transport.test.mjs +46 -0
  155. package/packages/agentsam-knowledge/package.json +15 -0
  156. package/packages/agentsam-knowledge/src/autorag/index.js +64 -0
  157. package/packages/agentsam-knowledge/src/backends/index.js +26 -0
  158. package/packages/agentsam-knowledge/src/index.js +3 -0
  159. package/packages/agentsam-knowledge/src/providers/index.js +107 -0
  160. package/packages/agentsam-knowledge/test/autorag.test.mjs +42 -0
  161. package/packages/agentsam-nav/README.md +40 -0
  162. package/packages/agentsam-nav/dist/Nav.d.ts +43 -0
  163. package/packages/agentsam-nav/dist/NavCollapsible.d.ts +10 -0
  164. package/packages/agentsam-nav/dist/NavContent.d.ts +2 -0
  165. package/packages/agentsam-nav/dist/NavFooter.d.ts +2 -0
  166. package/packages/agentsam-nav/dist/NavGroup.d.ts +3 -0
  167. package/packages/agentsam-nav/dist/NavHeader.d.ts +2 -0
  168. package/packages/agentsam-nav/dist/NavMenu.d.ts +22 -0
  169. package/packages/agentsam-nav/dist/NavProvider.d.ts +35 -0
  170. package/packages/agentsam-nav/dist/NavTrigger.d.ts +2 -0
  171. package/packages/agentsam-nav/dist/Surfaces.d.ts +41 -0
  172. package/packages/agentsam-nav/dist/browser.d.ts +11 -0
  173. package/packages/agentsam-nav/dist/browser.global.js +132 -0
  174. package/packages/agentsam-nav/dist/browser.js +613 -0
  175. package/packages/agentsam-nav/dist/contracts.d.ts +76 -0
  176. package/packages/agentsam-nav/dist/index.d.ts +11 -0
  177. package/packages/agentsam-nav/dist/index.js +614 -0
  178. package/packages/agentsam-nav/dist/legacy.css +83 -0
  179. package/packages/agentsam-nav/dist/shell.css +113 -0
  180. package/packages/agentsam-nav/dist/theme.css +113 -0
  181. package/packages/agentsam-nav/dist/utils.d.ts +1 -0
  182. package/packages/agentsam-nav/package.json +43 -0
  183. package/packages/agentsam-queue-control/README.md +107 -0
  184. package/packages/agentsam-queue-control/package.json +31 -0
  185. package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +56 -0
  186. package/packages/agentsam-queue-control/src/adapters/cloudflare.js +152 -0
  187. package/packages/agentsam-queue-control/src/adapters/memory.js +38 -0
  188. package/packages/agentsam-queue-control/src/contracts.js +130 -0
  189. package/packages/agentsam-queue-control/src/control-plane.js +141 -0
  190. package/packages/agentsam-queue-control/src/dispatch.js +43 -0
  191. package/packages/agentsam-queue-control/src/index.js +7 -0
  192. package/packages/agentsam-queue-control/src/policy.js +88 -0
  193. package/packages/agentsam-queue-control/src/topology.js +66 -0
  194. package/packages/agentsam-queue-control/test/queue-control.test.mjs +100 -0
  195. package/packages/agentsam-repository/src/goap.js +718 -0
  196. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
  197. package/packages/agentsam-repository/src/index.js +5 -0
  198. package/packages/agentsam-repository/src/merkle/cloudflare-persistence.js +2 -2
  199. package/packages/agentsam-repository/src/tickets.js +184 -0
  200. package/packages/agentsam-repository/src/work-tracking.js +199 -0
  201. package/packages/agentsam-repository/src/workspace-state.js +176 -0
  202. package/packages/agentsam-repository/test/goap-tickets-workspace-state.test.mjs +152 -0
  203. package/packages/connectors/cloudflare/src/index.js +297 -15
  204. package/packages/connectors/cloudflare/src/owner.js +43 -40
  205. package/packages/connectors/cloudflare/src/routes.js +176 -26
  206. package/packages/connectors/cloudflare/tests/connector.test.mjs +137 -2
  207. package/packages/heuristic-theme/README.md +11 -0
  208. package/packages/heuristic-theme/package.json +25 -0
  209. package/packages/heuristic-theme/src/index.js +2 -0
  210. package/packages/heuristic-theme/src/registry.js +36 -0
  211. package/packages/heuristic-theme/src/theme.js +41 -0
  212. package/packages/heuristic-theme/test/theme.test.mjs +26 -0
  213. package/packages/identity/.agentsam/features/oauth-login-portal/agentsam.feature.json +64 -0
  214. package/packages/identity/.agentsam/features/oauth-login-portal/providers.json +96 -0
  215. package/packages/identity/.agentsam/features/oauth-login-portal/resources.json +47 -0
  216. package/packages/identity/.agentsam/features/oauth-login-portal/routes.json +83 -0
  217. package/packages/identity/.agentsam/features/oauth-login-portal/ui.json +35 -0
  218. package/packages/identity/docs/PORTABLE_IDENTITY_ARCHITECTURE.md +50 -0
  219. package/packages/identity/migrations/D1_SCHEMA_MAPPING.md +31 -0
  220. package/packages/identity/migrations/sqlite/001_identity_core.sql +99 -0
  221. package/packages/identity/migrations/sqlite/002_identity_oauth_client.sql +38 -0
  222. package/packages/identity/migrations/sqlite/003_identity_oauth_server.sql +64 -0
  223. package/packages/identity/package.json +4 -3
  224. package/packages/identity/src/adapters/cloudflare-d1/ids.js +4 -0
  225. package/packages/identity/src/adapters/cloudflare-d1/index.js +156 -18
  226. package/packages/identity/src/adapters/sqlite/index.js +319 -0
  227. package/packages/identity/src/app/verify-app.js +95 -0
  228. package/packages/identity/src/contracts/identity-store.js +115 -0
  229. package/packages/identity/src/contracts/provider.js +3 -2
  230. package/packages/identity/src/contracts/route-ids.js +30 -0
  231. package/packages/identity/src/contracts/route-projection.js +218 -0
  232. package/packages/identity/src/contracts/routes.js +11 -0
  233. package/packages/identity/src/core/browser-paths.js +4 -5
  234. package/packages/identity/src/core/constants.js +13 -8
  235. package/packages/identity/src/core/session-policy.js +32 -0
  236. package/packages/identity/src/frontend/auth-portal/pages/login.html +16 -9
  237. package/packages/identity/src/frontend/auth-portal/pages/reset.html +3 -3
  238. package/packages/identity/src/frontend/auth-portal/pages/signup.html +3 -3
  239. package/packages/identity/src/frontend/auth-portal/preview/dashboard-stub.html +1 -1
  240. package/packages/identity/src/index.js +27 -0
  241. package/packages/identity/src/oauth/README.md +10 -4
  242. package/packages/identity/src/oauth/credentials.js +31 -11
  243. package/packages/identity/src/oauth/finalize-inbound.js +1 -1
  244. package/packages/identity/src/oauth/iam-platform.js +13 -12
  245. package/packages/identity/src/oauth/redirect-paths.js +27 -36
  246. package/packages/identity/src/providers/cloudflare/index.js +19 -0
  247. package/packages/identity/src/providers/cloudflare/mapper.js +21 -0
  248. package/packages/identity/src/providers/cloudflare/oauth.js +48 -0
  249. package/packages/identity/src/providers/cloudflare/profile.js +28 -0
  250. package/packages/identity/src/providers/index.js +18 -2
  251. package/packages/identity/src/server/identity-service.js +35 -8
  252. package/packages/identity/src/server/mount-policy.js +30 -0
  253. package/packages/identity/src/server/post-auth.js +79 -0
  254. package/packages/identity/src/server/worker-router.js +153 -66
  255. package/packages/identity/tests/finalize-inbound-oauth.test.mjs +6 -6
  256. package/packages/identity/tests/iam-provider.test.mjs +1 -1
  257. package/packages/identity/tests/identity-service.test.mjs +47 -1
  258. package/packages/identity/tests/oauth-credentials.test.mjs +3 -1
  259. package/packages/identity/tests/portable-identity-architecture.test.mjs +157 -0
  260. package/packages/identity/tests/session-routes-policy.test.mjs +21 -0
  261. package/packages/providers/completeful/README.md +38 -0
  262. package/packages/providers/completeful/package.json +29 -0
  263. package/packages/providers/completeful/src/client.js +162 -0
  264. package/packages/providers/completeful/src/events.js +49 -0
  265. package/packages/providers/completeful/src/index.js +22 -0
  266. package/packages/providers/completeful/src/tools.js +579 -0
  267. package/packages/providers/completeful/src/webhooks.js +55 -0
  268. package/packages/providers/completeful/test/provider.test.mjs +196 -0
  269. package/packages/theme-church-site/README.md +10 -0
  270. package/packages/theme-church-site/package.json +31 -0
  271. package/packages/theme-church-site/src/harvest.json +14 -0
  272. package/packages/theme-church-site/src/index.js +85 -0
  273. package/packages/theme-church-site/test/theme.test.mjs +19 -0
  274. package/packages/theme-companions-site/README.md +10 -0
  275. package/packages/theme-companions-site/package.json +31 -0
  276. package/packages/theme-companions-site/src/harvest.json +12 -0
  277. package/packages/theme-companions-site/src/index.js +83 -0
  278. package/packages/theme-companions-site/test/theme.test.mjs +19 -0
  279. package/packages/theme-floors-site/README.md +10 -0
  280. package/packages/theme-floors-site/package.json +31 -0
  281. package/packages/theme-floors-site/src/harvest.json +14 -0
  282. package/packages/theme-floors-site/src/index.js +83 -0
  283. package/packages/theme-floors-site/test/theme.test.mjs +19 -0
  284. package/packages/theme-fuelnfree-site/README.md +10 -0
  285. package/packages/theme-fuelnfree-site/package.json +31 -0
  286. package/packages/theme-fuelnfree-site/src/harvest.json +13 -0
  287. package/packages/theme-fuelnfree-site/src/index.js +82 -0
  288. package/packages/theme-fuelnfree-site/test/theme.test.mjs +19 -0
  289. package/packages/theme-handyman-site/README.md +10 -0
  290. package/packages/theme-handyman-site/package.json +31 -0
  291. package/packages/theme-handyman-site/src/harvest.json +10 -0
  292. package/packages/theme-handyman-site/src/index.js +84 -0
  293. package/packages/theme-handyman-site/test/theme.test.mjs +19 -0
  294. package/packages/theme-insurance-site/README.md +10 -0
  295. package/packages/theme-insurance-site/package.json +31 -0
  296. package/packages/theme-insurance-site/src/harvest.json +10 -0
  297. package/packages/theme-insurance-site/src/index.js +84 -0
  298. package/packages/theme-insurance-site/test/theme.test.mjs +19 -0
  299. package/packages/theme-shinshu-site/README.md +10 -0
  300. package/packages/theme-shinshu-site/package.json +31 -0
  301. package/packages/theme-shinshu-site/src/harvest.json +12 -0
  302. package/packages/theme-shinshu-site/src/index.js +84 -0
  303. package/packages/theme-shinshu-site/test/theme.test.mjs +19 -0
  304. package/packages/work-graph/README.md +49 -0
  305. package/packages/work-graph/package.json +19 -0
  306. package/packages/work-graph/prototype/README.md +32 -0
  307. package/packages/work-graph/prototype/data/demo-workgraph.js +47 -0
  308. package/packages/work-graph/prototype/renderers/timeline-model.js +21 -0
  309. package/packages/work-graph/prototype/renderers/workgraph-runtime.js +38 -0
  310. package/packages/work-graph/prototype-gnantt.html +655 -0
  311. package/packages/work-graph/src/adapters/business/projects.js +23 -0
  312. package/packages/work-graph/src/adapters/engineering/git.js +22 -0
  313. package/packages/work-graph/src/adapters/engineering/mcp.js +22 -0
  314. package/packages/work-graph/src/index.js +76 -0
  315. package/packages/work-graph/src/renderers/gantt-model.js +11 -0
  316. package/packages/work-graph/src/renderers/timeline.js +16 -0
  317. package/packages/work-graph/test/work-graph.test.mjs +37 -0
  318. package/protocol/README.md +12 -0
  319. package/protocol/apps/agentsam.app.v1.schema.json +51 -0
  320. package/protocol/brand/brandpack.v1.schema.json +43 -0
  321. package/protocol/capabilities/cloudflare-cpu-audit-input.schema.json +30 -6
  322. package/protocol/capabilities/cloudflare-cpu-profile-input.schema.json +18 -4
  323. package/protocol/capabilities/cloudflare-wrangler-native-input.schema.json +59 -10
  324. package/protocol/capabilities/knowledge-search-input.schema.json +35 -0
  325. package/protocol/capabilities/manifest.json +163 -1
  326. package/protocol/capabilities/repository-audit-input.schema.json +39 -6
  327. package/protocol/capabilities/repository-snapshot-input.schema.json +15 -3
  328. package/protocol/capabilities/terminal-exec-input.schema.json +55 -0
  329. package/protocol/commerce/catalog.v1.json +50 -0
  330. package/protocol/credentials/issue.v1.schema.json +38 -0
  331. package/protocol/database/connection.v1.schema.json +41 -0
  332. package/protocol/embeddings/embedding-profile.v1.schema.json +20 -0
  333. package/protocol/errors/error-catalog.json +164 -0
  334. package/protocol/errors/error-envelope.schema.json +678 -0
  335. package/protocol/errors/recovery.v1.schema.json +50 -0
  336. package/protocol/features/README.md +57 -0
  337. package/protocol/features/agentsam.feature.v1.schema.json +290 -0
  338. package/protocol/features/catalog.json +65 -0
  339. package/protocol/features/examples/provider-resend.feature.json +17 -0
  340. package/protocol/go/agentsam-go-runtime.v1.json +17 -0
  341. package/protocol/knowledge/LIFECYCLE.md +140 -0
  342. package/protocol/knowledge/README.md +4 -0
  343. package/protocol/presets/catalog.json +128 -19
  344. package/protocol/rpc/v1/errors.proto +24 -0
  345. package/protocol/runtime/workspace-fs.v1.schema.json +71 -0
  346. package/protocol/sam/activity.v1.schema.json +48 -0
  347. package/protocol/sam/answer.v1.schema.json +35 -0
  348. package/protocol/sam/calibration.v1.schema.json +21 -0
  349. package/protocol/sam/decision-receipt.v1.schema.json +29 -0
  350. package/protocol/sam/evaluation.v1.schema.json +19 -0
  351. package/protocol/sam/operation.schema.json +66 -0
  352. package/protocol/sam/outcome.v1.schema.json +36 -0
  353. package/protocol/sam/question.v1.schema.json +26 -0
  354. package/protocol/sam/registry.seed.json +153 -0
  355. package/protocol/sam/result.schema.json +53 -0
  356. package/protocol/sam/state.v1.schema.json +23 -0
  357. package/protocol/skills/agentsam.interaction.v1.schema.json +50 -0
  358. package/protocol/skills/agentsam.skill.v1.schema.json +57 -0
  359. package/protocol/theme-refinery/d1-reconciliation.md +48 -0
  360. package/protocol/theme-refinery/product-metadata.schema.json +27 -0
  361. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +318 -0
  362. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +472 -0
  363. package/protocol/theme-refinery/reconciliation-receipt.schema.json +83 -0
  364. package/protocol/ui/icon-registry.mjs +226 -0
  365. package/protocol/ui/icon.v1.schema.json +51 -0
  366. package/services/cad/server.py +249 -2
  367. package/skills/README.md +22 -9
  368. package/skills/agentsam-codebaseindex/SKILL.md +225 -0
  369. package/skills/catalog.json +14 -0
  370. package/src/agent/capability-adapter.js +15 -5
  371. package/src/agent/index.js +2 -1
  372. package/src/agent/model-turn.js +51 -0
  373. package/src/agent/responses-runner.js +304 -38
  374. package/src/capabilities/index.js +1 -0
  375. package/src/capabilities/terminal-exec.js +78 -0
  376. package/src/cli/command-catalog.js +130 -0
  377. package/src/cli/dispatch.js +48 -0
  378. package/src/cli.js +160 -10
  379. package/src/cloudflare/index.js +6 -0
  380. package/src/cloudflare/runtime-status.js +393 -0
  381. package/src/cloudflare/wrangler.js +17 -1
  382. package/src/commands/api-key.js +244 -0
  383. package/src/commands/app.js +138 -0
  384. package/src/commands/autorag.js +77 -0
  385. package/src/commands/brand.js +291 -0
  386. package/src/commands/cad.js +1 -0
  387. package/src/commands/codebaseindex.js +688 -0
  388. package/src/commands/connections.js +126 -29
  389. package/src/commands/context-economics.js +8 -0
  390. package/src/commands/db.js +7 -0
  391. package/src/commands/env.js +155 -27
  392. package/src/commands/eval.js +209 -14
  393. package/src/commands/go.js +678 -0
  394. package/src/commands/goap.js +176 -0
  395. package/src/commands/identity-init.js +27 -3
  396. package/src/commands/identity-protocol.js +195 -0
  397. package/src/commands/interaction-clack.js +115 -0
  398. package/src/commands/knowledge.js +64 -5
  399. package/src/commands/mcp.js +341 -0
  400. package/src/commands/merkle-persist.js +3 -1
  401. package/src/commands/merkle.js +18 -3
  402. package/src/commands/models.js +110 -24
  403. package/src/commands/plugins.js +175 -0
  404. package/src/commands/preferences.js +28 -8
  405. package/src/commands/product.js +53 -10
  406. package/src/commands/providers.js +173 -44
  407. package/src/commands/resume.js +9 -5
  408. package/src/commands/runtime-status.js +154 -0
  409. package/src/commands/shell.js +508 -56
  410. package/src/commands/skill.js +248 -0
  411. package/src/commands/skills.js +1 -1
  412. package/src/commands/start-local.js +4 -0
  413. package/src/commands/status.js +82 -7
  414. package/src/commands/tunnel.js +228 -195
  415. package/src/commands/whoami.js +156 -12
  416. package/src/context/budget.js +6 -0
  417. package/src/context/index.js +2 -1
  418. package/src/context/project-card.js +75 -0
  419. package/src/errors/contract.js +34 -211
  420. package/src/errors/diagnostic.js +95 -51
  421. package/src/errors/index.js +6 -13
  422. package/src/eval/index.js +6 -0
  423. package/src/eval/live.js +439 -0
  424. package/src/features/resolve.js +242 -0
  425. package/src/go/build.js +298 -0
  426. package/src/go/cloudflare.js +608 -0
  427. package/src/go/container.js +120 -0
  428. package/src/go/contract.js +144 -0
  429. package/src/go/discover.js +212 -0
  430. package/src/go/index.js +25 -0
  431. package/src/go/native-probe-runner.mjs +119 -0
  432. package/src/go/official-registry.js +280 -0
  433. package/src/go/official-release.js +10 -0
  434. package/src/go/receipts.js +144 -0
  435. package/src/go/verify.js +38 -0
  436. package/src/index.js +127 -1
  437. package/src/indexing/ingest/discover-models.js +298 -0
  438. package/src/indexing/ingest/inventory.js +243 -0
  439. package/src/indexing/ingest/job-graph.js +181 -0
  440. package/src/indexing/ingest/materials.js +210 -0
  441. package/src/knowledge/config.js +13 -5
  442. package/src/knowledge/engine.js +23 -8
  443. package/src/knowledge/index.js +1 -0
  444. package/src/knowledge/lane-registry.js +46 -0
  445. package/src/knowledge/providers/gemini.js +48 -8
  446. package/src/knowledge/service/client.js +13 -1
  447. package/src/knowledge/service/grpc-codec.js +156 -53
  448. package/src/knowledge/service/job-engine.js +133 -11
  449. package/src/knowledge/service/job-worker.js +34 -5
  450. package/src/knowledge/service/server.js +10 -1
  451. package/src/knowledge/store-discovery.js +77 -0
  452. package/src/lib/account-session.js +8 -2
  453. package/src/lib/agent-instructions.js +3 -0
  454. package/src/lib/auth.js +7 -3
  455. package/src/lib/cad/blender.js +42 -3
  456. package/src/lib/cad/d1-project-store.js +43 -0
  457. package/src/lib/cad/discovery.js +616 -0
  458. package/src/lib/cad/docker-executor.js +352 -0
  459. package/src/lib/cad/freecad.js +253 -0
  460. package/src/lib/cad/index.js +40 -0
  461. package/src/lib/cad/openscad.js +198 -0
  462. package/src/lib/cad/project-cli.d.ts +2 -0
  463. package/src/lib/cad/project-cli.js +21 -0
  464. package/src/lib/cad/project-contract.d.ts +3 -0
  465. package/src/lib/cad/project-contract.js +1 -0
  466. package/src/lib/cad/project-recipe.js +30 -0
  467. package/src/lib/cad/project-runtime.d.ts +2 -0
  468. package/src/lib/cad/project-runtime.js +53 -0
  469. package/src/lib/cad/project-store.js +25 -0
  470. package/src/lib/cad/project-workflows.js +31 -0
  471. package/src/lib/cad-docker.js +21 -2
  472. package/src/lib/cli-preferences.js +17 -2
  473. package/src/lib/core-client.js +37 -18
  474. package/src/lib/deploy/local-studio.js +6 -5
  475. package/src/lib/dockerize.js +3 -0
  476. package/src/lib/execution-approvals.js +1 -0
  477. package/src/lib/identity-scaffold.js +4 -1
  478. package/src/lib/knowledge-docker.js +9 -1
  479. package/src/lib/local-sessions.js +124 -34
  480. package/src/lib/local-status.js +35 -14
  481. package/src/lib/project-config.js +9 -0
  482. package/src/lib/provider-credentials.js +136 -32
  483. package/src/lib/scaffold/resolve-cloudflare-account.js +37 -0
  484. package/src/lib/scaffold/wizards/cms.js +2 -8
  485. package/src/lib/scaffold/wizards/worker-api.js +2 -8
  486. package/src/lib/slash-commands.js +10 -2
  487. package/src/local/migrations.js +109 -1
  488. package/src/local/runtime-store.js +31 -5
  489. package/src/local/sqlite.js +36 -1
  490. package/src/local-fs/capability.js +121 -0
  491. package/src/local-fs/freshness.js +75 -0
  492. package/src/local-fs/index.js +385 -0
  493. package/src/local-fs/paths.js +100 -0
  494. package/src/local-pty/server.js +295 -19
  495. package/src/mcp/authority.js +348 -0
  496. package/src/mcp/client-adapters.js +431 -0
  497. package/src/mcp/client.js +172 -0
  498. package/src/mcp/index.js +47 -0
  499. package/src/mcp/telemetry.js +103 -0
  500. package/src/models/ai-access-onboarding.js +112 -0
  501. package/src/models/catalog.js +329 -51
  502. package/src/models/discovery.js +34 -6
  503. package/src/models/index.js +2 -0
  504. package/src/models/inventory-core.js +190 -0
  505. package/src/models/policy.js +20 -0
  506. package/src/plugins/cloudflare.js +103 -0
  507. package/src/plugins/completeful.js +69 -0
  508. package/src/plugins/contracts.js +86 -0
  509. package/src/plugins/index.js +11 -0
  510. package/src/plugins/registry.js +207 -0
  511. package/src/plugins/resource-scope.js +45 -0
  512. package/src/plugins/runtime.js +118 -0
  513. package/src/plugins/vectorize.js +31 -0
  514. package/src/progression/engine.js +171 -0
  515. package/src/progression/index.js +1 -0
  516. package/src/providers/cloudflare-chat.js +1 -1
  517. package/src/providers/gemini-generate-content.js +2 -1
  518. package/src/providers/openai-responses.js +45 -16
  519. package/src/providers/tool-schema.js +85 -0
  520. package/src/repository/index.js +29 -0
  521. package/src/rpc/generated/errors_pb.js +961 -1
  522. package/src/sam/activity/index.js +183 -0
  523. package/src/sam/client.js +252 -0
  524. package/src/sam/decision/calibration.js +109 -0
  525. package/src/sam/decision/confidence.js +126 -0
  526. package/src/sam/decision/evaluate.js +157 -0
  527. package/src/sam/decision/evaluators/deterministic.js +341 -0
  528. package/src/sam/decision/evaluators/heuristic.js +61 -0
  529. package/src/sam/decision/evaluators/select.js +50 -0
  530. package/src/sam/decision/evaluators/semantic.js +149 -0
  531. package/src/sam/decision/hierarchical.js +61 -0
  532. package/src/sam/decision/index.js +53 -0
  533. package/src/sam/decision/policy.js +86 -0
  534. package/src/sam/decision/questions.js +120 -0
  535. package/src/sam/decision/receipt.js +148 -0
  536. package/src/sam/decision/state.js +117 -0
  537. package/src/sam/decision/types.js +22 -0
  538. package/src/sam/decision/validate.js +200 -0
  539. package/src/sam/define.js +51 -0
  540. package/src/sam/index.js +65 -0
  541. package/src/sam/operations/brand-scan.js +62 -0
  542. package/src/sam/operations/cad-blender-inspect.js +36 -0
  543. package/src/sam/operations/codebaseindex-ingest.js +49 -0
  544. package/src/sam/operations/decision-evaluate.js +59 -0
  545. package/src/sam/operations/planning-astar.js +77 -0
  546. package/src/sam/operations/planning-goap.js +60 -0
  547. package/src/sam/operations/repository-inspect.js +72 -0
  548. package/src/sam/operations/security-scan.js +33 -0
  549. package/src/sam/operations/terminal-exec.js +29 -0
  550. package/src/sam/planning/astar.js +311 -0
  551. package/src/sam/planning/goap.js +177 -0
  552. package/src/sam/planning/index.js +21 -0
  553. package/src/sam/planning/state.js +84 -0
  554. package/src/sam/registry.js +48 -0
  555. package/src/sam/result.js +77 -0
  556. package/src/sam/seed.js +44 -0
  557. package/src/sam/types.js +91 -0
  558. package/src/security/local-vault.js +415 -0
  559. package/src/security/process.js +20 -4
  560. package/src/skills/catalog.js +64 -0
  561. package/src/skills/content-resolver.js +124 -0
  562. package/src/skills/hosted-store.js +37 -0
  563. package/src/skills/index.js +29 -64
  564. package/src/skills/interaction.js +102 -0
  565. package/src/skills/local-store.js +228 -0
  566. package/src/skills/manifest.js +104 -0
  567. package/src/skills/metrics.js +31 -0
  568. package/src/skills/registry.js +184 -0
  569. package/src/skills/runtime.js +287 -0
  570. package/src/skills/slash.js +44 -0
  571. package/src/status/actions.js +192 -0
  572. package/src/tools/hydrate.js +5 -1
  573. package/src/tools/index.js +7 -0
  574. package/src/tools/redact.js +64 -0
  575. package/src/tools/registry.js +83 -0
  576. package/src/tools/runtime.js +257 -0
  577. package/src/tools/search.js +21 -8
  578. package/src/ui/ansi.js +117 -3
  579. package/src/ui/cli/activity.js +76 -7
  580. package/src/ui/cli/footer.js +110 -9
  581. package/src/ui/cli/help.js +96 -96
  582. package/src/ui/wireframes.js +166 -0
  583. package/test/account-session.test.mjs +28 -0
  584. package/test/apps-scaffold-contract.test.mjs +16 -1
  585. package/test/capabilities.test.mjs +1 -1
  586. package/test/cli/api-key-env-whoami.test.mjs +129 -0
  587. package/test/cli/codebaseindex-plan-ux.test.mjs +37 -0
  588. package/test/cli/eval-live.test.mjs +219 -0
  589. package/test/cli/go.test.mjs +128 -0
  590. package/test/cli/local-vault-and-provider-setup.test.mjs +268 -0
  591. package/test/cli/mcp-client.test.mjs +245 -0
  592. package/test/cli/runtime-ui.test.mjs +69 -2
  593. package/test/cli/skill-npm-and-env.test.mjs +52 -0
  594. package/test/cli/status-actions.test.mjs +88 -0
  595. package/test/cli/wireframes-go-registry.test.mjs +139 -0
  596. package/test/cloudflare-connector.test.mjs +3 -6
  597. package/test/cloudflare-runtime.test.mjs +8 -1
  598. package/test/context.test.mjs +15 -0
  599. package/test/error-diagnostics.test.mjs +9 -0
  600. package/test/fixtures/cad/courtyard-house.json +208 -0
  601. package/test/go/build-source-identity.test.mjs +31 -0
  602. package/test/go/cloudflare-probe.test.mjs +317 -0
  603. package/test/go/distribution.test.mjs +28 -0
  604. package/test/integration/ai-access-onboarding.test.mjs +47 -0
  605. package/test/integration/app-command.test.mjs +55 -0
  606. package/test/integration/cad-discovery.test.mjs +158 -0
  607. package/test/integration/cad-docker-executor.test.mjs +249 -0
  608. package/test/integration/cad-execution.test.mjs +184 -0
  609. package/test/integration/cad-project-app.test.mjs +31 -0
  610. package/test/integration/cad-project-d1.test.mjs +25 -0
  611. package/test/integration/cad-project-native.test.mjs +24 -0
  612. package/test/integration/cad-project-workflow.test.mjs +9 -0
  613. package/test/integration/cad-project.test.mjs +82 -0
  614. package/test/integration/cli-help.test.mjs +5 -1
  615. package/test/integration/cms-site-tenancy-contract.test.mjs +256 -0
  616. package/test/integration/codebaseindex-ingest.test.mjs +166 -0
  617. package/test/integration/core-client.integration.test.mjs +55 -0
  618. package/test/integration/error-runtime-rpc.test.mjs +71 -0
  619. package/test/integration/features-resolve.test.mjs +128 -0
  620. package/test/integration/icon-registry.test.mjs +67 -0
  621. package/test/integration/ingest-discover-models.test.mjs +30 -0
  622. package/test/integration/install-script.test.mjs +110 -0
  623. package/test/integration/inventory-core.test.mjs +53 -0
  624. package/test/integration/local-fs.test.mjs +113 -0
  625. package/test/integration/plugins-cloudflare.integration.test.mjs +28 -0
  626. package/test/integration/provider-env-cli.test.mjs +3 -2
  627. package/test/integration/runtime-migrations.test.mjs +6 -1
  628. package/test/integration/runtime-status.integration.test.mjs +211 -0
  629. package/test/integration/sam-activity-recovery.test.mjs +147 -0
  630. package/test/integration/sam-decision.test.mjs +584 -0
  631. package/test/integration/sam-kernel.test.mjs +99 -0
  632. package/test/integration/sam-planning-astar.test.mjs +279 -0
  633. package/test/integration/scaffold-cloudflare.test.mjs +46 -0
  634. package/test/integration/skill-runtime.test.mjs +240 -0
  635. package/test/integration/storage-architecture.test.mjs +154 -0
  636. package/test/integration/store-discovery.test.mjs +44 -0
  637. package/test/integration/studio-fs-pty-e2e.test.mjs +294 -0
  638. package/test/integration/terminal-exec.integration.test.mjs +86 -0
  639. package/test/integration/tool-runtime.test.mjs +124 -0
  640. package/test/integration/tool-schema.test.mjs +59 -0
  641. package/test/knowledge-service.test.mjs +4 -0
  642. package/test/local-sessions.test.mjs +11 -2
  643. package/test/local-studio-deploy.test.mjs +1 -1
  644. package/test/model-catalog.test.mjs +28 -1
  645. package/test/models.test.mjs +172 -11
  646. package/test/openai-responses.test.mjs +60 -0
  647. package/test/provider-credentials.test.mjs +15 -5
  648. package/test/responses-runner.test.mjs +321 -6
  649. package/test/shell.test.mjs +151 -6
  650. package/test/smoke.mjs +2 -2
  651. package/test/tools-search.test.mjs +33 -0
  652. package/test/unit/website-assets-bindings.test.mjs +60 -0
  653. package/test/whoami-resume.test.mjs +82 -3
  654. package/examples/gorilla-shell/README.md +0 -15
  655. package/src/lib/gorilla-template.js +0 -54
  656. package/templates/gorilla-shell/App.tsx +0 -639
  657. package/templates/gorilla-shell/README.md +0 -34
  658. package/templates/gorilla-shell/index.html +0 -15
  659. package/templates/gorilla-shell/main.jsx +0 -9
  660. package/templates/gorilla-shell/package.json +0 -19
  661. package/templates/gorilla-shell/vite.config.js +0 -21
@@ -2,10 +2,60 @@ import pc from 'picocolors';
2
2
 
3
3
  const CLEAR_LINE = '\x1b[2K';
4
4
  const SPINNER = ['◐', '◓', '◑', '◒'];
5
+ export const INTERRUPT_HINT = 'ctrl-c to cancel';
5
6
 
6
7
  function elapsed(ms) {
7
8
  if (ms < 1000) return `${Math.max(0, Math.round(ms))}ms`;
8
- return `${(ms / 1000).toFixed(ms < 10_000 ? 1 : 0)}s`;
9
+ if (ms < 60_000) return `${(ms / 1000).toFixed(ms < 10_000 ? 1 : 0)}s`;
10
+ const m = Math.floor(ms / 60_000);
11
+ const s = Math.floor((ms % 60_000) / 1000);
12
+ return `${m}m ${String(s).padStart(2, '0')}s`;
13
+ }
14
+
15
+ function count(value) {
16
+ const n = Number(value || 0);
17
+ if (!Number.isFinite(n) || n <= 0) return null;
18
+ if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(n >= 10_000_000 ? 0 : 1)}m`;
19
+ if (n >= 1_000) return `${(n / 1_000).toFixed(n >= 100_000 ? 0 : 1)}k`;
20
+ return String(Math.round(n));
21
+ }
22
+
23
+ export function colorAllowed(env = process.env) {
24
+ if (!env || Object.hasOwn(env, 'NO_COLOR')) return false;
25
+ if (String(env.FORCE_COLOR || '') === '0') return false;
26
+ return true;
27
+ }
28
+
29
+ export function colorDepth(env = process.env) {
30
+ if (!colorAllowed(env)) return 0;
31
+ const colorterm = String(env.COLORTERM || '').toLowerCase();
32
+ if (colorterm.includes('truecolor') || colorterm.includes('24bit')) return 24;
33
+ if (String(env.TERM || '').includes('direct')) return 24;
34
+ return 8;
35
+ }
36
+
37
+ export function renderShimmer(text, tick = 0, options = {}) {
38
+ const env = options.env || process.env;
39
+ const source = String(text ?? '');
40
+ if (!source) return '';
41
+ const depth = colorDepth(env);
42
+ if (depth === 0) return source;
43
+ const chars = [...source];
44
+ const highlight = Math.max(3, Math.min(6, chars.length));
45
+ const origin = ((Number(tick) || 0) % (chars.length + highlight)) - highlight;
46
+ const painted = chars.map((ch, index) => {
47
+ const dist = index - origin;
48
+ const t = dist < 0 || dist > highlight ? 0 : 1 - Math.abs((dist / highlight) - 0.5) * 2;
49
+ if (depth >= 24) {
50
+ const r = Math.round(34 + t * 180);
51
+ const g = Math.round(180 + t * 75);
52
+ const b = Math.round(220 + t * 35);
53
+ return `\x1b[38;2;${r};${g};${b}m${ch}\x1b[39m`;
54
+ }
55
+ const code = t > 0.6 ? 159 : t > 0.2 ? 87 : 37;
56
+ return `\x1b[38;5;${code}m${ch}\x1b[39m`;
57
+ }).join('');
58
+ return `${painted}\x1b[0m`;
9
59
  }
10
60
 
11
61
  export function createInlineActivity(options = {}) {
@@ -15,17 +65,33 @@ export function createInlineActivity(options = {}) {
15
65
  const setTimer = options.setInterval || globalThis.setInterval;
16
66
  const clearTimer = options.clearInterval || globalThis.clearInterval;
17
67
  const intervalMs = Math.max(80, Number(options.intervalMs) || 120);
68
+ const interruptible = options.interruptible !== false;
69
+ const env = options.env || process.env;
18
70
 
19
- let label = String(options.label || 'Thinking');
71
+ let label = String(options.label || 'Running');
20
72
  let startedAt = 0;
21
73
  let tick = 0;
22
74
  let timer = null;
23
75
  let active = false;
76
+ let tokenTotal = Number(options.tokenTotal) || 0;
77
+
78
+ function paint(kind, value) {
79
+ if (!colorAllowed(env)) return value;
80
+ if (kind === 'cyan') return pc.cyan(value);
81
+ if (kind === 'red') return pc.red(value);
82
+ if (kind === 'green') return pc.green(value);
83
+ return pc.dim(value);
84
+ }
24
85
 
25
86
  function frame() {
26
87
  if (!active || !interactive) return;
27
- const icon = pc.cyan(SPINNER[tick % SPINNER.length]);
28
- write(`\r${CLEAR_LINE} ${icon} ${label} ${pc.dim('· ' + elapsed(now() - startedAt))}`);
88
+ const icon = paint('cyan', SPINNER[tick % SPINNER.length]);
89
+ const parts = [elapsed(now() - startedAt)];
90
+ const tokens = count(tokenTotal);
91
+ if (tokens) parts.unshift(`${tokens} tokens`);
92
+ if (interruptible) parts.push(INTERRUPT_HINT);
93
+ const paintedLabel = renderShimmer(label, tick, { env });
94
+ write(`\r${CLEAR_LINE} ${icon} ${paintedLabel} ${paint('dim', '· ' + parts.join(' · '))}`);
29
95
  tick += 1;
30
96
  }
31
97
 
@@ -43,8 +109,9 @@ export function createInlineActivity(options = {}) {
43
109
  }
44
110
  }
45
111
 
46
- function update(nextLabel) {
112
+ function update(nextLabel, nextTokens) {
47
113
  if (nextLabel) label = String(nextLabel);
114
+ if (Number.isFinite(Number(nextTokens))) tokenTotal = Number(nextTokens);
48
115
  if (!active) start(label);
49
116
  else frame();
50
117
  }
@@ -55,8 +122,9 @@ export function createInlineActivity(options = {}) {
55
122
  timer = null;
56
123
  const duration = elapsed(now() - startedAt);
57
124
  if (interactive) write(`\r${CLEAR_LINE}`);
58
- const icon = status === 'error' ? pc.red('✗') : pc.green('✓');
59
- write(` ${icon} ${finalLabel} ${pc.dim('· ' + duration)}\n`);
125
+ const icon = status === 'error' ? paint('red', '✗') : paint('green', '✓');
126
+ const tokens = count(tokenTotal);
127
+ write(` ${icon} ${finalLabel} ${paint('dim', '· ' + [tokens ? `${tokens} tokens` : null, duration].filter(Boolean).join(' · '))}\n`);
60
128
  active = false;
61
129
  }
62
130
 
@@ -64,6 +132,7 @@ export function createInlineActivity(options = {}) {
64
132
  get active() { return active; },
65
133
  start,
66
134
  update,
135
+ setTokens(value) { update(null, value); },
67
136
  succeed(labelText) { finish('success', labelText || label); },
68
137
  fail(labelText) { finish('error', labelText || 'Failed'); },
69
138
  clear() {
@@ -21,19 +21,120 @@ function ctxLabel(usage) {
21
21
  return `ctx ${Math.min(999, Math.round((active / window) * 100))}%`;
22
22
  }
23
23
 
24
+ function money(value) {
25
+ const n = Number(value);
26
+ if (!Number.isFinite(n)) return null;
27
+ return `$${n.toFixed(n >= 1 ? 2 : 3)}`;
28
+ }
29
+
30
+ export const FOOTER_HINTS = '/ commands · @ files · ! shell · ctrl-c to cancel';
31
+
24
32
  export function renderCliFooter(value = {}) {
25
33
  const usage = value.usage || value.usageSnapshot || {};
26
34
  const cumulative = usage.cumulative || {};
27
35
  const model = String(value.model || value.modelLabel || 'model');
36
+ const provider = String(value.provider || '').trim();
37
+ const effort = String(value.effort || value.reasoning || '').trim();
28
38
  const tier = String(value.tier || '').trim();
39
+ const projectName = String(value.projectName || value.identity || (value.cwd ? value.project : '') || '').trim();
40
+ const branch = String(value.branch || value.gitBranch || '').trim();
41
+ const cwd = String(value.cwd || (!value.projectName && !value.identity ? value.project : '') || '').trim();
42
+ const action = String(value.action || value.statusLabel || '').trim();
43
+ const filesEdited = Number(value.filesEdited || value.files_edited || 0);
29
44
  const elapsedMs = Number(value.elapsedMs);
30
- const parts = [
31
- model,
32
- ctxLabel(usage),
33
- `↑${count(cumulative.input_tokens)} ↓${count(cumulative.output_tokens)}`,
34
- ];
35
- if (Number(cumulative.cached_input_tokens) > 0) parts.push(`cache ${count(cumulative.cached_input_tokens)}`);
36
- if (tier && tier !== 'default') parts.push(tier);
37
- if (Number.isFinite(elapsedMs) && elapsedMs >= 0) parts.push(elapsedMs < 60_000 ? `${(elapsedMs / 1000).toFixed(1)}s` : `${Math.floor(elapsedMs / 60_000)}m${Math.floor((elapsedMs % 60_000) / 1000)}s`);
38
- return pc.dim(' ' + parts.join(' · '));
45
+ const cost = money(value.cost ?? cumulative.cost_usd ?? usage.cost_usd);
46
+
47
+ const primary = [];
48
+ if (projectName) primary.push(projectName);
49
+ if (branch) primary.push(branch);
50
+ if (cwd) primary.push(cwd.replace(String(process.env.HOME || ''), '~'));
51
+ if (action) primary.push(action);
52
+ primary.push([provider, model, effort].filter(Boolean).join(' ') || model);
53
+ primary.push(ctxLabel(usage));
54
+ primary.push(`↑${count(cumulative.input_tokens)} ↓${count(cumulative.output_tokens)}`);
55
+ if (Number(cumulative.cached_input_tokens) > 0) primary.push(`cache ${count(cumulative.cached_input_tokens)}`);
56
+ if (filesEdited > 0) primary.push(`${filesEdited} files edited`);
57
+ if (cost) primary.push(cost);
58
+ if (tier && tier !== 'default') primary.push(tier);
59
+ if (Number.isFinite(elapsedMs) && elapsedMs >= 0) {
60
+ primary.push(elapsedMs < 60_000 ? `${(elapsedMs / 1000).toFixed(1)}s` : `${Math.floor(elapsedMs / 60_000)}m${Math.floor((elapsedMs % 60_000) / 1000)}s`);
61
+ }
62
+
63
+ const hints = String(value.hints || FOOTER_HINTS);
64
+ return [
65
+ pc.dim(' ' + primary.join(' · ')),
66
+ pc.dim(' ' + hints),
67
+ ].join('\n');
68
+ }
69
+
70
+ export function renderDiffPreview(diffText, options = {}) {
71
+ const source = String(diffText || '');
72
+ const color = options.color ?? !Object.hasOwn(process.env, 'NO_COLOR');
73
+ const paint = (text, style) => {
74
+ if (!color) return text;
75
+ const code = style === 'add' ? '32' : style === 'del' ? '31' : style === 'hunk' ? '36' : style === 'meta' ? '1' : '2';
76
+ return `\x1b[${code}m${text}\x1b[0m`;
77
+ };
78
+ if (!source.trim()) return ` ${paint('no changes', 'dim')}\n`;
79
+ const maxLines = Math.max(20, Number(options.maxLines) || 200);
80
+ const lines = source.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
81
+ const truncated = lines.length > maxLines;
82
+ const shown = truncated ? lines.slice(0, maxLines) : lines;
83
+ const out = shown.map((line) => {
84
+ if (line.startsWith('diff ') || line.startsWith('index ') || line.startsWith('+++') || line.startsWith('---')) {
85
+ return ` ${paint(line, 'meta')}`;
86
+ }
87
+ if (line.startsWith('@@')) return ` ${paint(line, 'hunk')}`;
88
+ if (line.startsWith('+')) return ` ${paint(line, 'add')}`;
89
+ if (line.startsWith('-')) return ` ${paint(line, 'del')}`;
90
+ return ` ${line}`;
91
+ });
92
+ if (truncated) out.push(` ${paint(`… ${lines.length - maxLines} more lines`, 'dim')}`);
93
+ return `${out.join('\n')}\n`;
94
+ }
95
+
96
+ export function renderUsagePanel(value = {}) {
97
+ const session = value.session || {};
98
+ const usage = value.usage || value.usageSnapshot || session.usage_snapshot || {};
99
+ const cumulative = usage.cumulative || session.cumulative_usage || {};
100
+ const current = usage.current_context || {};
101
+ const lines = [];
102
+ const push = (label, text) => lines.push(` ${pc.dim(label.padEnd(12))} ${text}`);
103
+
104
+ lines.push('');
105
+ lines.push(` ${pc.bold('AgentSam · Usage')}`);
106
+ lines.push('');
107
+ push('session', session.id || session.session_id || 'unknown');
108
+ push('provider', value.provider || session.provider || (String(session.model_key || '').split(':')[0]) || 'unknown');
109
+ push('model', value.model || session.model || session.model_key || 'unknown');
110
+ push('reasoning', value.effort || session.reasoning_effort || 'unknown/unavailable');
111
+ push('tier', value.tier || session.service_tier || 'unknown/unavailable');
112
+ lines.push('');
113
+ const window = Number(current.window_tokens || 0);
114
+ const active = Number(current.input_tokens || 0);
115
+ push(
116
+ 'context',
117
+ window > 0
118
+ ? `${count(active)} / ${count(window)} · ${Math.round((active / window) * 1000) / 10}%`
119
+ : active > 0
120
+ ? `${count(active)} / unknown`
121
+ : 'unknown/unavailable',
122
+ );
123
+ push('input', count(cumulative.input_tokens));
124
+ push('output', count(cumulative.output_tokens));
125
+ push('cached', Number(cumulative.cached_input_tokens) > 0 ? count(cumulative.cached_input_tokens) : 'unknown/unavailable');
126
+ lines.push('');
127
+ push('cost', money(value.cost ?? cumulative.cost_usd ?? session.total_cost_usd) || 'unknown/unavailable');
128
+ push('elapsed', value.elapsedLabel || (Number.isFinite(Number(value.elapsedMs)) ? `${Math.round(Number(value.elapsedMs) / 1000)}s` : 'unknown/unavailable'));
129
+ push('tool calls', value.toolCalls != null ? String(value.toolCalls) : 'unknown/unavailable');
130
+ push('shell', value.shellCommands != null ? String(value.shellCommands) : 'unknown/unavailable');
131
+ push('files', value.filesEdited != null ? `${value.filesEdited} edited` : 'unknown/unavailable');
132
+ push('compactions', value.compactions != null ? String(value.compactions) : 'unknown/unavailable');
133
+ lines.push('');
134
+ push('accounting', usage.estimate_kind || value.estimateKind || 'unknown/unavailable');
135
+ if (session.id || session.session_id) {
136
+ push('resume', `agentsam resume ${session.id || session.session_id}`);
137
+ }
138
+ lines.push('');
139
+ return lines.join('\n');
39
140
  }
@@ -1,82 +1,21 @@
1
1
  import pc from 'picocolors';
2
2
  import { isCancel, select } from '@clack/prompts';
3
3
  import pkg from '../../../package.json' with { type: 'json' };
4
-
5
- const HELP_TOPICS = Object.freeze([
6
- {
7
- id: 'start',
8
- label: 'Start / resume',
9
- summary: 'Enter Agent Sam, resume work, inspect identity, and choose a model.',
10
- rows: [
11
- ['agentsam', 'Enter the interactive Agent Sam experience'],
12
- ['agentsam resume [session]', 'Resume a saved Agent Sam session'],
13
- ['agentsam whoami', 'Show authenticated account and credential status'],
14
- ['agentsam models', 'Probe account-visible hosted/local models'],
15
- ['agentsam providers', 'Configure and verify machine provider credentials'],
16
- ['agentsam env init <provider>', 'Low-level provider profile compatibility command'],
17
- ],
18
- },
19
- {
20
- id: 'work',
21
- label: 'Build / inspect',
22
- summary: 'Repository intelligence and normal project work.',
23
- rows: [
24
- ['agentsam inspect', 'Bounded repository index / authority view'],
25
- ['agentsam index', 'Incremental AST and optional embeddings'],
26
- ['agentsam search "query"', 'Search indexed code/text'],
27
- ['agentsam repo snapshot', 'Git composition/churn snapshot'],
28
- ['agentsam security', 'Dependency and trust-boundary scan'],
29
- ['agentsam merkle', 'Integrity snapshots and comparisons'],
30
- ],
31
- },
32
- {
33
- id: 'runtime',
34
- label: 'Runtime / terminal',
35
- summary: 'Local, remote, sandbox, and deployment controls.',
36
- rows: [
37
- ['agentsam status', 'Project, Git, DB, API, and PTY status'],
38
- ['agentsam start-local', 'Start the local PTY service'],
39
- ['agentsam connections', 'Inspect available execution connections'],
40
- ['agentsam tunnel', 'Expose local PTY only when remote access is wanted'],
41
- ['agentsam deploy', 'Graduate intentionally to cloud infrastructure'],
42
- ['agentsam cloudflare', 'Wrangler and Cloudflare runtime diagnostics'],
43
- ],
44
- },
45
- {
46
- id: 'inside',
47
- label: 'Inside Agent Sam',
48
- summary: 'Commands available while the interactive session is running.',
49
- rows: [
50
- ['/', 'Open the keyboard command picker'],
51
- ['/model', 'Choose model, reasoning, and processing tier'],
52
- ['/providers', 'Configure and verify machine provider credentials'],
53
- ['/context', 'Show live context economics'],
54
- ['/usage', 'Show token/cost/session receipt'],
55
- ['/settings', 'Change runtime, terminal, and model policy'],
56
- ['/status', 'Show project/runtime health'],
57
- ['/help [topic]', 'Show in-session help'],
58
- ['/exit', 'Return to the host shell'],
59
- ],
60
- },
61
- {
62
- id: 'create',
63
- label: 'Create / extend',
64
- summary: 'Scaffold and add reusable capabilities.',
65
- rows: [
66
- ['agentsam create <name> --preset <preset>', 'Create a new AgentSam project'],
67
- ['agentsam add <capability>', 'Add a supported capability'],
68
- ['agentsam capabilities [id]', 'Inspect capability contracts'],
69
- ['agentsam skills [id]', 'Inspect packaged skills'],
70
- ['agentsam identity init', 'Add reusable identity surfaces'],
71
- ['agentsam dockerize', 'Build supported container targets'],
72
- ],
73
- },
74
- ]);
4
+ import {
5
+ CLI_COMMAND_CATALOG,
6
+ CLI_HELP_TOPICS,
7
+ getCliCommand,
8
+ listCliCommands,
9
+ printAssistTip,
10
+ } from '../../cli/command-catalog.js';
11
+ import { SLASH_COMMANDS } from '../../lib/slash-commands.js';
75
12
 
76
13
  const TOPIC_ALIASES = new Map([
77
14
  ['models', 'start'], ['model', 'start'], ['provider', 'start'], ['providers', 'start'], ['resume', 'start'],
78
15
  ['repo', 'work'], ['repository', 'work'], ['inspect', 'work'], ['index', 'work'], ['security', 'work'],
16
+ ['ingest', 'work'], ['codebaseindex', 'work'], ['codebase-index', 'work'],
79
17
  ['terminal', 'runtime'], ['connections', 'runtime'], ['remote', 'runtime'], ['sandbox', 'runtime'], ['deploy', 'runtime'],
18
+ ['mcp', 'runtime'], ['eval', 'runtime'],
80
19
  ['slash', 'inside'], ['commands', 'inside'], ['session', 'inside'], ['usage', 'inside'], ['context', 'inside'],
81
20
  ['create', 'create'], ['scaffold', 'create'], ['capabilities', 'create'], ['skills', 'create'],
82
21
  ]);
@@ -85,44 +24,66 @@ function clean(value) {
85
24
  return value == null ? '' : String(value).trim().toLowerCase();
86
25
  }
87
26
 
27
+ function commandsForTopic(topicId) {
28
+ return listCliCommands({ topic: topicId }).map((entry) => {
29
+ const aliases = (entry.aliases || []).filter((a) => !a.startsWith('-')).slice(0, 2);
30
+ const name = aliases.length ? `agentsam ${entry.id}|${aliases.join('|')}` : `agentsam ${entry.id}`;
31
+ const tip = entry.skill ? ` · skill ${entry.skill}` : '';
32
+ return [name, `${entry.summary}${tip}`];
33
+ });
34
+ }
35
+
88
36
  function padRows(rows) {
89
- const width = Math.min(42, Math.max(...rows.map(([command]) => command.length), 0));
37
+ const width = Math.min(52, Math.max(...rows.map(([command]) => command.length), 0));
90
38
  return rows.map(([command, description]) => ' ' + pc.cyan(command.padEnd(width)) + ' ' + pc.dim(description));
91
39
  }
92
40
 
93
41
  export function resolveHelpTopic(value) {
94
42
  const query = clean(value);
95
43
  if (!query) return null;
96
- const direct = HELP_TOPICS.find((topic) => topic.id === query || clean(topic.label) === query);
97
- if (direct) return direct;
44
+ const direct = CLI_HELP_TOPICS.find((topic) => topic.id === query || clean(topic.label) === query);
45
+ if (direct) {
46
+ return { ...direct, rows: commandsForTopic(direct.id) };
47
+ }
98
48
  const alias = TOPIC_ALIASES.get(query);
99
- if (alias) return HELP_TOPICS.find((topic) => topic.id === alias) || null;
100
- return HELP_TOPICS.find((topic) =>
101
- topic.rows.some(([command, description]) => clean(command).includes(query) || clean(description).includes(query))) || null;
49
+ if (alias) {
50
+ const topic = CLI_HELP_TOPICS.find((t) => t.id === alias);
51
+ return topic ? { ...topic, rows: commandsForTopic(topic.id) } : null;
52
+ }
53
+ const command = getCliCommand(query);
54
+ if (command) {
55
+ const topic = CLI_HELP_TOPICS.find((t) => t.id === command.topic);
56
+ return topic ? { ...topic, rows: commandsForTopic(topic.id) } : null;
57
+ }
58
+ return CLI_HELP_TOPICS.map((topic) => ({ ...topic, rows: commandsForTopic(topic.id) }))
59
+ .find((topic) => topic.rows.some(([cmd, description]) => clean(cmd).includes(query) || clean(description).includes(query))) || null;
102
60
  }
103
61
 
104
62
  export function renderHelpOverview(version, options = {}) {
63
+ const common = listCliCommands({ common: true });
105
64
  const lines = [
106
65
  '',
107
66
  ' ' + pc.bold('Agent Sam') + ' ' + pc.dim('v' + version),
108
- ' ' + pc.dim('Type normally to work with Agent Sam. Use help only when you need the map.'),
67
+ ' ' + pc.dim('SAM = Systematic Autonomous Machinery · help is generated from the command catalog.'),
109
68
  '',
110
69
  ' ' + pc.bold('Start'),
111
70
  ' ' + pc.cyan('agentsam') + ' ' + pc.dim('enter the interactive experience'),
112
71
  ' ' + pc.cyan('agentsam resume') + ' ' + pc.dim('continue saved work'),
113
- ' ' + pc.cyan('agentsam help <topic>') + ' ' + pc.dim('focused help'),
72
+ ' ' + pc.cyan('agentsam help <topic>') + ' ' + pc.dim('focused help from catalog'),
73
+ ' ' + pc.cyan('agentsam skills <id>') + ' ' + pc.dim('load how-to skill instructions'),
114
74
  '',
115
75
  ' ' + pc.bold('Common'),
116
- ' ' + pc.cyan('agentsam inspect') + ' ' + pc.dim('understand this repository'),
117
- ' ' + pc.cyan('agentsam models') + ' ' + pc.dim('see account-visible models'),
118
- ' ' + pc.cyan('agentsam status') + ' ' + pc.dim('check project/runtime health'),
119
- ' ' + pc.cyan('agentsam security') + ' ' + pc.dim('scan dependency + trust boundaries'),
120
- ' ' + pc.cyan('agentsam deploy') + ' ' + pc.dim('graduate intentionally'),
121
- '',
122
- ' ' + pc.dim('Inside Agent Sam: press / for the command picker. Ask the selected model for natural-language help at any time.'),
123
76
  ];
77
+ for (const entry of common) {
78
+ lines.push(' ' + pc.cyan(('agentsam ' + entry.id).padEnd(34)) + ' ' + pc.dim(entry.summary));
79
+ }
80
+ lines.push(
81
+ '',
82
+ ' ' + pc.dim('Every command prints: tip: use skill <id> — machine baseline for in-CLI guidance.'),
83
+ ' ' + pc.dim('Inside Agent Sam: press / for the command picker.'),
84
+ );
124
85
  if (options.showTopics !== false) {
125
- lines.push('', ' ' + pc.dim('Topics: ' + HELP_TOPICS.map((topic) => topic.id).join(' · ') + ' · all'));
86
+ lines.push('', ' ' + pc.dim('Topics: ' + CLI_HELP_TOPICS.map((topic) => topic.id).join(' · ') + ' · all · skills'));
126
87
  }
127
88
  lines.push('');
128
89
  return lines.join('\n');
@@ -130,21 +91,37 @@ export function renderHelpOverview(version, options = {}) {
130
91
 
131
92
  export function renderHelpTopic(topic, version) {
132
93
  if (!topic) return renderHelpOverview(version);
94
+ const skillHint = topic.rows?.[0]?.[1]?.includes('skill')
95
+ ? ''
96
+ : '';
133
97
  return [
134
98
  '',
135
99
  ' ' + pc.bold('Agent Sam') + ' ' + pc.dim('v' + version) + ' ' + pc.dim('·') + ' ' + pc.bold(topic.label),
136
100
  ' ' + pc.dim(topic.summary),
137
101
  '',
138
- ...padRows(topic.rows),
102
+ ...padRows(topic.rows || []),
139
103
  '',
140
- ' ' + pc.dim('Tip: run agentsam help for the map, or agentsam to return to the interactive experience.'),
104
+ ' ' + pc.dim('Tip: agentsam skills <id> loads how-to instructions for that command’s skill.'),
105
+ skillHint,
141
106
  '',
142
107
  ].join('\n');
143
108
  }
144
109
 
145
110
  export function renderAllHelp(version) {
146
111
  const lines = [renderHelpOverview(version, { showTopics: false })];
147
- for (const topic of HELP_TOPICS) lines.push(renderHelpTopic(topic, version));
112
+ for (const topic of CLI_HELP_TOPICS) {
113
+ lines.push(renderHelpTopic({ ...topic, rows: commandsForTopic(topic.id) }, version));
114
+ }
115
+ lines.push(
116
+ '',
117
+ ' ' + pc.bold('Inside shell (slash)'),
118
+ ...padRows(SLASH_COMMANDS.slice(0, 16).map((row) => [row.cmd, row.description])),
119
+ ' ' + pc.dim(`… ${SLASH_COMMANDS.length} slash commands total · /help inside the shell`),
120
+ '',
121
+ ' ' + pc.bold('Catalog'),
122
+ ' ' + pc.dim(`${CLI_COMMAND_CATALOG.length} top-level commands · source: src/cli/command-catalog.js`),
123
+ '',
124
+ );
148
125
  return lines.join('');
149
126
  }
150
127
 
@@ -153,11 +130,27 @@ export async function runHelp(argv = [], options = {}) {
153
130
  const write = options.write || ((value) => process.stdout.write(value));
154
131
  const args = argv.filter((arg) => arg !== '--interactive');
155
132
 
156
- if (args.includes('--all')) {
133
+ printAssistTip('help', { write: (s) => process.stderr.write(s) });
134
+
135
+ if (args.includes('--all') || args.some((arg) => clean(arg) === 'all')) {
157
136
  write(renderAllHelp(version));
158
137
  return;
159
138
  }
160
139
 
140
+ if (args.some((arg) => clean(arg) === 'skills' || clean(arg) === 'skill')) {
141
+ write([
142
+ '',
143
+ ' ' + pc.bold('Skills') + ' ' + pc.dim('· how-to instructions per surface'),
144
+ ' ' + pc.cyan('agentsam skills') + ' ' + pc.dim('list portable skills'),
145
+ ' ' + pc.cyan('agentsam skills <id>') + ' ' + pc.dim('print skill instructions'),
146
+ ' ' + pc.cyan('agentsam skills <id> --references') + ' ' + pc.dim('include reference docs'),
147
+ '',
148
+ ' ' + pc.dim('Every CLI command tip points at a skill id — that is the machine baseline.'),
149
+ '',
150
+ ].join('\n'));
151
+ return;
152
+ }
153
+
161
154
  const topicArg = args.find((arg) => !arg.startsWith('-'));
162
155
  if (topicArg) {
163
156
  const topic = resolveHelpTopic(topicArg);
@@ -177,18 +170,25 @@ export async function runHelp(argv = [], options = {}) {
177
170
  }
178
171
 
179
172
  const choice = await select({
180
- message: 'Agent Sam help',
173
+ message: 'Agent Sam help (catalog-driven)',
181
174
  options: [
182
- ...HELP_TOPICS.map((topic) => ({ value: topic.id, label: topic.label, hint: topic.summary })),
183
- { value: 'all', label: 'All commands', hint: 'Print the complete deterministic help map' },
175
+ ...CLI_HELP_TOPICS.map((topic) => ({ value: topic.id, label: topic.label, hint: topic.summary })),
176
+ { value: 'skills', label: 'Skills', hint: 'How-to instructions loaded via agentsam skills' },
177
+ { value: 'all', label: 'All commands', hint: 'Print the complete catalog map' },
184
178
  { value: 'exit', label: 'Back', hint: 'Return without printing more help' },
185
179
  ],
186
180
  });
187
181
  if (isCancel(choice) || choice === 'exit') return;
188
182
  if (choice === 'all') write(renderAllHelp(version));
189
- else write(renderHelpTopic(resolveHelpTopic(choice), version));
183
+ else if (choice === 'skills') {
184
+ write([
185
+ '',
186
+ ' Run ' + pc.cyan('agentsam skills') + ' to list, or ' + pc.cyan('agentsam skills agentsam-codebaseindex') + ' for ingest how-to.',
187
+ '',
188
+ ].join('\n'));
189
+ } else write(renderHelpTopic(resolveHelpTopic(choice), version));
190
190
  }
191
191
 
192
192
  export function listHelpTopics() {
193
- return HELP_TOPICS.map((topic) => ({ id: topic.id, label: topic.label, summary: topic.summary }));
193
+ return CLI_HELP_TOPICS.map((topic) => ({ id: topic.id, label: topic.label, summary: topic.summary }));
194
194
  }