gsd-pi 2.8.3 → 2.10.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.
- package/README.md +2 -1
- package/dist/cli.js +5 -0
- package/dist/loader.js +1 -1
- package/dist/update-check.d.ts +24 -0
- package/dist/update-check.js +93 -0
- package/node_modules/@gsd/native/package.json +59 -0
- package/node_modules/@gsd/native/src/__tests__/clipboard.test.mjs +79 -0
- package/node_modules/@gsd/native/src/__tests__/fd.test.mjs +164 -0
- package/node_modules/@gsd/native/src/__tests__/glob.test.mjs +237 -0
- package/node_modules/@gsd/native/src/__tests__/grep.test.mjs +162 -0
- package/node_modules/@gsd/native/src/__tests__/highlight.test.mjs +156 -0
- package/node_modules/@gsd/native/src/__tests__/html.test.mjs +98 -0
- package/node_modules/@gsd/native/src/__tests__/image.test.mjs +137 -0
- package/node_modules/@gsd/native/src/__tests__/ps.test.mjs +109 -0
- package/node_modules/@gsd/native/src/__tests__/text.test.mjs +262 -0
- package/node_modules/@gsd/native/src/ast/index.ts +12 -0
- package/node_modules/@gsd/native/src/ast/types.ts +75 -0
- package/node_modules/@gsd/native/src/clipboard/index.ts +40 -0
- package/node_modules/@gsd/native/src/clipboard/types.ts +7 -0
- package/node_modules/@gsd/native/src/fd/index.ts +35 -0
- package/node_modules/@gsd/native/src/fd/types.ts +31 -0
- package/node_modules/@gsd/native/src/glob/index.ts +44 -0
- package/node_modules/@gsd/native/src/glob/types.ts +53 -0
- package/node_modules/@gsd/native/src/grep/index.ts +48 -0
- package/node_modules/@gsd/native/src/grep/types.ts +105 -0
- package/node_modules/@gsd/native/src/highlight/index.ts +44 -0
- package/node_modules/@gsd/native/src/highlight/types.ts +25 -0
- package/node_modules/@gsd/native/src/html/index.ts +24 -0
- package/node_modules/@gsd/native/src/html/types.ts +7 -0
- package/node_modules/@gsd/native/src/image/index.ts +28 -0
- package/node_modules/@gsd/native/src/image/types.ts +41 -0
- package/node_modules/@gsd/native/src/index.ts +88 -0
- package/node_modules/@gsd/native/src/native.ts +94 -0
- package/node_modules/@gsd/native/src/ps/index.ts +52 -0
- package/node_modules/@gsd/native/src/ps/types.ts +5 -0
- package/node_modules/@gsd/native/src/text/index.ts +125 -0
- package/node_modules/@gsd/native/src/text/types.ts +29 -0
- package/node_modules/@gsd/native/src/ttsr/index.ts +39 -0
- package/node_modules/@gsd/native/src/ttsr/types.ts +10 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js +758 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js +267 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/defaults.json +456 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js +101 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js +709 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lsp.md +33 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js +64 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js +574 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.d.ts +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.js +12 -77
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.d.ts +60 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.js +247 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.d.ts +43 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.js +146 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.d.ts +114 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.js +522 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.d.ts +2 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.d.ts.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.js +376 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts +38 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js +27 -0
- package/node_modules/@gsd/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -3
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.js +25 -40
- package/node_modules/@gsd/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.js +17 -21
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.d.ts +7 -6
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.js +7 -13
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.js +3 -56
- package/node_modules/@gsd/pi-coding-agent/dist/utils/clipboard.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.js +7 -17
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-convert.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.d.ts +1 -2
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.js +21 -29
- package/node_modules/@gsd/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
- package/node_modules/@gsd/pi-coding-agent/package.json +2 -5
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/client.ts +880 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/config.ts +325 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/defaults.json +456 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/edits.ts +109 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/index.ts +943 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lsp.md +33 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/types.ts +421 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/lsp/utils.ts +682 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/find.ts +13 -88
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline-edit.ts +318 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline-read.ts +196 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline.test.ts +456 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/hashline.ts +594 -0
- package/node_modules/@gsd/pi-coding-agent/src/core/tools/index.ts +63 -0
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +5 -3
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/interactive-mode.ts +66 -12
- package/node_modules/@gsd/pi-coding-agent/src/modes/interactive/theme/theme.ts +26 -42
- package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard-image.ts +17 -24
- package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard-native.ts +11 -21
- package/node_modules/@gsd/pi-coding-agent/src/utils/clipboard.ts +3 -51
- package/node_modules/@gsd/pi-coding-agent/src/utils/image-convert.ts +7 -17
- package/node_modules/@gsd/pi-coding-agent/src/utils/image-resize.ts +28 -34
- package/node_modules/@gsd/pi-tui/dist/autocomplete.d.ts +1 -3
- package/node_modules/@gsd/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/autocomplete.js +16 -95
- package/node_modules/@gsd/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/components/image.d.ts +7 -0
- package/node_modules/@gsd/pi-tui/dist/components/image.d.ts.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/components/image.js +20 -1
- package/node_modules/@gsd/pi-tui/dist/components/image.js.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@gsd/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/index.js +1 -1
- package/node_modules/@gsd/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/terminal-image.d.ts +5 -5
- package/node_modules/@gsd/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/terminal-image.js +9 -120
- package/node_modules/@gsd/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/utils.d.ts +23 -26
- package/node_modules/@gsd/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@gsd/pi-tui/dist/utils.js +47 -716
- package/node_modules/@gsd/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@gsd/pi-tui/package.json +1 -0
- package/node_modules/@gsd/pi-tui/src/autocomplete.ts +17 -112
- package/node_modules/@gsd/pi-tui/src/components/image.ts +23 -1
- package/node_modules/@gsd/pi-tui/src/index.ts +0 -4
- package/node_modules/@gsd/pi-tui/src/terminal-image.ts +9 -135
- package/node_modules/@gsd/pi-tui/src/utils.ts +51 -775
- package/package.json +4 -1
- package/packages/native/package.json +59 -0
- package/packages/native/src/__tests__/clipboard.test.mjs +79 -0
- package/packages/native/src/__tests__/fd.test.mjs +164 -0
- package/packages/native/src/__tests__/glob.test.mjs +237 -0
- package/packages/native/src/__tests__/grep.test.mjs +162 -0
- package/packages/native/src/__tests__/highlight.test.mjs +156 -0
- package/packages/native/src/__tests__/html.test.mjs +98 -0
- package/packages/native/src/__tests__/image.test.mjs +137 -0
- package/packages/native/src/__tests__/ps.test.mjs +109 -0
- package/packages/native/src/__tests__/text.test.mjs +262 -0
- package/packages/native/src/ast/index.ts +12 -0
- package/packages/native/src/ast/types.ts +75 -0
- package/packages/native/src/clipboard/index.ts +40 -0
- package/packages/native/src/clipboard/types.ts +7 -0
- package/packages/native/src/fd/index.ts +35 -0
- package/packages/native/src/fd/types.ts +31 -0
- package/packages/native/src/glob/index.ts +44 -0
- package/packages/native/src/glob/types.ts +53 -0
- package/packages/native/src/grep/index.ts +48 -0
- package/packages/native/src/grep/types.ts +105 -0
- package/packages/native/src/highlight/index.ts +44 -0
- package/packages/native/src/highlight/types.ts +25 -0
- package/packages/native/src/html/index.ts +24 -0
- package/packages/native/src/html/types.ts +7 -0
- package/packages/native/src/image/index.ts +28 -0
- package/packages/native/src/image/types.ts +41 -0
- package/packages/native/src/index.ts +88 -0
- package/packages/native/src/native.ts +94 -0
- package/packages/native/src/ps/index.ts +52 -0
- package/packages/native/src/ps/types.ts +5 -0
- package/packages/native/src/text/index.ts +125 -0
- package/packages/native/src/text/types.ts +29 -0
- package/packages/native/src/ttsr/index.ts +39 -0
- package/packages/native/src/ttsr/types.ts +10 -0
- package/packages/native/tsconfig.json +8 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +46 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js +758 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +23 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.js +267 -0
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/defaults.json +456 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +17 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.js +101 -0
- package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.js +46 -0
- package/packages/pi-coding-agent/dist/core/lsp/helpers.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts +35 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.js +709 -0
- package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +308 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp.md +33 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +34 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +136 -0
- package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +262 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js +64 -0
- package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +50 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js +574 -0
- package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +12 -77
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-edit.d.ts +60 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-edit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js +247 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-edit.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +43 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +146 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts +114 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.js +522 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.test.js +376 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +38 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +27 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +10 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +25 -40
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js +17 -21
- package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-native.d.ts +7 -6
- package/packages/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard-native.js +7 -13
- package/packages/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/clipboard.js +3 -56
- package/packages/pi-coding-agent/dist/utils/clipboard.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/image-convert.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/image-convert.js +7 -17
- package/packages/pi-coding-agent/dist/utils/image-convert.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/image-resize.d.ts +1 -2
- package/packages/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/image-resize.js +21 -29
- package/packages/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
- package/packages/pi-coding-agent/package.json +2 -5
- package/packages/pi-coding-agent/src/core/lsp/client.ts +880 -0
- package/packages/pi-coding-agent/src/core/lsp/config.ts +325 -0
- package/packages/pi-coding-agent/src/core/lsp/defaults.json +456 -0
- package/packages/pi-coding-agent/src/core/lsp/edits.ts +109 -0
- package/packages/pi-coding-agent/src/core/lsp/helpers.ts +54 -0
- package/packages/pi-coding-agent/src/core/lsp/index.ts +943 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +407 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +33 -0
- package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +199 -0
- package/packages/pi-coding-agent/src/core/lsp/types.ts +421 -0
- package/packages/pi-coding-agent/src/core/lsp/utils.ts +682 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/tools/find.ts +13 -88
- package/packages/pi-coding-agent/src/core/tools/hashline-edit.ts +318 -0
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +196 -0
- package/packages/pi-coding-agent/src/core/tools/hashline.test.ts +456 -0
- package/packages/pi-coding-agent/src/core/tools/hashline.ts +594 -0
- package/packages/pi-coding-agent/src/core/tools/index.ts +63 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +5 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +66 -12
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +26 -42
- package/packages/pi-coding-agent/src/utils/clipboard-image.ts +17 -24
- package/packages/pi-coding-agent/src/utils/clipboard-native.ts +11 -21
- package/packages/pi-coding-agent/src/utils/clipboard.ts +3 -51
- package/packages/pi-coding-agent/src/utils/image-convert.ts +7 -17
- package/packages/pi-coding-agent/src/utils/image-resize.ts +28 -34
- package/packages/pi-tui/dist/autocomplete.d.ts +1 -3
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +16 -95
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/image.d.ts +7 -0
- package/packages/pi-tui/dist/components/image.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/image.js +20 -1
- package/packages/pi-tui/dist/components/image.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +1 -1
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +1 -1
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/terminal-image.d.ts +5 -5
- package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal-image.js +9 -120
- package/packages/pi-tui/dist/terminal-image.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts +23 -26
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +47 -716
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +1 -0
- package/packages/pi-tui/src/autocomplete.ts +17 -112
- package/packages/pi-tui/src/components/image.ts +23 -1
- package/packages/pi-tui/src/index.ts +0 -4
- package/packages/pi-tui/src/terminal-image.ts +9 -135
- package/packages/pi-tui/src/utils.ts +51 -775
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +25 -40
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/src/resources/extensions/ask-user-questions.ts +2 -2
- package/src/resources/extensions/bg-shell/index.ts +377 -51
- package/src/resources/extensions/browser-tools/core.d.ts +205 -0
- package/src/resources/extensions/browser-tools/index.ts +2 -2
- package/src/resources/extensions/browser-tools/refs.ts +1 -1
- package/src/resources/extensions/browser-tools/tools/session.ts +1 -1
- package/src/resources/extensions/context7/index.ts +2 -2
- package/src/resources/extensions/get-secrets-from-user.ts +3 -2
- package/src/resources/extensions/google-search/index.ts +1 -1
- package/src/resources/extensions/gsd/auto.ts +41 -4
- package/src/resources/extensions/gsd/commands.ts +218 -3
- package/src/resources/extensions/gsd/doctor.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +129 -5
- package/src/resources/extensions/gsd/guided-flow.ts +19 -9
- package/src/resources/extensions/gsd/index.ts +17 -7
- package/src/resources/extensions/gsd/preferences.ts +1 -1
- package/src/resources/extensions/gsd/tests/git-service.test.ts +226 -0
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/next-milestone-id.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/worktree.test.ts +352 -0
- package/src/resources/extensions/gsd/types.ts +1 -0
- package/src/resources/extensions/gsd/worktree.ts +20 -1
- package/src/resources/extensions/mac-tools/index.ts +1 -1
- package/src/resources/extensions/search-the-web/format.ts +1 -1
- package/src/resources/extensions/search-the-web/index.ts +5 -5
- package/src/resources/extensions/search-the-web/tool-fetch-page.ts +7 -7
- package/src/resources/extensions/search-the-web/tool-llm-context.ts +11 -11
- package/src/resources/extensions/search-the-web/tool-search.ts +10 -10
- package/src/resources/extensions/shared/interview-ui.ts +2 -2
- package/src/resources/extensions/universal-config/discovery.ts +78 -0
- package/src/resources/extensions/universal-config/format.ts +160 -0
- package/src/resources/extensions/universal-config/index.ts +118 -0
- package/src/resources/extensions/universal-config/package.json +11 -0
- package/src/resources/extensions/universal-config/scanners.ts +579 -0
- package/src/resources/extensions/universal-config/tests/discovery.test.ts +111 -0
- package/src/resources/extensions/universal-config/tests/format.test.ts +111 -0
- package/src/resources/extensions/universal-config/tests/scanners.test.ts +438 -0
- package/src/resources/extensions/universal-config/tools.ts +60 -0
- package/src/resources/extensions/universal-config/types.ts +116 -0
- package/node_modules/@mariozechner/clipboard/.yarnrc.yml +0 -1
- package/node_modules/@mariozechner/clipboard/Cargo.toml +0 -26
- package/node_modules/@mariozechner/clipboard/README.md +0 -58
- package/node_modules/@mariozechner/clipboard/build.rs +0 -5
- package/node_modules/@mariozechner/clipboard/exp.ts +0 -12
- package/node_modules/@mariozechner/clipboard/index.d.ts +0 -23
- package/node_modules/@mariozechner/clipboard/index.js +0 -317
- package/node_modules/@mariozechner/clipboard/package.json +0 -56
- package/node_modules/@mariozechner/clipboard/src/lib.rs +0 -191
- package/node_modules/@mariozechner/clipboard-darwin-arm64/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-darwin-arm64/clipboard.darwin-arm64.node +0 -0
- package/node_modules/@mariozechner/clipboard-darwin-arm64/package.json +0 -22
- package/node_modules/@mariozechner/clipboard-darwin-universal/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-darwin-universal/clipboard.darwin-universal.node +0 -0
- package/node_modules/@mariozechner/clipboard-darwin-universal/package.json +0 -19
- package/node_modules/ansi-styles/index.d.ts +0 -345
- package/node_modules/ansi-styles/index.js +0 -163
- package/node_modules/ansi-styles/license +0 -9
- package/node_modules/ansi-styles/package.json +0 -56
- package/node_modules/ansi-styles/readme.md +0 -152
- package/node_modules/any-promise/.jshintrc +0 -4
- package/node_modules/any-promise/.npmignore +0 -7
- package/node_modules/any-promise/LICENSE +0 -19
- package/node_modules/any-promise/README.md +0 -161
- package/node_modules/any-promise/implementation.d.ts +0 -3
- package/node_modules/any-promise/implementation.js +0 -1
- package/node_modules/any-promise/index.d.ts +0 -73
- package/node_modules/any-promise/index.js +0 -1
- package/node_modules/any-promise/loader.js +0 -78
- package/node_modules/any-promise/optional.js +0 -6
- package/node_modules/any-promise/package.json +0 -45
- package/node_modules/any-promise/register/bluebird.d.ts +0 -1
- package/node_modules/any-promise/register/bluebird.js +0 -2
- package/node_modules/any-promise/register/es6-promise.d.ts +0 -1
- package/node_modules/any-promise/register/es6-promise.js +0 -2
- package/node_modules/any-promise/register/lie.d.ts +0 -1
- package/node_modules/any-promise/register/lie.js +0 -2
- package/node_modules/any-promise/register/native-promise-only.d.ts +0 -1
- package/node_modules/any-promise/register/native-promise-only.js +0 -2
- package/node_modules/any-promise/register/pinkie.d.ts +0 -1
- package/node_modules/any-promise/register/pinkie.js +0 -2
- package/node_modules/any-promise/register/promise.d.ts +0 -1
- package/node_modules/any-promise/register/promise.js +0 -2
- package/node_modules/any-promise/register/q.d.ts +0 -1
- package/node_modules/any-promise/register/q.js +0 -2
- package/node_modules/any-promise/register/rsvp.d.ts +0 -1
- package/node_modules/any-promise/register/rsvp.js +0 -2
- package/node_modules/any-promise/register/vow.d.ts +0 -1
- package/node_modules/any-promise/register/vow.js +0 -2
- package/node_modules/any-promise/register/when.d.ts +0 -1
- package/node_modules/any-promise/register/when.js +0 -2
- package/node_modules/any-promise/register-shim.js +0 -18
- package/node_modules/any-promise/register.d.ts +0 -17
- package/node_modules/any-promise/register.js +0 -94
- package/node_modules/cli-highlight/LICENSE.txt +0 -15
- package/node_modules/cli-highlight/README.md +0 -88
- package/node_modules/cli-highlight/bin/highlight +0 -2
- package/node_modules/cli-highlight/dist/cli.d.ts +0 -1
- package/node_modules/cli-highlight/dist/cli.js +0 -102
- package/node_modules/cli-highlight/dist/cli.js.map +0 -1
- package/node_modules/cli-highlight/dist/index.d.ts +0 -53
- package/node_modules/cli-highlight/dist/index.js +0 -112
- package/node_modules/cli-highlight/dist/index.js.map +0 -1
- package/node_modules/cli-highlight/dist/test/test.d.ts +0 -1
- package/node_modules/cli-highlight/dist/test/test.js +0 -62
- package/node_modules/cli-highlight/dist/test/test.js.map +0 -1
- package/node_modules/cli-highlight/dist/theme.d.ts +0 -270
- package/node_modules/cli-highlight/dist/theme.js +0 -265
- package/node_modules/cli-highlight/dist/theme.js.map +0 -1
- package/node_modules/cli-highlight/node_modules/chalk/index.d.ts +0 -415
- package/node_modules/cli-highlight/node_modules/chalk/license +0 -9
- package/node_modules/cli-highlight/node_modules/chalk/package.json +0 -68
- package/node_modules/cli-highlight/node_modules/chalk/readme.md +0 -341
- package/node_modules/cli-highlight/node_modules/chalk/source/index.js +0 -229
- package/node_modules/cli-highlight/node_modules/chalk/source/templates.js +0 -134
- package/node_modules/cli-highlight/node_modules/chalk/source/util.js +0 -39
- package/node_modules/cli-highlight/package.json +0 -129
- package/node_modules/cliui/CHANGELOG.md +0 -121
- package/node_modules/cliui/LICENSE.txt +0 -14
- package/node_modules/cliui/README.md +0 -141
- package/node_modules/cliui/build/index.cjs +0 -302
- package/node_modules/cliui/build/lib/index.js +0 -287
- package/node_modules/cliui/build/lib/string-utils.js +0 -27
- package/node_modules/cliui/index.mjs +0 -13
- package/node_modules/cliui/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/cliui/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/cliui/node_modules/ansi-regex/license +0 -9
- package/node_modules/cliui/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/cliui/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/cliui/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/cliui/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/cliui/node_modules/strip-ansi/license +0 -9
- package/node_modules/cliui/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/cliui/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/cliui/package.json +0 -83
- package/node_modules/color-convert/CHANGELOG.md +0 -54
- package/node_modules/color-convert/LICENSE +0 -21
- package/node_modules/color-convert/README.md +0 -68
- package/node_modules/color-convert/conversions.js +0 -839
- package/node_modules/color-convert/index.js +0 -81
- package/node_modules/color-convert/package.json +0 -48
- package/node_modules/color-convert/route.js +0 -97
- package/node_modules/color-name/LICENSE +0 -8
- package/node_modules/color-name/README.md +0 -11
- package/node_modules/color-name/index.js +0 -152
- package/node_modules/color-name/package.json +0 -28
- package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/node_modules/emoji-regex/README.md +0 -73
- package/node_modules/emoji-regex/es2015/index.js +0 -6
- package/node_modules/emoji-regex/es2015/text.js +0 -6
- package/node_modules/emoji-regex/index.d.ts +0 -23
- package/node_modules/emoji-regex/index.js +0 -6
- package/node_modules/emoji-regex/package.json +0 -50
- package/node_modules/emoji-regex/text.js +0 -6
- package/node_modules/escalade/dist/index.js +0 -22
- package/node_modules/escalade/dist/index.mjs +0 -22
- package/node_modules/escalade/index.d.mts +0 -11
- package/node_modules/escalade/index.d.ts +0 -15
- package/node_modules/escalade/license +0 -9
- package/node_modules/escalade/package.json +0 -74
- package/node_modules/escalade/readme.md +0 -211
- package/node_modules/escalade/sync/index.d.mts +0 -9
- package/node_modules/escalade/sync/index.d.ts +0 -13
- package/node_modules/escalade/sync/index.js +0 -18
- package/node_modules/escalade/sync/index.mjs +0 -18
- package/node_modules/esprima/ChangeLog +0 -235
- package/node_modules/get-caller-file/LICENSE.md +0 -6
- package/node_modules/get-caller-file/README.md +0 -41
- package/node_modules/get-caller-file/index.d.ts +0 -2
- package/node_modules/get-caller-file/index.js +0 -22
- package/node_modules/get-caller-file/index.js.map +0 -1
- package/node_modules/get-caller-file/package.json +0 -42
- package/node_modules/has-flag/index.d.ts +0 -39
- package/node_modules/has-flag/index.js +0 -8
- package/node_modules/has-flag/license +0 -9
- package/node_modules/has-flag/package.json +0 -46
- package/node_modules/has-flag/readme.md +0 -89
- package/node_modules/highlight.js/LICENSE +0 -29
- package/node_modules/highlight.js/README.md +0 -371
- package/node_modules/highlight.js/lib/core.js +0 -2517
- package/node_modules/highlight.js/lib/highlight.js +0 -2
- package/node_modules/highlight.js/lib/index.js +0 -195
- package/node_modules/highlight.js/lib/languages/1c.js +0 -521
- package/node_modules/highlight.js/lib/languages/abnf.js +0 -103
- package/node_modules/highlight.js/lib/languages/accesslog.js +0 -127
- package/node_modules/highlight.js/lib/languages/actionscript.js +0 -113
- package/node_modules/highlight.js/lib/languages/ada.js +0 -194
- package/node_modules/highlight.js/lib/languages/angelscript.js +0 -123
- package/node_modules/highlight.js/lib/languages/apache.js +0 -89
- package/node_modules/highlight.js/lib/languages/applescript.js +0 -189
- package/node_modules/highlight.js/lib/languages/arcade.js +0 -165
- package/node_modules/highlight.js/lib/languages/arduino.js +0 -576
- package/node_modules/highlight.js/lib/languages/armasm.js +0 -131
- package/node_modules/highlight.js/lib/languages/asciidoc.js +0 -303
- package/node_modules/highlight.js/lib/languages/aspectj.js +0 -186
- package/node_modules/highlight.js/lib/languages/autohotkey.js +0 -84
- package/node_modules/highlight.js/lib/languages/autoit.js +0 -183
- package/node_modules/highlight.js/lib/languages/avrasm.js +0 -80
- package/node_modules/highlight.js/lib/languages/awk.js +0 -73
- package/node_modules/highlight.js/lib/languages/axapta.js +0 -179
- package/node_modules/highlight.js/lib/languages/bash.js +0 -169
- package/node_modules/highlight.js/lib/languages/basic.js +0 -65
- package/node_modules/highlight.js/lib/languages/bnf.js +0 -38
- package/node_modules/highlight.js/lib/languages/brainfuck.js +0 -46
- package/node_modules/highlight.js/lib/languages/c-like.js +0 -501
- package/node_modules/highlight.js/lib/languages/c.js +0 -309
- package/node_modules/highlight.js/lib/languages/cal.js +0 -104
- package/node_modules/highlight.js/lib/languages/capnproto.js +0 -64
- package/node_modules/highlight.js/lib/languages/ceylon.js +0 -82
- package/node_modules/highlight.js/lib/languages/clean.js +0 -40
- package/node_modules/highlight.js/lib/languages/clojure-repl.js +0 -27
- package/node_modules/highlight.js/lib/languages/clojure.js +0 -158
- package/node_modules/highlight.js/lib/languages/cmake.js +0 -64
- package/node_modules/highlight.js/lib/languages/coffeescript.js +0 -356
- package/node_modules/highlight.js/lib/languages/coq.js +0 -79
- package/node_modules/highlight.js/lib/languages/cos.js +0 -138
- package/node_modules/highlight.js/lib/languages/cpp.js +0 -464
- package/node_modules/highlight.js/lib/languages/crmsh.js +0 -102
- package/node_modules/highlight.js/lib/languages/crystal.js +0 -326
- package/node_modules/highlight.js/lib/languages/csharp.js +0 -441
- package/node_modules/highlight.js/lib/languages/csp.js +0 -37
- package/node_modules/highlight.js/lib/languages/css.js +0 -608
- package/node_modules/highlight.js/lib/languages/d.js +0 -271
- package/node_modules/highlight.js/lib/languages/dart.js +0 -199
- package/node_modules/highlight.js/lib/languages/delphi.js +0 -126
- package/node_modules/highlight.js/lib/languages/diff.js +0 -85
- package/node_modules/highlight.js/lib/languages/django.js +0 -77
- package/node_modules/highlight.js/lib/languages/dns.js +0 -46
- package/node_modules/highlight.js/lib/languages/dockerfile.js +0 -34
- package/node_modules/highlight.js/lib/languages/dos.js +0 -70
- package/node_modules/highlight.js/lib/languages/dsconfig.js +0 -66
- package/node_modules/highlight.js/lib/languages/dts.js +0 -153
- package/node_modules/highlight.js/lib/languages/dust.js +0 -45
- package/node_modules/highlight.js/lib/languages/ebnf.js +0 -53
- package/node_modules/highlight.js/lib/languages/elixir.js +0 -259
- package/node_modules/highlight.js/lib/languages/elm.js +0 -129
- package/node_modules/highlight.js/lib/languages/erb.js +0 -29
- package/node_modules/highlight.js/lib/languages/erlang-repl.js +0 -86
- package/node_modules/highlight.js/lib/languages/erlang.js +0 -199
- package/node_modules/highlight.js/lib/languages/excel.js +0 -64
- package/node_modules/highlight.js/lib/languages/fix.js +0 -37
- package/node_modules/highlight.js/lib/languages/flix.js +0 -54
- package/node_modules/highlight.js/lib/languages/fortran.js +0 -159
- package/node_modules/highlight.js/lib/languages/fsharp.js +0 -86
- package/node_modules/highlight.js/lib/languages/gams.js +0 -208
- package/node_modules/highlight.js/lib/languages/gauss.js +0 -316
- package/node_modules/highlight.js/lib/languages/gcode.js +0 -88
- package/node_modules/highlight.js/lib/languages/gherkin.js +0 -49
- package/node_modules/highlight.js/lib/languages/glsl.js +0 -128
- package/node_modules/highlight.js/lib/languages/gml.js +0 -885
- package/node_modules/highlight.js/lib/languages/go.js +0 -74
- package/node_modules/highlight.js/lib/languages/golo.js +0 -33
- package/node_modules/highlight.js/lib/languages/gradle.js +0 -44
- package/node_modules/highlight.js/lib/languages/groovy.js +0 -174
- package/node_modules/highlight.js/lib/languages/haml.js +0 -117
- package/node_modules/highlight.js/lib/languages/handlebars.js +0 -324
- package/node_modules/highlight.js/lib/languages/haskell.js +0 -173
- package/node_modules/highlight.js/lib/languages/haxe.js +0 -157
- package/node_modules/highlight.js/lib/languages/hsp.js +0 -65
- package/node_modules/highlight.js/lib/languages/htmlbars.js +0 -352
- package/node_modules/highlight.js/lib/languages/http.js +0 -121
- package/node_modules/highlight.js/lib/languages/hy.js +0 -109
- package/node_modules/highlight.js/lib/languages/inform7.js +0 -70
- package/node_modules/highlight.js/lib/languages/ini.js +0 -173
- package/node_modules/highlight.js/lib/languages/irpf90.js +0 -141
- package/node_modules/highlight.js/lib/languages/isbl.js +0 -3207
- package/node_modules/highlight.js/lib/languages/java.js +0 -181
- package/node_modules/highlight.js/lib/languages/javascript.js +0 -604
- package/node_modules/highlight.js/lib/languages/jboss-cli.js +0 -63
- package/node_modules/highlight.js/lib/languages/json.js +0 -63
- package/node_modules/highlight.js/lib/languages/julia-repl.js +0 -50
- package/node_modules/highlight.js/lib/languages/julia.js +0 -416
- package/node_modules/highlight.js/lib/languages/kotlin.js +0 -284
- package/node_modules/highlight.js/lib/languages/lasso.js +0 -187
- package/node_modules/highlight.js/lib/languages/latex.js +0 -276
- package/node_modules/highlight.js/lib/languages/ldif.js +0 -42
- package/node_modules/highlight.js/lib/languages/leaf.js +0 -49
- package/node_modules/highlight.js/lib/languages/less.js +0 -666
- package/node_modules/highlight.js/lib/languages/lisp.js +0 -111
- package/node_modules/highlight.js/lib/languages/livecodeserver.js +0 -189
- package/node_modules/highlight.js/lib/languages/livescript.js +0 -374
- package/node_modules/highlight.js/lib/languages/llvm.js +0 -154
- package/node_modules/highlight.js/lib/languages/lsl.js +0 -95
- package/node_modules/highlight.js/lib/languages/lua.js +0 -82
- package/node_modules/highlight.js/lib/languages/makefile.js +0 -92
- package/node_modules/highlight.js/lib/languages/markdown.js +0 -258
- package/node_modules/highlight.js/lib/languages/mathematica.js +0 -6797
- package/node_modules/highlight.js/lib/languages/matlab.js +0 -106
- package/node_modules/highlight.js/lib/languages/maxima.js +0 -417
- package/node_modules/highlight.js/lib/languages/mel.js +0 -236
- package/node_modules/highlight.js/lib/languages/mercury.js +0 -121
- package/node_modules/highlight.js/lib/languages/mipsasm.js +0 -109
- package/node_modules/highlight.js/lib/languages/mizar.js +0 -29
- package/node_modules/highlight.js/lib/languages/mojolicious.js +0 -36
- package/node_modules/highlight.js/lib/languages/monkey.js +0 -89
- package/node_modules/highlight.js/lib/languages/moonscript.js +0 -147
- package/node_modules/highlight.js/lib/languages/n1ql.js +0 -77
- package/node_modules/highlight.js/lib/languages/nginx.js +0 -140
- package/node_modules/highlight.js/lib/languages/nim.js +0 -79
- package/node_modules/highlight.js/lib/languages/nix.js +0 -65
- package/node_modules/highlight.js/lib/languages/node-repl.js +0 -37
- package/node_modules/highlight.js/lib/languages/nsis.js +0 -119
- package/node_modules/highlight.js/lib/languages/objectivec.js +0 -121
- package/node_modules/highlight.js/lib/languages/ocaml.js +0 -82
- package/node_modules/highlight.js/lib/languages/openscad.js +0 -81
- package/node_modules/highlight.js/lib/languages/oxygene.js +0 -101
- package/node_modules/highlight.js/lib/languages/parser3.js +0 -57
- package/node_modules/highlight.js/lib/languages/perl.js +0 -515
- package/node_modules/highlight.js/lib/languages/pf.js +0 -59
- package/node_modules/highlight.js/lib/languages/pgsql.js +0 -630
- package/node_modules/highlight.js/lib/languages/php-template.js +0 -54
- package/node_modules/highlight.js/lib/languages/php.js +0 -204
- package/node_modules/highlight.js/lib/languages/plaintext.js +0 -19
- package/node_modules/highlight.js/lib/languages/pony.js +0 -89
- package/node_modules/highlight.js/lib/languages/powershell.js +0 -331
- package/node_modules/highlight.js/lib/languages/processing.js +0 -58
- package/node_modules/highlight.js/lib/languages/profile.js +0 -43
- package/node_modules/highlight.js/lib/languages/prolog.js +0 -102
- package/node_modules/highlight.js/lib/languages/properties.js +0 -85
- package/node_modules/highlight.js/lib/languages/protobuf.js +0 -47
- package/node_modules/highlight.js/lib/languages/puppet.js +0 -147
- package/node_modules/highlight.js/lib/languages/purebasic.js +0 -101
- package/node_modules/highlight.js/lib/languages/python-repl.js +0 -36
- package/node_modules/highlight.js/lib/languages/python.js +0 -446
- package/node_modules/highlight.js/lib/languages/q.js +0 -37
- package/node_modules/highlight.js/lib/languages/qml.js +0 -225
- package/node_modules/highlight.js/lib/languages/r.js +0 -231
- package/node_modules/highlight.js/lib/languages/reasonml.js +0 -321
- package/node_modules/highlight.js/lib/languages/rib.js +0 -37
- package/node_modules/highlight.js/lib/languages/roboconf.js +0 -82
- package/node_modules/highlight.js/lib/languages/routeros.js +0 -172
- package/node_modules/highlight.js/lib/languages/rsl.js +0 -49
- package/node_modules/highlight.js/lib/languages/ruby.js +0 -387
- package/node_modules/highlight.js/lib/languages/ruleslanguage.js +0 -78
- package/node_modules/highlight.js/lib/languages/rust.js +0 -146
- package/node_modules/highlight.js/lib/languages/sas.js +0 -133
- package/node_modules/highlight.js/lib/languages/scala.js +0 -140
- package/node_modules/highlight.js/lib/languages/scheme.js +0 -207
- package/node_modules/highlight.js/lib/languages/scilab.js +0 -73
- package/node_modules/highlight.js/lib/languages/scss.js +0 -545
- package/node_modules/highlight.js/lib/languages/shell.js +0 -30
- package/node_modules/highlight.js/lib/languages/smali.js +0 -135
- package/node_modules/highlight.js/lib/languages/smalltalk.js +0 -63
- package/node_modules/highlight.js/lib/languages/sml.js +0 -81
- package/node_modules/highlight.js/lib/languages/sqf.js +0 -448
- package/node_modules/highlight.js/lib/languages/sql.js +0 -699
- package/node_modules/highlight.js/lib/languages/sql_more.js +0 -183
- package/node_modules/highlight.js/lib/languages/stan.js +0 -548
- package/node_modules/highlight.js/lib/languages/stata.js +0 -60
- package/node_modules/highlight.js/lib/languages/step21.js +0 -66
- package/node_modules/highlight.js/lib/languages/stylus.js +0 -609
- package/node_modules/highlight.js/lib/languages/subunit.js +0 -51
- package/node_modules/highlight.js/lib/languages/swift.js +0 -873
- package/node_modules/highlight.js/lib/languages/taggerscript.js +0 -52
- package/node_modules/highlight.js/lib/languages/tap.js +0 -55
- package/node_modules/highlight.js/lib/languages/tcl.js +0 -115
- package/node_modules/highlight.js/lib/languages/thrift.js +0 -51
- package/node_modules/highlight.js/lib/languages/tp.js +0 -95
- package/node_modules/highlight.js/lib/languages/twig.js +0 -77
- package/node_modules/highlight.js/lib/languages/typescript.js +0 -697
- package/node_modules/highlight.js/lib/languages/vala.js +0 -61
- package/node_modules/highlight.js/lib/languages/vbnet.js +0 -214
- package/node_modules/highlight.js/lib/languages/vbscript-html.js +0 -24
- package/node_modules/highlight.js/lib/languages/vbscript.js +0 -109
- package/node_modules/highlight.js/lib/languages/verilog.js +0 -131
- package/node_modules/highlight.js/lib/languages/vhdl.js +0 -71
- package/node_modules/highlight.js/lib/languages/vim.js +0 -123
- package/node_modules/highlight.js/lib/languages/x86asm.js +0 -163
- package/node_modules/highlight.js/lib/languages/xl.js +0 -92
- package/node_modules/highlight.js/lib/languages/xml.js +0 -287
- package/node_modules/highlight.js/lib/languages/xquery.js +0 -197
- package/node_modules/highlight.js/lib/languages/yaml.js +0 -176
- package/node_modules/highlight.js/lib/languages/zephir.js +0 -140
- package/node_modules/highlight.js/package.json +0 -86
- package/node_modules/highlight.js/scss/a11y-dark.scss +0 -99
- package/node_modules/highlight.js/scss/a11y-light.scss +0 -99
- package/node_modules/highlight.js/scss/agate.scss +0 -108
- package/node_modules/highlight.js/scss/an-old-hope.scss +0 -89
- package/node_modules/highlight.js/scss/androidstudio.scss +0 -66
- package/node_modules/highlight.js/scss/arduino-light.scss +0 -87
- package/node_modules/highlight.js/scss/arta.scss +0 -73
- package/node_modules/highlight.js/scss/ascetic.scss +0 -45
- package/node_modules/highlight.js/scss/atelier-cave-dark.scss +0 -83
- package/node_modules/highlight.js/scss/atelier-cave-light.scss +0 -85
- package/node_modules/highlight.js/scss/atelier-dune-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-dune-light.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-estuary-dark.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-estuary-light.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-forest-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-forest-light.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-heath-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-heath-light.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-lakeside-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-lakeside-light.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-plateau-dark.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-plateau-light.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-savanna-dark.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-savanna-light.scss +0 -84
- package/node_modules/highlight.js/scss/atelier-seaside-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-seaside-light.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-sulphurpool-dark.scss +0 -69
- package/node_modules/highlight.js/scss/atelier-sulphurpool-light.scss +0 -69
- package/node_modules/highlight.js/scss/atom-one-dark-reasonable.scss +0 -75
- package/node_modules/highlight.js/scss/atom-one-dark.scss +0 -96
- package/node_modules/highlight.js/scss/atom-one-light.scss +0 -96
- package/node_modules/highlight.js/scss/brown-paper.scss +0 -64
- package/node_modules/highlight.js/scss/brown-papersq.png +0 -0
- package/node_modules/highlight.js/scss/codepen-embed.scss +0 -60
- package/node_modules/highlight.js/scss/color-brewer.scss +0 -71
- package/node_modules/highlight.js/scss/darcula.scss +0 -74
- package/node_modules/highlight.js/scss/dark.scss +0 -63
- package/node_modules/highlight.js/scss/default.scss +0 -99
- package/node_modules/highlight.js/scss/docco.scss +0 -97
- package/node_modules/highlight.js/scss/dracula.scss +0 -76
- package/node_modules/highlight.js/scss/far.scss +0 -71
- package/node_modules/highlight.js/scss/foundation.scss +0 -89
- package/node_modules/highlight.js/scss/github-gist.scss +0 -79
- package/node_modules/highlight.js/scss/github.scss +0 -99
- package/node_modules/highlight.js/scss/gml.scss +0 -78
- package/node_modules/highlight.js/scss/googlecode.scss +0 -89
- package/node_modules/highlight.js/scss/gradient-dark.scss +0 -122
- package/node_modules/highlight.js/scss/gradient-light.scss +0 -130
- package/node_modules/highlight.js/scss/grayscale.scss +0 -101
- package/node_modules/highlight.js/scss/gruvbox-dark.scss +0 -108
- package/node_modules/highlight.js/scss/gruvbox-light.scss +0 -108
- package/node_modules/highlight.js/scss/hopscotch.scss +0 -84
- package/node_modules/highlight.js/scss/hybrid.scss +0 -102
- package/node_modules/highlight.js/scss/idea.scss +0 -97
- package/node_modules/highlight.js/scss/ir-black.scss +0 -73
- package/node_modules/highlight.js/scss/isbl-editor-dark.scss +0 -112
- package/node_modules/highlight.js/scss/isbl-editor-light.scss +0 -111
- package/node_modules/highlight.js/scss/kimbie.dark.scss +0 -74
- package/node_modules/highlight.js/scss/kimbie.light.scss +0 -74
- package/node_modules/highlight.js/scss/lightfair.scss +0 -88
- package/node_modules/highlight.js/scss/lioshi.scss +0 -88
- package/node_modules/highlight.js/scss/magula.scss +0 -70
- package/node_modules/highlight.js/scss/mono-blue.scss +0 -56
- package/node_modules/highlight.js/scss/monokai-sublime.scss +0 -83
- package/node_modules/highlight.js/scss/monokai.scss +0 -71
- package/node_modules/highlight.js/scss/night-owl.scss +0 -182
- package/node_modules/highlight.js/scss/nnfx-dark.scss +0 -106
- package/node_modules/highlight.js/scss/nnfx.scss +0 -106
- package/node_modules/highlight.js/scss/nord.scss +0 -309
- package/node_modules/highlight.js/scss/obsidian.scss +0 -88
- package/node_modules/highlight.js/scss/ocean.scss +0 -74
- package/node_modules/highlight.js/scss/paraiso-dark.scss +0 -72
- package/node_modules/highlight.js/scss/paraiso-light.scss +0 -72
- package/node_modules/highlight.js/scss/pojoaque.jpg +0 -0
- package/node_modules/highlight.js/scss/pojoaque.scss +0 -83
- package/node_modules/highlight.js/scss/purebasic.scss +0 -96
- package/node_modules/highlight.js/scss/qtcreator_dark.scss +0 -83
- package/node_modules/highlight.js/scss/qtcreator_light.scss +0 -83
- package/node_modules/highlight.js/scss/railscasts.scss +0 -106
- package/node_modules/highlight.js/scss/rainbow.scss +0 -85
- package/node_modules/highlight.js/scss/routeros.scss +0 -108
- package/node_modules/highlight.js/scss/school-book.png +0 -0
- package/node_modules/highlight.js/scss/school-book.scss +0 -69
- package/node_modules/highlight.js/scss/shades-of-purple.scss +0 -96
- package/node_modules/highlight.js/scss/solarized-dark.scss +0 -84
- package/node_modules/highlight.js/scss/solarized-light.scss +0 -84
- package/node_modules/highlight.js/scss/srcery.scss +0 -78
- package/node_modules/highlight.js/scss/stackoverflow-dark.scss +0 -78
- package/node_modules/highlight.js/scss/stackoverflow-light.scss +0 -78
- package/node_modules/highlight.js/scss/sunburst.scss +0 -102
- package/node_modules/highlight.js/scss/tomorrow-night-blue.scss +0 -75
- package/node_modules/highlight.js/scss/tomorrow-night-bright.scss +0 -74
- package/node_modules/highlight.js/scss/tomorrow-night-eighties.scss +0 -74
- package/node_modules/highlight.js/scss/tomorrow-night.scss +0 -75
- package/node_modules/highlight.js/scss/tomorrow.scss +0 -72
- package/node_modules/highlight.js/scss/vs.scss +0 -68
- package/node_modules/highlight.js/scss/vs2015.scss +0 -115
- package/node_modules/highlight.js/scss/xcode.scss +0 -104
- package/node_modules/highlight.js/scss/xt256.scss +0 -92
- package/node_modules/highlight.js/scss/zenburn.scss +0 -80
- package/node_modules/highlight.js/styles/a11y-dark.css +0 -99
- package/node_modules/highlight.js/styles/a11y-light.css +0 -99
- package/node_modules/highlight.js/styles/agate.css +0 -108
- package/node_modules/highlight.js/styles/an-old-hope.css +0 -89
- package/node_modules/highlight.js/styles/androidstudio.css +0 -66
- package/node_modules/highlight.js/styles/arduino-light.css +0 -87
- package/node_modules/highlight.js/styles/arta.css +0 -73
- package/node_modules/highlight.js/styles/ascetic.css +0 -45
- package/node_modules/highlight.js/styles/atelier-cave-dark.css +0 -83
- package/node_modules/highlight.js/styles/atelier-cave-light.css +0 -85
- package/node_modules/highlight.js/styles/atelier-dune-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-dune-light.css +0 -69
- package/node_modules/highlight.js/styles/atelier-estuary-dark.css +0 -84
- package/node_modules/highlight.js/styles/atelier-estuary-light.css +0 -84
- package/node_modules/highlight.js/styles/atelier-forest-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-forest-light.css +0 -69
- package/node_modules/highlight.js/styles/atelier-heath-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-heath-light.css +0 -69
- package/node_modules/highlight.js/styles/atelier-lakeside-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-lakeside-light.css +0 -69
- package/node_modules/highlight.js/styles/atelier-plateau-dark.css +0 -84
- package/node_modules/highlight.js/styles/atelier-plateau-light.css +0 -84
- package/node_modules/highlight.js/styles/atelier-savanna-dark.css +0 -84
- package/node_modules/highlight.js/styles/atelier-savanna-light.css +0 -84
- package/node_modules/highlight.js/styles/atelier-seaside-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-seaside-light.css +0 -69
- package/node_modules/highlight.js/styles/atelier-sulphurpool-dark.css +0 -69
- package/node_modules/highlight.js/styles/atelier-sulphurpool-light.css +0 -69
- package/node_modules/highlight.js/styles/atom-one-dark-reasonable.css +0 -75
- package/node_modules/highlight.js/styles/atom-one-dark.css +0 -96
- package/node_modules/highlight.js/styles/atom-one-light.css +0 -96
- package/node_modules/highlight.js/styles/brown-paper.css +0 -64
- package/node_modules/highlight.js/styles/brown-papersq.png +0 -0
- package/node_modules/highlight.js/styles/codepen-embed.css +0 -60
- package/node_modules/highlight.js/styles/color-brewer.css +0 -71
- package/node_modules/highlight.js/styles/darcula.css +0 -74
- package/node_modules/highlight.js/styles/dark.css +0 -63
- package/node_modules/highlight.js/styles/default.css +0 -99
- package/node_modules/highlight.js/styles/docco.css +0 -97
- package/node_modules/highlight.js/styles/dracula.css +0 -76
- package/node_modules/highlight.js/styles/far.css +0 -71
- package/node_modules/highlight.js/styles/foundation.css +0 -89
- package/node_modules/highlight.js/styles/github-gist.css +0 -79
- package/node_modules/highlight.js/styles/github.css +0 -99
- package/node_modules/highlight.js/styles/gml.css +0 -78
- package/node_modules/highlight.js/styles/googlecode.css +0 -89
- package/node_modules/highlight.js/styles/gradient-dark.css +0 -122
- package/node_modules/highlight.js/styles/gradient-light.css +0 -130
- package/node_modules/highlight.js/styles/grayscale.css +0 -101
- package/node_modules/highlight.js/styles/gruvbox-dark.css +0 -108
- package/node_modules/highlight.js/styles/gruvbox-light.css +0 -108
- package/node_modules/highlight.js/styles/hopscotch.css +0 -84
- package/node_modules/highlight.js/styles/hybrid.css +0 -102
- package/node_modules/highlight.js/styles/idea.css +0 -97
- package/node_modules/highlight.js/styles/ir-black.css +0 -73
- package/node_modules/highlight.js/styles/isbl-editor-dark.css +0 -112
- package/node_modules/highlight.js/styles/isbl-editor-light.css +0 -111
- package/node_modules/highlight.js/styles/kimbie.dark.css +0 -74
- package/node_modules/highlight.js/styles/kimbie.light.css +0 -74
- package/node_modules/highlight.js/styles/lightfair.css +0 -88
- package/node_modules/highlight.js/styles/lioshi.css +0 -88
- package/node_modules/highlight.js/styles/magula.css +0 -70
- package/node_modules/highlight.js/styles/mono-blue.css +0 -56
- package/node_modules/highlight.js/styles/monokai-sublime.css +0 -83
- package/node_modules/highlight.js/styles/monokai.css +0 -71
- package/node_modules/highlight.js/styles/night-owl.css +0 -182
- package/node_modules/highlight.js/styles/nnfx-dark.css +0 -106
- package/node_modules/highlight.js/styles/nnfx.css +0 -106
- package/node_modules/highlight.js/styles/nord.css +0 -309
- package/node_modules/highlight.js/styles/obsidian.css +0 -88
- package/node_modules/highlight.js/styles/ocean.css +0 -74
- package/node_modules/highlight.js/styles/paraiso-dark.css +0 -72
- package/node_modules/highlight.js/styles/paraiso-light.css +0 -72
- package/node_modules/highlight.js/styles/pojoaque.css +0 -83
- package/node_modules/highlight.js/styles/pojoaque.jpg +0 -0
- package/node_modules/highlight.js/styles/purebasic.css +0 -96
- package/node_modules/highlight.js/styles/qtcreator_dark.css +0 -83
- package/node_modules/highlight.js/styles/qtcreator_light.css +0 -83
- package/node_modules/highlight.js/styles/railscasts.css +0 -106
- package/node_modules/highlight.js/styles/rainbow.css +0 -85
- package/node_modules/highlight.js/styles/routeros.css +0 -108
- package/node_modules/highlight.js/styles/school-book.css +0 -69
- package/node_modules/highlight.js/styles/school-book.png +0 -0
- package/node_modules/highlight.js/styles/shades-of-purple.css +0 -96
- package/node_modules/highlight.js/styles/solarized-dark.css +0 -84
- package/node_modules/highlight.js/styles/solarized-light.css +0 -84
- package/node_modules/highlight.js/styles/srcery.css +0 -78
- package/node_modules/highlight.js/styles/stackoverflow-dark.css +0 -78
- package/node_modules/highlight.js/styles/stackoverflow-light.css +0 -78
- package/node_modules/highlight.js/styles/sunburst.css +0 -102
- package/node_modules/highlight.js/styles/tomorrow-night-blue.css +0 -75
- package/node_modules/highlight.js/styles/tomorrow-night-bright.css +0 -74
- package/node_modules/highlight.js/styles/tomorrow-night-eighties.css +0 -74
- package/node_modules/highlight.js/styles/tomorrow-night.css +0 -75
- package/node_modules/highlight.js/styles/tomorrow.css +0 -72
- package/node_modules/highlight.js/styles/vs.css +0 -68
- package/node_modules/highlight.js/styles/vs2015.css +0 -115
- package/node_modules/highlight.js/styles/xcode.css +0 -104
- package/node_modules/highlight.js/styles/xt256.css +0 -92
- package/node_modules/highlight.js/styles/zenburn.css +0 -80
- package/node_modules/highlight.js/types/index.d.ts +0 -261
- package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
- package/node_modules/is-fullwidth-code-point/index.js +0 -50
- package/node_modules/is-fullwidth-code-point/license +0 -9
- package/node_modules/is-fullwidth-code-point/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/readme.md +0 -39
- package/node_modules/mz/HISTORY.md +0 -66
- package/node_modules/mz/LICENSE +0 -22
- package/node_modules/mz/README.md +0 -106
- package/node_modules/mz/child_process.js +0 -8
- package/node_modules/mz/crypto.js +0 -9
- package/node_modules/mz/dns.js +0 -16
- package/node_modules/mz/fs.js +0 -62
- package/node_modules/mz/index.js +0 -8
- package/node_modules/mz/package.json +0 -44
- package/node_modules/mz/readline.js +0 -64
- package/node_modules/mz/zlib.js +0 -13
- package/node_modules/object-assign/index.js +0 -90
- package/node_modules/object-assign/license +0 -21
- package/node_modules/object-assign/package.json +0 -42
- package/node_modules/object-assign/readme.md +0 -61
- package/node_modules/parse5/LICENSE +0 -19
- package/node_modules/parse5/README.md +0 -38
- package/node_modules/parse5/lib/common/doctype.js +0 -162
- package/node_modules/parse5/lib/common/error-codes.js +0 -65
- package/node_modules/parse5/lib/common/foreign-content.js +0 -265
- package/node_modules/parse5/lib/common/html.js +0 -272
- package/node_modules/parse5/lib/common/unicode.js +0 -109
- package/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
- package/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
- package/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
- package/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
- package/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
- package/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -222
- package/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
- package/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
- package/node_modules/parse5/lib/index.js +0 -29
- package/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
- package/node_modules/parse5/lib/parser/index.js +0 -2956
- package/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
- package/node_modules/parse5/lib/serializer/index.js +0 -176
- package/node_modules/parse5/lib/tokenizer/index.js +0 -2196
- package/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
- package/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
- package/node_modules/parse5/lib/tree-adapters/default.js +0 -217
- package/node_modules/parse5/lib/utils/merge-options.js +0 -13
- package/node_modules/parse5/lib/utils/mixin.js +0 -39
- package/node_modules/parse5/package.json +0 -35
- package/node_modules/parse5-htmlparser2-tree-adapter/LICENSE +0 -19
- package/node_modules/parse5-htmlparser2-tree-adapter/README.md +0 -34
- package/node_modules/parse5-htmlparser2-tree-adapter/lib/index.js +0 -348
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/LICENSE +0 -19
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/README.md +0 -38
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/doctype.js +0 -162
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/error-codes.js +0 -65
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/foreign-content.js +0 -265
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/html.js +0 -272
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/unicode.js +0 -109
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -223
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/index.js +0 -29
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/index.js +0 -2956
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/serializer/index.js +0 -176
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/index.js +0 -2196
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tree-adapters/default.js +0 -221
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/merge-options.js +0 -13
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/mixin.js +0 -39
- package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/package.json +0 -35
- package/node_modules/parse5-htmlparser2-tree-adapter/package.json +0 -27
- package/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/node_modules/require-directory/.jshintrc +0 -67
- package/node_modules/require-directory/.npmignore +0 -1
- package/node_modules/require-directory/.travis.yml +0 -3
- package/node_modules/require-directory/LICENSE +0 -22
- package/node_modules/require-directory/README.markdown +0 -184
- package/node_modules/require-directory/index.js +0 -86
- package/node_modules/require-directory/package.json +0 -40
- package/node_modules/source-map/CHANGELOG.md +0 -301
- package/node_modules/string-width/index.d.ts +0 -29
- package/node_modules/string-width/index.js +0 -47
- package/node_modules/string-width/license +0 -9
- package/node_modules/string-width/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/string-width/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/string-width/node_modules/ansi-regex/license +0 -9
- package/node_modules/string-width/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/string-width/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/string-width/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/string-width/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/string-width/node_modules/strip-ansi/license +0 -9
- package/node_modules/string-width/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/string-width/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/string-width/package.json +0 -56
- package/node_modules/string-width/readme.md +0 -50
- package/node_modules/supports-color/browser.js +0 -5
- package/node_modules/supports-color/index.js +0 -135
- package/node_modules/supports-color/license +0 -9
- package/node_modules/supports-color/package.json +0 -53
- package/node_modules/supports-color/readme.md +0 -76
- package/node_modules/thenify/History.md +0 -11
- package/node_modules/thenify/LICENSE +0 -22
- package/node_modules/thenify/README.md +0 -120
- package/node_modules/thenify/index.js +0 -77
- package/node_modules/thenify/package.json +0 -31
- package/node_modules/thenify-all/History.md +0 -11
- package/node_modules/thenify-all/LICENSE +0 -22
- package/node_modules/thenify-all/README.md +0 -66
- package/node_modules/thenify-all/index.js +0 -73
- package/node_modules/thenify-all/package.json +0 -34
- package/node_modules/wrap-ansi/index.js +0 -216
- package/node_modules/wrap-ansi/license +0 -9
- package/node_modules/wrap-ansi/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/wrap-ansi/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/wrap-ansi/node_modules/ansi-regex/license +0 -9
- package/node_modules/wrap-ansi/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/wrap-ansi/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/wrap-ansi/node_modules/strip-ansi/license +0 -9
- package/node_modules/wrap-ansi/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/wrap-ansi/package.json +0 -62
- package/node_modules/wrap-ansi/readme.md +0 -91
- package/node_modules/y18n/CHANGELOG.md +0 -100
- package/node_modules/y18n/LICENSE +0 -13
- package/node_modules/y18n/README.md +0 -127
- package/node_modules/y18n/build/index.cjs +0 -203
- package/node_modules/y18n/build/lib/cjs.js +0 -6
- package/node_modules/y18n/build/lib/index.js +0 -174
- package/node_modules/y18n/build/lib/platform-shims/node.js +0 -19
- package/node_modules/y18n/index.mjs +0 -8
- package/node_modules/y18n/package.json +0 -70
- package/node_modules/yargs/CHANGELOG.md +0 -88
- package/node_modules/yargs/LICENSE +0 -21
- package/node_modules/yargs/README.md +0 -202
- package/node_modules/yargs/browser.mjs +0 -7
- package/node_modules/yargs/build/index.cjs +0 -2920
- package/node_modules/yargs/build/lib/argsert.js +0 -62
- package/node_modules/yargs/build/lib/command.js +0 -382
- package/node_modules/yargs/build/lib/completion-templates.js +0 -47
- package/node_modules/yargs/build/lib/completion.js +0 -128
- package/node_modules/yargs/build/lib/middleware.js +0 -53
- package/node_modules/yargs/build/lib/parse-command.js +0 -32
- package/node_modules/yargs/build/lib/typings/common-types.js +0 -9
- package/node_modules/yargs/build/lib/typings/yargs-parser-types.js +0 -1
- package/node_modules/yargs/build/lib/usage.js +0 -548
- package/node_modules/yargs/build/lib/utils/apply-extends.js +0 -59
- package/node_modules/yargs/build/lib/utils/is-promise.js +0 -5
- package/node_modules/yargs/build/lib/utils/levenshtein.js +0 -26
- package/node_modules/yargs/build/lib/utils/obj-filter.js +0 -10
- package/node_modules/yargs/build/lib/utils/process-argv.js +0 -17
- package/node_modules/yargs/build/lib/utils/set-blocking.js +0 -12
- package/node_modules/yargs/build/lib/utils/which-module.js +0 -10
- package/node_modules/yargs/build/lib/validation.js +0 -308
- package/node_modules/yargs/build/lib/yargs-factory.js +0 -1143
- package/node_modules/yargs/build/lib/yerror.js +0 -7
- package/node_modules/yargs/helpers/helpers.mjs +0 -10
- package/node_modules/yargs/helpers/index.js +0 -14
- package/node_modules/yargs/helpers/package.json +0 -3
- package/node_modules/yargs/index.cjs +0 -39
- package/node_modules/yargs/index.mjs +0 -8
- package/node_modules/yargs/lib/platform-shims/browser.mjs +0 -92
- package/node_modules/yargs/lib/platform-shims/esm.mjs +0 -67
- package/node_modules/yargs/locales/be.json +0 -46
- package/node_modules/yargs/locales/de.json +0 -46
- package/node_modules/yargs/locales/en.json +0 -51
- package/node_modules/yargs/locales/es.json +0 -46
- package/node_modules/yargs/locales/fi.json +0 -49
- package/node_modules/yargs/locales/fr.json +0 -53
- package/node_modules/yargs/locales/hi.json +0 -49
- package/node_modules/yargs/locales/hu.json +0 -46
- package/node_modules/yargs/locales/id.json +0 -50
- package/node_modules/yargs/locales/it.json +0 -46
- package/node_modules/yargs/locales/ja.json +0 -51
- package/node_modules/yargs/locales/ko.json +0 -49
- package/node_modules/yargs/locales/nb.json +0 -44
- package/node_modules/yargs/locales/nl.json +0 -49
- package/node_modules/yargs/locales/nn.json +0 -44
- package/node_modules/yargs/locales/pirate.json +0 -13
- package/node_modules/yargs/locales/pl.json +0 -49
- package/node_modules/yargs/locales/pt.json +0 -45
- package/node_modules/yargs/locales/pt_BR.json +0 -48
- package/node_modules/yargs/locales/ru.json +0 -46
- package/node_modules/yargs/locales/th.json +0 -46
- package/node_modules/yargs/locales/tr.json +0 -48
- package/node_modules/yargs/locales/zh_CN.json +0 -48
- package/node_modules/yargs/locales/zh_TW.json +0 -47
- package/node_modules/yargs/package.json +0 -122
- package/node_modules/yargs/yargs +0 -9
- package/node_modules/yargs-parser/CHANGELOG.md +0 -263
- package/node_modules/yargs-parser/LICENSE.txt +0 -14
- package/node_modules/yargs-parser/README.md +0 -518
- package/node_modules/yargs-parser/browser.js +0 -29
- package/node_modules/yargs-parser/build/index.cjs +0 -1042
- package/node_modules/yargs-parser/build/lib/index.js +0 -59
- package/node_modules/yargs-parser/build/lib/string-utils.js +0 -65
- package/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +0 -40
- package/node_modules/yargs-parser/build/lib/yargs-parser-types.js +0 -12
- package/node_modules/yargs-parser/build/lib/yargs-parser.js +0 -1037
- package/node_modules/yargs-parser/package.json +0 -87
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,mBAAmB,CAqBrE,CAAC"}
|
|
@@ -17,6 +17,7 @@ export const BUILTIN_SLASH_COMMANDS = [
|
|
|
17
17
|
{ name: "compact", description: "Manually compact the session context" },
|
|
18
18
|
{ name: "resume", description: "Resume a different session" },
|
|
19
19
|
{ name: "reload", description: "Reload extensions, skills, prompts, and themes" },
|
|
20
|
+
{ name: "thinking", description: "Set thinking level (off/minimal/low/medium/high/xhigh)" },
|
|
20
21
|
{ name: "quit", description: "Quit pi" },
|
|
21
22
|
];
|
|
22
23
|
//# sourceMappingURL=slash-commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAClF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACvE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACzD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC3D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACjF,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;CACxC,CAAC","sourcesContent":["export type SlashCommandSource = \"extension\" | \"prompt\" | \"skill\";\n\nexport type SlashCommandLocation = \"user\" | \"project\" | \"path\";\n\nexport interface SlashCommandInfo {\n\tname: string;\n\tdescription?: string;\n\tsource: SlashCommandSource;\n\tlocation?: SlashCommandLocation;\n\tpath?: string;\n}\n\nexport interface BuiltinSlashCommand {\n\tname: string;\n\tdescription: string;\n}\n\nexport const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [\n\t{ name: \"settings\", description: \"Open settings menu\" },\n\t{ name: \"model\", description: \"Select model (opens selector UI)\" },\n\t{ name: \"scoped-models\", description: \"Enable/disable models for Ctrl+P cycling\" },\n\t{ name: \"export\", description: \"Export session to HTML file\" },\n\t{ name: \"share\", description: \"Share session as a secret GitHub gist\" },\n\t{ name: \"copy\", description: \"Copy last agent message to clipboard\" },\n\t{ name: \"name\", description: \"Set session display name\" },\n\t{ name: \"session\", description: \"Show session info and stats\" },\n\t{ name: \"changelog\", description: \"Show changelog entries\" },\n\t{ name: \"hotkeys\", description: \"Show all keyboard shortcuts\" },\n\t{ name: \"fork\", description: \"Create a new fork from a previous message\" },\n\t{ name: \"tree\", description: \"Navigate session tree (switch branches)\" },\n\t{ name: \"login\", description: \"Login with OAuth provider\" },\n\t{ name: \"logout\", description: \"Logout from OAuth provider\" },\n\t{ name: \"new\", description: \"Start a new session\" },\n\t{ name: \"compact\", description: \"Manually compact the session context\" },\n\t{ name: \"resume\", description: \"Resume a different session\" },\n\t{ name: \"reload\", description: \"Reload extensions, skills, prompts, and themes\" },\n\t{ name: \"quit\", description: \"Quit pi\" },\n];\n"]}
|
|
1
|
+
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,sBAAsB,GAAuC;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kCAAkC,EAAE;IAClE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;IAClF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC9D,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACvE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACzD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IAC3D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACnD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;IACjF,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,wDAAwD,EAAE;IAC3F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;CACxC,CAAC","sourcesContent":["export type SlashCommandSource = \"extension\" | \"prompt\" | \"skill\";\n\nexport type SlashCommandLocation = \"user\" | \"project\" | \"path\";\n\nexport interface SlashCommandInfo {\n\tname: string;\n\tdescription?: string;\n\tsource: SlashCommandSource;\n\tlocation?: SlashCommandLocation;\n\tpath?: string;\n}\n\nexport interface BuiltinSlashCommand {\n\tname: string;\n\tdescription: string;\n}\n\nexport const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [\n\t{ name: \"settings\", description: \"Open settings menu\" },\n\t{ name: \"model\", description: \"Select model (opens selector UI)\" },\n\t{ name: \"scoped-models\", description: \"Enable/disable models for Ctrl+P cycling\" },\n\t{ name: \"export\", description: \"Export session to HTML file\" },\n\t{ name: \"share\", description: \"Share session as a secret GitHub gist\" },\n\t{ name: \"copy\", description: \"Copy last agent message to clipboard\" },\n\t{ name: \"name\", description: \"Set session display name\" },\n\t{ name: \"session\", description: \"Show session info and stats\" },\n\t{ name: \"changelog\", description: \"Show changelog entries\" },\n\t{ name: \"hotkeys\", description: \"Show all keyboard shortcuts\" },\n\t{ name: \"fork\", description: \"Create a new fork from a previous message\" },\n\t{ name: \"tree\", description: \"Navigate session tree (switch branches)\" },\n\t{ name: \"login\", description: \"Login with OAuth provider\" },\n\t{ name: \"logout\", description: \"Logout from OAuth provider\" },\n\t{ name: \"new\", description: \"Start a new session\" },\n\t{ name: \"compact\", description: \"Manually compact the session context\" },\n\t{ name: \"resume\", description: \"Resume a different session\" },\n\t{ name: \"reload\", description: \"Reload extensions, skills, prompts, and themes\" },\n\t{ name: \"thinking\", description: \"Set thinking level (off/minimal/low/medium/high/xhigh)\" },\n\t{ name: \"quit\", description: \"Quit pi\" },\n];\n"]}
|
|
@@ -25,7 +25,7 @@ export interface FindOperations {
|
|
|
25
25
|
}) => Promise<string[]> | string[];
|
|
26
26
|
}
|
|
27
27
|
export interface FindToolOptions {
|
|
28
|
-
/** Custom operations for find. Default: local filesystem +
|
|
28
|
+
/** Custom operations for find. Default: local filesystem + native glob */
|
|
29
29
|
operations?: FindOperations;
|
|
30
30
|
}
|
|
31
31
|
export declare function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAItD,OAAO,EAAiC,KAAK,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAEnG,QAAA,MAAM,UAAU;;;;EAMd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAItD,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,2BAA2B;IAC3B,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7D,gEAAgE;IAChE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACnH;AAUD,MAAM,WAAW,eAAe;IAC/B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CAiJnG;AAED,0EAA0E;AAC1E,eAAO,MAAM,QAAQ;;;;QAAgC,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
+
import { glob as nativeGlob } from "@gsd/native/glob";
|
|
1
2
|
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { spawnSync } from "child_process";
|
|
3
3
|
import { existsSync } from "fs";
|
|
4
|
-
import { globSync } from "glob";
|
|
5
4
|
import path from "path";
|
|
6
|
-
import { ensureTool } from "../../utils/tools-manager.js";
|
|
7
5
|
import { resolveToCwd } from "./path-utils.js";
|
|
8
6
|
import { DEFAULT_MAX_BYTES, formatSize, truncateHead } from "./truncate.js";
|
|
9
7
|
const findSchema = Type.Object({
|
|
@@ -17,7 +15,7 @@ const DEFAULT_LIMIT = 1000;
|
|
|
17
15
|
const defaultFindOperations = {
|
|
18
16
|
exists: existsSync,
|
|
19
17
|
glob: (_pattern, _searchCwd, _options) => {
|
|
20
|
-
//
|
|
18
|
+
// Placeholder — actual native glob execution happens in execute
|
|
21
19
|
return [];
|
|
22
20
|
},
|
|
23
21
|
};
|
|
@@ -89,87 +87,24 @@ export function createFindTool(cwd, options) {
|
|
|
89
87
|
});
|
|
90
88
|
return;
|
|
91
89
|
}
|
|
92
|
-
// Default: use
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const args = [
|
|
100
|
-
"--glob",
|
|
101
|
-
"--color=never",
|
|
102
|
-
"--hidden",
|
|
103
|
-
"--max-results",
|
|
104
|
-
String(effectiveLimit),
|
|
105
|
-
];
|
|
106
|
-
// Include .gitignore files
|
|
107
|
-
const gitignoreFiles = new Set();
|
|
108
|
-
const rootGitignore = path.join(searchPath, ".gitignore");
|
|
109
|
-
if (existsSync(rootGitignore)) {
|
|
110
|
-
gitignoreFiles.add(rootGitignore);
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
const nestedGitignores = globSync("**/.gitignore", {
|
|
114
|
-
cwd: searchPath,
|
|
115
|
-
dot: true,
|
|
116
|
-
absolute: true,
|
|
117
|
-
ignore: ["**/node_modules/**", "**/.git/**"],
|
|
118
|
-
});
|
|
119
|
-
for (const file of nestedGitignores) {
|
|
120
|
-
gitignoreFiles.add(file);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
// Ignore glob errors
|
|
125
|
-
}
|
|
126
|
-
for (const gitignorePath of gitignoreFiles) {
|
|
127
|
-
args.push("--ignore-file", gitignorePath);
|
|
128
|
-
}
|
|
129
|
-
args.push(pattern, searchPath);
|
|
130
|
-
const result = spawnSync(fdPath, args, {
|
|
131
|
-
encoding: "utf-8",
|
|
132
|
-
maxBuffer: 10 * 1024 * 1024,
|
|
90
|
+
// Default: use native Rust glob
|
|
91
|
+
const globResult = await nativeGlob({
|
|
92
|
+
pattern,
|
|
93
|
+
path: searchPath,
|
|
94
|
+
hidden: true,
|
|
95
|
+
gitignore: true,
|
|
96
|
+
maxResults: effectiveLimit,
|
|
133
97
|
});
|
|
134
98
|
signal?.removeEventListener("abort", onAbort);
|
|
135
|
-
if (
|
|
136
|
-
reject(new Error(`Failed to run fd: ${result.error.message}`));
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const output = result.stdout?.trim() || "";
|
|
140
|
-
if (result.status !== 0) {
|
|
141
|
-
const errorMsg = result.stderr?.trim() || `fd exited with code ${result.status}`;
|
|
142
|
-
if (!output) {
|
|
143
|
-
reject(new Error(errorMsg));
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (!output) {
|
|
99
|
+
if (globResult.matches.length === 0) {
|
|
148
100
|
resolve({
|
|
149
101
|
content: [{ type: "text", text: "No files found matching pattern" }],
|
|
150
102
|
details: undefined,
|
|
151
103
|
});
|
|
152
104
|
return;
|
|
153
105
|
}
|
|
154
|
-
|
|
155
|
-
const relativized =
|
|
156
|
-
for (const rawLine of lines) {
|
|
157
|
-
const line = rawLine.replace(/\r$/, "").trim();
|
|
158
|
-
if (!line)
|
|
159
|
-
continue;
|
|
160
|
-
const hadTrailingSlash = line.endsWith("/") || line.endsWith("\\");
|
|
161
|
-
let relativePath = line;
|
|
162
|
-
if (line.startsWith(searchPath)) {
|
|
163
|
-
relativePath = line.slice(searchPath.length + 1);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
relativePath = path.relative(searchPath, line);
|
|
167
|
-
}
|
|
168
|
-
if (hadTrailingSlash && !relativePath.endsWith("/")) {
|
|
169
|
-
relativePath += "/";
|
|
170
|
-
}
|
|
171
|
-
relativized.push(relativePath);
|
|
172
|
-
}
|
|
106
|
+
// Native glob returns paths relative to the search root
|
|
107
|
+
const relativized = globResult.matches.map((m) => m.path);
|
|
173
108
|
const resultLimitReached = relativized.length >= effectiveLimit;
|
|
174
109
|
const rawOutput = relativized.join("\n");
|
|
175
110
|
const truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { spawnSync } from \"child_process\";\nimport { existsSync } from \"fs\";\nimport { globSync } from \"glob\";\nimport path from \"path\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { resolveToCwd } from \"./path-utils.js\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription: \"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(Type.String({ description: \"Directory to search in (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of results (default: 1000)\" })),\n});\n\nexport type FindToolInput = Static<typeof findSchema>;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport interface FindToolDetails {\n\ttruncation?: TruncationResult;\n\tresultLimitReached?: number;\n}\n\n/**\n * Pluggable operations for the find tool.\n * Override these to delegate file search to remote systems (e.g., SSH).\n */\nexport interface FindOperations {\n\t/** Check if path exists */\n\texists: (absolutePath: string) => Promise<boolean> | boolean;\n\t/** Find files matching glob pattern. Returns relative paths. */\n\tglob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];\n}\n\nconst defaultFindOperations: FindOperations = {\n\texists: existsSync,\n\tglob: (_pattern, _searchCwd, _options) => {\n\t\t// This is a placeholder - actual fd execution happens in execute\n\t\treturn [];\n\t},\n};\n\nexport interface FindToolOptions {\n\t/** Custom operations for find. Default: local filesystem + fd */\n\toperations?: FindOperations;\n}\n\nexport function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema> {\n\tconst customOps = options?.operations;\n\n\treturn {\n\t\tname: \"find\",\n\t\tlabel: \"find\",\n\t\tdescription: `Search for files by glob pattern. Returns matching file paths relative to the search directory. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} results or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tparameters: findSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\t{ pattern, path: searchDir, limit }: { pattern: string; path?: string; limit?: number },\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst searchPath = resolveToCwd(searchDir || \".\", cwd);\n\t\t\t\t\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\t\t\t\t\t\tconst ops = customOps ?? defaultFindOperations;\n\n\t\t\t\t\t\t// If custom operations provided with glob, use that\n\t\t\t\t\t\tif (customOps?.glob) {\n\t\t\t\t\t\t\tif (!(await ops.exists(searchPath))) {\n\t\t\t\t\t\t\t\treject(new Error(`Path not found: ${searchPath}`));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst results = await ops.glob(pattern, searchPath, {\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t\tlimit: effectiveLimit,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\t\tif (results.length === 0) {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Relativize paths\n\t\t\t\t\t\t\tconst relativized = results.map((p) => {\n\t\t\t\t\t\t\t\tif (p.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\t\treturn p.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn path.relative(searchPath, p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\t\tnotices.push(`${effectiveLimit} results limit reached`);\n\t\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Default: use fd\n\t\t\t\t\t\tconst fdPath = await ensureTool(\"fd\", true);\n\t\t\t\t\t\tif (!fdPath) {\n\t\t\t\t\t\t\treject(new Error(\"fd is not available and could not be downloaded\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Build fd arguments\n\t\t\t\t\t\tconst args: string[] = [\n\t\t\t\t\t\t\t\"--glob\",\n\t\t\t\t\t\t\t\"--color=never\",\n\t\t\t\t\t\t\t\"--hidden\",\n\t\t\t\t\t\t\t\"--max-results\",\n\t\t\t\t\t\t\tString(effectiveLimit),\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\t// Include .gitignore files\n\t\t\t\t\t\tconst gitignoreFiles = new Set<string>();\n\t\t\t\t\t\tconst rootGitignore = path.join(searchPath, \".gitignore\");\n\t\t\t\t\t\tif (existsSync(rootGitignore)) {\n\t\t\t\t\t\t\tgitignoreFiles.add(rootGitignore);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst nestedGitignores = globSync(\"**/.gitignore\", {\n\t\t\t\t\t\t\t\tcwd: searchPath,\n\t\t\t\t\t\t\t\tdot: true,\n\t\t\t\t\t\t\t\tabsolute: true,\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const file of nestedGitignores) {\n\t\t\t\t\t\t\t\tgitignoreFiles.add(file);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Ignore glob errors\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const gitignorePath of gitignoreFiles) {\n\t\t\t\t\t\t\targs.push(\"--ignore-file\", gitignorePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\targs.push(pattern, searchPath);\n\n\t\t\t\t\t\tconst result = spawnSync(fdPath, args, {\n\t\t\t\t\t\t\tencoding: \"utf-8\",\n\t\t\t\t\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tif (result.error) {\n\t\t\t\t\t\t\treject(new Error(`Failed to run fd: ${result.error.message}`));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst output = result.stdout?.trim() || \"\";\n\n\t\t\t\t\t\tif (result.status !== 0) {\n\t\t\t\t\t\t\tconst errorMsg = result.stderr?.trim() || `fd exited with code ${result.status}`;\n\t\t\t\t\t\t\tif (!output) {\n\t\t\t\t\t\t\t\treject(new Error(errorMsg));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!output) {\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst relativized: string[] = [];\n\n\t\t\t\t\t\tfor (const rawLine of lines) {\n\t\t\t\t\t\t\tconst line = rawLine.replace(/\\r$/, \"\").trim();\n\t\t\t\t\t\t\tif (!line) continue;\n\n\t\t\t\t\t\t\tconst hadTrailingSlash = line.endsWith(\"/\") || line.endsWith(\"\\\\\");\n\t\t\t\t\t\t\tlet relativePath = line;\n\t\t\t\t\t\t\tif (line.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\trelativePath = line.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trelativePath = path.relative(searchPath, line);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hadTrailingSlash && !relativePath.endsWith(\"/\")) {\n\t\t\t\t\t\t\t\trelativePath += \"/\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trelativized.push(relativePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\tnotices.push(\n\t\t\t\t\t\t\t\t`${effectiveLimit} results limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default find tool using process.cwd() - for backwards compatibility */\nexport const findTool = createFindTool(process.cwd());\n"]}
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/core/tools/find.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { glob as nativeGlob } from \"@gsd/native/glob\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { existsSync } from \"fs\";\nimport path from \"path\";\nimport { resolveToCwd } from \"./path-utils.js\";\nimport { DEFAULT_MAX_BYTES, formatSize, type TruncationResult, truncateHead } from \"./truncate.js\";\n\nconst findSchema = Type.Object({\n\tpattern: Type.String({\n\t\tdescription: \"Glob pattern to match files, e.g. '*.ts', '**/*.json', or 'src/**/*.spec.ts'\",\n\t}),\n\tpath: Type.Optional(Type.String({ description: \"Directory to search in (default: current directory)\" })),\n\tlimit: Type.Optional(Type.Number({ description: \"Maximum number of results (default: 1000)\" })),\n});\n\nexport type FindToolInput = Static<typeof findSchema>;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport interface FindToolDetails {\n\ttruncation?: TruncationResult;\n\tresultLimitReached?: number;\n}\n\n/**\n * Pluggable operations for the find tool.\n * Override these to delegate file search to remote systems (e.g., SSH).\n */\nexport interface FindOperations {\n\t/** Check if path exists */\n\texists: (absolutePath: string) => Promise<boolean> | boolean;\n\t/** Find files matching glob pattern. Returns relative paths. */\n\tglob: (pattern: string, cwd: string, options: { ignore: string[]; limit: number }) => Promise<string[]> | string[];\n}\n\nconst defaultFindOperations: FindOperations = {\n\texists: existsSync,\n\tglob: (_pattern, _searchCwd, _options) => {\n\t\t// Placeholder — actual native glob execution happens in execute\n\t\treturn [];\n\t},\n};\n\nexport interface FindToolOptions {\n\t/** Custom operations for find. Default: local filesystem + native glob */\n\toperations?: FindOperations;\n}\n\nexport function createFindTool(cwd: string, options?: FindToolOptions): AgentTool<typeof findSchema> {\n\tconst customOps = options?.operations;\n\n\treturn {\n\t\tname: \"find\",\n\t\tlabel: \"find\",\n\t\tdescription: `Search for files by glob pattern. Returns matching file paths relative to the search directory. Respects .gitignore. Output is truncated to ${DEFAULT_LIMIT} results or ${DEFAULT_MAX_BYTES / 1024}KB (whichever is hit first).`,\n\t\tparameters: findSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\t{ pattern, path: searchDir, limit }: { pattern: string; path?: string; limit?: number },\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst onAbort = () => reject(new Error(\"Operation aborted\"));\n\t\t\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst searchPath = resolveToCwd(searchDir || \".\", cwd);\n\t\t\t\t\t\tconst effectiveLimit = limit ?? DEFAULT_LIMIT;\n\t\t\t\t\t\tconst ops = customOps ?? defaultFindOperations;\n\n\t\t\t\t\t\t// If custom operations provided with glob, use that\n\t\t\t\t\t\tif (customOps?.glob) {\n\t\t\t\t\t\t\tif (!(await ops.exists(searchPath))) {\n\t\t\t\t\t\t\t\treject(new Error(`Path not found: ${searchPath}`));\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst results = await ops.glob(pattern, searchPath, {\n\t\t\t\t\t\t\t\tignore: [\"**/node_modules/**\", \"**/.git/**\"],\n\t\t\t\t\t\t\t\tlimit: effectiveLimit,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\t\tif (results.length === 0) {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Relativize paths\n\t\t\t\t\t\t\tconst relativized = results.map((p) => {\n\t\t\t\t\t\t\t\tif (p.startsWith(searchPath)) {\n\t\t\t\t\t\t\t\t\treturn p.slice(searchPath.length + 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn path.relative(searchPath, p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\t\tnotices.push(`${effectiveLimit} results limit reached`);\n\t\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Default: use native Rust glob\n\t\t\t\t\t\tconst globResult = await nativeGlob({\n\t\t\t\t\t\t\tpattern,\n\t\t\t\t\t\t\tpath: searchPath,\n\t\t\t\t\t\t\thidden: true,\n\t\t\t\t\t\t\tgitignore: true,\n\t\t\t\t\t\t\tmaxResults: effectiveLimit,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tif (globResult.matches.length === 0) {\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"No files found matching pattern\" }],\n\t\t\t\t\t\t\t\tdetails: undefined,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Native glob returns paths relative to the search root\n\t\t\t\t\t\tconst relativized = globResult.matches.map((m: { path: string }) => m.path);\n\n\t\t\t\t\t\tconst resultLimitReached = relativized.length >= effectiveLimit;\n\t\t\t\t\t\tconst rawOutput = relativized.join(\"\\n\");\n\t\t\t\t\t\tconst truncation = truncateHead(rawOutput, { maxLines: Number.MAX_SAFE_INTEGER });\n\n\t\t\t\t\t\tlet resultOutput = truncation.content;\n\t\t\t\t\t\tconst details: FindToolDetails = {};\n\t\t\t\t\t\tconst notices: string[] = [];\n\n\t\t\t\t\t\tif (resultLimitReached) {\n\t\t\t\t\t\t\tnotices.push(\n\t\t\t\t\t\t\t\t`${effectiveLimit} results limit reached. Use limit=${effectiveLimit * 2} for more, or refine pattern`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tdetails.resultLimitReached = effectiveLimit;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (truncation.truncated) {\n\t\t\t\t\t\t\tnotices.push(`${formatSize(DEFAULT_MAX_BYTES)} limit reached`);\n\t\t\t\t\t\t\tdetails.truncation = truncation;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (notices.length > 0) {\n\t\t\t\t\t\t\tresultOutput += `\\n\\n[${notices.join(\". \")}]`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: resultOutput }],\n\t\t\t\t\t\t\tdetails: Object.keys(details).length > 0 ? details : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\treject(e);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default find tool using process.cwd() - for backwards compatibility */\nexport const findTool = createFindTool(process.cwd());\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hashline edit tool — applies file edits using line-hash anchors.
|
|
3
|
+
*
|
|
4
|
+
* The model references lines by `LINE#ID` tags from read output.
|
|
5
|
+
* Each tag uniquely identifies a line, so edits remain stable even when lines shift.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentTool } from "@gsd/pi-agent-core";
|
|
8
|
+
import { type Static } from "@sinclair/typebox";
|
|
9
|
+
declare const hashlineEditItemSchema: import("@sinclair/typebox").TObject<{
|
|
10
|
+
op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
|
|
11
|
+
pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
|
+
end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
|
+
lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
14
|
+
}>;
|
|
15
|
+
declare const hashlineEditSchema: import("@sinclair/typebox").TObject<{
|
|
16
|
+
path: import("@sinclair/typebox").TString;
|
|
17
|
+
edits: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
18
|
+
op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
|
|
19
|
+
pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
20
|
+
end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
21
|
+
lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
22
|
+
}>>;
|
|
23
|
+
delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
24
|
+
move: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
25
|
+
}>;
|
|
26
|
+
export type HashlineEditInput = Static<typeof hashlineEditSchema>;
|
|
27
|
+
export type HashlineEditItem = Static<typeof hashlineEditItemSchema>;
|
|
28
|
+
export interface HashlineEditToolDetails {
|
|
29
|
+
/** Unified diff of the changes made */
|
|
30
|
+
diff: string;
|
|
31
|
+
/** Line number of the first change in the new file */
|
|
32
|
+
firstChangedLine?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Pluggable operations for the hashline edit tool.
|
|
36
|
+
*/
|
|
37
|
+
export interface HashlineEditOperations {
|
|
38
|
+
readFile: (absolutePath: string) => Promise<Buffer>;
|
|
39
|
+
writeFile: (absolutePath: string, content: string) => Promise<void>;
|
|
40
|
+
access: (absolutePath: string) => Promise<void>;
|
|
41
|
+
unlink: (absolutePath: string) => Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export interface HashlineEditToolOptions {
|
|
44
|
+
operations?: HashlineEditOperations;
|
|
45
|
+
}
|
|
46
|
+
export declare function createHashlineEditTool(cwd: string, options?: HashlineEditToolOptions): AgentTool<typeof hashlineEditSchema>;
|
|
47
|
+
/** Default hashline edit tool using process.cwd() */
|
|
48
|
+
export declare const hashlineEditTool: AgentTool<import("@sinclair/typebox").TObject<{
|
|
49
|
+
path: import("@sinclair/typebox").TString;
|
|
50
|
+
edits: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
51
|
+
op: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"replace">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"prepend">]>;
|
|
52
|
+
pos: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
53
|
+
end: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
54
|
+
lines: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>, import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
55
|
+
}>>;
|
|
56
|
+
delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
57
|
+
move: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
58
|
+
}>, any>;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=hashline-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashline-edit.d.ts","sourceRoot":"","sources":["../../../src/core/tools/hashline-edit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAwBtD,QAAA,MAAM,sBAAsB;;;;;EAY3B,CAAC;AAEF,QAAA,MAAM,kBAAkB;;;;;;;;;;EAQvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACvC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AASD,MAAM,WAAW,uBAAuB;IACvC,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAyDD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC,OAAO,kBAAkB,CAAC,CA6K3H;AAED,qDAAqD;AACrD,eAAO,MAAM,gBAAgB;;;;;;;;;;QAAwC,CAAC"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { constants } from "fs";
|
|
3
|
+
import { access as fsAccess, readFile as fsReadFile, unlink as fsUnlink, writeFile as fsWriteFile } from "fs/promises";
|
|
4
|
+
import { detectLineEnding, generateDiffString, normalizeToLF, restoreLineEndings, stripBom, } from "./edit-diff.js";
|
|
5
|
+
import { applyHashlineEdits, hashlineParseText, parseTag, } from "./hashline.js";
|
|
6
|
+
import { resolveToCwd } from "./path-utils.js";
|
|
7
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
8
|
+
// Schema
|
|
9
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
10
|
+
const hashlineEditItemSchema = Type.Object({
|
|
11
|
+
op: Type.Union([Type.Literal("replace"), Type.Literal("append"), Type.Literal("prepend")]),
|
|
12
|
+
pos: Type.Optional(Type.String({ description: "Anchor tag (e.g. \"5#QQ\")" })),
|
|
13
|
+
end: Type.Optional(Type.String({ description: "End anchor for range replace" })),
|
|
14
|
+
lines: Type.Union([
|
|
15
|
+
Type.Array(Type.String(), { description: "Replacement content lines" }),
|
|
16
|
+
Type.String(),
|
|
17
|
+
Type.Null(),
|
|
18
|
+
]),
|
|
19
|
+
}, { additionalProperties: false });
|
|
20
|
+
const hashlineEditSchema = Type.Object({
|
|
21
|
+
path: Type.String({ description: "Path to the file to edit" }),
|
|
22
|
+
edits: Type.Array(hashlineEditItemSchema, { description: "Edits to apply (referenced by LINE#ID tags from read output)" }),
|
|
23
|
+
delete: Type.Optional(Type.Boolean({ description: "If true, delete the file" })),
|
|
24
|
+
move: Type.Optional(Type.String({ description: "If set, move/rename the file to this path" })),
|
|
25
|
+
}, { additionalProperties: false });
|
|
26
|
+
const defaultHashlineEditOperations = {
|
|
27
|
+
readFile: (path) => fsReadFile(path),
|
|
28
|
+
writeFile: (path, content) => fsWriteFile(path, content, "utf-8"),
|
|
29
|
+
access: (path) => fsAccess(path, constants.R_OK | constants.W_OK),
|
|
30
|
+
unlink: (path) => fsUnlink(path),
|
|
31
|
+
};
|
|
32
|
+
/** Parse a tag, returning undefined instead of throwing on garbage. */
|
|
33
|
+
function tryParseTag(raw) {
|
|
34
|
+
try {
|
|
35
|
+
return parseTag(raw);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Map flat tool-schema edits into typed HashlineEdit objects.
|
|
43
|
+
*/
|
|
44
|
+
function resolveEditAnchors(edits) {
|
|
45
|
+
const result = [];
|
|
46
|
+
for (const edit of edits) {
|
|
47
|
+
const lines = hashlineParseText(edit.lines);
|
|
48
|
+
const tag = edit.pos ? tryParseTag(edit.pos) : undefined;
|
|
49
|
+
const end = edit.end ? tryParseTag(edit.end) : undefined;
|
|
50
|
+
const op = edit.op === "append" || edit.op === "prepend" ? edit.op : "replace";
|
|
51
|
+
switch (op) {
|
|
52
|
+
case "replace": {
|
|
53
|
+
if (tag && end) {
|
|
54
|
+
result.push({ op: "replace", pos: tag, end, lines });
|
|
55
|
+
}
|
|
56
|
+
else if (tag || end) {
|
|
57
|
+
result.push({ op: "replace", pos: tag || end, lines });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error("Replace requires at least one anchor (pos or end).");
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case "append": {
|
|
65
|
+
result.push({ op: "append", pos: tag ?? end, lines });
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case "prepend": {
|
|
69
|
+
result.push({ op: "prepend", pos: end ?? tag, lines });
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
const HASHLINE_EDIT_DESCRIPTION = `Edit a file by referencing LINE#ID tags from read output. Each tag uniquely identifies a line via content hash, so edits remain stable even when lines shift.
|
|
77
|
+
|
|
78
|
+
Read the file first to get fresh tags. Submit one edit call per file with all operations batched.
|
|
79
|
+
|
|
80
|
+
Operations:
|
|
81
|
+
- replace: Replace line(s) at pos (and optionally through end) with lines content
|
|
82
|
+
- append: Insert lines after pos (omit pos for end of file)
|
|
83
|
+
- prepend: Insert lines before pos (omit pos for beginning of file)
|
|
84
|
+
|
|
85
|
+
Set lines to null or [] to delete lines. Set delete:true to delete the file.`;
|
|
86
|
+
export function createHashlineEditTool(cwd, options) {
|
|
87
|
+
const ops = options?.operations ?? defaultHashlineEditOperations;
|
|
88
|
+
return {
|
|
89
|
+
name: "hashline_edit",
|
|
90
|
+
label: "hashline_edit",
|
|
91
|
+
description: HASHLINE_EDIT_DESCRIPTION,
|
|
92
|
+
parameters: hashlineEditSchema,
|
|
93
|
+
execute: async (_toolCallId, params, signal) => {
|
|
94
|
+
const { path, edits, delete: deleteFile, move } = params;
|
|
95
|
+
const absolutePath = resolveToCwd(path, cwd);
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
if (signal?.aborted) {
|
|
98
|
+
reject(new Error("Operation aborted"));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
let aborted = false;
|
|
102
|
+
const onAbort = () => {
|
|
103
|
+
aborted = true;
|
|
104
|
+
reject(new Error("Operation aborted"));
|
|
105
|
+
};
|
|
106
|
+
if (signal) {
|
|
107
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
108
|
+
}
|
|
109
|
+
(async () => {
|
|
110
|
+
try {
|
|
111
|
+
// Handle delete
|
|
112
|
+
if (deleteFile) {
|
|
113
|
+
let fileExists = true;
|
|
114
|
+
try {
|
|
115
|
+
await ops.access(absolutePath);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
fileExists = false;
|
|
119
|
+
}
|
|
120
|
+
if (fileExists) {
|
|
121
|
+
await ops.unlink(absolutePath);
|
|
122
|
+
}
|
|
123
|
+
if (signal)
|
|
124
|
+
signal.removeEventListener("abort", onAbort);
|
|
125
|
+
resolve({
|
|
126
|
+
content: [{ type: "text", text: fileExists ? `Deleted ${path}` : `File not found, nothing to delete: ${path}` }],
|
|
127
|
+
details: { diff: "" },
|
|
128
|
+
});
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Handle file creation (no existing file, anchorless appends/prepends)
|
|
132
|
+
let fileExists = true;
|
|
133
|
+
try {
|
|
134
|
+
await ops.access(absolutePath);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
fileExists = false;
|
|
138
|
+
}
|
|
139
|
+
if (!fileExists) {
|
|
140
|
+
const lines = [];
|
|
141
|
+
for (const edit of edits) {
|
|
142
|
+
if ((edit.op === "append" || edit.op === "prepend") && !edit.pos && !edit.end) {
|
|
143
|
+
if (edit.op === "prepend") {
|
|
144
|
+
lines.unshift(...hashlineParseText(edit.lines));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
lines.push(...hashlineParseText(edit.lines));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
throw new Error(`File not found: ${path}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
await ops.writeFile(absolutePath, lines.join("\n"));
|
|
155
|
+
if (signal)
|
|
156
|
+
signal.removeEventListener("abort", onAbort);
|
|
157
|
+
resolve({
|
|
158
|
+
content: [{ type: "text", text: `Created ${path}` }],
|
|
159
|
+
details: { diff: "" },
|
|
160
|
+
});
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (aborted)
|
|
164
|
+
return;
|
|
165
|
+
// Read file
|
|
166
|
+
const rawContent = (await ops.readFile(absolutePath)).toString("utf-8");
|
|
167
|
+
const { bom, text } = stripBom(rawContent);
|
|
168
|
+
const originalEnding = detectLineEnding(text);
|
|
169
|
+
const originalNormalized = normalizeToLF(text);
|
|
170
|
+
if (aborted)
|
|
171
|
+
return;
|
|
172
|
+
// Resolve and apply edits
|
|
173
|
+
const anchorEdits = resolveEditAnchors(edits);
|
|
174
|
+
const result = applyHashlineEdits(originalNormalized, anchorEdits);
|
|
175
|
+
if (originalNormalized === result.lines && !move) {
|
|
176
|
+
let diagnostic = `No changes made to ${path}. The edits produced identical content.`;
|
|
177
|
+
if (result.noopEdits && result.noopEdits.length > 0) {
|
|
178
|
+
const details = result.noopEdits
|
|
179
|
+
.map(e => `Edit ${e.editIndex}: replacement for ${e.loc} is identical to current content:\n ${e.loc}| ${e.current}`)
|
|
180
|
+
.join("\n");
|
|
181
|
+
diagnostic += `\n${details}`;
|
|
182
|
+
diagnostic +=
|
|
183
|
+
"\nYour content must differ from what the file already contains. Re-read the file to see the current state.";
|
|
184
|
+
}
|
|
185
|
+
throw new Error(diagnostic);
|
|
186
|
+
}
|
|
187
|
+
if (aborted)
|
|
188
|
+
return;
|
|
189
|
+
// Write result
|
|
190
|
+
const finalContent = bom + restoreLineEndings(result.lines, originalEnding);
|
|
191
|
+
const writePath = move ? resolveToCwd(move, cwd) : absolutePath;
|
|
192
|
+
// Prevent silent overwrite when moving to an existing file
|
|
193
|
+
if (move && writePath !== absolutePath) {
|
|
194
|
+
try {
|
|
195
|
+
await ops.access(writePath);
|
|
196
|
+
// If access succeeds, the file exists — refuse the move
|
|
197
|
+
throw new Error(`Destination file already exists: ${writePath}. Use a different path or delete the existing file first.`);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
// Re-throw our own error; swallow only "file not found"
|
|
201
|
+
if (err.message?.startsWith("Destination file already exists:"))
|
|
202
|
+
throw err;
|
|
203
|
+
// File doesn't exist — safe to proceed
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
await ops.writeFile(writePath, finalContent);
|
|
207
|
+
// If moved, delete original
|
|
208
|
+
if (move && writePath !== absolutePath) {
|
|
209
|
+
await ops.unlink(absolutePath);
|
|
210
|
+
}
|
|
211
|
+
if (aborted)
|
|
212
|
+
return;
|
|
213
|
+
if (signal)
|
|
214
|
+
signal.removeEventListener("abort", onAbort);
|
|
215
|
+
const diffResult = generateDiffString(originalNormalized, result.lines);
|
|
216
|
+
const resultText = move ? `Moved ${path} to ${move}` : `Updated ${path}`;
|
|
217
|
+
const warningsBlock = result.warnings?.length
|
|
218
|
+
? `\nWarnings:\n${result.warnings.join("\n")}`
|
|
219
|
+
: "";
|
|
220
|
+
resolve({
|
|
221
|
+
content: [
|
|
222
|
+
{
|
|
223
|
+
type: "text",
|
|
224
|
+
text: `${resultText}${warningsBlock}`,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
details: {
|
|
228
|
+
diff: diffResult.diff,
|
|
229
|
+
firstChangedLine: result.firstChangedLine ?? diffResult.firstChangedLine,
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (signal)
|
|
235
|
+
signal.removeEventListener("abort", onAbort);
|
|
236
|
+
if (!aborted) {
|
|
237
|
+
reject(error);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
})();
|
|
241
|
+
});
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/** Default hashline edit tool using process.cwd() */
|
|
246
|
+
export const hashlineEditTool = createHashlineEditTool(process.cwd());
|
|
247
|
+
//# sourceMappingURL=hashline-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashline-edit.js","sourceRoot":"","sources":["../../../src/core/tools/hashline-edit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hashline edit tool — applies file edits using line-hash anchors.\n *\n * The model references lines by `LINE#ID` tags from read output.\n * Each tag uniquely identifies a line, so edits remain stable even when lines shift.\n */\nimport type { AgentTool } from \"@gsd/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport { constants } from \"fs\";\nimport { access as fsAccess, readFile as fsReadFile, unlink as fsUnlink, writeFile as fsWriteFile } from \"fs/promises\";\nimport {\n\tdetectLineEnding,\n\tgenerateDiffString,\n\tnormalizeToLF,\n\trestoreLineEndings,\n\tstripBom,\n} from \"./edit-diff.js\";\nimport {\n\ttype Anchor,\n\tapplyHashlineEdits,\n\tcomputeLineHash,\n\ttype HashlineEdit,\n\thashlineParseText,\n\tparseTag,\n} from \"./hashline.js\";\nimport { resolveToCwd } from \"./path-utils.js\";\n\n// ═══════════════════════════════════════════════════════════════════════════\n// Schema\n// ═══════════════════════════════════════════════════════════════════════════\n\nconst hashlineEditItemSchema = Type.Object(\n\t{\n\t\top: Type.Union([Type.Literal(\"replace\"), Type.Literal(\"append\"), Type.Literal(\"prepend\")]),\n\t\tpos: Type.Optional(Type.String({ description: \"Anchor tag (e.g. \\\"5#QQ\\\")\" })),\n\t\tend: Type.Optional(Type.String({ description: \"End anchor for range replace\" })),\n\t\tlines: Type.Union([\n\t\t\tType.Array(Type.String(), { description: \"Replacement content lines\" }),\n\t\t\tType.String(),\n\t\t\tType.Null(),\n\t\t]),\n\t},\n\t{ additionalProperties: false },\n);\n\nconst hashlineEditSchema = Type.Object(\n\t{\n\t\tpath: Type.String({ description: \"Path to the file to edit\" }),\n\t\tedits: Type.Array(hashlineEditItemSchema, { description: \"Edits to apply (referenced by LINE#ID tags from read output)\" }),\n\t\tdelete: Type.Optional(Type.Boolean({ description: \"If true, delete the file\" })),\n\t\tmove: Type.Optional(Type.String({ description: \"If set, move/rename the file to this path\" })),\n\t},\n\t{ additionalProperties: false },\n);\n\nexport type HashlineEditInput = Static<typeof hashlineEditSchema>;\nexport type HashlineEditItem = Static<typeof hashlineEditItemSchema>;\n\nexport interface HashlineEditToolDetails {\n\t/** Unified diff of the changes made */\n\tdiff: string;\n\t/** Line number of the first change in the new file */\n\tfirstChangedLine?: number;\n}\n\n/**\n * Pluggable operations for the hashline edit tool.\n */\nexport interface HashlineEditOperations {\n\treadFile: (absolutePath: string) => Promise<Buffer>;\n\twriteFile: (absolutePath: string, content: string) => Promise<void>;\n\taccess: (absolutePath: string) => Promise<void>;\n\tunlink: (absolutePath: string) => Promise<void>;\n}\n\nconst defaultHashlineEditOperations: HashlineEditOperations = {\n\treadFile: (path) => fsReadFile(path),\n\twriteFile: (path, content) => fsWriteFile(path, content, \"utf-8\"),\n\taccess: (path) => fsAccess(path, constants.R_OK | constants.W_OK),\n\tunlink: (path) => fsUnlink(path),\n};\n\nexport interface HashlineEditToolOptions {\n\toperations?: HashlineEditOperations;\n}\n\n/** Parse a tag, returning undefined instead of throwing on garbage. */\nfunction tryParseTag(raw: string): Anchor | undefined {\n\ttry {\n\t\treturn parseTag(raw);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Map flat tool-schema edits into typed HashlineEdit objects.\n */\nfunction resolveEditAnchors(edits: HashlineEditItem[]): HashlineEdit[] {\n\tconst result: HashlineEdit[] = [];\n\tfor (const edit of edits) {\n\t\tconst lines = hashlineParseText(edit.lines);\n\t\tconst tag = edit.pos ? tryParseTag(edit.pos) : undefined;\n\t\tconst end = edit.end ? tryParseTag(edit.end) : undefined;\n\n\t\tconst op = edit.op === \"append\" || edit.op === \"prepend\" ? edit.op : \"replace\";\n\t\tswitch (op) {\n\t\t\tcase \"replace\": {\n\t\t\t\tif (tag && end) {\n\t\t\t\t\tresult.push({ op: \"replace\", pos: tag, end, lines });\n\t\t\t\t} else if (tag || end) {\n\t\t\t\t\tresult.push({ op: \"replace\", pos: tag || end!, lines });\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Replace requires at least one anchor (pos or end).\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"append\": {\n\t\t\t\tresult.push({ op: \"append\", pos: tag ?? end, lines });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"prepend\": {\n\t\t\t\tresult.push({ op: \"prepend\", pos: end ?? tag, lines });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nconst HASHLINE_EDIT_DESCRIPTION = `Edit a file by referencing LINE#ID tags from read output. Each tag uniquely identifies a line via content hash, so edits remain stable even when lines shift.\n\nRead the file first to get fresh tags. Submit one edit call per file with all operations batched.\n\nOperations:\n- replace: Replace line(s) at pos (and optionally through end) with lines content\n- append: Insert lines after pos (omit pos for end of file)\n- prepend: Insert lines before pos (omit pos for beginning of file)\n\nSet lines to null or [] to delete lines. Set delete:true to delete the file.`;\n\nexport function createHashlineEditTool(cwd: string, options?: HashlineEditToolOptions): AgentTool<typeof hashlineEditSchema> {\n\tconst ops = options?.operations ?? defaultHashlineEditOperations;\n\n\treturn {\n\t\tname: \"hashline_edit\",\n\t\tlabel: \"hashline_edit\",\n\t\tdescription: HASHLINE_EDIT_DESCRIPTION,\n\t\tparameters: hashlineEditSchema,\n\t\texecute: async (\n\t\t\t_toolCallId: string,\n\t\t\tparams: HashlineEditInput,\n\t\t\tsignal?: AbortSignal,\n\t\t) => {\n\t\t\tconst { path, edits, delete: deleteFile, move } = params;\n\t\t\tconst absolutePath = resolveToCwd(path, cwd);\n\n\t\t\treturn new Promise<{\n\t\t\t\tcontent: Array<{ type: \"text\"; text: string }>;\n\t\t\t\tdetails: HashlineEditToolDetails | undefined;\n\t\t\t}>((resolve, reject) => {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet aborted = false;\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\taborted = true;\n\t\t\t\t\treject(new Error(\"Operation aborted\"));\n\t\t\t\t};\n\t\t\t\tif (signal) {\n\t\t\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t}\n\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Handle delete\n\t\t\t\t\t\tif (deleteFile) {\n\t\t\t\t\t\t\tlet fileExists = true;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait ops.access(absolutePath);\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tfileExists = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fileExists) {\n\t\t\t\t\t\t\t\tawait ops.unlink(absolutePath);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: fileExists ? `Deleted ${path}` : `File not found, nothing to delete: ${path}` }],\n\t\t\t\t\t\t\t\tdetails: { diff: \"\" },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Handle file creation (no existing file, anchorless appends/prepends)\n\t\t\t\t\t\tlet fileExists = true;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait ops.access(absolutePath);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tfileExists = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!fileExists) {\n\t\t\t\t\t\t\tconst lines: string[] = [];\n\t\t\t\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\t\t\t\tif ((edit.op === \"append\" || edit.op === \"prepend\") && !edit.pos && !edit.end) {\n\t\t\t\t\t\t\t\t\tif (edit.op === \"prepend\") {\n\t\t\t\t\t\t\t\t\t\tlines.unshift(...hashlineParseText(edit.lines));\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tlines.push(...hashlineParseText(edit.lines));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new Error(`File not found: ${path}`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait ops.writeFile(absolutePath, lines.join(\"\\n\"));\n\t\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Created ${path}` }],\n\t\t\t\t\t\t\t\tdetails: { diff: \"\" },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Read file\n\t\t\t\t\t\tconst rawContent = (await ops.readFile(absolutePath)).toString(\"utf-8\");\n\t\t\t\t\t\tconst { bom, text } = stripBom(rawContent);\n\t\t\t\t\t\tconst originalEnding = detectLineEnding(text);\n\t\t\t\t\t\tconst originalNormalized = normalizeToLF(text);\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Resolve and apply edits\n\t\t\t\t\t\tconst anchorEdits = resolveEditAnchors(edits);\n\t\t\t\t\t\tconst result = applyHashlineEdits(originalNormalized, anchorEdits);\n\n\t\t\t\t\t\tif (originalNormalized === result.lines && !move) {\n\t\t\t\t\t\t\tlet diagnostic = `No changes made to ${path}. The edits produced identical content.`;\n\t\t\t\t\t\t\tif (result.noopEdits && result.noopEdits.length > 0) {\n\t\t\t\t\t\t\t\tconst details = result.noopEdits\n\t\t\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t\t\te =>\n\t\t\t\t\t\t\t\t\t\t\t`Edit ${e.editIndex}: replacement for ${e.loc} is identical to current content:\\n ${e.loc}| ${e.current}`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\t\t\t\tdiagnostic += `\\n${details}`;\n\t\t\t\t\t\t\t\tdiagnostic +=\n\t\t\t\t\t\t\t\t\t\"\\nYour content must differ from what the file already contains. Re-read the file to see the current state.\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow new Error(diagnostic);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\t// Write result\n\t\t\t\t\t\tconst finalContent = bom + restoreLineEndings(result.lines, originalEnding);\n\t\t\t\t\t\tconst writePath = move ? resolveToCwd(move, cwd) : absolutePath;\n\n\t\t\t\t\t\t// Prevent silent overwrite when moving to an existing file\n\t\t\t\t\t\tif (move && writePath !== absolutePath) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait ops.access(writePath);\n\t\t\t\t\t\t\t\t// If access succeeds, the file exists — refuse the move\n\t\t\t\t\t\t\t\tthrow new Error(`Destination file already exists: ${writePath}. Use a different path or delete the existing file first.`);\n\t\t\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\t\t\t// Re-throw our own error; swallow only \"file not found\"\n\t\t\t\t\t\t\t\tif (err.message?.startsWith(\"Destination file already exists:\")) throw err;\n\t\t\t\t\t\t\t\t// File doesn't exist — safe to proceed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait ops.writeFile(writePath, finalContent);\n\n\t\t\t\t\t\t// If moved, delete original\n\t\t\t\t\t\tif (move && writePath !== absolutePath) {\n\t\t\t\t\t\t\tawait ops.unlink(absolutePath);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aborted) return;\n\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\n\t\t\t\t\t\tconst diffResult = generateDiffString(originalNormalized, result.lines);\n\t\t\t\t\t\tconst resultText = move ? `Moved ${path} to ${move}` : `Updated ${path}`;\n\t\t\t\t\t\tconst warningsBlock = result.warnings?.length\n\t\t\t\t\t\t\t? `\\nWarnings:\\n${result.warnings.join(\"\\n\")}`\n\t\t\t\t\t\t\t: \"\";\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: `${resultText}${warningsBlock}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\tdiff: diffResult.diff,\n\t\t\t\t\t\t\t\tfirstChangedLine: result.firstChangedLine ?? diffResult.firstChangedLine,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error: any) {\n\t\t\t\t\t\tif (signal) signal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\tif (!aborted) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t});\n\t\t},\n\t};\n}\n\n/** Default hashline edit tool using process.cwd() */\nexport const hashlineEditTool = createHashlineEditTool(process.cwd());\n"]}
|