looply-cli 0.0.0-stage → 0.3.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 (793) 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 +2727 -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/serve-cmd.d.ts +115 -0
  605. package/dist/serve-cmd.d.ts.map +1 -0
  606. package/dist/serve-cmd.js +505 -0
  607. package/dist/serve-cmd.js.map +1 -0
  608. package/dist/serve.d.ts +167 -0
  609. package/dist/serve.d.ts.map +1 -0
  610. package/dist/serve.js +336 -0
  611. package/dist/serve.js.map +1 -0
  612. package/dist/server-client.d.ts +766 -0
  613. package/dist/server-client.d.ts.map +1 -0
  614. package/dist/server-client.js +475 -0
  615. package/dist/server-client.js.map +1 -0
  616. package/dist/session-adapter-runtime.d.ts +195 -0
  617. package/dist/session-adapter-runtime.d.ts.map +1 -0
  618. package/dist/session-adapter-runtime.js +373 -0
  619. package/dist/session-adapter-runtime.js.map +1 -0
  620. package/dist/session-checkpoint-runtime.d.ts +62 -0
  621. package/dist/session-checkpoint-runtime.d.ts.map +1 -0
  622. package/dist/session-checkpoint-runtime.js +268 -0
  623. package/dist/session-checkpoint-runtime.js.map +1 -0
  624. package/dist/session-control-transport.d.ts +106 -0
  625. package/dist/session-control-transport.d.ts.map +1 -0
  626. package/dist/session-control-transport.js +232 -0
  627. package/dist/session-control-transport.js.map +1 -0
  628. package/dist/session-observation-store.d.ts +98 -0
  629. package/dist/session-observation-store.d.ts.map +1 -0
  630. package/dist/session-observation-store.js +155 -0
  631. package/dist/session-observation-store.js.map +1 -0
  632. package/dist/session-observe-runtime.d.ts +123 -0
  633. package/dist/session-observe-runtime.d.ts.map +1 -0
  634. package/dist/session-observe-runtime.js +317 -0
  635. package/dist/session-observe-runtime.js.map +1 -0
  636. package/dist/session-store.d.ts +98 -0
  637. package/dist/session-store.d.ts.map +1 -0
  638. package/dist/session-store.js +116 -0
  639. package/dist/session-store.js.map +1 -0
  640. package/dist/sessions-cmd.d.ts +202 -0
  641. package/dist/sessions-cmd.d.ts.map +1 -0
  642. package/dist/sessions-cmd.js +609 -0
  643. package/dist/sessions-cmd.js.map +1 -0
  644. package/dist/settings-overlay.d.ts +53 -0
  645. package/dist/settings-overlay.d.ts.map +1 -0
  646. package/dist/settings-overlay.js +175 -0
  647. package/dist/settings-overlay.js.map +1 -0
  648. package/dist/setup-prompt.d.ts +34 -0
  649. package/dist/setup-prompt.d.ts.map +1 -0
  650. package/dist/setup-prompt.js +92 -0
  651. package/dist/setup-prompt.js.map +1 -0
  652. package/dist/setup.d.ts +103 -0
  653. package/dist/setup.d.ts.map +1 -0
  654. package/dist/setup.js +283 -0
  655. package/dist/setup.js.map +1 -0
  656. package/dist/shared-grants.d.ts +164 -0
  657. package/dist/shared-grants.d.ts.map +1 -0
  658. package/dist/shared-grants.js +242 -0
  659. package/dist/shared-grants.js.map +1 -0
  660. package/dist/signals.d.ts +55 -0
  661. package/dist/signals.d.ts.map +1 -0
  662. package/dist/signals.js +85 -0
  663. package/dist/signals.js.map +1 -0
  664. package/dist/source-cmd.d.ts +201 -0
  665. package/dist/source-cmd.d.ts.map +1 -0
  666. package/dist/source-cmd.js +684 -0
  667. package/dist/source-cmd.js.map +1 -0
  668. package/dist/source-verdict.d.ts +99 -0
  669. package/dist/source-verdict.d.ts.map +1 -0
  670. package/dist/source-verdict.js +182 -0
  671. package/dist/source-verdict.js.map +1 -0
  672. package/dist/spend-ledger.d.ts +350 -0
  673. package/dist/spend-ledger.d.ts.map +1 -0
  674. package/dist/spend-ledger.js +546 -0
  675. package/dist/spend-ledger.js.map +1 -0
  676. package/dist/stale-run-sweep.d.ts +79 -0
  677. package/dist/stale-run-sweep.d.ts.map +1 -0
  678. package/dist/stale-run-sweep.js +116 -0
  679. package/dist/stale-run-sweep.js.map +1 -0
  680. package/dist/start-attempts.d.ts +385 -0
  681. package/dist/start-attempts.d.ts.map +1 -0
  682. package/dist/start-attempts.js +613 -0
  683. package/dist/start-attempts.js.map +1 -0
  684. package/dist/status-cmd.d.ts +28 -0
  685. package/dist/status-cmd.d.ts.map +1 -0
  686. package/dist/status-cmd.js +116 -0
  687. package/dist/status-cmd.js.map +1 -0
  688. package/dist/stop-follow-up.d.ts +107 -0
  689. package/dist/stop-follow-up.d.ts.map +1 -0
  690. package/dist/stop-follow-up.js +172 -0
  691. package/dist/stop-follow-up.js.map +1 -0
  692. package/dist/surface-lease.d.ts +118 -0
  693. package/dist/surface-lease.d.ts.map +1 -0
  694. package/dist/surface-lease.js +485 -0
  695. package/dist/surface-lease.js.map +1 -0
  696. package/dist/sync.d.ts +54 -0
  697. package/dist/sync.d.ts.map +1 -0
  698. package/dist/sync.js +93 -0
  699. package/dist/sync.js.map +1 -0
  700. package/dist/syncing-ledger.d.ts +45 -0
  701. package/dist/syncing-ledger.d.ts.map +1 -0
  702. package/dist/syncing-ledger.js +53 -0
  703. package/dist/syncing-ledger.js.map +1 -0
  704. package/dist/temp-fixtures.d.ts +68 -0
  705. package/dist/temp-fixtures.d.ts.map +1 -0
  706. package/dist/temp-fixtures.js +38 -0
  707. package/dist/temp-fixtures.js.map +1 -0
  708. package/dist/token-window.d.ts +84 -0
  709. package/dist/token-window.d.ts.map +1 -0
  710. package/dist/token-window.js +143 -0
  711. package/dist/token-window.js.map +1 -0
  712. package/dist/tool-bridge.d.ts +177 -0
  713. package/dist/tool-bridge.d.ts.map +1 -0
  714. package/dist/tool-bridge.js +329 -0
  715. package/dist/tool-bridge.js.map +1 -0
  716. package/dist/tool-call-record.d.ts +197 -0
  717. package/dist/tool-call-record.d.ts.map +1 -0
  718. package/dist/tool-call-record.js +276 -0
  719. package/dist/tool-call-record.js.map +1 -0
  720. package/dist/tool-protocol.d.ts +135 -0
  721. package/dist/tool-protocol.d.ts.map +1 -0
  722. package/dist/tool-protocol.js +104 -0
  723. package/dist/tool-protocol.js.map +1 -0
  724. package/dist/tool-worker.d.ts +3 -0
  725. package/dist/tool-worker.d.ts.map +1 -0
  726. package/dist/tool-worker.js +478 -0
  727. package/dist/tool-worker.js.map +1 -0
  728. package/dist/toolchain-mirror.d.ts +86 -0
  729. package/dist/toolchain-mirror.d.ts.map +1 -0
  730. package/dist/toolchain-mirror.js +307 -0
  731. package/dist/toolchain-mirror.js.map +1 -0
  732. package/dist/trusted-git.d.ts +243 -0
  733. package/dist/trusted-git.d.ts.map +1 -0
  734. package/dist/trusted-git.js +920 -0
  735. package/dist/trusted-git.js.map +1 -0
  736. package/dist/ui.d.ts +76 -0
  737. package/dist/ui.d.ts.map +1 -0
  738. package/dist/ui.js +118 -0
  739. package/dist/ui.js.map +1 -0
  740. package/dist/untrusted-exec.d.ts +275 -0
  741. package/dist/untrusted-exec.d.ts.map +1 -0
  742. package/dist/untrusted-exec.js +479 -0
  743. package/dist/untrusted-exec.js.map +1 -0
  744. package/dist/untrusted-gate.d.ts +73 -0
  745. package/dist/untrusted-gate.d.ts.map +1 -0
  746. package/dist/untrusted-gate.js +226 -0
  747. package/dist/untrusted-gate.js.map +1 -0
  748. package/dist/uploader.d.ts +153 -0
  749. package/dist/uploader.d.ts.map +1 -0
  750. package/dist/uploader.js +204 -0
  751. package/dist/uploader.js.map +1 -0
  752. package/dist/verifier.d.ts +66 -0
  753. package/dist/verifier.d.ts.map +1 -0
  754. package/dist/verifier.js +170 -0
  755. package/dist/verifier.js.map +1 -0
  756. package/dist/verify-apply.d.ts +26 -0
  757. package/dist/verify-apply.d.ts.map +1 -0
  758. package/dist/verify-apply.js +36 -0
  759. package/dist/verify-apply.js.map +1 -0
  760. package/dist/verify-cmd.d.ts +44 -0
  761. package/dist/verify-cmd.d.ts.map +1 -0
  762. package/dist/verify-cmd.js +125 -0
  763. package/dist/verify-cmd.js.map +1 -0
  764. package/dist/verify-pass.d.ts +73 -0
  765. package/dist/verify-pass.d.ts.map +1 -0
  766. package/dist/verify-pass.js +103 -0
  767. package/dist/verify-pass.js.map +1 -0
  768. package/dist/welcome.d.ts +43 -0
  769. package/dist/welcome.d.ts.map +1 -0
  770. package/dist/welcome.js +116 -0
  771. package/dist/welcome.js.map +1 -0
  772. package/dist/workspace-provisioner.d.ts +65 -0
  773. package/dist/workspace-provisioner.d.ts.map +1 -0
  774. package/dist/workspace-provisioner.js +66 -0
  775. package/dist/workspace-provisioner.js.map +1 -0
  776. package/dist/workspace-quarantine.d.ts +64 -0
  777. package/dist/workspace-quarantine.d.ts.map +1 -0
  778. package/dist/workspace-quarantine.js +156 -0
  779. package/dist/workspace-quarantine.js.map +1 -0
  780. package/dist/workspace-residue-sweep.d.ts +113 -0
  781. package/dist/workspace-residue-sweep.d.ts.map +1 -0
  782. package/dist/workspace-residue-sweep.js +158 -0
  783. package/dist/workspace-residue-sweep.js.map +1 -0
  784. package/dist/workspace.d.ts +639 -0
  785. package/dist/workspace.d.ts.map +1 -0
  786. package/dist/workspace.js +2026 -0
  787. package/dist/workspace.js.map +1 -0
  788. package/package.json +52 -4
  789. package/win/CredProbe.cs +64 -0
  790. package/win/FakeClaude.cs +56 -0
  791. package/win/HandleProbe.cs +116 -0
  792. package/win/TokenProbe.cs +53 -0
  793. package/win/appcontainer.ps1 +500 -0
