@ashlr/hub 3.4.0 → 3.5.0

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 (213) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +3 -0
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/index.js +11 -0
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/local-runtime.js +40 -9
  7. package/dist/cli/local-runtime.js.map +1 -1
  8. package/dist/core/local-eval/classify.d.ts +57 -0
  9. package/dist/core/local-eval/classify.js +121 -0
  10. package/dist/core/local-eval/classify.js.map +1 -0
  11. package/dist/core/local-eval/configuration.d.ts +37 -0
  12. package/dist/core/local-eval/configuration.js +171 -0
  13. package/dist/core/local-eval/configuration.js.map +1 -0
  14. package/dist/core/local-eval/index.d.ts +15 -0
  15. package/dist/core/local-eval/index.js +16 -0
  16. package/dist/core/local-eval/index.js.map +1 -0
  17. package/dist/core/local-eval/main.d.ts +31 -0
  18. package/dist/core/local-eval/main.js +174 -0
  19. package/dist/core/local-eval/main.js.map +1 -0
  20. package/dist/core/local-eval/report.d.ts +25 -0
  21. package/dist/core/local-eval/report.js +157 -0
  22. package/dist/core/local-eval/report.js.map +1 -0
  23. package/dist/core/local-eval/runner.d.ts +55 -0
  24. package/dist/core/local-eval/runner.js +290 -0
  25. package/dist/core/local-eval/runner.js.map +1 -0
  26. package/dist/core/local-eval/tasks.d.ts +22 -0
  27. package/dist/core/local-eval/tasks.js +303 -0
  28. package/dist/core/local-eval/tasks.js.map +1 -0
  29. package/dist/core/local-eval/trace.d.ts +67 -0
  30. package/dist/core/local-eval/trace.js +309 -0
  31. package/dist/core/local-eval/trace.js.map +1 -0
  32. package/dist/core/local-eval/types.d.ts +262 -0
  33. package/dist/core/local-eval/types.js +23 -0
  34. package/dist/core/local-eval/types.js.map +1 -0
  35. package/dist/core/local-runtime/llama/anthropic-proxy-host.d.ts +68 -0
  36. package/dist/core/local-runtime/llama/anthropic-proxy-host.js +120 -0
  37. package/dist/core/local-runtime/llama/anthropic-proxy-host.js.map +1 -0
  38. package/dist/core/local-runtime/llama/anthropic-proxy-process.d.ts +15 -0
  39. package/dist/core/local-runtime/llama/anthropic-proxy-process.js +21 -0
  40. package/dist/core/local-runtime/llama/anthropic-proxy-process.js.map +1 -0
  41. package/dist/core/local-runtime/llama/anthropic-proxy.d.ts +2 -1
  42. package/dist/core/local-runtime/llama/anthropic-proxy.js +14 -6
  43. package/dist/core/local-runtime/llama/anthropic-proxy.js.map +1 -1
  44. package/dist/core/local-runtime/llama/anthropic-shim.d.ts +33 -0
  45. package/dist/core/local-runtime/llama/anthropic-shim.js +59 -0
  46. package/dist/core/local-runtime/llama/anthropic-shim.js.map +1 -1
  47. package/dist/core/local-runtime/llama/config.d.ts +101 -6
  48. package/dist/core/local-runtime/llama/config.js +174 -6
  49. package/dist/core/local-runtime/llama/config.js.map +1 -1
  50. package/dist/core/local-runtime/llama/index.d.ts +15 -0
  51. package/dist/core/local-runtime/llama/index.js +13 -0
  52. package/dist/core/local-runtime/llama/index.js.map +1 -1
  53. package/dist/core/local-runtime/llama/paths.d.ts +17 -0
  54. package/dist/core/local-runtime/llama/paths.js +25 -0
  55. package/dist/core/local-runtime/llama/paths.js.map +1 -1
  56. package/dist/core/local-runtime/llama/proxy-invocation.d.ts +101 -0
  57. package/dist/core/local-runtime/llama/proxy-invocation.js +134 -0
  58. package/dist/core/local-runtime/llama/proxy-invocation.js.map +1 -0
  59. package/dist/core/local-runtime/llama/proxy-launchd.d.ts +83 -0
  60. package/dist/core/local-runtime/llama/proxy-launchd.js +216 -0
  61. package/dist/core/local-runtime/llama/proxy-launchd.js.map +1 -0
  62. package/dist/core/local-runtime/llama/shapes.d.ts +2 -1
  63. package/dist/core/local-runtime/llama/shapes.js +2 -1
  64. package/dist/core/local-runtime/llama/shapes.js.map +1 -1
  65. package/dist/core/verse/adapters/claude.js +16 -0
  66. package/dist/core/verse/adapters/claude.js.map +1 -1
  67. package/dist/core/verse/adapters/codex.js +60 -2
  68. package/dist/core/verse/adapters/codex.js.map +1 -1
  69. package/dist/core/verse/adapters/grok.js +13 -0
  70. package/dist/core/verse/adapters/grok.js.map +1 -1
  71. package/dist/core/verse/control-api.d.ts +8 -9
  72. package/dist/core/verse/control-api.js +14 -114
  73. package/dist/core/verse/control-api.js.map +1 -1
  74. package/dist/core/verse/github-api.d.ts +50 -0
  75. package/dist/core/verse/github-api.js +211 -0
  76. package/dist/core/verse/github-api.js.map +1 -0
  77. package/dist/core/verse/github-proposal.d.ts +64 -0
  78. package/dist/core/verse/github-proposal.js +186 -0
  79. package/dist/core/verse/github-proposal.js.map +1 -0
  80. package/dist/core/verse/github-repo.d.ts +104 -0
  81. package/dist/core/verse/github-repo.js +476 -0
  82. package/dist/core/verse/github-repo.js.map +1 -0
  83. package/dist/core/verse/github-types.d.ts +174 -0
  84. package/dist/core/verse/github-types.js +31 -0
  85. package/dist/core/verse/github-types.js.map +1 -0
  86. package/dist/core/verse/mcp-cli-health.d.ts +149 -0
  87. package/dist/core/verse/mcp-cli-health.js +227 -0
  88. package/dist/core/verse/mcp-cli-health.js.map +1 -0
  89. package/dist/core/verse/mcp-control-api.d.ts +68 -0
  90. package/dist/core/verse/mcp-control-api.js +322 -0
  91. package/dist/core/verse/mcp-control-api.js.map +1 -0
  92. package/dist/core/verse/mcp-mutation.d.ts +187 -0
  93. package/dist/core/verse/mcp-mutation.js +471 -0
  94. package/dist/core/verse/mcp-mutation.js.map +1 -0
  95. package/dist/core/verse/mcp-scope.d.ts +114 -0
  96. package/dist/core/verse/mcp-scope.js +149 -0
  97. package/dist/core/verse/mcp-scope.js.map +1 -0
  98. package/dist/core/verse/mcp-seat-view.d.ts +197 -0
  99. package/dist/core/verse/mcp-seat-view.js +322 -0
  100. package/dist/core/verse/mcp-seat-view.js.map +1 -0
  101. package/dist/core/verse/path-guard.d.ts +115 -0
  102. package/dist/core/verse/path-guard.js +171 -0
  103. package/dist/core/verse/path-guard.js.map +1 -0
  104. package/dist/core/verse/seats.js +30 -2
  105. package/dist/core/verse/seats.js.map +1 -1
  106. package/dist/core/verse/session-engine.js +60 -1
  107. package/dist/core/verse/session-engine.js.map +1 -1
  108. package/dist/core/verse/session-store.js +20 -0
  109. package/dist/core/verse/session-store.js.map +1 -1
  110. package/dist/core/verse/types.d.ts +225 -1
  111. package/dist/core/verse/types.js +26 -0
  112. package/dist/core/verse/types.js.map +1 -1
  113. package/dist/core/verse/verse-api.d.ts +16 -1
  114. package/dist/core/verse/verse-api.js +338 -16
  115. package/dist/core/verse/verse-api.js.map +1 -1
  116. package/dist/core/verse/workspaces.d.ts +130 -0
  117. package/dist/core/verse/workspaces.js +501 -0
  118. package/dist/core/verse/workspaces.js.map +1 -0
  119. package/dist/core/web/api.js +23 -0
  120. package/dist/core/web/api.js.map +1 -1
  121. package/dist/core/web/public/next/assets/{App-LuILXjWG.js → App-CsbPYQqy.js} +2 -2
  122. package/dist/core/web/public/next/assets/{App-LuILXjWG.js.map → App-CsbPYQqy.js.map} +1 -1
  123. package/dist/core/web/public/next/assets/{ApprovalsSection-B_Xor8JH.js → ApprovalsSection-CBZquyLK.js} +2 -2
  124. package/dist/core/web/public/next/assets/{ApprovalsSection-B_Xor8JH.js.map → ApprovalsSection-CBZquyLK.js.map} +1 -1
  125. package/dist/core/web/public/next/assets/AutonomySection-CQVpEdCE.js +2 -0
  126. package/dist/core/web/public/next/assets/{AutonomySection-BEwITtPJ.js.map → AutonomySection-CQVpEdCE.js.map} +1 -1
  127. package/dist/core/web/public/next/assets/AutonomySection-DTN6m6QE.css +1 -0
  128. package/dist/core/web/public/next/assets/ChatSection-DiRvNX3Q.css +1 -0
  129. package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js +77 -0
  130. package/dist/core/web/public/next/assets/ChatSection-DmE9K0Tg.js.map +1 -0
  131. package/dist/core/web/public/next/assets/{ConfirmDialog-BqkZdPs_.js → ConfirmDialog-deO0C0iY.js} +2 -2
  132. package/dist/core/web/public/next/assets/{ConfirmDialog-BqkZdPs_.js.map → ConfirmDialog-deO0C0iY.js.map} +1 -1
  133. package/dist/core/web/public/next/assets/{Dialog-CPmedg4S.js → Dialog-CNd7q89m.js} +2 -2
  134. package/dist/core/web/public/next/assets/{Dialog-CPmedg4S.js.map → Dialog-CNd7q89m.js.map} +1 -1
  135. package/dist/core/web/public/next/assets/{DiffViewer-DmPJbeM_.js → DiffViewer-DTO0KRuG.js} +2 -2
  136. package/dist/core/web/public/next/assets/{DiffViewer-DmPJbeM_.js.map → DiffViewer-DTO0KRuG.js.map} +1 -1
  137. package/dist/core/web/public/next/assets/{Epistemic-M3SxLHjq.js → Epistemic-53PikaUI.js} +2 -2
  138. package/dist/core/web/public/next/assets/{Epistemic-M3SxLHjq.js.map → Epistemic-53PikaUI.js.map} +1 -1
  139. package/dist/core/web/public/next/assets/{Meter-D_X7c9U3.js → Meter-DRWZQgr1.js} +2 -2
  140. package/dist/core/web/public/next/assets/{Meter-D_X7c9U3.js.map → Meter-DRWZQgr1.js.map} +1 -1
  141. package/dist/core/web/public/next/assets/{MutationTokenDialog-Ba5ZHu-8.js → MutationTokenDialog-DYF8n_RD.js} +2 -2
  142. package/dist/core/web/public/next/assets/{MutationTokenDialog-Ba5ZHu-8.js.map → MutationTokenDialog-DYF8n_RD.js.map} +1 -1
  143. package/dist/core/web/public/next/assets/{RefreshIndicator-vHGpmyzb.js → RefreshIndicator-DXJQXKyA.js} +2 -2
  144. package/dist/core/web/public/next/assets/{RefreshIndicator-vHGpmyzb.js.map → RefreshIndicator-DXJQXKyA.js.map} +1 -1
  145. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-B5g6JEVk.js → ResourcePoolConsoleApp-hDSEFdLU.js} +2 -2
  146. package/dist/core/web/public/next/assets/{ResourcePoolConsoleApp-B5g6JEVk.js.map → ResourcePoolConsoleApp-hDSEFdLU.js.map} +1 -1
  147. package/dist/core/web/public/next/assets/{RouteErrorBoundary-CroxuKoi.js → RouteErrorBoundary-CZd7ln8v.js} +2 -2
  148. package/dist/core/web/public/next/assets/{RouteErrorBoundary-CroxuKoi.js.map → RouteErrorBoundary-CZd7ln8v.js.map} +1 -1
  149. package/dist/core/web/public/next/assets/{SettingsSection-p-7FCGfn.js → SettingsSection-C9Qs9JWW.js} +2 -2
  150. package/dist/core/web/public/next/assets/{SettingsSection-p-7FCGfn.js.map → SettingsSection-C9Qs9JWW.js.map} +1 -1
  151. package/dist/core/web/public/next/assets/{Skeleton-4qq4HuJO.js → Skeleton-YkcOpgFb.js} +2 -2
  152. package/dist/core/web/public/next/assets/{Skeleton-4qq4HuJO.js.map → Skeleton-YkcOpgFb.js.map} +1 -1
  153. package/dist/core/web/public/next/assets/{StatusBadge-BbEdqEGn.js → StatusBadge-DJw0LSPg.js} +2 -2
  154. package/dist/core/web/public/next/assets/{StatusBadge-BbEdqEGn.js.map → StatusBadge-DJw0LSPg.js.map} +1 -1
  155. package/dist/core/web/public/next/assets/{TableView-nyYs7Sv1.js → TableView-Bj-w1O6o.js} +2 -2
  156. package/dist/core/web/public/next/assets/{TableView-nyYs7Sv1.js.map → TableView-Bj-w1O6o.js.map} +1 -1
  157. package/dist/core/web/public/next/assets/{UniverseConsoleApp-DjTpQUrA.js → UniverseConsoleApp-Bs2fxaen.js} +2 -2
  158. package/dist/core/web/public/next/assets/{UniverseConsoleApp-DjTpQUrA.js.map → UniverseConsoleApp-Bs2fxaen.js.map} +1 -1
  159. package/dist/core/web/public/next/assets/{UniverseView-BtApwayT.js → UniverseView-B6b2hw-8.js} +2 -2
  160. package/dist/core/web/public/next/assets/{UniverseView-BtApwayT.js.map → UniverseView-B6b2hw-8.js.map} +1 -1
  161. package/dist/core/web/public/next/assets/{UsageSection-Db99N6ao.js → UsageSection-C__ziNkV.js} +2 -2
  162. package/dist/core/web/public/next/assets/{UsageSection-Db99N6ao.js.map → UsageSection-C__ziNkV.js.map} +1 -1
  163. package/dist/core/web/public/next/assets/{VerseConsoleApp-COa3J2dO.js → VerseConsoleApp-Cu5aG6J6.js} +3 -3
  164. package/dist/core/web/public/next/assets/VerseConsoleApp-Cu5aG6J6.js.map +1 -0
  165. package/dist/core/web/public/next/assets/{global-CNVapoV1.js → global-BHjd6fVZ.js} +2 -2
  166. package/dist/core/web/public/next/assets/{global-CNVapoV1.js.map → global-BHjd6fVZ.js.map} +1 -1
  167. package/dist/core/web/public/next/assets/index-CJ-e8YA9.js +2 -0
  168. package/dist/core/web/public/next/assets/index-CJ-e8YA9.js.map +1 -0
  169. package/dist/core/web/public/next/assets/{index-BkUlX2Se.js → index-CpgkRaTi.js} +3 -3
  170. package/dist/core/web/public/next/assets/{index-BkUlX2Se.js.map → index-CpgkRaTi.js.map} +1 -1
  171. package/dist/core/web/public/next/assets/{queries-C9XS4SYq.js → queries-856qUN3Y.js} +2 -2
  172. package/dist/core/web/public/next/assets/{queries-C9XS4SYq.js.map → queries-856qUN3Y.js.map} +1 -1
  173. package/dist/core/web/public/next/assets/{use-guarded-action-Bql1nA-z.js → use-guarded-action-DwaESKVy.js} +2 -2
  174. package/dist/core/web/public/next/assets/{use-guarded-action-Bql1nA-z.js.map → use-guarded-action-DwaESKVy.js.map} +1 -1
  175. package/dist/core/web/public/next/assets/verse-model-Dllo8rRt.js +2 -0
  176. package/dist/core/web/public/next/assets/{verse-model-IrNQKtER.js.map → verse-model-Dllo8rRt.js.map} +1 -1
  177. package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js +2 -0
  178. package/dist/core/web/public/next/assets/workspace-model-JgmWDKt4.js.map +1 -0
  179. package/dist/core/web/public/next/index.html +1 -1
  180. package/dist/release-dependency-inventory.json +1 -1
  181. package/docs/README.md +4 -0
  182. package/package.json +1 -1
  183. package/dist/cli/activation.d.ts +0 -41
  184. package/dist/cli/activation.js +0 -485
  185. package/dist/cli/activation.js.map +0 -1
  186. package/dist/core/fleet/generated-repair-resolution.d.ts +0 -36
  187. package/dist/core/fleet/generated-repair-resolution.js +0 -245
  188. package/dist/core/fleet/generated-repair-resolution.js.map +0 -1
  189. package/dist/core/local-runtime/llama/port.d.ts +0 -17
  190. package/dist/core/local-runtime/llama/port.js +0 -47
  191. package/dist/core/local-runtime/llama/port.js.map +0 -1
  192. package/dist/core/local-runtime/llama/proxy-host.d.ts +0 -54
  193. package/dist/core/local-runtime/llama/proxy-host.js +0 -159
  194. package/dist/core/local-runtime/llama/proxy-host.js.map +0 -1
  195. package/dist/core/local-runtime/llama/proxy-process.d.ts +0 -148
  196. package/dist/core/local-runtime/llama/proxy-process.js +0 -250
  197. package/dist/core/local-runtime/llama/proxy-process.js.map +0 -1
  198. package/dist/core/local-runtime/llama/proxy-record.d.ts +0 -40
  199. package/dist/core/local-runtime/llama/proxy-record.js +0 -133
  200. package/dist/core/local-runtime/llama/proxy-record.js.map +0 -1
  201. package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +0 -118
  202. package/dist/core/local-runtime/llama/proxy-supervisor.js +0 -511
  203. package/dist/core/local-runtime/llama/proxy-supervisor.js.map +0 -1
  204. package/dist/core/web/public/next/assets/AutonomySection-BB8RD-tv.css +0 -1
  205. package/dist/core/web/public/next/assets/AutonomySection-BEwITtPJ.js +0 -2
  206. package/dist/core/web/public/next/assets/ChatSection-DrxqhBPK.css +0 -1
  207. package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js +0 -77
  208. package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js.map +0 -1
  209. package/dist/core/web/public/next/assets/VerseConsoleApp-COa3J2dO.js.map +0 -1
  210. package/dist/core/web/public/next/assets/index-YNTgDG2b.js +0 -2
  211. package/dist/core/web/public/next/assets/index-YNTgDG2b.js.map +0 -1
  212. package/dist/core/web/public/next/assets/verse-model-IrNQKtER.js +0 -2
  213. package/node_modules/which/CHANGELOG.md +0 -166
