toolroll 0.9.104 → 0.9.105

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 (1519) hide show
  1. package/CHANGELOG.md +62 -5
  2. package/README.md +18 -20
  3. package/dist/accent-colors.js +0 -29
  4. package/dist/acp-agents.js +0 -3
  5. package/dist/acp-attest.js +0 -30
  6. package/dist/acp-check.js +3 -70
  7. package/dist/acp-client.js +3 -94
  8. package/dist/acp-inspect.js +1 -20
  9. package/dist/action-ledger.js +0 -8
  10. package/dist/activity-line.js +0 -14
  11. package/dist/actor.js +0 -15
  12. package/dist/advanced-schema.js +12 -0
  13. package/dist/advanced-view.js +26 -0
  14. package/dist/advanced.js +61 -0
  15. package/dist/agent-board.js +0 -117
  16. package/dist/agent-fence.js +11 -367
  17. package/dist/agent-onboard.js +12 -50
  18. package/dist/agent-pulse.js +5 -38
  19. package/dist/agent-state-words.js +0 -8
  20. package/dist/agent-state.js +1 -45
  21. package/dist/agent-turns.js +3 -17
  22. package/dist/agentconfig.js +1 -99
  23. package/dist/agents-board.js +0 -60
  24. package/dist/agents-live.js +1 -8
  25. package/dist/api-tokens.js +0 -27
  26. package/dist/approval-authority.js +0 -59
  27. package/dist/approval-password.js +0 -10
  28. package/dist/approval-policy.js +0 -29
  29. package/dist/approval-rules-ui.js +0 -9
  30. package/dist/assignment-adapters.js +0 -14
  31. package/dist/assignment-brief.js +1 -17
  32. package/dist/assignment-delivery.js +0 -22
  33. package/dist/assignment-presentation.js +0 -14
  34. package/dist/assignment-status.js +1 -30
  35. package/dist/assignment-ui.js +0 -12
  36. package/dist/assignment.js +17 -139
  37. package/dist/attest.js +0 -38
  38. package/dist/audit-cli.js +0 -9
  39. package/dist/backend.js +0 -59
  40. package/dist/backup-ui.js +0 -12
  41. package/dist/backup.js +8 -61
  42. package/dist/batch-checks.js +0 -20
  43. package/dist/batch-policy.js +0 -4
  44. package/dist/beads.js +0 -48
  45. package/dist/bin.js +0 -8
  46. package/dist/board.js +1 -36
  47. package/dist/boot-identity.js +0 -42
  48. package/dist/bounded-spawn.js +4 -28
  49. package/dist/brand-mark.js +0 -21
  50. package/dist/brief-fence.js +0 -16
  51. package/dist/browser/terminal.css +1 -1
  52. package/dist/browser/terminal.js +16 -16
  53. package/dist/browser/workspace.css +2 -2
  54. package/dist/browser/workspace.js +26 -26
  55. package/dist/browser-crew.js +0 -8
  56. package/dist/browser-shell.js +2 -15
  57. package/dist/browser-workspace.js +6 -30
  58. package/dist/budget-alerts.js +1 -4
  59. package/dist/build-review.js +2 -50
  60. package/dist/builder-restart.js +0 -13
  61. package/dist/builder.js +21 -1035
  62. package/dist/canonical-json.js +0 -12
  63. package/dist/capscan.js +1 -32
  64. package/dist/card-catalog.js +0 -12
  65. package/dist/card-cli.js +0 -1
  66. package/dist/card-render.js +0 -25
  67. package/dist/card-sources.js +0 -10
  68. package/dist/chat-acceptance.js +0 -7
  69. package/dist/chat-actions.js +5 -190
  70. package/dist/chat-admission.js +0 -7
  71. package/dist/chat-approval.js +0 -25
  72. package/dist/chat-ask.js +0 -17
  73. package/dist/chat-card-part.js +0 -3
  74. package/dist/chat-card.js +0 -6
  75. package/dist/chat-channel.js +2 -83
  76. package/dist/chat-continuity.js +0 -31
  77. package/dist/chat-controls.js +0 -7
  78. package/dist/chat-core.js +0 -55
  79. package/dist/chat-decide.js +2 -153
  80. package/dist/chat-delivery-state.js +0 -49
  81. package/dist/chat-delivery.js +2 -143
  82. package/dist/chat-display.js +0 -2
  83. package/dist/chat-evidence.js +0 -65
  84. package/dist/chat-flow.js +0 -72
  85. package/dist/chat-follow.js +0 -13
  86. package/dist/chat-inbox.js +0 -34
  87. package/dist/chat-live-schema.js +0 -14
  88. package/dist/chat-live.js +2 -87
  89. package/dist/chat-message-states.js +13 -40
  90. package/dist/chat-messages.js +0 -153
  91. package/dist/chat-migration.js +0 -57
  92. package/dist/chat-polish.js +0 -7
  93. package/dist/chat-quiet.js +0 -37
  94. package/dist/chat-review.js +0 -4
  95. package/dist/chat-rooms.js +0 -22
  96. package/dist/chat-settings-page.js +0 -4
  97. package/dist/chat-task-actions.js +0 -7
  98. package/dist/chat-terms.js +0 -21
  99. package/dist/chat-voice.js +0 -38
  100. package/dist/chat-warmth.js +1 -3
  101. package/dist/check-access.js +0 -30
  102. package/dist/check-facts.js +2 -62
  103. package/dist/check-failure.js +0 -98
  104. package/dist/check-levels-ui.js +4 -10
  105. package/dist/check-levels.js +3 -35
  106. package/dist/check-load.js +1 -49
  107. package/dist/check-only-standing.js +0 -6
  108. package/dist/check-only.js +0 -22
  109. package/dist/check-progress.js +0 -32
  110. package/dist/check-repair.js +2 -35
  111. package/dist/check-report.js +1 -108
  112. package/dist/check-stamp.js +0 -20
  113. package/dist/checkout-cleanup.js +0 -84
  114. package/dist/checkout-proof.js +1 -13
  115. package/dist/child-database.js +0 -3
  116. package/dist/claim.js +4 -508
  117. package/dist/claude-print.js +0 -10
  118. package/dist/cli-fast.js +0 -8
  119. package/dist/cli-help.js +90 -78
  120. package/dist/cli-http.js +0 -10
  121. package/dist/cli.js +26 -241
  122. package/dist/code-extract.js +0 -6
  123. package/dist/code-map-acts.js +0 -7
  124. package/dist/code-map-admission.js +2 -26
  125. package/dist/code-map-build.js +3 -24
  126. package/dist/code-map-cli.js +0 -4
  127. package/dist/code-map-main.js +0 -6
  128. package/dist/code-map-read.js +0 -12
  129. package/dist/code-map-report.js +0 -9
  130. package/dist/code-map-shape.js +0 -19
  131. package/dist/code-map-store.js +0 -26
  132. package/dist/codex-limits.js +1 -17
  133. package/dist/coding-context.js +0 -10
  134. package/dist/coding-handoff.js +0 -14
  135. package/dist/coding-provider.js +0 -39
  136. package/dist/coding-shipping-ui.js +0 -1
  137. package/dist/coding-ui.js +0 -1
  138. package/dist/coding-update.js +1 -18
  139. package/dist/coding-workspace.js +0 -27
  140. package/dist/commit-extract.js +0 -83
  141. package/dist/connect-cli.js +0 -19
  142. package/dist/console-chrome.js +1 -34
  143. package/dist/console-instance.js +2 -91
  144. package/dist/container-state.js +0 -4
  145. package/dist/containment.js +2 -105
  146. package/dist/contract-changes.js +0 -6
  147. package/dist/contracts/acceptance-terms.js +0 -7
  148. package/dist/contracts/chat-actions.js +0 -46
  149. package/dist/contracts/chat-callback-rows.js +0 -8
  150. package/dist/contracts/chat-card.js +0 -14
  151. package/dist/contracts/chat-content.js +0 -55
  152. package/dist/contracts/chat-tables.js +0 -7
  153. package/dist/contracts/cli.js +0 -59
  154. package/dist/contracts/coding-activity.js +0 -15
  155. package/dist/contracts/coding-context.js +0 -15
  156. package/dist/contracts/coding-handoff.js +0 -11
  157. package/dist/contracts/coding-workspace.js +0 -14
  158. package/dist/contracts/console-api.js +1 -54
  159. package/dist/contracts/contract-test.js +0 -14
  160. package/dist/contracts/contract.js +0 -48
  161. package/dist/contracts/decision.js +0 -20
  162. package/dist/contracts/diff-stat.js +0 -16
  163. package/dist/contracts/discord-callback.js +0 -9
  164. package/dist/contracts/flow-card.js +0 -18
  165. package/dist/contracts/flow-propose.js +0 -8
  166. package/dist/contracts/flow-send.js +0 -31
  167. package/dist/contracts/flow.js +0 -112
  168. package/dist/contracts/gateway-tools.js +0 -22
  169. package/dist/contracts/handoff.js +0 -22
  170. package/dist/contracts/integration-metadata.js +0 -39
  171. package/dist/contracts/lead-context.js +0 -14
  172. package/dist/contracts/lead-tools.js +0 -49
  173. package/dist/contracts/mcp-oauth.js +0 -12
  174. package/dist/contracts/memory-pass.js +0 -21
  175. package/dist/contracts/model-catalog.js +0 -9
  176. package/dist/contracts/observation-request.js +0 -11
  177. package/dist/contracts/plan.js +0 -16
  178. package/dist/contracts/project-knowledge.js +0 -26
  179. package/dist/contracts/project-memory.js +0 -16
  180. package/dist/contracts/project-skills.js +0 -31
  181. package/dist/contracts/proof.js +0 -23
  182. package/dist/contracts/provider.js +0 -9
  183. package/dist/contracts/recipes.js +0 -16
  184. package/dist/contracts/release-check.js +0 -61
  185. package/dist/contracts/release-terms.js +0 -27
  186. package/dist/contracts/retention.js +0 -12
  187. package/dist/contracts/review-findings.js +0 -13
  188. package/dist/contracts/route-results.js +0 -15
  189. package/dist/contracts/route.js +0 -33
  190. package/dist/contracts/scope.js +0 -29
  191. package/dist/contracts/scout-report.js +0 -34
  192. package/dist/contracts/slack-callback.js +0 -11
  193. package/dist/contracts/sort-answer.js +0 -24
  194. package/dist/contracts/stage-output.js +0 -46
  195. package/dist/contracts/storage.js +0 -8
  196. package/dist/contracts/store-json.js +0 -41
  197. package/dist/contracts/subagent-turn.js +0 -23
  198. package/dist/contracts/task-sizing.js +0 -10
  199. package/dist/contracts/teams-callback.js +0 -7
  200. package/dist/contracts/telegram-callback.js +0 -27
  201. package/dist/contracts/trigger-payloads.js +0 -41
  202. package/dist/contracts/update-journal.js +0 -47
  203. package/dist/contracts/verification-receipt.js +0 -36
  204. package/dist/contracts/verification-view.js +0 -15
  205. package/dist/contracts/youiyoux-request.js +0 -26
  206. package/dist/control-setup.js +0 -7
  207. package/dist/control-ui.js +0 -3
  208. package/dist/controller-service.js +0 -4
  209. package/dist/controller-supervisor.js +0 -15
  210. package/dist/converse.js +3 -129
  211. package/dist/coordinator-proposals.js +1 -6
  212. package/dist/coordinator.js +0 -65
  213. package/dist/credentials-ui.js +0 -6
  214. package/dist/daemon.js +0 -137
  215. package/dist/database-reclaim.js +0 -3
  216. package/dist/decision.js +0 -78
  217. package/dist/demo-chat.js +4 -15
  218. package/dist/demo-sign-in.js +77 -0
  219. package/dist/demo.js +5 -194
  220. package/dist/deploy-gate.js +0 -20
  221. package/dist/deploy-lock.js +0 -4
  222. package/dist/deploy-phase.js +0 -22
  223. package/dist/deploy-rescue.js +0 -21
  224. package/dist/deprecations.js +0 -12
  225. package/dist/design/kit.css +9 -6
  226. package/dist/design/kit.js +2 -33
  227. package/dist/desktop-access.js +0 -9
  228. package/dist/desktop-bundle.js +1 -3
  229. package/dist/desktop-host.js +0 -34
  230. package/dist/desktop-update-gate.js +0 -8
  231. package/dist/desktop-update-recovery.js +1 -18
  232. package/dist/desktop-update.js +2 -48
  233. package/dist/digest-times.js +0 -2
  234. package/dist/disclosure.js +0 -5
  235. package/dist/discord-api.js +0 -6
  236. package/dist/discord-chat.js +0 -31
  237. package/dist/discord.js +0 -7
  238. package/dist/discover.js +0 -50
  239. package/dist/dispatch.js +61 -60
  240. package/dist/dispose.js +0 -208
  241. package/dist/doctor.js +0 -48
  242. package/dist/easy-start-args.js +7 -7
  243. package/dist/easy-start.js +32 -45
  244. package/dist/egress.js +1 -63
  245. package/dist/email-settings.js +0 -8
  246. package/dist/envelope.js +50 -86
  247. package/dist/eval-gate.js +1 -37
  248. package/dist/eval-hooks.js +0 -120
  249. package/dist/eval-oracle-main.js +0 -7
  250. package/dist/eval-oracle.js +3 -42
  251. package/dist/eval-world.js +1 -23
  252. package/dist/evals.js +6 -134
  253. package/dist/evidence-pack.js +0 -29
  254. package/dist/evidence-pair.js +0 -17
  255. package/dist/evidence.js +4 -280
  256. package/dist/exec.js +19 -404
  257. package/dist/exhaustion.js +0 -30
  258. package/dist/export-ui.js +0 -7
  259. package/dist/export.js +1 -38
  260. package/dist/failing-first.js +0 -6
  261. package/dist/fallback-schema.js +0 -5
  262. package/dist/fallback.js +0 -81
  263. package/dist/fast-start.js +0 -97
  264. package/dist/fast-terms.js +0 -3
  265. package/dist/fenced-check-coverage.js +0 -11
  266. package/dist/findings.js +1 -63
  267. package/dist/first-run.js +4 -57
  268. package/dist/first-tasks-child.js +0 -5
  269. package/dist/flaky-ci.js +1 -24
  270. package/dist/flaky-cli.js +0 -4
  271. package/dist/flaky.js +0 -43
  272. package/dist/fleet-schema.js +0 -11
  273. package/dist/flow-actions.js +0 -31
  274. package/dist/flow-browser.js +0 -42
  275. package/dist/flow-cadence.js +1 -24
  276. package/dist/flow-card-task.js +0 -11
  277. package/dist/flow-changed.js +0 -16
  278. package/dist/flow-code.js +1 -45
  279. package/dist/flow-draft.js +0 -17
  280. package/dist/flow-engine.js +2 -76
  281. package/dist/flow-gallery-ui.js +0 -28
  282. package/dist/flow-gallery.js +0 -54
  283. package/dist/flow-insights.js +0 -12
  284. package/dist/flow-items.js +0 -27
  285. package/dist/flow-live.js +0 -31
  286. package/dist/flow-people.js +0 -14
  287. package/dist/flow-pull-request.js +0 -32
  288. package/dist/flow-replies.js +0 -9
  289. package/dist/flow-result-card.js +0 -8
  290. package/dist/flow-schedule.js +0 -74
  291. package/dist/flow-scripts.js +0 -13
  292. package/dist/flow-secrets.js +0 -10
  293. package/dist/flow-send.js +0 -45
  294. package/dist/flow-share.js +0 -60
  295. package/dist/flow-sort.js +1 -24
  296. package/dist/flow-starters-ui.js +0 -2
  297. package/dist/flow-starters.js +0 -13
  298. package/dist/flow-steps.js +0 -80
  299. package/dist/flow-triggers.js +2 -256
  300. package/dist/flow-unattended-words.js +0 -13
  301. package/dist/flow-unattended.js +2 -115
  302. package/dist/flows-cli.js +2 -36
  303. package/dist/flows-ui.js +0 -51
  304. package/dist/flows.js +0 -158
  305. package/dist/folder-gate.js +0 -21
  306. package/dist/folder-look.js +0 -42
  307. package/dist/follow-through-brief.js +0 -6
  308. package/dist/follow-through-cli.js +0 -5
  309. package/dist/fonts.js +0 -13
  310. package/dist/gaps.js +0 -20
  311. package/dist/gate-failure.js +0 -7
  312. package/dist/git-floor.js +0 -12
  313. package/dist/git-incident.js +2 -38
  314. package/dist/git-views.js +0 -24
  315. package/dist/git.js +0 -31
  316. package/dist/github-import.js +0 -22
  317. package/dist/github-jobs.js +0 -12
  318. package/dist/google-mail.js +2 -27
  319. package/dist/grant.js +0 -110
  320. package/dist/graph.js +0 -108
  321. package/dist/guides.js +4 -15
  322. package/dist/handover-note.js +0 -12
  323. package/dist/health-cli.js +0 -2
  324. package/dist/home-groups.js +0 -15
  325. package/dist/html.js +0 -54
  326. package/dist/install-method.js +0 -12
  327. package/dist/integrations-ui.js +0 -15
  328. package/dist/integrations.js +7 -50
  329. package/dist/invoke.js +1 -381
  330. package/dist/is-record.js +0 -1
  331. package/dist/issues.js +0 -48
  332. package/dist/jsonl-discriminants.js +0 -6
  333. package/dist/keymap.js +0 -17
  334. package/dist/keys.js +0 -56
  335. package/dist/kits-ui.js +0 -3
  336. package/dist/kits.js +1 -24
  337. package/dist/knowledge-cli.js +0 -4
  338. package/dist/knowledge-ui.js +0 -8
  339. package/dist/landed-cleanup.js +0 -119
  340. package/dist/laptop-background.js +0 -85
  341. package/dist/laptop-service.js +0 -67
  342. package/dist/latency-timeline.js +2 -23
  343. package/dist/lead-about.js +0 -7
  344. package/dist/lead-answer-eval.js +0 -39
  345. package/dist/lead-capabilities.js +0 -19
  346. package/dist/lead-cli-live.js +0 -22
  347. package/dist/lead-cli.js +0 -27
  348. package/dist/lead-commitments.js +1 -27
  349. package/dist/lead-context.js +2 -42
  350. package/dist/lead-contract.js +0 -8
  351. package/dist/lead-doors.js +0 -105
  352. package/dist/lead-follow.js +0 -41
  353. package/dist/lead-identity.js +1 -4
  354. package/dist/lead-latency-schema.js +0 -13
  355. package/dist/lead-people.js +3 -18
  356. package/dist/lead-progress.js +0 -12
  357. package/dist/lead-queue-runtime.js +0 -26
  358. package/dist/lead-queue.js +0 -35
  359. package/dist/lead-route.js +0 -33
  360. package/dist/lead-status.js +0 -37
  361. package/dist/lead-sweep.js +0 -18
  362. package/dist/lead-tools.js +0 -160
  363. package/dist/lead-voice.js +0 -54
  364. package/dist/lead.js +2 -105
  365. package/dist/learning-child.js +0 -6
  366. package/dist/learning-look.js +0 -14
  367. package/dist/ledger-chain.js +0 -34
  368. package/dist/ledger-csv.js +0 -2
  369. package/dist/ledger-view.js +0 -3
  370. package/dist/lesson-notes.js +0 -56
  371. package/dist/limits-ui.js +0 -14
  372. package/dist/link.js +0 -79
  373. package/dist/live-backup.js +3 -33
  374. package/dist/live-bus.js +7 -81
  375. package/dist/live-children-read.js +4 -47
  376. package/dist/live-children.js +4 -44
  377. package/dist/live-detail.js +0 -17
  378. package/dist/live-input.js +5 -68
  379. package/dist/live-main-read.js +1 -14
  380. package/dist/live-notes.js +0 -12
  381. package/dist/live-open.js +1 -23
  382. package/dist/live-records.js +4 -151
  383. package/dist/live-reply.js +1 -51
  384. package/dist/live-terminal.js +12 -111
  385. package/dist/live.js +4 -130
  386. package/dist/local-owner-acts.js +0 -53
  387. package/dist/local-owner.js +2 -93
  388. package/dist/log.js +0 -8
  389. package/dist/login-secrets.js +2 -38
  390. package/dist/machine-check.js +0 -2
  391. package/dist/machine-identity.js +1 -46
  392. package/dist/mailbox.js +0 -30
  393. package/dist/maintenance.js +1 -3
  394. package/dist/mcp-connect.js +0 -88
  395. package/dist/mcp-core.js +0 -45
  396. package/dist/mcp-http.js +0 -13
  397. package/dist/mcp-oauth.js +0 -37
  398. package/dist/mcp-person.js +0 -11
  399. package/dist/mcp.js +3 -73
  400. package/dist/memory-cli.js +0 -3
  401. package/dist/memory-pass.js +0 -53
  402. package/dist/memory-tidy.js +0 -55
  403. package/dist/memory-use.js +2 -24
  404. package/dist/merge-checklist.js +21 -29
  405. package/dist/metrics.js +0 -10
  406. package/dist/mobile-viewport.js +0 -6
  407. package/dist/model-catalog.js +1 -33
  408. package/dist/model-choices.js +9 -84
  409. package/dist/model-names.js +0 -9
  410. package/dist/models-cli.js +0 -13
  411. package/dist/models-ui.js +0 -17
  412. package/dist/modes.js +0 -35
  413. package/dist/monitoring-settings.js +2 -27
  414. package/dist/monitoring-ui.js +2 -14
  415. package/dist/monitoring.js +2 -38
  416. package/dist/names.js +0 -39
  417. package/dist/needs-you.js +7 -70
  418. package/dist/never-index.js +0 -9
  419. package/dist/nightly-check.js +0 -74
  420. package/dist/nightly-github.js +0 -168
  421. package/dist/notification-delivery.js +0 -3
  422. package/dist/notification-rows.js +0 -17
  423. package/dist/oauth-run-token.js +1 -37
  424. package/dist/observations.js +0 -16
  425. package/dist/oidc.js +1 -20
  426. package/dist/onboard.js +4 -57
  427. package/dist/one-step-chat-schema.js +0 -15
  428. package/dist/openrouter-models.js +0 -6
  429. package/dist/operate-remote-arguments.js +0 -17
  430. package/dist/operate-remote.js +0 -33
  431. package/dist/operate.js +227 -2326
  432. package/dist/orphan-sweep.js +3 -37
  433. package/dist/page-work-contract.js +0 -3
  434. package/dist/password-bearer.js +1 -11
  435. package/dist/passwordless.js +0 -3
  436. package/dist/peek-cli.js +0 -46
  437. package/dist/peek.js +2 -61
  438. package/dist/people-audit-ui.js +0 -6
  439. package/dist/person-proof.js +0 -6
  440. package/dist/phase-routing.js +8 -183
  441. package/dist/plain-schema.js +0 -14
  442. package/dist/plain-words.js +18 -12
  443. package/dist/plan-auto.js +0 -20
  444. package/dist/plan-login.js +0 -16
  445. package/dist/plan.js +0 -68
  446. package/dist/plane-review.js +0 -56
  447. package/dist/planner-source.js +0 -96
  448. package/dist/planner.js +0 -117
  449. package/dist/policy-ui.js +0 -8
  450. package/dist/policy.js +0 -47
  451. package/dist/prepared-evidence.js +0 -5
  452. package/dist/principal.js +0 -29
  453. package/dist/probe.js +0 -30
  454. package/dist/process-custody.js +0 -15
  455. package/dist/process-liveness.js +0 -32
  456. package/dist/process-tree.js +3 -29
  457. package/dist/project-access.js +0 -10
  458. package/dist/project-admission.js +1 -41
  459. package/dist/project-cli.js +0 -6
  460. package/dist/project-concurrency.js +0 -35
  461. package/dist/project-delete-ui.js +4 -29
  462. package/dist/project-delete.js +1 -73
  463. package/dist/project-demo.js +0 -13
  464. package/dist/project-file.js +0 -2
  465. package/dist/project-identity.js +0 -41
  466. package/dist/project-knowledge.js +0 -39
  467. package/dist/project-learning.js +3 -55
  468. package/dist/project-memory.js +2 -45
  469. package/dist/project-outcomes.js +0 -6
  470. package/dist/project-sandbox.js +0 -23
  471. package/dist/project-skills.js +0 -12
  472. package/dist/project-tools.js +6 -184
  473. package/dist/project.js +0 -48
  474. package/dist/prompt.js +0 -31
  475. package/dist/proof.js +0 -220
  476. package/dist/proposal.js +0 -50
  477. package/dist/protected-storage-look.js +0 -6
  478. package/dist/protected-storage.js +1 -84
  479. package/dist/provider-auth.js +3 -69
  480. package/dist/provider-capture.js +1 -15
  481. package/dist/provider-connection.js +0 -8
  482. package/dist/provider-home.js +0 -25
  483. package/dist/provider-limits.js +0 -14
  484. package/dist/provider.js +0 -324
  485. package/dist/public-access.js +0 -34
  486. package/dist/public-check.js +0 -16
  487. package/dist/publish.js +1 -150
  488. package/dist/pull-request-flow.js +0 -77
  489. package/dist/pull-request-schema.js +0 -4
  490. package/dist/pull-request-ui.js +0 -5
  491. package/dist/pulls.js +0 -80
  492. package/dist/push.js +5 -89
  493. package/dist/quick-start.js +1 -23
  494. package/dist/read-executor-worker.js +0 -1
  495. package/dist/read-executor.js +0 -10
  496. package/dist/read-only-request.js +0 -7
  497. package/dist/recipe-ui.js +0 -6
  498. package/dist/recipes.js +0 -13
  499. package/dist/release-adapters.js +6 -214
  500. package/dist/release-approval.js +0 -74
  501. package/dist/release-authority.js +0 -42
  502. package/dist/release-auto.js +0 -142
  503. package/dist/release-card.js +0 -100
  504. package/dist/release-carry.js +0 -132
  505. package/dist/release-ci-hold.js +0 -20
  506. package/dist/release-cli.js +0 -46
  507. package/dist/release-coverage.js +0 -16
  508. package/dist/release-gate.js +0 -30
  509. package/dist/release-git.js +0 -24
  510. package/dist/release-links.js +0 -17
  511. package/dist/release-net.js +0 -42
  512. package/dist/release-next.js +0 -25
  513. package/dist/release-recheck.js +0 -89
  514. package/dist/release-refusal.js +0 -18
  515. package/dist/release-view.js +0 -5
  516. package/dist/release.js +7 -341
  517. package/dist/releases.js +0 -49
  518. package/dist/remote-audit.js +0 -25
  519. package/dist/remote-command.js +0 -16
  520. package/dist/remote-destination.js +5 -26
  521. package/dist/remote-exec.js +1 -27
  522. package/dist/remote-main.js +1 -53
  523. package/dist/remote-run.js +0 -5
  524. package/dist/remote.js +0 -49
  525. package/dist/render.js +0 -133
  526. package/dist/reply-shape.js +0 -85
  527. package/dist/reply-voice.js +0 -7
  528. package/dist/report-summary.js +0 -5
  529. package/dist/reported-usage.js +0 -30
  530. package/dist/repos.js +9 -62
  531. package/dist/repository-context.js +1 -24
  532. package/dist/request-budget-ui.js +0 -4
  533. package/dist/request-budget.js +0 -23
  534. package/dist/restart-certification.js +0 -37
  535. package/dist/result-actions.js +0 -62
  536. package/dist/result-acts.js +0 -34
  537. package/dist/result-completion.js +0 -25
  538. package/dist/result-evidence-readers.js +0 -3
  539. package/dist/result-follow-ups.js +1 -39
  540. package/dist/result-review.js +0 -86
  541. package/dist/result-shots.js +0 -39
  542. package/dist/retention-ui.js +0 -7
  543. package/dist/retention.js +2 -46
  544. package/dist/review-context.js +0 -129
  545. package/dist/review-evidence.js +0 -4
  546. package/dist/review-switch.js +1 -7
  547. package/dist/reviewer.js +0 -35
  548. package/dist/route-change-check.js +0 -2
  549. package/dist/route-change.js +0 -16
  550. package/dist/route-hooks.js +0 -27
  551. package/dist/route-results.js +2 -58
  552. package/dist/route-rules.js +1 -106
  553. package/dist/route-savings.js +0 -36
  554. package/dist/route-store.js +1 -133
  555. package/dist/run-closeout.js +2 -50
  556. package/dist/run-efficiency.js +2 -44
  557. package/dist/run-ending.js +0 -13
  558. package/dist/runner-process.js +0 -33
  559. package/dist/runner.js +17 -189
  560. package/dist/sample-project.js +2 -27
  561. package/dist/sandbox-launch.js +4 -25
  562. package/dist/sandbox-runtime.js +1 -88
  563. package/dist/scan.js +0 -27
  564. package/dist/scope.js +4 -567
  565. package/dist/scout-browser-lock.js +0 -6
  566. package/dist/scout-browser.js +2 -68
  567. package/dist/scout-net.js +1 -32
  568. package/dist/scout-report.js +0 -22
  569. package/dist/scout.js +1 -116
  570. package/dist/secret-mint.js +0 -6
  571. package/dist/serve.js +21 -555
  572. package/dist/server/agents-computers.js +0 -10
  573. package/dist/server/agents-live-filed.js +0 -13
  574. package/dist/server/agents-live-lead.js +0 -19
  575. package/dist/server/agents-live-room.js +0 -19
  576. package/dist/server/chat.js +2 -194
  577. package/dist/server/chrome.js +17 -263
  578. package/dist/server/console.css +4 -4
  579. package/dist/server/edge-refusal.js +0 -3
  580. package/dist/server/flows.js +5 -74
  581. package/dist/server/guards.js +1 -88
  582. package/dist/server/handler-registry.js +0 -2
  583. package/dist/server/home-asks.js +1 -22
  584. package/dist/server/home.js +1 -30
  585. package/dist/server/http.js +0 -82
  586. package/dist/server/in-place.js +0 -15
  587. package/dist/server/kit-standalone.js +0 -20
  588. package/dist/server/kit.js +2 -114
  589. package/dist/server/last-checks.js +0 -2
  590. package/dist/server/live.js +1 -36
  591. package/dist/server/merge-ready-view.js +0 -6
  592. package/dist/server/mutation-key.js +3 -40
  593. package/dist/server/pages-assets.js +0 -16
  594. package/dist/server/pages.js +7 -195
  595. package/dist/server/people-tokens.js +3 -101
  596. package/dist/server/remote-hooks.js +0 -13
  597. package/dist/server/remote.js +0 -28
  598. package/dist/server/render-chat.js +8 -144
  599. package/dist/server/render-code-map.js +0 -5
  600. package/dist/server/render-flaky.js +0 -8
  601. package/dist/server/render-follow-through.js +2 -5
  602. package/dist/server/render-history.js +2 -34
  603. package/dist/server/render-new-task.js +2 -29
  604. package/dist/server/render-pages.js +1 -111
  605. package/dist/server/render-people.js +2 -46
  606. package/dist/server/render-projects.js +15 -32
  607. package/dist/server/render-release.js +1 -14
  608. package/dist/server/render-results.js +4 -355
  609. package/dist/server/render-settings.js +0 -15
  610. package/dist/server/render-tasks.js +13 -493
  611. package/dist/server/request-context.js +2 -9
  612. package/dist/server/retired-routes.js +0 -11
  613. package/dist/server/route-policy.js +0 -3
  614. package/dist/server/route-table.js +6 -135
  615. package/dist/server/runtime.js +0 -1
  616. package/dist/server/session.js +0 -28
  617. package/dist/server/settings.js +40 -246
  618. package/dist/server/signup-gate.js +0 -11
  619. package/dist/server/sweeps.js +0 -6
  620. package/dist/server/task-views.js +9 -227
  621. package/dist/server/tasks.js +5 -539
  622. package/dist/server/terminals.js +2 -46
  623. package/dist/server/welcome.js +2 -22
  624. package/dist/server-telemetry.js +0 -9
  625. package/dist/settings-groups-ui.js +50 -63
  626. package/dist/settings-kit-script.js +0 -19
  627. package/dist/settings-kit.js +0 -63
  628. package/dist/settings-proofs.js +0 -23
  629. package/dist/setup-guide.js +1 -9
  630. package/dist/shared-deps.js +9 -84
  631. package/dist/sign-in-guard.js +0 -27
  632. package/dist/skills-ui.js +0 -2
  633. package/dist/skills.js +2 -54
  634. package/dist/slack-api.js +0 -3
  635. package/dist/slack-chat.js +0 -25
  636. package/dist/slack-settings.js +0 -1
  637. package/dist/slack-socket.js +0 -5
  638. package/dist/slack.js +0 -4
  639. package/dist/sleep.js +0 -1
  640. package/dist/source-key.js +0 -10
  641. package/dist/spend-report.js +0 -29
  642. package/dist/spend-ui.js +0 -26
  643. package/dist/spend.js +0 -40
  644. package/dist/sqlite-runtime.js +0 -2
  645. package/dist/sqlite-telemetry.js +0 -9
  646. package/dist/sso-settings.js +0 -13
  647. package/dist/sso-ui.js +0 -2
  648. package/dist/staged-runtimes.js +5 -39
  649. package/dist/steer-capabilities.js +1 -7
  650. package/dist/steer-controls.js +0 -10
  651. package/dist/steer-live.js +0 -31
  652. package/dist/steer-mailbox.js +4 -65
  653. package/dist/steer-status.js +0 -7
  654. package/dist/stop-proof.js +5 -62
  655. package/dist/storage-sweep-child.js +1 -5
  656. package/dist/storage-sweep-process.js +2 -20
  657. package/dist/storage-sweep-schedule.js +0 -32
  658. package/dist/storage-sweep.js +2 -51
  659. package/dist/storage-ui.js +0 -18
  660. package/dist/storage.js +0 -31
  661. package/dist/store-baseline.js +0 -14
  662. package/dist/store.js +109 -4763
  663. package/dist/stream-scope.js +0 -16
  664. package/dist/structured-output.js +0 -39
  665. package/dist/style-asset.js +0 -2
  666. package/dist/subagent-admin.js +0 -9
  667. package/dist/subagent-desk.js +0 -29
  668. package/dist/subagent-memory.js +0 -38
  669. package/dist/subagent-question.js +0 -29
  670. package/dist/subagent-tools.js +1 -60
  671. package/dist/subagent-week.js +0 -28
  672. package/dist/subagent-work.js +1 -39
  673. package/dist/subagents-ui.js +1 -13
  674. package/dist/subagents.js +0 -40
  675. package/dist/subscription-chat.js +1 -42
  676. package/dist/summary.js +0 -19
  677. package/dist/surface.js +0 -75
  678. package/dist/sweep-gate.js +0 -2
  679. package/dist/sweep-quarantine.js +2 -13
  680. package/dist/sync.js +0 -47
  681. package/dist/tailnet.js +0 -9
  682. package/dist/tamper-scan.js +0 -15
  683. package/dist/task-activity.js +1 -16
  684. package/dist/task-aliases.js +0 -3
  685. package/dist/task-archive.js +0 -7
  686. package/dist/task-base.js +0 -18
  687. package/dist/task-composer.js +0 -2
  688. package/dist/task-control.js +0 -74
  689. package/dist/task-live.js +0 -23
  690. package/dist/task-moves.js +0 -28
  691. package/dist/task-outcome-cli.js +17 -28
  692. package/dist/task-review-brief.js +0 -7
  693. package/dist/task-sizing.js +0 -47
  694. package/dist/task-source.js +0 -23
  695. package/dist/task-status.js +0 -106
  696. package/dist/task-text.js +0 -12
  697. package/dist/team-chat-authorization.js +0 -3
  698. package/dist/team-contract.js +0 -2
  699. package/dist/team-http.js +0 -4
  700. package/dist/team-leads.js +1 -16
  701. package/dist/team-runtime.js +0 -13
  702. package/dist/team-ui.js +0 -1
  703. package/dist/team-updates.js +0 -4
  704. package/dist/teams-api.js +0 -12
  705. package/dist/teams-chat.js +0 -28
  706. package/dist/teams.js +0 -12
  707. package/dist/teardown-git.js +6 -294
  708. package/dist/telegram-flow.js +0 -51
  709. package/dist/telegram-lead.js +2 -203
  710. package/dist/telegram-live.js +1 -42
  711. package/dist/telegram-progress.js +0 -18
  712. package/dist/telegram-settings.js +0 -7
  713. package/dist/telegram-status.js +0 -46
  714. package/dist/telegram-team.js +1 -33
  715. package/dist/telegram.js +6 -454
  716. package/dist/templates.js +0 -24
  717. package/dist/terminal-catalog.js +2 -20
  718. package/dist/terminal-text.js +0 -12
  719. package/dist/test-infra.js +0 -50
  720. package/dist/test-temp.js +3 -26
  721. package/dist/text-limits.js +0 -92
  722. package/dist/tidy.js +0 -76
  723. package/dist/tier-report.js +0 -2
  724. package/dist/token-notices.js +1 -9
  725. package/dist/tokens-cli.js +0 -13
  726. package/dist/tool-broker.js +2 -53
  727. package/dist/tool-launcher.js +0 -14
  728. package/dist/tool-secret-store.js +3 -125
  729. package/dist/toolroll-update-cli.js +0 -9
  730. package/dist/toolroll-update-ui.js +0 -14
  731. package/dist/toolroll-update.js +13 -252
  732. package/dist/tools-ui.js +0 -17
  733. package/dist/transitions-recipes.js +0 -2
  734. package/dist/tree-proof.js +0 -23
  735. package/dist/tui-contract.js +0 -8
  736. package/dist/tui-source.js +16 -36
  737. package/dist/tui.js +1 -1
  738. package/dist/typed-start.js +0 -27
  739. package/dist/unfenced-test-support.js +0 -5
  740. package/dist/up-processes.js +1 -40
  741. package/dist/up-role-child.js +1 -13
  742. package/dist/update-notice.js +0 -1
  743. package/dist/vanished-retry.js +0 -40
  744. package/dist/verification-evidence.js +0 -39
  745. package/dist/version.js +0 -1
  746. package/dist/wake-hub.js +0 -28
  747. package/dist/webhook-limits.js +0 -7
  748. package/dist/webhook-readers.js +0 -30
  749. package/dist/webhook-signing.js +0 -14
  750. package/dist/webhooks.js +0 -54
  751. package/dist/welcome-facts.js +2 -14
  752. package/dist/when-html.js +0 -27
  753. package/dist/work-index.js +26 -98
  754. package/dist/work-summary.js +2 -17
  755. package/dist/workspace-motion.js +0 -2
  756. package/dist/workspace-revision.js +1 -21
  757. package/dist/workspace-ui.js +15 -135
  758. package/dist/worktree-notices.js +0 -3
  759. package/dist/worktree.js +0 -308
  760. package/dist/writes-mode.js +0 -1
  761. package/dist/youiyoux-intake.js +4 -159
  762. package/package.json +4 -3
  763. package/dist/accent-colors.d.ts +0 -51
  764. package/dist/acp-agents.d.ts +0 -43
  765. package/dist/acp-attest.d.ts +0 -44
  766. package/dist/acp-check.d.ts +0 -37
  767. package/dist/acp-client.d.ts +0 -163
  768. package/dist/acp-inspect.d.ts +0 -23
  769. package/dist/action-ledger.d.ts +0 -27
  770. package/dist/activity-line.d.ts +0 -29
  771. package/dist/actor.d.ts +0 -11
  772. package/dist/agent-board.d.ts +0 -229
  773. package/dist/agent-fence.d.ts +0 -479
  774. package/dist/agent-onboard.d.ts +0 -158
  775. package/dist/agent-pulse.d.ts +0 -43
  776. package/dist/agent-state-words.d.ts +0 -19
  777. package/dist/agent-state.d.ts +0 -65
  778. package/dist/agent-turns.d.ts +0 -52
  779. package/dist/agentconfig.d.ts +0 -191
  780. package/dist/agents-board.d.ts +0 -145
  781. package/dist/agents-live.d.ts +0 -31
  782. package/dist/api-tokens.d.ts +0 -80
  783. package/dist/approval-authority.d.ts +0 -51
  784. package/dist/approval-password.d.ts +0 -31
  785. package/dist/approval-policy.d.ts +0 -69
  786. package/dist/approval-rules-ui.d.ts +0 -40
  787. package/dist/assignment-adapters.d.ts +0 -152
  788. package/dist/assignment-brief.d.ts +0 -83
  789. package/dist/assignment-delivery.d.ts +0 -86
  790. package/dist/assignment-presentation.d.ts +0 -37
  791. package/dist/assignment-status.d.ts +0 -71
  792. package/dist/assignment-ui.d.ts +0 -68
  793. package/dist/assignment.d.ts +0 -350
  794. package/dist/attest.d.ts +0 -59
  795. package/dist/audit-cli.d.ts +0 -17
  796. package/dist/backend.d.ts +0 -97
  797. package/dist/backup-ui.d.ts +0 -32
  798. package/dist/backup.d.ts +0 -92
  799. package/dist/batch-checks.d.ts +0 -15
  800. package/dist/batch-policy.d.ts +0 -23
  801. package/dist/beads.d.ts +0 -34
  802. package/dist/bin.d.ts +0 -2
  803. package/dist/board.d.ts +0 -134
  804. package/dist/boot-identity.d.ts +0 -64
  805. package/dist/bounded-spawn.d.ts +0 -57
  806. package/dist/brand-icons.d.ts +0 -168
  807. package/dist/brand-mark.d.ts +0 -28
  808. package/dist/brief-fence.d.ts +0 -9
  809. package/dist/browser-crew.d.ts +0 -12
  810. package/dist/browser-shell.d.ts +0 -9
  811. package/dist/browser-workspace.d.ts +0 -1985
  812. package/dist/budget-alerts.d.ts +0 -19
  813. package/dist/build-review.d.ts +0 -38
  814. package/dist/builder-restart.d.ts +0 -21
  815. package/dist/builder.d.ts +0 -409
  816. package/dist/canonical-json.d.ts +0 -14
  817. package/dist/capscan.d.ts +0 -35
  818. package/dist/card-catalog.d.ts +0 -209
  819. package/dist/card-cli.d.ts +0 -43
  820. package/dist/card-render.d.ts +0 -43
  821. package/dist/card-sources.d.ts +0 -68
  822. package/dist/chat-acceptance.d.ts +0 -74
  823. package/dist/chat-actions.d.ts +0 -460
  824. package/dist/chat-admission.d.ts +0 -19
  825. package/dist/chat-approval.d.ts +0 -58
  826. package/dist/chat-ask.d.ts +0 -32
  827. package/dist/chat-card-part.d.ts +0 -11
  828. package/dist/chat-card.d.ts +0 -46
  829. package/dist/chat-channel.d.ts +0 -126
  830. package/dist/chat-continuity.d.ts +0 -32
  831. package/dist/chat-controls.d.ts +0 -117
  832. package/dist/chat-core.d.ts +0 -177
  833. package/dist/chat-decide.d.ts +0 -269
  834. package/dist/chat-delivery-state.d.ts +0 -132
  835. package/dist/chat-delivery.d.ts +0 -71
  836. package/dist/chat-display.d.ts +0 -1
  837. package/dist/chat-evidence.d.ts +0 -123
  838. package/dist/chat-flow.d.ts +0 -70
  839. package/dist/chat-follow.d.ts +0 -20
  840. package/dist/chat-inbox.d.ts +0 -57
  841. package/dist/chat-live-schema.d.ts +0 -17
  842. package/dist/chat-live.d.ts +0 -161
  843. package/dist/chat-message-states.d.ts +0 -75
  844. package/dist/chat-messages.d.ts +0 -338
  845. package/dist/chat-migration.d.ts +0 -30
  846. package/dist/chat-polish.d.ts +0 -17
  847. package/dist/chat-quiet.d.ts +0 -40
  848. package/dist/chat-review.d.ts +0 -51
  849. package/dist/chat-rooms.d.ts +0 -123
  850. package/dist/chat-settings-page.d.ts +0 -43
  851. package/dist/chat-task-actions.d.ts +0 -59
  852. package/dist/chat-terms.d.ts +0 -29
  853. package/dist/chat-voice.d.ts +0 -69
  854. package/dist/chat-warmth.d.ts +0 -21
  855. package/dist/check-access.d.ts +0 -54
  856. package/dist/check-facts.d.ts +0 -126
  857. package/dist/check-failure.d.ts +0 -113
  858. package/dist/check-levels-ui.d.ts +0 -36
  859. package/dist/check-levels.d.ts +0 -70
  860. package/dist/check-load.d.ts +0 -85
  861. package/dist/check-only-standing.d.ts +0 -36
  862. package/dist/check-only.d.ts +0 -15
  863. package/dist/check-progress.d.ts +0 -78
  864. package/dist/check-repair.d.ts +0 -47
  865. package/dist/check-report.d.ts +0 -177
  866. package/dist/check-stamp.d.ts +0 -46
  867. package/dist/checkout-cleanup.d.ts +0 -157
  868. package/dist/checkout-proof.d.ts +0 -28
  869. package/dist/child-database.d.ts +0 -12
  870. package/dist/claim.d.ts +0 -627
  871. package/dist/claude-print.d.ts +0 -12
  872. package/dist/cli-fast.d.ts +0 -8
  873. package/dist/cli-help.d.ts +0 -8
  874. package/dist/cli-http.d.ts +0 -58
  875. package/dist/cli.d.ts +0 -149
  876. package/dist/code-extract.d.ts +0 -44
  877. package/dist/code-map-acts.d.ts +0 -24
  878. package/dist/code-map-admission.d.ts +0 -52
  879. package/dist/code-map-build.d.ts +0 -63
  880. package/dist/code-map-cli.d.ts +0 -153
  881. package/dist/code-map-main.d.ts +0 -1
  882. package/dist/code-map-read.d.ts +0 -106
  883. package/dist/code-map-report.d.ts +0 -37
  884. package/dist/code-map-shape.d.ts +0 -172
  885. package/dist/code-map-store.d.ts +0 -136
  886. package/dist/codex-limits.d.ts +0 -15
  887. package/dist/coding-context.d.ts +0 -18
  888. package/dist/coding-handoff.d.ts +0 -39
  889. package/dist/coding-provider.d.ts +0 -88
  890. package/dist/coding-shipping-ui.d.ts +0 -5
  891. package/dist/coding-types.d.ts +0 -16
  892. package/dist/coding-ui.d.ts +0 -19
  893. package/dist/coding-update.d.ts +0 -28
  894. package/dist/coding-workspace.d.ts +0 -141
  895. package/dist/commit-extract.d.ts +0 -135
  896. package/dist/connect-cli.d.ts +0 -34
  897. package/dist/console-chrome.d.ts +0 -41
  898. package/dist/console-instance.d.ts +0 -157
  899. package/dist/container-state.d.ts +0 -5
  900. package/dist/containment.d.ts +0 -205
  901. package/dist/contract-changes.d.ts +0 -52
  902. package/dist/contracts/acceptance-terms.d.ts +0 -14
  903. package/dist/contracts/chat-actions.d.ts +0 -465
  904. package/dist/contracts/chat-callback-rows.d.ts +0 -59
  905. package/dist/contracts/chat-card.d.ts +0 -91
  906. package/dist/contracts/chat-content.d.ts +0 -551
  907. package/dist/contracts/chat-tables.d.ts +0 -12
  908. package/dist/contracts/cli.d.ts +0 -987
  909. package/dist/contracts/coding-activity.d.ts +0 -64
  910. package/dist/contracts/coding-context.d.ts +0 -97
  911. package/dist/contracts/coding-handoff.d.ts +0 -44
  912. package/dist/contracts/coding-workspace.d.ts +0 -165
  913. package/dist/contracts/console-api.d.ts +0 -540
  914. package/dist/contracts/contract-test.d.ts +0 -45
  915. package/dist/contracts/contract.d.ts +0 -92
  916. package/dist/contracts/decision.d.ts +0 -45
  917. package/dist/contracts/diff-stat.d.ts +0 -58
  918. package/dist/contracts/discord-callback.d.ts +0 -45
  919. package/dist/contracts/flow-card.d.ts +0 -53
  920. package/dist/contracts/flow-propose.d.ts +0 -334
  921. package/dist/contracts/flow-send.d.ts +0 -245
  922. package/dist/contracts/flow.d.ts +0 -19565
  923. package/dist/contracts/gateway-tools.d.ts +0 -472
  924. package/dist/contracts/handoff.d.ts +0 -91
  925. package/dist/contracts/health.d.ts +0 -82
  926. package/dist/contracts/integration-metadata.d.ts +0 -100
  927. package/dist/contracts/lead-context.d.ts +0 -165
  928. package/dist/contracts/lead-tools.d.ts +0 -2312
  929. package/dist/contracts/mcp-oauth.d.ts +0 -53
  930. package/dist/contracts/memory-pass.d.ts +0 -157
  931. package/dist/contracts/model-catalog.d.ts +0 -21
  932. package/dist/contracts/observation-request.d.ts +0 -37
  933. package/dist/contracts/plan.d.ts +0 -58
  934. package/dist/contracts/project-knowledge.d.ts +0 -159
  935. package/dist/contracts/project-memory.d.ts +0 -119
  936. package/dist/contracts/project-skills.d.ts +0 -120
  937. package/dist/contracts/proof.d.ts +0 -136
  938. package/dist/contracts/provider.d.ts +0 -40
  939. package/dist/contracts/recipes.d.ts +0 -166
  940. package/dist/contracts/release-check.d.ts +0 -371
  941. package/dist/contracts/release-terms.d.ts +0 -107
  942. package/dist/contracts/retention.d.ts +0 -42
  943. package/dist/contracts/review-findings.d.ts +0 -46
  944. package/dist/contracts/route-results.d.ts +0 -121
  945. package/dist/contracts/route.d.ts +0 -897
  946. package/dist/contracts/scope.d.ts +0 -105
  947. package/dist/contracts/scout-report.d.ts +0 -234
  948. package/dist/contracts/slack-callback.d.ts +0 -43
  949. package/dist/contracts/sort-answer.d.ts +0 -83
  950. package/dist/contracts/stage-output.d.ts +0 -127
  951. package/dist/contracts/storage.d.ts +0 -37
  952. package/dist/contracts/store-json.d.ts +0 -313
  953. package/dist/contracts/subagent-turn.d.ts +0 -43
  954. package/dist/contracts/task-sizing.d.ts +0 -24
  955. package/dist/contracts/teams-callback.d.ts +0 -13
  956. package/dist/contracts/telegram-callback.d.ts +0 -120
  957. package/dist/contracts/trigger-payloads.d.ts +0 -389
  958. package/dist/contracts/update-journal.d.ts +0 -254
  959. package/dist/contracts/verification-receipt.d.ts +0 -200
  960. package/dist/contracts/verification-view.d.ts +0 -102
  961. package/dist/contracts/youiyoux-request.d.ts +0 -248
  962. package/dist/control-setup.d.ts +0 -44
  963. package/dist/control-ui.d.ts +0 -37
  964. package/dist/controller-service.d.ts +0 -1
  965. package/dist/controller-supervisor.d.ts +0 -38
  966. package/dist/converse.d.ts +0 -316
  967. package/dist/coordinator-proposals.d.ts +0 -29
  968. package/dist/coordinator.d.ts +0 -186
  969. package/dist/credentials-ui.d.ts +0 -33
  970. package/dist/daemon.d.ts +0 -226
  971. package/dist/database-reclaim.d.ts +0 -4
  972. package/dist/decision.d.ts +0 -119
  973. package/dist/demo-chat.d.ts +0 -32
  974. package/dist/demo.d.ts +0 -153
  975. package/dist/deploy-gate.d.ts +0 -20
  976. package/dist/deploy-lock.d.ts +0 -8
  977. package/dist/deploy-phase.d.ts +0 -37
  978. package/dist/deploy-rescue.d.ts +0 -42
  979. package/dist/deprecations.d.ts +0 -20
  980. package/dist/design/kit.d.ts +0 -216
  981. package/dist/desktop-access.d.ts +0 -28
  982. package/dist/desktop-bundle.d.ts +0 -16
  983. package/dist/desktop-host.d.ts +0 -54
  984. package/dist/desktop-update-gate.d.ts +0 -12
  985. package/dist/desktop-update-recovery.d.ts +0 -14
  986. package/dist/desktop-update.d.ts +0 -147
  987. package/dist/digest-times.d.ts +0 -3
  988. package/dist/disclosure.d.ts +0 -6
  989. package/dist/discord-api.d.ts +0 -24
  990. package/dist/discord-chat.d.ts +0 -27
  991. package/dist/discord-settings.d.ts +0 -4
  992. package/dist/discord.d.ts +0 -10
  993. package/dist/discover.d.ts +0 -75
  994. package/dist/dispatch.d.ts +0 -123
  995. package/dist/dispose.d.ts +0 -194
  996. package/dist/doctor.d.ts +0 -67
  997. package/dist/easy-start-args.d.ts +0 -13
  998. package/dist/easy-start.d.ts +0 -77
  999. package/dist/egress.d.ts +0 -121
  1000. package/dist/email-settings.d.ts +0 -34
  1001. package/dist/envelope.d.ts +0 -47
  1002. package/dist/eval-gate.d.ts +0 -51
  1003. package/dist/eval-hooks.d.ts +0 -94
  1004. package/dist/eval-oracle-main.d.ts +0 -1
  1005. package/dist/eval-oracle.d.ts +0 -60
  1006. package/dist/eval-world.d.ts +0 -17
  1007. package/dist/evals.d.ts +0 -299
  1008. package/dist/evidence-pack.d.ts +0 -186
  1009. package/dist/evidence-pair.d.ts +0 -53
  1010. package/dist/evidence.d.ts +0 -371
  1011. package/dist/exec.d.ts +0 -355
  1012. package/dist/exhaustion.d.ts +0 -58
  1013. package/dist/export-ui.d.ts +0 -11
  1014. package/dist/export.d.ts +0 -48
  1015. package/dist/failing-first.d.ts +0 -31
  1016. package/dist/fallback-schema.d.ts +0 -8
  1017. package/dist/fallback.d.ts +0 -138
  1018. package/dist/fast-start.d.ts +0 -213
  1019. package/dist/fast-terms.d.ts +0 -9
  1020. package/dist/fenced-check-coverage.d.ts +0 -62
  1021. package/dist/findings.d.ts +0 -224
  1022. package/dist/first-run.d.ts +0 -197
  1023. package/dist/first-tasks-child.d.ts +0 -1
  1024. package/dist/flaky-ci.d.ts +0 -31
  1025. package/dist/flaky-cli.d.ts +0 -60
  1026. package/dist/flaky.d.ts +0 -83
  1027. package/dist/fleet-schema.d.ts +0 -17
  1028. package/dist/flow-actions.d.ts +0 -79
  1029. package/dist/flow-browser.d.ts +0 -103
  1030. package/dist/flow-cadence.d.ts +0 -48
  1031. package/dist/flow-card-task.d.ts +0 -11
  1032. package/dist/flow-changed.d.ts +0 -14
  1033. package/dist/flow-code.d.ts +0 -84
  1034. package/dist/flow-draft.d.ts +0 -42
  1035. package/dist/flow-engine.d.ts +0 -82
  1036. package/dist/flow-gallery-ui.d.ts +0 -73
  1037. package/dist/flow-gallery.d.ts +0 -147
  1038. package/dist/flow-insights.d.ts +0 -104
  1039. package/dist/flow-items.d.ts +0 -37
  1040. package/dist/flow-live.d.ts +0 -16
  1041. package/dist/flow-people.d.ts +0 -23
  1042. package/dist/flow-pull-request.d.ts +0 -14
  1043. package/dist/flow-replies.d.ts +0 -48
  1044. package/dist/flow-result-card.d.ts +0 -22
  1045. package/dist/flow-schedule.d.ts +0 -154
  1046. package/dist/flow-scripts.d.ts +0 -31
  1047. package/dist/flow-secrets.d.ts +0 -13
  1048. package/dist/flow-send.d.ts +0 -54
  1049. package/dist/flow-share.d.ts +0 -78
  1050. package/dist/flow-sort.d.ts +0 -63
  1051. package/dist/flow-starters-ui.d.ts +0 -15
  1052. package/dist/flow-starters.d.ts +0 -63
  1053. package/dist/flow-steps.d.ts +0 -52
  1054. package/dist/flow-triggers.d.ts +0 -303
  1055. package/dist/flow-unattended-words.d.ts +0 -48
  1056. package/dist/flow-unattended.d.ts +0 -259
  1057. package/dist/flows-cli.d.ts +0 -358
  1058. package/dist/flows-ui.d.ts +0 -70
  1059. package/dist/flows.d.ts +0 -136
  1060. package/dist/folder-gate.d.ts +0 -32
  1061. package/dist/folder-look.d.ts +0 -110
  1062. package/dist/follow-through-brief.d.ts +0 -12
  1063. package/dist/follow-through-cli.d.ts +0 -23
  1064. package/dist/fonts.d.ts +0 -19
  1065. package/dist/gaps.d.ts +0 -35
  1066. package/dist/gate-failure.d.ts +0 -40
  1067. package/dist/git-floor.d.ts +0 -16
  1068. package/dist/git-incident.d.ts +0 -65
  1069. package/dist/git-views.d.ts +0 -20
  1070. package/dist/git.d.ts +0 -54
  1071. package/dist/github-import.d.ts +0 -62
  1072. package/dist/github-jobs.d.ts +0 -25
  1073. package/dist/google-mail.d.ts +0 -59
  1074. package/dist/grant.d.ts +0 -136
  1075. package/dist/graph.d.ts +0 -164
  1076. package/dist/guides.d.ts +0 -22
  1077. package/dist/handover-note.d.ts +0 -33
  1078. package/dist/health-cli.d.ts +0 -3
  1079. package/dist/home-groups.d.ts +0 -39
  1080. package/dist/html.d.ts +0 -85
  1081. package/dist/install-method.d.ts +0 -17
  1082. package/dist/integrations-ui.d.ts +0 -17
  1083. package/dist/integrations.d.ts +0 -138
  1084. package/dist/invoke.d.ts +0 -228
  1085. package/dist/is-record.d.ts +0 -2
  1086. package/dist/issues.d.ts +0 -41
  1087. package/dist/jsonl-discriminants.d.ts +0 -11
  1088. package/dist/keymap.d.ts +0 -43
  1089. package/dist/keys.d.ts +0 -108
  1090. package/dist/kits-ui.d.ts +0 -16
  1091. package/dist/kits.d.ts +0 -88
  1092. package/dist/knowledge-cli.d.ts +0 -132
  1093. package/dist/knowledge-ui.d.ts +0 -45
  1094. package/dist/landed-cleanup.d.ts +0 -175
  1095. package/dist/laptop-background.d.ts +0 -187
  1096. package/dist/laptop-service.d.ts +0 -111
  1097. package/dist/latency-timeline.d.ts +0 -46
  1098. package/dist/lead-about.d.ts +0 -35
  1099. package/dist/lead-answer-eval.d.ts +0 -93
  1100. package/dist/lead-capabilities.d.ts +0 -57
  1101. package/dist/lead-cli-live.d.ts +0 -56
  1102. package/dist/lead-cli.d.ts +0 -58
  1103. package/dist/lead-commitments.d.ts +0 -84
  1104. package/dist/lead-context.d.ts +0 -45
  1105. package/dist/lead-contract.d.ts +0 -10
  1106. package/dist/lead-doors.d.ts +0 -122
  1107. package/dist/lead-follow.d.ts +0 -26
  1108. package/dist/lead-identity.d.ts +0 -23
  1109. package/dist/lead-latency-schema.d.ts +0 -24
  1110. package/dist/lead-people.d.ts +0 -55
  1111. package/dist/lead-progress.d.ts +0 -67
  1112. package/dist/lead-queue-runtime.d.ts +0 -46
  1113. package/dist/lead-queue.d.ts +0 -104
  1114. package/dist/lead-route.d.ts +0 -56
  1115. package/dist/lead-status.d.ts +0 -116
  1116. package/dist/lead-sweep.d.ts +0 -67
  1117. package/dist/lead-tools.d.ts +0 -167
  1118. package/dist/lead-voice.d.ts +0 -85
  1119. package/dist/lead.d.ts +0 -142
  1120. package/dist/learning-child.d.ts +0 -1
  1121. package/dist/learning-look.d.ts +0 -25
  1122. package/dist/ledger-chain.d.ts +0 -46
  1123. package/dist/ledger-csv.d.ts +0 -4
  1124. package/dist/ledger-view.d.ts +0 -27
  1125. package/dist/lesson-notes.d.ts +0 -81
  1126. package/dist/limits-ui.d.ts +0 -34
  1127. package/dist/link.d.ts +0 -72
  1128. package/dist/live-backup.d.ts +0 -39
  1129. package/dist/live-bus.d.ts +0 -141
  1130. package/dist/live-children-read.d.ts +0 -52
  1131. package/dist/live-children.d.ts +0 -73
  1132. package/dist/live-detail.d.ts +0 -27
  1133. package/dist/live-input.d.ts +0 -68
  1134. package/dist/live-main-read.d.ts +0 -19
  1135. package/dist/live-notes.d.ts +0 -20
  1136. package/dist/live-open.d.ts +0 -28
  1137. package/dist/live-records.d.ts +0 -149
  1138. package/dist/live-reply.d.ts +0 -83
  1139. package/dist/live-terminal.d.ts +0 -273
  1140. package/dist/live.d.ts +0 -152
  1141. package/dist/local-owner-acts.d.ts +0 -83
  1142. package/dist/local-owner.d.ts +0 -135
  1143. package/dist/log.d.ts +0 -7
  1144. package/dist/login-secrets.d.ts +0 -60
  1145. package/dist/machine-check.d.ts +0 -16
  1146. package/dist/machine-identity.d.ts +0 -75
  1147. package/dist/mailbox.d.ts +0 -57
  1148. package/dist/maintenance.d.ts +0 -13
  1149. package/dist/mcp-connect.d.ts +0 -181
  1150. package/dist/mcp-core.d.ts +0 -110
  1151. package/dist/mcp-http.d.ts +0 -32
  1152. package/dist/mcp-oauth.d.ts +0 -92
  1153. package/dist/mcp-person.d.ts +0 -22
  1154. package/dist/mcp.d.ts +0 -20
  1155. package/dist/memory-cli.d.ts +0 -768
  1156. package/dist/memory-pass.d.ts +0 -151
  1157. package/dist/memory-tidy.d.ts +0 -181
  1158. package/dist/memory-use.d.ts +0 -35
  1159. package/dist/merge-checklist.d.ts +0 -55
  1160. package/dist/metrics.d.ts +0 -6
  1161. package/dist/mobile-viewport.d.ts +0 -7
  1162. package/dist/model-catalog.d.ts +0 -123
  1163. package/dist/model-choices.d.ts +0 -235
  1164. package/dist/model-names.d.ts +0 -6
  1165. package/dist/models-cli.d.ts +0 -307
  1166. package/dist/models-ui.d.ts +0 -161
  1167. package/dist/modes.d.ts +0 -99
  1168. package/dist/monitoring-settings.d.ts +0 -44
  1169. package/dist/monitoring-ui.d.ts +0 -23
  1170. package/dist/monitoring.d.ts +0 -34
  1171. package/dist/names.d.ts +0 -67
  1172. package/dist/needs-you.d.ts +0 -164
  1173. package/dist/never-index.d.ts +0 -3
  1174. package/dist/nightly-check.d.ts +0 -107
  1175. package/dist/nightly-github.d.ts +0 -318
  1176. package/dist/notification-delivery.d.ts +0 -19
  1177. package/dist/notification-rows.d.ts +0 -30
  1178. package/dist/oauth-run-token.d.ts +0 -51
  1179. package/dist/observations.d.ts +0 -36
  1180. package/dist/oidc.d.ts +0 -71
  1181. package/dist/onboard.d.ts +0 -108
  1182. package/dist/one-step-chat-schema.d.ts +0 -22
  1183. package/dist/openrouter-models.d.ts +0 -34
  1184. package/dist/operate-remote-arguments.d.ts +0 -36
  1185. package/dist/operate-remote.d.ts +0 -98
  1186. package/dist/operate.d.ts +0 -401
  1187. package/dist/orphan-sweep.d.ts +0 -65
  1188. package/dist/page-work-contract.d.ts +0 -21
  1189. package/dist/password-bearer.d.ts +0 -25
  1190. package/dist/passwordless.d.ts +0 -23
  1191. package/dist/peek-cli.d.ts +0 -112
  1192. package/dist/peek.d.ts +0 -110
  1193. package/dist/people-audit-ui.d.ts +0 -16
  1194. package/dist/person-proof.d.ts +0 -2
  1195. package/dist/phase-routing.d.ts +0 -401
  1196. package/dist/plain-schema.d.ts +0 -23
  1197. package/dist/plain-words.d.ts +0 -20
  1198. package/dist/plan-auto.d.ts +0 -25
  1199. package/dist/plan-login.d.ts +0 -14
  1200. package/dist/plan.d.ts +0 -188
  1201. package/dist/plane-review.d.ts +0 -54
  1202. package/dist/planner-source.d.ts +0 -225
  1203. package/dist/planner.d.ts +0 -76
  1204. package/dist/policy-ui.d.ts +0 -22
  1205. package/dist/policy.d.ts +0 -92
  1206. package/dist/prepared-evidence.d.ts +0 -17
  1207. package/dist/principal.d.ts +0 -42
  1208. package/dist/probe.d.ts +0 -46
  1209. package/dist/process-custody.d.ts +0 -17
  1210. package/dist/process-liveness.d.ts +0 -13
  1211. package/dist/process-tree.d.ts +0 -39
  1212. package/dist/project-access.d.ts +0 -17
  1213. package/dist/project-activity.d.ts +0 -20
  1214. package/dist/project-admission.d.ts +0 -105
  1215. package/dist/project-cli.d.ts +0 -19
  1216. package/dist/project-concurrency.d.ts +0 -62
  1217. package/dist/project-delete-ui.d.ts +0 -96
  1218. package/dist/project-delete.d.ts +0 -59
  1219. package/dist/project-demo.d.ts +0 -12
  1220. package/dist/project-file.d.ts +0 -3
  1221. package/dist/project-identity.d.ts +0 -52
  1222. package/dist/project-knowledge.d.ts +0 -124
  1223. package/dist/project-learning.d.ts +0 -120
  1224. package/dist/project-memory.d.ts +0 -70
  1225. package/dist/project-outcomes.d.ts +0 -119
  1226. package/dist/project-sandbox.d.ts +0 -59
  1227. package/dist/project-skills.d.ts +0 -139
  1228. package/dist/project-tools.d.ts +0 -318
  1229. package/dist/project.d.ts +0 -65
  1230. package/dist/prompt.d.ts +0 -33
  1231. package/dist/proof.d.ts +0 -457
  1232. package/dist/proposal.d.ts +0 -70
  1233. package/dist/protected-storage-look.d.ts +0 -1
  1234. package/dist/protected-storage.d.ts +0 -98
  1235. package/dist/provider-auth.d.ts +0 -143
  1236. package/dist/provider-capture.d.ts +0 -34
  1237. package/dist/provider-connection.d.ts +0 -23
  1238. package/dist/provider-home.d.ts +0 -22
  1239. package/dist/provider-limits.d.ts +0 -37
  1240. package/dist/provider.d.ts +0 -369
  1241. package/dist/public-access.d.ts +0 -61
  1242. package/dist/public-check.d.ts +0 -37
  1243. package/dist/publish.d.ts +0 -146
  1244. package/dist/pull-request-flow.d.ts +0 -189
  1245. package/dist/pull-request-schema.d.ts +0 -5
  1246. package/dist/pull-request-ui.d.ts +0 -25
  1247. package/dist/pulls.d.ts +0 -121
  1248. package/dist/push.d.ts +0 -120
  1249. package/dist/quality.d.ts +0 -8
  1250. package/dist/quick-start.d.ts +0 -26
  1251. package/dist/read-executor-worker.d.ts +0 -1
  1252. package/dist/read-executor.d.ts +0 -66
  1253. package/dist/read-only-request.d.ts +0 -4
  1254. package/dist/recipe-ui.d.ts +0 -21
  1255. package/dist/recipes.d.ts +0 -56
  1256. package/dist/release-adapters.d.ts +0 -205
  1257. package/dist/release-approval.d.ts +0 -180
  1258. package/dist/release-authority.d.ts +0 -173
  1259. package/dist/release-auto.d.ts +0 -184
  1260. package/dist/release-card.d.ts +0 -170
  1261. package/dist/release-carry.d.ts +0 -261
  1262. package/dist/release-ci-hold.d.ts +0 -41
  1263. package/dist/release-cli.d.ts +0 -34
  1264. package/dist/release-coverage.d.ts +0 -16
  1265. package/dist/release-gate.d.ts +0 -84
  1266. package/dist/release-git.d.ts +0 -43
  1267. package/dist/release-links.d.ts +0 -29
  1268. package/dist/release-net.d.ts +0 -90
  1269. package/dist/release-next.d.ts +0 -48
  1270. package/dist/release-recheck.d.ts +0 -146
  1271. package/dist/release-refusal.d.ts +0 -32
  1272. package/dist/release-view.d.ts +0 -37
  1273. package/dist/release.d.ts +0 -806
  1274. package/dist/releases.d.ts +0 -94
  1275. package/dist/remote-audit.d.ts +0 -79
  1276. package/dist/remote-command.d.ts +0 -45
  1277. package/dist/remote-destination.d.ts +0 -36
  1278. package/dist/remote-exec.d.ts +0 -38
  1279. package/dist/remote-main.d.ts +0 -111
  1280. package/dist/remote-run.d.ts +0 -20
  1281. package/dist/remote.d.ts +0 -67
  1282. package/dist/render.d.ts +0 -64
  1283. package/dist/reply-shape.d.ts +0 -106
  1284. package/dist/reply-voice.d.ts +0 -23
  1285. package/dist/report-summary.d.ts +0 -22
  1286. package/dist/reported-usage.d.ts +0 -69
  1287. package/dist/repos.d.ts +0 -67
  1288. package/dist/repository-context-ui.d.ts +0 -3
  1289. package/dist/repository-context.d.ts +0 -66
  1290. package/dist/request-budget-ui.d.ts +0 -14
  1291. package/dist/request-budget.d.ts +0 -127
  1292. package/dist/restart-certification.d.ts +0 -133
  1293. package/dist/result-actions.d.ts +0 -36
  1294. package/dist/result-acts.d.ts +0 -112
  1295. package/dist/result-completion.d.ts +0 -39
  1296. package/dist/result-evidence-readers.d.ts +0 -42
  1297. package/dist/result-follow-ups.d.ts +0 -118
  1298. package/dist/result-review.d.ts +0 -220
  1299. package/dist/result-shots.d.ts +0 -59
  1300. package/dist/retention-ui.d.ts +0 -21
  1301. package/dist/retention.d.ts +0 -77
  1302. package/dist/review-context.d.ts +0 -245
  1303. package/dist/review-evidence.d.ts +0 -33
  1304. package/dist/review-switch.d.ts +0 -36
  1305. package/dist/reviewer.d.ts +0 -99
  1306. package/dist/route-change-check.d.ts +0 -4
  1307. package/dist/route-change.d.ts +0 -22
  1308. package/dist/route-hooks.d.ts +0 -54
  1309. package/dist/route-results.d.ts +0 -75
  1310. package/dist/route-rules.d.ts +0 -324
  1311. package/dist/route-savings.d.ts +0 -136
  1312. package/dist/route-store.d.ts +0 -300
  1313. package/dist/run-closeout.d.ts +0 -89
  1314. package/dist/run-efficiency.d.ts +0 -74
  1315. package/dist/run-ending.d.ts +0 -21
  1316. package/dist/runner-process.d.ts +0 -76
  1317. package/dist/runner.d.ts +0 -324
  1318. package/dist/sample-project.d.ts +0 -31
  1319. package/dist/sandbox-launch.d.ts +0 -1
  1320. package/dist/sandbox-runtime.d.ts +0 -128
  1321. package/dist/scan.d.ts +0 -32
  1322. package/dist/scope.d.ts +0 -1098
  1323. package/dist/scout-browser-lock.d.ts +0 -69
  1324. package/dist/scout-browser.d.ts +0 -107
  1325. package/dist/scout-net.d.ts +0 -25
  1326. package/dist/scout-report.d.ts +0 -23
  1327. package/dist/scout.d.ts +0 -142
  1328. package/dist/secret-mint.d.ts +0 -1
  1329. package/dist/serve.d.ts +0 -11
  1330. package/dist/server/agents-computers.d.ts +0 -9
  1331. package/dist/server/agents-live-filed.d.ts +0 -17
  1332. package/dist/server/agents-live-lead.d.ts +0 -47
  1333. package/dist/server/agents-live-room.d.ts +0 -23
  1334. package/dist/server/chat.d.ts +0 -39
  1335. package/dist/server/chrome.d.ts +0 -328
  1336. package/dist/server/edge-refusal.d.ts +0 -7
  1337. package/dist/server/flows.d.ts +0 -8
  1338. package/dist/server/guards.d.ts +0 -81
  1339. package/dist/server/handler-context.d.ts +0 -22
  1340. package/dist/server/handler-registry.d.ts +0 -23
  1341. package/dist/server/home-asks.d.ts +0 -45
  1342. package/dist/server/home.d.ts +0 -65
  1343. package/dist/server/http.d.ts +0 -337
  1344. package/dist/server/in-place.d.ts +0 -15
  1345. package/dist/server/kit-standalone.d.ts +0 -22
  1346. package/dist/server/kit.d.ts +0 -452
  1347. package/dist/server/last-checks.d.ts +0 -17
  1348. package/dist/server/live.d.ts +0 -74
  1349. package/dist/server/merge-ready-view.d.ts +0 -10
  1350. package/dist/server/mutation-key.d.ts +0 -70
  1351. package/dist/server/pages-assets.d.ts +0 -11
  1352. package/dist/server/pages.d.ts +0 -8
  1353. package/dist/server/people-tokens.d.ts +0 -18
  1354. package/dist/server/remote-hooks.d.ts +0 -29
  1355. package/dist/server/remote.d.ts +0 -60
  1356. package/dist/server/render-chat.d.ts +0 -439
  1357. package/dist/server/render-code-map.d.ts +0 -30
  1358. package/dist/server/render-flaky.d.ts +0 -20
  1359. package/dist/server/render-follow-through.d.ts +0 -11
  1360. package/dist/server/render-history.d.ts +0 -51
  1361. package/dist/server/render-new-task.d.ts +0 -54
  1362. package/dist/server/render-pages.d.ts +0 -236
  1363. package/dist/server/render-people.d.ts +0 -102
  1364. package/dist/server/render-projects.d.ts +0 -104
  1365. package/dist/server/render-release.d.ts +0 -19
  1366. package/dist/server/render-results.d.ts +0 -758
  1367. package/dist/server/render-settings.d.ts +0 -93
  1368. package/dist/server/render-tasks.d.ts +0 -783
  1369. package/dist/server/request-context.d.ts +0 -78
  1370. package/dist/server/retired-routes.d.ts +0 -17
  1371. package/dist/server/route-policy.d.ts +0 -18
  1372. package/dist/server/route-table.d.ts +0 -114
  1373. package/dist/server/runtime.d.ts +0 -343
  1374. package/dist/server/session.d.ts +0 -192
  1375. package/dist/server/settings.d.ts +0 -76
  1376. package/dist/server/signup-gate.d.ts +0 -9
  1377. package/dist/server/sweeps.d.ts +0 -4
  1378. package/dist/server/task-views.d.ts +0 -98
  1379. package/dist/server/tasks.d.ts +0 -108
  1380. package/dist/server/terminals.d.ts +0 -31
  1381. package/dist/server/welcome.d.ts +0 -28
  1382. package/dist/server-telemetry.d.ts +0 -87
  1383. package/dist/settings-groups-ui.d.ts +0 -286
  1384. package/dist/settings-kit-script.d.ts +0 -21
  1385. package/dist/settings-kit.d.ts +0 -173
  1386. package/dist/settings-proofs.d.ts +0 -64
  1387. package/dist/setup-guide.d.ts +0 -39
  1388. package/dist/shared-deps.d.ts +0 -115
  1389. package/dist/sign-in-guard.d.ts +0 -70
  1390. package/dist/skills-ui.d.ts +0 -12
  1391. package/dist/skills.d.ts +0 -99
  1392. package/dist/slack-api.d.ts +0 -59
  1393. package/dist/slack-chat.d.ts +0 -37
  1394. package/dist/slack-settings.d.ts +0 -4
  1395. package/dist/slack-socket.d.ts +0 -12
  1396. package/dist/slack.d.ts +0 -6
  1397. package/dist/sleep.d.ts +0 -2
  1398. package/dist/source-key.d.ts +0 -2
  1399. package/dist/spend-report.d.ts +0 -87
  1400. package/dist/spend-ui.d.ts +0 -80
  1401. package/dist/spend.d.ts +0 -142
  1402. package/dist/sqlite-runtime.d.ts +0 -3
  1403. package/dist/sqlite-telemetry.d.ts +0 -9
  1404. package/dist/sso-settings.d.ts +0 -33
  1405. package/dist/sso-ui.d.ts +0 -26
  1406. package/dist/staged-runtimes.d.ts +0 -54
  1407. package/dist/steer-capabilities.d.ts +0 -32
  1408. package/dist/steer-controls.d.ts +0 -14
  1409. package/dist/steer-live.d.ts +0 -19
  1410. package/dist/steer-mailbox.d.ts +0 -46
  1411. package/dist/steer-status.d.ts +0 -25
  1412. package/dist/stop-proof.d.ts +0 -67
  1413. package/dist/storage-sweep-child.d.ts +0 -1
  1414. package/dist/storage-sweep-process.d.ts +0 -55
  1415. package/dist/storage-sweep-schedule.d.ts +0 -30
  1416. package/dist/storage-sweep.d.ts +0 -77
  1417. package/dist/storage-ui.d.ts +0 -23
  1418. package/dist/storage.d.ts +0 -68
  1419. package/dist/store-baseline.d.ts +0 -19
  1420. package/dist/store.d.ts +0 -8613
  1421. package/dist/stream-scope.d.ts +0 -18
  1422. package/dist/structured-output.d.ts +0 -57
  1423. package/dist/style-asset.d.ts +0 -7
  1424. package/dist/subagent-admin.d.ts +0 -53
  1425. package/dist/subagent-desk.d.ts +0 -59
  1426. package/dist/subagent-memory.d.ts +0 -65
  1427. package/dist/subagent-question.d.ts +0 -59
  1428. package/dist/subagent-tools.d.ts +0 -125
  1429. package/dist/subagent-week.d.ts +0 -68
  1430. package/dist/subagent-work.d.ts +0 -76
  1431. package/dist/subagents-ui.d.ts +0 -22
  1432. package/dist/subagents.d.ts +0 -146
  1433. package/dist/subscription-chat.d.ts +0 -54
  1434. package/dist/summary.d.ts +0 -33
  1435. package/dist/surface.d.ts +0 -49
  1436. package/dist/sweep-gate.d.ts +0 -10
  1437. package/dist/sweep-quarantine.d.ts +0 -29
  1438. package/dist/sync.d.ts +0 -94
  1439. package/dist/tailnet.d.ts +0 -11
  1440. package/dist/tamper-scan.d.ts +0 -4
  1441. package/dist/task-activity.d.ts +0 -27
  1442. package/dist/task-aliases.d.ts +0 -5
  1443. package/dist/task-archive.d.ts +0 -13
  1444. package/dist/task-base.d.ts +0 -39
  1445. package/dist/task-composer.d.ts +0 -14
  1446. package/dist/task-control.d.ts +0 -159
  1447. package/dist/task-live.d.ts +0 -8
  1448. package/dist/task-moves.d.ts +0 -90
  1449. package/dist/task-outcome-cli.d.ts +0 -48
  1450. package/dist/task-review-brief.d.ts +0 -69
  1451. package/dist/task-sizing.d.ts +0 -58
  1452. package/dist/task-source.d.ts +0 -77
  1453. package/dist/task-status.d.ts +0 -324
  1454. package/dist/task-text.d.ts +0 -31
  1455. package/dist/team-chat-authorization.d.ts +0 -11
  1456. package/dist/team-contract.d.ts +0 -103
  1457. package/dist/team-http.d.ts +0 -25
  1458. package/dist/team-leads.d.ts +0 -85
  1459. package/dist/team-runtime.d.ts +0 -25
  1460. package/dist/team-ui.d.ts +0 -4
  1461. package/dist/team-updates.d.ts +0 -8
  1462. package/dist/teams-api.d.ts +0 -33
  1463. package/dist/teams-chat.d.ts +0 -36
  1464. package/dist/teams-settings.d.ts +0 -14
  1465. package/dist/teams.d.ts +0 -24
  1466. package/dist/teardown-git.d.ts +0 -164
  1467. package/dist/telegram-flow.d.ts +0 -112
  1468. package/dist/telegram-lead.d.ts +0 -151
  1469. package/dist/telegram-live.d.ts +0 -116
  1470. package/dist/telegram-progress.d.ts +0 -20
  1471. package/dist/telegram-settings.d.ts +0 -9
  1472. package/dist/telegram-status.d.ts +0 -83
  1473. package/dist/telegram-team.d.ts +0 -68
  1474. package/dist/telegram.d.ts +0 -271
  1475. package/dist/templates.d.ts +0 -69
  1476. package/dist/terminal-catalog.d.ts +0 -11
  1477. package/dist/terminal-text.d.ts +0 -11
  1478. package/dist/test-infra.d.ts +0 -34
  1479. package/dist/test-temp.d.ts +0 -40
  1480. package/dist/text-limits.d.ts +0 -297
  1481. package/dist/tidy.d.ts +0 -130
  1482. package/dist/tier-report.d.ts +0 -44
  1483. package/dist/token-notices.d.ts +0 -11
  1484. package/dist/tokens-cli.d.ts +0 -21
  1485. package/dist/tool-broker.d.ts +0 -52
  1486. package/dist/tool-launcher.d.ts +0 -1
  1487. package/dist/tool-secret-store.d.ts +0 -167
  1488. package/dist/toolroll-update-cli.d.ts +0 -15
  1489. package/dist/toolroll-update-ui.d.ts +0 -47
  1490. package/dist/toolroll-update.d.ts +0 -265
  1491. package/dist/tools-ui.d.ts +0 -51
  1492. package/dist/transitions-recipes.d.ts +0 -1
  1493. package/dist/tree-proof.d.ts +0 -34
  1494. package/dist/tui-contract.d.ts +0 -202
  1495. package/dist/tui-source.d.ts +0 -14
  1496. package/dist/typed-start.d.ts +0 -51
  1497. package/dist/unfenced-test-support.d.ts +0 -2
  1498. package/dist/up-processes.d.ts +0 -162
  1499. package/dist/up-role-child.d.ts +0 -1
  1500. package/dist/update-notice.d.ts +0 -5
  1501. package/dist/vanished-retry.d.ts +0 -30
  1502. package/dist/verification-evidence.d.ts +0 -68
  1503. package/dist/version.d.ts +0 -2
  1504. package/dist/wake-hub.d.ts +0 -72
  1505. package/dist/webhook-limits.d.ts +0 -23
  1506. package/dist/webhook-readers.d.ts +0 -56
  1507. package/dist/webhook-signing.d.ts +0 -27
  1508. package/dist/webhooks.d.ts +0 -84
  1509. package/dist/welcome-facts.d.ts +0 -18
  1510. package/dist/when-html.d.ts +0 -40
  1511. package/dist/work-index.d.ts +0 -175
  1512. package/dist/work-summary.d.ts +0 -61
  1513. package/dist/workspace-motion.d.ts +0 -4
  1514. package/dist/workspace-revision.d.ts +0 -48
  1515. package/dist/workspace-ui.d.ts +0 -385
  1516. package/dist/worktree-notices.d.ts +0 -13
  1517. package/dist/worktree.d.ts +0 -365
  1518. package/dist/writes-mode.d.ts +0 -9
  1519. package/dist/youiyoux-intake.d.ts +0 -234
