@vibe-commit/capture 0.7.0 → 0.9.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 (152) hide show
  1. package/README.md +238 -7
  2. package/dist/account_not_here.d.ts +15 -0
  3. package/dist/account_not_here.js +25 -0
  4. package/dist/account_not_here.js.map +1 -0
  5. package/dist/agents/claude_code.js +13 -0
  6. package/dist/agents/claude_code.js.map +1 -1
  7. package/dist/agents/codex_cli.js +11 -0
  8. package/dist/agents/codex_cli.js.map +1 -1
  9. package/dist/agents/cursor.js +7 -1
  10. package/dist/agents/cursor.js.map +1 -1
  11. package/dist/agents/registry.d.ts +7 -0
  12. package/dist/agents/registry.js +9 -0
  13. package/dist/agents/registry.js.map +1 -1
  14. package/dist/agents/types.d.ts +32 -0
  15. package/dist/agents/types.js.map +1 -1
  16. package/dist/bounded_id.d.ts +29 -0
  17. package/dist/bounded_id.js +42 -0
  18. package/dist/bounded_id.js.map +1 -0
  19. package/dist/codex_folders.d.ts +340 -0
  20. package/dist/codex_folders.js +1448 -0
  21. package/dist/codex_folders.js.map +1 -0
  22. package/dist/commands/auth.d.ts +7 -0
  23. package/dist/commands/auth.js +21 -0
  24. package/dist/commands/auth.js.map +1 -1
  25. package/dist/commands/backfill.d.ts +29 -7
  26. package/dist/commands/backfill.js +387 -109
  27. package/dist/commands/backfill.js.map +1 -1
  28. package/dist/commands/browser_credential.d.ts +4 -2
  29. package/dist/commands/browser_credential.js +5 -2
  30. package/dist/commands/browser_credential.js.map +1 -1
  31. package/dist/commands/connect.d.ts +10 -1
  32. package/dist/commands/connect.js +14 -9
  33. package/dist/commands/connect.js.map +1 -1
  34. package/dist/commands/connect_account.d.ts +135 -0
  35. package/dist/commands/connect_account.js +321 -0
  36. package/dist/commands/connect_account.js.map +1 -0
  37. package/dist/commands/connect_picker.js +204 -29
  38. package/dist/commands/connect_picker.js.map +1 -1
  39. package/dist/commands/device_credential.d.ts +3 -1
  40. package/dist/commands/device_credential.js +1 -0
  41. package/dist/commands/device_credential.js.map +1 -1
  42. package/dist/commands/finalize.d.ts +67 -0
  43. package/dist/commands/finalize.js +450 -114
  44. package/dist/commands/finalize.js.map +1 -1
  45. package/dist/commands/finish_mint.d.ts +28 -0
  46. package/dist/commands/finish_mint.js +16 -4
  47. package/dist/commands/finish_mint.js.map +1 -1
  48. package/dist/commands/scan.d.ts +28 -0
  49. package/dist/commands/scan.js +11 -0
  50. package/dist/commands/scan.js.map +1 -1
  51. package/dist/commands/status.d.ts +19 -1
  52. package/dist/commands/status.js +123 -14
  53. package/dist/commands/status.js.map +1 -1
  54. package/dist/commands/status_machine.d.ts +12 -3
  55. package/dist/commands/status_machine.js +111 -13
  56. package/dist/commands/status_machine.js.map +1 -1
  57. package/dist/commands/sync_reason.d.ts +17 -0
  58. package/dist/commands/sync_reason.js +25 -0
  59. package/dist/commands/sync_reason.js.map +1 -0
  60. package/dist/consent.d.ts +131 -3
  61. package/dist/consent.js +248 -14
  62. package/dist/consent.js.map +1 -1
  63. package/dist/copy/strings.d.ts +165 -4
  64. package/dist/copy/strings.js +190 -7
  65. package/dist/copy/strings.js.map +1 -1
  66. package/dist/folder_grants.d.ts +44 -0
  67. package/dist/folder_grants.js +101 -0
  68. package/dist/folder_grants.js.map +1 -0
  69. package/dist/git.d.ts +26 -4
  70. package/dist/git.js +82 -11
  71. package/dist/git.js.map +1 -1
  72. package/dist/grants_sync.d.ts +165 -0
  73. package/dist/grants_sync.js +289 -0
  74. package/dist/grants_sync.js.map +1 -0
  75. package/dist/grants_verb.d.ts +70 -0
  76. package/dist/grants_verb.js +121 -0
  77. package/dist/grants_verb.js.map +1 -0
  78. package/dist/hooks/entry.d.ts +30 -50
  79. package/dist/hooks/entry.js +601 -561
  80. package/dist/hooks/entry.js.map +1 -1
  81. package/dist/hooks/fire_lock.d.ts +31 -0
  82. package/dist/hooks/fire_lock.js +120 -12
  83. package/dist/hooks/fire_lock.js.map +1 -1
  84. package/dist/hooks/session_grants.d.ts +59 -0
  85. package/dist/hooks/session_grants.js +91 -0
  86. package/dist/hooks/session_grants.js.map +1 -0
  87. package/dist/hooks/session_start.d.ts +28 -7
  88. package/dist/hooks/session_start.js +55 -11
  89. package/dist/hooks/session_start.js.map +1 -1
  90. package/dist/index.js +22 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/machine_state.d.ts +44 -1
  93. package/dist/machine_state.js +75 -12
  94. package/dist/machine_state.js.map +1 -1
  95. package/dist/oauth/discovery.js +2 -1
  96. package/dist/oauth/discovery.js.map +1 -1
  97. package/dist/oauth/pkce.js +2 -1
  98. package/dist/oauth/pkce.js.map +1 -1
  99. package/dist/oauth/retire.d.ts +10 -0
  100. package/dist/oauth/retire.js +13 -0
  101. package/dist/oauth/retire.js.map +1 -1
  102. package/dist/paths.d.ts +54 -1
  103. package/dist/paths.js +88 -12
  104. package/dist/paths.js.map +1 -1
  105. package/dist/pending_revoke.d.ts +117 -0
  106. package/dist/pending_revoke.js +233 -0
  107. package/dist/pending_revoke.js.map +1 -0
  108. package/dist/pending_revoke_file.d.ts +55 -0
  109. package/dist/pending_revoke_file.js +74 -0
  110. package/dist/pending_revoke_file.js.map +1 -0
  111. package/dist/physical_path.d.ts +46 -0
  112. package/dist/physical_path.js +151 -0
  113. package/dist/physical_path.js.map +1 -0
  114. package/dist/picker.d.ts +82 -5
  115. package/dist/picker.js +183 -10
  116. package/dist/picker.js.map +1 -1
  117. package/dist/picker_checklist.d.ts +27 -3
  118. package/dist/picker_checklist.js +81 -6
  119. package/dist/picker_checklist.js.map +1 -1
  120. package/dist/policy.d.ts +24 -1
  121. package/dist/policy.js +30 -2
  122. package/dist/policy.js.map +1 -1
  123. package/dist/post.d.ts +55 -2
  124. package/dist/post.js +72 -22
  125. package/dist/post.js.map +1 -1
  126. package/dist/project.d.ts +89 -0
  127. package/dist/project.js +123 -0
  128. package/dist/project.js.map +1 -1
  129. package/dist/redact.d.ts +77 -2
  130. package/dist/redact.js +713 -47
  131. package/dist/redact.js.map +1 -1
  132. package/dist/session_targets.d.ts +713 -0
  133. package/dist/session_targets.js +2602 -0
  134. package/dist/session_targets.js.map +1 -0
  135. package/dist/spool.d.ts +12 -0
  136. package/dist/spool.js +29 -1
  137. package/dist/spool.js.map +1 -1
  138. package/dist/spool_union.d.ts +51 -0
  139. package/dist/spool_union.js +57 -0
  140. package/dist/spool_union.js.map +1 -0
  141. package/dist/state.d.ts +5 -0
  142. package/dist/state.js +19 -1
  143. package/dist/state.js.map +1 -1
  144. package/dist/system_message.d.ts +25 -2
  145. package/dist/system_message.js +29 -5
  146. package/dist/system_message.js.map +1 -1
  147. package/dist/text_tail.d.ts +8 -0
  148. package/dist/text_tail.js +19 -0
  149. package/dist/text_tail.js.map +1 -0
  150. package/dist/version.d.ts +1 -1
  151. package/dist/version.js +1 -1
  152. package/package.json +3 -3
