0sec-cli 0.22.1 → 0.23.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 (219) hide show
  1. package/0.js +64 -47
  2. package/README.md +73 -53
  3. package/chunks/{adapt-loop-J6QCZZTB.js → adapt-loop-V3JFWOKC.js} +4 -4
  4. package/chunks/{artifact-scraper-MFKT6OI4.js → artifact-scraper-NYKUF2M5.js} +2 -2
  5. package/chunks/{assumption-mining-646LYSJY.js → assumption-mining-ZX3YVWEH.js} +19 -15
  6. package/chunks/backend-connections-H52NIVH2.js +23 -0
  7. package/chunks/{chunk-NLH4LMWH.js → chunk-3E54JYS4.js} +1 -1
  8. package/chunks/chunk-3P3XXSIJ.js +463 -0
  9. package/chunks/{chunk-CPWA6RWE.js → chunk-3ZNI7F42.js} +3 -3
  10. package/chunks/{chunk-LGCASF2C.js → chunk-4HGGNBKK.js} +7405 -2225
  11. package/chunks/{chunk-TM74SSHC.js → chunk-62ENS6XO.js} +1 -1
  12. package/chunks/{chunk-4VGLO2YS.js → chunk-65H3MRBF.js} +5 -2
  13. package/chunks/chunk-A2ADXAC5.js +5329 -0
  14. package/chunks/chunk-A5QO7N3S.js +74 -0
  15. package/chunks/chunk-AAA4PRWK.js +990 -0
  16. package/chunks/{chunk-AV2LG2L7.js → chunk-BF5FIK7H.js} +257 -145
  17. package/chunks/chunk-CP6HANBE.js +355 -0
  18. package/chunks/{chunk-HHPWRY2M.js → chunk-EH2WTNY7.js} +23474 -22746
  19. package/chunks/{chunk-OSBPGWTE.js → chunk-EJH2TNVH.js} +3 -3
  20. package/chunks/chunk-EWXOG6D3.js +1695 -0
  21. package/chunks/{chunk-WZRVS7SB.js → chunk-F344NYUN.js} +1 -1
  22. package/chunks/chunk-FXR3BT2G.js +226 -0
  23. package/chunks/{chunk-GOEA3NW6.js → chunk-HFDSIHTE.js} +1603 -1295
  24. package/chunks/chunk-I3OCJ2OA.js +309 -0
  25. package/chunks/{chunk-X7LAEEUW.js → chunk-ITES7BCY.js} +1 -1
  26. package/chunks/{chunk-YL6YAGLL.js → chunk-JEYIWMGL.js} +1 -1
  27. package/chunks/{chunk-WSDDGFA6.js → chunk-K55B4OH4.js} +1 -1
  28. package/chunks/{chunk-TH2LW437.js → chunk-KCA35IL3.js} +2 -190
  29. package/chunks/chunk-KHPOSLCF.js +1659 -0
  30. package/chunks/chunk-LT7BFGXA.js +733 -0
  31. package/chunks/{chunk-KAU6NLGP.js → chunk-LTEE2JWK.js} +786 -20
  32. package/chunks/{chunk-ZKQ2I3S2.js → chunk-LVGZGG63.js} +1 -1
  33. package/chunks/chunk-MQJVU2GZ.js +277 -0
  34. package/chunks/{chunk-OHHCGDJ2.js → chunk-NI6QYQSK.js} +126 -1089
  35. package/chunks/{chunk-6YNKRUMC.js → chunk-NJLKFC66.js} +321 -5
  36. package/chunks/{chunk-3E2KALZ5.js → chunk-NX4H6L4M.js} +2 -2
  37. package/chunks/{chunk-W6UWZFKL.js → chunk-O6KPVYOI.js} +100 -5
  38. package/chunks/{chunk-IVQV574Y.js → chunk-O6Z4XPOM.js} +1 -1
  39. package/chunks/{chunk-V6GHX34G.js → chunk-OLSKXTQZ.js} +8 -274
  40. package/chunks/{chunk-5BTJMINS.js → chunk-P7KDN5PK.js} +208 -46
  41. package/chunks/chunk-PIR6BNE7.js +83 -0
  42. package/chunks/{chunk-XCISCI4T.js → chunk-QMICC5O2.js} +30 -12
  43. package/chunks/{chunk-6GHSR47F.js → chunk-R35KKJA4.js} +1 -58
  44. package/chunks/chunk-RS4MAN3Q.js +73 -0
  45. package/chunks/{chunk-VWITLWXB.js → chunk-T7ZEVY5G.js} +307 -34
  46. package/chunks/chunk-TPUJZ74W.js +36 -0
  47. package/chunks/{chunk-IFME676H.js → chunk-UZUELPFW.js} +79 -18
  48. package/chunks/{chunk-TV27OWIW.js → chunk-V2BWXPZP.js} +9 -9
  49. package/chunks/chunk-VDOWARMJ.js +63 -0
  50. package/chunks/{chunk-XDKB2P5X.js → chunk-W5VNCB57.js} +1 -1
  51. package/chunks/{chunk-4G7OVYJX.js → chunk-WIYNYNL2.js} +1 -1
  52. package/chunks/chunk-WYNZFNMF.js +457 -0
  53. package/chunks/{chunk-7XCKYNLO.js → chunk-XORZUR2H.js} +1 -1
  54. package/chunks/{chunk-2OQOQ2FZ.js → chunk-Y4HJRUFE.js} +20 -4
  55. package/chunks/{chunk-V36HVTUL.js → chunk-YAEJAZYW.js} +21 -18
  56. package/chunks/{chunk-XA2O4WXA.js → chunk-YYS2H33A.js} +169 -15
  57. package/chunks/{codex-models-NHQW45SO.js → codex-models-Y457ND6Q.js} +9 -3
  58. package/chunks/{commands-N6GN5SBF.js → commands-PBDAOZKA.js} +7019 -5937
  59. package/chunks/{db-5IWEJUYV.js → db-TPSI552V.js} +3 -3
  60. package/chunks/deep-review-DKED6EN5.js +81 -0
  61. package/chunks/{dist-L3XJWWZ6.js → dist-4LGRIBOC.js} +209 -114
  62. package/chunks/{dist-FSS7MBDF.js → dist-7Q5A6TQM.js} +12 -2
  63. package/chunks/{dist-KEULE5IQ.js → dist-LNXGATR2.js} +2 -2
  64. package/chunks/{dist-XZB53PS5.js → dist-M2X367VW.js} +2 -2
  65. package/chunks/{dist-BS4CY4RG.js → dist-RLPNLRZD.js} +79 -1
  66. package/chunks/eval-runner-RZKDOQ2G.js +30 -0
  67. package/chunks/{exploit-agent-KW4EB7BE.js → exploit-agent-RMFYNG7H.js} +1 -1
  68. package/chunks/{exploit-autoclimb-CXJ2ERRO.js → exploit-autoclimb-2A2PQI4E.js} +1 -1
  69. package/chunks/{exploit-climb-TJWLY4XC.js → exploit-climb-DEJ232QN.js} +2 -2
  70. package/chunks/{fix-UUKPXCFB.js → fix-JGBW7XUN.js} +12 -6
  71. package/chunks/{harness-C5HOKIEV.js → harness-CBOLMUHB.js} +3 -3
  72. package/chunks/{hunt-scan-KZZ444V2.js → hunt-scan-MIRMABY4.js} +17 -13
  73. package/chunks/{kernel-primitive-Z77IR7YS.js → kernel-primitive-NAPDMJC7.js} +2 -2
  74. package/chunks/{kernel-vm-runner-JW77P276.js → kernel-vm-runner-PR5OSDQ2.js} +2 -2
  75. package/chunks/managed-operation-YNQQEA5V.js +59 -0
  76. package/chunks/{memsafety-scan-FCPAXIZE.js → memsafety-scan-RPS446CD.js} +2 -2
  77. package/chunks/{native-loop-P6P5GYVJ.js → native-loop-CGOJMNHV.js} +19 -9
  78. package/chunks/orchestrate-5NK34H3W.js +62 -0
  79. package/chunks/{prepare-KYHGFWCJ.js → prepare-YVNENPNL.js} +6 -2
  80. package/chunks/{process-N245QIQG.js → process-MJYJ2K5E.js} +2 -1
  81. package/chunks/remote-workflow-runtime-RGQ5ECMN.js +96 -0
  82. package/chunks/{run-GAFKBCTN.js → run-VH4OIDKF.js} +1919 -4817
  83. package/chunks/{runtime-XFWJTBUO.js → runtime-4TAJFVF7.js} +7 -1
  84. package/chunks/{runtime-H7YBR5IZ.js → runtime-HWL6HG7A.js} +10 -4
  85. package/chunks/{scan-stream-BMOCPKQX.js → scan-stream-HJAZJONE.js} +7 -1
  86. package/chunks/{scope-QWY4VQZ7.js → scope-Q5PIX2IS.js} +2 -2
  87. package/chunks/service-plugins-QYFITODK.js +63 -0
  88. package/chunks/{session-store-XIDFGG7K.js → session-store-2FEIZGSV.js} +6 -4
  89. package/chunks/{variant-candidates-7D4F5E4H.js → variant-candidates-TX5V6XOT.js} +9 -3
  90. package/chunks/{web-recon-prepass-VXXBPDAV.js → web-recon-prepass-6HOUGF7Q.js} +11 -6
  91. package/chunks/workflow-runtime-ZEEBJFQG.js +64 -0
  92. package/dashboard/apple-touch-icon.png +0 -0
  93. package/dashboard/assets/abnfDiagram-VCTEODGH-BuvumFYR.js +1 -0
  94. package/dashboard/assets/arc-DZzWDuCG.js +1 -0
  95. package/dashboard/assets/architecture-7GRP2DOG-DK9bv1Md.js +1 -0
  96. package/dashboard/assets/architectureDiagram-5GKGNRK7-Bw5el_EL.js +36 -0
  97. package/dashboard/assets/array-BifhSqXX.js +1 -0
  98. package/dashboard/assets/blockDiagram-I7D4REHJ-BjVLEApp.js +129 -0
  99. package/dashboard/assets/c4Diagram-7LVT6UL2-B9nNzx2J.js +38 -0
  100. package/dashboard/assets/channel-Ck17eKdX.js +1 -0
  101. package/dashboard/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  102. package/dashboard/assets/chunk-4HAMMTFA-y72Q95nW.js +62 -0
  103. package/dashboard/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  104. package/dashboard/assets/chunk-75Z2AOVW-BOhrOGMO.js +2 -0
  105. package/dashboard/assets/chunk-DU6HZSFF-B0EhAaNb.js +127 -0
  106. package/dashboard/assets/chunk-F27PBJKO-BR-hiDvM.js +1 -0
  107. package/dashboard/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  108. package/dashboard/assets/chunk-GMAD6QVW-H15vJYXg.js +72 -0
  109. package/dashboard/assets/chunk-GVQU2GXP-BRndps0o.js +1 -0
  110. package/dashboard/assets/chunk-IMKFNOWR-CIzC_OWx.js +231 -0
  111. package/dashboard/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  112. package/dashboard/assets/chunk-L3NEJ4N5-NR4P1Vko.js +1 -0
  113. package/dashboard/assets/chunk-OSK3NFVY-DtjTDf8S.js +10 -0
  114. package/dashboard/assets/chunk-P2QGCYS3-CYT11Qjx.js +1 -0
  115. package/dashboard/assets/chunk-POPQ4Y6H-Duj2Ygwu.js +1 -0
  116. package/dashboard/assets/chunk-PWAF6VOD-z4p5Tf_y.js +1 -0
  117. package/dashboard/assets/chunk-SHT3W25Y-DYeLYLS3.js +168 -0
  118. package/dashboard/assets/chunk-SVP7TREG-BKowxCVI.js +88 -0
  119. package/dashboard/assets/chunk-TICWLB2K-GDAwEFlH.js +206 -0
  120. package/dashboard/assets/chunk-XXDRQBXY-DRD79Mjx.js +1 -0
  121. package/dashboard/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  122. package/dashboard/assets/classDiagram-ZZMXUADV-BaeZA6LE.js +1 -0
  123. package/dashboard/assets/classDiagram-v2-VYDZK3BY-BaeZA6LE.js +1 -0
  124. package/dashboard/assets/common-vnzd7UOF.js +5 -0
  125. package/dashboard/assets/cose-bilkent-JH36ORCC-GqCLsRyf.js +1 -0
  126. package/dashboard/assets/cynefin-OW5HDTMX-CJN9YwWN.js +1 -0
  127. package/dashboard/assets/cynefinDiagram-5FMLGOSQ-DVJHCYQY.js +62 -0
  128. package/dashboard/assets/cytoscape.esm-CGd-uY3x.js +321 -0
  129. package/dashboard/assets/dagre-GXQ25YYZ-BMCrrJJR.js +4 -0
  130. package/dashboard/assets/dagre-PrKaheQc.js +1 -0
  131. package/dashboard/assets/defaultLocale-BFoDCU3G.js +1 -0
  132. package/dashboard/assets/diagram-S7CK7UJ4-CLYDdOEm.js +30 -0
  133. package/dashboard/assets/diagram-UQ7AKVKN-CnPuAZK7.js +41 -0
  134. package/dashboard/assets/diagram-VSXAHHWV-Cr2I2DnG.js +3 -0
  135. package/dashboard/assets/diagram-VX7I27RA-_mGW1wpp.js +24 -0
  136. package/dashboard/assets/diagram-Z3DM3KII-igybB0l9.js +24 -0
  137. package/dashboard/assets/dist-Bb7_-x5y.js +1 -0
  138. package/dashboard/assets/ebnfDiagram-PWID7BFC-CVCICf2R.js +1 -0
  139. package/dashboard/assets/erDiagram-RLTQ6QDP-CRjnfgxj.js +99 -0
  140. package/dashboard/assets/eventmodeling-NTZA5JFV-po5oDydv.js +1 -0
  141. package/dashboard/assets/flowDiagram-HODETNUW-TSV9s7q4.js +1 -0
  142. package/dashboard/assets/ganttDiagram-EL5Y4UJY-DppD7sD7.js +292 -0
  143. package/dashboard/assets/gitGraph-4MIJSDKK-Tw0vNnQc.js +1 -0
  144. package/dashboard/assets/gitGraphDiagram-WWUBYQGX-Cpf96-z3.js +106 -0
  145. package/dashboard/assets/graphlib-DS17s2tU.js +1 -0
  146. package/dashboard/assets/info-A6RAGUB7-DLyt9arx.js +1 -0
  147. package/dashboard/assets/infoDiagram-27XIBGKW-B6_piSNS.js +2 -0
  148. package/dashboard/assets/init-C-OQMol4.js +1 -0
  149. package/dashboard/assets/ishikawaDiagram-5VMMS53U-DvMO0B0X.js +70 -0
  150. package/dashboard/assets/journeyDiagram-3NMN7TZE-f7ZK98b6.js +139 -0
  151. package/dashboard/assets/kanban-definition-UXKFOSKX-Dso0nAxL.js +89 -0
  152. package/dashboard/assets/katex-CXMH3UgJ.js +257 -0
  153. package/dashboard/assets/line-VcKaFG0G.js +1 -0
  154. package/dashboard/assets/linear-D7YnpiWh.js +1 -0
  155. package/dashboard/assets/mermaid-parser.core-DriL2hrV.js +7 -0
  156. package/dashboard/assets/mermaid.core-DJWYDh_P.js +44 -0
  157. package/dashboard/assets/mindmap-definition-YA3MSWOX-DZsoIeac.js +96 -0
  158. package/dashboard/assets/operations-BIaUSnYv.js +121 -0
  159. package/dashboard/assets/operations-BeCdkT4S.css +1 -0
  160. package/dashboard/assets/ordinal-BDEzSJ7C.js +1 -0
  161. package/dashboard/assets/packet-AYTQ26CC-BQBIXKxk.js +1 -0
  162. package/dashboard/assets/path-fybaL0A-.js +1 -0
  163. package/dashboard/assets/pegDiagram-XKGWAZYB-B0-lslgW.js +1 -0
  164. package/dashboard/assets/pie-WAS4IAKB-DoY6dwQs.js +1 -0
  165. package/dashboard/assets/pieDiagram-E7YTZNPT-ElmdRjp5.js +39 -0
  166. package/dashboard/assets/quadrantDiagram-AXDQQJYC-Ci1h98Q2.js +7 -0
  167. package/dashboard/assets/radar-RG4KPBEZ-DHod2WgB.js +1 -0
  168. package/dashboard/assets/railroad-74A4TZTK-90JxB4xV.js +1 -0
  169. package/dashboard/assets/railroad-abnf-HS5TGJTU-BkXGl114.js +1 -0
  170. package/dashboard/assets/railroad-ebnf-LZEXJU2U-QVAERn2C.js +1 -0
  171. package/dashboard/assets/railroad-peg-WCYAUIDC-B1-PM01z.js +1 -0
  172. package/dashboard/assets/railroadDiagram-O6MQD6OU-k3190A6L.js +1 -0
  173. package/dashboard/assets/requirementDiagram-BXWQKSXE-C3-eR7I5.js +84 -0
  174. package/dashboard/assets/rough.esm-Dy-Kn_BL.js +1 -0
  175. package/dashboard/assets/sankeyDiagram-P5KCCOFB-Bc86pi8w.js +40 -0
  176. package/dashboard/assets/sequenceDiagram-WJ2MYXX4-Bv_MvEmz.js +162 -0
  177. package/dashboard/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  178. package/dashboard/assets/src-D7Dqq5yP.js +1 -0
  179. package/dashboard/assets/stateDiagram-D77RDMKH-Bq_GVmeW.js +1 -0
  180. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-z1XRaftz.js +1 -0
  181. package/dashboard/assets/swimlanes-42K2YHIH-q0iK-e0P.js +1 -0
  182. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-C9L6XBQj.js +8 -0
  183. package/dashboard/assets/timeline-definition-24CTP7MA-CNfF07hM.js +120 -0
  184. package/dashboard/assets/treeView-Q6P3EWNA-m629ePnS.js +1 -0
  185. package/dashboard/assets/treemap-WGGIJYW6-D9Cb2ETv.js +1 -0
  186. package/dashboard/assets/vennDiagram-4TSXK5OY-v4dKF-FE.js +34 -0
  187. package/dashboard/assets/wardley-WFR3VGLG-DkwH_nRe.js +1 -0
  188. package/dashboard/assets/wardleyDiagram-VM6X3IG4-3ImohVu4.js +78 -0
  189. package/dashboard/assets/xychartDiagram-S5SC5T6Z-QJu3dm7K.js +7 -0
  190. package/dashboard/assets/zero-connect-BGDY0PMZ.webp +0 -0
  191. package/dashboard/assets/zero-curious-DovTLOs8.webp +0 -0
  192. package/dashboard/assets/zero-peek-Dzm3MT3X.png +0 -0
  193. package/dashboard/assets/zero-planning-CBeHDrG_.webp +0 -0
  194. package/dashboard/favicon.ico +0 -0
  195. package/dashboard/favicon.svg +10 -0
  196. package/dashboard/index.html +5 -3
  197. package/package.json +1 -1
  198. package/chunks/chunk-BCSRRQG5.js +0 -3514
  199. package/chunks/chunk-BOUGKEKA.js +0 -193
  200. package/chunks/chunk-GHWODZMR.js +0 -16
  201. package/chunks/eval-runner-EMEGF24P.js +0 -26
  202. package/chunks/orchestrate-DWWUT5RC.js +0 -58
  203. package/dashboard/assets/bot-Bg1Tp9_d.js +0 -1
  204. package/dashboard/assets/dist-B_dDCPbu.js +0 -1
  205. package/dashboard/assets/findings-page-mayGhNx6.js +0 -5
  206. package/dashboard/assets/format--susmHX7.js +0 -1
  207. package/dashboard/assets/input-TuVPR3Zl.js +0 -1
  208. package/dashboard/assets/jsx-runtime-MGseXjj5.js +0 -3
  209. package/dashboard/assets/live-page-HWWHX99U.js +0 -1
  210. package/dashboard/assets/meta-tile-ckHo-w7k.js +0 -1
  211. package/dashboard/assets/operations-BxZ0OoXO.js +0 -10
  212. package/dashboard/assets/operations-CMFVrXEe.css +0 -2
  213. package/dashboard/assets/operations-app-D3d35rgo.js +0 -46
  214. package/dashboard/assets/overview-page-W_4IteEr.js +0 -1
  215. package/dashboard/assets/page-header-Bw9AJgBV.js +0 -1
  216. package/dashboard/assets/scans-page-CgzVXHnn.js +0 -1
  217. package/dashboard/assets/siren-KQj8QAnJ.js +0 -1
  218. package/dashboard/assets/table-8EDklulN.js +0 -1
  219. package/dashboard/assets/tabs-CFHPOwg8.js +0 -1
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __0CreateRequire } from "node:module";
3
+ const require = __0CreateRequire(import.meta.url);
4
+ import {
5
+ homeStateDir
6
+ } from "./chunk-LTEE2JWK.js";
7
+ import {
8
+ external_exports
9
+ } from "./chunk-VIT5ALXF.js";
10
+
11
+ // packages/cli/src/tui/session-store.ts
12
+ import { chmodSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+ var SESSIONS_DIRNAME = "console-sessions";
15
+ var FILE_MODE = 384;
16
+ var DIR_MODE = 448;
17
+ var DEFAULT_PRUNE_KEEP = 20;
18
+ var PREVIEW_MAX_LENGTH = 120;
19
+ var SUMMARY_MAX_LENGTH = 120;
20
+ var SESSION_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
21
+ var FILE_SUFFIX = ".json";
22
+ function sessionsDir(homeDir) {
23
+ return join(homeStateDir(homeDir), SESSIONS_DIRNAME);
24
+ }
25
+ function isValidSessionId(id) {
26
+ return typeof id === "string" && SESSION_ID_PATTERN.test(id);
27
+ }
28
+ function sessionFilePath(id, homeDir) {
29
+ if (!isValidSessionId(id)) return null;
30
+ return join(sessionsDir(homeDir), `${id}${FILE_SUFFIX}`);
31
+ }
32
+ function rawValue(raw, key) {
33
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return void 0;
34
+ return raw[key];
35
+ }
36
+ function optionalString(raw, key) {
37
+ const value = rawValue(raw, key);
38
+ return typeof value === "string" && value.length > 0 ? value : void 0;
39
+ }
40
+ var CONTROL_CHARS = /[\u0000-\u001F\u007F-\u009F]+/g;
41
+ function sanitizeLine(value, maxLength) {
42
+ if (typeof value !== "string") return "";
43
+ const flattened = value.replace(CONTROL_CHARS, " ").replace(/\s+/g, " ").trim();
44
+ return flattened.length > maxLength ? `${flattened.slice(0, maxLength - 1)}\u2026` : flattened;
45
+ }
46
+ function sanitizePreview(value) {
47
+ return sanitizeLine(value, PREVIEW_MAX_LENGTH);
48
+ }
49
+ function sanitizeSummary(value) {
50
+ const flattened = sanitizeLine(value, SUMMARY_MAX_LENGTH);
51
+ return flattened.length > 0 ? flattened : void 0;
52
+ }
53
+ function toMeta(id, raw, messageCount) {
54
+ const savedAt = rawValue(raw, "savedAt");
55
+ const cwd = rawValue(raw, "cwd");
56
+ const target = optionalString(raw, "target");
57
+ const model = optionalString(raw, "model");
58
+ const mode = optionalString(raw, "mode");
59
+ const summary = sanitizeSummary(rawValue(raw, "summary"));
60
+ return {
61
+ id,
62
+ savedAt: typeof savedAt === "number" && Number.isFinite(savedAt) ? savedAt : 0,
63
+ ...target !== void 0 ? { target } : {},
64
+ ...model !== void 0 ? { model } : {},
65
+ ...mode !== void 0 ? { mode } : {},
66
+ cwd: typeof cwd === "string" ? cwd : "",
67
+ messageCount,
68
+ preview: sanitizePreview(rawValue(raw, "preview")),
69
+ ...rawValue(raw, "archived") === true ? { archived: true } : {},
70
+ ...summary !== void 0 ? { summary } : {}
71
+ };
72
+ }
73
+ var finite = external_exports.number().finite().nonnegative();
74
+ var boundedString = external_exports.string().max(1e6);
75
+ var jsonValueSchema = external_exports.lazy(() => external_exports.union([
76
+ external_exports.null(),
77
+ external_exports.boolean(),
78
+ external_exports.number().finite(),
79
+ boundedString,
80
+ external_exports.array(jsonValueSchema).max(1e4),
81
+ external_exports.record(jsonValueSchema)
82
+ ]));
83
+ var toolCallSchema = external_exports.object({ id: external_exports.string().max(256).optional(), name: external_exports.string().max(256), arguments: jsonValueSchema }).strict();
84
+ var workerTurnSchema = external_exports.object({
85
+ turn: finite,
86
+ ts: finite,
87
+ assistant: boundedString.optional(),
88
+ reasoning_summary: boundedString.optional(),
89
+ partial: external_exports.boolean().optional(),
90
+ tools: external_exports.array(external_exports.object({ callIndex: finite, call: toolCallSchema, result: jsonValueSchema, running: external_exports.boolean().optional() }).strict()).max(1e3).optional()
91
+ }).strict();
92
+ var workerSchema = external_exports.object({
93
+ id: external_exports.string().max(256),
94
+ parentId: external_exports.string().max(256),
95
+ name: external_exports.string().max(200),
96
+ status: external_exports.enum(["queued", "running", "parked", "completed", "failed", "stopped"]),
97
+ task: boundedString,
98
+ transcript: external_exports.array(workerTurnSchema).max(1e4),
99
+ telemetry: external_exports.record(jsonValueSchema).optional(),
100
+ operatorMessages: external_exports.array(external_exports.object({ id: external_exports.string().max(256), text: boundedString, createdAt: external_exports.string().max(64) }).strict()).max(1e4).optional(),
101
+ summary: boundedString.optional(),
102
+ error: boundedString.optional(),
103
+ model: external_exports.string().max(256).optional(),
104
+ role: external_exports.string().max(64).optional()
105
+ }).strict();
106
+ var consoleStateSchema = external_exports.object({
107
+ configuration: external_exports.object({
108
+ target: external_exports.string().max(8e3),
109
+ role: external_exports.enum(["discovery", "attack", "verify", "report", "audit", "review"]),
110
+ runtime: external_exports.object({
111
+ providerId: external_exports.string().max(256).optional(),
112
+ model: external_exports.string().max(256).optional(),
113
+ reasoningEffort: external_exports.enum(["none", "low", "medium", "high", "xhigh", "max"]).optional(),
114
+ agentModels: external_exports.record(external_exports.string().max(256)).optional(),
115
+ singleModel: external_exports.boolean().optional(),
116
+ autoRoute: external_exports.boolean().optional()
117
+ }).strict()
118
+ }).strict().optional(),
119
+ version: external_exports.literal(1),
120
+ title: external_exports.string().max(200),
121
+ objective: external_exports.string().max(8e3),
122
+ usage: external_exports.object({
123
+ inputTokens: finite,
124
+ outputTokens: finite,
125
+ costUsd: finite.optional(),
126
+ costKind: external_exports.enum(["estimated", "reported"]).optional(),
127
+ costUnavailable: external_exports.boolean().optional()
128
+ }).strict(),
129
+ contextInputTokens: finite.optional(),
130
+ lastOutcome: external_exports.object({
131
+ assistantText: boundedString,
132
+ stopReason: external_exports.enum(["end_turn", "max_tool_iterations", "max_turn_tokens", "output_cap", "cancelled", "error"]),
133
+ budget: external_exports.object({ tokensUsed: finite, tokenBudget: finite.nullable(), iterations: finite, maxToolIterations: finite }).strict(),
134
+ error: boundedString.optional(),
135
+ usage: external_exports.object({ inputTokens: finite, outputTokens: finite }).strict().optional(),
136
+ contextInputTokens: finite.optional(),
137
+ outputCap: external_exports.object({ checkpoint: jsonValueSchema, continuations: finite, message: boundedString }).strict().optional()
138
+ }).strict().nullable(),
139
+ todos: external_exports.object({
140
+ todos: external_exports.array(external_exports.object({ id: external_exports.string().max(256), content: external_exports.string().max(8e3), status: external_exports.string().max(64), group: external_exports.string().max(200).optional() }).strict()).max(1e3),
141
+ done: finite,
142
+ total: finite,
143
+ line: external_exports.string().max(8e3),
144
+ revision: finite
145
+ }).strict().nullable(),
146
+ workers: external_exports.array(workerSchema).max(1e3),
147
+ compaction: jsonValueSchema.nullable(),
148
+ queuedMessages: external_exports.array(external_exports.object({ id: external_exports.string().max(256), text: boundedString, createdAt: external_exports.string().max(64) }).strict()).max(20),
149
+ focusedFindingId: external_exports.string().max(256).optional(),
150
+ stagedPrompt: boundedString.optional()
151
+ }).strict();
152
+ function parseConsoleState(value) {
153
+ let nodes = 0;
154
+ const ancestors = /* @__PURE__ */ new Set();
155
+ const boundedJson = (entry, depth) => {
156
+ if (++nodes > 1e5 || depth > 24) return false;
157
+ if (entry === null || typeof entry === "boolean") return true;
158
+ if (typeof entry === "string") return entry.length <= 1e6;
159
+ if (typeof entry === "number") return Number.isFinite(entry);
160
+ if (typeof entry !== "object" || ancestors.has(entry)) return false;
161
+ if (!Array.isArray(entry) && Object.getPrototypeOf(entry) !== Object.prototype && Object.getPrototypeOf(entry) !== null) return false;
162
+ ancestors.add(entry);
163
+ const valid = (Array.isArray(entry) ? entry : Object.values(entry)).every((item) => boundedJson(item, depth + 1));
164
+ ancestors.delete(entry);
165
+ return valid;
166
+ };
167
+ if (!boundedJson(value, 0)) return void 0;
168
+ try {
169
+ if (JSON.stringify(value).length > 4 * 1024 * 1024) return void 0;
170
+ const parsed = consoleStateSchema.safeParse(value);
171
+ return parsed.success ? parsed.data : void 0;
172
+ } catch {
173
+ return void 0;
174
+ }
175
+ }
176
+ function parseSession(id, text) {
177
+ let raw;
178
+ try {
179
+ raw = JSON.parse(text);
180
+ } catch {
181
+ return null;
182
+ }
183
+ const messages = rawValue(raw, "messages");
184
+ if (!Array.isArray(messages)) return null;
185
+ const consoleState = parseConsoleState(rawValue(raw, "consoleState"));
186
+ return { ...toMeta(id, raw, messages.length), messages, ...consoleState ? { consoleState } : {} };
187
+ }
188
+ function saveSession(session, homeDir) {
189
+ try {
190
+ if (!Array.isArray(session?.messages)) return false;
191
+ const path = sessionFilePath(session.id, homeDir);
192
+ if (path === null) return false;
193
+ const consoleState = session.consoleState === void 0 ? void 0 : parseConsoleState(session.consoleState);
194
+ if (session.consoleState !== void 0 && !consoleState) return false;
195
+ const dir = sessionsDir(homeDir);
196
+ mkdirSync(dir, { recursive: true, mode: DIR_MODE });
197
+ chmodSync(dir, DIR_MODE);
198
+ const payload = {
199
+ ...toMeta(session.id, session, session.messages.length),
200
+ messages: session.messages,
201
+ ...consoleState ? { consoleState } : {}
202
+ };
203
+ writeFileSync(path, `${JSON.stringify(payload)}
204
+ `, { encoding: "utf8", mode: FILE_MODE });
205
+ chmodSync(path, FILE_MODE);
206
+ return true;
207
+ } catch {
208
+ return false;
209
+ }
210
+ }
211
+ function listSessions(homeDir, opts) {
212
+ const dir = sessionsDir(homeDir);
213
+ let entries;
214
+ try {
215
+ entries = readdirSync(dir);
216
+ } catch {
217
+ return [];
218
+ }
219
+ const out = [];
220
+ for (const entry of entries) {
221
+ if (!entry.endsWith(FILE_SUFFIX)) continue;
222
+ const id = entry.slice(0, -FILE_SUFFIX.length);
223
+ if (!isValidSessionId(id)) continue;
224
+ let text;
225
+ try {
226
+ text = readFileSync(join(dir, entry), "utf8");
227
+ } catch {
228
+ continue;
229
+ }
230
+ const parsed = parseSession(id, text);
231
+ if (parsed === null) continue;
232
+ if (opts?.cwd !== void 0 && parsed.cwd !== opts.cwd) continue;
233
+ const { messages: _messages, ...meta } = parsed;
234
+ out.push(meta);
235
+ }
236
+ out.sort((a, b) => b.savedAt - a.savedAt || a.id.localeCompare(b.id));
237
+ const limit = opts?.limit;
238
+ if (typeof limit === "number" && Number.isFinite(limit)) {
239
+ return out.slice(0, Math.max(0, Math.floor(limit)));
240
+ }
241
+ return out;
242
+ }
243
+ var SECONDS_PER_MINUTE = 60;
244
+ var MINUTES_PER_HOUR = 60;
245
+ var HOURS_PER_DAY = 24;
246
+ var DAYS_PER_WEEK = 7;
247
+ var FUTURE_SKEW_MS = 6e4;
248
+ function relativeAge(savedAt, now) {
249
+ if (!Number.isFinite(savedAt) || savedAt <= 0) return "";
250
+ if (savedAt > now + FUTURE_SKEW_MS) return "";
251
+ const seconds = Math.max(0, Math.floor((now - savedAt) / 1e3));
252
+ if (seconds < SECONDS_PER_MINUTE) return `${seconds}s`;
253
+ const minutes = Math.floor(seconds / SECONDS_PER_MINUTE);
254
+ if (minutes < MINUTES_PER_HOUR) return `${minutes}m`;
255
+ const hours = Math.floor(minutes / MINUTES_PER_HOUR);
256
+ if (hours < HOURS_PER_DAY) return `${hours}h`;
257
+ const days = Math.floor(hours / HOURS_PER_DAY);
258
+ if (days < DAYS_PER_WEEK) return `${days}d`;
259
+ return `${Math.floor(days / DAYS_PER_WEEK)}w`;
260
+ }
261
+ function loadSession(id, homeDir) {
262
+ const path = sessionFilePath(id, homeDir);
263
+ if (path === null) return null;
264
+ try {
265
+ return parseSession(id, readFileSync(path, "utf8"));
266
+ } catch {
267
+ return null;
268
+ }
269
+ }
270
+ function deleteSession(id, homeDir, opts) {
271
+ if (opts?.protectedIds?.has(id)) return false;
272
+ const path = sessionFilePath(id, homeDir);
273
+ if (path === null) return false;
274
+ try {
275
+ rmSync(path, { force: false });
276
+ return true;
277
+ } catch {
278
+ return false;
279
+ }
280
+ }
281
+ function pruneSessions(homeDir, opts) {
282
+ const requested = opts?.keep;
283
+ const keep = typeof requested === "number" && Number.isFinite(requested) ? Math.max(0, Math.floor(requested)) : DEFAULT_PRUNE_KEEP;
284
+ let removed = 0;
285
+ let archived = 0;
286
+ for (const meta of listSessions(homeDir)) {
287
+ if (opts?.protectedIds?.has(meta.id)) continue;
288
+ if (archived++ < keep) continue;
289
+ if (deleteSession(meta.id, homeDir, opts)) removed += 1;
290
+ }
291
+ return removed;
292
+ }
293
+ function setSessionArchived(id, archived, homeDir) {
294
+ const session = loadSession(id, homeDir);
295
+ return session !== null && saveSession({ ...session, archived }, homeDir);
296
+ }
297
+
298
+ export {
299
+ DEFAULT_PRUNE_KEEP,
300
+ sessionsDir,
301
+ isValidSessionId,
302
+ saveSession,
303
+ listSessions,
304
+ relativeAge,
305
+ loadSession,
306
+ deleteSession,
307
+ pruneSessions,
308
+ setSessionArchived
309
+ };
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-5IBCBQEH.js";
7
7
  import {
8
8
  homeStateDir
9
- } from "./chunk-KAU6NLGP.js";
9
+ } from "./chunk-LTEE2JWK.js";
10
10
 