@@ -1,26 +1,3 @@
1
- /**
2
- * The agent fence: what no build, plan, scout or repair agent may read or write, whatever its permission mode. Agents
3
- * run as the operator's own OS user, so without it an agent could read the approver's remembered login
4
- * (`up-login.txt`), runner and coordinator tokens, provider keys, project tool secrets, other runs' evidence, or the
5
- * live database — and use them to approve its own work. The fence closes that at the operating system, not in the
6
- * model's instructions.
7
- *
8
- * The sandbox itself is Anthropic's sandbox-runtime (sandbox-runtime.ts): every macOS Seatbelt profile and every Linux
9
- * bubblewrap + seccomp invocation is generated by its code, with its baseline, its mandatory write denies (shell
10
- * profiles, .git/hooks, .vscode, .mcp.json and the rest) and its limits. This module decides only the few static rules
11
- * Toolroll passes it (srtTermsOf): Toolroll's own state and database denied to read and write; the build's own
12
- * checkout writable; other tasks' checkouts read, never written; the project's read-deny list; under policy v1 (an
13
- * approval sealed before 0.9.70) the home configuration denied by name; a sign-ins check's exact files read again; the
14
- * run's proxy as its only way out when its network is confined. On macOS every launch also gets a pseudo-terminal of its
15
- * own and no other terminal, a project check's launch Chromium's own service, and only a build's agent the keychain
16
- * (sandbox-runtime.ts seatbeltRulesFor, static rules).
17
- *
18
- * Codex (every platform) fences its own agent's commands with its own sandbox: a permission profile with the same
19
- * denies (codexFenceArgv). Claude also gets Read/Edit deny rules for its own file tools.
20
- *
21
- * A build's fence also holds its task boundary (`taskBoundary`): under v1 the home configuration and the repositories
22
- * beside its own; under v2 only the primary checkout write-denied.
23
- */
24
1
  import { INSTANCE_DIR } from "./console-instance.js";
