@chances-ai/engine 27.0.0 → 29.0.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 (153) hide show
  1. package/dist/agents/bundled.d.ts +5 -0
  2. package/dist/agents/bundled.d.ts.map +1 -0
  3. package/dist/agents/bundled.js +66 -0
  4. package/dist/agents/bundled.js.map +1 -0
  5. package/dist/agents/index.d.ts +1 -0
  6. package/dist/agents/index.d.ts.map +1 -1
  7. package/dist/agents/index.js +1 -0
  8. package/dist/agents/index.js.map +1 -1
  9. package/dist/agents/parse.d.ts +3 -0
  10. package/dist/agents/parse.d.ts.map +1 -1
  11. package/dist/agents/parse.js +17 -0
  12. package/dist/agents/parse.js.map +1 -1
  13. package/dist/agents/types.d.ts +8 -0
  14. package/dist/agents/types.d.ts.map +1 -1
  15. package/dist/ai/adapters/ai-sdk-stream.js +15 -0
  16. package/dist/ai/adapters/ai-sdk-stream.js.map +1 -1
  17. package/dist/ai/types.d.ts +12 -0
  18. package/dist/ai/types.d.ts.map +1 -1
  19. package/dist/core/coordinator-mode.d.ts +32 -0
  20. package/dist/core/coordinator-mode.d.ts.map +1 -0
  21. package/dist/core/coordinator-mode.js +98 -0
  22. package/dist/core/coordinator-mode.js.map +1 -0
  23. package/dist/core/coordinator-tools.d.ts +22 -0
  24. package/dist/core/coordinator-tools.d.ts.map +1 -0
  25. package/dist/core/coordinator-tools.js +262 -0
  26. package/dist/core/coordinator-tools.js.map +1 -0
  27. package/dist/core/engine.d.ts +50 -6
  28. package/dist/core/engine.d.ts.map +1 -1
  29. package/dist/core/engine.js +107 -17
  30. package/dist/core/engine.js.map +1 -1
  31. package/dist/core/index.d.ts +3 -1
  32. package/dist/core/index.d.ts.map +1 -1
  33. package/dist/core/index.js +3 -1
  34. package/dist/core/index.js.map +1 -1
  35. package/dist/core/task-tool.d.ts +85 -1
  36. package/dist/core/task-tool.d.ts.map +1 -1
  37. package/dist/core/task-tool.js +456 -500
  38. package/dist/core/task-tool.js.map +1 -1
  39. package/dist/hashline/apply.d.ts +9 -0
  40. package/dist/hashline/apply.d.ts.map +1 -0
  41. package/dist/hashline/apply.js +523 -0
  42. package/dist/hashline/apply.js.map +1 -0
  43. package/dist/hashline/block.d.ts +25 -0
  44. package/dist/hashline/block.d.ts.map +1 -0
  45. package/dist/hashline/block.js +71 -0
  46. package/dist/hashline/block.js.map +1 -0
  47. package/dist/hashline/format.d.ts +106 -0
  48. package/dist/hashline/format.d.ts.map +1 -0
  49. package/dist/hashline/format.js +191 -0
  50. package/dist/hashline/format.js.map +1 -0
  51. package/dist/hashline/fs.d.ts +87 -0
  52. package/dist/hashline/fs.d.ts.map +1 -0
  53. package/dist/hashline/fs.js +123 -0
  54. package/dist/hashline/fs.js.map +1 -0
  55. package/dist/hashline/index.d.ts +27 -0
  56. package/dist/hashline/index.d.ts.map +1 -0
  57. package/dist/hashline/index.js +27 -0
  58. package/dist/hashline/index.js.map +1 -0
  59. package/dist/hashline/input.d.ts +101 -0
  60. package/dist/hashline/input.d.ts.map +1 -0
  61. package/dist/hashline/input.js +378 -0
  62. package/dist/hashline/input.js.map +1 -0
  63. package/dist/hashline/messages.d.ts +87 -0
  64. package/dist/hashline/messages.d.ts.map +1 -0
  65. package/dist/hashline/messages.js +94 -0
  66. package/dist/hashline/messages.js.map +1 -0
  67. package/dist/hashline/mismatch.d.ts +45 -0
  68. package/dist/hashline/mismatch.d.ts.map +1 -0
  69. package/dist/hashline/mismatch.js +118 -0
  70. package/dist/hashline/mismatch.js.map +1 -0
  71. package/dist/hashline/normalize.d.ts +22 -0
  72. package/dist/hashline/normalize.d.ts.map +1 -0
  73. package/dist/hashline/normalize.js +31 -0
  74. package/dist/hashline/normalize.js.map +1 -0
  75. package/dist/hashline/parser.d.ts +24 -0
  76. package/dist/hashline/parser.d.ts.map +1 -0
  77. package/dist/hashline/parser.js +295 -0
  78. package/dist/hashline/parser.js.map +1 -0
  79. package/dist/hashline/patcher.d.ts +111 -0
  80. package/dist/hashline/patcher.d.ts.map +1 -0
  81. package/dist/hashline/patcher.js +332 -0
  82. package/dist/hashline/patcher.js.map +1 -0
  83. package/dist/hashline/recovery.d.ts +41 -0
  84. package/dist/hashline/recovery.d.ts.map +1 -0
  85. package/dist/hashline/recovery.js +175 -0
  86. package/dist/hashline/recovery.js.map +1 -0
  87. package/dist/hashline/snapshots.d.ts +62 -0
  88. package/dist/hashline/snapshots.d.ts.map +1 -0
  89. package/dist/hashline/snapshots.js +127 -0
  90. package/dist/hashline/snapshots.js.map +1 -0
  91. package/dist/hashline/tokenizer.d.ts +66 -0
  92. package/dist/hashline/tokenizer.d.ts.map +1 -0
  93. package/dist/hashline/tokenizer.js +408 -0
  94. package/dist/hashline/tokenizer.js.map +1 -0
  95. package/dist/hashline/types.d.ts +117 -0
  96. package/dist/hashline/types.d.ts.map +1 -0
  97. package/dist/hashline/types.js +13 -0
  98. package/dist/hashline/types.js.map +1 -0
  99. package/dist/tools/builtins/_hashline-fs.d.ts +16 -0
  100. package/dist/tools/builtins/_hashline-fs.d.ts.map +1 -0
  101. package/dist/tools/builtins/_hashline-fs.js +62 -0
  102. package/dist/tools/builtins/_hashline-fs.js.map +1 -0
  103. package/dist/tools/builtins/_image.d.ts +26 -0
  104. package/dist/tools/builtins/_image.d.ts.map +1 -0
  105. package/dist/tools/builtins/_image.js +76 -0
  106. package/dist/tools/builtins/_image.js.map +1 -0
  107. package/dist/tools/builtins/_login-shell.d.ts +17 -0
  108. package/dist/tools/builtins/_login-shell.d.ts.map +1 -0
  109. package/dist/tools/builtins/_login-shell.js +66 -0
  110. package/dist/tools/builtins/_login-shell.js.map +1 -0
  111. package/dist/tools/builtins/_notebook.d.ts +15 -0
  112. package/dist/tools/builtins/_notebook.d.ts.map +1 -0
  113. package/dist/tools/builtins/_notebook.js +81 -0
  114. package/dist/tools/builtins/_notebook.js.map +1 -0
  115. package/dist/tools/builtins/_pdf.d.ts +19 -0
  116. package/dist/tools/builtins/_pdf.d.ts.map +1 -0
  117. package/dist/tools/builtins/_pdf.js +42 -0
  118. package/dist/tools/builtins/_pdf.js.map +1 -0
  119. package/dist/tools/builtins/_shared.d.ts +11 -0
  120. package/dist/tools/builtins/_shared.d.ts.map +1 -1
  121. package/dist/tools/builtins/_shared.js +40 -1
  122. package/dist/tools/builtins/_shared.js.map +1 -1
  123. package/dist/tools/builtins/ast-edit.d.ts +18 -0
  124. package/dist/tools/builtins/ast-edit.d.ts.map +1 -0
  125. package/dist/tools/builtins/ast-edit.js +109 -0
  126. package/dist/tools/builtins/ast-edit.js.map +1 -0
  127. package/dist/tools/builtins/ast-grep.d.ts +6 -0
  128. package/dist/tools/builtins/ast-grep.d.ts.map +1 -0
  129. package/dist/tools/builtins/ast-grep.js +67 -0
  130. package/dist/tools/builtins/ast-grep.js.map +1 -0
  131. package/dist/tools/builtins/bash.d.ts.map +1 -1
  132. package/dist/tools/builtins/bash.js +13 -2
  133. package/dist/tools/builtins/bash.js.map +1 -1
  134. package/dist/tools/builtins/edit.d.ts.map +1 -1
  135. package/dist/tools/builtins/edit.js +112 -31
  136. package/dist/tools/builtins/edit.js.map +1 -1
  137. package/dist/tools/builtins/read.d.ts.map +1 -1
  138. package/dist/tools/builtins/read.js +187 -11
  139. package/dist/tools/builtins/read.js.map +1 -1
  140. package/dist/tools/builtins.d.ts.map +1 -1
  141. package/dist/tools/builtins.js +4 -0
  142. package/dist/tools/builtins.js.map +1 -1
  143. package/dist/tools/file-lock.d.ts +8 -0
  144. package/dist/tools/file-lock.d.ts.map +1 -1
  145. package/dist/tools/file-lock.js +22 -0
  146. package/dist/tools/file-lock.js.map +1 -1
  147. package/dist/tools/index.d.ts +1 -1
  148. package/dist/tools/index.d.ts.map +1 -1
  149. package/dist/tools/index.js.map +1 -1
  150. package/dist/tools/types.d.ts +26 -0
  151. package/dist/tools/types.d.ts.map +1 -1
  152. package/dist/tools/types.js.map +1 -1
  153. package/package.json +8 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/hashline/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { BlockResolver, Edit } from "./types.js";