@@ -37,9 +37,11 @@
37
37
  import { homedir } from 'node:os';
38
38
  import { join } from 'node:path';
39
39
  import { passesMutationGate, readBody, sendJson } from '../web/api.js';
40
+ import { checkWorkspaceRootPath, expandHomePrefix } from './path-guard.js';
40
41
  import { discoverProjects } from './projects.js';
41
42
  import { discoverSeats, refreshSeatTelemetry } from './seats.js';
42
- import { VERSE_MAX_TURN_TEXT_BYTES, } from './types.js';
43
+ import { buildAutonomyScopeView, createVerseWorkspaceStore, describeRoots, rootNotes, VerseWorkspaceError, } from './workspaces.js';
44
+ import { VERSE_MAX_TURN_TEXT_BYTES, VERSE_MAX_WORKSPACE_ROOTS, VERSE_ROOT_PRIORITIES, verseSessionRoots, } from './types.js';
43
45
  import { handleVerseEventsSse, VERSE_EVENTS_PATH_RE, VERSE_SESSION_ID_RE } from './verse-stream.js';
44
46
  // ---------------------------------------------------------------------------
45
47
  // Route matching
@@ -115,6 +117,26 @@ async function cachedSeats(cfg) {
115
117
  export function invalidateVerseSeatCache() {
116
118
  seatCache = null;
117
119
  }
120
+ // ---------------------------------------------------------------------------
121
+ // Workspace registry singleton
122
+ // ---------------------------------------------------------------------------
123
+ let workspaceStore = null;
124
+ /**
125
+ * The workspace registry, rooted next to the session store so the two share
126
+ * one 0700 directory and one relocation story. Resolved at FIRST USE, not at
127
+ * module load, so a relocated HOME is honored exactly as `getVerseEngine()`
128
+ * does it.
129
+ */
130
+ export function getVerseWorkspaceStore() {
131
+ if (!workspaceStore) {
132
+ workspaceStore = createVerseWorkspaceStore({ root: join(homedir(), '.ashlr', 'verse') });
133
+ }
134
+ return workspaceStore;
135
+ }
136
+ /** Test hook: drop the memoized store so the next call re-reads under a new HOME. */
137
+ export function resetVerseWorkspaceStore(next = null) {
138
+ workspaceStore = next;
139
+ }
118
140
  /**
119
141
  * Seats with LIVE telemetry, for every read that a human looks at.
120
142
  *
@@ -226,23 +248,20 @@ const MAX_PATH_CHARS = 4096;
226
248
  * sanitizePublicJson() rewrites the home directory as `~` on every outbound
227
249
  * payload, so a project path the UI read from bootstrap comes back as
228
250
  * `~/...`. Expand it here so round-trips validate against the real path.
251
+ *
252
+ * Defined in `path-guard.ts` (the deny-root checker needs it before anything
253
+ * else runs) and re-exported here, which is the import path every existing
254
+ * caller and test already uses.
229
255
  */
230
- export function expandHomePrefix(path) {
231
- if (path === '~')
232
- return homedir();
233
- if (path.startsWith('~/'))
234
- return join(homedir(), path.slice(2));
235
- return path;
236
- }
237
- function parseCreateRequest(body, res) {
238
- const projectPath = body['projectPath'];
256
+ export { expandHomePrefix };
257
+ /**
258
+ * Validate the shared half of a create request (seat, model, title).
259
+ * Returns null after responding.
260
+ */
261
+ function parseSeatFields(body, res) {
239
262
  const seatId = body['seatId'];
240
263
  const model = body['model'];
241
264
  const title = body['title'];
242
- if (typeof projectPath !== 'string' || projectPath.trim().length === 0 || projectPath.length > MAX_PATH_CHARS) {
243
- sendInvalid(res, 'projectPath is required');
244
- return null;
245
- }
246
265
  if (typeof seatId !== 'string' || seatId.trim().length === 0) {
247
266
  sendInvalid(res, 'seatId is required');
248
267
  return null;
@@ -255,13 +274,271 @@ function parseCreateRequest(body, res) {
255
274
  sendInvalid(res, `title must be a string of at most ${MAX_TITLE_CHARS} characters`);
256
275
  return null;
257
276
  }
258
- const out = { projectPath: expandHomePrefix(projectPath.trim()), seatId: seatId.trim() };
277
+ const out = { seatId: seatId.trim() };
259
278
  if (typeof model === 'string')
260
279
  out.model = model;
261
280
  if (typeof title === 'string' && title.trim().length > 0)
262
281
  out.title = title.trim();
263
282
  return out;
264
283
  }
284
+ /**
285
+ * Parse a create request in either of its two spellings.
286
+ *
287
+ * `workspaceId` and the path spelling are MUTUALLY EXCLUSIVE and the mix is
288
+ * rejected rather than resolved: silently preferring one would mean the
289
+ * operator's stated roots and the session's actual roots could differ, and
290
+ * that difference is exactly what a workspace exists to make legible.
291
+ *
292
+ * Every path — primary and extra alike — goes through the same deny-root
293
+ * guard the enrollment registry uses, so `~/.ashlr` (provider tokens, the
294
+ * KILL sentinel, the 0600 launcher records) can never become a session root.
295
+ */
296
+ function parseCreateRequest(body, res, store) {
297
+ const seatFields = parseSeatFields(body, res);
298
+ if (!seatFields)
299
+ return null;
300
+ const workspaceId = body['workspaceId'];
301
+ const projectPath = body['projectPath'];
302
+ const extraRoots = body['extraRoots'];
303
+ if (workspaceId !== undefined) {
304
+ if (typeof workspaceId !== 'string' || workspaceId.trim().length === 0) {
305
+ sendInvalid(res, 'workspaceId must be a non-empty string');
306
+ return null;
307
+ }
308
+ if (projectPath !== undefined || extraRoots !== undefined) {
309
+ sendInvalid(res, 'send workspaceId or projectPath/extraRoots, not both');
310
+ return null;
311
+ }
312
+ const workspace = store.get(workspaceId.trim());
313
+ if (!workspace) {
314
+ sendInvalid(res, `unknown workspace: ${workspaceId.trim()}`);
315
+ return null;
316
+ }
317
+ const primary = workspace.roots.find((r) => r.primary) ?? workspace.roots[0];
318
+ if (!primary) {
319
+ sendInvalid(res, `workspace ${workspace.name} has no roots`);
320
+ return null;
321
+ }
322
+ const rest = workspace.roots.filter((r) => r.path !== primary.path).map((r) => r.path);
323
+ return {
324
+ projectPath: primary.path,
325
+ ...(rest.length > 0 ? { extraRoots: rest } : {}),
326
+ workspaceId: workspace.id,
327
+ // Read from the registry, never from the body.
328
+ workspaceName: workspace.name,
329
+ ...seatFields,
330
+ };
331
+ }
332
+ if (typeof projectPath !== 'string' || projectPath.trim().length === 0 || projectPath.length > MAX_PATH_CHARS) {
333
+ sendInvalid(res, 'projectPath is required');
334
+ return null;
335
+ }
336
+ // GUARD ONLY — the checked value is deliberately discarded.
337
+ //
338
+ // `checkWorkspaceRootPath` returns the PHYSICAL path, and substituting it
339
+ // here would change what the engine receives (`/var/…` → `/private/var/…`
340
+ // on macOS) for every single-root chat that has ever worked. The engine
341
+ // already realpaths in `resolveProjectDir`, so the stored record is
342
+ // identical either way; what this call adds is the deny-root refusal, and
343
+ // that is all it should add.
344
+ const primaryCheck = checkWorkspaceRootPath(projectPath.trim());
345
+ if (!primaryCheck.ok) {
346
+ sendInvalid(res, primaryCheck.error);
347
+ return null;
348
+ }
349
+ const primary = expandHomePrefix(projectPath.trim());
350
+ const resolvedExtras = [];
351
+ if (extraRoots !== undefined) {
352
+ if (!Array.isArray(extraRoots)) {
353
+ sendInvalid(res, 'extraRoots must be an array of absolute paths');
354
+ return null;
355
+ }
356
+ if (extraRoots.length > VERSE_MAX_WORKSPACE_ROOTS - 1) {
357
+ sendInvalid(res, `a session may have at most ${VERSE_MAX_WORKSPACE_ROOTS} roots`);
358
+ return null;
359
+ }
360
+ for (const raw of extraRoots) {
361
+ if (typeof raw !== 'string' || raw.length > MAX_PATH_CHARS) {
362
+ sendInvalid(res, 'every extra root must be an absolute path');
363
+ return null;
364
+ }
365
+ const check = checkWorkspaceRootPath(raw.trim());
366
+ if (!check.ok) {
367
+ sendInvalid(res, check.error);
368
+ return null;
369
+ }
370
+ // Same rule as the primary: guard here, canonicalise in the engine.
371
+ // `resolveExtraRoots` realpaths every entry, drops the one equal to the
372
+ // primary and deduplicates — so a symlink and its target collapse to
373
+ // one root there rather than being granted twice.
374
+ const expanded = expandHomePrefix(raw.trim());
375
+ if (!resolvedExtras.includes(expanded))
376
+ resolvedExtras.push(expanded);
377
+ }
378
+ }
379
+ return {
380
+ projectPath: primary,
381
+ ...(resolvedExtras.length > 0 ? { extraRoots: resolvedExtras } : {}),
382
+ ...seatFields,
383
+ };
384
+ }
385
+ // ---------------------------------------------------------------------------
386
+ // Workspace routes
387
+ // ---------------------------------------------------------------------------
388
+ /** A `VerseWorkspaceError` carries the contract's 400; anything else rethrows. */
389
+ function sendWorkspaceError(res, err) {
390
+ if (err instanceof VerseWorkspaceError) {
391
+ sendJson(res, 400, { code: 'VERSE_INVALID', error: err.message });
392
+ return true;
393
+ }
394
+ throw err;
395
+ }
396
+ function parseRootsField(value) {
397
+ if (!Array.isArray(value) || value.length === 0)
398
+ return null;
399
+ if (value.length > VERSE_MAX_WORKSPACE_ROOTS)
400
+ return null;
401
+ const out = [];
402
+ for (const entry of value) {
403
+ if (typeof entry !== 'string' || entry.trim().length === 0 || entry.length > MAX_PATH_CHARS)
404
+ return null;
405
+ out.push(entry.trim());
406
+ }
407
+ return out;
408
+ }
409
+ function isRootPriority(value) {
410
+ return typeof value === 'string' && VERSE_ROOT_PRIORITIES.includes(value);
411
+ }
412
+ /** Workspaces + their live per-root facts + priorities, in one read. */
413
+ function workspacesResponse(store) {
414
+ const workspaces = store.list();
415
+ const status = {};
416
+ for (const workspace of workspaces) {
417
+ status[workspace.id] = describeRoots(workspace.roots.map((r) => r.path));
418
+ }
419
+ return {
420
+ workspaces,
421
+ status,
422
+ priorities: store.priorities(),
423
+ focusSectionId: store.focusSectionId(),
424
+ };
425
+ }
426
+ /**
427
+ * `/api/verse/workspaces[...]`.
428
+ *
429
+ * GETs are readable like every other Verse GET. Every mutation is a POST
430
+ * behind `allowDispatch` + `passesMutationGate`, the same gate the session
431
+ * routes use — a workspace decides what an agent can write to, so it is a
432
+ * control-plane change, not a preference.
433
+ */
434
+ async function handleWorkspaces(ctx, req, res, path, method) {
435
+ const store = getVerseWorkspaceStore();
436
+ const prefix = `${VERSE_API_PREFIX}/workspaces`;
437
+ if (path === prefix && method === 'GET') {
438
+ sendJson(res, 200, workspacesResponse(store));
439
+ return true;
440
+ }
441
+ if (method !== 'POST') {
442
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
443
+ return true;
444
+ }
445
+ if (!ctx.allowDispatch) {
446
+ sendJson(res, 404, { error: 'not found' });
447
+ return true;
448
+ }
449
+ if (!passesMutationGate(req, res, ctx.token))
450
+ return true;
451
+ const body = await readJsonBody(req, res);
452
+ if (!body)
453
+ return true;
454
+ try {
455
+ // POST /api/verse/workspaces — create
456
+ if (path === prefix) {
457
+ const roots = parseRootsField(body['roots']);
458
+ if (!roots) {
459
+ sendInvalid(res, `roots must be 1-${VERSE_MAX_WORKSPACE_ROOTS} absolute paths`);
460
+ return true;
461
+ }
462
+ const created = store.create(String(body['name'] ?? ''), roots, body['section'] === true);
463
+ sendJson(res, 201, created);
464
+ return true;
465
+ }
466
+ const rest = path.slice(`${prefix}/`.length).split('/');
467
+ // POST /api/verse/workspaces/priority — rank one repo
468
+ if (rest.length === 1 && rest[0] === 'priority') {
469
+ const target = body['path'];
470
+ const priority = body['priority'];
471
+ if (typeof target !== 'string' || target.trim().length === 0 || target.length > MAX_PATH_CHARS) {
472
+ sendInvalid(res, 'path is required');
473
+ return true;
474
+ }
475
+ if (!isRootPriority(priority)) {
476
+ sendInvalid(res, `priority must be one of ${VERSE_ROOT_PRIORITIES.join(', ')}`);
477
+ return true;
478
+ }
479
+ const priorities = store.setPriority(target.trim(), priority);
480
+ // Echo the ranked scope so the caller sees the ORDER it just changed,
481
+ // and sees that ranking did not widen it.
482
+ sendJson(res, 200, { ok: true, priorities, scope: buildAutonomyScopeView(store) });
483
+ return true;
484
+ }
485
+ // POST /api/verse/workspaces/focus — focus one section, or clear it
486
+ if (rest.length === 1 && rest[0] === 'focus') {
487
+ const sectionId = body['sectionId'];
488
+ if (sectionId !== null && (typeof sectionId !== 'string' || sectionId.trim().length === 0)) {
489
+ sendInvalid(res, 'sectionId must be a workspace id or null');
490
+ return true;
491
+ }
492
+ const focusSectionId = store.setFocusSection(sectionId === null ? null : sectionId.trim());
493
+ sendJson(res, 200, { ok: true, focusSectionId, scope: buildAutonomyScopeView(store) });
494
+ return true;
495
+ }
496
+ // POST /api/verse/workspaces/:id/(update|delete)
497
+ const id = rest[0] ?? '';
498
+ const action = rest[1] ?? '';
499
+ if (!id || rest.length !== 2) {
500
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
501
+ return true;
502
+ }
503
+ if (action === 'delete') {
504
+ if (!store.remove(id)) {
505
+ sendJson(res, 404, { code: 'VERSE_SESSION_NOT_FOUND', error: `workspace not found: ${id}` });
506
+ return true;
507
+ }
508
+ // Sessions already created from this workspace keep their PINNED roots
509
+ // — deleting the definition never narrows or widens a live chat.
510
+ sendJson(res, 200, { ok: true });
511
+ return true;
512
+ }
513
+ if (action !== 'update') {
514
+ sendJson(res, 404, { error: `not found: ${method} ${path}` });
515
+ return true;
516
+ }
517
+ const patch = {};
518
+ if (body['name'] !== undefined) {
519
+ if (typeof body['name'] !== 'string') {
520
+ sendInvalid(res, 'name must be a string');
521
+ return true;
522
+ }
523
+ patch.name = body['name'];
524
+ }
525
+ if (body['roots'] !== undefined) {
526
+ const roots = parseRootsField(body['roots']);
527
+ if (!roots) {
528
+ sendInvalid(res, `roots must be 1-${VERSE_MAX_WORKSPACE_ROOTS} absolute paths`);
529
+ return true;
530
+ }
531
+ patch.roots = roots;
532
+ }
533
+ if (body['section'] !== undefined)
534
+ patch.section = body['section'] === true;
535
+ sendJson(res, 200, store.update(id, patch));
536
+ return true;
537
+ }
538
+ catch (err) {
539
+ return sendWorkspaceError(res, err);
540
+ }
541
+ }
265
542
  // ---------------------------------------------------------------------------
266
543
  // Handler
267
544
  // ---------------------------------------------------------------------------
@@ -283,6 +560,11 @@ export async function handleVerseApi(ctx, req, res, path, method) {
283
560
  seats: discovery.seats,
284
561
  projects: discoverProjects({ sessions }),
285
562
  sessions,
563
+ // NOT `workspaces`. Bootstrap's key set is asserted exactly by
564
+ // test/verse-api.test.ts (the no-launcher-leak shape guard), and the
565
+ // dialog wants `status` and `priorities` alongside the list anyway —
566
+ // which only GET /api/verse/workspaces carries. Adding a key here
567
+ // would have bought a round trip at the price of the frozen shape.
286
568
  dispatchEnabled: ctx.allowDispatch,
287
569
  localRuntime: discovery.localRuntime,
288
570
  };
@@ -304,6 +586,22 @@ export async function handleVerseApi(ctx, req, res, path, method) {
304
586
  sendJson(res, 200, body);
305
587
  return true;
306
588
  }
589
+ // ── /api/verse/workspaces ────────────────────────────────────────────
590
+ // A workspace is NOT enrollment and cannot become it: nothing under this
591
+ // prefix touches ~/.ashlr/enrollment.json. Mutations sit behind the same
592
+ // dispatch gate as every other POST here.
593
+ if (path === `${VERSE_API_PREFIX}/workspaces` || path.startsWith(`${VERSE_API_PREFIX}/workspaces/`)) {
594
+ return handleWorkspaces(ctx, req, res, path, method);
595
+ }
596
+ // ── /api/verse/autonomy-scope ────────────────────────────────────────
597
+ // Enrolled repos, ORDERED by section focus and priority. Read-only, and
598
+ // derived by intersecting sections with the enrollment registry — so it
599
+ // is always a subset of what the autonomous lane already reaches.
600
+ if (path === `${VERSE_API_PREFIX}/autonomy-scope` && method === 'GET') {
601
+ const view = buildAutonomyScopeView(getVerseWorkspaceStore());
602
+ sendJson(res, 200, view);
603
+ return true;
604
+ }
307
605
  // ── /api/verse/sessions ──────────────────────────────────────────────
308
606
  if (path === `${VERSE_API_PREFIX}/sessions`) {
309
607
  if (method === 'GET') {
@@ -321,7 +619,7 @@ export async function handleVerseApi(ctx, req, res, path, method) {
321
619
  const body = await readJsonBody(req, res);
322
620
  if (!body)
323
621
  return true;
324
- const create = parseCreateRequest(body, res);
622
+ const create = parseCreateRequest(body, res, getVerseWorkspaceStore());
325
623
  if (!create)
326
624
  return true;
327
625
  const discovery = await cachedSeats(ctx.cfg);
@@ -363,6 +661,30 @@ export async function handleVerseApi(ctx, req, res, path, method) {
363
661
  sendInvalid(res, 'invalid session id');
364
662
  return true;
365
663
  }
664
+ // GET /api/verse/sessions/:id/roots
665
+ //
666
+ // Per-root identity for the session: branch, dirty state and remote for
667
+ // each root, whether the engine can actually reach it, and whether the
668
+ // autonomous lane would. Computed live rather than stored, because a
669
+ // branch recorded at session creation would be wrong by the next commit.
670
+ if (method === 'GET' && action === 'roots') {
671
+ const engine = await getVerseEngine();
672
+ const session = engine.getSession(id);
673
+ if (!session) {
674
+ sendJson(res, 404, { code: 'VERSE_SESSION_NOT_FOUND', error: `session not found: ${id}` });
675
+ return true;
676
+ }
677
+ const roots = describeRoots(verseSessionRoots(session), { engine: session.engine });
678
+ const body = {
679
+ sessionId: session.id,
680
+ workspaceId: session.workspaceId ?? null,
681
+ workspaceName: session.workspaceName ?? null,
682
+ roots,
683
+ notes: rootNotes(roots, session.engine),
684
+ };
685
+ sendJson(res, 200, body);
686
+ return true;
687
+ }
366
688
  // GET /api/verse/sessions/:id
367
689
  if (method === 'GET' && action === '') {
368
690
  const engine = await getVerseEngine();
@@ -1 +1 @@
1
- {"version":3,"file":"verse-api.js","sourceRoot":"","sources":["../../../src/core/verse/verse-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verse-api.js","sourceRoot":"","sources":["../../../src/core/verse/verse-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * core/verse/workspaces.ts — the workspace registry.
3
+ *
4
+ * <root>/workspaces.json 0600, atomic temp + rename
5
+ *
6
+ * WHAT THIS FILE IS NOT: it is not `~/.ashlr/enrollment.json`, it never writes
7
+ * that file, and nothing here can put a path into it. That separation is the
8
+ * whole security design.
9
+ *
10
+ * enrollment.json — WHAT THE AUTONOMOUS LANE MAY MUTATE. `assertMayMutate`
11
+ * reads it, exact-match per repo, and refuses anything
12
+ * absent. Untouched by this feature.
13
+ * workspaces.json — WHAT AN INTERACTIVE SESSION MAY REACH, plus ordering
14
+ * and grouping hints for the autonomous lane.
15
+ *
16
+ * So a workspace can hand a chat five folders without any of them becoming
17
+ * autonomously writable, and a "section" can rank repos the fleet already had
18
+ * without adding one. `buildAutonomyScopeView` enforces that in code: it
19
+ * INTERSECTS section membership with the enrollment registry and can only
20
+ * ever return a subset of it.
21
+ *
22
+ * Every root is validated through `path-guard.ts` — the same forbidden roots
23
+ * enrollment uses (`/`, `$HOME`, `~/.ashlr`, `~/.codex/artifacts`), checked
24
+ * both lexically and physically so a symlink cannot smuggle one in.
25
+ */
26
+ import { type VerseAutonomyScopeView, type VerseRootGit, type VerseRootPriority, type VerseRootStatus, type VerseWorkspace } from './types.js';
27
+ export declare class VerseWorkspaceError extends Error {
28
+ readonly code: "VERSE_INVALID";
29
+ constructor(message: string);
30
+ }
31
+ export interface ResolvedRoots {
32
+ /** The session cwd, and the value `projectPath` carries. */
33
+ primary: string;
34
+ /** Everything else, deduped, in order, never containing the primary. */
35
+ extra: string[];
36
+ }
37
+ /**
38
+ * Validate and canonicalise a root list.
39
+ *
40
+ * The first entry is the primary. Every entry goes through the same deny-root
41
+ * guard enrollment uses, is realpath'd, and is deduplicated AFTER resolution —
42
+ * so two spellings of one directory (a symlink and its target) collapse to one
43
+ * root rather than being granted twice.
44
+ */
45
+ export declare function resolveWorkspaceRoots(roots: readonly string[], opts?: {
46
+ artifactsRoot?: string;
47
+ }): ResolvedRoots;
48
+ /**
49
+ * Branch, dirty state and remote for one root.
50
+ *
51
+ * `remote` is the canonical `owner/repo` for a GitHub origin, NOT the raw
52
+ * remote URL: an https remote can carry credentials in its userinfo, and this
53
+ * value reaches an API response.
54
+ */
55
+ export declare function rootGitIdentity(path: string): VerseRootGit | null;
56
+ /**
57
+ * Which engines can actually be granted a root beyond their cwd.
58
+ *
59
+ * VERIFIED against each CLI's own `--help` on the installed versions, not
60
+ * from memory (see `adapters/claude.ts` and `adapters/codex.ts` for the exact
61
+ * flags and how they were checked):
62
+ *
63
+ * claude / local `--add-dir <directories...>` — yes
64
+ * codex `--add-dir <DIR>` on `exec`, `sandbox_workspace_write.
65
+ * writable_roots` on `exec resume` — yes
66
+ * grok NOTHING. `grok --help` and `grok agent --help` expose
67
+ * `--cwd` and a `--sandbox <PROFILE>` NAME, and no flag
68
+ * that adds a directory. So a Grok seat gets the primary
69
+ * root and nothing else, and we say so instead of inventing
70
+ * a flag that would fail the turn before inference.
71
+ */
72
+ export declare function engineSupportsExtraRoots(engine: string): boolean;
73
+ export interface RootStatusOptions {
74
+ /** Engine the roots will be handed to; decides `reachable`. */
75
+ engine?: string;
76
+ }
77
+ /** Project one root list into the status rows a client renders. */
78
+ export declare function describeRoots(roots: readonly string[], opts?: RootStatusOptions): VerseRootStatus[];
79
+ /**
80
+ * The plain-language facts a client must show rather than imply: roots the
81
+ * engine cannot reach, and roots the autonomous lane will refuse.
82
+ */
83
+ export declare function rootNotes(statuses: readonly VerseRootStatus[], engine?: string): string[];
84
+ export interface VerseWorkspaceStore {
85
+ readonly path: string;
86
+ list(): VerseWorkspace[];
87
+ get(id: string): VerseWorkspace | null;
88
+ create(name: string, roots: readonly string[], section?: boolean): VerseWorkspace;
89
+ update(id: string, patch: {
90
+ name?: string;
91
+ roots?: readonly string[];
92
+ section?: boolean;
93
+ }): VerseWorkspace;
94
+ remove(id: string): boolean;
95
+ priorities(): Record<string, VerseRootPriority>;
96
+ setPriority(path: string, priority: VerseRootPriority): Record<string, VerseRootPriority>;
97
+ focusSectionId(): string | null;
98
+ setFocusSection(id: string | null): string | null;
99
+ }
100
+ export interface VerseWorkspaceStoreOptions {
101
+ /** Store root. Default `~/.ashlr/verse`. */
102
+ root?: string;
103
+ now?: () => Date;
104
+ /** Override the codex artifacts deny-root (tests). */
105
+ artifactsRoot?: string;
106
+ }
107
+ export declare function createVerseWorkspaceStore(opts?: VerseWorkspaceStoreOptions): VerseWorkspaceStore;
108
+ export interface AutonomyScopeInputs {
109
+ workspaces: readonly VerseWorkspace[];
110
+ priorities: Readonly<Record<string, VerseRootPriority>>;
111
+ focusSectionId: string | null;
112
+ /** Enrolled repos. Injected so this function is pure and testable. */
113
+ enrolledRepos: readonly string[];
114
+ }
115
+ /**
116
+ * Rank the autonomous lane's scope.
117
+ *
118
+ * THE INVARIANT, AND THE REASON THIS FUNCTION EXISTS RATHER THAN A FIELD ON
119
+ * THE WORKSPACE: `entries` is derived from `enrolledRepos` and nothing else
120
+ * can add to it. Sections and priorities are read to ORDER and GROUP that
121
+ * list; a repo a section names but enrollment does not carry appears only in
122
+ * `unenrolledSectionRoots`, which is a disclosure, not a grant.
123
+ *
124
+ * Order: focused section first (when a focus is set), then priority, then
125
+ * name — so the ordering is total and stable rather than dependent on the
126
+ * registry's insertion order.
127
+ */
128
+ export declare function rankAutonomyScope(input: AutonomyScopeInputs): VerseAutonomyScopeView;
129
+ /** `rankAutonomyScope` against the live enrollment registry. Never throws. */
130
+ export declare function buildAutonomyScopeView(store: VerseWorkspaceStore): VerseAutonomyScopeView;