@code-yeongyu/senpi 2026.9.23-3 → 2026.9.23-5
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/CHANGELOG.md +38 -0
- package/dist/bundle/chunks/{app-server-command-U5Y46LHO.js → app-server-command-BGT65PGC.js} +1 -1
- package/dist/bundle/chunks/{chunk-UCTYTLP3.js → chunk-3RN6BFG2.js} +2 -2
- package/dist/bundle/chunks/{chunk-XTXBPXZZ.js → chunk-EN6KDFY2.js} +1 -1
- package/dist/bundle/chunks/{chunk-2NFHX2FJ.js → chunk-J3QXPP4T.js} +1 -1
- package/dist/bundle/chunks/chunk-LTIMMSDM.js +8 -0
- package/dist/bundle/chunks/{chunk-67Z5WNA4.js → chunk-PSMTQDII.js} +1 -1
- package/dist/bundle/chunks/{chunk-TH4PERSI.js → chunk-RRSND33J.js} +50 -64
- package/dist/bundle/chunks/{chunk-Y4AJLTFT.js → chunk-WUYBEF7C.js} +1 -1
- package/dist/bundle/chunks/{chunk-IDSOMHWS.js → chunk-WXIRFRXY.js} +1 -1
- package/dist/bundle/chunks/{chunk-R6F525XB.js → chunk-XDSQYM4F.js} +1 -1
- package/dist/bundle/chunks/{chunk-TUVSARCZ.js → chunk-ZEFQYQOU.js} +1 -1
- package/dist/bundle/chunks/{cli-main-65WMMIRT.js → cli-main-W55CWPEI.js} +1 -1
- package/dist/bundle/chunks/cursor-agent.js +1 -1
- package/dist/bundle/chunks/{help-fast-path-VXAZDQ3Z.js → help-fast-path-QXVCHTP3.js} +1 -1
- package/dist/bundle/chunks/{host-command-5PEFD4N6.js → host-command-3PUZYQOK.js} +1 -1
- package/dist/bundle/chunks/{host-lifecycle-BXW5C4JT.js → host-lifecycle-OHPSU5VU.js} +1 -1
- package/dist/bundle/chunks/{interactive-host-runtime-DUNYT24Q.js → interactive-host-runtime-57LEAJPU.js} +1 -1
- package/dist/bundle/chunks/{interactive-mode-SCG5PQZ6.js → interactive-mode-EDJZ4CSY.js} +1 -1
- package/dist/bundle/chunks/{multi-session-host-QC6BZZNH.js → multi-session-host-GFSDQQUJ.js} +1 -1
- package/dist/bundle/chunks/{package-manager-cli-23GULCVL.js → package-manager-cli-J7244EJE.js} +1 -1
- package/dist/bundle/chunks/{pi-messages-B6RSUQKL.js → pi-messages-CAS467IY.js} +1 -1
- package/dist/bundle/chunks/{rotation-stream-ZIYWOB2N.js → rotation-stream-CZT4TRPD.js} +1 -1
- package/dist/bundle/chunks/{rpc-mode-ZQ4E6FFA.js → rpc-mode-75CRTY24.js} +1 -1
- package/dist/bundle/chunks/{session-picker-CO2ZK3EC.js → session-picker-ZIBANFBQ.js} +1 -1
- package/dist/bundle/chunks/session-worker.js +56 -70
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session.d.ts +9 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +14 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.js +43 -26
- package/dist/core/extensions/builtin/cursor-cli-oauth/models.js.map +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/index.js +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/index.js.map +1 -1
- package/dist/core/extensions/builtin/rule-activation/types.d.ts +2 -0
- package/dist/core/extensions/builtin/rule-activation/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rule-activation/types.js +7 -1
- package/dist/core/extensions/builtin/rule-activation/types.js.map +1 -1
- package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/rules/index.js +2 -1
- package/dist/core/extensions/builtin/rules/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/output-format.d.ts +15 -0
- package/dist/core/extensions/builtin/terminal/output-format.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/output-format.js +43 -2
- package/dist/core/extensions/builtin/terminal/output-format.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash-output.js +4 -3
- package/dist/core/extensions/builtin/terminal/tools/bash-output.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.js +3 -3
- package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts +7 -4
- package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/context.js +5 -0
- package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/render.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/render.js +5 -2
- package/dist/core/extensions/builtin/terminal/tools/render.js.map +1 -1
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +3 -1
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts.map +1 -1
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.js +9 -3
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +87 -14
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/tool-call-display-name.d.ts +15 -0
- package/dist/core/tool-call-display-name.d.ts.map +1 -0
- package/dist/core/tool-call-display-name.js +14 -0
- package/dist/core/tool-call-display-name.js.map +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +12 -7
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +9 -6
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep/format.d.ts +3 -2
- package/dist/core/tools/grep/format.d.ts.map +1 -1
- package/dist/core/tools/grep/format.js +5 -3
- package/dist/core/tools/grep/format.js.map +1 -1
- package/dist/core/tools/grep/index.js +2 -2
- package/dist/core/tools/grep/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -3
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/model-only-text.d.ts +4 -0
- package/dist/core/tools/model-only-text.d.ts.map +1 -0
- package/dist/core/tools/model-only-text.js +12 -0
- package/dist/core/tools/model-only-text.js.map +1 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +15 -5
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +2 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +1 -25
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/grep.d.ts.map +1 -1
- package/dist/core/tools/renderers/grep.js +0 -25
- package/dist/core/tools/renderers/grep.js.map +1 -1
- package/dist/core/tools/renderers/read.d.ts +8 -0
- package/dist/core/tools/renderers/read.d.ts.map +1 -1
- package/dist/core/tools/renderers/read.js +2 -14
- package/dist/core/tools/renderers/read.js.map +1 -1
- package/dist/modes/interactive/components/exploration-call.d.ts +4 -1
- package/dist/modes/interactive/components/exploration-call.d.ts.map +1 -1
- package/dist/modes/interactive/components/exploration-call.js +17 -2
- package/dist/modes/interactive/components/exploration-call.js.map +1 -1
- package/dist/modes/interactive/components/exploration-group.d.ts +3 -1
- package/dist/modes/interactive/components/exploration-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/exploration-group.js +7 -1
- package/dist/modes/interactive/components/exploration-group.js.map +1 -1
- package/dist/modes/interactive/components/exploration-rules.d.ts +5 -0
- package/dist/modes/interactive/components/exploration-rules.d.ts.map +1 -0
- package/dist/modes/interactive/components/exploration-rules.js +15 -0
- package/dist/modes/interactive/components/exploration-rules.js.map +1 -0
- package/dist/modes/interactive/components/exploration-transcript-container.d.ts.map +1 -1
- package/dist/modes/interactive/components/exploration-transcript-container.js +10 -1
- package/dist/modes/interactive/components/exploration-transcript-container.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +4 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +3 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/json-event.d.ts +1 -0
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +1 -0
- package/dist/modes/json-event.js.map +1 -1
- package/docs/json.md +4 -1
- package/docs/rpc.md +7 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +26 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +4 -19
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +8 -23
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.d.ts +8 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.js +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/tool-name-alias.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +17 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/catalog-grouping.d.ts +18 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/catalog-grouping.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/catalog-grouping.js +103 -3
- package/node_modules/@earendil-works/pi-ai/dist/cursor/catalog-grouping.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js +15 -3
- package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.d.ts +7 -2
- package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.js +92 -20
- package/node_modules/@earendil-works/pi-ai/dist/cursor/store-migration.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts +9 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/model.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/cursor.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
- package/dist/bundle/chunks/chunk-XPDV6SIX.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../../src/core/tools/renderers/grep.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,2DAA2D,CAAC;AAIpF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAUjC,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,KAAwB,CAAC;IACzC,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CAAC,IAAa,EAAE,KAAY,EAAE,GAAW;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;YAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACrC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9F,OAAO,MAAM,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,IAA8B,EAAE,KAAY,EAAE,GAAW;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IACtD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAI,EAAE,GAAG,CACxE,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI;QAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACrD,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI;QAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjG,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ;QAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAY,EAAE,GAAW;IAChE,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB,EAAE,KAAY;IAC3D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;IACxE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAwB,EAAE,KAAY;IAC/D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,iBAAiB;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,gBAAgB,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,gBAAgB;QAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,mBAAmB;QAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,OAAO,CAAC,cAAc;QAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,UAAU,CAAC,OAAwB,EAAE,KAAY;IACzD,OAAO,KAAK,CAAC,EAAE,CACd,OAAO,EACP,kBAAkB,OAAO,CAAC,UAAU,IAAI,KAAK,UAAU,OAAO,CAAC,SAAS,aAAa,OAAO,CAAC,QAAQ,IAAI,MAAM,GAAG,CAClH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAwB;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,yBAAyB,OAAO,CAAC,IAAI,GAAG,CAAC;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,sCAAsC,CAAC;IAChF,OAAO,kBAAkB,CAAC;AAC3B,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAwB;IAKlD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;SACjE,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAA2E,EAAE,CAAC;IAC1F,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;YAChG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAY;IAClE,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,SAAS,SAAS,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AACvI,CAAC;AAED,SAAS,mBAAmB,CAC3B,OAAwB,EACxB,OAAgC,EAChC,KAAY,EACZ,GAAW;IAEX,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACP,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxF,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBACrD,KAAK,MAAM,GAAG,IAAI,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;gBAClG,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACrC,MAAM;YACP,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,YAAY,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAC1B,MAEC,EACD,OAAgC,EAChC,KAAY,EACZ,UAAmB;IAEnB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACzE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC1C,IAAI,IAAI,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtF,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CACxB,MAGC,EACD,OAAgC,EAChC,KAAY,EACZ,UAAmB,EACnB,GAAW;IAEX,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACjG,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAkE;IAC3F,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO;QAC9B,MAAM,IAAI,GAAI,OAAO,CAAC,aAAkC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;QAC3C,MAAM,IAAI,GAAI,OAAO,CAAC,aAAkC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["/**\n * Presentation for the grep tool.\n *\n * Renderers live apart from the implementation so a process that only displays tool output does not\n * load the execution path or its typebox parameter schema. `grep.ts` spreads these into its\n * definition, so the tool's public shape is unchanged.\n */\n\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { keyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../../extensions/types.ts\";\nimport type { GrepEngineMatch } from \"../grep/engine.ts\";\nimport { displayPath } from \"../grep/format.ts\";\nimport type { GrepToolDetails } from \"../grep.ts\";\nimport { getTextOutput, invalidArgText, linkPath, renderToolPath, str } from \"../render-utils.ts\";\nimport { DEFAULT_MAX_BYTES, formatSize } from \"../truncate.ts\";\n\nconst COLLAPSED_LINE_BUDGET = 15;\n\ntype GrepCallArgs = {\n\tpattern?: unknown;\n\tpath?: unknown;\n\tglob?: unknown;\n\tmode?: unknown;\n\tskip?: unknown;\n};\n\nfunction isV1Details(value: unknown): value is GrepToolDetails {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst details = value as GrepToolDetails;\n\treturn details.version === 1 && Array.isArray(details.matches);\n}\n\nfunction formatCallPaths(path: unknown, theme: Theme, cwd: string): string {\n\tif (Array.isArray(path)) {\n\t\tif (path.length === 0 || path.some((entry) => typeof entry !== \"string\")) return invalidArgText(theme);\n\t\treturn path.map((entry) => renderToolPath(entry, theme, cwd, { emptyFallback: \".\" })).join(\", \");\n\t}\n\treturn renderToolPath(str(path), theme, cwd, { emptyFallback: \".\" });\n}\n\nfunction formatCallGlobs(glob: unknown): string | undefined {\n\tif (glob === undefined) return undefined;\n\tconst values = Array.isArray(glob) ? glob : [glob];\n\tconst joined = values.filter((entry): entry is string => typeof entry === \"string\").join(\",\");\n\treturn joined || undefined;\n}\n\nfunction formatGrepCall(args: GrepCallArgs | undefined, theme: Theme, cwd: string): string {\n\tconst pattern = str(args?.pattern);\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"grep\"))} ${\n\t\tpattern === null ? invalidArg : theme.fg(\"accent\", `/${pattern || \"\"}/`)\n\t}${theme.fg(\"toolOutput\", \" in \")}${formatCallPaths(args?.path, theme, cwd)}`;\n\tconst glob = formatCallGlobs(args?.glob);\n\tif (glob) text += theme.fg(\"toolOutput\", ` ${glob}`);\n\tif (typeof args?.mode === \"string\" && args.mode) text += theme.fg(\"toolOutput\", ` ${args.mode}`);\n\tif (typeof args?.skip === \"number\") text += theme.fg(\"toolOutput\", ` skip ${args.skip}`);\n\treturn text;\n}\n\nfunction formatFileHeader(path: string, theme: Theme, cwd: string): string {\n\treturn linkPath(theme.fg(\"accent\", displayPath(path)), path, cwd);\n}\n\nfunction formatMatchRow(match: GrepEngineMatch, theme: Theme): string {\n\tconst row = `${match.line}${match.isContext ? \"-\" : \":\"} ${match.text}`;\n\treturn match.isContext ? theme.fg(\"dim\", row) : theme.fg(\"accent\", row);\n}\n\nfunction truncationHeader(details: GrepToolDetails, theme: Theme): string | undefined {\n\tconst warnings: string[] = [];\n\tif (details.totalLimitReached) warnings.push(`${details.matchCount} matches limit`);\n\tif (details.fileLimitReached) warnings.push(\"file page limit\");\n\tif (details.perFileLimitReached) warnings.push(\"per-file limit\");\n\tif (details.truncation?.truncated) {\n\t\twarnings.push(`${formatSize(details.truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t}\n\tif (details.linesTruncated) warnings.push(\"some lines truncated\");\n\tif (warnings.length === 0) return undefined;\n\treturn theme.fg(\"warning\", `truncated: ${warnings.join(\", \")}`);\n}\n\nfunction footerLine(details: GrepToolDetails, theme: Theme): string {\n\treturn theme.fg(\n\t\t\"muted\",\n\t\t`[grep: matches=${details.matchCount ?? \"n/a\"} files=${details.fileCount} nextSkip=${details.nextSkip ?? \"none\"}]`,\n\t);\n}\n\nfunction noMatchText(details: GrepToolDetails): string {\n\tif (details.status === \"pageEnd\") return `No more results (skip=${details.skip})`;\n\tif (details.status === \"partial\") return \"No matches found in searched portion\";\n\treturn \"No matches found\";\n}\n\nfunction groupsFromDetails(details: GrepToolDetails): Array<{\n\tpath: string;\n\tcount: number | null;\n\trows: GrepEngineMatch[];\n}> {\n\tif (details.fileMatches.length > 0) {\n\t\treturn details.fileMatches.map((file) => ({\n\t\t\tpath: file.path,\n\t\t\tcount: file.count,\n\t\t\trows: details.matches.filter((match) => match.path === file.path),\n\t\t}));\n\t}\n\tconst groups: Array<{ path: string; count: number | null; rows: GrepEngineMatch[] }> = [];\n\tfor (const match of details.matches) {\n\t\tconst last = groups[groups.length - 1];\n\t\tif (!last || last.path !== match.path) groups.push({ path: match.path, count: null, rows: [match] });\n\t\telse last.rows.push(match);\n\t}\n\treturn groups;\n}\n\nfunction overflowHint(remaining: number, unit: string, theme: Theme): string {\n\treturn `${theme.fg(\"muted\", `... (${remaining} more ${unit},`)} ${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n}\n\nfunction formatGroupedResult(\n\tdetails: GrepToolDetails,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcwd: string,\n): string {\n\tconst lines: string[] = [];\n\tconst truncated = truncationHeader(details, theme);\n\tif (truncated) lines.push(truncated);\n\n\tconst groups = groupsFromDetails(details);\n\tif (groups.length === 0) {\n\t\tlines.push(theme.fg(\"toolOutput\", noMatchText(details)));\n\t} else {\n\t\tlet hiddenGroups = 0;\n\t\tfor (let index = 0; index < groups.length; index++) {\n\t\t\tconst group = groups[index];\n\t\t\tconst rows = options.expanded ? group.rows : group.rows.filter((row) => !row.isContext);\n\t\t\tconst block: string[] = [];\n\t\t\tif (lines.length > 0) block.push(\"\");\n\t\t\tif (rows.length === 0 && group.count !== null) {\n\t\t\t\tblock.push(`${formatFileHeader(group.path, theme, cwd)}${theme.fg(\"toolOutput\", `: ${group.count}`)}`);\n\t\t\t} else {\n\t\t\t\tblock.push(formatFileHeader(group.path, theme, cwd));\n\t\t\t\tfor (const row of rows) block.push(formatMatchRow(row, theme));\n\t\t\t}\n\t\t\tif (!options.expanded && lines.length > 0 && lines.length + block.length > COLLAPSED_LINE_BUDGET) {\n\t\t\t\thiddenGroups = groups.length - index;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlines.push(...block);\n\t\t}\n\t\tif (hiddenGroups > 0) lines.push(overflowHint(hiddenGroups, hiddenGroups === 1 ? \"file\" : \"files\", theme));\n\t}\n\n\tlines.push(footerLine(details, theme));\n\treturn `\\n${lines.join(\"\\n\")}`;\n}\n\nfunction formatTextFallback(\n\tresult: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t},\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tif (!output) return \"\";\n\tconst lines = output.split(\"\\n\");\n\tconst maxLines = options.expanded ? lines.length : COLLAPSED_LINE_BUDGET;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n${displayLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `\\n${overflowHint(remaining, remaining === 1 ? \"line\" : \"lines\", theme)}`;\n\t}\n\treturn text;\n}\n\nfunction formatGrepResult(\n\tresult: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\tdetails?: GrepToolDetails;\n\t},\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n\tcwd: string,\n): string {\n\tif (isV1Details(result.details)) return formatGroupedResult(result.details, options, theme, cwd);\n\treturn formatTextFallback(result, options, theme, showImages);\n}\n\nexport const grepRenderers: Pick<ToolDefinition<any, any>, \"renderCall\" | \"renderResult\"> = {\n\trenderCall(args, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(formatGrepCall(args as GrepCallArgs, theme, context.cwd));\n\t\treturn text;\n\t},\n\trenderResult(result, options, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(formatGrepResult(result as any, options, theme, context.showImages, context.cwd));\n\t\treturn text;\n\t},\n};\n"]}
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../../src/core/tools/renderers/grep.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Presentation for the grep tool.\n *\n * Renderers live apart from the implementation so a process that only displays tool output does not\n * load the execution path or its typebox parameter schema. `grep.ts` spreads these into its\n * definition, so the tool's public shape is unchanged.\n */\n\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { keyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../../extensions/types.ts\";\nimport type { GrepEngineMatch } from \"../grep/engine.ts\";\nimport { displayPath } from \"../grep/format.ts\";\nimport type { GrepToolDetails } from \"../grep.ts\";\nimport { getTextOutput, invalidArgText, linkPath, renderToolPath, str } from \"../render-utils.ts\";\n\nconst COLLAPSED_LINE_BUDGET = 15;\n\ntype GrepCallArgs = {\n\tpattern?: unknown;\n\tpath?: unknown;\n\tglob?: unknown;\n\tmode?: unknown;\n\tskip?: unknown;\n};\n\nfunction isV1Details(value: unknown): value is GrepToolDetails {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst details = value as GrepToolDetails;\n\treturn details.version === 1 && Array.isArray(details.matches);\n}\n\nfunction formatCallPaths(path: unknown, theme: Theme, cwd: string): string {\n\tif (Array.isArray(path)) {\n\t\tif (path.length === 0 || path.some((entry) => typeof entry !== \"string\")) return invalidArgText(theme);\n\t\treturn path.map((entry) => renderToolPath(entry, theme, cwd, { emptyFallback: \".\" })).join(\", \");\n\t}\n\treturn renderToolPath(str(path), theme, cwd, { emptyFallback: \".\" });\n}\n\nfunction formatCallGlobs(glob: unknown): string | undefined {\n\tif (glob === undefined) return undefined;\n\tconst values = Array.isArray(glob) ? glob : [glob];\n\tconst joined = values.filter((entry): entry is string => typeof entry === \"string\").join(\",\");\n\treturn joined || undefined;\n}\n\nfunction formatGrepCall(args: GrepCallArgs | undefined, theme: Theme, cwd: string): string {\n\tconst pattern = str(args?.pattern);\n\tconst invalidArg = invalidArgText(theme);\n\tlet text = `${theme.fg(\"toolTitle\", theme.bold(\"grep\"))} ${\n\t\tpattern === null ? invalidArg : theme.fg(\"accent\", `/${pattern || \"\"}/`)\n\t}${theme.fg(\"toolOutput\", \" in \")}${formatCallPaths(args?.path, theme, cwd)}`;\n\tconst glob = formatCallGlobs(args?.glob);\n\tif (glob) text += theme.fg(\"toolOutput\", ` ${glob}`);\n\tif (typeof args?.mode === \"string\" && args.mode) text += theme.fg(\"toolOutput\", ` ${args.mode}`);\n\tif (typeof args?.skip === \"number\") text += theme.fg(\"toolOutput\", ` skip ${args.skip}`);\n\treturn text;\n}\n\nfunction formatFileHeader(path: string, theme: Theme, cwd: string): string {\n\treturn linkPath(theme.fg(\"accent\", displayPath(path)), path, cwd);\n}\n\nfunction formatMatchRow(match: GrepEngineMatch, theme: Theme): string {\n\tconst row = `${match.line}${match.isContext ? \"-\" : \":\"} ${match.text}`;\n\treturn match.isContext ? theme.fg(\"dim\", row) : theme.fg(\"accent\", row);\n}\n\nfunction noMatchText(details: GrepToolDetails): string {\n\tif (details.status === \"pageEnd\") return `No more results (skip=${details.skip})`;\n\tif (details.status === \"partial\") return \"No matches found in searched portion\";\n\treturn \"No matches found\";\n}\n\nfunction groupsFromDetails(details: GrepToolDetails): Array<{\n\tpath: string;\n\tcount: number | null;\n\trows: GrepEngineMatch[];\n}> {\n\tif (details.fileMatches.length > 0) {\n\t\treturn details.fileMatches.map((file) => ({\n\t\t\tpath: file.path,\n\t\t\tcount: file.count,\n\t\t\trows: details.matches.filter((match) => match.path === file.path),\n\t\t}));\n\t}\n\tconst groups: Array<{ path: string; count: number | null; rows: GrepEngineMatch[] }> = [];\n\tfor (const match of details.matches) {\n\t\tconst last = groups[groups.length - 1];\n\t\tif (!last || last.path !== match.path) groups.push({ path: match.path, count: null, rows: [match] });\n\t\telse last.rows.push(match);\n\t}\n\treturn groups;\n}\n\nfunction overflowHint(remaining: number, unit: string, theme: Theme): string {\n\treturn `${theme.fg(\"muted\", `... (${remaining} more ${unit},`)} ${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n}\n\nfunction formatGroupedResult(\n\tdetails: GrepToolDetails,\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tcwd: string,\n): string {\n\tconst lines: string[] = [];\n\tconst groups = groupsFromDetails(details);\n\tif (groups.length === 0) {\n\t\tlines.push(theme.fg(\"toolOutput\", noMatchText(details)));\n\t} else {\n\t\tlet hiddenGroups = 0;\n\t\tfor (let index = 0; index < groups.length; index++) {\n\t\t\tconst group = groups[index];\n\t\t\tconst rows = options.expanded ? group.rows : group.rows.filter((row) => !row.isContext);\n\t\t\tconst block: string[] = [];\n\t\t\tif (lines.length > 0) block.push(\"\");\n\t\t\tif (rows.length === 0 && group.count !== null) {\n\t\t\t\tblock.push(`${formatFileHeader(group.path, theme, cwd)}${theme.fg(\"toolOutput\", `: ${group.count}`)}`);\n\t\t\t} else {\n\t\t\t\tblock.push(formatFileHeader(group.path, theme, cwd));\n\t\t\t\tfor (const row of rows) block.push(formatMatchRow(row, theme));\n\t\t\t}\n\t\t\tif (!options.expanded && lines.length > 0 && lines.length + block.length > COLLAPSED_LINE_BUDGET) {\n\t\t\t\thiddenGroups = groups.length - index;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlines.push(...block);\n\t\t}\n\t\tif (hiddenGroups > 0) lines.push(overflowHint(hiddenGroups, hiddenGroups === 1 ? \"file\" : \"files\", theme));\n\t}\n\n\treturn `\\n${lines.join(\"\\n\")}`;\n}\n\nfunction formatTextFallback(\n\tresult: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t},\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n): string {\n\tconst output = getTextOutput(result, showImages).trim();\n\tif (!output) return \"\";\n\tconst lines = output.split(\"\\n\");\n\tconst maxLines = options.expanded ? lines.length : COLLAPSED_LINE_BUDGET;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n${displayLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `\\n${overflowHint(remaining, remaining === 1 ? \"line\" : \"lines\", theme)}`;\n\t}\n\treturn text;\n}\n\nfunction formatGrepResult(\n\tresult: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\tdetails?: GrepToolDetails;\n\t},\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n\tcwd: string,\n): string {\n\tif (isV1Details(result.details)) return formatGroupedResult(result.details, options, theme, cwd);\n\treturn formatTextFallback(result, options, theme, showImages);\n}\n\nexport const grepRenderers: Pick<ToolDefinition<any, any>, \"renderCall\" | \"renderResult\"> = {\n\trenderCall(args, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(formatGrepCall(args as GrepCallArgs, theme, context.cwd));\n\t\treturn text;\n\t},\n\trenderResult(result, options, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(formatGrepResult(result as any, options, theme, context.showImages, context.cwd));\n\t\treturn text;\n\t},\n};\n"]}
|
|
@@ -15,5 +15,13 @@ import { type CompactReadClassification } from "../read-classifiers.ts";
|
|
|
15
15
|
export interface ReadRenderState {
|
|
16
16
|
classifications?: Map<string | null, CompactReadClassification | undefined>;
|
|
17
17
|
}
|
|
18
|
+
export type ReadRenderArgs = {
|
|
19
|
+
path?: string;
|
|
20
|
+
file_path?: string;
|
|
21
|
+
offset?: number;
|
|
22
|
+
limit?: number;
|
|
23
|
+
};
|
|
24
|
+
/** The compact headline a collapsed read card shows for these args, or undefined for a plain file read. */
|
|
25
|
+
export declare function getCompactReadClassification(args: ReadRenderArgs | undefined, cwd: string): CompactReadClassification | undefined;
|
|
18
26
|
export declare const readRenderers: Pick<ToolDefinition<any, ReadToolDetails | undefined, ReadRenderState>, "renderCall" | "renderResult">;
|
|
19
27
|
//# sourceMappingURL=read.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/renderers/read.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,2BAA2B,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,yBAAyB,EAAgB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/renderers/read.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,2BAA2B,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,yBAAyB,EAAgB,MAAM,wBAAwB,CAAC;AAGtF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC;CAC5E;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAuCpG,2GAA2G;AAC3G,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACT,yBAAyB,GAAG,SAAS,CAqBvC;AA+DD,eAAO,MAAM,aAAa,EAAE,IAAI,CAC/B,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,SAAS,EAAE,eAAe,CAAC,EACjE,YAAY,GAAG,cAAc,CAmC7B,CAAC"}
|
|
@@ -14,7 +14,6 @@ import { formatPathRelativeToCwdOrAbsolute } from "../../../utils/paths.js";
|
|
|
14
14
|
import { resolveToCwd } from "../path-utils.js";
|
|
15
15
|
import { classifyRead } from "../read-classifiers.js";
|
|
16
16
|
import { getTextOutput, renderToolPath, replaceTabs, str } from "../render-utils.js";
|
|
17
|
-
import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "../truncate.js";
|
|
18
17
|
const COMPACT_RESOURCE_FILE_NAMES = new Set(["AGENTS.override.md", "AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD"]);
|
|
19
18
|
function formatReadLineRange(args, theme) {
|
|
20
19
|
if (args?.offset === undefined && args?.limit === undefined)
|
|
@@ -52,7 +51,8 @@ function getPiDocsClassification(absolutePath) {
|
|
|
52
51
|
}
|
|
53
52
|
return undefined;
|
|
54
53
|
}
|
|
55
|
-
|
|
54
|
+
/** The compact headline a collapsed read card shows for these args, or undefined for a plain file read. */
|
|
55
|
+
export function getCompactReadClassification(args, cwd) {
|
|
56
56
|
const rawPath = str(args?.file_path ?? args?.path);
|
|
57
57
|
if (!rawPath)
|
|
58
58
|
return undefined;
|
|
@@ -109,18 +109,6 @@ function formatReadResult(args, result, options, theme, showImages, _cwd, isErro
|
|
|
109
109
|
if (remaining > 0) {
|
|
110
110
|
text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("app.tools.expand", "to expand")}${theme.fg("muted", ")")}`;
|
|
111
111
|
}
|
|
112
|
-
const truncation = result.details?.truncation;
|
|
113
|
-
if (truncation?.truncated) {
|
|
114
|
-
if (truncation.firstLineExceedsLimit) {
|
|
115
|
-
text += `\n${theme.fg("warning", `[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`)}`;
|
|
116
|
-
}
|
|
117
|
-
else if (truncation.truncatedBy === "lines") {
|
|
118
|
-
text += `\n${theme.fg("warning", `[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`)}`;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
text += `\n${theme.fg("warning", `[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`)}`;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
112
|
return text;
|
|
125
113
|
}
|
|
126
114
|
export const readRenderers = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/core/tools/renderers/read.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Presentation for the read tool.\n *\n * Renderers live apart from the implementation so a process that only displays tool output does not\n * load the execution path or its typebox parameter schema. `read.ts` spreads these into its\n * definition, so the tool's public shape is unchanged.\n */\n\nimport { basename, dirname, isAbsolute, relative, resolve as resolvePath, sep } from \"node:path\";\nimport type { ImageContent, TextContent } from \"@earendil-works/pi-ai\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { getReadmePath } from \"../../../config.ts\";\nimport { keyHint, keyText } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport { formatPathRelativeToCwdOrAbsolute } from \"../../../utils/paths.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../../extensions/types.ts\";\nimport { resolveToCwd } from \"../path-utils.ts\";\nimport type { ReadToolDetails } from \"../read.ts\";\nimport { type CompactReadClassification, classifyRead } from \"../read-classifiers.ts\";\nimport { getTextOutput, renderToolPath, replaceTabs, str } from \"../render-utils.ts\";\nimport { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from \"../truncate.ts\";\n\n/**\n * Classifications are memoized per tool call (unclaimed paths included) so a redraw or an\n * expand/collapse cannot pick a different headline for the same read.\n */\nexport interface ReadRenderState {\n\tclassifications?: Map<string | null, CompactReadClassification | undefined>;\n}\nconst COMPACT_RESOURCE_FILE_NAMES = new Set([\"AGENTS.override.md\", \"AGENTS.md\", \"AGENTS.MD\", \"CLAUDE.md\", \"CLAUDE.MD\"]);\ntype ReadRenderArgs = { path?: string; file_path?: string; offset?: number; limit?: number };\nfunction formatReadLineRange(args: ReadRenderArgs | undefined, theme: Theme): string {\n\tif (args?.offset === undefined && args?.limit === undefined) return \"\";\n\tconst startLine = args.offset ?? 1;\n\tconst endLine = args.limit !== undefined ? startLine + args.limit - 1 : \"\";\n\treturn theme.fg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n}\nfunction formatReadCall(args: ReadRenderArgs | undefined, theme: Theme, cwd: string): string {\n\tconst pathDisplay = renderToolPath(str(args?.file_path ?? args?.path), theme, cwd);\n\treturn `${theme.fg(\"toolTitle\", theme.bold(\"read\"))} ${pathDisplay}${formatReadLineRange(args, theme)}`;\n}\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\nfunction toPosixPath(filePath: string): string {\n\treturn filePath.split(sep).join(\"/\");\n}\nfunction getPiDocsClassification(absolutePath: string): CompactReadClassification | undefined {\n\tconst packageRoot = dirname(getReadmePath());\n\tconst relativePath = relative(resolvePath(packageRoot), resolvePath(absolutePath));\n\tif (\n\t\trelativePath === \"\" ||\n\t\trelativePath === \"..\" ||\n\t\trelativePath.startsWith(`..${sep}`) ||\n\t\tisAbsolute(relativePath)\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst label = toPosixPath(relativePath);\n\tif (label === \"README.md\" || label.startsWith(\"docs/\") || label.startsWith(\"examples/\")) {\n\t\treturn { kind: \"docs\", label };\n\t}\n\treturn undefined;\n}\nfunction getCompactReadClassification(\n\targs: ReadRenderArgs | undefined,\n\tcwd: string,\n): CompactReadClassification | undefined {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tif (!rawPath) return undefined;\n\n\tconst absolutePath = resolveToCwd(rawPath, cwd);\n\tconst fileName = basename(absolutePath);\n\tif (fileName === \"SKILL.md\") {\n\t\treturn { kind: \"skill\", label: basename(dirname(absolutePath)) || fileName };\n\t}\n\n\tconst registeredClassification = classifyRead({ absolutePath, cwd });\n\tif (registeredClassification) return registeredClassification;\n\n\tconst docsClassification = getPiDocsClassification(absolutePath);\n\tif (docsClassification) return docsClassification;\n\n\tif (COMPACT_RESOURCE_FILE_NAMES.has(fileName)) {\n\t\treturn { kind: \"resource\", label: formatPathRelativeToCwdOrAbsolute(absolutePath, cwd) };\n\t}\n\n\treturn undefined;\n}\nfunction formatCompactReadCall(\n\tclassification: CompactReadClassification,\n\targs: ReadRenderArgs | undefined,\n\ttheme: Theme,\n): string {\n\tconst expandHint = theme.fg(\"dim\", ` (${keyText(\"app.tools.expand\")} to expand)`);\n\tif (classification.kind === \"skill\") {\n\t\treturn (\n\t\t\ttheme.fg(\"customMessageLabel\", `\\x1b[1m[skill]\\x1b[22m `) +\n\t\t\ttheme.fg(\"customMessageText\", classification.label) +\n\t\t\tformatReadLineRange(args, theme) +\n\t\t\texpandHint\n\t\t);\n\t}\n\n\tif (classification.kind === \"memory\") {\n\t\treturn (\n\t\t\ttheme.fg(\"accent\", `\\x1b[1m✦ ${classification.headline ?? \"Recalled\"}\\x1b[22m`) +\n\t\t\t\" \" +\n\t\t\ttheme.fg(\"customMessageText\", classification.label) +\n\t\t\tformatReadLineRange(args, theme) +\n\t\t\texpandHint\n\t\t);\n\t}\n\n\treturn (\n\t\ttheme.fg(\"toolTitle\", theme.bold(`read ${classification.kind}`)) +\n\t\t\" \" +\n\t\ttheme.fg(\"accent\", classification.label) +\n\t\tformatReadLineRange(args, theme) +\n\t\texpandHint\n\t);\n}\nfunction formatReadResult(\n\targs: ReadRenderArgs | undefined,\n\tresult: { content: (TextContent | ImageContent)[]; details?: ReadToolDetails },\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n\t_cwd: string,\n\tisError: boolean,\n): string {\n\tif (!options.expanded && !isError) {\n\t\treturn \"\";\n\t}\n\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst output = getTextOutput(result, showImages);\n\tconst lang = !isError && rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang ? highlightCode(replaceTabs(output), lang) : output.split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n${displayLines.map((line) => (lang ? replaceTabs(line) : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `${theme.fg(\"muted\", `\\n... (${remaining} more lines,`)} ${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t}\n\n\tconst truncation = result.details?.truncation;\n\tif (truncation?.truncated) {\n\t\tif (truncation.firstLineExceedsLimit) {\n\t\t\ttext += `\\n${theme.fg(\"warning\", `[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`)}`;\n\t\t} else if (truncation.truncatedBy === \"lines\") {\n\t\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`)}`;\n\t\t} else {\n\t\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`)}`;\n\t\t}\n\t}\n\treturn text;\n}\n\nexport const readRenderers: Pick<\n\tToolDefinition<any, ReadToolDetails | undefined, ReadRenderState>,\n\t\"renderCall\" | \"renderResult\"\n> = {\n\trenderCall(rawArgs, theme, context) {\n\t\tconst args = rawArgs as ReadRenderArgs | undefined;\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\tlet classification: CompactReadClassification | undefined;\n\t\tif (!context.expanded) {\n\t\t\tconst rawPath = str(args?.file_path ?? args?.path);\n\t\t\tcontext.state.classifications ??= new Map();\n\t\t\tconst classifications = context.state.classifications;\n\t\t\tif (!classifications.has(rawPath)) {\n\t\t\t\tclassifications.set(rawPath, getCompactReadClassification(args, context.cwd));\n\t\t\t}\n\t\t\tclassification = classifications.get(rawPath);\n\t\t}\n\t\ttext.setText(\n\t\t\tclassification ? formatCompactReadCall(classification, args, theme) : formatReadCall(args, theme, context.cwd),\n\t\t);\n\t\treturn text;\n\t},\n\trenderResult(result, options, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(\n\t\t\tformatReadResult(\n\t\t\t\tcontext.args as ReadRenderArgs | undefined,\n\t\t\t\tresult,\n\t\t\t\toptions,\n\t\t\t\ttheme,\n\t\t\t\tcontext.showImages,\n\t\t\t\tcontext.cwd,\n\t\t\t\tcontext.isError,\n\t\t\t),\n\t\t);\n\t\treturn text;\n\t},\n};\n"]}
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/core/tools/renderers/read.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Presentation for the read tool.\n *\n * Renderers live apart from the implementation so a process that only displays tool output does not\n * load the execution path or its typebox parameter schema. `read.ts` spreads these into its\n * definition, so the tool's public shape is unchanged.\n */\n\nimport { basename, dirname, isAbsolute, relative, resolve as resolvePath, sep } from \"node:path\";\nimport type { ImageContent, TextContent } from \"@earendil-works/pi-ai\";\nimport { Text } from \"@earendil-works/pi-tui\";\nimport { getReadmePath } from \"../../../config.ts\";\nimport { keyHint, keyText } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { getLanguageFromPath, highlightCode, type Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport { formatPathRelativeToCwdOrAbsolute } from \"../../../utils/paths.ts\";\nimport type { ToolDefinition, ToolRenderResultOptions } from \"../../extensions/types.ts\";\nimport { resolveToCwd } from \"../path-utils.ts\";\nimport type { ReadToolDetails } from \"../read.ts\";\nimport { type CompactReadClassification, classifyRead } from \"../read-classifiers.ts\";\nimport { getTextOutput, renderToolPath, replaceTabs, str } from \"../render-utils.ts\";\n\n/**\n * Classifications are memoized per tool call (unclaimed paths included) so a redraw or an\n * expand/collapse cannot pick a different headline for the same read.\n */\nexport interface ReadRenderState {\n\tclassifications?: Map<string | null, CompactReadClassification | undefined>;\n}\nconst COMPACT_RESOURCE_FILE_NAMES = new Set([\"AGENTS.override.md\", \"AGENTS.md\", \"AGENTS.MD\", \"CLAUDE.md\", \"CLAUDE.MD\"]);\nexport type ReadRenderArgs = { path?: string; file_path?: string; offset?: number; limit?: number };\nfunction formatReadLineRange(args: ReadRenderArgs | undefined, theme: Theme): string {\n\tif (args?.offset === undefined && args?.limit === undefined) return \"\";\n\tconst startLine = args.offset ?? 1;\n\tconst endLine = args.limit !== undefined ? startLine + args.limit - 1 : \"\";\n\treturn theme.fg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n}\nfunction formatReadCall(args: ReadRenderArgs | undefined, theme: Theme, cwd: string): string {\n\tconst pathDisplay = renderToolPath(str(args?.file_path ?? args?.path), theme, cwd);\n\treturn `${theme.fg(\"toolTitle\", theme.bold(\"read\"))} ${pathDisplay}${formatReadLineRange(args, theme)}`;\n}\nfunction trimTrailingEmptyLines(lines: string[]): string[] {\n\tlet end = lines.length;\n\twhile (end > 0 && lines[end - 1] === \"\") {\n\t\tend--;\n\t}\n\treturn lines.slice(0, end);\n}\nfunction toPosixPath(filePath: string): string {\n\treturn filePath.split(sep).join(\"/\");\n}\nfunction getPiDocsClassification(absolutePath: string): CompactReadClassification | undefined {\n\tconst packageRoot = dirname(getReadmePath());\n\tconst relativePath = relative(resolvePath(packageRoot), resolvePath(absolutePath));\n\tif (\n\t\trelativePath === \"\" ||\n\t\trelativePath === \"..\" ||\n\t\trelativePath.startsWith(`..${sep}`) ||\n\t\tisAbsolute(relativePath)\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst label = toPosixPath(relativePath);\n\tif (label === \"README.md\" || label.startsWith(\"docs/\") || label.startsWith(\"examples/\")) {\n\t\treturn { kind: \"docs\", label };\n\t}\n\treturn undefined;\n}\n/** The compact headline a collapsed read card shows for these args, or undefined for a plain file read. */\nexport function getCompactReadClassification(\n\targs: ReadRenderArgs | undefined,\n\tcwd: string,\n): CompactReadClassification | undefined {\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tif (!rawPath) return undefined;\n\n\tconst absolutePath = resolveToCwd(rawPath, cwd);\n\tconst fileName = basename(absolutePath);\n\tif (fileName === \"SKILL.md\") {\n\t\treturn { kind: \"skill\", label: basename(dirname(absolutePath)) || fileName };\n\t}\n\n\tconst registeredClassification = classifyRead({ absolutePath, cwd });\n\tif (registeredClassification) return registeredClassification;\n\n\tconst docsClassification = getPiDocsClassification(absolutePath);\n\tif (docsClassification) return docsClassification;\n\n\tif (COMPACT_RESOURCE_FILE_NAMES.has(fileName)) {\n\t\treturn { kind: \"resource\", label: formatPathRelativeToCwdOrAbsolute(absolutePath, cwd) };\n\t}\n\n\treturn undefined;\n}\nfunction formatCompactReadCall(\n\tclassification: CompactReadClassification,\n\targs: ReadRenderArgs | undefined,\n\ttheme: Theme,\n): string {\n\tconst expandHint = theme.fg(\"dim\", ` (${keyText(\"app.tools.expand\")} to expand)`);\n\tif (classification.kind === \"skill\") {\n\t\treturn (\n\t\t\ttheme.fg(\"customMessageLabel\", `\\x1b[1m[skill]\\x1b[22m `) +\n\t\t\ttheme.fg(\"customMessageText\", classification.label) +\n\t\t\tformatReadLineRange(args, theme) +\n\t\t\texpandHint\n\t\t);\n\t}\n\n\tif (classification.kind === \"memory\") {\n\t\treturn (\n\t\t\ttheme.fg(\"accent\", `\\x1b[1m✦ ${classification.headline ?? \"Recalled\"}\\x1b[22m`) +\n\t\t\t\" \" +\n\t\t\ttheme.fg(\"customMessageText\", classification.label) +\n\t\t\tformatReadLineRange(args, theme) +\n\t\t\texpandHint\n\t\t);\n\t}\n\n\treturn (\n\t\ttheme.fg(\"toolTitle\", theme.bold(`read ${classification.kind}`)) +\n\t\t\" \" +\n\t\ttheme.fg(\"accent\", classification.label) +\n\t\tformatReadLineRange(args, theme) +\n\t\texpandHint\n\t);\n}\nfunction formatReadResult(\n\targs: ReadRenderArgs | undefined,\n\tresult: { content: (TextContent | ImageContent)[]; details?: ReadToolDetails },\n\toptions: ToolRenderResultOptions,\n\ttheme: Theme,\n\tshowImages: boolean,\n\t_cwd: string,\n\tisError: boolean,\n): string {\n\tif (!options.expanded && !isError) {\n\t\treturn \"\";\n\t}\n\n\tconst rawPath = str(args?.file_path ?? args?.path);\n\tconst output = getTextOutput(result, showImages);\n\tconst lang = !isError && rawPath ? getLanguageFromPath(rawPath) : undefined;\n\tconst renderedLines = lang ? highlightCode(replaceTabs(output), lang) : output.split(\"\\n\");\n\tconst lines = trimTrailingEmptyLines(renderedLines);\n\tconst maxLines = options.expanded ? lines.length : 10;\n\tconst displayLines = lines.slice(0, maxLines);\n\tconst remaining = lines.length - maxLines;\n\tlet text = `\\n${displayLines.map((line) => (lang ? replaceTabs(line) : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\")}`;\n\tif (remaining > 0) {\n\t\ttext += `${theme.fg(\"muted\", `\\n... (${remaining} more lines,`)} ${keyHint(\"app.tools.expand\", \"to expand\")}${theme.fg(\"muted\", \")\")}`;\n\t}\n\n\treturn text;\n}\n\nexport const readRenderers: Pick<\n\tToolDefinition<any, ReadToolDetails | undefined, ReadRenderState>,\n\t\"renderCall\" | \"renderResult\"\n> = {\n\trenderCall(rawArgs, theme, context) {\n\t\tconst args = rawArgs as ReadRenderArgs | undefined;\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\tlet classification: CompactReadClassification | undefined;\n\t\tif (!context.expanded) {\n\t\t\tconst rawPath = str(args?.file_path ?? args?.path);\n\t\t\tcontext.state.classifications ??= new Map();\n\t\t\tconst classifications = context.state.classifications;\n\t\t\tif (!classifications.has(rawPath)) {\n\t\t\t\tclassifications.set(rawPath, getCompactReadClassification(args, context.cwd));\n\t\t\t}\n\t\t\tclassification = classifications.get(rawPath);\n\t\t}\n\t\ttext.setText(\n\t\t\tclassification ? formatCompactReadCall(classification, args, theme) : formatReadCall(args, theme, context.cwd),\n\t\t);\n\t\treturn text;\n\t},\n\trenderResult(result, options, theme, context) {\n\t\tconst text = (context.lastComponent as Text | undefined) ?? new Text(\"\", 0, 0);\n\t\ttext.setText(\n\t\t\tformatReadResult(\n\t\t\t\tcontext.args as ReadRenderArgs | undefined,\n\t\t\t\tresult,\n\t\t\t\toptions,\n\t\t\t\ttheme,\n\t\t\t\tcontext.showImages,\n\t\t\t\tcontext.cwd,\n\t\t\t\tcontext.isError,\n\t\t\t),\n\t\t);\n\t\treturn text;\n\t},\n};\n"]}
|
|
@@ -7,6 +7,9 @@ export type ExplorationCall = {
|
|
|
7
7
|
readonly pending: boolean;
|
|
8
8
|
readonly failed: boolean;
|
|
9
9
|
};
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Group only the built-in read/grep/find/ls presentation; custom renderers, semantic reads, and other
|
|
12
|
+
* tools stay cards.
|
|
13
|
+
*/
|
|
11
14
|
export declare function explorationCall(component: ToolExecutionComponent): ExplorationCall | undefined;
|
|
12
15
|
//# sourceMappingURL=exploration-call.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-call.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-call.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exploration-call.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-call.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,gHAAgH;IAChH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB,CAAC;AAuBF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,sBAAsB,GAAG,eAAe,GAAG,SAAS,CAuB9F"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import { resolveToCwd } from "../../../core/tools/path-utils.js";
|
|
3
3
|
import { findRenderers, grepRenderers, lsRenderers, readRenderers } from "../../../core/tools/renderers/index.js";
|
|
4
|
+
import { getCompactReadClassification } from "../../../core/tools/renderers/read.js";
|
|
4
5
|
import { formatPathRelativeToCwdOrAbsolute } from "../../../utils/paths.js";
|
|
5
6
|
const BUILT_IN_RENDERERS = { read: readRenderers, grep: grepRenderers, find: findRenderers, ls: lsRenderers };
|
|
6
7
|
function stringArg(args, ...keys) {
|
|
@@ -13,7 +14,18 @@ function stringArg(args, ...keys) {
|
|
|
13
14
|
}
|
|
14
15
|
return undefined;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
function isReadRenderArgs(args) {
|
|
18
|
+
return args !== null && typeof args === "object";
|
|
19
|
+
}
|
|
20
|
+
/** A skill load or a memory recall is a semantic card, not file exploration; it keeps its own line. */
|
|
21
|
+
function isSemanticRead(args, cwd) {
|
|
22
|
+
const kind = getCompactReadClassification(isReadRenderArgs(args) ? args : undefined, cwd)?.kind;
|
|
23
|
+
return kind === "skill" || kind === "memory";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Group only the built-in read/grep/find/ls presentation; custom renderers, semantic reads, and other
|
|
27
|
+
* tools stay cards.
|
|
28
|
+
*/
|
|
17
29
|
export function explorationCall(component) {
|
|
18
30
|
const { identity, state, presentation } = component.presentationSnapshot;
|
|
19
31
|
if (presentation !== "classic")
|
|
@@ -29,8 +41,11 @@ export function explorationCall(component) {
|
|
|
29
41
|
const pending = state.isPartial;
|
|
30
42
|
const failed = state.result?.isError ?? false;
|
|
31
43
|
const path = stringArg(state.args, "file_path", "path");
|
|
32
|
-
if (toolName === "read")
|
|
44
|
+
if (toolName === "read") {
|
|
45
|
+
if (isSemanticRead(state.args, identity.cwd))
|
|
46
|
+
return undefined;
|
|
33
47
|
return { action: "Read", label: path ? basename(path) : "", pending, failed };
|
|
48
|
+
}
|
|
34
49
|
if (toolName === "grep") {
|
|
35
50
|
const pattern = stringArg(state.args, "pattern") ?? "";
|
|
36
51
|
const dir = path ? formatPathRelativeToCwdOrAbsolute(resolveToCwd(path, identity.cwd), identity.cwd) : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-call.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAClH,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAY5E,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;AAE9G,SAAS,SAAS,CAAC,IAAa,EAAE,GAAG,IAAc;IAClD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"exploration-call.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-call.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename } from \"node:path\";\nimport { resolveToCwd } from \"../../../core/tools/path-utils.ts\";\nimport { findRenderers, grepRenderers, lsRenderers, readRenderers } from \"../../../core/tools/renderers/index.ts\";\nimport { getCompactReadClassification, type ReadRenderArgs } from \"../../../core/tools/renderers/read.ts\";\nimport { formatPathRelativeToCwdOrAbsolute } from \"../../../utils/paths.ts\";\nimport type { ToolExecutionComponent } from \"./tool-execution.ts\";\n\n/** One exploration call as the collapsed group shows it: an action plus a label, never output. */\nexport type ExplorationCall = {\n\treadonly action: \"Read\" | \"Search\" | \"List\";\n\t/** Read: file basename. Search: the pattern plus ` in <dir>` for an explicit path. List: directory basename. */\n\treadonly label: string;\n\treadonly pending: boolean;\n\treadonly failed: boolean;\n};\n\nconst BUILT_IN_RENDERERS = { read: readRenderers, grep: grepRenderers, find: findRenderers, ls: lsRenderers };\n\nfunction stringArg(args: unknown, ...keys: string[]): string | undefined {\n\tif (args === null || typeof args !== \"object\") return undefined;\n\tfor (const key of keys) {\n\t\tconst value: unknown = Reflect.get(args, key);\n\t\tif (typeof value === \"string\" && value) return value;\n\t}\n\treturn undefined;\n}\n\nfunction isReadRenderArgs(args: unknown): args is ReadRenderArgs {\n\treturn args !== null && typeof args === \"object\";\n}\n\n/** A skill load or a memory recall is a semantic card, not file exploration; it keeps its own line. */\nfunction isSemanticRead(args: unknown, cwd: string): boolean {\n\tconst kind = getCompactReadClassification(isReadRenderArgs(args) ? args : undefined, cwd)?.kind;\n\treturn kind === \"skill\" || kind === \"memory\";\n}\n\n/**\n * Group only the built-in read/grep/find/ls presentation; custom renderers, semantic reads, and other\n * tools stay cards.\n */\nexport function explorationCall(component: ToolExecutionComponent): ExplorationCall | undefined {\n\tconst { identity, state, presentation } = component.presentationSnapshot;\n\tif (presentation !== \"classic\") return undefined;\n\tconst toolName = identity.toolName;\n\tif (toolName !== \"read\" && toolName !== \"grep\" && toolName !== \"find\" && toolName !== \"ls\") return undefined;\n\tconst expected = BUILT_IN_RENDERERS[toolName];\n\tconst actual = identity.toolDefinition;\n\tif (actual && (actual.renderCall !== expected.renderCall || actual.renderResult !== expected.renderResult)) {\n\t\treturn undefined;\n\t}\n\tconst pending = state.isPartial;\n\tconst failed = state.result?.isError ?? false;\n\tconst path = stringArg(state.args, \"file_path\", \"path\");\n\tif (toolName === \"read\") {\n\t\tif (isSemanticRead(state.args, identity.cwd)) return undefined;\n\t\treturn { action: \"Read\", label: path ? basename(path) : \"\", pending, failed };\n\t}\n\tif (toolName === \"grep\") {\n\t\tconst pattern = stringArg(state.args, \"pattern\") ?? \"\";\n\t\tconst dir = path ? formatPathRelativeToCwdOrAbsolute(resolveToCwd(path, identity.cwd), identity.cwd) : \"\";\n\t\treturn { action: \"Search\", label: dir ? `${pattern} in ${dir}` : pattern, pending, failed };\n\t}\n\treturn { action: \"List\", label: (path && basename(path)) || path || \".\", pending, failed };\n}\n"]}
|
|
@@ -10,10 +10,12 @@ export declare class ExplorationGroup extends Container {
|
|
|
10
10
|
readonly component: ToolExecutionComponent;
|
|
11
11
|
readonly call: ExplorationCall;
|
|
12
12
|
}[];
|
|
13
|
+
/** Rule paths injected into this group's calls; repeated paths count once. */
|
|
14
|
+
private rules;
|
|
13
15
|
private get expanded();
|
|
14
16
|
render(width: number): string[];
|
|
15
17
|
handleMouse(event: TuiMouseEvent): ReturnType<Container["handleMouse"]>;
|
|
16
18
|
/** References are replaced on each projection, never disposed by this view. */
|
|
17
|
-
setMembers(members: Component[], calls: ExplorationGroup["calls"]): void;
|
|
19
|
+
setMembers(members: Component[], calls: ExplorationGroup["calls"], rules?: readonly string[]): void;
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=exploration-group.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-group.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,KAAK,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAGxG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA2BlE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC9C,KAAK,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,EAAE,CAAM;
|
|
1
|
+
{"version":3,"file":"exploration-group.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,KAAK,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAGxG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA2BlE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC9C,KAAK,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,EAAE,CAAM;IAC7F,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAAyB;IAEtC,OAAO,KAAK,QAAQ,GAEnB;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBvC;IAEQ,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAwB/E;IAED,+EAA+E;IAC/E,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,GAAE,SAAS,MAAM,EAAO,GAAG,IAAI,CAItG;CACD"}
|
|
@@ -32,6 +32,8 @@ export class ExplorationGroup extends Container {
|
|
|
32
32
|
constructor() {
|
|
33
33
|
super(...arguments);
|
|
34
34
|
this.calls = [];
|
|
35
|
+
/** Rule paths injected into this group's calls; repeated paths count once. */
|
|
36
|
+
this.rules = [];
|
|
35
37
|
}
|
|
36
38
|
get expanded() {
|
|
37
39
|
return this.calls.some(({ component }) => component.presentationSnapshot.state.expanded);
|
|
@@ -48,6 +50,9 @@ export class ExplorationGroup extends Container {
|
|
|
48
50
|
if (this.expanded)
|
|
49
51
|
return [...lines, ...super.render(width)];
|
|
50
52
|
const body = bodyLines(this.calls.map(({ call }) => call));
|
|
53
|
+
const ruleCount = new Set(this.rules).size;
|
|
54
|
+
if (ruleCount > 0)
|
|
55
|
+
body.push(`${theme.fg("accent", "Applied")} ${ruleCount} project ${ruleCount === 1 ? "rule" : "rules"}`);
|
|
51
56
|
const shown = body.length > MAX_BODY_LINES ? body.slice(0, MAX_BODY_LINES) : body;
|
|
52
57
|
if (body.length > shown.length)
|
|
53
58
|
shown.push(theme.fg("dim", `… +${body.length - shown.length} more`));
|
|
@@ -81,9 +86,10 @@ export class ExplorationGroup extends Container {
|
|
|
81
86
|
return undefined;
|
|
82
87
|
}
|
|
83
88
|
/** References are replaced on each projection, never disposed by this view. */
|
|
84
|
-
setMembers(members, calls) {
|
|
89
|
+
setMembers(members, calls, rules = []) {
|
|
85
90
|
this.children = members;
|
|
86
91
|
this.calls = calls;
|
|
92
|
+
this.rules = rules;
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
//# sourceMappingURL=exploration-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-group.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAsB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIvD,mGAAmG;AACnG,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,SAAS,SAAS,CAAC,KAAiC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAI,CAAC;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,EAAE,CAAC;QACR,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;gBACvF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAK,EAAE,CAAC;YACT,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5F,SAAS;QACV,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAA/C;;QACC,UAAK,GAAqF,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"exploration-group.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-group.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Container, type TuiMouseEvent, truncateToWidth } from \"@earendil-works/pi-tui\";\nimport { theme } from \"../theme/theme.ts\";\nimport { toolSpinnerGlyph } from \"../tool-progress.ts\";\nimport type { ExplorationCall } from \"./exploration-call.ts\";\nimport type { ToolExecutionComponent } from \"./tool-execution.ts\";\n\n/** Body lines past this many collapse into one `… +K more` line, as codex caps exploring cells. */\nconst MAX_BODY_LINES = 8;\nconst SPINNER_FRAME_MS = 80;\n\nfunction bodyLines(calls: readonly ExplorationCall[]): string[] {\n\tconst lines: string[] = [];\n\tfor (let index = 0; index < calls.length; ) {\n\t\tconst first = calls[index];\n\t\tindex++;\n\t\tif (first.action === \"Read\" && !first.failed) {\n\t\t\tconst names = [first.label];\n\t\t\twhile (index < calls.length && calls[index].action === \"Read\" && !calls[index].failed) {\n\t\t\t\tnames.push(calls[index].label);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\tconst unique = [...new Set(names.filter(Boolean))];\n\t\t\tlines.push(`${theme.fg(\"accent\", \"Read\")} ${unique.join(theme.fg(\"dim\", \", \"))}`.trimEnd());\n\t\t\tcontinue;\n\t\t}\n\t\tconst failed = first.failed ? theme.fg(\"error\", \" (failed)\") : \"\";\n\t\tlines.push(`${theme.fg(\"accent\", first.action)} ${first.label}`.trimEnd() + failed);\n\t}\n\treturn lines;\n}\n\n/**\n * Codex-style exploring cell over the original tool cards. It is a non-owning view: the transcript\n * owns and disposes the cards, and result routing keeps addressing them by tool call id.\n */\nexport class ExplorationGroup extends Container {\n\tcalls: { readonly component: ToolExecutionComponent; readonly call: ExplorationCall }[] = [];\n\t/** Rule paths injected into this group's calls; repeated paths count once. */\n\tprivate rules: readonly string[] = [];\n\n\tprivate get expanded(): boolean {\n\t\treturn this.calls.some(({ component }) => component.presentationSnapshot.state.expanded);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst pending = this.calls.some(({ call }) => call.pending);\n\t\tconst failed = this.calls.filter(({ call }) => call.failed).length;\n\t\tconst marker = pending\n\t\t\t? theme.fg(\"accent\", toolSpinnerGlyph(Math.floor(Date.now() / SPINNER_FRAME_MS)))\n\t\t\t: theme.fg(\"dim\", \"•\");\n\t\tconst header =\n\t\t\t`${marker} ${theme.bold(pending ? \"Exploring\" : \"Explored\")}` +\n\t\t\t(failed ? theme.fg(\"error\", ` · ${failed} failed`) : \"\");\n\t\tconst lines = [\"\", truncateToWidth(header, width)];\n\t\tif (this.expanded) return [...lines, ...super.render(width)];\n\t\tconst body = bodyLines(this.calls.map(({ call }) => call));\n\t\tconst ruleCount = new Set(this.rules).size;\n\t\tif (ruleCount > 0)\n\t\t\tbody.push(`${theme.fg(\"accent\", \"Applied\")} ${ruleCount} project ${ruleCount === 1 ? \"rule\" : \"rules\"}`);\n\t\tconst shown = body.length > MAX_BODY_LINES ? body.slice(0, MAX_BODY_LINES) : body;\n\t\tif (body.length > shown.length) shown.push(theme.fg(\"dim\", `… +${body.length - shown.length} more`));\n\t\tfor (const [index, line] of shown.entries()) {\n\t\t\tlines.push(truncateToWidth(`${index === 0 ? theme.fg(\"dim\", \" └ \") : \" \"}${line}`, width));\n\t\t}\n\t\treturn lines;\n\t}\n\n\toverride handleMouse(event: TuiMouseEvent): ReturnType<Container[\"handleMouse\"]> {\n\t\tif (\n\t\t\t(event.type === \"press\" || event.type === \"click\") &&\n\t\t\tevent.button === \"left\" &&\n\t\t\t(event.y === 1 || !this.expanded)\n\t\t) {\n\t\t\tif (event.type === \"click\") {\n\t\t\t\tconst expanded = !this.expanded;\n\t\t\t\tfor (const { component } of this.calls) component.setExpanded(expanded);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\thandled: true,\n\t\t\t\ttarget: {\n\t\t\t\t\tcomponent: this,\n\t\t\t\t\toriginX: event.screenX - event.x,\n\t\t\t\t\toriginY: event.screenY - event.y,\n\t\t\t\t\twidth: event.width,\n\t\t\t\t\theight: event.height,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (this.expanded && event.y >= 2)\n\t\t\treturn super.handleMouse({ ...event, y: event.y - 2, height: event.height - 2 });\n\t\treturn undefined;\n\t}\n\n\t/** References are replaced on each projection, never disposed by this view. */\n\tsetMembers(members: Component[], calls: ExplorationGroup[\"calls\"], rules: readonly string[] = []): void {\n\t\tthis.children = members;\n\t\tthis.calls = calls;\n\t\tthis.rules = rules;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CustomEntryComponent } from "./custom-entry.ts";
|
|
2
|
+
import type { ExplorationGroup } from "./exploration-group.ts";
|
|
3
|
+
/** Undefined for stream rules, legacy notices without a tool call id, and calls outside the group. */
|
|
4
|
+
export declare function projectRulesOfCall(card: CustomEntryComponent, calls: ExplorationGroup["calls"]): readonly string[] | undefined;
|
|
5
|
+
//# sourceMappingURL=exploration-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exploration-rules.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,sGAAsG;AACtG,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC9B,SAAS,MAAM,EAAE,GAAG,SAAS,CAS/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parseRuleActivationDetails, RULE_ACTIVATION_ENTRY_TYPE, } from "../../../core/extensions/builtin/rule-activation/types.js";
|
|
2
|
+
/** Undefined for stream rules, legacy notices without a tool call id, and calls outside the group. */
|
|
3
|
+
export function projectRulesOfCall(card, calls) {
|
|
4
|
+
const entry = card.customEntry;
|
|
5
|
+
if (entry.customType !== RULE_ACTIVATION_ENTRY_TYPE)
|
|
6
|
+
return undefined;
|
|
7
|
+
const details = parseRuleActivationDetails(entry.data);
|
|
8
|
+
if (details?.kind !== "project-rules" || details.toolCallId === undefined)
|
|
9
|
+
return undefined;
|
|
10
|
+
const toolCallId = details.toolCallId;
|
|
11
|
+
return calls.some(({ component }) => component.presentationSnapshot.identity.toolCallId === toolCallId)
|
|
12
|
+
? details.rules
|
|
13
|
+
: undefined;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=exploration-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exploration-rules.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,GAC1B,MAAM,2DAA2D,CAAC;AAInE,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CACjC,IAA0B,EAC1B,KAAgC;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,IAAI,KAAK,CAAC,UAAU,KAAK,0BAA0B;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,EAAE,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5F,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC;QACtG,CAAC,CAAC,OAAO,CAAC,KAAK;QACf,CAAC,CAAC,SAAS,CAAC;AACd,CAAC","sourcesContent":["import {\n\tparseRuleActivationDetails,\n\tRULE_ACTIVATION_ENTRY_TYPE,\n} from \"../../../core/extensions/builtin/rule-activation/types.ts\";\nimport type { CustomEntryComponent } from \"./custom-entry.ts\";\nimport type { ExplorationGroup } from \"./exploration-group.ts\";\n\n/** Undefined for stream rules, legacy notices without a tool call id, and calls outside the group. */\nexport function projectRulesOfCall(\n\tcard: CustomEntryComponent,\n\tcalls: ExplorationGroup[\"calls\"],\n): readonly string[] | undefined {\n\tconst entry = card.customEntry;\n\tif (entry.customType !== RULE_ACTIVATION_ENTRY_TYPE) return undefined;\n\tconst details = parseRuleActivationDetails(entry.data);\n\tif (details?.kind !== \"project-rules\" || details.toolCallId === undefined) return undefined;\n\tconst toolCallId = details.toolCallId;\n\treturn calls.some(({ component }) => component.presentationSnapshot.identity.toolCallId === toolCallId)\n\t\t? details.rules\n\t\t: undefined;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-transcript-container.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-transcript-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"exploration-transcript-container.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-transcript-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAMvF,OAAO,EAEN,KAAK,4BAA4B,EACjC,MAAM,uCAAuC,CAAC;AAG/C;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,MAAM,CAA2D;IAEzE,YAAY,OAAO,EAAE,4BAA4B,EAGhD;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiCvC;IAEQ,WAAW,CAAC,KAAK,EAAE,aAAa,2EAExC;IAEQ,KAAK,IAAI,IAAI,CAIrB;IAEQ,SAAS,IAAI,IAAI,CAIzB;IAEQ,OAAO,IAAI,IAAI,CAIvB;CACD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Container } from "@earendil-works/pi-tui";
|
|
2
2
|
import { AssistantMessageComponent } from "./assistant-message.js";
|
|
3
|
+
import { CustomEntryComponent } from "./custom-entry.js";
|
|
3
4
|
import { explorationCall } from "./exploration-call.js";
|
|
4
5
|
import { ExplorationGroup } from "./exploration-group.js";
|
|
6
|
+
import { projectRulesOfCall } from "./exploration-rules.js";
|
|
5
7
|
import { ProgressiveTranscriptContainer, } from "./progressive-transcript-container.js";
|
|
6
8
|
import { ToolExecutionComponent } from "./tool-execution.js";
|
|
7
9
|
/**
|
|
@@ -20,6 +22,7 @@ export class ExplorationTranscriptContainer extends Container {
|
|
|
20
22
|
let group;
|
|
21
23
|
let members = [];
|
|
22
24
|
let calls = [];
|
|
25
|
+
let rules = [];
|
|
23
26
|
for (const child of this.children) {
|
|
24
27
|
const call = child instanceof ToolExecutionComponent ? explorationCall(child) : undefined;
|
|
25
28
|
if (child instanceof ToolExecutionComponent && call) {
|
|
@@ -29,14 +32,20 @@ export class ExplorationTranscriptContainer extends Container {
|
|
|
29
32
|
projected.push(group);
|
|
30
33
|
members = [];
|
|
31
34
|
calls = [];
|
|
35
|
+
rules = [];
|
|
32
36
|
}
|
|
33
37
|
members.push(child);
|
|
34
38
|
calls.push({ component: child, call });
|
|
35
|
-
group.setMembers(members, calls);
|
|
39
|
+
group.setMembers(members, calls, rules);
|
|
36
40
|
}
|
|
37
41
|
else if (group && child instanceof AssistantMessageComponent && child.isExplorationDetail) {
|
|
38
42
|
members.push(child);
|
|
39
43
|
}
|
|
44
|
+
else if (group && child instanceof CustomEntryComponent && projectRulesOfCall(child, calls)) {
|
|
45
|
+
members.push(child);
|
|
46
|
+
rules = [...rules, ...(projectRulesOfCall(child, calls) ?? [])];
|
|
47
|
+
group.setMembers(members, calls, rules);
|
|
48
|
+
}
|
|
40
49
|
else {
|
|
41
50
|
group = undefined;
|
|
42
51
|
projected.push(child);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exploration-transcript-container.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-transcript-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAsB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACN,8BAA8B,GAE9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,SAAS;IAI5D,YAAY,OAAqC;QAChD,KAAK,EAAE,CAAC;QAHD,WAAM,GAAG,IAAI,OAAO,EAA4C,CAAC;QAIxE,IAAI,CAAC,OAAO,GAAG,IAAI,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,IAAI,KAAmC,CAAC;QACxC,IAAI,OAAO,GAAgB,EAAE,CAAC;QAC9B,IAAI,KAAK,GAA8B,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,KAAK,YAAY,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1F,IAAI,KAAK,YAAY,sBAAsB,IAAI,IAAI,EAAE,CAAC;gBACrD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE,CAAC;oBACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,OAAO,GAAG,EAAE,CAAC;oBACb,KAAK,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"exploration-transcript-container.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/exploration-transcript-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Container, type TuiMouseEvent } from \"@earendil-works/pi-tui\";\nimport { AssistantMessageComponent } from \"./assistant-message.ts\";\nimport { CustomEntryComponent } from \"./custom-entry.ts\";\nimport { explorationCall } from \"./exploration-call.ts\";\nimport { ExplorationGroup } from \"./exploration-group.ts\";\nimport { projectRulesOfCall } from \"./exploration-rules.ts\";\nimport {\n\tProgressiveTranscriptContainer,\n\ttype ProgressiveTranscriptOptions,\n} from \"./progressive-transcript-container.ts\";\nimport { ToolExecutionComponent } from \"./tool-execution.ts\";\n\n/**\n * Original children remain the lifecycle/ID/anchor model. A non-owning projection groups their\n * presentation before progressive hydration, so compact frames never render hidden tool results.\n * Re-projecting also handles partial args, late text, and visibility changes without moving cards.\n */\nexport class ExplorationTranscriptContainer extends Container {\n\tprivate readonly display: ProgressiveTranscriptContainer;\n\tprivate groups = new WeakMap<ToolExecutionComponent, ExplorationGroup>();\n\n\tconstructor(options: ProgressiveTranscriptOptions) {\n\t\tsuper();\n\t\tthis.display = new ProgressiveTranscriptContainer(options);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst projected: Component[] = [];\n\t\tlet group: ExplorationGroup | undefined;\n\t\tlet members: Component[] = [];\n\t\tlet calls: ExplorationGroup[\"calls\"] = [];\n\t\tlet rules: string[] = [];\n\t\tfor (const child of this.children) {\n\t\t\tconst call = child instanceof ToolExecutionComponent ? explorationCall(child) : undefined;\n\t\t\tif (child instanceof ToolExecutionComponent && call) {\n\t\t\t\tif (!group) {\n\t\t\t\t\tgroup = this.groups.get(child) ?? new ExplorationGroup();\n\t\t\t\t\tthis.groups.set(child, group);\n\t\t\t\t\tprojected.push(group);\n\t\t\t\t\tmembers = [];\n\t\t\t\t\tcalls = [];\n\t\t\t\t\trules = [];\n\t\t\t\t}\n\t\t\t\tmembers.push(child);\n\t\t\t\tcalls.push({ component: child, call });\n\t\t\t\tgroup.setMembers(members, calls, rules);\n\t\t\t} else if (group && child instanceof AssistantMessageComponent && child.isExplorationDetail) {\n\t\t\t\tmembers.push(child);\n\t\t\t} else if (group && child instanceof CustomEntryComponent && projectRulesOfCall(child, calls)) {\n\t\t\t\tmembers.push(child);\n\t\t\t\trules = [...rules, ...(projectRulesOfCall(child, calls) ?? [])];\n\t\t\t\tgroup.setMembers(members, calls, rules);\n\t\t\t} else {\n\t\t\t\tgroup = undefined;\n\t\t\t\tprojected.push(child);\n\t\t\t}\n\t\t}\n\t\tthis.display.children = projected;\n\t\treturn this.display.render(width);\n\t}\n\n\toverride handleMouse(event: TuiMouseEvent) {\n\t\treturn this.display.handleMouse(event);\n\t}\n\n\toverride clear(): void {\n\t\tthis.display.detachAll();\n\t\tthis.groups = new WeakMap();\n\t\tsuper.clear();\n\t}\n\n\toverride detachAll(): void {\n\t\tthis.display.detachAll();\n\t\tthis.groups = new WeakMap();\n\t\tsuper.detachAll();\n\t}\n\n\toverride dispose(): void {\n\t\tthis.display.detachAll();\n\t\tthis.display.dispose();\n\t\tsuper.dispose();\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,KAAK,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAWrE,OAAO,KAAK,EACX,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,8EAA8E;AAC9E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,MAAM,CAAC;AAuB3D,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAsB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAS;IAEtC,YACC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,oBAAoB,YAAK,EAClC,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,yBAAqC,EA0CnD;IAED,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAK9B;IAED,2FAA2F;IAC3F,IAAI,oBAAoB;QACd,QAAQ;QAAiB,KAAK;QAA4B,YAAY;MAC/E;IAED,oBAAoB,IAAI,IAAI,CAK3B;IAED,eAAe,IAAI,IAAI,CAKtB;IAED,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,UAAQ,GAAG,IAAI,CAUjE;IAED,aAAa,IAAI,IAAI,CAGpB;IAEQ,OAAO,IAAI,IAAI,CAGvB;IAED,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAGnC;IAED,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAGjC;IAED,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtC;IAEQ,UAAU,IAAI,IAAI,CAK1B;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBvC;IAED,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,qBAAqB;CAK7B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Container, Spacer } from "@earendil-works/pi-tui";
|
|
2
|
+
import { isModelOnlyText } from "../../../core/tools/model-only-text.js";
|
|
2
3
|
import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js";
|
|
3
4
|
import { GrokToolRow } from "../grok/tool-row.js";
|
|
4
5
|
import { theme } from "../theme/theme.js";
|
|
@@ -188,7 +189,9 @@ export class ToolExecutionComponent extends Container {
|
|
|
188
189
|
expanded: this.expanded,
|
|
189
190
|
showImages: this.showImages,
|
|
190
191
|
spinnerFrame: this.spinnerFrame,
|
|
191
|
-
result: this.result
|
|
192
|
+
result: this.result
|
|
193
|
+
? { ...this.result, content: this.result.content.filter((part) => !isModelOnlyText(part)) }
|
|
194
|
+
: undefined,
|
|
192
195
|
};
|
|
193
196
|
}
|
|
194
197
|
createRenderSignature() {
|