2
+ export interface ResolveBlockEditsOptions {
3
+ /**
4
+ * How to handle a block edit that cannot be resolved (missing resolver or a
5
+ * `null` span). `"throw"` (default) raises a `blockUnresolvedMessage` error —
6
+ * used by the authoritative apply + final preview paths. `"drop"` silently
7
+ * skips the edit — used by the streaming preview, where a half-written file
8
+ * or transient parse error must not throw.
9
+ */
10
+ onUnresolved?: "throw" | "drop";
11
+ }
12
+ /** True when at least one edit is an unresolved `replace block N:` edit. */
13
+ export declare function hasBlockEdit(edits: readonly Edit[]): boolean;
14
+ /**
15
+ * Resolve every `replace block N:` edit in `edits` against `text` (parsed as
16
+ * the language inferred from `path`). Non-block edits pass through untouched.
17
+ * Returns a fresh edit list with no `block` variants. The fast path returns the
18
+ * input unchanged when there is nothing to resolve.
19
+ *
20
+ * Synthesized inserts/deletes carry sequential `index` values for readability
21
+ * only — {@link applyEdits} re-derives every edit's index from array order, so
22
+ * the passthrough edits keeping their original indices is harmless.
23
+ */
24
+ export declare function resolveBlockEdits(edits: readonly Edit[], text: string, path: string, resolver: BlockResolver | undefined, options?: ResolveBlockEditsOptions): readonly Edit[];
25
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/hashline/block.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAU,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,wBAAwB;IACvC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACjC;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,OAAO,CAE5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,OAAO,GAAE,wBAA6B,GACrC,SAAS,IAAI,EAAE,CAwCjB"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Expand deferred `replace block N:` edits into concrete inserts + deletes.
3
+ * Ported from oh-my-pi `packages/hashline/src/block.ts`.
4
+ *
5
+ * The hashline parser cannot expand a block edit on its own — the line span is
6
+ * unknown until file text + path (→ language) are available. This transform
7
+ * runs at every apply/preview boundary that has text: it calls the injected
8
+ * {@link BlockResolver} (in chances-cli backed by `native.blockRangeAt`) to
9
+ * resolve each block's `[start, end]` span, then emits the exact same
10
+ * `before_anchor` replacement inserts + range deletes that `replace start..end:`
11
+ * produces. After it runs, no `block` edits remain, so {@link applyEdits} (and
12
+ * recovery) only ever see resolved edits.
13
+ */
14
+ import { formatNearestAnchors } from "./format.js";
15
+ import { BLOCK_RESOLVER_UNAVAILABLE, blockUnresolvedMessage } from "./messages.js";
16
+ /** True when at least one edit is an unresolved `replace block N:` edit. */
17
+ export function hasBlockEdit(edits) {
18
+ return edits.some((edit) => edit.kind === "block");
19
+ }
20
+ /**
21
+ * Resolve every `replace block N:` edit in `edits` against `text` (parsed as
22
+ * the language inferred from `path`). Non-block edits pass through untouched.
23
+ * Returns a fresh edit list with no `block` variants. The fast path returns the
24
+ * input unchanged when there is nothing to resolve.
25
+ *
26
+ * Synthesized inserts/deletes carry sequential `index` values for readability
27
+ * only — {@link applyEdits} re-derives every edit's index from array order, so
28
+ * the passthrough edits keeping their original indices is harmless.
29
+ */
30
+ export function resolveBlockEdits(edits, text, path, resolver, options = {}) {
31
+ if (!hasBlockEdit(edits))
32
+ return edits;
33
+ const onUnresolved = options.onUnresolved ?? "throw";
34
+ const resolved = [];
35
+ let synthIndex = 0;
36
+ for (const edit of edits) {
37
+ if (edit.kind !== "block") {
38
+ resolved.push(edit);
39
+ continue;
40
+ }
41
+ const span = resolver ? resolver({ path, text, line: edit.anchor.line }) : null;
42
+ if (span === null) {
43
+ if (onUnresolved === "drop")
44
+ continue;
45
+ // Nearest-anchor "did you mean" (7.9 [5.2] / §3.8): show real lines around
46
+ // the failed block anchor so the model can switch to `replace N..M:`.
47
+ const hint = formatNearestAnchors(text.split("\n"), edit.anchor.line);
48
+ throw new Error(`line ${edit.lineNum}: ${resolver ? blockUnresolvedMessage(edit.anchor.line) : BLOCK_RESOLVER_UNAVAILABLE}${hint}`);
49
+ }
50
+ // Mirror the parser's `replace start..end:` expansion exactly: one
51
+ // `before_anchor` replacement insert per payload row at `span.start`,
52
+ // then one delete per line across `[span.start, span.end]`. An empty
53
+ // `payloads` (from `delete block N`) emits no inserts — a pure deletion.
54
+ for (const payload of edit.payloads) {
55
+ const cursor = { kind: "before_anchor", anchor: { line: span.start } };
56
+ resolved.push({
57
+ kind: "insert",
58
+ cursor,
59
+ text: payload,
60
+ lineNum: edit.lineNum,
61
+ index: synthIndex++,
62
+ mode: "replacement",
63
+ });
64
+ }
65
+ for (let line = span.start; line <= span.end; line++) {
66
+ resolved.push({ kind: "delete", anchor: { line }, lineNum: edit.lineNum, index: synthIndex++ });
67
+ }
68
+ }
69
+ return resolved;
70
+ }
71
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/hashline/block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAcnF,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,IAAY,EACZ,IAAY,EACZ,QAAmC,EACnC,UAAoC,EAAE;IAEtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC;IACrD,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,YAAY,KAAK,MAAM;gBAAE,SAAS;YACtC,2EAA2E;YAC3E,sEAAsE;YACtE,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CACb,QAAQ,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0BAA0B,GAAG,IAAI,EAAE,CACnH,CAAC;QACJ,CAAC;QACD,mEAAmE;QACnE,sEAAsE;QACtE,qEAAqE;QACrE,yEAAyE;QACzE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAW,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,UAAU,EAAE;gBACnB,IAAI,EAAE,aAAa;aACpB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Hashline format primitives: sigils, separators, regex fragments, and
3
+ * display helpers. These are the single source of truth for the parser, the
4
+ * tokenizer, the prompt, and the formal grammar.
5
+ *
6
+ * Ported from oh-my-pi `packages/hashline/src/format.ts`. **chances-cli
7
+ * changes (7.9 R1-M3/S7):**
8
+ * - `computeFileHash` uses `node:crypto` (xxHash32 was `Bun.hash`, which is
9
+ * unavailable under Node — serve-on-Node must run the same code).
10
+ * - `computeFileHash` is path-aware (`trimTrailing`): Markdown trailing
11
+ * whitespace is semantically meaningful (hard line break), so the hash —
12
+ * the edit safety boundary — must NOT trim it for `.md`/`.markdown`.
13
+ * - The 16-bit tag is only a fast INDEX into the snapshot store; the
14
+ * authoritative integrity check is exact snapshot-text equality in
15
+ * `patcher.ts` (so a 16-bit collision can never silently corrupt content).
16
+ */
17
+ import type { Cursor } from "./types.js";
18
+ /** File-section header prefix: `¶path#hash`. */
19
+ export declare const HL_FILE_PREFIX = "\u00B6";
20
+ /** Payload sigil for literal body rows. */
21
+ export declare const HL_PAYLOAD_REPLACE = "+";
22
+ /** Hunk-header keyword for concrete line replacement. */
23
+ export declare const HL_REPLACE_KEYWORD = "replace";
24
+ /** Hunk-header sub-keyword: `replace block N:` resolves N to a tree-sitter block range. */
25
+ export declare const HL_BLOCK_KEYWORD = "block";
26
+ /** Hunk-header keyword for concrete line deletion. */
27
+ export declare const HL_DELETE_KEYWORD = "delete";
28
+ /** Hunk-header keyword for insertion operations. */
29
+ export declare const HL_INSERT_KEYWORD = "insert";
30
+ /** Insert position keyword for inserting before a concrete line. */
31
+ export declare const HL_INSERT_BEFORE = "before";
32
+ /** Insert position keyword for inserting after a concrete line. */
33
+ export declare const HL_INSERT_AFTER = "after";
34
+ /** Insert position keyword for inserting at the start of the file. */
35
+ export declare const HL_INSERT_HEAD = "head";
36
+ /** Insert position keyword for inserting at the end of the file. */
37
+ export declare const HL_INSERT_TAIL = "tail";
38
+ /** Hunk-header terminator for body-bearing operations. */
39
+ export declare const HL_HEADER_COLON = ":";
40
+ /** Separator between a hashline file path and its opaque snapshot tag. */
41
+ export declare const HL_FILE_HASH_SEP = "#";
42
+ /** Separator between two line numbers in a range, e.g. `5..10`. */
43
+ export declare const HL_RANGE_SEP = "..";
44
+ /** Separator between a line number and displayed line content in hashline mode. */
45
+ export declare const HL_LINE_BODY_SEP = ":";
46
+ /** Bare positive line-number Lid (no decorations, no captures, no anchors). */
47
+ export declare const HL_LINE_RE_RAW = "[1-9]\\d*";
48
+ /** Capture-group form of {@link HL_LINE_RE_RAW}. */
49
+ export declare const HL_LINE_CAPTURE_RE_RAW = "([1-9]\\d*)";
50
+ /** Format a concrete replacement hunk header. */
51
+ export declare function formatReplaceHeader(start: number, end: number): string;
52
+ /** Format a concrete deletion hunk header. */
53
+ export declare function formatDeleteHeader(start: number, end?: number): string;
54
+ /** Format an insertion hunk header for a cursor position. */
55
+ export declare function formatInsertHeader(cursor: Cursor): string;
56
+ /** Number of hex characters in a content-derived file-hash tag. */
57
+ export declare const HL_FILE_HASH_LENGTH = 4;
58
+ /** Canonical uppercase hexadecimal content-hash tag carried by a hashline section header. */
59
+ export declare const HL_FILE_HASH_RE_RAW = "[0-9A-F]{4}";
60
+ /** Capture-group form of {@link HL_FILE_HASH_RE_RAW}. */
61
+ export declare const HL_FILE_HASH_CAPTURE_RE_RAW = "([0-9A-F]{4})";
62
+ /** Regex-escaped form of {@link HL_LINE_BODY_SEP}, safe for embedding inside a regex. */
63
+ export declare const HL_LINE_BODY_SEP_RE_RAW: string;
64
+ /**
65
+ * Representative file-hash tags for use in user-facing error messages and
66
+ * prompt examples.
67
+ */
68
+ export declare const HL_FILE_HASH_EXAMPLES: readonly ["1A2B", "3C4D", "9F3E"];
69
+ /**
70
+ * True when the hash for `path` should trim trailing whitespace. Markdown is
71
+ * the exception: trailing double-space encodes a hard line break (R1-S7).
72
+ */
73
+ export declare function hashTrimsTrailing(path: string): boolean;
74
+ /**
75
+ * Compute the content-derived hash tag carried by a hashline section header.
76
+ * The tag is a 4-hex fingerprint of the whole file's normalized text. It is a
77
+ * fast INDEX into the snapshot store, NOT the integrity check: `patcher.ts`
78
+ * confirms an exact snapshot-text match before applying, so a 16-bit collision
79
+ * can never silently corrupt content (it degrades to a forced re-read).
80
+ *
81
+ * `trimTrailing` defaults to true; pass `hashTrimsTrailing(path)` so Markdown
82
+ * keeps its meaningful trailing whitespace.
83
+ */
84
+ export declare function computeFileHash(text: string, trimTrailing?: boolean): string;
85
+ /**
86
+ * Format a comma-separated list of example anchors with an optional line-number
87
+ * prefix, quoted for inclusion in error messages: `"160", "42", "7"`.
88
+ */
89
+ export declare function describeAnchorExamples(linePrefix?: string): string;
90
+ /** Format a hashline section header for a file path and snapshot tag. */
91
+ export declare function formatHashlineHeader(filePath: string, fileHash: string): string;
92
+ /** Formats a single numbered line as `LINE:TEXT`. */
93
+ export declare function formatNumberedLine(lineNumber: number, line: string): string;
94
+ /** Format file text with hashline-mode line-number prefixes for display. */
95
+ export declare function formatNumberedLines(text: string, startLine?: number): string;
96
+ /**
97
+ * Build a "did you mean" hint listing the nearest real, non-blank lines to a
98
+ * target line number, formatted as `LINE:TEXT`. This is the cheapest,
99
+ * algorithm-independent success-rate lever (7.9 [5.2] / §3.8): when an edit
100
+ * anchor is out of range or a `replace block N:` cannot be resolved, show the
101
+ * model valid anchors it can re-aim at instead of a bare "line N does not
102
+ * exist". Returns `""` (no hint) for an empty file. The leading `\n` lets
103
+ * callers append it directly onto an error message.
104
+ */
105
+ export declare function formatNearestAnchors(fileLines: string[], target: number, max?: number): string;
106
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/hashline/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,gDAAgD;AAChD,eAAO,MAAM,cAAc,WAAM,CAAC;AAElC,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,UAAU,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,sEAAsE;AACtE,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,oEAAoE;AACpE,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,0DAA0D;AAC1D,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,mEAAmE;AACnE,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAMpC,+EAA+E;AAC/E,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,gBAAwB,CAAC;AAE5D,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAQ,GAAG,MAAM,CAIrE;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,gBAAqC,CAAC;AACtE,yDAAyD;AACzD,eAAO,MAAM,2BAA2B,kBAA6B,CAAC;AACtE,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,QAAgC,CAAC;AACrE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,mCAAoC,CAAC;AAcvE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,MAAM,CASzE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,SAAK,GAAG,MAAM,CAK9D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,MAAM,CAGvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,MAAM,CAyBzF"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Hashline format primitives: sigils, separators, regex fragments, and
3
+ * display helpers. These are the single source of truth for the parser, the
4
+ * tokenizer, the prompt, and the formal grammar.
5
+ *
6
+ * Ported from oh-my-pi `packages/hashline/src/format.ts`. **chances-cli
7
+ * changes (7.9 R1-M3/S7):**
8
+ * - `computeFileHash` uses `node:crypto` (xxHash32 was `Bun.hash`, which is
9
+ * unavailable under Node — serve-on-Node must run the same code).
10
+ * - `computeFileHash` is path-aware (`trimTrailing`): Markdown trailing
11
+ * whitespace is semantically meaningful (hard line break), so the hash —
12
+ * the edit safety boundary — must NOT trim it for `.md`/`.markdown`.
13
+ * - The 16-bit tag is only a fast INDEX into the snapshot store; the
14
+ * authoritative integrity check is exact snapshot-text equality in
15
+ * `patcher.ts` (so a 16-bit collision can never silently corrupt content).
16
+ */
17
+ import { createHash } from "node:crypto";
18
+ /** File-section header prefix: `¶path#hash`. */
19
+ export const HL_FILE_PREFIX = "¶";
20
+ /** Payload sigil for literal body rows. */
21
+ export const HL_PAYLOAD_REPLACE = "+";
22
+ /** Hunk-header keyword for concrete line replacement. */
23
+ export const HL_REPLACE_KEYWORD = "replace";
24
+ /** Hunk-header sub-keyword: `replace block N:` resolves N to a tree-sitter block range. */
25
+ export const HL_BLOCK_KEYWORD = "block";
26
+ /** Hunk-header keyword for concrete line deletion. */
27
+ export const HL_DELETE_KEYWORD = "delete";
28
+ /** Hunk-header keyword for insertion operations. */
29
+ export const HL_INSERT_KEYWORD = "insert";
30
+ /** Insert position keyword for inserting before a concrete line. */
31
+ export const HL_INSERT_BEFORE = "before";
32
+ /** Insert position keyword for inserting after a concrete line. */
33
+ export const HL_INSERT_AFTER = "after";
34
+ /** Insert position keyword for inserting at the start of the file. */
35
+ export const HL_INSERT_HEAD = "head";
36
+ /** Insert position keyword for inserting at the end of the file. */
37
+ export const HL_INSERT_TAIL = "tail";
38
+ /** Hunk-header terminator for body-bearing operations. */
39
+ export const HL_HEADER_COLON = ":";
40
+ /** Separator between a hashline file path and its opaque snapshot tag. */
41
+ export const HL_FILE_HASH_SEP = "#";
42
+ /** Separator between two line numbers in a range, e.g. `5..10`. */
43
+ export const HL_RANGE_SEP = "..";
44
+ /** Separator between a line number and displayed line content in hashline mode. */
45
+ export const HL_LINE_BODY_SEP = ":";
46
+ function regexEscape(str) {
47
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
48
+ }
49
+ /** Bare positive line-number Lid (no decorations, no captures, no anchors). */
50
+ export const HL_LINE_RE_RAW = `[1-9]\\d*`;
51
+ /** Capture-group form of {@link HL_LINE_RE_RAW}. */
52
+ export const HL_LINE_CAPTURE_RE_RAW = `(${HL_LINE_RE_RAW})`;
53
+ /** Format a concrete replacement hunk header. */
54
+ export function formatReplaceHeader(start, end) {
55
+ return `${HL_REPLACE_KEYWORD} ${start}${HL_RANGE_SEP}${end}${HL_HEADER_COLON}`;
56
+ }
57
+ /** Format a concrete deletion hunk header. */
58
+ export function formatDeleteHeader(start, end = start) {
59
+ return start === end
60
+ ? `${HL_DELETE_KEYWORD} ${start}`
61
+ : `${HL_DELETE_KEYWORD} ${start}${HL_RANGE_SEP}${end}`;
62
+ }
63
+ /** Format an insertion hunk header for a cursor position. */
64
+ export function formatInsertHeader(cursor) {
65
+ switch (cursor.kind) {
66
+ case "before_anchor":
67
+ return `${HL_INSERT_KEYWORD} ${HL_INSERT_BEFORE} ${cursor.anchor.line}${HL_HEADER_COLON}`;
68
+ case "after_anchor":
69
+ return `${HL_INSERT_KEYWORD} ${HL_INSERT_AFTER} ${cursor.anchor.line}${HL_HEADER_COLON}`;
70
+ case "bof":
71
+ return `${HL_INSERT_KEYWORD} ${HL_INSERT_HEAD}${HL_HEADER_COLON}`;
72
+ case "eof":
73
+ return `${HL_INSERT_KEYWORD} ${HL_INSERT_TAIL}${HL_HEADER_COLON}`;
74
+ }
75
+ }
76
+ /** Number of hex characters in a content-derived file-hash tag. */
77
+ export const HL_FILE_HASH_LENGTH = 4;
78
+ /** Canonical uppercase hexadecimal content-hash tag carried by a hashline section header. */
79
+ export const HL_FILE_HASH_RE_RAW = `[0-9A-F]{${HL_FILE_HASH_LENGTH}}`;
80
+ /** Capture-group form of {@link HL_FILE_HASH_RE_RAW}. */
81
+ export const HL_FILE_HASH_CAPTURE_RE_RAW = `(${HL_FILE_HASH_RE_RAW})`;
82
+ /** Regex-escaped form of {@link HL_LINE_BODY_SEP}, safe for embedding inside a regex. */
83
+ export const HL_LINE_BODY_SEP_RE_RAW = regexEscape(HL_LINE_BODY_SEP);
84
+ /**
85
+ * Representative file-hash tags for use in user-facing error messages and
86
+ * prompt examples.
87
+ */
88
+ export const HL_FILE_HASH_EXAMPLES = ["1A2B", "3C4D", "9F3E"];
89
+ /**
90
+ * Normalize text before hashing: trim trailing `[ \t\r]` from every line (and
91
+ * the final line) in a single pass so CRLF endings and display-trimmed lines
92
+ * do not invalidate a tag. When `trimTrailing` is false (Markdown), leave
93
+ * trailing whitespace intact — `.md` trailing double-space is a hard line
94
+ * break, a meaningful edit the hash must NOT mask.
95
+ */
96
+ function normalizeFileHashText(text, trimTrailing) {
97
+ if (!trimTrailing)
98
+ return text.replace(/\r\n?/g, "\n");
99
+ return text.replace(/[ \t\r]+(?=\n|$)/g, "");
100
+ }
101
+ /**
102
+ * True when the hash for `path` should trim trailing whitespace. Markdown is
103
+ * the exception: trailing double-space encodes a hard line break (R1-S7).
104
+ */
105
+ export function hashTrimsTrailing(path) {
106
+ return !/\.(md|markdown)$/i.test(path);
107
+ }
108
+ /**
109
+ * Compute the content-derived hash tag carried by a hashline section header.
110
+ * The tag is a 4-hex fingerprint of the whole file's normalized text. It is a
111
+ * fast INDEX into the snapshot store, NOT the integrity check: `patcher.ts`
112
+ * confirms an exact snapshot-text match before applying, so a 16-bit collision
113
+ * can never silently corrupt content (it degrades to a forced re-read).
114
+ *
115
+ * `trimTrailing` defaults to true; pass `hashTrimsTrailing(path)` so Markdown
116
+ * keeps its meaningful trailing whitespace.
117
+ */
118
+ export function computeFileHash(text, trimTrailing = true) {
119
+ const normalized = normalizeFileHashText(text, trimTrailing);
120
+ // node:crypto for cross-runtime (Bun + Node). Take the low 16 bits of a SHA-1
121
+ // digest → 4-hex, matching the model-facing tag width oh-my-pi tuned.
122
+ const digest = createHash("sha1").update(normalized, "utf8").digest();
123
+ // First two bytes → 16-bit tag. `readUInt16BE` avoids index access (a SHA-1
124
+ // digest is always ≥ 2 bytes, but noUncheckedIndexedAccess can't prove it).
125
+ const low16 = digest.readUInt16BE(0);
126
+ return low16.toString(16).padStart(HL_FILE_HASH_LENGTH, "0").toUpperCase();
127
+ }
128
+ /**
129
+ * Format a comma-separated list of example anchors with an optional line-number
130
+ * prefix, quoted for inclusion in error messages: `"160", "42", "7"`.
131
+ */
132
+ export function describeAnchorExamples(linePrefix = "") {
133
+ const examples = linePrefix
134
+ ? [linePrefix, `${linePrefix.slice(0, -1) || "4"}2`, "7"]
135
+ : ["160", "42", "7"];
136
+ return examples.map((e) => `"${e}"`).join(", ");
137
+ }
138
+ /** Format a hashline section header for a file path and snapshot tag. */
139
+ export function formatHashlineHeader(filePath, fileHash) {
140
+ return `${HL_FILE_PREFIX}${filePath}${HL_FILE_HASH_SEP}${fileHash}`;
141
+ }
142
+ /** Formats a single numbered line as `LINE:TEXT`. */
143
+ export function formatNumberedLine(lineNumber, line) {
144
+ return `${lineNumber}${HL_LINE_BODY_SEP}${line}`;
145
+ }
146
+ /** Format file text with hashline-mode line-number prefixes for display. */
147
+ export function formatNumberedLines(text, startLine = 1) {
148
+ const lines = text.split("\n");
149
+ return lines.map((line, i) => formatNumberedLine(startLine + i, line)).join("\n");
150
+ }
151
+ /**
152
+ * Build a "did you mean" hint listing the nearest real, non-blank lines to a
153
+ * target line number, formatted as `LINE:TEXT`. This is the cheapest,
154
+ * algorithm-independent success-rate lever (7.9 [5.2] / §3.8): when an edit
155
+ * anchor is out of range or a `replace block N:` cannot be resolved, show the
156
+ * model valid anchors it can re-aim at instead of a bare "line N does not
157
+ * exist". Returns `""` (no hint) for an empty file. The leading `\n` lets
158
+ * callers append it directly onto an error message.
159
+ */
160
+ export function formatNearestAnchors(fileLines, target, max = 3) {
161
+ const total = fileLines.length;
162
+ if (total === 0)
163
+ return "";
164
+ const clamped = Math.min(Math.max(Math.trunc(target) || 1, 1), total);
165
+ const isBlank = (ln) => (fileLines[ln - 1] ?? "").trim().length === 0;
166
+ // Walk outward from the clamped target, nearest-first. First pass keeps only
167
+ // non-blank lines (real anchors); if the whole neighborhood is blank, fall
168
+ // back to including blanks so the hint is never empty for a non-empty file.
169
+ const collect = (skipBlank) => {
170
+ const out = [];
171
+ for (let d = 0; out.length < max && d <= total; d++) {
172
+ for (const ln of d === 0 ? [clamped] : [clamped - d, clamped + d]) {
173
+ if (ln < 1 || ln > total || out.includes(ln))
174
+ continue;
175
+ if (skipBlank && isBlank(ln))
176
+ continue;
177
+ out.push(ln);
178
+ if (out.length >= max)
179
+ break;
180
+ }
181
+ }
182
+ return out;
183
+ };
184
+ const picked = collect(true);
185
+ const lines = (picked.length > 0 ? picked : collect(false)).sort((a, b) => a - b);
186
+ if (lines.length === 0)
187
+ return "";
188
+ const numbered = lines.map((ln) => formatNumberedLine(ln, fileLines[ln - 1] ?? "")).join("\n");
189
+ return `\nNearest readable lines (re-read for a fresh ${HL_FILE_PREFIX}path${HL_FILE_HASH_SEP}tag, then anchor on these):\n${numbered}`;
190
+ }
191
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/hashline/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Storage seam for the hashline patcher. {@link Filesystem} is intentionally
3
+ * minimal — `readText`, `writeText`, `exists` — so any backing store can be
4
+ * adapted: disk, memory, S3, an LSP text-document protocol, a Git tree, a
5
+ * VFS, etc. Ported from oh-my-pi `packages/hashline/src/fs.ts`.
6
+ *
7
+ * **chances-cli change (7.9):** the Bun-based `NodeFilesystem` is dropped (it
8
+ * used `Bun.file`/`Bun.write`, unavailable under Node — serve-on-Node). The
9
+ * disk-backed implementation lives in the engine `edit` tool as `EngineToolFs`,
10
+ * which routes every write through `guardWrite` (realpath jail + protected-path
11
+ * floor) + `writeFileAtomic` + fs-scan cache invalidation. {@link
12
+ * InMemoryFilesystem} stays here for tests/sandboxes.
13
+ *
14
+ * The patcher does its own BOM stripping and LF normalization between
15
+ * {@link Filesystem.readText} and {@link Filesystem.writeText}; the FS deals
16
+ * only in raw text strings.
17
+ */
18
+ /**
19
+ * Result returned by {@link Filesystem.writeText}. The patcher echoes back
20
+ * `text` so adapters that transform on serialization (e.g. notebooks) can
21
+ * report what actually landed on disk.
22
+ */
23
+ export interface WriteResult {
24
+ /** Final text that was persisted. May differ from the input if the FS transformed it. */
25
+ text: string;
26
+ }
27
+ /**
28
+ * ENOENT-like error thrown by {@link Filesystem.readText} when a path is
29
+ * missing. Carrying a `code` property keeps the contract compatible with
30
+ * `node:fs` callers that already check `err.code === "ENOENT"`.
31
+ */
32
+ export declare class NotFoundError extends Error {
33
+ readonly code = "ENOENT";
34
+ constructor(path: string, cause?: unknown);
35
+ }
36
+ /** Type guard for {@link NotFoundError} and structurally-compatible errors. */
37
+ export declare function isNotFound(error: unknown): boolean;
38
+ /**
39
+ * Abstract storage backend the {@link Patcher} reads from and writes to.
40
+ * Subclass for new backends; the package ships {@link InMemoryFilesystem} for
41
+ * tests and the engine wires `EngineToolFs` for disk.
42
+ *
43
+ * Implementations work with raw text — the patcher handles BOM stripping and
44
+ * line-ending normalization itself. `readText` MUST throw {@link
45
+ * NotFoundError} (or any error for which {@link isNotFound} returns true)
46
+ * when the path doesn't exist; that's how the patcher detects a create-vs-
47
+ * update.
48
+ */
49
+ export declare abstract class Filesystem {
50
+ /** Read the file's full text content. Throw on missing file. */
51
+ abstract readText(path: string): Promise<string>;
52
+ /** Validate that `path` is writable before a prepared batch starts committing. */
53
+ preflightWrite(_path: string): Promise<void>;
54
+ /** Persist `content` at `path`. Returns the actual final text that was written. */
55
+ abstract writeText(path: string, content: string): Promise<WriteResult>;
56
+ /** Return true when the path exists and can be read. Default: probe via {@link readText}. */
57
+ exists(path: string): Promise<boolean>;
58
+ /**
59
+ * Canonical path used as a key by external caches (e.g. snapshot
60
+ * stores). The default is identity; override to return an absolute or
61
+ * otherwise canonicalised path so producers and consumers of cached
62
+ * snapshots agree on the key without each having to redo the resolution.
63
+ */
64
+ canonicalPath(path: string): string;
65
+ }
66
+ /**
67
+ * In-memory {@link Filesystem}. Useful for tests, sandboxes, dry-runs, and as
68
+ * a building block for stacked adapters (e.g. an LRU layer on top).
69
+ */
70
+ export declare class InMemoryFilesystem extends Filesystem {
71
+ #private;
72
+ constructor(initial?: Iterable<readonly [string, string]>);
73
+ readText(path: string): Promise<string>;
74
+ writeText(path: string, content: string): Promise<WriteResult>;
75
+ exists(path: string): Promise<boolean>;
76
+ /** Synchronous helper for setting up fixtures without awaiting. */
77
+ set(path: string, content: string): void;
78
+ /** Synchronous helper for inspecting state without awaiting. */
79
+ get(path: string): string | undefined;
80
+ /** Remove a single entry. Returns true when something was removed. */
81
+ delete(path: string): boolean;
82
+ /** Wipe all entries. */
83
+ clear(): void;
84
+ /** Iterate `[path, content]` pairs. */
85
+ entries(): IterableIterator<[string, string]>;
86
+ }
87
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/hashline/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,YAAY;gBAEb,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK1C;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIlD;AAED;;;;;;;;;;GAUG;AACH,8BAAsB,UAAU;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhD,kFAAkF;IAC5E,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAElD,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAEvE,6FAA6F;IACvF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5C;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGpC;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;;gBAGpC,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAOnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrD,mEAAmE;IACnE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,gEAAgE;IAChE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrC,sEAAsE;IACtE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,wBAAwB;IACxB,KAAK,IAAI,IAAI;IAIb,uCAAuC;IACvC,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAG9C"}