@code-yeongyu/senpi 2026.7.10 → 2026.7.13
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 +79 -0
- package/README.md +4 -2
- package/dist/core/agent-session.d.ts +9 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +56 -15
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.js +2 -2
- package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +10 -1
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/store.js +88 -3
- package/dist/core/extensions/builtin/goal/store.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +134 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +6 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.d.ts +3 -3
- package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.js +7 -4
- package/dist/core/extensions/builtin/terminal/notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +5 -3
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.js +32 -16
- package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts +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 +10 -4
- package/dist/core/extensions/builtin/terminal/tools/bash-output.js.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
- package/dist/core/extensions/builtin/todotools/tools/todowrite.js +5 -8
- package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +5 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +5 -8
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +22 -3
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/keybindings.d.ts +8 -3
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +7 -3
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -6
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +19 -6
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/resource-loader.d.ts +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +20 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -3
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/compaction-queue-transfer.d.ts +22 -0
- package/dist/modes/interactive/compaction-queue-transfer.d.ts.map +1 -0
- package/dist/modes/interactive/compaction-queue-transfer.js +82 -0
- package/dist/modes/interactive/compaction-queue-transfer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +4 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +9 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution-fallback.d.ts +6 -0
- package/dist/modes/interactive/components/tool-execution-fallback.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution-fallback.js +40 -0
- package/dist/modes/interactive/components/tool-execution-fallback.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution-images.d.ts +23 -0
- package/dist/modes/interactive/components/tool-execution-images.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution-images.js +104 -0
- package/dist/modes/interactive/components/tool-execution-images.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution-renderer.d.ts +28 -0
- package/dist/modes/interactive/components/tool-execution-renderer.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution-renderer.js +135 -0
- package/dist/modes/interactive/components/tool-execution-renderer.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution-types.d.ts +23 -0
- package/dist/modes/interactive/components/tool-execution-types.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution-types.js +2 -0
- package/dist/modes/interactive/components/tool-execution-types.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +13 -39
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +51 -294
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-renderer-boundary.d.ts +17 -0
- package/dist/modes/interactive/components/tool-renderer-boundary.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-renderer-boundary.js +75 -0
- package/dist/modes/interactive/components/tool-renderer-boundary.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +5 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +50 -17
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +5 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +127 -109
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +1 -0
- package/dist/modes/interactive/theme/light.json +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +6 -2
- package/dist/modes/interactive/theme/theme.d.ts +3 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +11 -4
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts +1 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +13 -0
- package/dist/utils/clipboard.js.map +1 -1
- package/docs/custom-provider.md +4 -3
- package/docs/extensions.md +140 -1
- package/docs/keybindings.md +1 -0
- package/docs/models.md +45 -4
- package/docs/providers.md +3 -0
- package/docs/quickstart.md +1 -1
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +1 -1
- package/docs/settings.md +3 -3
- package/docs/themes.md +5 -3
- package/docs/tui.md +1 -1
- package/docs/usage.md +2 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@babel/helper-string-parser/LICENSE +22 -0
- package/node_modules/@babel/helper-string-parser/README.md +19 -0
- package/node_modules/@babel/helper-string-parser/lib/index.js +295 -0
- package/node_modules/@babel/helper-string-parser/lib/index.js.map +1 -0
- package/node_modules/@babel/helper-string-parser/package.json +31 -0
- package/node_modules/@babel/helper-validator-identifier/LICENSE +22 -0
- package/node_modules/@babel/helper-validator-identifier/README.md +19 -0
- package/node_modules/@babel/helper-validator-identifier/lib/identifier.js +70 -0
- package/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map +1 -0
- package/node_modules/@babel/helper-validator-identifier/lib/index.js +57 -0
- package/node_modules/@babel/helper-validator-identifier/lib/index.js.map +1 -0
- package/node_modules/@babel/helper-validator-identifier/lib/keyword.js +35 -0
- package/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map +1 -0
- package/node_modules/@babel/helper-validator-identifier/package.json +31 -0
- package/node_modules/@babel/parser/LICENSE +19 -0
- package/node_modules/@babel/parser/README.md +19 -0
- package/node_modules/@babel/parser/bin/babel-parser.js +15 -0
- package/node_modules/@babel/parser/lib/index.js +14599 -0
- package/node_modules/@babel/parser/lib/index.js.map +1 -0
- package/node_modules/@babel/parser/package.json +50 -0
- package/node_modules/@babel/parser/typings/babel-parser.d.ts +262 -0
- package/node_modules/@babel/types/LICENSE +22 -0
- package/node_modules/@babel/types/README.md +19 -0
- package/node_modules/@babel/types/lib/asserts/assertNode.js +16 -0
- package/node_modules/@babel/types/lib/asserts/assertNode.js.map +1 -0
- package/node_modules/@babel/types/lib/asserts/generated/index.js +1251 -0
- package/node_modules/@babel/types/lib/asserts/generated/index.js.map +1 -0
- package/node_modules/@babel/types/lib/ast-types/generated/index.js +3 -0
- package/node_modules/@babel/types/lib/ast-types/generated/index.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js +18 -0
- package/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js +31 -0
- package/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/generated/index.js +29 -0
- package/node_modules/@babel/types/lib/builders/generated/index.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/generated/lowercase.js +2902 -0
- package/node_modules/@babel/types/lib/builders/generated/lowercase.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/generated/uppercase.js +272 -0
- package/node_modules/@babel/types/lib/builders/generated/uppercase.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/productions.js +12 -0
- package/node_modules/@babel/types/lib/builders/productions.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/react/buildChildren.js +24 -0
- package/node_modules/@babel/types/lib/builders/react/buildChildren.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js +22 -0
- package/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js.map +1 -0
- package/node_modules/@babel/types/lib/builders/validateNode.js +21 -0
- package/node_modules/@babel/types/lib/builders/validateNode.js.map +1 -0
- package/node_modules/@babel/types/lib/clone/clone.js +12 -0
- package/node_modules/@babel/types/lib/clone/clone.js.map +1 -0
- package/node_modules/@babel/types/lib/clone/cloneDeep.js +12 -0
- package/node_modules/@babel/types/lib/clone/cloneDeep.js.map +1 -0
- package/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js +12 -0
- package/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js.map +1 -0
- package/node_modules/@babel/types/lib/clone/cloneNode.js +107 -0
- package/node_modules/@babel/types/lib/clone/cloneNode.js.map +1 -0
- package/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js +12 -0
- package/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/addComment.js +15 -0
- package/node_modules/@babel/types/lib/comments/addComment.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/addComments.js +22 -0
- package/node_modules/@babel/types/lib/comments/addComments.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/inheritInnerComments.js +12 -0
- package/node_modules/@babel/types/lib/comments/inheritInnerComments.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/inheritLeadingComments.js +12 -0
- package/node_modules/@babel/types/lib/comments/inheritLeadingComments.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/inheritTrailingComments.js +12 -0
- package/node_modules/@babel/types/lib/comments/inheritTrailingComments.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/inheritsComments.js +17 -0
- package/node_modules/@babel/types/lib/comments/inheritsComments.js.map +1 -0
- package/node_modules/@babel/types/lib/comments/removeComments.js +15 -0
- package/node_modules/@babel/types/lib/comments/removeComments.js.map +1 -0
- package/node_modules/@babel/types/lib/constants/generated/index.js +60 -0
- package/node_modules/@babel/types/lib/constants/generated/index.js.map +1 -0
- package/node_modules/@babel/types/lib/constants/index.js +31 -0
- package/node_modules/@babel/types/lib/constants/index.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/ensureBlock.js +14 -0
- package/node_modules/@babel/types/lib/converters/ensureBlock.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js +65 -0
- package/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js +14 -0
- package/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toBlock.js +29 -0
- package/node_modules/@babel/types/lib/converters/toBlock.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toComputedKey.js +14 -0
- package/node_modules/@babel/types/lib/converters/toComputedKey.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toExpression.js +28 -0
- package/node_modules/@babel/types/lib/converters/toExpression.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toIdentifier.js +25 -0
- package/node_modules/@babel/types/lib/converters/toIdentifier.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toKeyAlias.js +38 -0
- package/node_modules/@babel/types/lib/converters/toKeyAlias.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toSequenceExpression.js +19 -0
- package/node_modules/@babel/types/lib/converters/toSequenceExpression.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/toStatement.js +39 -0
- package/node_modules/@babel/types/lib/converters/toStatement.js.map +1 -0
- package/node_modules/@babel/types/lib/converters/valueToNode.js +89 -0
- package/node_modules/@babel/types/lib/converters/valueToNode.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/core.js +1725 -0
- package/node_modules/@babel/types/lib/definitions/core.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/deprecated-aliases.js +11 -0
- package/node_modules/@babel/types/lib/definitions/deprecated-aliases.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/experimental.js +124 -0
- package/node_modules/@babel/types/lib/definitions/experimental.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/flow.js +495 -0
- package/node_modules/@babel/types/lib/definitions/flow.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/index.js +106 -0
- package/node_modules/@babel/types/lib/definitions/index.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/jsx.js +157 -0
- package/node_modules/@babel/types/lib/definitions/jsx.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/misc.js +31 -0
- package/node_modules/@babel/types/lib/definitions/misc.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/placeholders.js +27 -0
- package/node_modules/@babel/types/lib/definitions/placeholders.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/typescript.js +528 -0
- package/node_modules/@babel/types/lib/definitions/typescript.js.map +1 -0
- package/node_modules/@babel/types/lib/definitions/utils.js +296 -0
- package/node_modules/@babel/types/lib/definitions/utils.js.map +1 -0
- package/node_modules/@babel/types/lib/index-legacy.d.ts +2797 -0
- package/node_modules/@babel/types/lib/index.d.ts +3617 -0
- package/node_modules/@babel/types/lib/index.js +582 -0
- package/node_modules/@babel/types/lib/index.js.flow +2650 -0
- package/node_modules/@babel/types/lib/index.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js +15 -0
- package/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js +65 -0
- package/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/inherits.js +28 -0
- package/node_modules/@babel/types/lib/modifications/inherits.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js +17 -0
- package/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/removeProperties.js +24 -0
- package/node_modules/@babel/types/lib/modifications/removeProperties.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js +14 -0
- package/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js.map +1 -0
- package/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js +66 -0
- package/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js.map +1 -0
- package/node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js +48 -0
- package/node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js.map +1 -0
- package/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js +102 -0
- package/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js.map +1 -0
- package/node_modules/@babel/types/lib/retrievers/getFunctionName.js +63 -0
- package/node_modules/@babel/types/lib/retrievers/getFunctionName.js.map +1 -0
- package/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js +13 -0
- package/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js.map +1 -0
- package/node_modules/@babel/types/lib/traverse/traverse.js +50 -0
- package/node_modules/@babel/types/lib/traverse/traverse.js.map +1 -0
- package/node_modules/@babel/types/lib/traverse/traverseFast.js +40 -0
- package/node_modules/@babel/types/lib/traverse/traverseFast.js.map +1 -0
- package/node_modules/@babel/types/lib/utils/deprecationWarning.js +44 -0
- package/node_modules/@babel/types/lib/utils/deprecationWarning.js.map +1 -0
- package/node_modules/@babel/types/lib/utils/inherit.js +13 -0
- package/node_modules/@babel/types/lib/utils/inherit.js.map +1 -0
- package/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js +40 -0
- package/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js.map +1 -0
- package/node_modules/@babel/types/lib/utils/shallowEqual.js +17 -0
- package/node_modules/@babel/types/lib/utils/shallowEqual.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js +13 -0
- package/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/generated/index.js +2797 -0
- package/node_modules/@babel/types/lib/validators/generated/index.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/is.js +27 -0
- package/node_modules/@babel/types/lib/validators/is.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isBinding.js +27 -0
- package/node_modules/@babel/types/lib/validators/isBinding.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isBlockScoped.js +13 -0
- package/node_modules/@babel/types/lib/validators/isBlockScoped.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isImmutable.js +21 -0
- package/node_modules/@babel/types/lib/validators/isImmutable.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isLet.js +13 -0
- package/node_modules/@babel/types/lib/validators/isLet.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isNode.js +12 -0
- package/node_modules/@babel/types/lib/validators/isNode.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isNodesEquivalent.js +57 -0
- package/node_modules/@babel/types/lib/validators/isNodesEquivalent.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isPlaceholderType.js +15 -0
- package/node_modules/@babel/types/lib/validators/isPlaceholderType.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isReferenced.js +96 -0
- package/node_modules/@babel/types/lib/validators/isReferenced.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isScope.js +18 -0
- package/node_modules/@babel/types/lib/validators/isScope.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isSpecifierDefault.js +14 -0
- package/node_modules/@babel/types/lib/validators/isSpecifierDefault.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isType.js +17 -0
- package/node_modules/@babel/types/lib/validators/isType.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isValidES3Identifier.js +13 -0
- package/node_modules/@babel/types/lib/validators/isValidES3Identifier.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isValidIdentifier.js +18 -0
- package/node_modules/@babel/types/lib/validators/isValidIdentifier.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/isVar.js +15 -0
- package/node_modules/@babel/types/lib/validators/isVar.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/matchesPattern.js +44 -0
- package/node_modules/@babel/types/lib/validators/matchesPattern.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/react/isCompatTag.js +11 -0
- package/node_modules/@babel/types/lib/validators/react/isCompatTag.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/react/isReactComponent.js +11 -0
- package/node_modules/@babel/types/lib/validators/react/isReactComponent.js.map +1 -0
- package/node_modules/@babel/types/lib/validators/validate.js +42 -0
- package/node_modules/@babel/types/lib/validators/validate.js.map +1 -0
- package/node_modules/@babel/types/package.json +39 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +13 -2
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +128 -78
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +22 -9
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/reserved.ts +9 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/agent-bridge.ts +197 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/output-bridge.ts +96 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/schema-injection.ts +3 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/completion/handler.ts +95 -26
- package/node_modules/@code-yeongyu/senpi-codemode/src/completion/tool-bridge.ts +14 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/config/settings.ts +96 -8
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +92 -10
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +187 -27
- package/node_modules/@code-yeongyu/senpi-codemode/src/interpreters/detect.ts +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/prelude.jl +252 -48
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/runner.jl +263 -83
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +198 -149
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker-entry.js +23 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/inline-worker.ts +4 -175
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +38 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/local-module-loader.ts +108 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/prelude.ts +8 -6
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/rewrite-imports.ts +164 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/run-queue.ts +82 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +13 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-host.ts +117 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +307 -41
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel-contract.ts +32 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +232 -199
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +792 -79
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/process.ts +119 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +237 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/prelude.rb +234 -21
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/runner.rb +154 -51
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-contract.ts +22 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +214 -189
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-process.ts +174 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-queue.ts +101 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-run.ts +98 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/output/output-meta.ts +89 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/output/streaming-output.ts +296 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +107 -30
- package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/bridge-timeout.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/timeouts/idle-timeout.ts +8 -19
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +267 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +226 -211
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image.ts +274 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/json-tree.ts +247 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +828 -35
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/status-events.ts +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +30 -1
- package/node_modules/@earendil-works/pi-agent-core/README.md +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +4 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/README.md +4 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +89 -40
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +7 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +10 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +5 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +35 -4
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +7 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +4 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/compat.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +483 -61
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +13 -4
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +5 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +62 -5
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +32 -20
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +6 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +7 -8
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +20 -21
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +6 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.js +9 -6
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-auth.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts +100 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +64 -5
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +56 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +20 -9
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +77 -8
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +37 -24
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts +80 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +64 -8
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +25 -22
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +68 -83
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +45 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +49 -13
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +30 -7
- 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/dist/utils/deferred-tools.d.ts +9 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js +36 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.d.ts +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.js +35 -14
- package/node_modules/@earendil-works/pi-ai/dist/utils/estimate.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-tui/dist/components/image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.js +2 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +2 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js +2 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.js +6 -5
- package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +0 -9
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-text.d.ts +4 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-text.js +18 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-text.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/package.json +6 -6
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Text } from "@earendil-works/pi-tui";
|
|
2
|
+
import { getTextOutput as getRenderedTextOutput } from "../../../core/tools/render-utils.js";
|
|
3
|
+
import { stripAnsi } from "../../../utils/ansi.js";
|
|
4
|
+
import { theme } from "../theme/theme.js";
|
|
5
|
+
const FALLBACK_STRING_MAX_LENGTH = 160;
|
|
6
|
+
const FALLBACK_JSON_MAX_LENGTH = 2000;
|
|
7
|
+
function sanitizeFallbackString(value, maxLength = FALLBACK_STRING_MAX_LENGTH) {
|
|
8
|
+
const sanitized = stripAnsi(value)
|
|
9
|
+
.replace(/[\u0000-\u001f\u007f-\u009f]+/g, " ")
|
|
10
|
+
.replace(/\s+/g, " ")
|
|
11
|
+
.trim();
|
|
12
|
+
if (sanitized.length <= maxLength) {
|
|
13
|
+
return sanitized;
|
|
14
|
+
}
|
|
15
|
+
return `${sanitized.slice(0, Math.max(0, maxLength - 3))}...`;
|
|
16
|
+
}
|
|
17
|
+
function sanitizeFallbackJsonValue(_key, value) {
|
|
18
|
+
return typeof value === "string" ? sanitizeFallbackString(value) : value;
|
|
19
|
+
}
|
|
20
|
+
export function createToolCallFallback(toolName) {
|
|
21
|
+
return new Text(theme.fg("toolTitle", theme.bold(toolName)), 0, 0);
|
|
22
|
+
}
|
|
23
|
+
export function createToolResultFallback(result, showImages) {
|
|
24
|
+
const output = getRenderedTextOutput(result, showImages);
|
|
25
|
+
return output ? new Text(theme.fg("toolOutput", output), 0, 0) : undefined;
|
|
26
|
+
}
|
|
27
|
+
export function formatToolExecutionFallback(toolName, args, result, showImages) {
|
|
28
|
+
let text = theme.fg("toolTitle", theme.bold(sanitizeFallbackString(toolName)));
|
|
29
|
+
const content = JSON.stringify(args, sanitizeFallbackJsonValue, 2);
|
|
30
|
+
if (content) {
|
|
31
|
+
const boundedContent = content.length > FALLBACK_JSON_MAX_LENGTH ? `${content.slice(0, FALLBACK_JSON_MAX_LENGTH - 3)}...` : content;
|
|
32
|
+
text += `\n\n${boundedContent}`;
|
|
33
|
+
}
|
|
34
|
+
const output = getRenderedTextOutput(result, showImages);
|
|
35
|
+
if (output) {
|
|
36
|
+
text += `\n${sanitizeFallbackString(output, FALLBACK_JSON_MAX_LENGTH)}`;
|
|
37
|
+
}
|
|
38
|
+
return text;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tool-execution-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-fallback.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,SAAS,sBAAsB,CAAC,KAAa,EAAE,SAAS,GAAG,0BAA0B;IACpF,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;SAChC,OAAO,CAAC,gCAAgC,EAAE,GAAG,CAAC;SAC9C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IACT,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAc;IAC9D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACtD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACvC,MAAuC,EACvC,UAAmB;IAEnB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,QAAgB,EAChB,IAAa,EACb,MAAuC,EACvC,UAAmB;IAEnB,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IACnE,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,cAAc,GACnB,OAAO,CAAC,MAAM,GAAG,wBAAwB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9G,IAAI,IAAI,OAAO,cAAc,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,IAAI,KAAK,sBAAsB,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["import { type Component, Text } from \"@earendil-works/pi-tui\";\nimport { getTextOutput as getRenderedTextOutput } from \"../../../core/tools/render-utils.ts\";\nimport { stripAnsi } from \"../../../utils/ansi.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport type { ToolExecutionResult } from \"./tool-execution-types.ts\";\n\nconst FALLBACK_STRING_MAX_LENGTH = 160;\nconst FALLBACK_JSON_MAX_LENGTH = 2000;\n\nfunction sanitizeFallbackString(value: string, maxLength = FALLBACK_STRING_MAX_LENGTH): string {\n\tconst sanitized = stripAnsi(value)\n\t\t.replace(/[\\u0000-\\u001f\\u007f-\\u009f]+/g, \" \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (sanitized.length <= maxLength) {\n\t\treturn sanitized;\n\t}\n\treturn `${sanitized.slice(0, Math.max(0, maxLength - 3))}...`;\n}\n\nfunction sanitizeFallbackJsonValue(_key: string, value: unknown): unknown {\n\treturn typeof value === \"string\" ? sanitizeFallbackString(value) : value;\n}\n\nexport function createToolCallFallback(toolName: string): Component {\n\treturn new Text(theme.fg(\"toolTitle\", theme.bold(toolName)), 0, 0);\n}\n\nexport function createToolResultFallback(\n\tresult: ToolExecutionResult | undefined,\n\tshowImages: boolean,\n): Component | undefined {\n\tconst output = getRenderedTextOutput(result, showImages);\n\treturn output ? new Text(theme.fg(\"toolOutput\", output), 0, 0) : undefined;\n}\n\nexport function formatToolExecutionFallback(\n\ttoolName: string,\n\targs: unknown,\n\tresult: ToolExecutionResult | undefined,\n\tshowImages: boolean,\n): string {\n\tlet text = theme.fg(\"toolTitle\", theme.bold(sanitizeFallbackString(toolName)));\n\tconst content = JSON.stringify(args, sanitizeFallbackJsonValue, 2);\n\tif (content) {\n\t\tconst boundedContent =\n\t\t\tcontent.length > FALLBACK_JSON_MAX_LENGTH ? `${content.slice(0, FALLBACK_JSON_MAX_LENGTH - 3)}...` : content;\n\t\ttext += `\\n\\n${boundedContent}`;\n\t}\n\tconst output = getRenderedTextOutput(result, showImages);\n\tif (output) {\n\t\ttext += `\\n${sanitizeFallbackString(output, FALLBACK_JSON_MAX_LENGTH)}`;\n\t}\n\treturn text;\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Container } from "@earendil-works/pi-tui";
|
|
2
|
+
import type { ToolExecutionResult } from "./tool-execution-types.ts";
|
|
3
|
+
export type ToolExecutionImageOptions = {
|
|
4
|
+
readonly showImages: boolean;
|
|
5
|
+
readonly maxWidthCells: number;
|
|
6
|
+
readonly showRendererFallback: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare class ToolExecutionImages extends Container {
|
|
9
|
+
private readonly onAsyncChange;
|
|
10
|
+
private result?;
|
|
11
|
+
private resultGeneration;
|
|
12
|
+
private readonly convertedImages;
|
|
13
|
+
private options;
|
|
14
|
+
constructor(onAsyncChange: () => void);
|
|
15
|
+
updateOptions(options: ToolExecutionImageOptions): void;
|
|
16
|
+
updateResult(result: ToolExecutionResult): void;
|
|
17
|
+
private imageBlocks;
|
|
18
|
+
private pruneConvertedImages;
|
|
19
|
+
private maybeConvertImagesForKitty;
|
|
20
|
+
private rebuild;
|
|
21
|
+
private addImageComponent;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=tool-execution-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-images.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,SAAS,EAMT,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAUrE,MAAM,MAAM,yBAAyB,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,CAAsB;IACrC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,OAAO,CAIb;IAEF,YAAY,aAAa,EAAE,MAAM,IAAI,EAGpC;IAED,aAAa,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,CActD;IAED,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAM9C;IAED,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,0BAA0B;IAyBlC,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,iBAAiB;CAIzB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Container, getCapabilities, Image, Spacer, sanitizeTerminalLabel, Text, } from "@earendil-works/pi-tui";
|
|
2
|
+
import { convertToPng } from "../../../utils/image-convert.js";
|
|
3
|
+
import { theme } from "../theme/theme.js";
|
|
4
|
+
export class ToolExecutionImages extends Container {
|
|
5
|
+
constructor(onAsyncChange) {
|
|
6
|
+
super();
|
|
7
|
+
this.resultGeneration = 0;
|
|
8
|
+
this.convertedImages = new Map();
|
|
9
|
+
this.options = {
|
|
10
|
+
showImages: true,
|
|
11
|
+
maxWidthCells: 60,
|
|
12
|
+
showRendererFallback: false,
|
|
13
|
+
};
|
|
14
|
+
this.onAsyncChange = onAsyncChange;
|
|
15
|
+
}
|
|
16
|
+
updateOptions(options) {
|
|
17
|
+
const normalizedOptions = {
|
|
18
|
+
...options,
|
|
19
|
+
maxWidthCells: Math.max(1, Math.floor(options.maxWidthCells)),
|
|
20
|
+
};
|
|
21
|
+
if (this.options.showImages === normalizedOptions.showImages &&
|
|
22
|
+
this.options.maxWidthCells === normalizedOptions.maxWidthCells &&
|
|
23
|
+
this.options.showRendererFallback === normalizedOptions.showRendererFallback) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.options = normalizedOptions;
|
|
27
|
+
this.rebuild();
|
|
28
|
+
}
|
|
29
|
+
updateResult(result) {
|
|
30
|
+
this.resultGeneration += 1;
|
|
31
|
+
this.result = result;
|
|
32
|
+
this.pruneConvertedImages();
|
|
33
|
+
this.rebuild();
|
|
34
|
+
this.maybeConvertImagesForKitty();
|
|
35
|
+
}
|
|
36
|
+
imageBlocks() {
|
|
37
|
+
return this.result?.content.filter((part) => part.type === "image") ?? [];
|
|
38
|
+
}
|
|
39
|
+
pruneConvertedImages() {
|
|
40
|
+
const imageBlocks = this.imageBlocks();
|
|
41
|
+
for (const [index, converted] of this.convertedImages) {
|
|
42
|
+
const image = imageBlocks[index];
|
|
43
|
+
if (!image || image.data !== converted.sourceData || image.mimeType !== converted.sourceMimeType) {
|
|
44
|
+
this.convertedImages.delete(index);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
maybeConvertImagesForKitty() {
|
|
49
|
+
if (getCapabilities().images !== "kitty" || !this.result)
|
|
50
|
+
return;
|
|
51
|
+
const generation = this.resultGeneration;
|
|
52
|
+
const imageBlocks = this.imageBlocks();
|
|
53
|
+
for (let index = 0; index < imageBlocks.length; index += 1) {
|
|
54
|
+
const image = imageBlocks[index];
|
|
55
|
+
if (!image?.data || !image.mimeType || image.mimeType === "image/png")
|
|
56
|
+
continue;
|
|
57
|
+
const sourceData = image.data;
|
|
58
|
+
const sourceMimeType = image.mimeType;
|
|
59
|
+
const cached = this.convertedImages.get(index);
|
|
60
|
+
if (cached?.sourceData === sourceData && cached.sourceMimeType === sourceMimeType)
|
|
61
|
+
continue;
|
|
62
|
+
convertToPng(sourceData, sourceMimeType).then((converted) => {
|
|
63
|
+
if (!converted || this.resultGeneration !== generation)
|
|
64
|
+
return;
|
|
65
|
+
const currentImage = this.imageBlocks()[index];
|
|
66
|
+
if (!currentImage || currentImage.data !== sourceData || currentImage.mimeType !== sourceMimeType)
|
|
67
|
+
return;
|
|
68
|
+
this.convertedImages.set(index, { sourceData, sourceMimeType, converted });
|
|
69
|
+
this.rebuild();
|
|
70
|
+
this.onAsyncChange();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
rebuild() {
|
|
75
|
+
this.clear();
|
|
76
|
+
const capabilities = getCapabilities();
|
|
77
|
+
if (!this.options.showImages || !capabilities.images)
|
|
78
|
+
return;
|
|
79
|
+
const imageBlocks = this.imageBlocks();
|
|
80
|
+
for (let index = 0; index < imageBlocks.length; index += 1) {
|
|
81
|
+
const image = imageBlocks[index];
|
|
82
|
+
if (!image?.data || !image.mimeType)
|
|
83
|
+
continue;
|
|
84
|
+
const cached = this.convertedImages.get(index);
|
|
85
|
+
const converted = cached?.sourceData === image.data && cached.sourceMimeType === image.mimeType
|
|
86
|
+
? cached.converted
|
|
87
|
+
: undefined;
|
|
88
|
+
const imageData = converted?.data ?? image.data;
|
|
89
|
+
const imageMimeType = converted?.mimeType ?? image.mimeType;
|
|
90
|
+
if (capabilities.images === "kitty" && imageMimeType !== "image/png") {
|
|
91
|
+
if (this.options.showRendererFallback) {
|
|
92
|
+
this.addImageComponent(new Text(theme.fg("toolOutput", `[image: ${sanitizeTerminalLabel(imageMimeType)}]`), 0, 0));
|
|
93
|
+
}
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
this.addImageComponent(new Image(imageData, imageMimeType, { fallbackColor: (text) => theme.fg("toolOutput", text) }, { maxWidthCells: this.options.maxWidthCells }));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
addImageComponent(component) {
|
|
100
|
+
this.addChild(new Spacer(1));
|
|
101
|
+
this.addChild(component);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=tool-execution-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-images.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,IAAI,GACJ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAiB1C,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAWjD,YAAY,aAAyB;QACpC,KAAK,EAAE,CAAC;QATD,qBAAgB,GAAG,CAAC,CAAC;QACZ,oBAAe,GAAG,IAAI,GAAG,EAA+B,CAAC;QAClE,YAAO,GAA8B;YAC5C,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,EAAE;YACjB,oBAAoB,EAAE,KAAK;SAC3B,CAAC;QAID,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,OAAkC;QAC/C,MAAM,iBAAiB,GAAG;YACzB,GAAG,OAAO;YACV,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SAC7D,CAAC;QACF,IACC,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,iBAAiB,CAAC,UAAU;YACxD,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,iBAAiB,CAAC,aAAa;YAC9D,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,iBAAiB,CAAC,oBAAoB,EAC3E,CAAC;YACF,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,MAA2B;QACvC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACnC,CAAC;IAEO,WAAW;QAClB,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;IAEO,oBAAoB;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;gBAClG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,0BAA0B;QACjC,IAAI,eAAe,EAAE,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW;gBAAE,SAAS;YAChF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;YAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,UAAU,KAAK,UAAU,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc;gBAAE,SAAS;YAE5F,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU;oBAAE,OAAO;gBAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,UAAU,IAAI,YAAY,CAAC,QAAQ,KAAK,cAAc;oBAAE,OAAO;gBAE1G,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAEO,OAAO;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;QAE7D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE,SAAS;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,SAAS,GACd,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,QAAQ;gBAC5E,CAAC,CAAC,MAAM,CAAC,SAAS;gBAClB,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,SAAS,GAAG,SAAS,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;YAChD,MAAM,aAAa,GAAG,SAAS,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;YAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACtE,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;oBACvC,IAAI,CAAC,iBAAiB,CACrB,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAC1F,CAAC;gBACH,CAAC;gBACD,SAAS;YACV,CAAC;YAED,IAAI,CAAC,iBAAiB,CACrB,IAAI,KAAK,CACR,SAAS,EACT,aAAa,EACb,EAAE,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EACjE,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAC7C,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,SAAoB;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;CACD","sourcesContent":["import {\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\tImage,\n\tSpacer,\n\tsanitizeTerminalLabel,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport { convertToPng } from \"../../../utils/image-convert.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport type { ToolExecutionResult } from \"./tool-execution-types.ts\";\n\ntype ConvertedImage = NonNullable<Awaited<ReturnType<typeof convertToPng>>>;\n\ntype ConvertedImageEntry = {\n\treadonly sourceData: string;\n\treadonly sourceMimeType: string;\n\treadonly converted: ConvertedImage;\n};\n\nexport type ToolExecutionImageOptions = {\n\treadonly showImages: boolean;\n\treadonly maxWidthCells: number;\n\treadonly showRendererFallback: boolean;\n};\n\nexport class ToolExecutionImages extends Container {\n\tprivate readonly onAsyncChange: () => void;\n\tprivate result?: ToolExecutionResult;\n\tprivate resultGeneration = 0;\n\tprivate readonly convertedImages = new Map<number, ConvertedImageEntry>();\n\tprivate options: ToolExecutionImageOptions = {\n\t\tshowImages: true,\n\t\tmaxWidthCells: 60,\n\t\tshowRendererFallback: false,\n\t};\n\n\tconstructor(onAsyncChange: () => void) {\n\t\tsuper();\n\t\tthis.onAsyncChange = onAsyncChange;\n\t}\n\n\tupdateOptions(options: ToolExecutionImageOptions): void {\n\t\tconst normalizedOptions = {\n\t\t\t...options,\n\t\t\tmaxWidthCells: Math.max(1, Math.floor(options.maxWidthCells)),\n\t\t};\n\t\tif (\n\t\t\tthis.options.showImages === normalizedOptions.showImages &&\n\t\t\tthis.options.maxWidthCells === normalizedOptions.maxWidthCells &&\n\t\t\tthis.options.showRendererFallback === normalizedOptions.showRendererFallback\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis.options = normalizedOptions;\n\t\tthis.rebuild();\n\t}\n\n\tupdateResult(result: ToolExecutionResult): void {\n\t\tthis.resultGeneration += 1;\n\t\tthis.result = result;\n\t\tthis.pruneConvertedImages();\n\t\tthis.rebuild();\n\t\tthis.maybeConvertImagesForKitty();\n\t}\n\n\tprivate imageBlocks() {\n\t\treturn this.result?.content.filter((part) => part.type === \"image\") ?? [];\n\t}\n\n\tprivate pruneConvertedImages(): void {\n\t\tconst imageBlocks = this.imageBlocks();\n\t\tfor (const [index, converted] of this.convertedImages) {\n\t\t\tconst image = imageBlocks[index];\n\t\t\tif (!image || image.data !== converted.sourceData || image.mimeType !== converted.sourceMimeType) {\n\t\t\t\tthis.convertedImages.delete(index);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate maybeConvertImagesForKitty(): void {\n\t\tif (getCapabilities().images !== \"kitty\" || !this.result) return;\n\n\t\tconst generation = this.resultGeneration;\n\t\tconst imageBlocks = this.imageBlocks();\n\t\tfor (let index = 0; index < imageBlocks.length; index += 1) {\n\t\t\tconst image = imageBlocks[index];\n\t\t\tif (!image?.data || !image.mimeType || image.mimeType === \"image/png\") continue;\n\t\t\tconst sourceData = image.data;\n\t\t\tconst sourceMimeType = image.mimeType;\n\t\t\tconst cached = this.convertedImages.get(index);\n\t\t\tif (cached?.sourceData === sourceData && cached.sourceMimeType === sourceMimeType) continue;\n\n\t\t\tconvertToPng(sourceData, sourceMimeType).then((converted) => {\n\t\t\t\tif (!converted || this.resultGeneration !== generation) return;\n\t\t\t\tconst currentImage = this.imageBlocks()[index];\n\t\t\t\tif (!currentImage || currentImage.data !== sourceData || currentImage.mimeType !== sourceMimeType) return;\n\n\t\t\t\tthis.convertedImages.set(index, { sourceData, sourceMimeType, converted });\n\t\t\t\tthis.rebuild();\n\t\t\t\tthis.onAsyncChange();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate rebuild(): void {\n\t\tthis.clear();\n\t\tconst capabilities = getCapabilities();\n\t\tif (!this.options.showImages || !capabilities.images) return;\n\n\t\tconst imageBlocks = this.imageBlocks();\n\t\tfor (let index = 0; index < imageBlocks.length; index += 1) {\n\t\t\tconst image = imageBlocks[index];\n\t\t\tif (!image?.data || !image.mimeType) continue;\n\t\t\tconst cached = this.convertedImages.get(index);\n\t\t\tconst converted =\n\t\t\t\tcached?.sourceData === image.data && cached.sourceMimeType === image.mimeType\n\t\t\t\t\t? cached.converted\n\t\t\t\t\t: undefined;\n\t\t\tconst imageData = converted?.data ?? image.data;\n\t\t\tconst imageMimeType = converted?.mimeType ?? image.mimeType;\n\t\t\tif (capabilities.images === \"kitty\" && imageMimeType !== \"image/png\") {\n\t\t\t\tif (this.options.showRendererFallback) {\n\t\t\t\t\tthis.addImageComponent(\n\t\t\t\t\t\tnew Text(theme.fg(\"toolOutput\", `[image: ${sanitizeTerminalLabel(imageMimeType)}]`), 0, 0),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.addImageComponent(\n\t\t\t\tnew Image(\n\t\t\t\t\timageData,\n\t\t\t\t\timageMimeType,\n\t\t\t\t\t{ fallbackColor: (text: string) => theme.fg(\"toolOutput\", text) },\n\t\t\t\t\t{ maxWidthCells: this.options.maxWidthCells },\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate addImageComponent(component: Component): void {\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(component);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Container } from "@earendil-works/pi-tui";
|
|
2
|
+
import type { ToolExecutionIdentity, ToolExecutionRenderState } from "./tool-execution-types.ts";
|
|
3
|
+
export declare class ToolExecutionRenderer extends Container {
|
|
4
|
+
private readonly identity;
|
|
5
|
+
private readonly builtInDefinition;
|
|
6
|
+
private readonly contentBox;
|
|
7
|
+
private readonly contentText;
|
|
8
|
+
private readonly selfRenderContainer;
|
|
9
|
+
private readonly rendererState;
|
|
10
|
+
private readonly onInvalidate;
|
|
11
|
+
private state;
|
|
12
|
+
private callRendererComponent?;
|
|
13
|
+
private resultRendererComponent?;
|
|
14
|
+
constructor(identity: ToolExecutionIdentity, state: ToolExecutionRenderState, onInvalidate: () => void);
|
|
15
|
+
get hasRendererDefinition(): boolean;
|
|
16
|
+
get hasResultRenderer(): boolean;
|
|
17
|
+
get renderShell(): "default" | "self";
|
|
18
|
+
update(state: ToolExecutionRenderState): void;
|
|
19
|
+
private getCallRenderer;
|
|
20
|
+
private getResultRenderer;
|
|
21
|
+
private getRenderContext;
|
|
22
|
+
private renderCall;
|
|
23
|
+
private renderResult;
|
|
24
|
+
private addRendererComponent;
|
|
25
|
+
private getRendererComponent;
|
|
26
|
+
private setRendererComponent;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=tool-execution-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-renderer.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,SAAS,EAAyB,MAAM,wBAAwB,CAAC;AAS/F,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAuB,MAAM,2BAA2B,CAAC;AAMtH,qBAAa,qBAAsB,SAAQ,SAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IACxD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,qBAAqB,CAAC,CAAY;IAC1C,OAAO,CAAC,uBAAuB,CAAC,CAAY;IAE5C,YAAY,QAAQ,EAAE,qBAAqB,EAAE,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,IAAI,EAerG;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,WAAW,IAAI,SAAS,GAAG,MAAM,CAGpC;IAED,MAAM,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAqB5C;IAED,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,oBAAoB;CAI5B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Box, Container, getCapabilities, Text } from "@earendil-works/pi-tui";
|
|
2
|
+
import { createAllToolDefinitions } from "../../../core/tools/index.js";
|
|
3
|
+
import { theme } from "../theme/theme.js";
|
|
4
|
+
import { createToolCallFallback, createToolResultFallback, formatToolExecutionFallback, } from "./tool-execution-fallback.js";
|
|
5
|
+
import { isComponent, ToolRendererBoundary } from "./tool-renderer-boundary.js";
|
|
6
|
+
export class ToolExecutionRenderer extends Container {
|
|
7
|
+
constructor(identity, state, onInvalidate) {
|
|
8
|
+
super();
|
|
9
|
+
this.selfRenderContainer = new Container();
|
|
10
|
+
this.rendererState = {};
|
|
11
|
+
this.identity = identity;
|
|
12
|
+
this.state = state;
|
|
13
|
+
this.onInvalidate = onInvalidate;
|
|
14
|
+
this.builtInDefinition = createAllToolDefinitions(identity.cwd)[identity.toolName];
|
|
15
|
+
this.contentBox = new Box(1, 1, (text) => theme.bg("toolPendingBg", text));
|
|
16
|
+
this.contentText = new Text("", 1, 1, (text) => theme.bg("toolPendingBg", text));
|
|
17
|
+
this.addChild(this.hasRendererDefinition
|
|
18
|
+
? this.renderShell === "self"
|
|
19
|
+
? this.selfRenderContainer
|
|
20
|
+
: this.contentBox
|
|
21
|
+
: this.contentText);
|
|
22
|
+
}
|
|
23
|
+
get hasRendererDefinition() {
|
|
24
|
+
return this.builtInDefinition !== undefined || this.identity.toolDefinition !== undefined;
|
|
25
|
+
}
|
|
26
|
+
get hasResultRenderer() {
|
|
27
|
+
return this.getResultRenderer() !== undefined;
|
|
28
|
+
}
|
|
29
|
+
get renderShell() {
|
|
30
|
+
const customShell = this.identity.toolDefinition?.renderShell;
|
|
31
|
+
return customShell ?? this.builtInDefinition?.renderShell ?? "default";
|
|
32
|
+
}
|
|
33
|
+
update(state) {
|
|
34
|
+
this.state = state;
|
|
35
|
+
const background = state.isPartial
|
|
36
|
+
? (text) => theme.bg("toolPendingBg", text)
|
|
37
|
+
: state.result?.isError
|
|
38
|
+
? (text) => theme.bg("toolErrorBg", text)
|
|
39
|
+
: (text) => theme.bg("toolSuccessBg", text);
|
|
40
|
+
if (!this.hasRendererDefinition) {
|
|
41
|
+
this.contentText.setCustomBgFn(background);
|
|
42
|
+
this.contentText.setText(formatToolExecutionFallback(this.identity.toolName, state.args, state.result, state.showImages));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const container = this.renderShell === "self" ? this.selfRenderContainer : this.contentBox;
|
|
46
|
+
if (container instanceof Box)
|
|
47
|
+
container.setBgFn(background);
|
|
48
|
+
container.detachAll();
|
|
49
|
+
this.renderCall(container);
|
|
50
|
+
if (state.result)
|
|
51
|
+
this.renderResult(container, state.result);
|
|
52
|
+
}
|
|
53
|
+
getCallRenderer() {
|
|
54
|
+
return this.identity.toolDefinition?.renderCall ?? this.builtInDefinition?.renderCall;
|
|
55
|
+
}
|
|
56
|
+
getResultRenderer() {
|
|
57
|
+
return this.identity.toolDefinition?.renderResult ?? this.builtInDefinition?.renderResult;
|
|
58
|
+
}
|
|
59
|
+
getRenderContext(lastComponent) {
|
|
60
|
+
return {
|
|
61
|
+
args: this.state.args,
|
|
62
|
+
toolCallId: this.identity.toolCallId,
|
|
63
|
+
invalidate: this.onInvalidate,
|
|
64
|
+
lastComponent,
|
|
65
|
+
state: this.rendererState,
|
|
66
|
+
cwd: this.identity.cwd,
|
|
67
|
+
executionStarted: this.state.executionStarted,
|
|
68
|
+
argsComplete: this.state.argsComplete,
|
|
69
|
+
isPartial: this.state.isPartial,
|
|
70
|
+
expanded: this.state.expanded,
|
|
71
|
+
showImages: this.state.showImages,
|
|
72
|
+
imageProtocol: getCapabilities().images,
|
|
73
|
+
isError: this.state.result?.isError ?? false,
|
|
74
|
+
spinnerFrame: this.state.spinnerFrame,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
renderCall(container) {
|
|
78
|
+
const fallback = createToolCallFallback(this.identity.toolName);
|
|
79
|
+
const renderer = this.getCallRenderer();
|
|
80
|
+
if (!renderer) {
|
|
81
|
+
container.addChild(fallback);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const component = renderer(this.state.args, theme, this.getRenderContext(this.callRendererComponent));
|
|
86
|
+
this.addRendererComponent(container, "call", component, fallback);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
this.callRendererComponent = undefined;
|
|
90
|
+
container.addChild(fallback);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
renderResult(container, result) {
|
|
94
|
+
const fallback = createToolResultFallback(result, this.state.showImages);
|
|
95
|
+
const renderer = this.getResultRenderer();
|
|
96
|
+
if (!renderer) {
|
|
97
|
+
if (fallback)
|
|
98
|
+
container.addChild(fallback);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const agentResult = { content: result.content, details: result.details };
|
|
103
|
+
const component = renderer(agentResult, { expanded: this.state.expanded, isPartial: this.state.isPartial }, theme, this.getRenderContext(this.resultRendererComponent));
|
|
104
|
+
this.addRendererComponent(container, "result", component, fallback);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
this.resultRendererComponent = undefined;
|
|
108
|
+
if (fallback)
|
|
109
|
+
container.addChild(fallback);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
addRendererComponent(container, slot, value, fallback) {
|
|
113
|
+
if (!isComponent(value)) {
|
|
114
|
+
this.setRendererComponent(slot, undefined);
|
|
115
|
+
if (fallback)
|
|
116
|
+
container.addChild(fallback);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.setRendererComponent(slot, value);
|
|
120
|
+
container.addChild(new ToolRendererBoundary(value, fallback, () => {
|
|
121
|
+
if (this.getRendererComponent(slot) === value)
|
|
122
|
+
this.setRendererComponent(slot, undefined);
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
getRendererComponent(slot) {
|
|
126
|
+
return slot === "call" ? this.callRendererComponent : this.resultRendererComponent;
|
|
127
|
+
}
|
|
128
|
+
setRendererComponent(slot, component) {
|
|
129
|
+
if (slot === "call")
|
|
130
|
+
this.callRendererComponent = component;
|
|
131
|
+
else
|
|
132
|
+
this.resultRendererComponent = component;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=tool-execution-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-renderer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { Box, type Component, Container, getCapabilities, Text } from \"@earendil-works/pi-tui\";\nimport type { ToolRenderContext } from \"../../../core/extensions/types.ts\";\nimport { createAllToolDefinitions, type ToolDef, type ToolName } from \"../../../core/tools/index.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport {\n\tcreateToolCallFallback,\n\tcreateToolResultFallback,\n\tformatToolExecutionFallback,\n} from \"./tool-execution-fallback.ts\";\nimport type { ToolExecutionIdentity, ToolExecutionRenderState, ToolExecutionResult } from \"./tool-execution-types.ts\";\nimport { isComponent, ToolRendererBoundary } from \"./tool-renderer-boundary.ts\";\n\ntype RenderContainer = Box | Container;\ntype RendererSlot = \"call\" | \"result\";\n\nexport class ToolExecutionRenderer extends Container {\n\tprivate readonly identity: ToolExecutionIdentity;\n\tprivate readonly builtInDefinition: ToolDef | undefined;\n\tprivate readonly contentBox: Box;\n\tprivate readonly contentText: Text;\n\tprivate readonly selfRenderContainer = new Container();\n\tprivate readonly rendererState: Record<string, unknown> = {};\n\tprivate readonly onInvalidate: () => void;\n\tprivate state: ToolExecutionRenderState;\n\tprivate callRendererComponent?: Component;\n\tprivate resultRendererComponent?: Component;\n\n\tconstructor(identity: ToolExecutionIdentity, state: ToolExecutionRenderState, onInvalidate: () => void) {\n\t\tsuper();\n\t\tthis.identity = identity;\n\t\tthis.state = state;\n\t\tthis.onInvalidate = onInvalidate;\n\t\tthis.builtInDefinition = createAllToolDefinitions(identity.cwd)[identity.toolName as ToolName];\n\t\tthis.contentBox = new Box(1, 1, (text: string) => theme.bg(\"toolPendingBg\", text));\n\t\tthis.contentText = new Text(\"\", 1, 1, (text: string) => theme.bg(\"toolPendingBg\", text));\n\t\tthis.addChild(\n\t\t\tthis.hasRendererDefinition\n\t\t\t\t? this.renderShell === \"self\"\n\t\t\t\t\t? this.selfRenderContainer\n\t\t\t\t\t: this.contentBox\n\t\t\t\t: this.contentText,\n\t\t);\n\t}\n\n\tget hasRendererDefinition(): boolean {\n\t\treturn this.builtInDefinition !== undefined || this.identity.toolDefinition !== undefined;\n\t}\n\n\tget hasResultRenderer(): boolean {\n\t\treturn this.getResultRenderer() !== undefined;\n\t}\n\n\tget renderShell(): \"default\" | \"self\" {\n\t\tconst customShell = this.identity.toolDefinition?.renderShell;\n\t\treturn customShell ?? this.builtInDefinition?.renderShell ?? \"default\";\n\t}\n\n\tupdate(state: ToolExecutionRenderState): void {\n\t\tthis.state = state;\n\t\tconst background = state.isPartial\n\t\t\t? (text: string) => theme.bg(\"toolPendingBg\", text)\n\t\t\t: state.result?.isError\n\t\t\t\t? (text: string) => theme.bg(\"toolErrorBg\", text)\n\t\t\t\t: (text: string) => theme.bg(\"toolSuccessBg\", text);\n\n\t\tif (!this.hasRendererDefinition) {\n\t\t\tthis.contentText.setCustomBgFn(background);\n\t\t\tthis.contentText.setText(\n\t\t\t\tformatToolExecutionFallback(this.identity.toolName, state.args, state.result, state.showImages),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst container = this.renderShell === \"self\" ? this.selfRenderContainer : this.contentBox;\n\t\tif (container instanceof Box) container.setBgFn(background);\n\t\tcontainer.detachAll();\n\t\tthis.renderCall(container);\n\t\tif (state.result) this.renderResult(container, state.result);\n\t}\n\n\tprivate getCallRenderer(): ToolDef[\"renderCall\"] | undefined {\n\t\treturn this.identity.toolDefinition?.renderCall ?? this.builtInDefinition?.renderCall;\n\t}\n\n\tprivate getResultRenderer(): ToolDef[\"renderResult\"] | undefined {\n\t\treturn this.identity.toolDefinition?.renderResult ?? this.builtInDefinition?.renderResult;\n\t}\n\n\tprivate getRenderContext(lastComponent: Component | undefined): ToolRenderContext<Record<string, unknown>, unknown> {\n\t\treturn {\n\t\t\targs: this.state.args,\n\t\t\ttoolCallId: this.identity.toolCallId,\n\t\t\tinvalidate: this.onInvalidate,\n\t\t\tlastComponent,\n\t\t\tstate: this.rendererState,\n\t\t\tcwd: this.identity.cwd,\n\t\t\texecutionStarted: this.state.executionStarted,\n\t\t\targsComplete: this.state.argsComplete,\n\t\t\tisPartial: this.state.isPartial,\n\t\t\texpanded: this.state.expanded,\n\t\t\tshowImages: this.state.showImages,\n\t\t\timageProtocol: getCapabilities().images,\n\t\t\tisError: this.state.result?.isError ?? false,\n\t\t\tspinnerFrame: this.state.spinnerFrame,\n\t\t};\n\t}\n\n\tprivate renderCall(container: RenderContainer): void {\n\t\tconst fallback = createToolCallFallback(this.identity.toolName);\n\t\tconst renderer = this.getCallRenderer();\n\t\tif (!renderer) {\n\t\t\tcontainer.addChild(fallback);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst component = renderer(this.state.args, theme, this.getRenderContext(this.callRendererComponent));\n\t\t\tthis.addRendererComponent(container, \"call\", component, fallback);\n\t\t} catch {\n\t\t\tthis.callRendererComponent = undefined;\n\t\t\tcontainer.addChild(fallback);\n\t\t}\n\t}\n\n\tprivate renderResult(container: RenderContainer, result: ToolExecutionResult): void {\n\t\tconst fallback = createToolResultFallback(result, this.state.showImages);\n\t\tconst renderer = this.getResultRenderer();\n\t\tif (!renderer) {\n\t\t\tif (fallback) container.addChild(fallback);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst agentResult = { content: result.content, details: result.details } satisfies AgentToolResult<unknown>;\n\t\t\tconst component = renderer(\n\t\t\t\tagentResult,\n\t\t\t\t{ expanded: this.state.expanded, isPartial: this.state.isPartial },\n\t\t\t\ttheme,\n\t\t\t\tthis.getRenderContext(this.resultRendererComponent),\n\t\t\t);\n\t\t\tthis.addRendererComponent(container, \"result\", component, fallback);\n\t\t} catch {\n\t\t\tthis.resultRendererComponent = undefined;\n\t\t\tif (fallback) container.addChild(fallback);\n\t\t}\n\t}\n\n\tprivate addRendererComponent(\n\t\tcontainer: RenderContainer,\n\t\tslot: RendererSlot,\n\t\tvalue: unknown,\n\t\tfallback: Component | undefined,\n\t): void {\n\t\tif (!isComponent(value)) {\n\t\t\tthis.setRendererComponent(slot, undefined);\n\t\t\tif (fallback) container.addChild(fallback);\n\t\t\treturn;\n\t\t}\n\t\tthis.setRendererComponent(slot, value);\n\t\tcontainer.addChild(\n\t\t\tnew ToolRendererBoundary(value, fallback, () => {\n\t\t\t\tif (this.getRendererComponent(slot) === value) this.setRendererComponent(slot, undefined);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate getRendererComponent(slot: RendererSlot): Component | undefined {\n\t\treturn slot === \"call\" ? this.callRendererComponent : this.resultRendererComponent;\n\t}\n\n\tprivate setRendererComponent(slot: RendererSlot, component: Component | undefined): void {\n\t\tif (slot === \"call\") this.callRendererComponent = component;\n\t\telse this.resultRendererComponent = component;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import type { ToolDef } from "../../../core/tools/index.ts";
|
|
3
|
+
export type ToolExecutionResult = Omit<AgentToolResult<unknown>, "details"> & {
|
|
4
|
+
readonly details?: unknown;
|
|
5
|
+
readonly isError: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type ToolExecutionIdentity = {
|
|
8
|
+
readonly toolName: string;
|
|
9
|
+
readonly toolCallId: string;
|
|
10
|
+
readonly cwd: string;
|
|
11
|
+
readonly toolDefinition: ToolDef | undefined;
|
|
12
|
+
};
|
|
13
|
+
export type ToolExecutionRenderState = {
|
|
14
|
+
readonly args: unknown;
|
|
15
|
+
readonly executionStarted: boolean;
|
|
16
|
+
readonly argsComplete: boolean;
|
|
17
|
+
readonly isPartial: boolean;
|
|
18
|
+
readonly expanded: boolean;
|
|
19
|
+
readonly showImages: boolean;
|
|
20
|
+
readonly spinnerFrame: number | undefined;
|
|
21
|
+
readonly result: ToolExecutionResult | undefined;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=tool-execution-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,GAAG;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACjD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ToolDef } from \"../../../core/tools/index.ts\";\n\nexport type ToolExecutionResult = Omit<AgentToolResult<unknown>, \"details\"> & {\n\treadonly details?: unknown;\n\treadonly isError: boolean;\n};\n\nexport type ToolExecutionIdentity = {\n\treadonly toolName: string;\n\treadonly toolCallId: string;\n\treadonly cwd: string;\n\treadonly toolDefinition: ToolDef | undefined;\n};\n\nexport type ToolExecutionRenderState = {\n\treadonly args: unknown;\n\treadonly executionStarted: boolean;\n\treadonly argsComplete: boolean;\n\treadonly isPartial: boolean;\n\treadonly expanded: boolean;\n\treadonly showImages: boolean;\n\treadonly spinnerFrame: number | undefined;\n\treadonly result: ToolExecutionResult | undefined;\n};\n"]}
|
|
@@ -1,72 +1,46 @@
|
|
|
1
|
-
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
2
1
|
import { Container, type TUI } from "@earendil-works/pi-tui";
|
|
3
|
-
import type {
|
|
2
|
+
import type { ToolDef } from "../../../core/tools/index.ts";
|
|
3
|
+
import type { ToolExecutionResult } from "./tool-execution-types.ts";
|
|
4
4
|
export interface ToolExecutionOptions {
|
|
5
5
|
showImages?: boolean;
|
|
6
6
|
imageWidthCells?: number;
|
|
7
7
|
}
|
|
8
|
-
type ToolExecutionResult = Omit<AgentToolResult<unknown>, "details"> & {
|
|
9
|
-
details?: unknown;
|
|
10
|
-
isError: boolean;
|
|
11
|
-
};
|
|
12
8
|
export declare class ToolExecutionComponent extends Container {
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private contentText;
|
|
18
|
-
private selfRenderContainer;
|
|
19
|
-
private callRendererComponent?;
|
|
20
|
-
private resultRendererComponent?;
|
|
21
|
-
private rendererState;
|
|
22
|
-
private imageComponents;
|
|
23
|
-
private imageSpacers;
|
|
24
|
-
private toolName;
|
|
25
|
-
private toolCallId;
|
|
9
|
+
private readonly identity;
|
|
10
|
+
private readonly ui;
|
|
11
|
+
private readonly renderer;
|
|
12
|
+
private readonly images;
|
|
26
13
|
private args;
|
|
27
14
|
private expanded;
|
|
28
15
|
private showImages;
|
|
29
16
|
private imageWidthCells;
|
|
30
17
|
private isPartial;
|
|
31
|
-
private toolDefinition?;
|
|
32
|
-
private builtInToolDefinition?;
|
|
33
|
-
private ui;
|
|
34
|
-
private cwd;
|
|
35
18
|
private executionStarted;
|
|
36
19
|
private argsComplete;
|
|
37
20
|
private spinnerFrame?;
|
|
38
21
|
private spinnerInterval?;
|
|
39
22
|
private result?;
|
|
40
|
-
private
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
private
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
private getRenderShell;
|
|
47
|
-
private getRenderContext;
|
|
48
|
-
private createCallFallback;
|
|
49
|
-
private createResultFallback;
|
|
50
|
-
updateArgs(args: any): void;
|
|
23
|
+
private cachedLines?;
|
|
24
|
+
private cachedSignature?;
|
|
25
|
+
private cachedWidth?;
|
|
26
|
+
private lastDisplaySignature?;
|
|
27
|
+
constructor(toolName: string, toolCallId: string, args: unknown, options: ToolExecutionOptions | undefined, toolDefinition: ToolDef | undefined, ui: TUI, cwd: string);
|
|
28
|
+
updateArgs(args: unknown): void;
|
|
51
29
|
markExecutionStarted(): void;
|
|
52
30
|
setArgsComplete(): void;
|
|
53
31
|
updateResult(result: ToolExecutionResult, isPartial?: boolean): void;
|
|
54
32
|
stopAnimation(): void;
|
|
55
|
-
private maybeConvertImagesForKitty;
|
|
56
33
|
setExpanded(expanded: boolean): void;
|
|
57
34
|
setShowImages(show: boolean): void;
|
|
58
35
|
setImageWidthCells(width: number): void;
|
|
59
36
|
invalidate(): void;
|
|
60
37
|
render(width: number): string[];
|
|
61
|
-
private lastDisplaySignature?;
|
|
62
38
|
private updateDisplay;
|
|
63
|
-
private
|
|
64
|
-
private formatToolExecution;
|
|
39
|
+
private createRenderState;
|
|
65
40
|
private createRenderSignature;
|
|
66
41
|
private updateSpinnerAnimation;
|
|
67
42
|
private startSpinnerAnimation;
|
|
68
43
|
private stopSpinnerAnimation;
|
|
69
44
|
private invalidateRenderCache;
|
|
70
45
|
}
|
|
71
|
-
export {};
|
|
72
46
|
//# sourceMappingURL=tool-execution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAI5D,OAAO,KAAK,EAAmD,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEtH,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,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,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,OAAO,GAAG,SAAS,EACnC,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,MAAM,EAsBX;IAED,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAK9B;IAED,oBAAoB,IAAI,IAAI,CAK3B;IAED,eAAe,IAAI,IAAI,CAKtB;IAED,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,UAAQ,GAAG,IAAI,CASjE;IAED,aAAa,IAAI,IAAI,CAEpB;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,CAoBvC;IAED,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,qBAAqB;CAK7B"}
|