looply-cli 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (785) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -3
  3. package/dist/.src-hash +1 -0
  4. package/dist/acceptance-observe.d.ts +108 -0
  5. package/dist/acceptance-observe.d.ts.map +1 -0
  6. package/dist/acceptance-observe.js +152 -0
  7. package/dist/acceptance-observe.js.map +1 -0
  8. package/dist/agent-cmd.d.ts +131 -0
  9. package/dist/agent-cmd.d.ts.map +1 -0
  10. package/dist/agent-cmd.js +154 -0
  11. package/dist/agent-cmd.js.map +1 -0
  12. package/dist/agent-contained.d.ts +114 -0
  13. package/dist/agent-contained.d.ts.map +1 -0
  14. package/dist/agent-contained.js +292 -0
  15. package/dist/agent-contained.js.map +1 -0
  16. package/dist/agent-driver.d.ts +130 -0
  17. package/dist/agent-driver.d.ts.map +1 -0
  18. package/dist/agent-driver.js +170 -0
  19. package/dist/agent-driver.js.map +1 -0
  20. package/dist/agent-envelope.d.ts +94 -0
  21. package/dist/agent-envelope.d.ts.map +1 -0
  22. package/dist/agent-envelope.js +214 -0
  23. package/dist/agent-envelope.js.map +1 -0
  24. package/dist/agent-exec.d.ts +182 -0
  25. package/dist/agent-exec.d.ts.map +1 -0
  26. package/dist/agent-exec.js +125 -0
  27. package/dist/agent-exec.js.map +1 -0
  28. package/dist/agent-runtime.d.ts +23 -0
  29. package/dist/agent-runtime.d.ts.map +1 -0
  30. package/dist/agent-runtime.js +143 -0
  31. package/dist/agent-runtime.js.map +1 -0
  32. package/dist/approval-gate-read.d.ts +66 -0
  33. package/dist/approval-gate-read.d.ts.map +1 -0
  34. package/dist/approval-gate-read.js +138 -0
  35. package/dist/approval-gate-read.js.map +1 -0
  36. package/dist/approval-resolution.d.ts +87 -0
  37. package/dist/approval-resolution.d.ts.map +1 -0
  38. package/dist/approval-resolution.js +100 -0
  39. package/dist/approval-resolution.js.map +1 -0
  40. package/dist/approval-resumes.d.ts +102 -0
  41. package/dist/approval-resumes.d.ts.map +1 -0
  42. package/dist/approval-resumes.js +167 -0
  43. package/dist/approval-resumes.js.map +1 -0
  44. package/dist/ask-brain.d.ts +167 -0
  45. package/dist/ask-brain.d.ts.map +1 -0
  46. package/dist/ask-brain.js +355 -0
  47. package/dist/ask-brain.js.map +1 -0
  48. package/dist/autonomy-authority.d.ts +80 -0
  49. package/dist/autonomy-authority.d.ts.map +1 -0
  50. package/dist/autonomy-authority.js +82 -0
  51. package/dist/autonomy-authority.js.map +1 -0
  52. package/dist/autonomy-controller.d.ts +321 -0
  53. package/dist/autonomy-controller.d.ts.map +1 -0
  54. package/dist/autonomy-controller.js +517 -0
  55. package/dist/autonomy-controller.js.map +1 -0
  56. package/dist/autonomy-store.d.ts +327 -0
  57. package/dist/autonomy-store.d.ts.map +1 -0
  58. package/dist/autonomy-store.js +581 -0
  59. package/dist/autonomy-store.js.map +1 -0
  60. package/dist/autonomy-tick.d.ts +257 -0
  61. package/dist/autonomy-tick.d.ts.map +1 -0
  62. package/dist/autonomy-tick.js +616 -0
  63. package/dist/autonomy-tick.js.map +1 -0
  64. package/dist/bin.d.ts +3 -0
  65. package/dist/bin.d.ts.map +1 -0
  66. package/dist/bin.js +2719 -0
  67. package/dist/bin.js.map +1 -0
  68. package/dist/brain-advice.d.ts +21 -0
  69. package/dist/brain-advice.d.ts.map +1 -0
  70. package/dist/brain-advice.js +51 -0
  71. package/dist/brain-advice.js.map +1 -0
  72. package/dist/candidate-replay-runtime.d.ts +125 -0
  73. package/dist/candidate-replay-runtime.d.ts.map +1 -0
  74. package/dist/candidate-replay-runtime.js +188 -0
  75. package/dist/candidate-replay-runtime.js.map +1 -0
  76. package/dist/checkout-carry.d.ts +76 -0
  77. package/dist/checkout-carry.d.ts.map +1 -0
  78. package/dist/checkout-carry.js +125 -0
  79. package/dist/checkout-carry.js.map +1 -0
  80. package/dist/citation-readers.d.ts +26 -0
  81. package/dist/citation-readers.d.ts.map +1 -0
  82. package/dist/citation-readers.js +102 -0
  83. package/dist/citation-readers.js.map +1 -0
  84. package/dist/command-receipts.d.ts +79 -0
  85. package/dist/command-receipts.d.ts.map +1 -0
  86. package/dist/command-receipts.js +143 -0
  87. package/dist/command-receipts.js.map +1 -0
  88. package/dist/command-runner.d.ts +32 -0
  89. package/dist/command-runner.d.ts.map +1 -0
  90. package/dist/command-runner.js +108 -0
  91. package/dist/command-runner.js.map +1 -0
  92. package/dist/compatible-sets.d.ts +67 -0
  93. package/dist/compatible-sets.d.ts.map +1 -0
  94. package/dist/compatible-sets.js +81 -0
  95. package/dist/compatible-sets.js.map +1 -0
  96. package/dist/compile-check.d.ts +31 -0
  97. package/dist/compile-check.d.ts.map +1 -0
  98. package/dist/compile-check.js +34 -0
  99. package/dist/compile-check.js.map +1 -0
  100. package/dist/compile-store.d.ts +16 -0
  101. package/dist/compile-store.d.ts.map +1 -0
  102. package/dist/compile-store.js +21 -0
  103. package/dist/compile-store.js.map +1 -0
  104. package/dist/completion.d.ts +106 -0
  105. package/dist/completion.d.ts.map +1 -0
  106. package/dist/completion.js +131 -0
  107. package/dist/completion.js.map +1 -0
  108. package/dist/config.d.ts +549 -0
  109. package/dist/config.d.ts.map +1 -0
  110. package/dist/config.js +763 -0
  111. package/dist/config.js.map +1 -0
  112. package/dist/control-file.d.ts +142 -0
  113. package/dist/control-file.d.ts.map +1 -0
  114. package/dist/control-file.js +144 -0
  115. package/dist/control-file.js.map +1 -0
  116. package/dist/coordinator-state.d.ts +131 -0
  117. package/dist/coordinator-state.d.ts.map +1 -0
  118. package/dist/coordinator-state.js +380 -0
  119. package/dist/coordinator-state.js.map +1 -0
  120. package/dist/coordinator.d.ts +95 -0
  121. package/dist/coordinator.d.ts.map +1 -0
  122. package/dist/coordinator.js +97 -0
  123. package/dist/coordinator.js.map +1 -0
  124. package/dist/cursor-store.d.ts +53 -0
  125. package/dist/cursor-store.d.ts.map +1 -0
  126. package/dist/cursor-store.js +98 -0
  127. package/dist/cursor-store.js.map +1 -0
  128. package/dist/daemon-cmd.d.ts +239 -0
  129. package/dist/daemon-cmd.d.ts.map +1 -0
  130. package/dist/daemon-cmd.js +1751 -0
  131. package/dist/daemon-cmd.js.map +1 -0
  132. package/dist/daemon-lock.d.ts +140 -0
  133. package/dist/daemon-lock.d.ts.map +1 -0
  134. package/dist/daemon-lock.js +352 -0
  135. package/dist/daemon-lock.js.map +1 -0
  136. package/dist/daemon-recovery.d.ts +78 -0
  137. package/dist/daemon-recovery.d.ts.map +1 -0
  138. package/dist/daemon-recovery.js +161 -0
  139. package/dist/daemon-recovery.js.map +1 -0
  140. package/dist/daemon.d.ts +368 -0
  141. package/dist/daemon.d.ts.map +1 -0
  142. package/dist/daemon.js +601 -0
  143. package/dist/daemon.js.map +1 -0
  144. package/dist/declared-response-shape.d.ts +93 -0
  145. package/dist/declared-response-shape.d.ts.map +1 -0
  146. package/dist/declared-response-shape.js +200 -0
  147. package/dist/declared-response-shape.js.map +1 -0
  148. package/dist/declared-surfaces.d.ts +16 -0
  149. package/dist/declared-surfaces.d.ts.map +1 -0
  150. package/dist/declared-surfaces.js +19 -0
  151. package/dist/declared-surfaces.js.map +1 -0
  152. package/dist/depends-review.d.ts +113 -0
  153. package/dist/depends-review.d.ts.map +1 -0
  154. package/dist/depends-review.js +110 -0
  155. package/dist/depends-review.js.map +1 -0
  156. package/dist/doctor.d.ts +91 -0
  157. package/dist/doctor.d.ts.map +1 -0
  158. package/dist/doctor.js +71 -0
  159. package/dist/doctor.js.map +1 -0
  160. package/dist/edge-approval.d.ts +105 -0
  161. package/dist/edge-approval.d.ts.map +1 -0
  162. package/dist/edge-approval.js +100 -0
  163. package/dist/edge-approval.js.map +1 -0
  164. package/dist/evidence-cache.d.ts +45 -0
  165. package/dist/evidence-cache.d.ts.map +1 -0
  166. package/dist/evidence-cache.js +90 -0
  167. package/dist/evidence-cache.js.map +1 -0
  168. package/dist/evidence-cmd.d.ts +133 -0
  169. package/dist/evidence-cmd.d.ts.map +1 -0
  170. package/dist/evidence-cmd.js +347 -0
  171. package/dist/evidence-cmd.js.map +1 -0
  172. package/dist/evidence-facts.d.ts +40 -0
  173. package/dist/evidence-facts.d.ts.map +1 -0
  174. package/dist/evidence-facts.js +114 -0
  175. package/dist/evidence-facts.js.map +1 -0
  176. package/dist/exclusive-lock.d.ts +52 -0
  177. package/dist/exclusive-lock.d.ts.map +1 -0
  178. package/dist/exclusive-lock.js +150 -0
  179. package/dist/exclusive-lock.js.map +1 -0
  180. package/dist/exec-domains.d.ts +140 -0
  181. package/dist/exec-domains.d.ts.map +1 -0
  182. package/dist/exec-domains.js +287 -0
  183. package/dist/exec-domains.js.map +1 -0
  184. package/dist/exemption-store.d.ts +197 -0
  185. package/dist/exemption-store.d.ts.map +1 -0
  186. package/dist/exemption-store.js +266 -0
  187. package/dist/exemption-store.js.map +1 -0
  188. package/dist/explicit-start-gate.d.ts +96 -0
  189. package/dist/explicit-start-gate.d.ts.map +1 -0
  190. package/dist/explicit-start-gate.js +103 -0
  191. package/dist/explicit-start-gate.js.map +1 -0
  192. package/dist/fs-trouble.d.ts +70 -0
  193. package/dist/fs-trouble.d.ts.map +1 -0
  194. package/dist/fs-trouble.js +98 -0
  195. package/dist/fs-trouble.js.map +1 -0
  196. package/dist/gate.d.ts +278 -0
  197. package/dist/gate.d.ts.map +1 -0
  198. package/dist/gate.js +278 -0
  199. package/dist/gate.js.map +1 -0
  200. package/dist/git-driver.d.ts +519 -0
  201. package/dist/git-driver.d.ts.map +1 -0
  202. package/dist/git-driver.js +900 -0
  203. package/dist/git-driver.js.map +1 -0
  204. package/dist/git-push-executor.d.ts +41 -0
  205. package/dist/git-push-executor.d.ts.map +1 -0
  206. package/dist/git-push-executor.js +142 -0
  207. package/dist/git-push-executor.js.map +1 -0
  208. package/dist/glob.d.ts +26 -0
  209. package/dist/glob.d.ts.map +1 -0
  210. package/dist/glob.js +93 -0
  211. package/dist/glob.js.map +1 -0
  212. package/dist/goal-adaptive.d.ts +295 -0
  213. package/dist/goal-adaptive.d.ts.map +1 -0
  214. package/dist/goal-adaptive.js +393 -0
  215. package/dist/goal-adaptive.js.map +1 -0
  216. package/dist/goal-compile.d.ts +342 -0
  217. package/dist/goal-compile.d.ts.map +1 -0
  218. package/dist/goal-compile.js +444 -0
  219. package/dist/goal-compile.js.map +1 -0
  220. package/dist/goal-depends-executor.d.ts +55 -0
  221. package/dist/goal-depends-executor.d.ts.map +1 -0
  222. package/dist/goal-depends-executor.js +202 -0
  223. package/dist/goal-depends-executor.js.map +1 -0
  224. package/dist/goal-execution-evidence.d.ts +135 -0
  225. package/dist/goal-execution-evidence.d.ts.map +1 -0
  226. package/dist/goal-execution-evidence.js +159 -0
  227. package/dist/goal-execution-evidence.js.map +1 -0
  228. package/dist/goal-gap.d.ts +140 -0
  229. package/dist/goal-gap.d.ts.map +1 -0
  230. package/dist/goal-gap.js +197 -0
  231. package/dist/goal-gap.js.map +1 -0
  232. package/dist/goal-met-target.d.ts +98 -0
  233. package/dist/goal-met-target.d.ts.map +1 -0
  234. package/dist/goal-met-target.js +92 -0
  235. package/dist/goal-met-target.js.map +1 -0
  236. package/dist/goal-ownership.d.ts +416 -0
  237. package/dist/goal-ownership.d.ts.map +1 -0
  238. package/dist/goal-ownership.js +576 -0
  239. package/dist/goal-ownership.js.map +1 -0
  240. package/dist/goal-runs.d.ts +82 -0
  241. package/dist/goal-runs.d.ts.map +1 -0
  242. package/dist/goal-runs.js +120 -0
  243. package/dist/goal-runs.js.map +1 -0
  244. package/dist/goal-store.d.ts +146 -0
  245. package/dist/goal-store.d.ts.map +1 -0
  246. package/dist/goal-store.js +294 -0
  247. package/dist/goal-store.js.map +1 -0
  248. package/dist/goal-view.d.ts +156 -0
  249. package/dist/goal-view.d.ts.map +1 -0
  250. package/dist/goal-view.js +499 -0
  251. package/dist/goal-view.js.map +1 -0
  252. package/dist/governed-approvals.d.ts +152 -0
  253. package/dist/governed-approvals.d.ts.map +1 -0
  254. package/dist/governed-approvals.js +246 -0
  255. package/dist/governed-approvals.js.map +1 -0
  256. package/dist/governed-broker.d.ts +169 -0
  257. package/dist/governed-broker.d.ts.map +1 -0
  258. package/dist/governed-broker.js +196 -0
  259. package/dist/governed-broker.js.map +1 -0
  260. package/dist/governed-run.d.ts +220 -0
  261. package/dist/governed-run.d.ts.map +1 -0
  262. package/dist/governed-run.js +406 -0
  263. package/dist/governed-run.js.map +1 -0
  264. package/dist/grant-reconcile.d.ts +63 -0
  265. package/dist/grant-reconcile.d.ts.map +1 -0
  266. package/dist/grant-reconcile.js +121 -0
  267. package/dist/grant-reconcile.js.map +1 -0
  268. package/dist/index-for-head.d.ts +56 -0
  269. package/dist/index-for-head.d.ts.map +1 -0
  270. package/dist/index-for-head.js +103 -0
  271. package/dist/index-for-head.js.map +1 -0
  272. package/dist/index.d.ts +39 -0
  273. package/dist/index.d.ts.map +1 -0
  274. package/dist/index.js +55 -0
  275. package/dist/index.js.map +1 -0
  276. package/dist/init-detect.d.ts +39 -0
  277. package/dist/init-detect.d.ts.map +1 -0
  278. package/dist/init-detect.js +188 -0
  279. package/dist/init-detect.js.map +1 -0
  280. package/dist/integration-deps.d.ts +62 -0
  281. package/dist/integration-deps.d.ts.map +1 -0
  282. package/dist/integration-deps.js +251 -0
  283. package/dist/integration-deps.js.map +1 -0
  284. package/dist/integration-runtime.d.ts +458 -0
  285. package/dist/integration-runtime.d.ts.map +1 -0
  286. package/dist/integration-runtime.js +681 -0
  287. package/dist/integration-runtime.js.map +1 -0
  288. package/dist/integration.d.ts +45 -0
  289. package/dist/integration.d.ts.map +1 -0
  290. package/dist/integration.js +87 -0
  291. package/dist/integration.js.map +1 -0
  292. package/dist/integrator.d.ts +84 -0
  293. package/dist/integrator.d.ts.map +1 -0
  294. package/dist/integrator.js +193 -0
  295. package/dist/integrator.js.map +1 -0
  296. package/dist/lane-claims.d.ts +174 -0
  297. package/dist/lane-claims.d.ts.map +1 -0
  298. package/dist/lane-claims.js +218 -0
  299. package/dist/lane-claims.js.map +1 -0
  300. package/dist/lane-coverage.d.ts +87 -0
  301. package/dist/lane-coverage.d.ts.map +1 -0
  302. package/dist/lane-coverage.js +129 -0
  303. package/dist/lane-coverage.js.map +1 -0
  304. package/dist/ledger-replay.d.ts +115 -0
  305. package/dist/ledger-replay.d.ts.map +1 -0
  306. package/dist/ledger-replay.js +155 -0
  307. package/dist/ledger-replay.js.map +1 -0
  308. package/dist/ledger-store.d.ts +68 -0
  309. package/dist/ledger-store.d.ts.map +1 -0
  310. package/dist/ledger-store.js +111 -0
  311. package/dist/ledger-store.js.map +1 -0
  312. package/dist/loop-safety-observer.d.ts +132 -0
  313. package/dist/loop-safety-observer.d.ts.map +1 -0
  314. package/dist/loop-safety-observer.js +76 -0
  315. package/dist/loop-safety-observer.js.map +1 -0
  316. package/dist/loop-safety-store.d.ts +339 -0
  317. package/dist/loop-safety-store.d.ts.map +1 -0
  318. package/dist/loop-safety-store.js +800 -0
  319. package/dist/loop-safety-store.js.map +1 -0
  320. package/dist/machine-store.d.ts +54 -0
  321. package/dist/machine-store.d.ts.map +1 -0
  322. package/dist/machine-store.js +149 -0
  323. package/dist/machine-store.js.map +1 -0
  324. package/dist/mcp-main.d.ts +2 -0
  325. package/dist/mcp-main.d.ts.map +1 -0
  326. package/dist/mcp-main.js +116 -0
  327. package/dist/mcp-main.js.map +1 -0
  328. package/dist/mcp-server.d.ts +72 -0
  329. package/dist/mcp-server.d.ts.map +1 -0
  330. package/dist/mcp-server.js +259 -0
  331. package/dist/mcp-server.js.map +1 -0
  332. package/dist/model-routing.d.ts +75 -0
  333. package/dist/model-routing.d.ts.map +1 -0
  334. package/dist/model-routing.js +108 -0
  335. package/dist/model-routing.js.map +1 -0
  336. package/dist/model-transport.d.ts +188 -0
  337. package/dist/model-transport.d.ts.map +1 -0
  338. package/dist/model-transport.js +625 -0
  339. package/dist/model-transport.js.map +1 -0
  340. package/dist/notify-cadence.d.ts +55 -0
  341. package/dist/notify-cadence.d.ts.map +1 -0
  342. package/dist/notify-cadence.js +68 -0
  343. package/dist/notify-cadence.js.map +1 -0
  344. package/dist/notify-channel.d.ts +69 -0
  345. package/dist/notify-channel.d.ts.map +1 -0
  346. package/dist/notify-channel.js +151 -0
  347. package/dist/notify-channel.js.map +1 -0
  348. package/dist/notify.d.ts +71 -0
  349. package/dist/notify.d.ts.map +1 -0
  350. package/dist/notify.js +125 -0
  351. package/dist/notify.js.map +1 -0
  352. package/dist/observation-inventory.d.ts +65 -0
  353. package/dist/observation-inventory.d.ts.map +1 -0
  354. package/dist/observation-inventory.js +139 -0
  355. package/dist/observation-inventory.js.map +1 -0
  356. package/dist/owned-children.d.ts +45 -0
  357. package/dist/owned-children.d.ts.map +1 -0
  358. package/dist/owned-children.js +64 -0
  359. package/dist/owned-children.js.map +1 -0
  360. package/dist/packet-for-goal.d.ts +19 -0
  361. package/dist/packet-for-goal.d.ts.map +1 -0
  362. package/dist/packet-for-goal.js +32 -0
  363. package/dist/packet-for-goal.js.map +1 -0
  364. package/dist/pair-cmd.d.ts +85 -0
  365. package/dist/pair-cmd.d.ts.map +1 -0
  366. package/dist/pair-cmd.js +205 -0
  367. package/dist/pair-cmd.js.map +1 -0
  368. package/dist/partial-asker.d.ts +96 -0
  369. package/dist/partial-asker.d.ts.map +1 -0
  370. package/dist/partial-asker.js +117 -0
  371. package/dist/partial-asker.js.map +1 -0
  372. package/dist/pdf-text-lines.d.ts +17 -0
  373. package/dist/pdf-text-lines.d.ts.map +1 -0
  374. package/dist/pdf-text-lines.js +70 -0
  375. package/dist/pdf-text-lines.js.map +1 -0
  376. package/dist/pdf-text-worker.d.ts +2 -0
  377. package/dist/pdf-text-worker.d.ts.map +1 -0
  378. package/dist/pdf-text-worker.js +81 -0
  379. package/dist/pdf-text-worker.js.map +1 -0
  380. package/dist/pdf-text.d.ts +56 -0
  381. package/dist/pdf-text.d.ts.map +1 -0
  382. package/dist/pdf-text.js +64 -0
  383. package/dist/pdf-text.js.map +1 -0
  384. package/dist/pending-action.d.ts +154 -0
  385. package/dist/pending-action.d.ts.map +1 -0
  386. package/dist/pending-action.js +148 -0
  387. package/dist/pending-action.js.map +1 -0
  388. package/dist/preemptor.d.ts +40 -0
  389. package/dist/preemptor.d.ts.map +1 -0
  390. package/dist/preemptor.js +49 -0
  391. package/dist/preemptor.js.map +1 -0
  392. package/dist/programme-mode.d.ts +29 -0
  393. package/dist/programme-mode.d.ts.map +1 -0
  394. package/dist/programme-mode.js +50 -0
  395. package/dist/programme-mode.js.map +1 -0
  396. package/dist/progress-view.d.ts +14 -0
  397. package/dist/progress-view.d.ts.map +1 -0
  398. package/dist/progress-view.js +114 -0
  399. package/dist/progress-view.js.map +1 -0
  400. package/dist/project-graph-builder.d.ts +81 -0
  401. package/dist/project-graph-builder.d.ts.map +1 -0
  402. package/dist/project-graph-builder.js +246 -0
  403. package/dist/project-graph-builder.js.map +1 -0
  404. package/dist/project-graph-runtime.d.ts +86 -0
  405. package/dist/project-graph-runtime.d.ts.map +1 -0
  406. package/dist/project-graph-runtime.js +112 -0
  407. package/dist/project-graph-runtime.js.map +1 -0
  408. package/dist/project-index-builder.d.ts +96 -0
  409. package/dist/project-index-builder.d.ts.map +1 -0
  410. package/dist/project-index-builder.js +298 -0
  411. package/dist/project-index-builder.js.map +1 -0
  412. package/dist/project-index-facts.d.ts +51 -0
  413. package/dist/project-index-facts.d.ts.map +1 -0
  414. package/dist/project-index-facts.js +117 -0
  415. package/dist/project-index-facts.js.map +1 -0
  416. package/dist/project-index-store.d.ts +97 -0
  417. package/dist/project-index-store.d.ts.map +1 -0
  418. package/dist/project-index-store.js +140 -0
  419. package/dist/project-index-store.js.map +1 -0
  420. package/dist/project-memory-store.d.ts +127 -0
  421. package/dist/project-memory-store.d.ts.map +1 -0
  422. package/dist/project-memory-store.js +302 -0
  423. package/dist/project-memory-store.js.map +1 -0
  424. package/dist/proposal-store.d.ts +14 -0
  425. package/dist/proposal-store.d.ts.map +1 -0
  426. package/dist/proposal-store.js +19 -0
  427. package/dist/proposal-store.js.map +1 -0
  428. package/dist/prover.d.ts +80 -0
  429. package/dist/prover.d.ts.map +1 -0
  430. package/dist/prover.js +137 -0
  431. package/dist/prover.js.map +1 -0
  432. package/dist/provider-identity-store.d.ts +34 -0
  433. package/dist/provider-identity-store.d.ts.map +1 -0
  434. package/dist/provider-identity-store.js +72 -0
  435. package/dist/provider-identity-store.js.map +1 -0
  436. package/dist/provider-identity.d.ts +104 -0
  437. package/dist/provider-identity.d.ts.map +1 -0
  438. package/dist/provider-identity.js +167 -0
  439. package/dist/provider-identity.js.map +1 -0
  440. package/dist/provider-limit.d.ts +79 -0
  441. package/dist/provider-limit.d.ts.map +1 -0
  442. package/dist/provider-limit.js +148 -0
  443. package/dist/provider-limit.js.map +1 -0
  444. package/dist/provider-preflight.d.ts +171 -0
  445. package/dist/provider-preflight.d.ts.map +1 -0
  446. package/dist/provider-preflight.js +395 -0
  447. package/dist/provider-preflight.js.map +1 -0
  448. package/dist/provider-state.d.ts +120 -0
  449. package/dist/provider-state.d.ts.map +1 -0
  450. package/dist/provider-state.js +182 -0
  451. package/dist/provider-state.js.map +1 -0
  452. package/dist/providers.d.ts +132 -0
  453. package/dist/providers.d.ts.map +1 -0
  454. package/dist/providers.js +161 -0
  455. package/dist/providers.js.map +1 -0
  456. package/dist/publication-recorder.d.ts +117 -0
  457. package/dist/publication-recorder.d.ts.map +1 -0
  458. package/dist/publication-recorder.js +124 -0
  459. package/dist/publication-recorder.js.map +1 -0
  460. package/dist/pursuit-delivery.d.ts +24 -0
  461. package/dist/pursuit-delivery.d.ts.map +1 -0
  462. package/dist/pursuit-delivery.js +38 -0
  463. package/dist/pursuit-delivery.js.map +1 -0
  464. package/dist/queue-store.d.ts +132 -0
  465. package/dist/queue-store.d.ts.map +1 -0
  466. package/dist/queue-store.js +185 -0
  467. package/dist/queue-store.js.map +1 -0
  468. package/dist/queue-summary.d.ts +14 -0
  469. package/dist/queue-summary.d.ts.map +1 -0
  470. package/dist/queue-summary.js +82 -0
  471. package/dist/queue-summary.js.map +1 -0
  472. package/dist/queue-view.d.ts +20 -0
  473. package/dist/queue-view.d.ts.map +1 -0
  474. package/dist/queue-view.js +163 -0
  475. package/dist/queue-view.js.map +1 -0
  476. package/dist/queue-write-lease.d.ts +106 -0
  477. package/dist/queue-write-lease.d.ts.map +1 -0
  478. package/dist/queue-write-lease.js +282 -0
  479. package/dist/queue-write-lease.js.map +1 -0
  480. package/dist/rails-home.d.ts +162 -0
  481. package/dist/rails-home.d.ts.map +1 -0
  482. package/dist/rails-home.js +452 -0
  483. package/dist/rails-home.js.map +1 -0
  484. package/dist/rails-migrations.d.ts +75 -0
  485. package/dist/rails-migrations.d.ts.map +1 -0
  486. package/dist/rails-migrations.js +199 -0
  487. package/dist/rails-migrations.js.map +1 -0
  488. package/dist/rails-stores.d.ts +49 -0
  489. package/dist/rails-stores.d.ts.map +1 -0
  490. package/dist/rails-stores.js +100 -0
  491. package/dist/rails-stores.js.map +1 -0
  492. package/dist/reaper.d.ts +69 -0
  493. package/dist/reaper.d.ts.map +1 -0
  494. package/dist/reaper.js +152 -0
  495. package/dist/reaper.js.map +1 -0
  496. package/dist/record-store.d.ts +36 -0
  497. package/dist/record-store.d.ts.map +1 -0
  498. package/dist/record-store.js +78 -0
  499. package/dist/record-store.js.map +1 -0
  500. package/dist/recovery-io.d.ts +50 -0
  501. package/dist/recovery-io.d.ts.map +1 -0
  502. package/dist/recovery-io.js +122 -0
  503. package/dist/recovery-io.js.map +1 -0
  504. package/dist/recovery.d.ts +146 -0
  505. package/dist/recovery.d.ts.map +1 -0
  506. package/dist/recovery.js +110 -0
  507. package/dist/recovery.js.map +1 -0
  508. package/dist/redraw.d.ts +34 -0
  509. package/dist/redraw.d.ts.map +1 -0
  510. package/dist/redraw.js +62 -0
  511. package/dist/redraw.js.map +1 -0
  512. package/dist/rejected-evidence.d.ts +255 -0
  513. package/dist/rejected-evidence.d.ts.map +1 -0
  514. package/dist/rejected-evidence.js +324 -0
  515. package/dist/rejected-evidence.js.map +1 -0
  516. package/dist/report-cmd.d.ts +32 -0
  517. package/dist/report-cmd.d.ts.map +1 -0
  518. package/dist/report-cmd.js +201 -0
  519. package/dist/report-cmd.js.map +1 -0
  520. package/dist/repos-cmd.d.ts +80 -0
  521. package/dist/repos-cmd.d.ts.map +1 -0
  522. package/dist/repos-cmd.js +240 -0
  523. package/dist/repos-cmd.js.map +1 -0
  524. package/dist/request-body-shape.d.ts +93 -0
  525. package/dist/request-body-shape.d.ts.map +1 -0
  526. package/dist/request-body-shape.js +407 -0
  527. package/dist/request-body-shape.js.map +1 -0
  528. package/dist/requirement-claims.d.ts +89 -0
  529. package/dist/requirement-claims.d.ts.map +1 -0
  530. package/dist/requirement-claims.js +92 -0
  531. package/dist/requirement-claims.js.map +1 -0
  532. package/dist/retention-apply-runtime.d.ts +105 -0
  533. package/dist/retention-apply-runtime.d.ts.map +1 -0
  534. package/dist/retention-apply-runtime.js +269 -0
  535. package/dist/retention-apply-runtime.js.map +1 -0
  536. package/dist/reverify.d.ts +41 -0
  537. package/dist/reverify.d.ts.map +1 -0
  538. package/dist/reverify.js +69 -0
  539. package/dist/reverify.js.map +1 -0
  540. package/dist/round-records.d.ts +65 -0
  541. package/dist/round-records.d.ts.map +1 -0
  542. package/dist/round-records.js +61 -0
  543. package/dist/round-records.js.map +1 -0
  544. package/dist/round-runner.d.ts +924 -0
  545. package/dist/round-runner.d.ts.map +1 -0
  546. package/dist/round-runner.js +1693 -0
  547. package/dist/round-runner.js.map +1 -0
  548. package/dist/run-approval.d.ts +180 -0
  549. package/dist/run-approval.d.ts.map +1 -0
  550. package/dist/run-approval.js +199 -0
  551. package/dist/run-approval.js.map +1 -0
  552. package/dist/run-cmd.d.ts +359 -0
  553. package/dist/run-cmd.d.ts.map +1 -0
  554. package/dist/run-cmd.js +4418 -0
  555. package/dist/run-cmd.js.map +1 -0
  556. package/dist/run-delivery.d.ts +71 -0
  557. package/dist/run-delivery.d.ts.map +1 -0
  558. package/dist/run-delivery.js +104 -0
  559. package/dist/run-delivery.js.map +1 -0
  560. package/dist/run-ended.d.ts +75 -0
  561. package/dist/run-ended.d.ts.map +1 -0
  562. package/dist/run-ended.js +27 -0
  563. package/dist/run-ended.js.map +1 -0
  564. package/dist/run-ending-locator.d.ts +125 -0
  565. package/dist/run-ending-locator.d.ts.map +1 -0
  566. package/dist/run-ending-locator.js +133 -0
  567. package/dist/run-ending-locator.js.map +1 -0
  568. package/dist/run-launcher.d.ts +459 -0
  569. package/dist/run-launcher.d.ts.map +1 -0
  570. package/dist/run-launcher.js +652 -0
  571. package/dist/run-launcher.js.map +1 -0
  572. package/dist/run-lease.d.ts +208 -0
  573. package/dist/run-lease.d.ts.map +1 -0
  574. package/dist/run-lease.js +301 -0
  575. package/dist/run-lease.js.map +1 -0
  576. package/dist/run-refusal-marks.d.ts +189 -0
  577. package/dist/run-refusal-marks.d.ts.map +1 -0
  578. package/dist/run-refusal-marks.js +249 -0
  579. package/dist/run-refusal-marks.js.map +1 -0
  580. package/dist/run-start-marks.d.ts +153 -0
  581. package/dist/run-start-marks.d.ts.map +1 -0
  582. package/dist/run-start-marks.js +269 -0
  583. package/dist/run-start-marks.js.map +1 -0
  584. package/dist/scan-cmd.d.ts +14 -0
  585. package/dist/scan-cmd.d.ts.map +1 -0
  586. package/dist/scan-cmd.js +270 -0
  587. package/dist/scan-cmd.js.map +1 -0
  588. package/dist/scan-events.d.ts +50 -0
  589. package/dist/scan-events.d.ts.map +1 -0
  590. package/dist/scan-events.js +91 -0
  591. package/dist/scan-events.js.map +1 -0
  592. package/dist/scan.d.ts +191 -0
  593. package/dist/scan.d.ts.map +1 -0
  594. package/dist/scan.js +417 -0
  595. package/dist/scan.js.map +1 -0
  596. package/dist/scope-rule.d.ts +148 -0
  597. package/dist/scope-rule.d.ts.map +1 -0
  598. package/dist/scope-rule.js +121 -0
  599. package/dist/scope-rule.js.map +1 -0
  600. package/dist/self-repo-id.d.ts +18 -0
  601. package/dist/self-repo-id.d.ts.map +1 -0
  602. package/dist/self-repo-id.js +70 -0
  603. package/dist/self-repo-id.js.map +1 -0
  604. package/dist/server-client.d.ts +766 -0
  605. package/dist/server-client.d.ts.map +1 -0
  606. package/dist/server-client.js +475 -0
  607. package/dist/server-client.js.map +1 -0
  608. package/dist/session-adapter-runtime.d.ts +195 -0
  609. package/dist/session-adapter-runtime.d.ts.map +1 -0
  610. package/dist/session-adapter-runtime.js +373 -0
  611. package/dist/session-adapter-runtime.js.map +1 -0
  612. package/dist/session-checkpoint-runtime.d.ts +62 -0
  613. package/dist/session-checkpoint-runtime.d.ts.map +1 -0
  614. package/dist/session-checkpoint-runtime.js +268 -0
  615. package/dist/session-checkpoint-runtime.js.map +1 -0
  616. package/dist/session-control-transport.d.ts +106 -0
  617. package/dist/session-control-transport.d.ts.map +1 -0
  618. package/dist/session-control-transport.js +232 -0
  619. package/dist/session-control-transport.js.map +1 -0
  620. package/dist/session-observation-store.d.ts +98 -0
  621. package/dist/session-observation-store.d.ts.map +1 -0
  622. package/dist/session-observation-store.js +155 -0
  623. package/dist/session-observation-store.js.map +1 -0
  624. package/dist/session-observe-runtime.d.ts +123 -0
  625. package/dist/session-observe-runtime.d.ts.map +1 -0
  626. package/dist/session-observe-runtime.js +317 -0
  627. package/dist/session-observe-runtime.js.map +1 -0
  628. package/dist/session-store.d.ts +98 -0
  629. package/dist/session-store.d.ts.map +1 -0
  630. package/dist/session-store.js +116 -0
  631. package/dist/session-store.js.map +1 -0
  632. package/dist/sessions-cmd.d.ts +202 -0
  633. package/dist/sessions-cmd.d.ts.map +1 -0
  634. package/dist/sessions-cmd.js +609 -0
  635. package/dist/sessions-cmd.js.map +1 -0
  636. package/dist/settings-overlay.d.ts +53 -0
  637. package/dist/settings-overlay.d.ts.map +1 -0
  638. package/dist/settings-overlay.js +175 -0
  639. package/dist/settings-overlay.js.map +1 -0
  640. package/dist/setup-prompt.d.ts +34 -0
  641. package/dist/setup-prompt.d.ts.map +1 -0
  642. package/dist/setup-prompt.js +92 -0
  643. package/dist/setup-prompt.js.map +1 -0
  644. package/dist/setup.d.ts +103 -0
  645. package/dist/setup.d.ts.map +1 -0
  646. package/dist/setup.js +283 -0
  647. package/dist/setup.js.map +1 -0
  648. package/dist/shared-grants.d.ts +164 -0
  649. package/dist/shared-grants.d.ts.map +1 -0
  650. package/dist/shared-grants.js +242 -0
  651. package/dist/shared-grants.js.map +1 -0
  652. package/dist/signals.d.ts +55 -0
  653. package/dist/signals.d.ts.map +1 -0
  654. package/dist/signals.js +85 -0
  655. package/dist/signals.js.map +1 -0
  656. package/dist/source-cmd.d.ts +201 -0
  657. package/dist/source-cmd.d.ts.map +1 -0
  658. package/dist/source-cmd.js +684 -0
  659. package/dist/source-cmd.js.map +1 -0
  660. package/dist/source-verdict.d.ts +99 -0
  661. package/dist/source-verdict.d.ts.map +1 -0
  662. package/dist/source-verdict.js +182 -0
  663. package/dist/source-verdict.js.map +1 -0
  664. package/dist/spend-ledger.d.ts +350 -0
  665. package/dist/spend-ledger.d.ts.map +1 -0
  666. package/dist/spend-ledger.js +546 -0
  667. package/dist/spend-ledger.js.map +1 -0
  668. package/dist/stale-run-sweep.d.ts +79 -0
  669. package/dist/stale-run-sweep.d.ts.map +1 -0
  670. package/dist/stale-run-sweep.js +116 -0
  671. package/dist/stale-run-sweep.js.map +1 -0
  672. package/dist/start-attempts.d.ts +385 -0
  673. package/dist/start-attempts.d.ts.map +1 -0
  674. package/dist/start-attempts.js +613 -0
  675. package/dist/start-attempts.js.map +1 -0
  676. package/dist/status-cmd.d.ts +28 -0
  677. package/dist/status-cmd.d.ts.map +1 -0
  678. package/dist/status-cmd.js +116 -0
  679. package/dist/status-cmd.js.map +1 -0
  680. package/dist/stop-follow-up.d.ts +107 -0
  681. package/dist/stop-follow-up.d.ts.map +1 -0
  682. package/dist/stop-follow-up.js +172 -0
  683. package/dist/stop-follow-up.js.map +1 -0
  684. package/dist/surface-lease.d.ts +118 -0
  685. package/dist/surface-lease.d.ts.map +1 -0
  686. package/dist/surface-lease.js +485 -0
  687. package/dist/surface-lease.js.map +1 -0
  688. package/dist/sync.d.ts +54 -0
  689. package/dist/sync.d.ts.map +1 -0
  690. package/dist/sync.js +93 -0
  691. package/dist/sync.js.map +1 -0
  692. package/dist/syncing-ledger.d.ts +45 -0
  693. package/dist/syncing-ledger.d.ts.map +1 -0
  694. package/dist/syncing-ledger.js +53 -0
  695. package/dist/syncing-ledger.js.map +1 -0
  696. package/dist/temp-fixtures.d.ts +68 -0
  697. package/dist/temp-fixtures.d.ts.map +1 -0
  698. package/dist/temp-fixtures.js +38 -0
  699. package/dist/temp-fixtures.js.map +1 -0
  700. package/dist/token-window.d.ts +84 -0
  701. package/dist/token-window.d.ts.map +1 -0
  702. package/dist/token-window.js +143 -0
  703. package/dist/token-window.js.map +1 -0
  704. package/dist/tool-bridge.d.ts +177 -0
  705. package/dist/tool-bridge.d.ts.map +1 -0
  706. package/dist/tool-bridge.js +329 -0
  707. package/dist/tool-bridge.js.map +1 -0
  708. package/dist/tool-call-record.d.ts +197 -0
  709. package/dist/tool-call-record.d.ts.map +1 -0
  710. package/dist/tool-call-record.js +276 -0
  711. package/dist/tool-call-record.js.map +1 -0
  712. package/dist/tool-protocol.d.ts +135 -0
  713. package/dist/tool-protocol.d.ts.map +1 -0
  714. package/dist/tool-protocol.js +104 -0
  715. package/dist/tool-protocol.js.map +1 -0
  716. package/dist/tool-worker.d.ts +3 -0
  717. package/dist/tool-worker.d.ts.map +1 -0
  718. package/dist/tool-worker.js +478 -0
  719. package/dist/tool-worker.js.map +1 -0
  720. package/dist/toolchain-mirror.d.ts +86 -0
  721. package/dist/toolchain-mirror.d.ts.map +1 -0
  722. package/dist/toolchain-mirror.js +307 -0
  723. package/dist/toolchain-mirror.js.map +1 -0
  724. package/dist/trusted-git.d.ts +243 -0
  725. package/dist/trusted-git.d.ts.map +1 -0
  726. package/dist/trusted-git.js +920 -0
  727. package/dist/trusted-git.js.map +1 -0
  728. package/dist/ui.d.ts +76 -0
  729. package/dist/ui.d.ts.map +1 -0
  730. package/dist/ui.js +118 -0
  731. package/dist/ui.js.map +1 -0
  732. package/dist/untrusted-exec.d.ts +275 -0
  733. package/dist/untrusted-exec.d.ts.map +1 -0
  734. package/dist/untrusted-exec.js +479 -0
  735. package/dist/untrusted-exec.js.map +1 -0
  736. package/dist/untrusted-gate.d.ts +73 -0
  737. package/dist/untrusted-gate.d.ts.map +1 -0
  738. package/dist/untrusted-gate.js +226 -0
  739. package/dist/untrusted-gate.js.map +1 -0
  740. package/dist/uploader.d.ts +153 -0
  741. package/dist/uploader.d.ts.map +1 -0
  742. package/dist/uploader.js +204 -0
  743. package/dist/uploader.js.map +1 -0
  744. package/dist/verifier.d.ts +66 -0
  745. package/dist/verifier.d.ts.map +1 -0
  746. package/dist/verifier.js +170 -0
  747. package/dist/verifier.js.map +1 -0
  748. package/dist/verify-apply.d.ts +26 -0
  749. package/dist/verify-apply.d.ts.map +1 -0
  750. package/dist/verify-apply.js +36 -0
  751. package/dist/verify-apply.js.map +1 -0
  752. package/dist/verify-cmd.d.ts +44 -0
  753. package/dist/verify-cmd.d.ts.map +1 -0
  754. package/dist/verify-cmd.js +125 -0
  755. package/dist/verify-cmd.js.map +1 -0
  756. package/dist/verify-pass.d.ts +73 -0
  757. package/dist/verify-pass.d.ts.map +1 -0
  758. package/dist/verify-pass.js +103 -0
  759. package/dist/verify-pass.js.map +1 -0
  760. package/dist/welcome.d.ts +43 -0
  761. package/dist/welcome.d.ts.map +1 -0
  762. package/dist/welcome.js +116 -0
  763. package/dist/welcome.js.map +1 -0
  764. package/dist/workspace-provisioner.d.ts +65 -0
  765. package/dist/workspace-provisioner.d.ts.map +1 -0
  766. package/dist/workspace-provisioner.js +66 -0
  767. package/dist/workspace-provisioner.js.map +1 -0
  768. package/dist/workspace-quarantine.d.ts +64 -0
  769. package/dist/workspace-quarantine.d.ts.map +1 -0
  770. package/dist/workspace-quarantine.js +156 -0
  771. package/dist/workspace-quarantine.js.map +1 -0
  772. package/dist/workspace-residue-sweep.d.ts +113 -0
  773. package/dist/workspace-residue-sweep.d.ts.map +1 -0
  774. package/dist/workspace-residue-sweep.js +158 -0
  775. package/dist/workspace-residue-sweep.js.map +1 -0
  776. package/dist/workspace.d.ts +639 -0
  777. package/dist/workspace.d.ts.map +1 -0
  778. package/dist/workspace.js +2026 -0
  779. package/dist/workspace.js.map +1 -0
  780. package/package.json +54 -6
  781. package/win/CredProbe.cs +64 -0
  782. package/win/FakeClaude.cs +56 -0
  783. package/win/HandleProbe.cs +116 -0
  784. package/win/TokenProbe.cs +53 -0
  785. package/win/appcontainer.ps1 +500 -0
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handle = handle;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ /**
7
+ * THE ONLY THING THAT TOUCHES PROJECT FILES.
8
+ *
9
+ * Every read, search, edit and write the model asks for happens HERE, inside an
10
+ * AppContainer granted the worktree and nothing else. The bridge above is
11
+ * trusted code, but it deliberately performs no filesystem work of its own: if
12
+ * its path checking were wrong tomorrow, this process still could not reach
13
+ * `.git`, `.looply/state`, another project or the daemon's home, because it was
14
+ * never granted them.
15
+ *
16
+ * SELF-CONTAINED BY CONSTRUCTION. It imports node builtins and one TYPE, so the
17
+ * emitted file requires nothing from the package and can be copied somewhere
18
+ * the container reads. Project root on argv, request on stdin, answer on stdout.
19
+ *
20
+ * IT SPAWNS NOTHING, and that is not an aesthetic choice: an AppContainer
21
+ * cannot create the named pipes libuv uses for piped stdio, so a child spawned
22
+ * with pipes hangs for ever. Doing the work in-process is what makes this whole
23
+ * architecture possible.
24
+ */
25
+ const LIMITS = {
26
+ readBytes: 256 * 1024,
27
+ readLines: 4000,
28
+ globPaths: 1000,
29
+ grepMatches: 200,
30
+ writeBytes: 1024 * 1024,
31
+ walkFiles: 20_000,
32
+ };
33
+ /**
34
+ * Separators from char codes. An escaped backslash in this repository has been
35
+ * collapsed by tooling several times, and a path check that silently stops
36
+ * matching is the worst thing here to get wrong.
37
+ */
38
+ const BS = String.fromCharCode(92);
39
+ const SL = String.fromCharCode(47);
40
+ const NL = String.fromCharCode(10);
41
+ const NUL = String.fromCharCode(0);
42
+ function fail(tool, code, because) {
43
+ return { ok: false, tool, because, code };
44
+ }
45
+ /** Project-relative, in one spelling, so comparisons mean something. */
46
+ function toPosix(p) {
47
+ return p.split(BS).join(SL);
48
+ }
49
+ function physical(p) {
50
+ try {
51
+ return node_fs_1.realpathSync.native(p);
52
+ }
53
+ catch {
54
+ return (0, node_path_1.resolve)(p);
55
+ }
56
+ }
57
+ /** The real path of `p`, or of the closest ancestor that exists. */
58
+ function physicalNearest(p) {
59
+ let cur = (0, node_path_1.resolve)(p);
60
+ for (let i = 0; i < 64; i += 1) {
61
+ if ((0, node_fs_1.existsSync)(cur))
62
+ return physical(cur);
63
+ const up = (0, node_path_1.dirname)(cur);
64
+ if (up === cur)
65
+ return cur;
66
+ cur = up;
67
+ }
68
+ return cur;
69
+ }
70
+ function within(root, p) {
71
+ let a = root.toLowerCase();
72
+ while (a.endsWith(node_path_1.sep) || a.endsWith(SL))
73
+ a = a.slice(0, -1);
74
+ const b = p.toLowerCase();
75
+ return b === a || b.startsWith(a + node_path_1.sep.toLowerCase()) || b.startsWith(a + SL);
76
+ }
77
+ /**
78
+ * Names a model may not read, whatever else it may do in this project.
79
+ *
80
+ * 🔴 THE PROJECT GRANT WAS THE ONLY GATE, AND IT IS THE WRONG SHAPE. The
81
+ * container grants the worktree so the model can work on the code, and the walk
82
+ * skipped exactly three DIRECTORY names — `.git`, `.looply`, `node_modules`.
83
+ * Nothing else was excluded and nothing read `.gitignore`, so `.env` and every
84
+ * credential cache sitting under a project root were listable, greppable and
85
+ * readable by a model-requested tool call.
86
+ *
87
+ * ⚠️ NOT `.gitignore`. An ignore file says what version control should skip; it
88
+ * is not an authorization policy, it is absent from most trees that need this
89
+ * most, and — decisively — it is a file inside the worktree that the model may
90
+ * EDIT. A protection a worker can rewrite is not a protection. This list is
91
+ * compiled in, and there is no configuration that removes an entry from it.
92
+ *
93
+ * ⚠️ AND NOT `protectedPaths`. That list is enforced by the OS, by purging the
94
+ * container SID, which is stronger — but it is shared with the GATE domain, and
95
+ * a gate step running the project's own tests may legitimately need `.env`.
96
+ * Denying it there would break ordinary builds to close a model-facing hole.
97
+ * The domains differ, so the check lives on the model-facing side only.
98
+ *
99
+ * ⚠️ THIS IS NOT CONFINEMENT OF THE PROVIDER EXECUTABLE. It governs what the
100
+ * MODEL may ask Looply's tools to do. The provider process itself still runs
101
+ * with host-user authority and can read these files directly; that is a
102
+ * separate, unchanged trust statement.
103
+ *
104
+ * Matched on the BASENAME of every segment, so a directory of secrets is
105
+ * refused along with a file, and case-insensitively, because Windows would
106
+ * otherwise let `.ENV` through a list written in lower case.
107
+ */
108
+ /*
109
+ * ⚠️ `.git` AND `.looply` ARE DELIBERATELY ABSENT. They are protected by the
110
+ * OS: `protectedPaths` purges the container SID from them, and two tests assert
111
+ * the refusal arrives as EPERM precisely because it came from Windows "rather
112
+ * than from any check of ours". Adding them here would short-circuit that with
113
+ * a lexical refusal and quietly retire the stronger proof. This list covers
114
+ * only what the container grant does NOT already deny.
115
+ */
116
+ const SENSITIVE_BASENAMES = new Set([
117
+ '.npmrc',
118
+ '.netrc',
119
+ '_netrc',
120
+ '.pgpass',
121
+ '.htpasswd',
122
+ 'id_rsa',
123
+ 'id_ed25519',
124
+ 'credentials',
125
+ 'secrets.json',
126
+ ]);
127
+ /** `.env`, `.env.local`, `.env.production` — the whole family, not one name. */
128
+ function isSensitiveName(seg) {
129
+ const s = seg.toLowerCase();
130
+ if (SENSITIVE_BASENAMES.has(s))
131
+ return true;
132
+ if (s === '.env' || s.startsWith('.env.'))
133
+ return true;
134
+ // `.pem`/`.pfx`/`.p12` are key material whatever they are called.
135
+ if (s.endsWith('.pem') || s.endsWith('.pfx') || s.endsWith('.p12') || s.endsWith('.key')) {
136
+ return true;
137
+ }
138
+ return false;
139
+ }
140
+ function isSensitive(rel) {
141
+ return toPosix(rel)
142
+ .split(SL)
143
+ .some((seg) => seg.length > 0 && isSensitiveName(seg));
144
+ }
145
+ /**
146
+ * The path this request really names, or why it may not have one.
147
+ *
148
+ * TWO CHECKS, AND THE SECOND IS THE ONE THAT MATTERS. The lexical check catches
149
+ * `..`, drive letters and UNC. The PHYSICAL check resolves reparse points: a
150
+ * junction inside the worktree pointing at the daemon's home is an ordinary
151
+ * relative path lexically, and only following it shows where it lands. For a
152
+ * file that does not exist yet the nearest existing ancestor is resolved
153
+ * instead, because a write through a junctioned directory is the same escape.
154
+ */
155
+ function insideProject(root, tool, rel) {
156
+ if (typeof rel !== 'string' || rel.length === 0) {
157
+ return fail(tool, 'bad_request', 'a path is required');
158
+ }
159
+ if (rel.indexOf(NUL) >= 0)
160
+ return fail(tool, 'path_not_allowed', 'null byte in path');
161
+ if (toPosix(rel).split(SL).some((s) => s === '..')) {
162
+ return fail(tool, 'path_not_allowed', 'a path may not leave the project');
163
+ }
164
+ if (/^[A-Za-z]:/.test(rel) || rel.startsWith(SL) || rel.startsWith(BS)) {
165
+ return fail(tool, 'path_not_allowed', 'paths are project-relative');
166
+ }
167
+ // An alternate data stream is a second file hiding behind an ordinary name,
168
+ // and `resolve` keeps it silently. Checked here as well as in the bridge,
169
+ // because this is the side that is actually inside the boundary.
170
+ if (toPosix(rel).split(SL).some((seg) => seg.includes(':'))) {
171
+ return fail(tool, 'path_not_allowed', 'a path may not name a stream');
172
+ }
173
+ const abs = (0, node_path_1.resolve)(root, rel);
174
+ if (!within((0, node_path_1.resolve)(root), abs)) {
175
+ return fail(tool, 'path_not_allowed', 'that path is outside the project');
176
+ }
177
+ if (!within(physical(root), physicalNearest(abs))) {
178
+ return fail(tool, 'path_not_allowed', 'that path resolves outside the project');
179
+ }
180
+ if (isSensitive(rel)) {
181
+ return fail(tool, 'path_not_allowed', 'that path is not readable by a model');
182
+ }
183
+ return { abs };
184
+ }
185
+ /** A glob, as a regular expression over project-relative POSIX paths. */
186
+ function globToRe(pattern) {
187
+ let out = '^';
188
+ for (let i = 0; i < pattern.length; i += 1) {
189
+ const c = pattern[i];
190
+ if (c === '*' && pattern[i + 1] === '*') {
191
+ out += '.*';
192
+ i += 1;
193
+ if (pattern[i + 1] === SL)
194
+ i += 1;
195
+ }
196
+ else if (c === '*') {
197
+ out += '[^' + SL + ']*';
198
+ }
199
+ else if (c === '?') {
200
+ out += '[^' + SL + ']';
201
+ }
202
+ else if (/[a-zA-Z0-9_-]/.test(c)) {
203
+ out += c;
204
+ }
205
+ else {
206
+ out += BS + c;
207
+ }
208
+ }
209
+ return new RegExp(out + '$', 'i');
210
+ }
211
+ /** Everything under `root`, project-relative, bounded. */
212
+ function walk(root, under) {
213
+ const files = [];
214
+ const stack = [(0, node_path_1.resolve)(root, under)];
215
+ while (stack.length > 0) {
216
+ const dir = stack.pop();
217
+ let entries;
218
+ try {
219
+ entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
220
+ }
221
+ catch {
222
+ continue;
223
+ }
224
+ for (const e of entries) {
225
+ const abs = (0, node_path_1.join)(dir, e.name);
226
+ if (e.isDirectory()) {
227
+ // Never walked, never listed. The container refuses `.git` and
228
+ // `.looply` anyway; skipping keeps ordinary results clean rather than
229
+ // half-denied, and `node_modules` is noise rather than secrets.
230
+ if (e.name === '.git' || e.name === '.looply' || e.name === 'node_modules')
231
+ continue;
232
+ if (isSensitiveName(e.name))
233
+ continue;
234
+ stack.push(abs);
235
+ continue;
236
+ }
237
+ // 🔴 LISTING IS DISCLOSURE TOO. A refused read is worth little if `glob`
238
+ // still returns `.env.production` and `grep` still reports a line from
239
+ // it — the filename alone tells a model where to aim, and grep would
240
+ // hand over the contents outright.
241
+ if (isSensitiveName(e.name))
242
+ continue;
243
+ if (files.length >= LIMITS.walkFiles)
244
+ return { files, truncated: true };
245
+ files.push(toPosix((0, node_path_1.relative)(root, abs)));
246
+ }
247
+ }
248
+ return { files, truncated: false };
249
+ }
250
+ function isText(buf) {
251
+ const n = Math.min(buf.length, 8192);
252
+ for (let i = 0; i < n; i += 1)
253
+ if (buf[i] === 0)
254
+ return false;
255
+ return true;
256
+ }
257
+ function readTextAt(abs, tool, shown) {
258
+ let buf;
259
+ try {
260
+ buf = (0, node_fs_1.readFileSync)(abs);
261
+ }
262
+ catch (e) {
263
+ const code = e.code;
264
+ if (code === 'ENOENT')
265
+ return fail(tool, 'not_found', 'no such file: ' + shown);
266
+ return fail(tool, 'denied', 'cannot read ' + shown + ' (' + (code ?? 'error') + ')');
267
+ }
268
+ if (!isText(buf))
269
+ return fail(tool, 'not_text', shown + ' is not a text file');
270
+ return { text: buf.toString('utf8') };
271
+ }
272
+ /** Temp then rename, so a reader never sees a half-written file. */
273
+ function atomicWrite(abs, text) {
274
+ const tmp = abs + '.looply-tmp';
275
+ try {
276
+ (0, node_fs_1.writeFileSync)(tmp, text, 'utf8');
277
+ (0, node_fs_1.renameSync)(tmp, abs);
278
+ return null;
279
+ }
280
+ catch (e) {
281
+ // Leave nothing behind. A rename onto a protected path fails AFTER the temp
282
+ // file exists, and a refused write that litters the worktree is a refused
283
+ // write the next round has to explain.
284
+ try {
285
+ if ((0, node_fs_1.existsSync)(tmp))
286
+ (0, node_fs_1.unlinkSync)(tmp);
287
+ }
288
+ catch {
289
+ /* best effort */
290
+ }
291
+ const code = e.code;
292
+ return 'cannot write (' + (code ?? e.message) + ')';
293
+ }
294
+ }
295
+ function handle(root, req) {
296
+ if (req === null || typeof req !== 'object') {
297
+ return fail('unknown', 'bad_request', 'a tool request is required');
298
+ }
299
+ if (req.tool === 'read') {
300
+ const p = insideProject(root, 'read', req.path);
301
+ if ('ok' in p)
302
+ return p;
303
+ const r = readTextAt(p.abs, 'read', req.path);
304
+ if ('ok' in r)
305
+ return r;
306
+ const all = r.text.split(NL);
307
+ const from = Math.max(1, req.fromLine ?? 1);
308
+ const to = Math.min(all.length, req.toLine ?? all.length);
309
+ let lines = all.slice(from - 1, to);
310
+ let truncated = false;
311
+ if (lines.length > LIMITS.readLines) {
312
+ lines = lines.slice(0, LIMITS.readLines);
313
+ truncated = true;
314
+ }
315
+ let text = lines.join(NL);
316
+ if (Buffer.byteLength(text, 'utf8') > LIMITS.readBytes) {
317
+ text = text.slice(0, LIMITS.readBytes);
318
+ truncated = true;
319
+ }
320
+ return { ok: true, tool: 'read', text, truncated, bytes: Buffer.byteLength(text, 'utf8') };
321
+ }
322
+ if (req.tool === 'glob') {
323
+ if (typeof req.pattern !== 'string' || req.pattern.length === 0) {
324
+ return fail('glob', 'bad_request', 'a pattern is required');
325
+ }
326
+ const under = req.under ?? '';
327
+ if (under !== '') {
328
+ const u = insideProject(root, 'glob', under);
329
+ if ('ok' in u)
330
+ return u;
331
+ }
332
+ const re = globToRe(toPosix(req.pattern));
333
+ const w = walk(root, under);
334
+ let hits = w.files.filter((f) => re.test(f));
335
+ let truncated = w.truncated;
336
+ if (hits.length > LIMITS.globPaths) {
337
+ hits = hits.slice(0, LIMITS.globPaths);
338
+ truncated = true;
339
+ }
340
+ return { ok: true, tool: 'glob', text: hits.join(NL), truncated };
341
+ }
342
+ if (req.tool === 'grep') {
343
+ let re;
344
+ try {
345
+ re = new RegExp(req.pattern, req.ignoreCase === true ? 'i' : '');
346
+ }
347
+ catch (e) {
348
+ return fail('grep', 'bad_request', 'that is not a valid pattern: ' + e.message);
349
+ }
350
+ const under = req.under ?? '';
351
+ if (under !== '') {
352
+ const u = insideProject(root, 'grep', under);
353
+ if ('ok' in u)
354
+ return u;
355
+ }
356
+ const inc = req.include === undefined ? null : globToRe(toPosix(req.include));
357
+ const w = walk(root, under);
358
+ const out = [];
359
+ for (const f of w.files) {
360
+ if (inc !== null && !inc.test(f))
361
+ continue;
362
+ let buf;
363
+ try {
364
+ buf = (0, node_fs_1.readFileSync)((0, node_path_1.resolve)(root, f));
365
+ }
366
+ catch {
367
+ continue;
368
+ }
369
+ if (!isText(buf))
370
+ continue;
371
+ const lines = buf.toString('utf8').split(NL);
372
+ for (let i = 0; i < lines.length; i += 1) {
373
+ const line = lines[i];
374
+ if (!re.test(line))
375
+ continue;
376
+ out.push(f + ':' + String(i + 1) + ':' + line.slice(0, 400));
377
+ if (out.length >= LIMITS.grepMatches) {
378
+ return { ok: true, tool: 'grep', text: out.join(NL), truncated: true };
379
+ }
380
+ }
381
+ }
382
+ return { ok: true, tool: 'grep', text: out.join(NL), truncated: w.truncated };
383
+ }
384
+ if (req.tool === 'edit') {
385
+ const p = insideProject(root, 'edit', req.path);
386
+ if ('ok' in p)
387
+ return p;
388
+ if (typeof req.oldText !== 'string' || req.oldText.length === 0) {
389
+ return fail('edit', 'bad_request', 'oldText is required');
390
+ }
391
+ if (typeof req.newText !== 'string')
392
+ return fail('edit', 'bad_request', 'newText is required');
393
+ const r = readTextAt(p.abs, 'edit', req.path);
394
+ if ('ok' in r)
395
+ return r;
396
+ // COUNTED, NOT FUZZY. An edit that states what it expects can be applied at
397
+ // most once: replaying it finds the text gone and fails, which is what makes
398
+ // a retried turn safe rather than quietly destructive.
399
+ const want = req.expected ?? 1;
400
+ let seen = 0;
401
+ let at = r.text.indexOf(req.oldText);
402
+ while (at >= 0) {
403
+ seen += 1;
404
+ at = r.text.indexOf(req.oldText, at + req.oldText.length);
405
+ }
406
+ if (seen !== want) {
407
+ return fail('edit', 'precondition_failed', 'expected ' + String(want) + ' occurrence(s) in ' + req.path + ', found ' + String(seen));
408
+ }
409
+ const next = r.text.split(req.oldText).join(req.newText);
410
+ if (Buffer.byteLength(next, 'utf8') > LIMITS.writeBytes) {
411
+ return fail('edit', 'too_large', 'the result would be too large');
412
+ }
413
+ const w = atomicWrite(p.abs, next);
414
+ if (w !== null)
415
+ return fail('edit', 'denied', w);
416
+ return {
417
+ ok: true,
418
+ tool: 'edit',
419
+ text: 'replaced ' + String(seen) + ' occurrence(s) in ' + req.path,
420
+ bytes: Buffer.byteLength(next, 'utf8'),
421
+ };
422
+ }
423
+ if (req.tool === 'write') {
424
+ const p = insideProject(root, 'write', req.path);
425
+ if ('ok' in p)
426
+ return p;
427
+ if (typeof req.contents !== 'string') {
428
+ return fail('write', 'bad_request', 'contents are required');
429
+ }
430
+ if (req.intent !== 'create' && req.intent !== 'overwrite') {
431
+ return fail('write', 'bad_request', 'intent must be create or overwrite');
432
+ }
433
+ if (Buffer.byteLength(req.contents, 'utf8') > LIMITS.writeBytes) {
434
+ return fail('write', 'too_large', 'that is too large to write');
435
+ }
436
+ const there = (0, node_fs_1.existsSync)(p.abs);
437
+ if (req.intent === 'create' && there) {
438
+ return fail('write', 'precondition_failed', req.path + ' already exists');
439
+ }
440
+ if (req.intent === 'overwrite' && !there) {
441
+ return fail('write', 'precondition_failed', req.path + ' does not exist');
442
+ }
443
+ try {
444
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(p.abs), { recursive: true });
445
+ }
446
+ catch {
447
+ /* the write below reports it */
448
+ }
449
+ const w = atomicWrite(p.abs, req.contents);
450
+ if (w !== null)
451
+ return fail('write', 'denied', w);
452
+ return {
453
+ ok: true,
454
+ tool: 'write',
455
+ text: 'wrote ' + req.path,
456
+ bytes: Buffer.byteLength(req.contents, 'utf8'),
457
+ };
458
+ }
459
+ return fail('unknown', 'bad_request', 'no such tool');
460
+ }
461
+ /* c8 ignore start -- the entry point, exercised through real contained runs. */
462
+ if (require.main === module) {
463
+ const root = process.argv[2];
464
+ const chunks = [];
465
+ process.stdin.on('data', (d) => chunks.push(d));
466
+ process.stdin.on('end', () => {
467
+ let out;
468
+ try {
469
+ out = handle(root, JSON.parse(Buffer.concat(chunks).toString('utf8')));
470
+ }
471
+ catch (e) {
472
+ out = fail('unknown', 'bad_request', 'unreadable request: ' + e.message);
473
+ }
474
+ process.stdout.write(JSON.stringify(out));
475
+ });
476
+ }
477
+ /* c8 ignore stop */
478
+ //# sourceMappingURL=tool-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-worker.js","sourceRoot":"","sources":["../src/tool-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * A COPY OF THE RUNTIME THAT UNTRUSTED CODE IS ALLOWED TO EXECUTE.
3
+ *
4
+ * A contained process can run an image the launcher resolved for it, but it
5
+ * cannot resolve or spawn anything itself outside what it was granted. So the
6
+ * gate could not run `node check.js`: inside the container, `node` is not
7
+ * findable. And the installed toolchain cannot simply be granted — on this
8
+ * machine `node.exe` carries no app-container ACE, and the directory it appears
9
+ * in is `C:\Program Files\nodejs`, which an ordinary user cannot re-permission.
10
+ *
11
+ * So Looply keeps its own copy somewhere the user owns, and grants the
12
+ * container read-and-execute on that.
13
+ *
14
+ * THE CONTENTS ARE POLICY, NOT CONVENIENCE. Every file mirrored is another
15
+ * thing project code may execute, so this copies the runtime and the package
16
+ * manager and stops. It deliberately does NOT mirror the directory it came
17
+ * from: on this machine that directory also holds `claude`, `eas` and `heroku`
18
+ * shims, and a gate that could run those would be a gate that could deploy.
19
+ *
20
+ * WHAT THIS IS NOT: protection from a compromised host toolchain. The daemon
21
+ * reads the machine's own Node installation and trusts it. Host integrity is
22
+ * somebody else's problem, and a later phase's.
23
+ */
24
+ /** What the mirror was built from, and what it contains. */
25
+ export interface ToolchainManifest {
26
+ id: string;
27
+ nodeVersion: string;
28
+ npmVersion: string | null;
29
+ source: string;
30
+ /** Size of the source runtime, part of the identity. */
31
+ sourceBytes: number;
32
+ files: readonly string[];
33
+ createdAt: string;
34
+ }
35
+ export interface ToolchainDeps {
36
+ /** Where mirrors live. Overridable so tests never touch the real one. */
37
+ home?: string;
38
+ /** The runtime to mirror. Defaults to the one running this process. */
39
+ nodeExe?: string;
40
+ }
41
+ /**
42
+ * An identity that changes when the toolchain does.
43
+ *
44
+ * Version plus the runtime's own size, not a timestamp: an upgrade must produce
45
+ * a different id so the old mirror is not used for ever, and a rebuild of the
46
+ * same toolchain must produce the same one so it is not copied twice.
47
+ *
48
+ * Not a content hash of a 71-megabyte binary — that is minutes of work for a
49
+ * distinction the version and size already make, and this is a cache key rather
50
+ * than a security boundary.
51
+ */
52
+ export declare function toolchainId(deps?: ToolchainDeps): string;
53
+ /**
54
+ * A digest of what is actually mirrored — CONTENTS, not metadata.
55
+ *
56
+ * Version and size were not enough. A rebuild at the same version, or a patched
57
+ * binary of the same length, or a change anywhere in the npm tree while
58
+ * `node.exe` stands still, all left the old identity in place and the old mirror
59
+ * in use. That is a cache serving yesterday's runtime to today's gate.
60
+ *
61
+ * Sorted `path\u0000size\u0000sha256` lines, hashed as one canonical list, so the
62
+ * digest depends on the set of files and every byte in them and on nothing
63
+ * else — not on walk order, not on timestamps.
64
+ *
65
+ * This is a CACHE KEY, not an authority: it decides whether the copy is current,
66
+ * never whether anything is allowed.
67
+ */
68
+ export declare function sourceFingerprint(src: string): string;
69
+ /** For tests that change a fixture and need the next answer computed afresh. */
70
+ export declare function forgetFingerprints(): void;
71
+ /** Where mirrors live: outside every repository, under the user's own home. */
72
+ export declare function toolchainsRoot(deps?: ToolchainDeps): string;
73
+ export interface ToolchainMirror {
74
+ ok: true;
75
+ path: string;
76
+ id: string;
77
+ manifest: ToolchainManifest;
78
+ /** True when this call built it rather than finding it. */
79
+ built: boolean;
80
+ }
81
+ export type ToolchainResult = ToolchainMirror | {
82
+ ok: false;
83
+ because: string;
84
+ };
85
+ export declare function ensureToolchainMirror(deps?: ToolchainDeps): ToolchainResult;
86
+ //# sourceMappingURL=toolchain-mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolchain-mirror.d.ts","sourceRoot":"","sources":["../src/toolchain-mirror.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,CAI5D;AAgBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBrD;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAUD,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,CAE/D;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,2DAA2D;IAC3D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAsD/E,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,aAAkB,GAAG,eAAe,CAkH/E"}