25
2
  import { ACP_AGENTS, ACP_PROVIDER_IDS } from "./acp-agents.js";
26
3
  import { spawnSync } from "node:child_process";
@@ -39,7 +16,6 @@ import { SEATBELT_PROBE, sandboxRuntimeProblem, srtSpawn } from "./sandbox-runti
39
16
  import { protectedStorageDenies, protectedStorageNames } from "./protected-storage.js";
40
17
  import { ensureSecretsDir, legacyLoginFileOf, SECRETS_DIR, secretsDirOf } from "./login-secrets.js";
41
18
  import { getDefaultWritePaths } from "@anthropic-ai/sandbox-runtime";
42
- /** Names that are secrets wherever the database lives (used when its folder is shared with other things). */
43
19
  const SENSITIVE_NAME = /(^up-login\.txt$|token|secret|login|password|credential|vapid|keys?\b|\.pem$|\.key$|^backups$|^evidence$|^remote$|^sign-in\.json$|^monitoring\.json$)/i;
44
20
  function real(path) {
45
21
  try {
@@ -55,7 +31,6 @@ function inside(child, parent) {
55
31
  }
56
32
  export class CheckoutBindingError extends Error {
57
33
  }
58
- /** One small file read only as the regular file it is: never through a link, never blocking on a FIFO; null otherwise. */
59
34
  function regularText(path) {
60
35
  let fd = null;
61
36
  try {
@@ -82,8 +57,6 @@ export function trustedWorktreeBinding(repository, worktree, poolRoots = []) {
82
57
  const fail = () => new CheckoutBindingError("The checkout's Git pointer was changed or its trusted binding could not be verified.");
83
58
  const registry = join(main, ".git", "worktrees");
84
59
  try {
85
- // The registry may legitimately contain the destination of an attacker link.
86
- // Check the recorded name before accepting that destination as this run's checkout.
87
60
  if (realpathSync(worktree) !== join(realpathSync(dirname(worktree)), basename(worktree)))
88
61
  throw fail();
89
62
  for (const root of poolRoots) {
@@ -92,8 +65,6 @@ export function trustedWorktreeBinding(repository, worktree, poolRoots = []) {
92
65
  const components = [];
93
66
  for (let component = resolve(worktree); component !== dirname(component); component = dirname(component)) {
94
67
  components.push(component);
95
- // Permit system aliases above the trusted pool (e.g. /var -> /private/var),
96
- // but no redirect at or below it, including older checkout names.
97
68
  if (real(component) !== real(root) && component !== resolve(root))
98
69
  continue;
99
70
  for (const one of components)
@@ -104,10 +75,6 @@ export function trustedWorktreeBinding(repository, worktree, poolRoots = []) {
104
75
  }
105
76
  if (!lstatSync(join(main, ".git")).isDirectory() || !lstatSync(registry).isDirectory())
106
77
  throw fail();
107
- // The trusted checkout's own worktree registry, never the candidate's configurable Git pointer — read as files, with
108
- // no git at all (eval-harness review 2, finding 6): the repository's config is shared with every build, so an
109
- // include naming a FIFO could hold a git read (and dispatch) up; a FIFO or link planted as a registry file is never
110
- // opened as one (regularText).
111
78
  for (const entry of readdirSync(registry)) {
112
79
  const path = join(registry, entry);
113
80
  if (!lstatSync(path).isDirectory() || !inside(real(path), real(registry)))
@@ -127,33 +94,16 @@ export function trustedWorktreeBinding(repository, worktree, poolRoots = []) {
127
94
  }
128
95
  throw fail();
129
96
  }
130
- /**
131
- * Every path an agent must not reach: the Toolroll state folder
132
- * beside the database (all of it, except the folder that holds this run's
133
- * own worktree), the database itself with its journal files, and
134
- * `~/.toolroll` or an older `~/.standing-orders` (provider keys and project tool secrets). When the
135
- * database sits anywhere else (a shared folder), only the database and
136
- * secret-looking entries there are fenced.
137
- */
138
97
  export function agentFence(options) {
139
98
  const fence = new Set();
140
- /** The console's run folder: kept by its own pathname through canonicalization (and its target's too). */
141
99
  let runFolder = null;
142
100
  const home = real(options.home ?? homedir());
143
101
  const worktree = options.worktree === null ? null : real(options.worktree);
144
102
  if (options.databaseFile !== null && options.databaseFile !== "" && options.databaseFile !== ":memory:") {
145
103
  const database = real(options.databaseFile);
146
104
  const state = dirname(database);
147
- // By name, there or not (a journal made later is denied too wherever a fence denies by name: Seatbelt and Codex).
148
105
  for (const suffix of ["", "-wal", "-shm", "-journal"])
149
106
  fence.add(database + suffix);
150
- // The console's run folder (its discovery sockets, console-instance.ts) beside the database, wherever that is: no
151
- // build may add, rename or remove anything in it while a console listens there. It is made (owner-only) before any
152
- // build starts if it isn't there yet, so a build can never be the one to create it — and the fence always has a
153
- // Whatever is at that path is fenced, always — a folder, a file, a link (the path itself, never only where a link
154
- // points), a folder holding anything at all — so no build can replace it; when nothing is there it is made first.
155
- // If it can't be made, the path is fenced anyway: a sandbox that can't cover a missing path refuses to launch
156
- // rather than run unfenced. The name is Toolroll's own; nothing else belongs there.
157
107
  runFolder = join(state, INSTANCE_DIR);
158
108
  const present = () => { try {
159
109
  lstatSync(runFolder);
@@ -166,48 +116,34 @@ export function agentFence(options) {
166
116
  try {
167
117
  mkdirSync(runFolder, { mode: 0o700 });
168
118
  }
169
- catch { /* fenced below either way */ }
119
+ catch { }
170
120
  }
171
121
  fence.add(runFolder);
172
122
  const runnerFolder = join(state, RUNNER_PROCESS_DIR);
173
123
  try {
174
124
  ensureRunnerProcessFolder(runnerFolder);
175
125
  }
176
- catch { /* both the name and its target stay denied */ }
126
+ catch { }
177
127
  fence.add(runnerFolder);
178
128
  fence.add(real(runnerFolder));
179
- // A copy may first appear after launch. Fence its permanent namespace even when empty.
180
129
  const backups = join(state, "backups");
181
130
  try {
182
131
  mkdirSync(backups, { mode: 0o700 });
183
132
  }
184
- catch { /* name and target remain denied */ }
133
+ catch { }
185
134
  fence.add(backups);
186
135
  fence.add(real(backups));
187
- // Saved credentials (the remembered login, login-secrets.ts) live in a reserved owner-only folder, made here before
188
- // any launch and denied whole, so one first written after this launch is behind this fence too: a listing can't
189
- // name a file that isn't there yet, and bubblewrap can't deny one. If it can't be made or proven, its name is
190
- // denied anyway (and nothing is saved there).
191
136
  const secrets = secretsDirOf(state);
192
137
  try {
193
138
  ensureSecretsDir(state);
194
139
  }
195
- catch { /* name and target remain denied */ }
140
+ catch { }
196
141
  fence.add(secrets);
197
142
  fence.add(real(secrets));
198
- // An older version's login beside the database: listed below when it is there; by name, there or not, where the
199
- // sandbox denies a missing path without making it (Seatbelt; Codex's profile gets the same list). On Linux a
200
- // missing path would be stubbed into being for the launch, and nothing writes that name any more.
201
143
  const legacyLogin = legacyLoginFileOf(state);
202
144
  if (process.platform === "darwin" || existsSync(legacyLogin))
203
145
  fence.add(legacyLogin);
204
- // Only a folder that is Toolroll's own (~/.config/toolroll or an older name,
205
- // the desktop app's "Toolroll") is fenced whole: a database kept
206
- // in a shared folder (a projects folder, a test's temp folder) must not
207
- // fence its neighbours, the repositories agents build among them.
208
146
  const dedicated = state !== home && state !== sep && !existsSync(join(state, ".git")) && /standing[\s_-]?orders|toolroll|nightorders/i.test(basename(state));
209
- // The entries this run's worktree needs stay reachable: the one it lives
210
- // under, and the repository its git metadata belongs to.
211
147
  const keep = new Set();
212
148
  for (const needed of [worktree, options.binding?.main ?? null]) {
213
149
  if (needed !== null && inside(needed, state))
@@ -221,23 +157,19 @@ export function agentFence(options) {
221
157
  entries = [];
222
158
  }
223
159
  for (const entry of entries) {
224
- // A repository is work, never a secret.
225
160
  if (keep.has(entry) || existsSync(join(state, entry, ".git")))
226
161
  continue;
227
162
  if (dedicated || SENSITIVE_NAME.test(entry))
228
163
  fence.add(join(state, entry));
229
164
  }
230
165
  }
231
- // The plane's private views of repositories for its own git (git-views.ts): made first, so no build is the one to
232
- // create them, and denied by name whether or not that worked (a sandbox that can't cover the path refuses to launch).
233
166
  try {
234
167
  ensureGitViewsRoot(home);
235
168
  }
236
- catch { /* fenced by name below either way */ }
169
+ catch { }
237
170
  fence.add(gitViewsRoot(home));
238
171
  for (const secrets of existingFolders(home, { dot: true }))
239
172
  fence.add(secrets);
240
- // v104: the folder the audit stream writes to holds the whole instance's history.
241
173
  if (options.databaseFile !== null && options.databaseFile !== "" && options.databaseFile !== ":memory:") {
242
174
  const stream = readMonitoring(dirname(real(options.databaseFile))).folder?.path;
243
175
  if (stream !== undefined)
@@ -245,12 +177,9 @@ export function agentFence(options) {
245
177
  }
246
178
  for (const path of options.extra ?? [])
247
179
  fence.add(real(path));
248
- // Secret, state, database, explicit-extra and home-config denies are never exemptible.
249
180
  for (const path of options.boundary?.protectedShell ?? [])
250
181
  fence.add(real(path));
251
182
  const protectedPaths = new Set([...fence].flatMap(path => path === runFolder || [RUNNER_PROCESS_DIR, "backups", SECRETS_DIR].includes(basename(path)) ? [path, real(path)] : [real(path)]));
252
- // Protected storage (chat apps, browser profiles, password managers): every launch, every policy, never exemptible,
253
- // kept by the name it was resolved under as well as where it leads.
254
183
  const storage = options.protectedStorage ?? protectedStorageDenies(home);
255
184
  for (const path of storage) {
256
185
  protectedPaths.add(path);
@@ -267,34 +196,15 @@ export function agentFence(options) {
267
196
  return false;
268
197
  }).sort();
269
198
  }
270
- /**
271
- * Credentials and agent configuration in the home folder. A build is the
272
- * operator's own OS user, so without this it could read their SSH keys,
273
- * cloud logins or another agent's sign-in, or rewrite their own Claude or
274
- * Codex setup for the next interactive session.
275
- */
276
199
  const HOME_CONFIGURATION = [
277
200
  ".claude", ".claude.json", ".codex", ".gemini", ".ssh", ".aws", ".gnupg", ".netrc", ".git-credentials", ".kube", join(".config", "gh"), join(".docker", "config.json"),
278
- // Every ACP agent's own configuration and sign-in (acp-agents.ts): fenced from every build but that agent's own.
279
201
  ...ACP_PROVIDER_IDS.flatMap(id => ACP_AGENTS[id].home),
280
202
  ];
281
- /** What a provider's own CLI reads to sign in and keep its sessions. The OS fence around Claude and Gemini holds
282
- * their whole process, so those stay reachable there; Codex fences only its agent's commands, so it keeps none. */
283
203
  const PROVIDER_HOME = {
284
204
  claude: [".claude", ".claude.json"], gemini: [".gemini"], codex: [], openrouter: [],
285
- // Each ACP agent keeps its own configuration and sign-in where its row says (acp-agents.ts).
286
205
  ...Object.fromEntries(ACP_PROVIDER_IDS.map(id => [id, ACP_AGENTS[id].home])),
287
206
  };
288
- /** What Claude's own file tools refuse inside its home: the CLI reads these itself, its model never needs to. */
289
207
  const CLAUDE_FILE_TOOL_HOME = [".claude.json", join(".claude", ".credentials.json"), join(".claude", "settings.json"), join(".claude", "settings.local.json"), ".npmrc"];
290
- /**
291
- * Everything outside a task's own folders that a build could otherwise
292
- * reach: the home configuration above, the other repositories beside its
293
- * project (and other tasks' worktrees beside its own), and the project's
294
- * primary checkout — all but its `.git`, which the worktree's git needs.
295
- * The task's worktree, the files Toolroll makes for the run (in the
296
- * system temp folder) and everything else stay as they are.
297
- */
298
208
  export function taskBoundary(options) {
299
209
  const home = real(options.home ?? homedir());
300
210
  const worktree = real(options.worktree);
@@ -303,9 +213,6 @@ export function taskBoundary(options) {
303
213
  const needed = [worktree, main, gitdir].filter((path) => path !== null);
304
214
  const own = new Set(PROVIDER_HOME[options.provider] ?? []);
305
215
  const present = (names) => names.map(name => join(home, name)).filter(path => existsSync(path)).map(real);
306
- // Policy v2 (docs/plans/sandbox-parity.md §1.2): the home folder, the repositories beside this one and the project's
307
- // primary checkout are read as Anthropic's sandbox runtime reads them; only writes to the primary checkout stay denied.
308
- // Protected storage by name, under both policies (protected-storage.ts): never part of the v1-only home configuration.
309
216
  const storage = options.storage?.names ?? protectedStorageNames(home);
310
217
  if ((options.policy ?? 1) === 2)
311
218
  return v2Boundary(worktree, main, gitdir, storage);
@@ -313,8 +220,6 @@ export function taskBoundary(options) {
313
220
  const protectedShell = [...shell, ...storage];
314
221
  const repository = (path) => existsSync(join(path, ".git"));
315
222
  for (const parent of new Set([dirname(worktree), ...(main === null ? [] : [dirname(main)])])) {
316
- // Home contains toolchain clones such as .nvm and .oh-my-zsh. The
317
- // explicit configuration fence above owns home, not repository discovery.
318
223
  if (real(parent) === home)
319
224
  continue;
320
225
  let entries = [];
@@ -352,14 +257,9 @@ export function taskBoundary(options) {
352
257
  }
353
258
  const { readOnly, lookup } = siblingGitData(main, gitdir);
354
259
  const fileTools = options.provider === "claude" ? present(CLAUDE_FILE_TOOL_HOME).filter(path => !shell.has(path)) : [];
355
- // By name too, present or not: a build started while ~/.codex is absent must never make it (and later swap it for a
356
- // link while a sign-ins check reads through it). The sandbox runtime takes them as read and write denies by name.
357
260
  const homeNames = HOME_CONFIGURATION.filter(name => !own.has(name)).map(name => join(home, name)).sort();
358
261
  return { protectedShell, shell: [...shell].sort(), fileTools: fileTools.sort(), readOnly: [...readOnly].sort(), lookup: [...lookup].sort(), homeNames };
359
262
  }
360
- /** A v2 boundary: nothing of the home folder, the repositories beside this one or the primary checkout is denied to
361
- * read; the primary checkout (all but its `.git`, which this worktree's Git needs) is never written; other tasks' Git
362
- * metadata is read, never written, as under v1. */
363
263
  function v2Boundary(worktree, main, gitdir, storage) {
364
264
  const noWrite = new Set();
365
265
  if (main !== null && main !== worktree) {
@@ -381,11 +281,6 @@ function v2Boundary(worktree, main, gitdir, storage) {
381
281
  readOnly.add(path);
382
282
  return { protectedShell: [...storage], shell: [], fileTools: [], readOnly: [...readOnly].sort(), lookup: [...lookup].sort(), homeNames: [] };
383
283
  }
384
- /**
385
- * Git needs this worktree's metadata and the shared objects/refs, but must not prune or rewrite the metadata of another
386
- * task's checkout. It still reads that metadata (gc keeps what a sibling's HEAD and index reach) and looks up the
387
- * checkout it names: a checkout it can't see is one `git worktree prune` deletes the entry of.
388
- */
389
284
  function siblingGitData(main, gitdir) {
390
285
  const readOnly = new Set();
391
286
  const lookup = new Set();
@@ -399,8 +294,6 @@ function siblingGitData(main, gitdir) {
399
294
  entries = [];
400
295
  }
401
296
  for (const entry of entries) {
402
- // Only a plain folder, by the name git gave it: a link a build planted here (to ~/.toolroll, say) is never
403
- // followed into a grant, which a sandbox that lets the more specific path win would honour over the fence.
404
297
  const path = join(siblings, entry);
405
298
  if (path === gitdir)
406
299
  continue;
@@ -422,8 +315,6 @@ function siblingGitData(main, gitdir) {
422
315
  if (pointer === undefined || pointer === "" || !isAbsolute(pointer))
423
316
  continue;
424
317
  const checkout = dirname(real(pointer));
425
- // The entry's pointer is build-writable: look up only a checkout whose own .git names this entry back, as git
426
- // links a real one, so a planted pointer can't lift a fenced path's metadata.
427
318
  if (worktreeGitDir(checkout) !== path)
428
319
  continue;
429
320
  lookup.add(checkout);
@@ -432,21 +323,13 @@ function siblingGitData(main, gitdir) {
432
323
  }
433
324
  return { readOnly, lookup };
434
325
  }
435
- /** The prefixes of every launch's private folders: its tools' config and a Codex build's own home (and a check's). */
436
326
  export const RUN_FOLDER_PREFIXES = ["so-tools-", "so-codex-", "so-net-", "so-cmd-"];
437
327
  export function runFolders(own, root) {
438
- // The system's own roots (not one a caller names): on a Mac, checks' launch folders are under the short one too.
439
328
  const also = root === undefined && process.platform === "darwin" && existsSync(CHECK_LAUNCH_ROOT_MACOS) ? [CHECK_LAUNCH_ROOT_MACOS] : [];
440
329
  return { root: real(root ?? tmpdir()), own: own === null ? null : real(own), ...(also.length === 0 ? {} : { also }) };
441
330
  }
442
- /** Where a check's launch folder is made on a Mac: a short shared folder, so its TMPDIR leaves room for a unix socket
443
- * path (about 104 bytes). */
444
331
  export const CHECK_LAUNCH_ROOT_MACOS = "/private/tmp";
445
- /** The folder a check's launch folder is made in: on a Mac the short one, elsewhere the system temp folder. */
446
332
  export const checkLaunchRoot = () => process.platform === "darwin" && existsSync(CHECK_LAUNCH_ROOT_MACOS) ? CHECK_LAUNCH_ROOT_MACOS : tmpdir();
447
- /** Every other launch's private folder in the system temp folder now, each only as the real folder it is (a link planted
448
- * there is never followed, nor fenced in its target's place) and this user's own. A shared root (`also`, /private/tmp on
449
- * a Mac) is never listed: anyone may plant entries there, so it is fenced by name pattern alone. */
450
333
  function otherRunFolders(folders) {
451
334
  let entries = [];
452
335
  try {
@@ -468,33 +351,23 @@ function otherRunFolders(folders) {
468
351
  }
469
352
  });
470
353
  }
471
- /** Every root launch folders are made under (the system temp folder, and on a Mac the short shared one). */
472
354
  export const runRoots = (folders) => [folders.root, ...(folders.also ?? [])];
473
355
  export { isWritesMode, WRITES_DEFAULT } from "./writes-mode.js";
474
- /** Claude's transcript folder for a working folder: its path with every character but a letter or digit made `-`
475
- * (Claude Code's own naming; a name over 200 characters gets a suffix, so it is granted by prefix). */
476
356
  export function claudeProjectFolder(home, cwd) {
477
357
  const slug = cwd.replace(/[^a-zA-Z0-9]/g, "-");
478
358
  return slug.length > 200 ? { path: join(home, ".claude", "projects", slug.slice(0, 200)), byPrefix: true } : { path: join(home, ".claude", "projects", slug), byPrefix: false };
479
359
  }
480
- /**
481
- * A folder a write grant may name: made when absent, then only as the real folder it is — never a link, nor reached
482
- * through one (its real path is its parent's real path and its own name). A build can rewrite what it may write, so a
483
- * folder it was given could otherwise come back as a link to anywhere and be granted, followed, on its next launch.
484
- * Null when it isn't such a folder: nothing is granted, and the write it was for fails.
485
- */
486
360
  export function grantFolder(path, create = true) {
487
361
  if (create) {
488
362
  try {
489
363
  mkdirSync(path, { recursive: true, mode: 0o700 });
490
364
  }
491
- catch { /* checked below */ }
365
+ catch { }
492
366
  }
493
367
  try {
494
368
  const held = lstatSync(path);
495
369
  if (held.isSymbolicLink() || !held.isDirectory())
496
370
  return null;
497
- // Nor through a link of this user's anywhere above it (a system alias, /var → /private/var, is root's and fine).
498
371
  const uid = process.getuid?.();
499
372
  for (let folder = dirname(resolve(path)); folder !== dirname(folder); folder = dirname(folder)) {
500
373
  const above = lstatSync(folder);
@@ -508,42 +381,23 @@ export function grantFolder(path, create = true) {
508
381
  return null;
509
382
  }
510
383
  }
511
- /**
512
- * The data folders an ACP agent writes besides a ~/.local/share|state root, per agent, only where known: Goose's
513
- * sessions and state; Qwen Code (a Gemini CLI fork) its history and temp, as Gemini measured. An agent not listed
514
- * (Cursor, Cline: their settings sit among their data) writes nothing of its own under a workspace build until its
515
- * layout is measured; a project using one chooses `anywhere`.
516
- */
517
384
  const ACP_DATA = {
518
385
  goose: [".local/share/goose", ".local/state/goose"],
519
386
  qwen: [".qwen/tmp", ".qwen/history"],
520
387
  };
521
- /** The suffix Claude Code gives a transcript folder whose name it shortened: `-` and a hash, nothing else. */
522
388
  const CLAUDE_SHORTENED = "-[a-z0-9]+(/|$)";
523
- /** A file and the temporary names it is replaced through (`name.tmp-1`, `name.json.12345`), never a folder below it. */
524
389
  const ATOMIC_NAMES = "([.~][^/]*)?$";
525
- /** The parts of a repository's shared Git data a commit in a worktree writes: objects, refs and their logs (and the
526
- * packed refs). Its config, hooks, info, other worktrees' data and submodules' are never among them. */
527
390
  function commitGitData(common) {
528
391
  const made = (path) => { try {
529
392
  mkdirSync(path, { recursive: true });
530
393
  }
531
- catch { /* granted as named */ } return real(path); };
394
+ catch { } return real(path); };
532
395
  return {
533
396
  subpaths: ["objects", "refs", "logs"].map(name => grantFolder(join(common, name))).filter((path) => path !== null),
534
397
  prefixes: [{ path: join(common, "packed-refs"), suffix: ATOMIC_NAMES }],
535
- // Alternates there would let objects come from anywhere.
536
398
  readOnly: [made(join(common, "objects", "info"))],
537
399
  };
538
400
  }
539
- /**
540
- * What a `workspace` build writes and what it loses (arc 2): its checkout, its checkout's Git data (less the shared
541
- * repository's config, hooks and info, which Git runs or reads as commands), its own launch folder (its temp is there),
542
- * its project's cache folder, the terminal devices, and only the provider state its CLI must write (measured: Claude's
543
- * transcript folder for this checkout; Gemini's history, temp and project list; an ACP agent's own folders). The
544
- * folders named here are made first, so the provider never has to make them where it can't. `deny` is what this
545
- * provider must not even read (Claude's live sessions' keys).
546
- */
547
401
  export function writeAllowlist(options) {
548
402
  const home = real(options.home);
549
403
  const worktree = real(options.worktree);
@@ -554,15 +408,13 @@ export function writeAllowlist(options) {
554
408
  const made = (path) => { try {
555
409
  mkdirSync(path, { recursive: true, mode: 0o700 });
556
410
  }
557
- catch { /* granted as named either way */ } return real(path); };
411
+ catch { } return real(path); };
558
412
  const grant = (path, create = true) => { const at = grantFolder(path, create); if (at !== null)
559
413
  subpaths.add(at); };
560
414
  if (options.binding !== null) {
561
415
  const common = real(join(options.binding.main, ".git"));
562
416
  const gitdir = real(options.binding.gitdir);
563
417
  grant(gitdir, false);
564
- // The shared Git data a commit writes, and nothing Git reads as commands or settings: the shared config (filters,
565
- // hooks path, fsmonitor), hooks, info (attributes, excludes), other worktrees' data and submodules' stay as they are.
566
418
  const data = commitGitData(common);
567
419
  for (const path of data.subpaths)
568
420
  subpaths.add(path);
@@ -570,13 +422,12 @@ export function writeAllowlist(options) {
570
422
  prefixes.set(`${one.path}\0${one.suffix}`, one);
571
423
  for (const path of data.readOnly)
572
424
  readOnly.add(path);
573
- // This worktree's own settings file, present (empty) so it is held read-only everywhere, a bind included.
574
425
  const own = join(gitdir, "config.worktree");
575
426
  try {
576
427
  if (!existsSync(own))
577
428
  writeFileSync(own, "", { mode: 0o644, flag: "wx" });
578
429
  }
579
- catch { /* held read-only by name */ }
430
+ catch { }
580
431
  readOnly.add(own);
581
432
  }
582
433
  if (options.launchFolder !== null)
@@ -599,8 +450,6 @@ export function writeAllowlist(options) {
599
450
  prefixes.set("gemini", { path: join(home, ".gemini", "projects.json"), suffix: ATOMIC_NAMES });
600
451
  }
601
452
  else if (Object.hasOwn(ACP_AGENTS, options.provider)) {
602
- // An ACP agent's configuration stays read-only whole (its MCP servers, hooks, plugins, agents and commands could
603
- // otherwise be planted for the operator's next session of it); only its known data folders are written (ACP_DATA).
604
453
  for (const name of ACP_AGENTS[options.provider].home)
605
454
  if (/^\.local\/(share|state)\//.test(name))
606
455
  grant(join(home, name));
@@ -609,13 +458,10 @@ export function writeAllowlist(options) {
609
458
  }
610
459
  return { writes: { subpaths: [...subpaths].sort(), prefixes: [...prefixes.values()].sort((a, b) => a.path.localeCompare(b.path)) }, readOnly: [...readOnly].sort(), deny: [...deny].sort() };
611
460
  }
612
- /** Where a project's builds keep their package caches: one folder per project (one trust domain), never used by the
613
- * plane's own tools, below the user's cache folder. */
614
461
  export function buildCacheFolder(repo, home = homedir(), platform = process.platform, env = process.env) {
615
462
  const root = platform === "darwin" ? join(home, "Library", "Caches") : env["XDG_CACHE_HOME"] !== undefined && isAbsolute(env["XDG_CACHE_HOME"]) ? env["XDG_CACHE_HOME"] : join(home, ".cache");
616
463
  return join(root, "toolroll-builds", createHash("sha256").update(real(repo)).digest("hex").slice(0, 16));
617
464
  }
618
- /** The environment that points a build's package managers at its project's cache folder, not the user's own. */
619
465
  export function buildCacheEnv(folder) {
620
466
  const at = (name) => join(folder, name);
621
467
  return {
@@ -626,14 +472,6 @@ export function buildCacheEnv(folder) {
626
472
  };
627
473
  }
628
474
  export const NO_GRANTS = { readOnly: [], readable: [], lookup: [] };
629
- /**
630
- * The pool deny for one launch. `roots` come from the plane's own records (the pool beside the database, and the one
631
- * the recorded checkout was made in), never from the checkout. A root that holds this checkout's own Git data (the
632
- * binding's gitdir or the repository's .git) is never denied whole: it is split around that data instead, entry by
633
- * entry, so it is denied as far as it can be (fail closed by denying more, never by refusing). A root inside the
634
- * checkout, the home folder, a folder above it or / is left alone: the first is the build's own work, the others the
635
- * whole machine.
636
- */
637
475
  export function checkoutPool(options, list = path => readdirSync(path)) {
638
476
  const own = options.worktree === null ? null : real(options.worktree);
639
477
  const home = real(options.home ?? homedir());
@@ -652,7 +490,7 @@ export function checkoutPool(options, list = path => readdirSync(path)) {
652
490
  }
653
491
  if (needed.includes(path))
654
492
  return;
655
- const entries = list(path); // An unreadable pool must refuse preparation, never silently widen access.
493
+ const entries = list(path);
656
494
  for (const entry of entries)
657
495
  split(join(path, entry));
658
496
  };
@@ -671,15 +509,10 @@ export function checkoutPool(options, list = path => readdirSync(path)) {
671
509
  lookup.add(folder);
672
510
  return { deny: [...deny].sort(), own: holding.length === 0 ? null : own, lookup: [...lookup].sort(), ...(needed.length === 0 ? {} : { gitPaths: needed }) };
673
511
  }
674
- /** The grants for one build: its task boundary's git rules, the shared dependencies its checkout links, and the
675
- * checkout pools (`poolRoots`, from the plane's records) denied around its own checkout. */
676
512
  export function fenceGrants(options) {
677
513
  const readable = [];
678
514
  const lookup = [...options.boundary?.lookup ?? []];
679
515
  if (options.databaseFile !== null && options.databaseFile !== "" && options.databaseFile !== ":memory:" && options.worktree !== null && options.linked != null) {
680
- // The link note names the copy as the plane wrote it; the sandbox sees real paths. The note is in the build's own
681
- // checkout, so it is only a hint: the copy must be a ready one the plane made for this run's project under the
682
- // setup it stamped on this checkout, or nothing is granted.
683
516
  const written = join(dirname(options.databaseFile), DEPS_FOLDER);
684
517
  const deps = join(dirname(real(options.databaseFile)), DEPS_FOLDER);
685
518
  const key = linkedKey(options.worktree, written) ?? linkedKey(options.worktree, deps);
@@ -696,7 +529,6 @@ export function fenceGrants(options) {
696
529
  ...(options.boundary?.homeNames === undefined || options.boundary.homeNames.length === 0 ? {} : { homeNames: [...options.boundary.homeNames] }),
697
530
  ...(pool === undefined || pool.deny.length === 0 ? {} : { pool }) };
698
531
  }
699
- /** The setup a shared copy was installed by (its ready note), or null. */
700
532
  function readySetup(deps, key) {
701
533
  try {
702
534
  const setup = JSON.parse(readFileSync(join(deps, key, "ready.json"), "utf8")).setup;
@@ -706,11 +538,6 @@ function readySetup(deps, key) {
706
538
  return null;
707
539
  }
708
540
  }
709
- /**
710
- * Git settings every fenced build runs with (GIT_CONFIG_COUNT, after any the
711
- * caller already set): `git gc` never expires a reflog, so it never rewrites
712
- * another task's reflog, which the fence would refuse mid-collection.
713
- */
714
541
  export function fencedGitEnv(base = process.env) {
715
542
  const count = Number.parseInt(base["GIT_CONFIG_COUNT"] ?? "0", 10);
716
543
  const start = Number.isInteger(count) && count > 0 ? count : 0;
@@ -719,10 +546,8 @@ export function fencedGitEnv(base = process.env) {
719
546
  settings.forEach(([key, value], index) => { env[`GIT_CONFIG_KEY_${start + index}`] = key; env[`GIT_CONFIG_VALUE_${start + index}`] = value; });
720
547
  return env;
721
548
  }
722
- /** The repository a git worktree belongs to (its `.git` file names the main repository's git folder). */
723
549
  function worktreeGitDir(worktree) {
724
550
  try {
725
- // The candidate's own pointer file: a FIFO or link there is never opened (review 2, finding 6).
726
551
  const text = regularText(join(worktree, ".git"));
727
552
  const pointer = text === null ? undefined : /^gitdir:\s*(.+)$/m.exec(text)?.[1]?.trim();
728
553
  return pointer === undefined ? null : real(isAbsolute(pointer) ? pointer : join(worktree, pointer));
@@ -732,15 +557,6 @@ function worktreeGitDir(worktree) {
732
557
  }
733
558
  }
734
559
  const toml = (value) => `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
735
- /**
736
- * Codex's own sandbox, fenced. Auto: the `:workspace` profile Codex's
737
- * `--sandbox workspace-write` already gives (workspace and temp writes, no
738
- * network). Full access: the same profile widened to write anywhere with
739
- * network on, instead of no sandbox at all. Either way the fenced paths are
740
- * denied, which in Codex outranks any write or read grant. The checkout pools
741
- * are never `flattened` (which leaves what is made after launch readable): see
742
- * `codexPool`, which denies them around the build's own checkout, written back.
743
- */
744
560
  export function codexFenceArgv(fence, fullAccess, grants = NO_GRANTS) {
745
561
  const access = codexFilesystem(fence, fullAccess, grants);
746
562
  const filesystem = [...access].map(([path, mode]) => `${toml(path)}=${toml(mode)}`);
@@ -748,19 +564,11 @@ export function codexFenceArgv(fence, fullAccess, grants = NO_GRANTS) {
748
564
  "-c", 'default_permissions="standing-orders"',
749
565
  "-c", `permissions.standing-orders.extends=${grants.writes === undefined ? '":workspace"' : '":read-only"'}`,
750
566
  "-c", `permissions.standing-orders.filesystem={${filesystem.join(",")}}`,
751
- // Codex's command sandbox can't route through a proxy: its commands reach the network only when the run's sealed
752
- // network is open (and Full access asked for it), and are offline otherwise.
753
567
  ...(codexNetworkOn(fullAccess, grants) ? ["-c", "permissions.standing-orders.network.enabled=true"] : []),
754
568
  ...(fullAccess ? ["-c", 'approval_policy="never"'] : []),
755
569
  ];
756
570
  }
757
571
  const codexNetworkOn = (fullAccess, grants) => fullAccess && (grants.network === undefined || grants.network.mode === "open");
758
- /**
759
- * The same permission profile as codexFenceArgv, as the config overrides a Codex app-server thread takes
760
- * (`thread/start` and `thread/resume` `config`; checked against codex-cli 0.156: the thread reports
761
- * `activePermissionProfile` standing-orders, and its commands are refused the denied paths). Approval policy is the
762
- * caller's own (an interactive session asks).
763
- */
764
572
  export function codexFenceConfig(fence, fullAccess, grants = NO_GRANTS) {
765
573
  return {
766
574
  default_permissions: "standing-orders",
@@ -769,29 +577,18 @@ export function codexFenceConfig(fence, fullAccess, grants = NO_GRANTS) {
769
577
  ...(codexNetworkOn(fullAccess, grants) ? { "permissions.standing-orders.network.enabled": true } : {}),
770
578
  };
771
579
  }
772
- /** Each path of a Codex permission profile and its access, the strongest last (a deny outranks a grant). */
773
580
  function codexFilesystem(fence, fullAccess, grants) {
774
581
  const { deny, readOnly } = flattened(fence, grants);
775
- // Codex's harness reads its own launch files outside the command sandbox.
776
- // Deny the namespace, including folders created after this policy was built.
777
582
  if (grants.runFolders !== undefined) {
778
583
  for (const root of runRoots(grants.runFolders)) {
779
584
  for (const prefix of RUN_FOLDER_PREFIXES)
780
585
  deny.push(join(root, `${prefix}*`), join(root, `${prefix}*`, "**"));
781
586
  }
782
587
  }
783
- // Launch folders can already be in the base fence when invoke appends them.
784
- // TOML forbids duplicate keys, even with identical values. Normalize aliases
785
- // at this boundary and apply stronger access restrictions last.
786
588
  const access = new Map();
787
589
  const pool = grants.pool;
788
- // Codex lets the more specific path win: no read grant inside a pool, but the build's own checkout.
789
590
  const pooled = (path) => pool !== undefined && pool.deny.some(one => path === one || inside(path, one))
790
591
  && !(pool.own !== null && (path === pool.own || inside(path, pool.own)));
791
- // Full access writes anywhere its fence allows, unless the build writes only its workspace (arc 2): then exactly its
792
- // allowlist, in either mode, beside the workspace Codex's own profile gives.
793
- // Codex's own workspace profile also writes the shared temp folders; a workspace build starts from its read-only
794
- // profile instead, with exactly the allowlist (its checkout among it) written back.
795
592
  if (grants.writes !== undefined)
796
593
  for (const path of grants.writes.subpaths)
797
594
  access.set(real(path), "write");
@@ -806,22 +603,16 @@ function codexFilesystem(fence, fullAccess, grants) {
806
603
  access.set(path, "read");
807
604
  for (const path of held.deny)
808
605
  access.set(path, pool.readable === true && !(pool.sealed ?? []).some(one => path === one || inside(path, one)) ? "read" : "deny");
809
- // A sealed folder (flows' scratch) is denied whole, but on the way to this launch's own folder (Codex can't deny an
810
- // ancestor and still reach inside it: its other entries are denied one by one, by codexPool, from the same split).
811
606
  for (const sealed of pool.sealed ?? [])
812
607
  if (!(pool.own !== null && (pool.own === sealed || inside(pool.own, sealed))))
813
608
  access.set(sealed, "deny");
814
609
  for (const path of held.write)
815
610
  access.set(path, "write");
816
611
  }
817
- // What no launch writes (homeWriteDenies): read-only, where Codex writes at all (Full access, or an allowlist).
818
- // Never inside a denied path: Codex lets the more specific path win, so a read there would bring it back.
819
612
  const deniedPaths = deny.filter(one => !one.includes("*")).map(real);
820
613
  for (const path of grants.writeDenies ?? []) {
821
614
  const leads = resolvedPath(path);
822
615
  const denied = (one) => access.get(one) === "deny" || deniedPaths.some(den => one === den || inside(one, den));
823
- // A name that leads into a denied path (a linked ~/.ssh into a read-denied folder) is denied by its own name too,
824
- // never read back.
825
616
  if (denied(leads)) {
826
617
  access.set(path, "deny");
827
618
  continue;
@@ -830,15 +621,11 @@ function codexFilesystem(fence, fullAccess, grants) {
830
621
  continue;
831
622
  access.set(path, "read");
832
623
  }
833
- // Denies are keyed where they resolve; the console's run folder is also denied by its
834
- // own pathname, so a link there stays unreplaceable, not only its target.
835
624
  for (const path of deny) {
836
625
  access.set(real(path), "deny");
837
626
  if (basename(path) === INSTANCE_DIR)
838
627
  access.set(path, "deny");
839
628
  }
840
- // Protected storage: denied by name and real path, and nothing granted inside it (Codex lets the more specific path
841
- // win, so a grant there would reopen it).
842
629
  const storage = grants.protectedStorage ?? [];
843
630
  if (storage.length > 0) {
844
631
  for (const [path, mode] of [...access])
@@ -851,12 +638,6 @@ function codexFilesystem(fence, fullAccess, grants) {
851
638
  }
852
639
  return access;
853
640
  }
854
- /**
855
- * Codex cannot deny an ancestor and still traverse it to the own checkout. Deny existing
856
- * siblings individually, from the trusted pool roots and a fresh listing, never through
857
- * flattened or name patterns. A project added after launch is covered on the next launch;
858
- * Seatbelt and bubblewrap retain the stronger whole-pool rule for later-created projects.
859
- */
860
641
  export function codexPool(pool, list = path => readdirSync(path)) {
861
642
  const deny = new Set();
862
643
  const read = new Set(pool.lookup);
@@ -881,7 +662,6 @@ export function codexPool(pool, list = path => readdirSync(path)) {
881
662
  deny.add(path);
882
663
  return;
883
664
  }
884
- // Only ancestors needed for traversal stay readable, never writable in Full access.
885
665
  read.add(path);
886
666
  for (const entry of list(path))
887
667
  split(join(path, entry));
@@ -890,20 +670,7 @@ export function codexPool(pool, list = path => readdirSync(path)) {
890
670
  split(root);
891
671
  return { read: [...read].sort(), deny: [...deny].sort(), write: own === null ? [] : [own] };
892
672
  }
893
- /** Secret-looking names denied by pattern inside a folder `flattened` makes read-only, so one written there after
894
- * launch is denied too (the database and its journals, tokens, login and other text files). */
895
673
  export const SPLIT_SECRET_PATTERNS = ["orders.db*", "*token*", "up-login*", "*.txt", "*secret*", "*password*", "*credential*", "*.pem", "*.key"];
896
- /**
897
- * A fence as plain denied and read-only paths, for a sandbox that can't
898
- * grant inside a denied folder (Codex: a deny outranks any grant): a denied
899
- * folder holding something readable becomes read-only, with each of its
900
- * entries not on the way to what is readable denied instead. Fails closed: a
901
- * folder that can't be listed stays denied whole and its grant is dropped.
902
- * Residual: an entry made after launch in a read-only folder is denied only
903
- * when its name matches SPLIT_SECRET_PATTERNS; any other new entry there is
904
- * readable (never writable) until the next launch. The macOS fence has no
905
- * such gap: it denies the folder and grants back only the readable path.
906
- */
907
674
  export function flattened(fence, grants = NO_GRANTS, list = path => readdirSync(path)) {
908
675
  const deny = [];
909
676
  const readOnly = new Set(grants.readOnly);
@@ -935,28 +702,16 @@ export function flattened(fence, grants = NO_GRANTS, list = path => readdirSync(
935
702
  };
936
703
  for (const path of fence)
937
704
  split(path);
938
- // Fail closed: a grant equal to or inside a denied path is dropped, so no read grant can outrank a deny (Codex lets
939
- // the more specific path win). Patterns stay as Codex patterns; they can't contain a grant here.
940
705
  const denied = deny.filter(path => !path.includes("*"));
941
706
  return { deny, readOnly: [...readOnly].filter(path => !denied.some(one => path === one || inside(path, one))) };
942
707
  }
943
- /** Claude's own file tools refuse the fenced paths in every mode (its shell is fenced by the macOS sandbox), and
944
- * never edit a read-only one. */
945
708
  export function claudeFenceSettings(fence, readOnly = []) {
946
709
  const rules = [...fence.flatMap(path => [`Read(/${path})`, `Read(/${path}/**)`, `Edit(/${path})`, `Edit(/${path}/**)`]), ...readOnly.flatMap(path => [`Edit(/${path})`, `Edit(/${path}/**)`])];
947
710
  return JSON.stringify({ permissions: { deny: rules } });
948
711
  }
949
712
  const SANDBOX_EXEC = "/usr/bin/sandbox-exec";
950
- /** A process already inside a Seatbelt sandbox (an agent's, or a flow check zone's) can't apply another: sandbox-exec says so. */
951
713
  const NESTED_SANDBOX = /sandbox_apply: Operation not permitted/;
952
714
  let seatbeltWorks = null;
953
- /**
954
- * Whether this machine can run an agent inside the macOS fence (checked once). Not from inside another
955
- * sandbox: a Toolroll a fenced process starts (the end-to-end journeys a flow's check zone runs) can't nest
956
- * its fence, and would otherwise fail every launch. Its agents stay inside the outer fence, which every
957
- * child inherits, and are recorded with the fence they actually got. Any other probe failure keeps the
958
- * fence on, so a launch fails loudly rather than running unfenced.
959
- */
960
715
  export function macosFenceAvailable(platform = process.platform, probe) {
961
716
  if (platform !== "darwin" || !existsSync(SANDBOX_EXEC))
962
717
  return false;
@@ -977,8 +732,6 @@ export function macosFenceAvailable(platform = process.platform, probe) {
977
732
  });
978
733
  return seatbeltWorks;
979
734
  }
980
- /** Whether the sandbox runtime can sandbox here on Linux (checked once): bubblewrap, socat, its seccomp helper and
981
- * ripgrep installed, and unprivileged user namespaces allowed. A machine that can't is no Linux fence at all. */
982
735
  let linuxWorks = null;
983
736
  export function linuxFenceAvailable(platform = process.platform, probe = () => sandboxRuntimeProblem("linux") === null) {
984
737
  if (platform !== "linux")
@@ -993,19 +746,10 @@ export function linuxFenceAvailable(platform = process.platform, probe = () => s
993
746
  }
994
747
  return linuxWorks;
995
748
  }
996
- /** Thrown when no sandbox can be made for a launch: the spawn road refuses it. */
997
749
  export class LinuxFenceUnavailable extends Error {
998
750
  }
999
- /**
1000
- * The runtime's config for a launch (sandbox-runtime.ts SrtTerms), from its fence: every fenced path denied to read and
1001
- * write (with the exact paths read again inside them), the pools' other checkouts write-denied (and, under v1, read-
1002
- * denied) around the build's own, the flows' scratch folders sealed, the launch's writes (its allowlist, or anywhere
1003
- * outside the denies), its mach services and its network.
1004
- */
1005
751
  export function srtTermsOf(fence, grants = NO_GRANTS) {
1006
752
  const denyRead = new Set(fence.map(real));
1007
- // A readable grant's own folder is read too: bundlers (esbuild) find node_modules by listing it. The runtime can't
1008
- // grant a listing without the folder's files, so the shared copy's folder is read whole (its ready note among them).
1009
753
  const allowRead = new Set(grants.readable.flatMap(path => grants.exactFiles?.includes(path) === true ? [real(path)] : [real(path), real(dirname(path))]));
1010
754
  const denyWrite = new Set([...fence, ...grants.readOnly].map(real));
1011
755
  for (const path of grants.writeDenies ?? [])
@@ -1016,17 +760,11 @@ export function srtTermsOf(fence, grants = NO_GRANTS) {
1016
760
  }
1017
761
  for (const file of grants.signIns?.read ?? [])
1018
762
  allowRead.add(file);
1019
- // Every other launch's private folder unread by pattern (one made after this launch too), this launch's own read
1020
- // again. Writes are denied to those there at launch, under every root: the runtime can't write back inside a write
1021
- // deny, so a pattern would take this launch's own folder too (one made after launch is writable under `anywhere`).
1022
763
  const folders = grants.runFolders;
1023
764
  if (folders !== undefined) {
1024
765
  for (const root of runRoots(folders)) {
1025
766
  for (const prefix of RUN_FOLDER_PREFIXES)
1026
767
  denyRead.add(join(root, `${prefix}*`));
1027
- // And by name, each there right before the launch (this runs at the spawn): on Linux the runtime gives a pattern
1028
- // no mask where a path it allows lies beside its matches. Written: only where the launch writes anywhere (under a
1029
- // write allowlist they are out of its writes already).
1030
768
  for (const path of otherRunFolders({ root, own: folders.own })) {
1031
769
  denyRead.add(path);
1032
770
  if (grants.writes === undefined)
@@ -1038,15 +776,11 @@ export function srtTermsOf(fence, grants = NO_GRANTS) {
1038
776
  }
1039
777
  const pool = grants.pool;
1040
778
  if (pool !== undefined) {
1041
- // Under v1 the pools are unread too, the build's own checkout read again; under v2 they are read (owner Q-C).
1042
779
  if (pool.readable !== true)
1043
780
  for (const root of pool.deny)
1044
781
  denyRead.add(root);
1045
- // The build's own checkout is read again inside whatever is denied around it (the pools, a flow's sealed scratch).
1046
782
  if (pool.own !== null)
1047
783
  allowRead.add(pool.own);
1048
- // Never written but the build's own checkout: the runtime can't write back inside a write deny, so each other
1049
- // entry on the way is denied instead (codexPool's split, as Codex takes it).
1050
784
  for (const path of codexPool(pool).deny)
1051
785
  denyWrite.add(path);
1052
786
  for (const sealed of pool.sealed ?? []) {
@@ -1055,7 +789,6 @@ export function srtTermsOf(fence, grants = NO_GRANTS) {
1055
789
  denyWrite.add(sealed);
1056
790
  }
1057
791
  }
1058
- // Protected storage last: denied to read and write by name and real path, and no read grant inside it survives.
1059
792
  const storage = grants.protectedStorage ?? [];
1060
793
  const isProtected = (path) => storage.some(one => path === one || inside(path, one) || real(path) === one || inside(real(path), one));
1061
794
  for (const path of storage) {
@@ -1067,11 +800,7 @@ export function srtTermsOf(fence, grants = NO_GRANTS) {
1067
800
  allowRead.delete(path);
1068
801
  const readConfig = { denyOnly: [...denyRead].sort(), allowWithinDeny: [...allowRead].sort() };
1069
802
  const writes = grants.writes;
1070
- // A sign-ins check also writes Codex's session and log folders and its own Claude transcripts (never inside a
1071
- // write deny: under policy v1 the home configuration stays unwritten whole).
1072
803
  const signInWrites = [...grants.signIns?.writes ?? [], ...(grants.signIns?.transcripts ?? []).map(folder => join(folder, "*.jsonl"))];
1073
- // Writing anywhere: everything but the denies. The launch's own checkout and folder are named too, so a backend that
1074
- // binds a read deny's re-allowed paths back (bubblewrap) binds those back writable.
1075
804
  const allowOnly = writes === undefined ? ["/", ...(pool?.own == null ? [] : [real(pool.own)]), ...(folders?.own == null ? [] : [folders.own])]
1076
805
  : [...writes.subpaths, ...writes.prefixes.map(one => `${one.path}*`), ...signInWrites, ...getDefaultWritePaths({ denyRead: readConfig.denyOnly, allowRead: readConfig.allowWithinDeny })];
1077
806
  const network = grants.network;
@@ -1087,15 +816,9 @@ export function srtTermsOf(fence, grants = NO_GRANTS) {
1087
816
  },
1088
817
  };
1089
818
  }
1090
- /** The spawn that runs `file args` from `cwd` inside the sandbox runtime's sandbox (sandbox-runtime.ts srtSpawn), and the
1091
- * environment it needs beside the caller's. */
1092
819
  export function sandboxedSpawn(file, args, fence, grants = NO_GRANTS, cwd, temp) {
1093
820
  return srtSpawn(file, args, srtTermsOf(fence, grants), cwd ?? process.cwd(), temp);
1094
821
  }
1095
- /**
1096
- * What each agent's fence gives it, by permission mode: the one table "What an agent can reach" in
1097
- * docs/guide/security.md shows (fenceSummaryMarkdown; a test holds them equal).
1098
- */
1099
822
  export const FENCE_SUMMARY = [
1100
823
  {
1101
824
  agent: "**Claude, Gemini, ACP agents**",
@@ -1108,40 +831,22 @@ export const FENCE_SUMMARY = [
1108
831
  full: "the same reads and writes, with the fence; its commands reach the network only when the project's network is open",
1109
832
  },
1110
833
  ];
1111
- /** FENCE_SUMMARY as the security guide's markdown table. */
1112
834
  export function fenceSummaryMarkdown() {
1113
835
  return ["| | Auto | Full access |", "|---|---|---|", ...FENCE_SUMMARY.map(row => `| ${row.agent} | ${row.auto} | ${row.full} |`)].join("\n");
1114
836
  }
1115
- /** The sign-in files a `sign-ins` check reads, by fixed name under the person's home (never from the environment, so no
1116
- * caller's CLAUDE_CONFIG_DIR or GH_CONFIG_DIR points a grant at .ssh): Claude's account and settings (and, on Linux,
1117
- * its credentials file; on a Mac they are in the keychain), gh's hosts and config, and Codex's config and sign-in. */
1118
837
  const SIGN_IN_FILES = (platform) => [
1119
838
  ".claude.json", join(".claude", "settings.json"), ...(platform === "linux" ? [join(".claude", ".credentials.json")] : []),
1120
839
  join(".config", "gh", "hosts.yml"), join(".config", "gh", "config.yml"), join(".codex", "config.toml"), join(".codex", "auth.json"),
1121
840
  ];
1122
- /**
1123
- * A `sign-ins` check's grants (sandbox parity C10, srt-style): each sign-in file by its name, read by the check itself
1124
- * through its sandbox. Nothing privileged reads or copies one: the sandbox resolves the name in its own view, so a link
1125
- * planted there into Toolroll's state leads to a denied path (Seatbelt checks the resolved file; bubblewrap resolves
1126
- * inside its mount namespace, where the state is masked). On a Mac, the checkout's own Claude transcript folder (made
1127
- * when absent, only as the real folder it is), whose session files alone are written; and Codex's session and log
1128
- * folders (when ~/.codex is there), never its config.
1129
- */
1130
841
  export function signInGrants(home, checkout, platform = process.platform) {
1131
842
  const base = real(home);
1132
- // Read by name, but only a name that is itself now: every folder from the home folder down a real one, the file a
1133
- // regular file with one name (never a link, never a hard link to something else). The sandbox resolves it again.
1134
843
  const read = SIGN_IN_FILES(platform).map(name => join(base, name)).filter(path => signInIsItself(base, path));
1135
844
  const transcript = claudeProjectFolder(base, real(checkout));
1136
- // A transcript folder Claude would name by prefix (a very long checkout path) isn't granted: never a prefix of others.
1137
845
  const folder = transcript.byPrefix || !existsSync(join(base, ".claude")) ? null : grantFolder(transcript.path);
1138
846
  const codex = join(base, ".codex");
1139
847
  const writes = grantFolder(codex, false) === null ? [] : ["sessions", "log"].map(name => grantFolder(join(codex, name))).filter((path) => path !== null);
1140
848
  return { read, transcripts: folder === null || platform !== "darwin" ? [] : [folder], writes, mach: platform === "darwin" ? ["com.apple.trustd.agent"] : [] };
1141
849
  }
1142
- /** Whether a sign-in file is itself, now: every folder from the (real) home folder down a real folder, the file a
1143
- * regular file with one name (never a link, never a hard link to something else). Checked when granted and again right
1144
- * before the launch (invoke.ts); the sandbox resolves the name a third time. */
1145
850
  export function signInIsItself(base, path) {
1146
851
  let at = base;
1147
852
  const parts = relative(base, path).split(sep);
@@ -1162,48 +867,32 @@ export function signInIsItself(base, path) {
1162
867
  }
1163
868
  export const FENCE_POLICY_CURRENT = 2;
1164
869
  export const LEGACY_SANDBOX = { policy: 1, readDeny: [], machLookup: [] };
1165
- /** A build's sandbox terms, exactly as its approval sealed them: an approval from before 0.9.70 is policy v1 (the home
1166
- * configuration denied) with nothing listed. */
1167
870
  export function launchSandboxOf(profile) {
1168
871
  return { policy: profile.fencePolicy ?? 1, readDeny: profile.readDeny ?? [], machLookup: profile.machLookup ?? [] };
1169
872
  }
1170
- /** The one place a launch's fence is made (docs/plans/sandbox-parity.md C1): its denies, its grants, and
1171
- * `confinement: "required"`, so the spawn road refuses it where no OS fence applies rather than running it bare. */
1172
873
  export function fenceFor(kind, ctx) {
1173
874
  const home = ctx.home === undefined ? {} : { home: ctx.home };
1174
- // The project's read denies join the fence by name, there or not (the runtime denies a path that isn't there yet).
1175
- // Protected storage, resolved once for this launch, from the plane's own environment (protected-storage.ts).
1176
875
  const storage = ctx.storage?.denies ?? protectedStorageDenies(ctx.home ?? homedir());
1177
876
  const fence = agentFence({ databaseFile: ctx.databaseFile, worktree: ctx.worktree, ...home, boundary: ctx.boundary, binding: ctx.binding, runFolders: ctx.runFolders, extra: [...ctx.extra ?? [], ...ctx.readDeny ?? []], protectedStorage: storage });
1178
877
  const found = fenceGrants({ databaseFile: ctx.databaseFile, worktree: ctx.worktree, boundary: ctx.boundary, runFolders: ctx.runFolders, linked: ctx.linked ?? null, binding: ctx.binding, ...home, poolRoots: ctx.poolRoots });
1179
- // Toolroll's own install, the sandbox runtime's package and the Node running them, never written by anything it
1180
- // launches: rewriting the code that fences a build would switch the fence off.
1181
878
  const made = { ...found, readOnly: [...new Set([...found.readOnly, ...toolrollInstall(ctx.worktree, ctx.home ?? homedir(), ctx.binding?.main ?? null)])].sort() };
1182
879
  const written = ctx.writes ?? null;
1183
880
  const exact = ctx.exactFile ?? null;
1184
881
  const grants = {
1185
882
  ...made,
1186
883
  ...(written === null ? {} : { writes: written.writes, readOnly: [...new Set([...made.readOnly, ...written.readOnly])].sort() }),
1187
- // One exact file, granted as the shared dependencies are, and never written (Claude's Edit rules read `readOnly`).
1188
884
  ...(exact === null ? {} : { readable: [...made.readable, exact], exactFiles: [exact], readOnly: [...new Set([...made.readOnly, ...(written?.readOnly ?? []), exact])].sort() }),
1189
885
  ...(ctx.network === undefined ? {} : { network: ctx.network }),
1190
886
  ...(ctx.machLookup === undefined || ctx.machLookup.length === 0 ? {} : { machLookup: [...ctx.machLookup] }),
1191
- // A project's checks may drive a browser (Playwright's Chromium), and so may a flow's script zone whose browser use
1192
- // a person approved (the caller proves it at launch); builds, tool servers and every other flow launch don't get it.
1193
887
  ...(kind === "check" || (kind === "flow" && ctx.browser === true) ? { browser: true } : {}),
1194
- // A build's agent signs in from the keychain (Claude Code does); nothing else it launches reaches it.
1195
888
  ...(kind === "build" ? { keychain: true } : {}),
1196
- // Under a write allowlist these are out of reach already; where the launch writes anywhere, they are denied by name.
1197
889
  writeDenies: homeWriteDenies(ctx.home ?? homedir(), ctx.binding, ctx.provider ?? null),
1198
890
  protectedStorage: storage,
1199
891
  ...(made.pool === undefined ? {} : { pool: { ...made.pool, ...(ctx.policy === 2 ? { readable: true } : {}),
1200
- // Flows' scratch folders in the pool (and any the caller names) stay denied whole, at every policy version.
1201
892
  sealed: sealedScratch(ctx.poolRoots, ctx.scratchRoots ?? []) } }),
1202
893
  };
1203
894
  return { kind, fence, fenceGrants: grants, confinement: "required" };
1204
895
  }
1205
- /** The flows' scratch folders inside the checkout pools (`flow-checks` beside the checkouts) and any a caller names,
1206
- * each denied by name whether or not it is there yet, and where it is a link, where it leads too. */
1207
896
  export function sealedScratch(poolRoots, named) {
1208
897
  const out = new Set();
1209
898
  for (const path of [...poolRoots.filter((root) => root !== null).map(root => join(real(root), "flow-checks")), ...named.map(one => join(real(dirname(one)), basename(one)))]) {
@@ -1212,18 +901,10 @@ export function sealedScratch(poolRoots, named) {
1212
901
  if (lstatSync(path).isSymbolicLink())
1213
902
  out.add(realpathSync(path));
1214
903
  }
1215
- catch { /* not there, or dangling: denied by name */ }
904
+ catch { }
1216
905
  }
1217
906
  return [...out].sort();
1218
907
  }
1219
- /**
1220
- * Toolroll's own install as no launch may write it: this package's folder (its compiled code, the sandbox launch
1221
- * helper among it), the sandbox runtime's package wherever it was installed, and the Node running them with the
1222
- * folder it lives in (its npm and global packages beside it), as the real folders they are. Never a folder that holds
1223
- * the launch's own checkout or its repository (a build of Toolroll's own source, run from it: that repository's other
1224
- * files are the primary checkout's, write-denied already), the home folder or one above it, and nothing the user
1225
- * doesn't own (root's folders are out of a build's reach already).
1226
- */
1227
908
  export function toolrollInstall(worktree, home, repository = null) {
1228
909
  const own = worktree === null ? null : real(worktree);
1229
910
  const repo = repository === null ? null : real(repository);
@@ -1246,37 +927,21 @@ export function toolrollInstall(worktree, home, repository = null) {
1246
927
  return [...new Set(candidates)].filter(path => path !== dirname(path) && path !== homeReal && !inside(homeReal, path)
1247
928
  && !(own !== null && (own === path || inside(own, path))) && !(repo !== null && (repo === path || inside(repo, path))) && ours(path)).sort();
1248
929
  }
1249
- /** Names that run code or reconfigure tools for whoever opens the project next: the sandbox runtime's DANGEROUS_FILES
1250
- * (@anthropic-ai/sandbox-runtime sandbox-utils), and the names its mandatory denies can't hold when they are made
1251
- * after a launch starts (`.envrc`, package-manager and Claude settings). */
1252
930
  export const PROTECTED_FILES = [".gitconfig", ".gitmodules", ".bashrc", ".bash_profile", ".zshrc", ".zprofile", ".profile", ".ripgreprc", ".mcp.json",
1253
931
  ".envrc", ".npmrc", ".yarnrc", ".yarnrc.yml", ".claude/settings.json", ".claude/settings.local.json", ".git/config"];
1254
- /** Folders protected whole, wherever they are (the runtime's dangerous directories, with Git's hooks). */
1255
932
  export const PROTECTED_DIRS = [".vscode", ".idea", ".claude/commands", ".claude/agents", ".git/hooks"];
1256
- /**
1257
- * The handoff's backstop (builder.ts commit): the changed paths (relative, from Git) that are protected names at any
1258
- * depth, in any case. The sandbox runtime denies these when a launch starts; one made after it started (a new nested
1259
- * folder's `.envrc`, say) gets through the sandbox, and a result that holds it is refused.
1260
- */
1261
933
  export function protectedChanges(changed) {
1262
934
  const files = PROTECTED_FILES.map(one => one.toLowerCase());
1263
935
  return changed.filter(path => {
1264
936
  const lower = `/${path.toLowerCase()}`;
1265
- // A protected folder's own name too (a link committed as `pkg/.vscode`), not only what is in it.
1266
937
  return files.some(name => lower.endsWith(`/${name}`)) || PROTECTED_DIRS.some(dir => lower.includes(`/${dir.toLowerCase()}/`) || lower.endsWith(`/${dir.toLowerCase()}`));
1267
938
  });
1268
939
  }
1269
- /**
1270
- * The handoff's backstop for links (builder.ts commit): a staged symbolic link (Git mode 120000) whose path is a
1271
- * protected name or a folder on the way to one (`pkg/.claude`, `.vscode`, `lib/.git`), at any depth, in any case. A
1272
- * link there would lead whoever opens the project to settings, hooks or commands kept anywhere.
1273
- */
1274
940
  export function protectedLinks(links) {
1275
941
  const entries = [...PROTECTED_FILES, ...PROTECTED_DIRS].map(one => one.toLowerCase().split("/"));
1276
942
  return links.filter(path => {
1277
943
  const parts = path.toLowerCase().split("/").filter(one => one !== "");
1278
944
  return entries.some(entry => {
1279
- // The link's last parts are the entry's first ones (the whole entry, or a folder on the way to it).
1280
945
  for (let take = 1; take <= Math.min(entry.length, parts.length); take++) {
1281
946
  if (parts.slice(parts.length - take).join("/") === entry.slice(0, take).join("/"))
1282
947
  return true;
@@ -1285,18 +950,10 @@ export function protectedLinks(links) {
1285
950
  });
1286
951
  });
1287
952
  }
1288
- /** The home folder's own persistence points beyond the protected names (login items, systemd user units and autostart,
1289
- * Git's, gh's, pip's and fish's configuration, the shells' other startup files, SSH and GnuPG, and the folders on a
1290
- * login PATH). Under `.config/` each also stands under $XDG_CONFIG_HOME. */
1291
953
  export const HOME_PERSISTENCE = ["Library/LaunchAgents", ".config/systemd/user", ".config/autostart", ".config/git", ".config/gh", ".config/pip",
1292
954
  ".config/fish", ".pip", ".zshenv", ".zlogin", ".bash_login", ".ssh", ".gnupg", ".local/bin", "bin"];
1293
- /** The sign-in folders and files at home no launch writes, but an agent its own exact sign-in files (OWN_SIGN_INS). */
1294
955
  const HOME_SIGN_INS = [".codex", ".claude.json", ".claude/.credentials.json"];
1295
- /** The exact sign-in files an agent's own launch still writes (Claude's account and credentials). Codex's harness
1296
- * refreshes its sign-in outside the sandbox, so its commands write none. Configuration and persistence names stay
1297
- * denied for every agent. */
1298
956
  const OWN_SIGN_INS = { claude: [".claude.json", ".claude/.credentials.json"] };
1299
- /** `path` as it resolves now: through every link above it (and at it), however much of it exists. */
1300
957
  function resolvedPath(path) {
1301
958
  let head = path;
1302
959
  const rest = [];
@@ -1311,16 +968,6 @@ function resolvedPath(path) {
1311
968
  }
1312
969
  return path;
1313
970
  }
1314
- /**
1315
- * What no launch writes, whatever its writes, as static write denies for the sandbox runtime (whose own protected names
1316
- * are anchored at the launch's folder only) and Codex's profile: the home folder's protected names (shell profiles, Git
1317
- * and tool configuration), its persistence points and sign-ins (but the launch's own agent's exact sign-in files), and
1318
- * the bound repository's own Git config, hooks and submodules (a linked worktree reaches them through its `.git`
1319
- * file). Each by its name and by where it leads now (a linked ~/.config or LaunchAgents is denied at both ends). On
1320
- * Linux only those there at launch: the runtime holds an absent name with a stand-in nothing can read for the launch's
1321
- * length, and the person's own git and shells then fail on their ~/.gitconfig and ~/.bashrc (measured). Under a write
1322
- * allowlist an absent one is out of reach anyway; under `anywhere` it can be made (an accepted limit).
1323
- */
1324
971
  export function homeWriteDenies(home, binding, provider, platform = process.platform, env = process.env) {
1325
972
  const base = real(home);
1326
973
  const own = new Set(OWN_SIGN_INS[provider ?? ""] ?? []);
@@ -1332,9 +979,6 @@ export function homeWriteDenies(home, binding, provider, platform = process.plat
1332
979
  const git = binding === null ? [] : ["config", "hooks", "modules"].map(name => join(real(join(binding.main, ".git")), name));
1333
980
  return [...new Set([...paths, ...git].flatMap(path => [path, resolvedPath(path)]))].sort();
1334
981
  }
1335
- /** A tool server's grants from its build's: never the agent's network or write allowlist (a server keeps its own state
1336
- * where it always has), and never the build's own checkout or launch folder read back (nothing a build wrote loads in a
1337
- * process that holds a tool's secrets). */
1338
982
  export function serverGrantsOf(grants) {
1339
983
  const { network: _agentOnly, writes: _agentWrites, keychain: _agentKeychain, browser: _checkOnly, ...rest } = grants;
1340
984
  return {