@oh-my-pi/pi-coding-agent 17.2.4 → 17.2.6
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 +69 -0
- package/dist/{CHANGELOG-bpmhv26t.md → CHANGELOG-gs76k6wc.md} +69 -0
- package/dist/cli.js +4438 -3962
- package/dist/{template-8vdv6xb4.js → template-c2hyaytt.js} +8 -26
- package/dist/types/cli/args.d.ts +4 -1
- package/dist/types/cli/browser-relay-cli.d.ts +15 -0
- package/dist/types/cli/command-help.d.ts +99 -0
- package/dist/types/cli/gc-cli.d.ts +1 -0
- package/dist/types/cli/help-extra.d.ts +2 -0
- package/dist/types/cli/thinking-levels.d.ts +5 -0
- package/dist/types/cli/update-cli.d.ts +13 -0
- package/dist/types/commands/browser-relay.d.ts +38 -0
- package/dist/types/commands/commit.d.ts +3 -0
- package/dist/types/commands/complete.d.ts +1 -1
- package/dist/types/commands/completions.d.ts +6 -0
- package/dist/types/commands/grep.d.ts +3 -0
- package/dist/types/commands/join.d.ts +4 -0
- package/dist/types/commands/launch-help.d.ts +171 -0
- package/dist/types/commands/launch.d.ts +5 -1
- package/dist/types/commands/models.d.ts +3 -0
- package/dist/types/commands/say.d.ts +10 -0
- package/dist/types/commands/worktree.d.ts +3 -0
- package/dist/types/config/keybindings.d.ts +5 -0
- package/dist/types/config/model-discovery.d.ts +2 -2
- package/dist/types/config/models-config-schema-bundle.d.ts +3 -0
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/models-config.d.ts +1 -0
- package/dist/types/config/service-tier.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +69 -21
- package/dist/types/cursor-bridge-tools.d.ts +1 -1
- package/dist/types/cursor.d.ts +7 -4
- package/dist/types/edit/index.d.ts +3 -3
- package/dist/types/edit/modes/replace.d.ts +22 -15
- package/dist/types/edit/renderer.d.ts +1 -1
- package/dist/types/eval/py/kernel.d.ts +3 -1
- package/dist/types/eval/py/spawn-options.d.ts +12 -16
- package/dist/types/extensibility/legacy-pi-ai-shim.d.ts +8 -1
- package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +1 -1
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +2 -0
- package/dist/types/launch/broker.d.ts +1 -1
- package/dist/types/launch/client.d.ts +15 -4
- package/dist/types/launch/ensure.d.ts +8 -0
- package/dist/types/launch/paths.d.ts +1 -1
- package/dist/types/launch/protocol.d.ts +19 -2
- package/dist/types/lsp/client.d.ts +2 -0
- package/dist/types/lsp/mux/daemon.d.ts +15 -0
- package/dist/types/lsp/mux/protocol.d.ts +57 -0
- package/dist/types/lsp/mux/server.d.ts +18 -0
- package/dist/types/lsp/types.d.ts +22 -2
- package/dist/types/main.d.ts +2 -0
- package/dist/types/mnemopi/embed-client.d.ts +1 -1
- package/dist/types/mnemopi/state.d.ts +0 -23
- package/dist/types/modes/components/assistant-message.d.ts +2 -0
- package/dist/types/modes/components/btw-panel.d.ts +3 -0
- package/dist/types/modes/components/custom-editor.d.ts +2 -1
- package/dist/types/modes/components/read-tool-group.d.ts +2 -0
- package/dist/types/modes/components/stripped-tool-calls-placeholder.d.ts +12 -0
- package/dist/types/modes/components/tool-execution.d.ts +2 -0
- package/dist/types/modes/controllers/btw-controller.d.ts +2 -0
- package/dist/types/modes/controllers/command-controller.d.ts +1 -0
- package/dist/types/modes/controllers/input-controller.d.ts +1 -0
- package/dist/types/modes/interactive-mode.d.ts +5 -1
- package/dist/types/modes/types.d.ts +4 -1
- package/dist/types/modes/workflow.d.ts +2 -1
- package/dist/types/sdk.d.ts +3 -1
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/security/contracts/schemas.d.ts +405 -403
- package/dist/types/session/agent-session-types.d.ts +8 -1
- package/dist/types/session/agent-session.d.ts +26 -2
- package/dist/types/session/indexed-session-storage.d.ts +1 -0
- package/dist/types/session/launch-completion.d.ts +10 -0
- package/dist/types/session/session-advisors.d.ts +1 -1
- package/dist/types/session/session-context.d.ts +2 -1
- package/dist/types/session/session-entries.d.ts +15 -1
- package/dist/types/session/session-maintenance.d.ts +1 -0
- package/dist/types/session/session-manager.d.ts +23 -11
- package/dist/types/session/session-stats.d.ts +10 -0
- package/dist/types/session/session-storage.d.ts +15 -3
- package/dist/types/session/yield-queue.d.ts +6 -1
- package/dist/types/system-prompt.d.ts +4 -1
- package/dist/types/task/index.d.ts +2 -1
- package/dist/types/task/spawn-policy.d.ts +5 -0
- package/dist/types/thinking.d.ts +1 -7
- package/dist/types/tools/ast-grep.d.ts +1 -1
- package/dist/types/tools/browser/registry.d.ts +2 -1
- package/dist/types/tools/browser/relay/bridge.d.ts +35 -0
- package/dist/types/tools/browser/relay/daemon.d.ts +16 -0
- package/dist/types/tools/browser/relay/kind.d.ts +19 -0
- package/dist/types/tools/browser/relay/protocol.d.ts +97 -0
- package/dist/types/tools/browser/relay/server.d.ts +35 -0
- package/dist/types/tools/browser/render.d.ts +1 -0
- package/dist/types/tools/browser.d.ts +3 -0
- package/dist/types/tools/computer/exposure.d.ts +9 -7
- package/dist/types/tools/computer/protocol.d.ts +70 -17
- package/dist/types/tools/computer/supervisor.d.ts +23 -10
- package/dist/types/tools/computer/worker-entry.d.ts +1 -0
- package/dist/types/tools/computer/worker.d.ts +42 -7
- package/dist/types/tools/computer-renderer.d.ts +7 -5
- package/dist/types/tools/computer.d.ts +25 -44
- package/dist/types/tools/context.d.ts +3 -0
- package/dist/types/tools/glob.d.ts +1 -1
- package/dist/types/tools/grep.d.ts +1 -1
- package/dist/types/tools/index.d.ts +9 -0
- package/dist/types/tools/render-utils.d.ts +2 -0
- package/dist/types/tools/{browser/run-cancellation.d.ts → run-scope.d.ts} +8 -8
- package/dist/types/tools/tool-timeouts.d.ts +5 -0
- package/dist/types/tools/xdev.d.ts +8 -0
- package/dist/types/utils/clipboard.d.ts +2 -2
- package/dist/types/web/kagi.d.ts +1 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/providers/anthropic.d.ts +1 -0
- package/dist/types/web/search/providers/base.d.ts +2 -0
- package/dist/types/web/search/providers/brave.d.ts +1 -0
- package/dist/types/web/search/providers/browser-page.d.ts +1 -0
- package/dist/types/web/search/providers/codex.d.ts +1 -0
- package/dist/types/web/search/providers/exa.d.ts +1 -0
- package/dist/types/web/search/providers/firecrawl.d.ts +1 -0
- package/dist/types/web/search/providers/gemini.d.ts +1 -0
- package/dist/types/web/search/providers/jina.d.ts +1 -0
- package/dist/types/web/search/providers/kagi.d.ts +1 -0
- package/dist/types/web/search/providers/kimi.d.ts +1 -0
- package/dist/types/web/search/providers/parallel.d.ts +1 -0
- package/dist/types/web/search/providers/perplexity.d.ts +1 -0
- package/dist/types/web/search/providers/searxng.d.ts +1 -0
- package/dist/types/web/search/providers/tavily.d.ts +1 -0
- package/dist/types/web/search/providers/tinyfish.d.ts +1 -0
- package/dist/types/web/search/providers/utils.d.ts +6 -9
- package/dist/types/web/search/providers/zai.d.ts +1 -0
- package/dist/types/web/search/types.d.ts +4 -0
- package/package.json +12 -12
- package/src/cli/args.ts +7 -87
- package/src/cli/browser-relay-cli.ts +119 -0
- package/src/cli/command-help.ts +103 -0
- package/src/cli/completion-gen.ts +5 -5
- package/src/cli/flag-tables.ts +9 -0
- package/src/cli/gc-cli.ts +641 -21
- package/src/cli/help-extra.ts +89 -0
- package/src/cli/setup-cli.ts +13 -21
- package/src/cli/thinking-levels.ts +7 -0
- package/src/cli/update-cli.ts +26 -7
- package/src/cli-commands.ts +170 -33
- package/src/cli.ts +17 -5
- package/src/commands/acp.ts +3 -1
- package/src/commands/agents.ts +3 -2
- package/src/commands/auth-broker.ts +3 -2
- package/src/commands/auth-gateway.ts +3 -2
- package/src/commands/bench.ts +2 -3
- package/src/commands/browser-relay.ts +53 -0
- package/src/commands/cleanse.ts +2 -2
- package/src/commands/commit.ts +3 -2
- package/src/commands/complete.ts +2 -1
- package/src/commands/completions.ts +3 -2
- package/src/commands/config.ts +3 -2
- package/src/commands/dry-balance.ts +2 -2
- package/src/commands/gallery.ts +3 -2
- package/src/commands/gc.ts +3 -2
- package/src/commands/grep.ts +3 -2
- package/src/commands/grievances.ts +3 -2
- package/src/commands/install.ts +2 -2
- package/src/commands/join.ts +3 -2
- package/src/commands/launch-help.ts +116 -0
- package/src/commands/launch.ts +7 -191
- package/src/commands/models.ts +3 -2
- package/src/commands/plugin.ts +3 -2
- package/src/commands/read.ts +3 -2
- package/src/commands/say.ts +3 -2
- package/src/commands/setup.ts +3 -2
- package/src/commands/shell.ts +3 -2
- package/src/commands/ssh.ts +3 -2
- package/src/commands/stats.ts +3 -2
- package/src/commands/tiny-models.ts +2 -2
- package/src/commands/token.ts +2 -2
- package/src/commands/ttsr.ts +2 -2
- package/src/commands/update.ts +3 -2
- package/src/commands/usage.ts +3 -2
- package/src/commands/web-search.ts +3 -2
- package/src/commands/worktree.ts +3 -2
- package/src/config/keybindings.ts +5 -0
- package/src/config/model-discovery.ts +44 -27
- package/src/config/model-registry.ts +19 -13
- package/src/config/models-config-schema-bundle.ts +9 -0
- package/src/config/resolve-config-value.ts +2 -1
- package/src/config/service-tier.ts +5 -0
- package/src/config/settings-schema.ts +72 -20
- package/src/config/settings.ts +1 -1
- package/src/cursor-bridge-tools.ts +1 -1
- package/src/cursor.ts +10 -14
- package/src/edit/diff.ts +17 -8
- package/src/edit/index.ts +20 -7
- package/src/edit/modes/replace.ts +93 -40
- package/src/edit/renderer.ts +1 -1
- package/src/edit/streaming.ts +14 -17
- package/src/eval/py/kernel.ts +2 -1
- package/src/eval/py/spawn-options.ts +24 -29
- package/src/export/html/index.ts +10 -3
- package/src/export/html/template.js +8 -26
- package/src/export/share.ts +4 -0
- package/src/extensibility/extensions/wrapper.ts +1 -0
- package/src/extensibility/legacy-pi-ai-shim.ts +22 -1
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +7 -6
- package/src/extensibility/plugins/legacy-pi-compat.ts +124 -57
- package/src/extensibility/skills.ts +11 -0
- package/src/extensibility/utils.ts +10 -2
- package/src/launch/broker.ts +223 -7
- package/src/launch/client.ts +192 -21
- package/src/launch/ensure.ts +73 -0
- package/src/launch/paths.ts +1 -1
- package/src/launch/protocol.ts +54 -2
- package/src/lsp/client.ts +23 -2
- package/src/lsp/index.ts +8 -0
- package/src/lsp/mux/daemon.ts +348 -0
- package/src/lsp/mux/protocol.ts +96 -0
- package/src/lsp/mux/server.ts +797 -0
- package/src/lsp/types.ts +28 -2
- package/src/main.ts +20 -8
- package/src/mcp/config-writer.ts +1 -1
- package/src/mcp/oauth-flow.ts +11 -1
- package/src/mnemopi/embed-client.ts +49 -2
- package/src/mnemopi/state.ts +57 -23
- package/src/modes/components/assistant-message.ts +11 -0
- package/src/modes/components/btw-panel.ts +41 -4
- package/src/modes/components/chat-transcript-builder.ts +4 -0
- package/src/modes/components/custom-editor.ts +9 -0
- package/src/modes/components/read-tool-group.ts +10 -0
- package/src/modes/components/status-line/component.ts +1 -1
- package/src/modes/components/stripped-tool-calls-placeholder.ts +35 -0
- package/src/modes/components/tool-execution.ts +8 -0
- package/src/modes/components/tree-selector.ts +46 -48
- package/src/modes/controllers/btw-controller.ts +55 -7
- package/src/modes/controllers/command-controller.ts +31 -0
- package/src/modes/controllers/event-controller.ts +17 -0
- package/src/modes/controllers/input-controller.ts +63 -8
- package/src/modes/controllers/mcp-command-controller.ts +11 -5
- package/src/modes/controllers/selector-controller.ts +20 -0
- package/src/modes/interactive-mode.ts +18 -2
- package/src/modes/types.ts +9 -1
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/modes/utils/interactive-context-helpers.ts +1 -0
- package/src/modes/utils/ui-helpers.ts +6 -10
- package/src/modes/workflow.ts +8 -2
- package/src/prompts/agents/init.md +1 -1
- package/src/prompts/session/launch-completion.md +1 -0
- package/src/prompts/system/plan-mode-active.md +2 -2
- package/src/prompts/system/system-prompt.md +26 -52
- package/src/prompts/system/workflow-notice.md +3 -3
- package/src/prompts/tools/ast-grep.md +1 -1
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/browser.md +1 -0
- package/src/prompts/tools/computer.md +21 -21
- package/src/prompts/tools/glob.md +1 -1
- package/src/prompts/tools/grep.md +1 -1
- package/src/prompts/tools/replace.md +5 -4
- package/src/prompts/tools/task.md +4 -4
- package/src/sdk.ts +49 -6
- package/src/secrets/index.ts +1 -1
- package/src/security/contracts/schemas.ts +205 -183
- package/src/security/contracts/validation.ts +5 -1
- package/src/security/store.ts +2 -2
- package/src/session/agent-session-types.ts +9 -1
- package/src/session/agent-session.ts +204 -15
- package/src/session/indexed-session-storage.ts +9 -0
- package/src/session/launch-completion.ts +37 -0
- package/src/session/prewalk.ts +24 -2
- package/src/session/session-advisors.ts +2 -2
- package/src/session/session-context.ts +42 -12
- package/src/session/session-dump-format.ts +1 -1
- package/src/session/session-entries.ts +17 -1
- package/src/session/session-maintenance.ts +38 -4
- package/src/session/session-manager.ts +123 -67
- package/src/session/session-paths.ts +118 -55
- package/src/session/session-stats.ts +48 -3
- package/src/session/session-storage.ts +30 -22
- package/src/session/stream-guards.ts +1 -1
- package/src/session/yield-queue.ts +121 -16
- package/src/slash-commands/builtin-registry.ts +37 -24
- package/src/system-prompt.ts +8 -3
- package/src/task/index.ts +23 -8
- package/src/task/spawn-policy.ts +14 -0
- package/src/thinking.ts +2 -8
- package/src/tools/ast-grep.ts +10 -4
- package/src/tools/browser/cmux/cmux-tab.ts +97 -14
- package/src/tools/browser/cmux/rpc.ts +2 -8
- package/src/tools/browser/registry.ts +53 -2
- package/src/tools/browser/relay/bridge.ts +945 -0
- package/src/tools/browser/relay/daemon.ts +117 -0
- package/src/tools/browser/relay/extension-assets/background.js.txt +242 -0
- package/src/tools/browser/relay/extension-assets/manifest.json.txt +14 -0
- package/src/tools/browser/relay/extension-assets/options.html.txt +53 -0
- package/src/tools/browser/relay/extension-assets/options.js.txt +23 -0
- package/src/tools/browser/relay/kind.ts +41 -0
- package/src/tools/browser/relay/protocol.ts +54 -0
- package/src/tools/browser/relay/server.ts +141 -0
- package/src/tools/browser/render.ts +4 -1
- package/src/tools/browser/shared-daemon.ts +7 -58
- package/src/tools/browser/tab-supervisor.ts +5 -4
- package/src/tools/browser/tab-worker.ts +33 -12
- package/src/tools/browser.ts +26 -1
- package/src/tools/computer/exposure.ts +11 -35
- package/src/tools/computer/protocol.ts +51 -10
- package/src/tools/computer/supervisor.ts +227 -124
- package/src/tools/computer/worker-entry.ts +11 -6
- package/src/tools/computer/worker.ts +695 -81
- package/src/tools/computer-renderer.ts +104 -65
- package/src/tools/computer.ts +134 -428
- package/src/tools/context.ts +3 -0
- package/src/tools/glob.ts +9 -2
- package/src/tools/grep.ts +12 -6
- package/src/tools/hub/launch.ts +122 -6
- package/src/tools/index.ts +9 -0
- package/src/tools/inspect-image.ts +32 -6
- package/src/tools/render-utils.ts +2 -0
- package/src/tools/{browser/run-cancellation.ts → run-scope.ts} +11 -11
- package/src/tools/tool-timeouts.ts +1 -0
- package/src/tools/xdev.ts +29 -2
- package/src/utils/clipboard.ts +40 -14
- package/src/utils/command-args.ts +26 -28
- package/src/utils/tool-choice.ts +0 -13
- package/src/web/kagi.ts +2 -1
- package/src/web/search/index.ts +18 -2
- package/src/web/search/providers/anthropic.ts +4 -1
- package/src/web/search/providers/base.ts +2 -0
- package/src/web/search/providers/brave.ts +3 -1
- package/src/web/search/providers/browser-page.ts +6 -4
- package/src/web/search/providers/codex.ts +4 -1
- package/src/web/search/providers/duckduckgo.ts +2 -1
- package/src/web/search/providers/ecosia.ts +2 -1
- package/src/web/search/providers/exa.ts +4 -2
- package/src/web/search/providers/firecrawl.ts +3 -1
- package/src/web/search/providers/gemini.ts +8 -2
- package/src/web/search/providers/google.ts +2 -1
- package/src/web/search/providers/jina.ts +12 -2
- package/src/web/search/providers/kagi.ts +3 -0
- package/src/web/search/providers/kimi.ts +5 -1
- package/src/web/search/providers/mojeek.ts +2 -1
- package/src/web/search/providers/parallel.ts +5 -1
- package/src/web/search/providers/perplexity.ts +6 -3
- package/src/web/search/providers/public.ts +1 -1
- package/src/web/search/providers/searxng.ts +11 -5
- package/src/web/search/providers/startpage.ts +10 -4
- package/src/web/search/providers/synthetic.ts +11 -5
- package/src/web/search/providers/tavily.ts +3 -1
- package/src/web/search/providers/tinyfish.ts +3 -1
- package/src/web/search/providers/utils.ts +12 -10
- package/src/web/search/providers/xai.ts +2 -2
- package/src/web/search/providers/zai.ts +18 -3
- package/src/web/search/types.ts +6 -0
- package/dist/types/config/file-lock.d.ts +0 -29
- package/src/config/file-lock.ts +0 -164
|
@@ -5,56 +5,135 @@ import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
|
5
5
|
import type { Theme } from "../modes/theme/theme";
|
|
6
6
|
import { framedBlock, renderStatusLine } from "../tui";
|
|
7
7
|
import type { ComputerToolDetails } from "./computer";
|
|
8
|
-
import { replaceTabs, truncateToWidth } from "./render-utils";
|
|
8
|
+
import { PREVIEW_LIMITS, replaceTabs, TRUNCATE_LENGTHS, truncateToWidth } from "./render-utils";
|
|
9
9
|
|
|
10
10
|
interface ComputerRenderArgs {
|
|
11
|
-
|
|
11
|
+
code?: unknown;
|
|
12
|
+
read_only?: unknown;
|
|
13
|
+
window?: unknown;
|
|
14
|
+
actions?: unknown;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
interface ComputerRenderResult {
|
|
15
|
-
content
|
|
18
|
+
content?: Array<{ type: string; text?: string }>;
|
|
16
19
|
details?: unknown;
|
|
17
20
|
isError?: boolean;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
|
-
function
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
+
function sanitizedLine(value: string, width: number, collapse = false): string {
|
|
24
|
+
const sanitized = replaceTabs(sanitizeText(value));
|
|
25
|
+
const text = collapse ? sanitized.replace(/[\r\n]+/g, " ") : sanitized;
|
|
26
|
+
return truncateToWidth(text, Math.max(1, Math.min(width, TRUNCATE_LENGTHS.LINE)));
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
function isComputerToolDetails(value: unknown): value is ComputerToolDetails {
|
|
26
30
|
if (!value || typeof value !== "object") return false;
|
|
27
31
|
const details = value as Partial<ComputerToolDetails>;
|
|
28
32
|
return (
|
|
29
|
-
Array.isArray(details.
|
|
30
|
-
|
|
31
|
-
typeof details.
|
|
32
|
-
typeof details.
|
|
33
|
+
Array.isArray(details.screenshots) &&
|
|
34
|
+
(details.code === undefined || typeof details.code === "string") &&
|
|
35
|
+
(details.readOnly === undefined || typeof details.readOnly === "boolean") &&
|
|
36
|
+
(details.returnValue === undefined || typeof details.returnValue === "string") &&
|
|
37
|
+
(details.backend === undefined || typeof details.backend === "string") &&
|
|
38
|
+
(details.capturePermission === undefined || typeof details.capturePermission === "string") &&
|
|
39
|
+
(details.inputPermission === undefined || typeof details.inputPermission === "string") &&
|
|
40
|
+
(details.axPermission === undefined || typeof details.axPermission === "string")
|
|
33
41
|
);
|
|
34
42
|
}
|
|
35
43
|
|
|
36
|
-
function
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
function statusSuffix(
|
|
45
|
+
args: ComputerRenderArgs | undefined,
|
|
46
|
+
details: ComputerToolDetails | undefined,
|
|
47
|
+
isError: boolean,
|
|
48
|
+
): string | undefined {
|
|
49
|
+
const parts: string[] = [];
|
|
50
|
+
if (details?.readOnly === true || args?.read_only === true) parts.push("read-only");
|
|
51
|
+
if (details) {
|
|
52
|
+
const count = details.screenshots.length;
|
|
53
|
+
parts.push(`${count} ${count === 1 ? "screenshot" : "screenshots"}`);
|
|
54
|
+
}
|
|
55
|
+
if (isError) parts.push("error");
|
|
56
|
+
return parts.length > 0 ? sanitizedLine(parts.join(" · "), TRUNCATE_LENGTHS.TITLE, true) : undefined;
|
|
39
57
|
}
|
|
40
58
|
|
|
41
|
-
function
|
|
42
|
-
|
|
59
|
+
function previewLines(text: string, limit: number, width: number): string[] {
|
|
60
|
+
if (!text) return [];
|
|
61
|
+
const rawLines = text.split(/\r?\n/);
|
|
62
|
+
const lines = rawLines.slice(0, limit).map(line => sanitizedLine(line, width));
|
|
63
|
+
if (rawLines.length > limit) {
|
|
64
|
+
lines.push(sanitizedLine(`… ${rawLines.length - limit} more lines`, width));
|
|
65
|
+
}
|
|
66
|
+
return lines;
|
|
43
67
|
}
|
|
44
68
|
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
69
|
+
function renderComputerCell(
|
|
70
|
+
args: ComputerRenderArgs | undefined,
|
|
71
|
+
details: ComputerToolDetails | undefined,
|
|
72
|
+
result: ComputerRenderResult | undefined,
|
|
73
|
+
options: RenderResultOptions,
|
|
74
|
+
theme: Theme,
|
|
75
|
+
): Component {
|
|
76
|
+
const isError = result?.isError === true;
|
|
77
|
+
const code = typeof args?.code === "string" ? args.code : details?.code;
|
|
78
|
+
const header = renderStatusLine(
|
|
79
|
+
{
|
|
80
|
+
icon: isError ? "error" : options.isPartial ? "pending" : result ? "success" : "pending",
|
|
81
|
+
title: "Computer",
|
|
82
|
+
description: statusSuffix(args, details, isError),
|
|
83
|
+
},
|
|
84
|
+
theme,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Old persisted calls used {window, actions}; keep their replay deliberately plain.
|
|
88
|
+
if (code === undefined) return new Text(header, 0, 0);
|
|
89
|
+
|
|
90
|
+
return framedBlock(theme, width => {
|
|
91
|
+
const lineWidth = Math.max(1, width - 4);
|
|
92
|
+
const codeLimit = options.expanded ? Number.POSITIVE_INFINITY : PREVIEW_LIMITS.COMPUTER_CODE_COLLAPSED;
|
|
93
|
+
const outputLimit = options.expanded ? PREVIEW_LIMITS.OUTPUT_EXPANDED : PREVIEW_LIMITS.OUTPUT_COLLAPSED;
|
|
94
|
+
const sections: Array<{ label?: string; lines: string[] }> = [];
|
|
95
|
+
const codeLines = previewLines(code, codeLimit, lineWidth).map(line => theme.fg("toolOutput", line));
|
|
96
|
+
if (codeLines.length > 0)
|
|
97
|
+
sections.push({ label: sanitizedLine("Code", TRUNCATE_LENGTHS.SHORT), lines: codeLines });
|
|
98
|
+
|
|
99
|
+
const output = result
|
|
100
|
+
? (result.content ?? [])
|
|
101
|
+
.filter(
|
|
102
|
+
(item): item is { type: string; text: string } =>
|
|
103
|
+
item.type === "text" && typeof item.text === "string",
|
|
104
|
+
)
|
|
105
|
+
.map(item => item.text)
|
|
106
|
+
.join("\n")
|
|
107
|
+
: "";
|
|
108
|
+
if (isError) {
|
|
109
|
+
const errorLine = sanitizedLine(output || "Unknown error", lineWidth, true);
|
|
110
|
+
sections.push({
|
|
111
|
+
label: sanitizedLine("Error", TRUNCATE_LENGTHS.SHORT),
|
|
112
|
+
lines: [theme.fg("error", errorLine)],
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
const outputLines = previewLines(output, outputLimit, lineWidth).map(line => theme.fg("toolOutput", line));
|
|
116
|
+
if (outputLines.length > 0) {
|
|
117
|
+
sections.push({ label: sanitizedLine("Output", TRUNCATE_LENGTHS.SHORT), lines: outputLines });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return {
|
|
122
|
+
header,
|
|
123
|
+
sections,
|
|
124
|
+
state: isError ? "error" : options.isPartial || !result ? "pending" : "success",
|
|
125
|
+
borderColor: isError ? "error" : "borderMuted",
|
|
126
|
+
applyBg: false,
|
|
127
|
+
width,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
48
130
|
}
|
|
49
131
|
|
|
132
|
+
/** Renders computer scripts, run state, screenshots, and failures in the TUI. */
|
|
50
133
|
export const computerToolRenderer = {
|
|
51
134
|
mergeCallAndResult: true,
|
|
52
|
-
renderCall(args: ComputerRenderArgs,
|
|
53
|
-
return
|
|
54
|
-
renderStatusLine({ icon: "pending", title: "Computer", description: actionDescription(args) }, theme),
|
|
55
|
-
0,
|
|
56
|
-
0,
|
|
57
|
-
);
|
|
135
|
+
renderCall(args: ComputerRenderArgs, options: RenderResultOptions, theme: Theme): Component {
|
|
136
|
+
return renderComputerCell(args, undefined, undefined, options, theme);
|
|
58
137
|
},
|
|
59
138
|
renderResult(
|
|
60
139
|
result: ComputerRenderResult,
|
|
@@ -63,46 +142,6 @@ export const computerToolRenderer = {
|
|
|
63
142
|
args?: ComputerRenderArgs,
|
|
64
143
|
): Component {
|
|
65
144
|
const details = isComputerToolDetails(result.details) ? result.details : undefined;
|
|
66
|
-
|
|
67
|
-
result.isError
|
|
68
|
-
? { icon: "error", title: "Computer", description: errorDescription(result, args) }
|
|
69
|
-
: { icon: "success", title: "Computer", description: details ? resultDescription(details) : undefined },
|
|
70
|
-
theme,
|
|
71
|
-
);
|
|
72
|
-
if (!details) return new Text(header, 0, 0);
|
|
73
|
-
return framedBlock(theme, width => {
|
|
74
|
-
const body: string[] = [
|
|
75
|
-
theme.fg(
|
|
76
|
-
"dim",
|
|
77
|
-
`backend ${clean(details.backend)}${details.displayServer ? ` · server ${clean(details.displayServer)}` : ""} · capture ${clean(details.capturePermission)} · input ${clean(details.inputPermission)} · ${details.displays.length} display(s)`,
|
|
78
|
-
),
|
|
79
|
-
];
|
|
80
|
-
const displayLimit = options.expanded ? details.displays.length : Math.min(details.displays.length, 3);
|
|
81
|
-
for (const display of details.displays.slice(0, displayLimit)) {
|
|
82
|
-
body.push(
|
|
83
|
-
theme.fg(
|
|
84
|
-
"toolOutput",
|
|
85
|
-
clean(
|
|
86
|
-
`${display.id}${display.name ? ` ${display.name}` : ""}: logical ${display.x},${display.y} ${display.width}×${display.height}; pixels ${display.pixelX},${display.pixelY} ${display.pixelWidth}×${display.pixelHeight}; scale ${display.scale}${display.isPrimary ? "; primary" : ""}`,
|
|
87
|
-
160,
|
|
88
|
-
),
|
|
89
|
-
),
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
if (displayLimit < details.displays.length) {
|
|
93
|
-
body.push(theme.fg("dim", `… ${details.displays.length - displayLimit} more display(s)`));
|
|
94
|
-
}
|
|
95
|
-
if (details.capabilities) {
|
|
96
|
-
body.push(theme.fg("dim", `capabilities ${clean(details.capabilities, 160)}`));
|
|
97
|
-
}
|
|
98
|
-
return {
|
|
99
|
-
header,
|
|
100
|
-
sections: [{ lines: body }],
|
|
101
|
-
state: result.isError ? "error" : "success",
|
|
102
|
-
borderColor: result.isError ? "error" : "borderMuted",
|
|
103
|
-
applyBg: false,
|
|
104
|
-
width,
|
|
105
|
-
};
|
|
106
|
-
});
|
|
145
|
+
return renderComputerCell(args, details, result, options, theme);
|
|
107
146
|
},
|
|
108
147
|
};
|