11
11
  // packages/core/dist/scope/scope.js
12
12
  import { readFileSync as readFileSync3 } from "node:fs";
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  homeStateDir
6
- } from "./chunk-KAU6NLGP.js";
6
+ } from "./chunk-LTEE2JWK.js";
7
7
 
8
8
  // packages/core/dist/scope/waf-detect.js
9
9
  function readHeader(headers, name) {
@@ -5,7 +5,7 @@ import {
5
5
  CODEX_CLIENT_VERSION,
6
6
  CODEX_PROTOCOL_HEADERS,
7
7
  getChatGptCodexAccessToken
8
- } from "./chunk-AV2LG2L7.js";
8
+ } from "./chunk-BF5FIK7H.js";
9
9
 
10
10
  // packages/core/dist/runtime/codex-models.js
11
11
  import { createHash } from "node:crypto";
@@ -2,6 +2,7 @@
2
2
  import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
+ EventSourceParserStream,
5
6
  _enum,
6
7
  any,
7
8
  array,
@@ -16,7 +17,7 @@ import {
16
17
  toJSONSchema,
17
18
  union,
18
19
  unknown
19
- } from "./chunk-6YNKRUMC.js";
20
+ } from "./chunk-NJLKFC66.js";
20
21
  import {
21
22
  require_auth_errors,
22
23
  require_token_error,
@@ -583,195 +584,6 @@ function isJSONObject(value) {
583
584
  );
584
585
  }