package/README.md CHANGED
@@ -25,12 +25,12 @@ the approved direction points at `Vibe-Commit/claude-plugin`, which vendors the
25
25
 
26
26
  | Command | What it does |
27
27
  |---|---|
28
- | `vibecommit connect` | Choose the repositories to capture, from any folder, and connect them: whole owners, including repos you clone later, or single repos. It shows what is uploaded and asks before it signs in, adds commit hooks to each clone, and offers to upload sessions still on this machine. A repo with no remote keeps the one-repo flow. `--typed` uses the typed prompt instead of the arrow-key list. On a machine with no credential it signs you in through the browser first. |
29
- | `vibecommit auth` | Replace this machine's credential: sign in through the browser, or `--paste` one you made in Settings. Run it again whenever `status` or a hook says the credential is no longer accepted. On a terminal it then goes on to `connect`: inside a git repo, or outside one on a machine that captures nothing yet; with `--stdin` or no terminal it only saves the credential. |
28
+ | `vibecommit connect` | Choose the repositories to capture, from any folder, and connect them: whole owners, including repos you clone later, or single repos. It shows what is uploaded and asks before it signs in, adds commit hooks to each clone, and offers to upload sessions still on this machine. A repo with no remote keeps the one-repo flow. `--typed` uses the typed prompt instead of the arrow-key list. On a machine with no credential it signs you in through the browser after you say yes; with a browser to sign in with, `g` instead signs in first to read the repositories your account already grants, then asks before anything is captured. |
29
+ | `vibecommit auth` | Replace this machine's credential: sign in through the browser, or `--paste` one you made in Settings. Run it again whenever `status` or a hook says the credential is no longer accepted. On a terminal it then goes on to `connect`: inside a git repo, or outside one on a machine that captures nothing yet; with `--stdin` or no terminal it only saves the credential. On a terminal, a credential it saves on a machine that has already synced with your account is synced before `auth` returns. |
30
30
  | `vibecommit scan [--json]` | List the repositories you have used a coding agent in on this machine, from the agents' folder names and Codex's thread index. It opens no session file, uploads nothing and changes no setting. Exit `4` when none is found; `--json` prints one document, including what it could not list and why. |
31
31
  | `vibecommit backfill` | Upload the earlier coding-agent sessions still on this machine, for the repositories you chose. It lists them first and asks (default no); a Claude Code session is sent only after reading one value from its transcript, the folder it started in, to check it belongs to that repository. Sessions arrive without commit links. Not offered: Cursor sessions (Cursor does not record that folder), sessions over 50 MiB, and sessions in a clone with no reflog. It asks again about each repository as it goes, so `vibecommit off` stops the rest of that repository. **Exit codes:** `0` done, declined at the question, or interrupted with Ctrl+C (sessions held for an organization's approval are done too), `1` stopped with the resume fix (the server asked to wait, could not be reached, or refused this machine's credential) or could not run, `2` no terminal, or an argument was given, `3` not connected, `4` nothing to upload. **Resuming:** a stopped or interrupted run loses nothing already sent; run it again and it offers only the sessions not yet uploaded. |
32
- | `vibecommit status` | Show whether capture is on for this repo, or for this machine from outside a repo, and when it last succeeded. Inside a repo it also says why it is on (`basis`). |
33
- | `vibecommit off` | Stop capturing for this repo. |
32
+ | `vibecommit status` | Show whether capture is on for this repo, or for this machine from outside a repo, and when it last succeeded. Inside a repo it also says why it is on (`basis`). On a machine with a credential it first syncs with your account (3 s at most), and lists what your account grants that this machine has not named. |
33
+ | `vibecommit off` | Stop capturing for this repo, for every clone of it on this machine. On a machine with a credential it also tells your account, so your other machines running VibeCommit 0.8.0 or later stop capturing it once they sync. |
34
34
  | `vibecommit why <file>:<line>` | Show the conversation turns recorded against the commit that last changed this line. |
35
35
  | `vibecommit report --since <when>` | Summarise capture coverage over a time window. |
36
36
  | `vibecommit finalize --session <id>` \| `--latest` | Close a finished session's last turn so commits made in it can be recorded. |
@@ -173,14 +173,17 @@ has not approved capture yet now gets its hooks installed too: the "capture is a
173
173
  printed without them. The ending reports hook setup first, then prints "Connected." and, when the server's reply
174
174
  names the recorded session, a link to that session's page (`/app/conversations/<id>`), falling back to the
175
175
  captures list; the PATH check and the unconfirmed-credential note follow it. Only `connect` reads that part of the
176
- server's reply; the hooks never read a successful response body.
176
+ server's reply; the hooks never read a successful response body (from 0.8.0 one hook does: SessionStart's single, bounded `GET` of
177
+ your account's grants).
177
178
 
178
179
  0.6.1 changes no contract. When the server answers an upload with an error, the client now stops reading that
179
180
  error's body at 64 KiB even when the server does not declare its length; it used to buffer the whole body before