@@ -0,0 +1,479 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppContainerBackend = exports.HELPER_TIMEOUT_MS = exports.HELPER_SETUP_CEILING_MS = exports.HELPER_KILL_GRACE_MS = exports.PLATFORM_BASE = exports.MAX_CONTAINED_OUTPUT_BYTES = void 0;
4
+ exports.containerName = containerName;
5
+ exports.windowsCommandLine = windowsCommandLine;
6
+ exports.systemEnv = systemEnv;
7
+ exports.systemRoot = systemRoot;
8
+ exports.helperCeilingMs = helperCeilingMs;
9
+ exports.windowsPowerShellEnv = windowsPowerShellEnv;
10
+ const node_child_process_1 = require("node:child_process");
11
+ const node_crypto_1 = require("node:crypto");
12
+ const node_fs_1 = require("node:fs");
13
+ const node_os_1 = require("node:os");
14
+ const node_path_1 = require("node:path");
15
+ /**
16
+ * How much of a contained child's output crosses back into the daemon.
17
+ *
18
+ * 🔴 IT WAS UNBOUNDED. `readFileSync(path, 'utf8')` pulled the whole file into
19
+ * the daemon's heap, so a contained process — project-controlled code, which is
20
+ * the entire premise of this file — could exhaust the daemon's memory simply by
21
+ * writing to stdout. The boundary held on authority and leaked on VOLUME.
22
+ *
23
+ * Two megabytes, and the derivation rather than the taste: the largest thing a
24
+ * legitimate gate step produces here is a verbose test run, which is tens of
25
+ * kilobytes; `tool-protocol.ts` already caps a single file READ at 256 KB; and
26
+ * this must stay comfortably below the point where a handful of concurrent runs
27
+ * matters. Generous by two orders of magnitude for real use, and finite.
28
+ */
29
+ exports.MAX_CONTAINED_OUTPUT_BYTES = 2 * 1024 * 1024;
30
+ /**
31
+ * A container identity for one project and one trust domain.
32
+ *
33
+ * Deterministic so a restart reuses the profile rather than leaking a new one,
34
+ * and hashed so no part of a path — which the user chose and which may contain
35
+ * anything — reaches a Windows profile name.
36
+ */
37
+ function containerName(kind, projectKey) {
38
+ const digest = (0, node_crypto_1.createHash)('sha256').update(projectKey, 'utf8').digest('hex').slice(0, 24);
39
+ const domain = kind.charAt(0).toUpperCase() + kind.slice(1);
40
+ return `Looply.${domain}.${digest}`;
41
+ }
42
+ /**
43
+ * One Windows command line from an executable and its arguments.
44
+ *
45
+ * CreateProcess takes a single string, so the arguments have to be joined — and
46
+ * that join is the place a filename with a space or a quote in it turns into a
47
+ * second argument. The rules are the ones the C runtime parses back.
48
+ */
49
+ function windowsCommandLine(exe, argv) {
50
+ const quote = (s) => {
51
+ if (s.length > 0 && !/[ \t"]/.test(s))
52
+ return s;
53
+ let out = '"';
54
+ let slashes = 0;
55
+ for (const ch of s) {
56
+ if (ch === '\\') {
57
+ slashes += 1;
58
+ continue;
59
+ }
60
+ if (ch === '"') {
61
+ out += '\\'.repeat(slashes * 2 + 1) + '"';
62
+ slashes = 0;
63
+ continue;
64
+ }
65
+ out += '\\'.repeat(slashes) + ch;
66
+ slashes = 0;
67
+ }
68
+ return `${out}${'\\'.repeat(slashes * 2)}"`;
69
+ };
70
+ return [exe, ...argv].map(quote).join(' ');
71
+ }
72
+ /**
73
+ * The caller's environment, plus the one variable Windows cannot start without.
74
+ *
75
+ * A custom environment block that omits `SystemRoot` makes CreateProcess fail
76
+ * with ERROR_ENVVAR_NOT_FOUND (203) — the loader resolves system libraries
77
+ * through it, so a child without it cannot start at all. That is not a policy
78
+ * choice a caller should be able to get wrong: it is not a secret, it names a
79
+ * directory every process on the machine can already see, and the failure it
80
+ * causes names an environment variable without saying which one.
81
+ */
82
+ function systemEnv(env) {
83
+ const out = {};
84
+ for (const name of exports.PLATFORM_BASE) {
85
+ const v = process.env[name];
86
+ if (typeof v === 'string' && v.length > 0)
87
+ out[name] = v;
88
+ }
89
+ // The caller's own variables win, so a domain builder can narrow or replace
90
+ // any of these deliberately.
91
+ for (const [k, v] of Object.entries(env)) {
92
+ if (typeof v === 'string' && v.length > 0)
93
+ out[k] = v;
94
+ }
95
+ return out;
96
+ }
97
+ /**
98
+ * What Windows needs before a contained process can start at all.
99
+ *
100
+ * Found by bisection, not by taste. A block with only `SystemRoot` fails, and
101
+ * so does one with `SystemRoot`, `windir`, `SystemDrive`, `PATH`, `PATHEXT` and
102
+ * `ComSpec` — CreateProcess answers ERROR_ENVVAR_NOT_FOUND (203), which says a
103
+ * required variable is missing without saying which. Adding the profile and
104
+ * AppData roots is what makes it launch: an AppContainer REDIRECTS AppData, so
105
+ * the loader needs those roots to resolve the container's own storage.
106
+ *
107
+ * None of these is a secret. They name directories every process on the machine
108
+ * can already see, and none of them carries a credential — which is the whole
109
+ * distinction this file is built on. Anything that does carry one is supplied
110
+ * per-domain by the caller, or not at all.
111
+ */
112
+ exports.PLATFORM_BASE = [
113
+ 'SystemRoot',
114
+ 'windir',
115
+ 'SystemDrive',
116
+ 'PATH',
117
+ 'PATHEXT',
118
+ 'ComSpec',
119
+ 'NUMBER_OF_PROCESSORS',
120
+ 'PROCESSOR_ARCHITECTURE',
121
+ 'OS',
122
+ 'USERPROFILE',
123
+ 'APPDATA',
124
+ 'LOCALAPPDATA',
125
+ 'ALLUSERSPROFILE',
126
+ 'ProgramData',
127
+ 'ProgramFiles',
128
+ 'TEMP',
129
+ 'TMP',
130
+ ];
131
+ /** Where the source-controlled helper lives, relative to the built CLI. */
132
+ /**
133
+ * The Windows system root, as an ABSOLUTE path or not at all.
134
+ *
135
+ * ⚠️ `?? 'C:\Windows'` WAS NOT ENOUGH, TWICE OVER.
136
+ *
137
+ * First: in a single-quoted TypeScript string `\W` is not an escape, so
138
+ * `'C:\Windows'` is the RELATIVE path `C:Windows` — `join` then yields
139
+ * `C:Windows\System32\…`, resolved against whatever the working directory
140
+ * happens to be. Measured, not assumed: `path.isAbsolute('C:\Windows')` is
141
+ * false. That is why the fallback here is spelled with `join`, not a literal.
142
+ *
143
+ * Second, and still open until this existed: `??` falls through on `undefined`
144
+ * and `null` ONLY. An EMPTY `SystemRoot` — `SystemRoot=` in the environment, or
145
+ * an allowlist that copied the name but not the value — passed straight
146
+ * through, and `join('', 'System32')` is `System32`: relative again, and this
147
+ * time resolved against the CHILD's working directory, which for a contained
148
+ * agent is the project worktree. A `System32\taskkill.exe` planted there would
149
+ * be found first. It is the `gitBinary` hole spelled with an environment
150
+ * variable instead of a bare command name.
151
+ *
152
+ * ⚠️ SO IT CHECKS THE VALUE, NOT ITS PRESENCE. A system root that is not
153
+ * absolute is not a system root, whatever the environment says. Five call
154
+ * sites used to spell this two different ways; they all ask here now.
155
+ *
156
+ * 🔴 ABSOLUTE BY WINDOWS' RULES, NOT THE HOST'S. `isAbsolute` from `node:path`
157
+ * answers for the platform the process is on, and on a POSIX host it reports
158
+ * `D:\Windows` — and the `C:\Windows` fallback itself — as RELATIVE. So every
159
+ * value failed the guard and the fallback was returned in a spelling that then
160
+ * failed its own test. The value this function deals in is a Windows path
161
+ * whatever host is asking about it, so it is judged and built with `win32`,
162
+ * which answers the same on both platforms. Still not a literal, for the
163
+ * escaping reason above.
164
+ */
165
+ function systemRoot(env = process.env) {
166
+ const declared = env['SystemRoot'];
167
+ return declared !== undefined && declared !== '' && node_path_1.win32.isAbsolute(declared)
168
+ ? declared
169
+ : node_path_1.win32.join('C:', 'Windows');
170
+ }
171
+ /**
172
+ * The interpreter, by absolute path rather than by PATH lookup.
173
+ *
174
+ * PowerShell lives in a SUBDIRECTORY of System32, so a process whose PATH was
175
+ * deliberately narrowed — which is every process Looply builds an environment
176
+ * for — cannot resolve the bare name. The tool bridge is exactly that case: it
177
+ * is trusted code, but it is launched by the provider transport and inherits
178
+ * the transport's minimal PATH, and the failure it produced was an unreadable
179
+ * "containment unavailable" rather than anything about containment.
180
+ */
181
+ function powershellPath() {
182
+ const win = systemRoot();
183
+ return (0, node_path_1.join)(win, 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe');
184
+ }
185
+ function helperPath() {
186
+ // `dist/` sits beside `win/` in the published package and in the workspace.
187
+ return (0, node_path_1.join)(__dirname, '..', 'win', 'appcontainer.ps1');
188
+ }
189
+ /**
190
+ * How long the containment helper may take to answer, in total.
191
+ *
192
+ * Generous on purpose. The helper's slow parts are real work, not hangs: a cold
193
+ * PowerShell start, an `Add-Type` C# compilation, and an inheritable-ACL
194
+ * propagation that was measured at ~6 s when the 166 MB toolchain mirror is in
195
+ * the grant set. This is a floor under a wedge, not a performance budget, and a
196
+ * ceiling that fired during ordinary work would be worse than none.
197
+ */
198
+ /** How long a killed helper gets to actually die before the answer is sent. */
199
+ exports.HELPER_KILL_GRACE_MS = 5_000;
200
+ exports.HELPER_SETUP_CEILING_MS = 60_000;
201
+ /**
202
+ * The flat ceiling, for calls that run no contained child.
203
+ *
204
+ * `probe` and `remove` do profile work only, so a constant is right for them.
205
+ * `run` MUST NOT use it — see {@link AppContainerBackend.call}.
206
+ */
207
+ exports.HELPER_TIMEOUT_MS = exports.HELPER_SETUP_CEILING_MS;
208
+ /**
209
+ * The ceiling for one helper call, given the child budget that call carries.
210
+ *
211
+ * Exported as a pure function because the timer itself has no test seam:
212
+ * `AppContainerDeps.invoke` short-circuits before the timer is ever created, so
213
+ * every injected backend bypasses it. This is the part worth pinning — that the
214
+ * ceiling lands ABOVE `spec.timeoutMs` and never underneath it.
215
+ */
216
+ function helperCeilingMs(childTimeoutMs = 0) {
217
+ return exports.HELPER_SETUP_CEILING_MS + childTimeoutMs;
218
+ }
219
+ class AppContainerBackend {
220
+ deps;
221
+ constructor(deps = {}) {
222
+ this.deps = deps;
223
+ }
224
+ call(request, childTimeoutMs = 0) {
225
+ if (this.deps.invoke)
226
+ return this.deps.invoke(request);
227
+ const script = this.deps.helper ?? helperPath();
228
+ /**
229
+ * 🔴 THE CEILING SITS ABOVE `spec.timeoutMs`, NEVER UNDERNEATH IT.
230
+ *
231
+ * The helper's own `WaitForSingleObject(pi.hProcess, timeoutMs)` happens
232
+ * INSIDE this one call, so a flat constant here silently becomes the real
233
+ * gate-step budget. The first version of this was 120 s flat, and this
234
+ * repository's own gate declares `jest` at 900 s and takes 140 s — so
235
+ * every full test run would have been killed and reported as
236
+ * "a container could not be made", on a machine where nothing was wrong.
237
+ * `DEFAULT_TIMEOUT_S` is 600. A ceiling that fires during ordinary work is
238
+ * worse than no ceiling, and that one did.
239
+ *
240
+ * So the ceiling is the caller's own child budget PLUS a floor for the
241
+ * work that budget does not cover: PowerShell startup, the `Add-Type`
242
+ * compilation, the ACL grant loop (~6.5 s measured for the 166 MB
243
+ * toolchain mirror) and the protect loop.
244
+ */
245
+ const ceilingMs = helperCeilingMs(childTimeoutMs);
246
+ let settled = false;
247
+ return new Promise((resolve) => {
248
+ // argv, never a shell string: nothing the agent writes can become a
249
+ // command, because there is no shell to interpret one.
250
+ const child = (0, node_child_process_1.spawn)(powershellPath(), ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', script], { stdio: ['pipe', 'pipe', 'pipe'], env: windowsPowerShellEnv() });
251
+ const settle = (reply) => {
252
+ if (settled)
253
+ return;
254
+ settled = true;
255
+ clearTimeout(giveUp);
256
+ resolve(reply);
257
+ };
258
+ const timedOut = {
259
+ ok: false,
260
+ stage: 'helper',
261
+ error: `the containment helper did not answer within ${ceilingMs} ms ` +
262
+ `(it was killed; the machine may be unable to make a container)`,
263
+ };
264
+ /**
265
+ * ⚠️ KILL, THEN WAIT FOR `close` — never resolve straight from the timer.
266
+ *
267
+ * The contained child inherits the helper's stdout/stderr handles, so
268
+ * returning the instant PowerShell is signalled races the child's exit:
269
+ * `run()`'s `rmSync(box)` then THROWS (`ENOTEMPTY`/`EBUSY`; `force` does
270
+ * not suppress it, it only ignores a path that is not there), and that
271
+ * throw escapes every try in the round loop. Giving the tree a moment to
272
+ * actually die is the difference between a bounded containment failure
273
+ * and a run that ends with no `run.ended` and a stranded item.
274
+ */
275
+ const giveUp = setTimeout(() => {
276
+ if (settled)
277
+ return;
278
+ try {
279
+ child.kill();
280
+ }
281
+ catch {
282
+ // Already gone, or unkillable. The grace timer still answers.
283
+ }
284
+ const grace = setTimeout(() => {
285
+ if (settled)
286
+ return;
287
+ settled = true;
288
+ resolve(timedOut);
289
+ }, exports.HELPER_KILL_GRACE_MS);
290
+ child.once('close', () => {
291
+ clearTimeout(grace);
292
+ if (settled)
293
+ return;
294
+ settled = true;
295
+ resolve(timedOut);
296
+ });
297
+ }, ceilingMs);
298
+ const out = [];
299
+ const err = [];
300
+ child.stdout.on('data', (d) => out.push(d.toString('utf8')));
301
+ child.stderr.on('data', (d) => err.push(d.toString('utf8')));
302
+ child.on('error', (e) => settle({ ok: false, stage: 'helper', error: `the containment helper could not start (${e.message})` }));
303
+ child.on('close', () => {
304
+ const text = out.join('').trim();
305
+ try {
306
+ settle(JSON.parse(text));
307
+ }
308
+ catch {
309
+ settle({
310
+ ok: false,
311
+ stage: 'helper',
312
+ error: `the containment helper answered nothing readable (${err.join('').trim().slice(0, 300)})`,
313
+ });
314
+ }
315
+ });
316
+ child.stdin.end(JSON.stringify(request));
317
+ });
318
+ }
319
+ async probe() {
320
+ if (process.platform !== 'win32') {
321
+ return { available: false, backend: 'appcontainer', because: 'AppContainer is a Windows boundary' };
322
+ }
323
+ const reply = await this.call({ action: 'probe', profile: containerName('fixture', 'probe') });
324
+ return reply.ok
325
+ ? { available: true, backend: 'appcontainer' }
326
+ : { available: false, backend: 'appcontainer', because: reply.error ?? 'unavailable' };
327
+ }
328
+ async run(spec) {
329
+ if (process.platform !== 'win32') {
330
+ return {
331
+ ok: false,
332
+ reason: 'containment_unavailable',
333
+ stage: 'platform',
334
+ because: 'no untrusted-execution boundary is implemented for this platform',
335
+ };
336
+ }
337
+ // Output travels on handles WE open and the child inherits, so the files
338
+ // never have to be granted to the container — the transport cannot widen
339
+ // the filesystem policy.
340
+ const box = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'looply-ue-'));
341
+ try {
342
+ const stdoutPath = (0, node_path_1.join)(box, 'out');
343
+ const stderrPath = (0, node_path_1.join)(box, 'err');
344
+ let stdinPath = '';
345
+ if (spec.stdin !== undefined) {
346
+ stdinPath = (0, node_path_1.join)(box, 'in');
347
+ (0, node_fs_1.writeFileSync)(stdinPath, spec.stdin, 'utf8');
348
+ }
349
+ const reply = await this.call({
350
+ action: 'run',
351
+ profile: containerName(spec.kind, spec.projectKey),
352
+ env: systemEnv(spec.env),
353
+ executable: spec.executable,
354
+ commandLine: spec.rawCommandLine ?? windowsCommandLine(spec.executable, spec.argv),
355
+ cwd: spec.cwd,
356
+ grants: spec.grants.map((g) => ({ path: g.path, write: g.write === true })),
357
+ protect: spec.protect ?? [],
358
+ network: spec.network,
359
+ stdoutPath,
360
+ stderrPath,
361
+ stdinPath,
362
+ timeoutMs: spec.timeoutMs,
363
+ },
364
+ // The child's own budget, so the ceiling above lands ABOVE it.
365
+ spec.timeoutMs);
366
+ if (!reply.ok) {
367
+ const stage = reply.stage ?? 'unknown';
368
+ return {
369
+ ok: false,
370
+ reason: stage === 'profile' || stage === 'helper' || stage === 'compile' || stage === 'protect'
371
+ ? 'containment_unavailable'
372
+ : 'containment_launch_failed',
373
+ stage,
374
+ because: reply.error ?? 'the contained process could not start',
375
+ };
376
+ }
377
+ const read = (p) => {
378
+ try {
379
+ const size = (0, node_fs_1.statSync)(p).size;
380
+ if (size <= exports.MAX_CONTAINED_OUTPUT_BYTES) {
381
+ const whole = Buffer.alloc(size);
382
+ const fd = (0, node_fs_1.openSync)(p, 'r');
383
+ try {
384
+ (0, node_fs_1.readSync)(fd, whole, 0, size, 0);
385
+ }
386
+ finally {
387
+ (0, node_fs_1.closeSync)(fd);
388
+ }
389
+ return whole.toString('utf8');
390
+ }
391
+ /**
392
+ * Over the bound: keep the head and the tail, and SAY what was
393
+ * dropped. A silent truncation reads as output that simply ended,
394
+ * which is exactly how a reader concludes the wrong thing about a
395
+ * command that produced far more than it should have.
396
+ */
397
+ const half = Math.floor(exports.MAX_CONTAINED_OUTPUT_BYTES / 2);
398
+ const head = Buffer.alloc(half);
399
+ const tail = Buffer.alloc(half);
400
+ const fd = (0, node_fs_1.openSync)(p, 'r');
401
+ try {
402
+ (0, node_fs_1.readSync)(fd, head, 0, half, 0);
403
+ (0, node_fs_1.readSync)(fd, tail, 0, half, size - half);
404
+ }
405
+ finally {
406
+ (0, node_fs_1.closeSync)(fd);
407
+ }
408
+ const dropped = size - half * 2;
409
+ return `${head.toString('utf8')}\n… ${dropped} bytes of output dropped: this command produced ${size} bytes, over the ${exports.MAX_CONTAINED_OUTPUT_BYTES}-byte bound …\n${tail.toString('utf8')}`;
410
+ }
411
+ catch {
412
+ return '';
413
+ }
414
+ };
415
+ return {
416
+ ok: true,
417
+ exitCode: reply.exitCode ?? 1,
418
+ stdout: read(stdoutPath),
419
+ stderr: read(stderrPath),
420
+ timedOut: reply.timedOut === true,
421
+ };
422
+ }
423
+ finally {
424
+ /**
425
+ * NON-FATAL, AND RETRIED. A contained child that outlived its helper
426
+ * still holds the inherited handles on `out`/`err`, and Windows then
427
+ * refuses the directory — `force` does not help, it only ignores a path
428
+ * that does not exist. A leaked temp directory is a mess; a throw here
429
+ * escapes every try in the round loop and ends the run with no
430
+ * `run.ended` and a stranded item.
431
+ */
432
+ try {
433
+ (0, node_fs_1.rmSync)(box, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 });
434
+ }
435
+ catch {
436
+ // Left behind on purpose rather than taking the caller down with it.
437
+ }
438
+ }
439
+ }
440
+ /** Remove a container profile. Used by tests; production profiles persist. */
441
+ async remove(kind, projectKey) {
442
+ const reply = await this.call({ action: 'remove', profile: containerName(kind, projectKey) });
443
+ return reply.ok;
444
+ }
445
+ }
446
+ exports.AppContainerBackend = AppContainerBackend;
447
+ /**
448
+ * The environment Windows PowerShell 5.1 needs, rather than the one it inherited.
449
+ *
450
+ * 🔴 POWERSHELL 7 POISONS `PSModulePath` FOR POWERSHELL 5.1. When the daemon is
451
+ * started from a `pwsh` session, `PSModulePath` carries
452
+ * `…\PowerShell\7\Modules`, and 5.1 then loads SEVEN's
453
+ * `Microsoft.PowerShell.Security` on top of its own. The extended type data
454
+ * collides — "The member AuditToString is already present" — the module fails to
455
+ * load, `Get-Acl` cannot resolve, and every containment request is refused.
456
+ *
457
+ * ⚠️ IT FAILS CLOSED, WHICH IS WHY IT WENT UNNOTICED. Containment refuses rather
458
+ * than running uncontained, so nothing unsafe happens; the run simply cannot
459
+ * start, with a message about a PowerShell module that says nothing about
460
+ * PowerShell versions. Reproduced by launching the same suite from `pwsh`
461
+ * (5 of 5 red) and from bash (5 of 5 green) on one machine, one commit.
462
+ *
463
+ * The variable is REPLACED with 5.1's own default rather than deleted: deleting
464
+ * it makes 5.1 fall back to a built-in default that omits the machine-wide
465
+ * module directory, which is a different breakage for anyone relying on it.
466
+ */
467
+ function windowsPowerShellEnv() {
468
+ const win = systemRoot();
469
+ const home = process.env['USERPROFILE'];
470
+ const psModulePath = [
471
+ home ? (0, node_path_1.join)(home, 'Documents', 'WindowsPowerShell', 'Modules') : null,
472
+ (0, node_path_1.join)('C:', 'Program Files', 'WindowsPowerShell', 'Modules'),
473
+ (0, node_path_1.join)(win, 'System32', 'WindowsPowerShell', 'v1.0', 'Modules'),
474
+ ]
475
+ .filter((p) => p !== null)
476
+ .join(';');
477
+ return { ...process.env, PSModulePath: psModulePath };
478
+ }
479
+ //# sourceMappingURL=untrusted-exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrusted-exec.js","sourceRoot":"","sources":["../src/untrusted-exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { type ToolchainResult } from './toolchain-mirror';
2
+ import type { CommandResult, CommandRunner } from './gate';
3
+ import { type UntrustedExecutionBackend } from './untrusted-exec';
4
+ /**
5
+ * THE GATE RUNS THE PROJECT'S CODE, SO IT RUNS INSIDE THE BOUNDARY.
6
+ *
7
+ * A gate step is `npm test`, and npm is not the point — the tests underneath it
8
+ * are, and the coding agent wrote them. Until now they ran as the daemon, with
9
+ * its environment, able to read `~/.looply/machine.json` and to edit the state
10
+ * directory that decides whether the machine may keep working.
11
+ *
12
+ * The step keeps its shape. It is still a shell line from `config.yaml`, still
13
+ * measured by the same timeout, still reported by the same `CommandResult` —
14
+ * because the shell is no longer the thing being defended against. It runs
15
+ * inside an AppContainer that was granted the worktree and nothing else, so
16
+ * what the line says matters much less than where it can reach.
17
+ *
18
+ * NO FALLBACK. If the container cannot be made, the step FAILS. A gate that
19
+ * quietly ran as the daemon because containment was unavailable would be worse
20
+ * than one that did not run at all: the round would go green having proved
21
+ * something about a different machine than the one it claimed.
22
+ */
23
+ export interface UntrustedGateDeps {
24
+ backend?: UntrustedExecutionBackend;
25
+ /** Overridable so tests never build against the real toolchain. */
26
+ toolchain?: () => ToolchainResult;
27
+ /** Overridable for tests; production reads the platform's own shell. */
28
+ shell?: string;
29
+ now?: () => number;
30
+ }
31
+ /**
32
+ * A {@link CommandRunner} that runs each step contained.
33
+ *
34
+ * `projectDir` is both the worktree granted to the container and the cwd the
35
+ * step runs in, so a step can never be executed against a directory other than
36
+ * the one it was written for.
37
+ */
38
+ export declare function makeUntrustedGateRunner(projectDir: string, deps?: UntrustedGateDeps): CommandRunner;
39
+ /**
40
+ * The step a containment preflight runs.
41
+ *
42
+ * A `rem` is cmd.exe's comment: it starts, does nothing and exits 0. What is
43
+ * being measured is not the command — it is whether a container could be made
44
+ * to run one in at all.
45
+ */
46
+ export declare const CONTAINMENT_PREFLIGHT_STEP = "rem looply-containment-preflight";
47
+ /**
48
+ * ASK WHETHER A CONTAINER CAN ACTUALLY BE MADE, BEFORE PAYING FOR A MODEL TURN.
49
+ *
50
+ * `AppContainerBackend.probe()` answers a strictly earlier question. It returns
51
+ * as soon as a profile can be created or derived, and never reaches the grant,
52
+ * protect or launch stages — measured on one machine in one script: `probe`
53
+ * returned ok while a real `run` failed at `grant`, and again at `launch`.
54
+ * So a green probe does not mean a gate step can run.
55
+ *
56
+ * This runs the real thing through the real runner: same backend, same `gate`
57
+ * profile, same `unavailable` flag, same classification. There is no new
58
+ * vocabulary and no second code path to keep honest.
59
+ *
60
+ * ⚠️ THE GRANT SET IS DELIBERATELY SMALL, and this is not a shortcut. Granting
61
+ * the toolchain mirror propagates an inheritable ACE across 166 MB — measured at
62
+ * ~6.5 s against ~0.57 s for the project directory alone — and it proves nothing
63
+ * the small grant does not. Anyone "making the preflight faithful" by reusing
64
+ * `untrustedGrants` buys a 10x cost for no signal.
65
+ *
66
+ * ⚠️ IT COVERS THE `gate` PROFILE ONLY. The tool bridge uses `kind:'agent'`, a
67
+ * different profile from a different `CreateAppContainerProfile` call. A machine
68
+ * that can make neither is caught; one that can make the gate's and not the
69
+ * agent's is not. Closing that needs a second preflight through the bridge's own
70
+ * backend seam, and it is not this change.
71
+ */
72
+ export declare function makeContainmentPreflight(projectDir: string, deps?: UntrustedGateDeps): () => Promise<CommandResult>;
73
+ //# sourceMappingURL=untrusted-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untrusted-gate.d.ts","sourceRoot":"","sources":["../src/untrusted-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAQ3D,OAAO,EAGL,KAAK,yBAAyB,EAE/B,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,eAAe,CAAC;IAClC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,iBAAsB,GAC3B,aAAa,CA8Ff;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,iBAAsB,GAC3B,MAAM,OAAO,CAAC,aAAa,CAAC,CA0F9B"}