585
586
 
586
- // node_modules/.pnpm/eventsource-parser@3.0.8/node_modules/eventsource-parser/dist/index.js
587
- var ParseError = class extends Error {
588
- constructor(message, options) {
589
- super(message), this.name = "ParseError", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;
590
- }
591
- };
592
- var LF = 10;
593
- var CR = 13;
594
- var SPACE = 32;
595
- function noop(_arg) {
596
- }
597
- function createParser(callbacks) {
598
- if (typeof callbacks == "function")
599
- throw new TypeError(
600
- "`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?"
601
- );
602
- const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks, pendingFragments = [];
603
- let isFirstChunk = true, id, data = "", dataLines = 0, eventType;
604
- function feed(chunk) {
605
- if (isFirstChunk && (isFirstChunk = false, chunk.charCodeAt(0) === 239 && chunk.charCodeAt(1) === 187 && chunk.charCodeAt(2) === 191 && (chunk = chunk.slice(3))), pendingFragments.length === 0) {
606
- const trailing2 = processLines(chunk);
607
- trailing2 !== "" && pendingFragments.push(trailing2);
608
- return;
609
- }
610
- if (chunk.indexOf(`
611
- `) === -1 && chunk.indexOf("\r") === -1) {
612
- pendingFragments.push(chunk);
613
- return;
614
- }
615
- pendingFragments.push(chunk);
616
- const input = pendingFragments.join("");
617
- pendingFragments.length = 0;
618
- const trailing = processLines(input);
619
- trailing !== "" && pendingFragments.push(trailing);
620
- }
621
- function processLines(chunk) {
622
- let searchIndex = 0;
623
- if (chunk.indexOf("\r") === -1) {
624
- let lfIndex = chunk.indexOf(`
625
- `, searchIndex);
626
- for (; lfIndex !== -1; ) {
627
- if (searchIndex === lfIndex) {
628
- dataLines > 0 && onEvent({ id, event: eventType, data }), id = void 0, data = "", dataLines = 0, eventType = void 0, searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`
629
- `, searchIndex);
630
- continue;
631
- }
632
- const firstCharCode = chunk.charCodeAt(searchIndex);
633
- if (isDataPrefix(chunk, searchIndex, firstCharCode)) {
634
- const valueStart = chunk.charCodeAt(searchIndex + 5) === SPACE ? searchIndex + 6 : searchIndex + 5, value = chunk.slice(valueStart, lfIndex);
635
- if (dataLines === 0 && chunk.charCodeAt(lfIndex + 1) === LF) {
636
- onEvent({ id, event: eventType, data: value }), id = void 0, data = "", eventType = void 0, searchIndex = lfIndex + 2, lfIndex = chunk.indexOf(`
637
- `, searchIndex);
638
- continue;
639
- }
640
- data = dataLines === 0 ? value : `${data}
641
- ${value}`, dataLines++;
642
- } else isEventPrefix(chunk, searchIndex, firstCharCode) ? eventType = chunk.slice(
643
- chunk.charCodeAt(searchIndex + 6) === SPACE ? searchIndex + 7 : searchIndex + 6,
644
- lfIndex
645
- ) || void 0 : parseLine(chunk, searchIndex, lfIndex);
646
- searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`
647
- `, searchIndex);
648
- }
649
- return chunk.slice(searchIndex);
650
- }
651
- for (; searchIndex < chunk.length; ) {
652
- const crIndex = chunk.indexOf("\r", searchIndex), lfIndex = chunk.indexOf(`
653
- `, searchIndex);
654
- let lineEnd = -1;
655
- if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = crIndex < lfIndex ? crIndex : lfIndex : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1)
656
- break;
657
- parseLine(chunk, searchIndex, lineEnd), searchIndex = lineEnd + 1, chunk.charCodeAt(searchIndex - 1) === CR && chunk.charCodeAt(searchIndex) === LF && searchIndex++;
658
- }
659
- return chunk.slice(searchIndex);
660
- }
661
- function parseLine(chunk, start, end) {
662
- if (start === end) {
663
- dispatchEvent();
664
- return;
665
- }
666
- const firstCharCode = chunk.charCodeAt(start);
667
- if (isDataPrefix(chunk, start, firstCharCode)) {
668
- const valueStart = chunk.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5, value2 = chunk.slice(valueStart, end);
669
- data = dataLines === 0 ? value2 : `${data}
670
- ${value2}`, dataLines++;
671
- return;
672
- }
673
- if (isEventPrefix(chunk, start, firstCharCode)) {
674
- eventType = chunk.slice(chunk.charCodeAt(start + 6) === SPACE ? start + 7 : start + 6, end) || void 0;
675
- return;
676
- }
677
- if (firstCharCode === 105 && chunk.charCodeAt(start + 1) === 100 && chunk.charCodeAt(start + 2) === 58) {
678
- const value2 = chunk.slice(chunk.charCodeAt(start + 3) === SPACE ? start + 4 : start + 3, end);
679
- id = value2.includes("\0") ? void 0 : value2;
680
- return;
681
- }
682
- if (firstCharCode === 58) {
683
- if (onComment) {
684
- const line2 = chunk.slice(start, end);
685
- onComment(line2.slice(chunk.charCodeAt(start + 1) === SPACE ? 2 : 1));
686
- }
687
- return;
688
- }
689
- const line = chunk.slice(start, end), fieldSeparatorIndex = line.indexOf(":");
690
- if (fieldSeparatorIndex === -1) {
691
- processField(line, "", line);
692
- return;
693
- }
694
- const field = line.slice(0, fieldSeparatorIndex), offset = line.charCodeAt(fieldSeparatorIndex + 1) === SPACE ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset);
695
- processField(field, value, line);
696
- }
697
- function processField(field, value, line) {
698
- switch (field) {
699
- case "event":
700
- eventType = value || void 0;
701
- break;
702
- case "data":
703
- data = dataLines === 0 ? value : `${data}
704
- ${value}`, dataLines++;
705
- break;
706
- case "id":
707
- id = value.includes("\0") ? void 0 : value;
708
- break;
709
- case "retry":
710
- /^\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(
711
- new ParseError(`Invalid \`retry\` value: "${value}"`, {
712
- type: "invalid-retry",
713
- value,
714
- line
715
- })
716
- );
717
- break;
718
- default:
719
- onError(
720
- new ParseError(
721
- `Unknown field "${field.length > 20 ? `${field.slice(0, 20)}\u2026` : field}"`,
722
- { type: "unknown-field", field, value, line }
723
- )
724
- );
725
- break;
726
- }
727
- }
728
- function dispatchEvent() {
729
- dataLines > 0 && onEvent({
730
- id,
731
- event: eventType,
732
- data
733
- }), id = void 0, data = "", dataLines = 0, eventType = void 0;
734
- }
735
- function reset(options = {}) {
736
- if (options.consume && pendingFragments.length > 0) {
737
- const incompleteLine = pendingFragments.join("");
738
- parseLine(incompleteLine, 0, incompleteLine.length);
739
- }
740
- isFirstChunk = true, id = void 0, data = "", dataLines = 0, eventType = void 0, pendingFragments.length = 0;
741
- }
742
- return { feed, reset };
743
- }
744
- function isDataPrefix(chunk, i, firstCharCode) {
745
- return firstCharCode === 100 && chunk.charCodeAt(i + 1) === 97 && chunk.charCodeAt(i + 2) === 116 && chunk.charCodeAt(i + 3) === 97 && chunk.charCodeAt(i + 4) === 58;
746
- }
747
- function isEventPrefix(chunk, i, firstCharCode) {
748
- return firstCharCode === 101 && chunk.charCodeAt(i + 1) === 118 && chunk.charCodeAt(i + 2) === 101 && chunk.charCodeAt(i + 3) === 110 && chunk.charCodeAt(i + 4) === 116 && chunk.charCodeAt(i + 5) === 58;
749
- }
750
-
751
- // node_modules/.pnpm/eventsource-parser@3.0.8/node_modules/eventsource-parser/dist/stream.js
752
- var EventSourceParserStream = class extends TransformStream {
753
- constructor({ onError, onRetry, onComment } = {}) {
754
- let parser;
755
- super({
756
- start(controller) {
757
- parser = createParser({
758
- onEvent: (event) => {
759
- controller.enqueue(event);
760
- },
761
- onError(error) {
762
- onError === "terminate" ? controller.error(error) : typeof onError == "function" && onError(error);
763
- },
764
- onRetry,
765
- onComment
766
- });
767
- },
768
- transform(chunk) {
769
- parser.feed(chunk);
770
- }
771
- });
772
- }
773
- };
774
-
775
587
  // node_modules/.pnpm/@workflow+serde@4.1.0/node_modules/@workflow/serde/dist/index.js
776
588
  var WORKFLOW_SERIALIZE = /* @__PURE__ */ Symbol.for("workflow-serialize");
777
589
  var WORKFLOW_DESERIALIZE = /* @__PURE__ */ Symbol.for("workflow-deserialize");