180
- checking. The hooks still never read a successful response body.
181
+ checking. The hooks still never read a successful response body (from 0.8.0 one hook does: SessionStart's single, bounded `GET` of
182
+ your account's grants).
181
183
 
182
184
  0.7.0 lets you connect from any folder, adds `scan` and `backfill`, puts a stable code on every error, and changes
183
- the contracts below. The hooks still never read a successful response body.
185
+ the contracts below. The hooks still never read a successful response body (from 0.8.0 one hook does: SessionStart's
186
+ single, bounded `GET` of your account's grants).
184
187
 
185
188
  *Connecting.* `vibecommit connect` no longer needs a git work tree. It lists the repositories you have used a coding
186
189
  agent in (Claude Code, Codex CLI and Cursor) from the agents' folder names and Codex's thread index, without opening
@@ -249,6 +252,234 @@ issues page, and `repository` is dropped, because this repository is private.
249
252
  digits, `connect`'s test capture looked in a Claude Code folder that does not exist and skipped the upload; it now
250
253
  spells the folder name as Claude Code does.
251
254
 
255
+ 0.8.0 lets your VibeCommit account remember which repositories you capture, so another machine can offer the same
256
+ choices. It changes the contracts below. It needs a server that has the account-grants routes; against one that has not
257
+ (a 404, a timeout, an answer it cannot read), a sync reads as unavailable: changes wait, and a machine that has never
258
+ synced decides capture by its own choices, as under 0.7.0.
259
+
260
+ *Account grants.* Your choices (the owners and repositories in `~/.vibecommit/grants.json`, and the repositories you
261
+ turn off) are sent to your account by a sync (`POST /ingest/v1/grants/sync`, in requests of at most 500 changes, all
262
+ within 3 s in total), which reads back what your account grants. A sync runs at the start of `connect` and `status`, at
263
+ the end of `off`, once more in `connect` after the picker's changes and before "Capture is on", and in a terminal `auth`
264
+ that saves a credential on a machine that has already synced, so that `auth` contacts the server before it returns (a
265
+ `--stdin`, piped or no-terminal `auth` only saves the credential and sends nothing else). Changes a sync could not
266
+ deliver wait in `grants.json` (`pending`) and go out with the next sync, and `status` and `off` say so. On a machine
267
+ that has synced before, a repository whose only basis here is a grant still waiting to be delivered is held: its
268
+ sessions wait on this machine, with nothing dropped, and go once a sync delivers the grant. What your account grants is
269
+ shown, never acted on: a repository your account grants but you have not named on this machine is not captured here
270
+ until you choose it in `connect`. What your account turns off does apply here: a repository turned off on your account,
271
+ or refused as turned off, is not captured on this machine once this machine has learned of it (at a sync, at a read of
272
+ your account, or from the refusal itself). The first sync on a machine also sends the choices it already holds
273
+ (including repositories consented to per clone by 0.6.x or 0.7.0), and says so on a terminal: `Saving this machine's
274
+ repository choices to your VibeCommit account: <names>.` Past three names it shows two and `and N more`, then all of
275
+ them. It waits off a terminal and under `--json`. The consent sentence of the disclosure now ends: "…and is saved to
276
+ your VibeCommit account so your other machines running VibeCommit 0.8.0 or later can offer it." Its other paragraphs are
277
+ unchanged.
278
+
279
+ *Hooks.* The hooks now read one successful response body. SessionStart makes a single `GET /ingest/v1/grants`, only when
280
+ all of these hold: this machine's account state is stale (an upload's answer carried an `X-Grant-Epoch` that differs
281
+ from the recorded one; no recorded state counts as epoch `0`), the last such request was over an hour ago (across all
282
+ clones), the machine has a credential, and the hook has time left. It waits at most 1,000 ms and reads at most 64 KiB;
283
+ if the answer stalls, is cut off, is too large or is not what the contract says, the state stays stale and nothing else
284
+ happens. The request carries the credential and the client version and nothing about the clone: no query, no repository,
285
+ no path. From a clone this machine does not capture it is made only when the cached account state already names an owner
286
+ or a repository. What the GET learns is written only to `~/.vibecommit/grants-account.json` (`account`, `refused`,
287
+ `stale`, `last_get_at`; written whole and atomically; an unreadable one is ignored, never read as "deny everything"),
288
+ never to `grants.json`: an upload's refusal writes `refused`, an upload's epoch header writes `stale`, and the GET
289
+ writes `account` and `last_get_at`, clears `stale`, and leaves `refused` alone. This amends three sentences above: "the
290
+ hooks never read a successful response body" in the 0.6.0 and 0.6.1 paragraphs and "The hooks still never read a
291
+ successful response body." in the 0.7.0 paragraph; each now carries a pointer here. The client reads `X-Grant-Epoch`
292
+ among the headers of every credential-lane upload answer, and nothing in the body of a successful one. When that GET
293
+ finds grants this machine has not named, SessionStart says so once per machine per account epoch, in Claude Code and
294
+ Codex on an npm install: "Your account grants 2 repositories not captured on this machine yet. Run `vibecommit status`."
295
+ (owners and repositories counted separately); Cursor makes no such request. The "installed but not connected" notice
296
+ that the plugin's Stop hook can show now names the connect command of the install channel, and falls back to `Connect
297
+ it: vibecommit.ai/install` when the line would pass 120 characters; on npm it is unchanged.
298
+
299
+ *Refusals.* A server that has seen a machine sync may answer an upload with `403` and the error `repository_not_granted`
300
+ or `repository_excluded`; the client tells them apart by that code alone. `repository_not_granted` is retried later: the
301
+ bytes wait. `repository_excluded` is not retried: the slug is remembered in `grants-account.json`, so this machine stops
302
+ capturing that repository until a sync clears it. A `403` with any other, missing, cut-off or unreadable body is retried
303
+ later, as before. On a machine that has synced, a grant that has not reached your account yet holds that repository's
304
+ uploads back on this machine (they wait; nothing is dropped), unless the clone's own per-clone consent admits it or the
305
+ last synced state already grants it. Under the server's contract (vibecommit-mcp), only a credential that has synced may
306
+ be refused; a machine running only 0.6.x or 0.7.0 never syncs. The refusal follows the credential, not the version. Once
307
+ a 0.8.0 command has synced on a machine, a 0.7.0 plugin hook there that uses the same credential is refused for a
308
+ repository your account doesn't grant yet. It holds what it would have uploaded, and drops the oldest of it once that is
309
+ more than 24 hours old or the total passes 8 MiB. A repository chosen in a 0.8.0 command reaches your account with that
310
+ command's sync or the next one, and what is still held then goes. A repository chosen with a 0.7.0 command after that
311
+ sync is never granted on your account (a sync names it but asks for no grant), so every hook on the machine is refused
312
+ for it, with the same holding and dropping, until you add it at vibecommit.ai/app/settings/repos. The plugin's update to
313
+ 0.8.0 ends both cases for new choices.
314
+
315
+ *Connecting.* `vibecommit connect` on a machine with a credential syncs before it builds the picker, and the picker
316
+ gains a group, "on your account", of what your account grants and this machine has not named; choosing one is an
317
+ ordinary addition, with the same disclosure and question. A repository your account has turned off shows as `turn on …
318
+ (turned off on your account)`, and a yes there turns it back on for the account too. A machine that had no credential
319
+ when the picker was shown asks one more question after its own: `Your account also grants … Capture those here too?
320
+ [y/N]` (past three names, two and `and N more`, then all of them); no leaves them granted on your account and not
321
+ captured here, and `status` lists them. If the sync after the picker's changes does not reach your account, a muted line
322
+ under "Capture is on" says so: "Your account hasn't been told yet; running `status` retries." on a machine that had not
323
+ synced before, or when nothing you just chose waits for it, and otherwise "Your account hasn't been told yet. Until it
324
+ is, sessions in the repositories you just chose that it doesn't grant wait on this machine; running `status` retries."
325
+ (the install channel's command). On a terminal, on a machine with no credential, typing `g` instead of choosing signs in
326
+ first, reads the repositories your account grants with one request, and then shows them under the same disclosure and
327
+ asks; it is never offered by `auth` or without a terminal. The credential `g` makes is held in memory until you say yes:
328
+ the moment it is made, a row for it goes into `~/.vibecommit/pending-revoke.json` (mode 0600 in a 0700 folder, atomic,
329
+ never printed; it holds the token, so it is the same exposure as `credentials.json`), and `credentials.json` is written
330
+ only after the grants. Any other ending tries to revoke it, within 3 s, at the server that made it: no, Enter, Ctrl+C, a
331
+ run that grants nothing (including an account that grants nothing yet, if you then choose nothing here), a yes that only
332
+ removes, a failed write, an error, or a yes whose commit is refused because another command revoked the credential, its
333
+ record became unusable, or a credential was saved meanwhile (No, Enter, a run that grants nothing and a yes that only
334
+ removes exit `0`; Ctrl+C, a failed write, an error and a refused commit exit `1`, and a refused commit says which). A
335
+ revoke that gets no answer, or a kill that stops the process first, leaves the row, and the next command tries again. A
336
+ row leaves on a revoke that was answered (revoked, or already not accepted), on a server that cannot revoke it (`g` then
337
+ says where to revoke it in Settings), or 91 days after it was made, is never dropped before that, and the queue refuses
338
+ a ninth row rather than drop one. If the row cannot be written, `g` tries to revoke it at once, says where to revoke it
339
+ in Settings if that gets no answer, and ends with exit `1`. Every verb except `scan`, `--help`, `--version` and a
340
+ `--stdin`, piped or no-terminal `auth` retries waiting rows once at its start, silently, inside one 3 s bound; `scan`
341
+ stays free of network requests, and no hook retries.
342
+
343
+ *`status` and `off`.* Both now contact the server on a machine with a credential. `status` shows `on account` (what your
344
+ account grants that this machine has not named; an owner is written `owner/`) and `pending` (changes not yet sent, or
345
+ `your account didn't accept · report this: github.com/Vibe-Commit/claude-plugin/issues`); machine `status --json` gains
346
+ `account`, `account_not_here`, `pending` and `pending_rejected`, and a repository's `basis` gains the value
347
+ `"account_not_here"` (granted on your account, not on this machine; the exit is still `3`): read `outcome` for on or
348
+ off, not `basis !== null`. `off` turns the repository off here first, as before, and then tells your account: `Turned
349
+ off <slug> for every clone on this machine, and on your other machines running VibeCommit 0.8.0 or later once they
350
+ sync.`, with `N of your machines haven't synced and keep capturing it until they sync on VibeCommit 0.8.0 or later.`
351
+ when your account knows of unsynced machines, or `Stopped here. Your other machines running VibeCommit 0.8.0 or later
352
+ don't know yet; it will retry.` when it could not reach it; a repository your account has already turned off says so and
353
+ is turned off here too. A machine with no credential gets 0.7.0's `off` output, byte for byte, and makes no grants
354
+ request; a waiting revoke row is still retried.
355
+
356
+ *Files.* `grants.json` gains `pending` and `synced_at` and stays written only by the commands, never by a hook; a 0.7.0
357
+ command that rewrites it keeps both. `grants-account.json` is new, and the hooks' file. `pending-revoke.json` is new and
358
+ holds a bearer token while a revoke is waiting.
359
+ ### Sessions started in a folder above your repositories
360
+
361
+ Claude Code resets its shell to the folder a session was launched in, so a session started in a parent folder
362
+ (`~/code`, with your repositories inside it) used to be attributed to nothing: the hook looked at the folder the
363
+ turn ended in, found no work tree, and stayed silent. A session is now attributed from two things, the folder the
364
+ turn ended in and the folders its own records name, and its bytes go to every repository **you have chosen** that it
365
+ touched, each under that repository's own name. A repository you have not chosen is never a target, and nothing is
366
+ read on a machine that has chosen nothing.
367
+
368
+ To read those folders the client now scans each Claude Code and Codex transcript (not Cursor's, see below) for two kinds of value, the folder each record ran in and
369
+ the file paths the redaction pass already parses. It keeps only the set of strings it finds, uses them to pick the
370
+ repositories, and sends none of them anywhere on their own.
371
+
372
+ *Folders.* `vibecommit connect` also lists folders you have used an agent in that are not git repositories, under
373
+ "folders outside a repository". Choosing one captures the Claude Code and Codex sessions launched in it whose records name no git
374
+ repository at all, as one repository of its own. Only Claude Code and Codex sessions are offered, counted and captured under a
375
+ folder: Cursor sessions are not (Cursor records no folder), and a folder that holds only those is not listed. A Codex session whose
376
+ records' folders could not all be told is never captured under a folder. It is **private to you**: no other member of your organization can read it unless
377
+ you share it, and if another member's machine uploads a folder at the same path, that upload is refused. A folder's
378
+ sessions are decided only once the session has ended (or `finalize` or `backfill` has read
379
+ every line), never mid-session. A folder never captures anything inside a git work tree nested under it: that belongs
380
+ to the repository's own choice. Saying No to a folder, or `-N` in the typed prompt, records it as not captured; the
381
+ picker offers it again with the hint for turning it on. Folder choices live in `~/.vibecommit/folders.json`, keyed by
382
+ the folder's real path, written only by commands (never by a hook) and never sent to your account. Older versions
383
+ ignore the file.
384
+
385
+ *What `status` shows.* The machine screen counts the repositories and folders that are on, and the count is the list
386
+ it prints: a clone with no remote, or whose folder is gone, is a row with the reason. A repository or folder the
387
+ client has seen sessions touch but you have neither chosen nor declined is listed under "not chosen" with the
388
+ `vibecommit connect` hint; hooks never say it. `status --json` adds `folders` and `undecided` only when they are not
389
+ empty. A folder the server refuses, because a folder at the same path was uploaded first from another member's machine, is
390
+ listed under `refused` in `status` (`refused_folders` in `--json`, only when there is one) until you turn that folder
391
+ off or the session record is forgotten after 30 days, and its sessions are skipped; every other repository keeps
392
+ sending.
393
+
394
+ *Backfill.* `vibecommit backfill` now offers the earlier sessions that were run from a folder outside a repository,
395
+ and reads each one only after you say yes, to find the repositories you chose that it touched (and the folder, if you
396
+ chose one). A session that touched none of them is skipped.
397
+
398
+ *What is withheld from every copy of a session, and what is not.* A file the agent reads, writes or edits outside the repository you
399
+ chose has its content replaced by a mark of the same length (a value too short for a mark is replaced by asterisks) in every record
400
+ that carries it: the structured copy, the text the agent was shown for that tool call, and the copy of the tool call's input that
401
+ Claude Code keeps on the record. When the result names no file itself (an image the agent read), the client keeps the file paths of
402
+ the tool calls that are still waiting for their results in its local session record, never sends them, and removes them once every
403
+ copy of the session is past the result; the result is withheld from the copy of any repository the file is outside of, and from every
404
+ copy when the client cannot tell which call it answers. These records are withheld from every copy whatever they say: the summary
405
+ Claude Code writes when it compacts a conversation, because it can quote any file the session read; the session's last prompt, its
406
+ queued prompts and its request records (`last-prompt`, `queue-operation`, `api-request`, `api-request-blob`, `api-request-shape`),
407
+ which repeat text from the conversation; the file-history records (`file-history-snapshot`, `file-history-delta`), whose file names
408
+ stay and whose other values do not; and an invoked skill that names no file. What is not withheld is the output of a command or tool
409
+ that names no file: a shell command's output, a hook's output, the result of a search (Grep or Glob) over a folder, or over a single file, a fetched page, or
410
+ an MCP tool's result; and the text of a command that ran inside the repository even when it writes a file outside it (`cat > /elsewhere/notes <<EOF`):
411
+ what the command carries is sent as written, because the client judges the paths a call names, not the shell text it runs. If the agent prints an outside file with `cat`, or searches a folder or file outside the repository, what comes back is
412
+ sent as written. Codex is the same: a command whose working folder is outside the repository has its own text withheld (one that ran inside the repository and writes an outside file keeps its text, as above), and a patch or an image that names a file outside the repository is withheld together with its output (the client matches an output to its call by the call's id; one outside file withholds the whole patch, and a script whose working folder is written outside the repository has its text withheld too). The output of a command that names only a folder, not a file, is sent as written. The instruction text Codex injects into a session is withheld from every
413
+ copy, whatever folder it came from: the world-state records (which carry your global `AGENTS.md` and your skills), the copies of
414
+ user and developer messages that Codex sends the model, the developer instructions, a review's instructions and the base
415
+ instructions. Your own prompts, the agent's messages, its tool calls and their output are kept; so is the agent's own message when
416
+ it quotes one of those files.
417
+
418
+ *What a repository's copy of a multi-repository session still contains.* When one session touched repositories A and
419
+ B, each repository receives its own copy of a Claude Code session, and records that ran inside the other repository's work tree are withheld from it:
420
+ every text value in them is replaced by a mark of the same length (a value too short for a mark is replaced by asterisks),
421
+ and a line that cannot be re-serialised exactly as written is withheld whole. The same applies to any line, in any session, that the
422
+ file-path rule would have withheld a value from (an out-of-tree file's content) but that cannot be re-serialised exactly: it is withheld
423
+ whole instead of being sent as written. Records that carry no folder of their own are withheld from such a copy too, except session
424
+ metadata that holds no text (the mode, the permission mode, a bridge session, the cost counters, the tools used, a fork reference): the
425
+ session's title, the agent's name, a pull-request link, a result and any kind of record Claude Code adds later are withheld, and so are
426
+ the summaries of earlier turns that do carry a folder (the idle-return summary and the prompt snapshot) and any attachment or system
427
+ message of a kind this release has not measured. A session counts as multi-repository from the moment the client has seen it name a work
428
+ tree other than the repository's, or cannot tell, and stays so; what was sent in a copy before that moment was sent as written. A
429
+ withheld title is sent as a mark; nothing reads or shows it. A copy of a repository is sent to the end of the transcript by each hook, and for the part of a
430
+ transcript the client has not scanned yet it learns two things as it goes, in order: which files a tool call named (so a result is judged by its
431
+ call, even when both are new) and whether a second work tree has been named (the first record that names a file or a folder inside
432
+ another work tree makes the rest of that send multi-repository; a path inside no work tree, such as your global instructions file, does
433
+ not). The same applies to a copy sent from the start of a transcript whose earlier tool calls the client has already cleared (a repository you
434
+ granted after the others were sent): it learns which files each call named from its own bytes, so its results are judged exactly. A copy of a folder is sent only up to what the client has scanned, so the bytes behind the scan wait for the next hook. Three things remain, by design:
435
+
436
+ - Records that ran from the launch folder, which is not inside either repository, are kept in every copy. That is
437
+ your prompts and the agent's prose from the parent folder, including anything in them about the other repository.
438
+ - The record's own folder path (`cwd`) stays readable in a record that was otherwise set aside, so a copy can show
439
+ the path of the other repository.
440
+ - A key inside a tool's input or result that looks like a field name (a package or customer name written like `acme_merger`)
441
+ cannot be told from a field name, so it stays as a key in the other repository's copy while its text values are withheld. A key
442
+ that is a path, a file name or a name with a space or a hyphen makes the whole line be withheld instead.
443
+
444
+ *Codex.* Codex records a folder only on its session and turn headers, on a finished command and on a thread-settings change, not on a prompt or the
445
+ agent's prose, so the client tells the folder every other record ran in:
446
+
447
+ - a record that carries its own folder takes it;
448
+ - a command takes its working folder (the folder the turn was running in, when it has none) and the files of any patch it carries; `apply_patch` takes the
449
+ files it changes, and `view_image` the folder of its file;
450
+ - an `exec` script takes the working folders written in it as plain string literals, the folder the turn was running in, and the folders of the processes it
451
+ polls by a numeric id written in it;
452
+ - `write_stdin` and `wait` take the folders of the process or script they poll. The client learns which process or script is which only from the line an
453
+ output starts with (`Process running with session ID n`, `Script running with cell ID n`) and from a `session_id` a script's output prints, never from text
454
+ further down an output, and an id it never saw announced is unknown. An id counts only from the line that announced it onward: a poll that comes before
455
+ the line announcing its id is unknown, however the id is announced later;
456
+ - an output takes the folders of its command, matched by the call's id;
457
+ - any other tool (an MCP tool, a tool Codex adds later), any kind of record the client has not measured (including `compacted`), a script whose working folder
458
+ or process id is not a plain literal, a script that holds a patch, and a script that names more than 4,096 places (its working folders, the turn's folder, and the folders and files of the processes it polls, together) are unknown;
459
+ - every other record (a prompt, the agent's prose, a token count) takes the folder the turn was running in, until a session or turn header whose folder
460
+ cannot be read, or a line too long to be read at all: from there the turn's folder is unknown, and so are the records that rely on it, until the next header
461
+ that can be read. A folder that exists but cannot be resolved (a link that no longer points anywhere) is unknown too, and a session that names one is
462
+ treated as having touched more than one repository.
463
+
464
+ A repository's copy then carries the records that ran in it and not the ones that ran in another repository you chose, as for Claude Code, and a
465
+ patch or script that spans two repositories is withheld from both copies. A record whose folder is unknown is kept in a copy of a session that has touched one
466
+ repository and withheld from the copies of one that has touched several. A record whose folder is unknown still names what it names: the folders and files that can be read from it are used to find the repositories a session touched, and each file is judged for the copy like any other. A file that a patch names, or `view_image` shows, outside the copy's repository (for a
467
+ folder, outside the folder) is withheld with its output from every copy, as for Claude Code; a file that was deleted since is judged by the nearest folder
468
+ that still exists, except behind a link that no longer resolves, which counts as outside. A review's findings name files too, and each is judged the same way, whether or not the record also carries a folder of its own or its folder is unknown;
469
+ a review that names more files than the client will walk (or nests them too deep) is withheld from every copy, and so is a command, patch or script that names a path the client cannot resolve, a call whose arguments cannot be read, a call (a script, a poll, a plan update, or a record of a kind the client has not measured) that holds a patch anywhere the client does not read for patches, and the output of a call the client no longer holds when that call may have named a file (it was dropped to stay within the bound, its entry was removed once every copy had passed it, or it came before a line too long to be read). A script that polls a process by an id it cannot name carries the files of every process the session knows at that point. A call that reuses the id of an earlier call of the same session is withheld from every copy, and so is every later output of that id; the earlier call may be withheld too. A call id reused after its earlier call has left the local record (more than 4,096 removed calls earlier, or sooner once the session reaches its 6 MiB limit) is judged as a new call, and a late duplicate output of the earlier call is then placed by the new one. A command or script whose working folder is not a plain value (including an explicit empty `null`) counts the session as having touched more than one repository. A call whose folder is known judges every file it names, up to 4,096 files and up to 1 MiB of path text (a script, up to 4,096 places, folders counted; a call past either limit is unknown and withheld); a call that names more, or whose folder cannot be told, keeps up to 64 of the places it names to look for repositories and, past 64, is withheld from every copy and counts the session as having touched more than one repository. What this does not do: a command that changes folder with `cd` inside itself still counts as the folder it started in; a script that builds the name of the patch tool or a patch at run time (`tools["apply" + "_patch"]`, a heredoc assembled from pieces) is read as the script it is; a process's output
470
+ that the agent reads some other way than `write_stdin` or `wait` is placed by that other call; the prompts, the agent's prose and the commands that name no working folder, of a turn that ran in a folder
471
+ that is no repository (the parent folder) are kept in every copy, as for Claude Code; and the output of a command that names only a folder outside the
472
+ repository is sent as written. The client keeps, in its local session record, the folders the session's turns ran in and, for each command, the folders it ran
473
+ in and the files it named, and for each process and script the folders it ran in; it never sends them, and removes a command's once every copy is past its
474
+ output. That record is bounded whatever a transcript holds: a path over 4,096 bytes (Linux's PATH_MAX, which counts its terminating NUL; macOS's is 1,024, so a macOS path between the two is still resolved as usual) is treated as unreadable and is never stored (for Codex, a folder of that length is not a folder, and a command, patch or script that names such a path is withheld with its output; for Claude Code the call's content, its result and its structured result are withheld, and the long path string itself stays in the copy, as for any file outside the repository), a call id, process id or script id longer than 128 bytes is kept as a short digest, each table of one transcript's record (the calls, the processes, the scripts, the folders the turns ran in) holds at most 1 MiB of path text, and the tables of a session, which holds one set for each transcript (the main one and each subagent's) plus a small envelope per transcript, are held to 6 MiB in all. A session that reaches those limits (none of the sessions measured comes near them) keeps each transcript's newest calls (its 64 newest go last) and its latest folder: past the session's 6 MiB the transcript that holds the most gives up its oldest calls first, and a call the client no longer holds is withheld as above. When a table of processes or scripts has to forget an id, that whole table reads unknown from then on (from that point in the transcript when the table's own limit does it, from the start of the transcript when the session's limit does it), and every poll it answers is withheld from every copy. An id whose folders are cut to keep its table within its 1 MiB of path text, or the session within its 6 MiB, is unknown the same way: every poll it answers is withheld from every copy, and the session counts as having touched more than one repository. A subagent's transcript is read on its own and inherits nothing from the main one.
475
+
476
+ *Cursor.* Keeping one repository's copy free of another's needs to know, for every record that carries text, which folder it ran in.
477
+ Cursor records no folder at all. So nothing changes for it: a session is captured only for the repository its turns end in, as in 0.7.0
478
+ and 0.8.0. Each repository receives the session from where its own copy last stopped, or from the start, up to the turn that ended in
479
+ it, so turns that ran in other folders can appear in its copy. A session run from a parent folder is not captured, even when its tool
480
+ calls name files inside a repository you chose, and it never gets a folder target. The client does not read its transcripts to look for
481
+ repositories. Backfill does not offer or upload Cursor sessions.
482
+
252
483
  ## Status
253
484
 
254
485
  **Implemented**, not a scaffold. All six commands above have real bodies — OAuth sign-in
@@ -0,0 +1,15 @@
1
+ /**
2
+ * What the account grants that THIS machine has not named — the pure rule behind `status`'s "on account" row and SessionStart's notice 10.
3
+ *
4
+ * Its own module so the hook path can use the rule without importing `grants_verb.ts`, which is a verb's (it syncs, prints and reaches the
5
+ * network); the hook-path import-graph cell in `test/connect-g-lifecycle.test.ts` keeps hooks off that module.
6
+ *
7
+ * ⛔ "Not on this machine" is what THIS machine has not named: not in its owners, its repos, or a per-clone consent, and not turned off here
8
+ * or on the account. A repo under an owner the account grants is covered by that owner's row, not listed again. An owner or repo the user
9
+ * turned off is a choice, not a gap.
10
+ */
11
+ import { type AccountGrants, type Grants } from "./consent.js";
12
+ /** `owner/` for an owner, the slug for a repo — the way every account row and the first-sync line name them. */
13
+ export declare const ownerName: (owner: string) => string;
14
+ /** The account's owners (as `owner/`) and then its repos this machine has not named. Pure. */
15
+ export declare function accountNotHere(grants: Grants, account: AccountGrants, perCloneSlugs: readonly string[]): string[];
@@ -0,0 +1,25 @@
1
+ /**
2
+ * What the account grants that THIS machine has not named — the pure rule behind `status`'s "on account" row and SessionStart's notice 10.
3
+ *
4
+ * Its own module so the hook path can use the rule without importing `grants_verb.ts`, which is a verb's (it syncs, prints and reaches the
5
+ * network); the hook-path import-graph cell in `test/connect-g-lifecycle.test.ts` keeps hooks off that module.
6
+ *
7
+ * ⛔ "Not on this machine" is what THIS machine has not named: not in its owners, its repos, or a per-clone consent, and not turned off here
8
+ * or on the account. A repo under an owner the account grants is covered by that owner's row, not listed again. An owner or repo the user
9
+ * turned off is a choice, not a gap.
10
+ */
11
+ import { normalizeSlug, ownerOfSlug } from "./consent.js";
12
+ /** `owner/` for an owner, the slug for a repo — the way every account row and the first-sync line name them. */
13
+ export const ownerName = (owner) => `${owner}/`;
14
+ /** The account's owners (as `owner/`) and then its repos this machine has not named. Pure. */
15
+ export function accountNotHere(grants, account, perCloneSlugs) {
16
+ const off = new Set([...grants.excluded, ...account.excluded]);
17
+ const named = new Set([...grants.repos, ...perCloneSlugs.map(normalizeSlug)]);
18
+ const owners = account.owners.filter((o) => !grants.owners.includes(o));
19
+ const repos = account.repos.filter((r) => !off.has(r) &&
20
+ !named.has(r) &&
21
+ !grants.owners.includes(ownerOfSlug(r)) &&
22
+ !account.owners.includes(ownerOfSlug(r)));
23
+ return [...owners.map(ownerName), ...repos];
24
+ }
25
+ //# sourceMappingURL=account_not_here.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account_not_here.js","sourceRoot":"","sources":["../src/account_not_here.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAmC,MAAM,cAAc,CAAC;AAE3F,gHAAgH;AAChH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC;AAEhE,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAgC;IACrG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACX,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACb,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAC;IACF,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AAC9C,CAAC"}
@@ -299,6 +299,19 @@ export const CLAUDE_CODE = {
299
299
  // over. `CR-124`, D76.
300
300
  delegatedTranscripts: "discover",
301
301
  redaction: "claude-code",
302
+ // Every Claude Code record carries the shell's current `cwd` at its top level (measured, 2026-10-31).
303
+ cwdKeys: [{ path: ["cwd"] }],
304
+ // Every CONVERSATION record carries `cwd`; 27.9% of all records carry none (measured 2026-11-01, local corpus, counts only): session metadata
305
+ // (last-prompt, queue-operation, api-request blobs, titles, file-history ...), several of them content-bearing, and every one of them repeated
306
+ // text found only in other folders' records. So a record with no folder is decided by its TYPE, never by an inherited folder (C27, C38):
307
+ // - last-prompt, queue-operation, api-request-blob, api-request, api-request-shape, file-history-snapshot, file-history-delta: content withheld
308
+ // in EVERY copy (their path-shaped keys stay);
309
+ // - mode, permission-mode, atis-latch, bridge-session, cost-state, tools-used, fork-context-ref, launched: kept in a multi-repo copy within their
310
+ // measured keys;
311
+ // - everything else (titles, agent-name, pr-link, a type Claude Code adds next year): withheld from a multi-repo copy, kept in a single-repo one.
312
+ // "Multi-repo" is `Target.multi`: the session named a work tree other than the target's (see `resolveTargets`). A record that carries a folder is
313
+ // decided by that folder (R17). What stays is stated in the README.
314
+ isolatesContentRecords: true,
302
315
  sessionIdFromEnv: claudeSessionIdFromEnv,
303
316
  sessionSource: claudeSessionSource,
304
317
  locateCurrentTranscript,
@@ -1 +1 @@
1
- {"version":3,"file":"claude_code.js","sourceRoot":"","sources":["../../src/agents/claude_code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude_code.js","sourceRoot":"","sources":["../../src/agents/claude_code.ts"],"names":[],"mappings":"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"}
@@ -310,6 +310,17 @@ export const CODEX_CLI = {
310
310
  // Claude glob cannot run against a layout that has no `subagents/`.
311
311
  delegatedTranscripts: "announce",
312
312
  redaction: "codex-cli",
313
+ // A Codex rollout names a folder on few record types (measured on 369 rollouts, 18,798 records): `session_meta` and `turn_context` carry
314
+ // `payload.cwd`, and a finished command item (`event_msg` / `item_completed` / `CommandExecution`) carries `item.cwd` as a `file://` URL. The folder
315
+ // of every other record is its EFFECTIVE folder (`codex_folders.ts`: a call's `workdir` or patched files, an output's call, else the turn folder).
316
+ cwdKeys: [
317
+ { path: ["payload", "cwd"], types: ["session_meta", "turn_context"] },
318
+ { path: ["payload", "item", "cwd"], types: ["event_msg"] },
319
+ ],
320
+ // ⛔ TRUE (part (b)): every Codex record has an effective folder, told from the checkpoint the resolver writes (the turn-folder timeline and the call
321
+ // table) and, past the scan cursor, from the delivery's own bytes. A record that ran in another work tree is withheld from this repo's copy; one whose
322
+ // folder cannot be told is withheld in a multi-repo copy and kept in a single-repo one (a single-repo Codex session stays as 0.8.0 sends it).
323
+ isolatesContentRecords: true,
313
324
  // ⛔ **UNMEASURED.** `null` here does NOT mean "Codex CLI has no session id in
314
325
  // its environment" — it means nobody has run the measurement `M1` ran for
315
326
  // Claude Code (agent commit, human commit, worktree commit) against Codex, so
@@ -1 +1 @@
1
- {"version":3,"file":"codex_cli.js","sourceRoot":"","sources":["../../src/agents/codex_cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex_cli.js","sourceRoot":"","sources":["../../src/agents/codex_cli.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@
20
20
  import { join } from "node:path";
21
21
  import { cursorHooksPath, cursorTranscriptRoot, isCursorTranscript } from "../paths.js";
22
22
  import { readEntries, sessionFile, subdirectories } from "./session_listing.js";
23
+ import { stripEnds } from "../text_tail.js";
23
24
  /**
24
25
  * ⭐ **MEASURED. `D5`'s SECOND HALF IS ANSWERED (`TODOS[130]`), AND THE ANSWER IS
25
26
  * THAT CURSOR IMPOSES NO NUMBER OF ITS OWN.**
@@ -105,7 +106,7 @@ export const CURSOR_NAME_LIMIT = 61;
105
106
  * candidate rather than being assumed away.
106
107
  */
107
108
  export function encodeProjectPath(path) {
108
- return path.replace(/[^A-Za-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
109
+ return stripEnds(path.replace(/[^A-Za-z0-9]+/g, "-"), "-");
109
110
  }
110
111
  /**
111
112
  * Is this folder name one Cursor cut and hashed? See `CURSOR_NAME_LIMIT`.
@@ -248,6 +249,11 @@ export const CURSOR = {
248
249
  // a wrong declaration here is no longer a line nobody reaches.
249
250
  delegatedTranscripts: "announce",
250
251
  redaction: "cursor",
252
+ // Cursor records no folder per record (A7, `commands/backfill.ts`).
253
+ // ⛔ EMPTY ON PURPOSE, and it is a gate (C14): Cursor cannot be isolated per record, so `session_targets`
254
+ // gives it the turn-end repo only and reads no transcript for evidence. Filling this in would switch that gate off.
255
+ cwdKeys: [],
256
+ isolatesContentRecords: false,
251
257
  // ⛔ **UNMEASURED.** `null` here does NOT mean "Cursor has no session id in its
252
258
  // environment" — it means nobody has run the measurement `M1` ran for Claude
253
259
  // Code (agent commit, human commit, worktree commit) against Cursor, so this
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,13 @@ export declare function resolveAgentId(argv: readonly string[]): string;
83
83
  * the id, not the dialect.
84
84
  */
85
85
  export declare function dialectFor(agentId: string | undefined): TranscriptDialect;
86
+ /**
87
+ * ⛔ **THE ONE PREDICATE FOR "CAN THIS AGENT'S SESSIONS BE CAPTURED UNDER A FOLDER?" (C34).** A folder target needs the dialect to isolate
88
+ * its content records (`isolatesContentRecords`): the resolver gates on the same registry value (`dialectIsolates`, by transcript path),
89
+ * and everything that OFFERS a folder (the picker, `connect`'s counts and copy, the parent-folder backfill) asks it here, by agent id.
90
+ * Never a constant or a list of names: when Codex's isolation lands and its capability flips, every one of them follows.
91
+ */
92
+ export declare function agentIsolatesRecords(agentId: AgentId): boolean;
86
93
  /**
87
94
  * ⛔ **WHICH OF THE THREE EVENTS IS THIS `hook_event_name`? — `CR-195`, D205.**
88
95
  *
@@ -100,6 +100,15 @@ export function resolveAgentId(argv) {
100
100
  export function dialectFor(agentId) {
101
101
  return DIALECTS.find((dialect) => dialect.id === agentId) ?? CLAUDE_CODE;
102
102
  }
103
+ /**
104
+ * ⛔ **THE ONE PREDICATE FOR "CAN THIS AGENT'S SESSIONS BE CAPTURED UNDER A FOLDER?" (C34).** A folder target needs the dialect to isolate
105
+ * its content records (`isolatesContentRecords`): the resolver gates on the same registry value (`dialectIsolates`, by transcript path),
106
+ * and everything that OFFERS a folder (the picker, `connect`'s counts and copy, the parent-folder backfill) asks it here, by agent id.
107
+ * Never a constant or a list of names: when Codex's isolation lands and its capability flips, every one of them follows.
108
+ */
109
+ export function agentIsolatesRecords(agentId) {
110
+ return DIALECTS.find((dialect) => dialect.id === agentId)?.isolatesContentRecords === true;
111
+ }
103
112
  /**
104
113
  * ⛔ **WHICH OF THE THREE EVENTS IS THIS `hook_event_name`? — `CR-195`, D205.**
105
114
  *
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,11 @@ export type SelectedAgentId = AgentId | typeof UNKNOWN_AGENT_ID;
109
109
  * named after. Typing it as its own union is what stops a later edit passing an
110
110
  * agent id here and quietly making the two things one.
111
111
  */
112
+ /** One place a record names its folder: the key path from the top level, and the record `type`s it is valid on (any when absent). */
113
+ export interface CwdKey {
114
+ readonly path: readonly string[];
115
+ readonly types?: readonly string[];
116
+ }
112
117
  export type RedactionProfile = "claude-code" | "codex-cli" | "cursor";
113
118
  /**
114
119
  * How this agent's DELEGATED transcripts are found — announce vs discover.
@@ -418,6 +423,33 @@ export interface TranscriptDialect {
418
423
  readonly events: Readonly<Record<HookEventName, EventBudget>>;
419
424
  readonly delegatedTranscripts: DelegatedTranscripts;
420
425
  readonly redaction: RedactionProfile;
426
+ /**
427
+ * ⛔ **WHERE A RECORD NAMES THE FOLDER IT RAN IN** — the dialect's own half of R2's evidence read (any-folder capture).
428
+ *
429
+ * `session_targets.ts` reads, from new transcript bytes, each record's folder plus the path keys redaction already parses
430
+ * (`rulesForTranscript(...).pathKeys`: ONE list, never a second copy), and keeps only the set of repo roots they map to.
431
+ * This is the folder half: the path of keys from the record's top level to the string, and optionally the record `type`s
432
+ * it is valid for. Claude Code carries a top-level `cwd`; Codex carries `payload.cwd` on `session_meta` and `turn_context`
433
+ * records; Cursor records no folder at all (`[]`, A7: stated, fails closed).
434
+ *
435
+ * ⛔ **REQUIRED, not optional**, `admitsFile`'s device: a dialect added later must ANSWER "does a record name its folder",
436
+ * and the compiler is what asks. `test/agent-registry.test.ts` pins the member.
437
+ */
438
+ readonly cwdKeys: readonly CwdKey[];
439
+ /**
440
+ * ⛔ **CAN THIS DIALECT'S COPY FOR ONE REPOSITORY BE KEPT FREE OF ANOTHER REPOSITORY'S RECORDS?** (R17 · C24.) Record isolation withholds
441
+ * a record that ran inside a work tree other than the target's, so it is only as good as the dialect's answer to "which folder did
442
+ * THIS record run in" for EVERY record that carries content. Evidence targets (a repo named only by a record's path), folder targets
443
+ * and the transcript read for evidence are therefore allowed only when this is true: without it a session that touched repos A and B
444
+ * would upload B's prompts, outputs and prose inside A's copy.
445
+ *
446
+ * `cwdKeys` being non-empty is NOT this answer: it says some records name a folder, not that every content record does. Claude
447
+ * Code: `true` (each conversation record carries `cwd`; the cwd-less session-metadata records are a documented residual until the
448
+ * stateful isolation of C24 (b) covers them). Codex: `false` (only `session_meta` and `turn_context` carry a folder; prompts,
449
+ * outputs and prose do not). Cursor: `false` (no folder at all). A dialect that is `false` gets the turn-end repo only, exactly as in
450
+ * 0.7.0 and 0.8.0, and never a folder target. REQUIRED, `cwdKeys`' device; `test/agent-registry.test.ts` pins the member.
451
+ */
452
+ readonly isolatesContentRecords: boolean;
421
453
  /**
422
454
  * ⛔ **WHICH SESSION IS COMMITTING — read from the environment, not inferred
423
455
  * from HEAD (`D3`, `D183`).**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AA4BH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AA6D1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AA4BH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAmE1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC"}