@oh-my-pi/pi-coding-agent 17.0.9 → 17.1.1
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 +78 -0
- package/README.md +1 -1
- package/dist/cli.js +4685 -4614
- package/dist/types/async/job-manager.d.ts +37 -1
- package/dist/types/cli/args.d.ts +2 -0
- package/dist/types/cli/bench-cli.d.ts +41 -0
- package/dist/types/commands/bench.d.ts +15 -3
- package/dist/types/commands/launch.d.ts +4 -0
- package/dist/types/config/model-registry.d.ts +3 -1
- package/dist/types/config/models-config-schema.d.ts +18 -6
- package/dist/types/config/models-config.d.ts +14 -5
- package/dist/types/config/provider-globals.d.ts +2 -2
- package/dist/types/config/service-tier.d.ts +5 -1
- package/dist/types/config/settings-schema.d.ts +374 -47
- package/dist/types/config/settings.d.ts +7 -0
- package/dist/types/dap/client.d.ts +20 -0
- package/dist/types/exec/bash-executor.d.ts +38 -0
- package/dist/types/exec/direnv.d.ts +33 -0
- package/dist/types/export/html/args.d.ts +15 -0
- package/dist/types/export/html/index.d.ts +11 -26
- package/dist/types/export/html/web-palette.d.ts +55 -116
- package/dist/types/extensibility/extensions/loader.d.ts +3 -0
- package/dist/types/extensibility/extensions/types.d.ts +17 -2
- package/dist/types/extensibility/legacy-pi-coding-agent-shim.d.ts +3 -0
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +13 -0
- package/dist/types/live/attestation.d.ts +2 -0
- package/dist/types/live/controller.d.ts +48 -0
- package/dist/types/live/protocol.d.ts +85 -0
- package/dist/types/live/protocol.test.d.ts +1 -0
- package/dist/types/live/transport.d.ts +35 -0
- package/dist/types/live/visualizer.d.ts +30 -0
- package/dist/types/lsp/client.d.ts +16 -1
- package/dist/types/mcp/config-writer.test.d.ts +1 -0
- package/dist/types/mcp/oauth-discovery.d.ts +2 -0
- package/dist/types/mcp/smithery-auth.d.ts +1 -1
- package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
- package/dist/types/memory-backend/tool-names.d.ts +2 -0
- package/dist/types/modes/components/assistant-message.d.ts +1 -0
- package/dist/types/modes/components/custom-message.d.ts +1 -1
- package/dist/types/modes/components/login-dialog.d.ts +2 -2
- package/dist/types/modes/components/message-frame.d.ts +8 -4
- package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
- package/dist/types/modes/components/session-account-selector.d.ts +11 -0
- package/dist/types/modes/components/settings-defs.d.ts +7 -1
- package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
- package/dist/types/modes/components/tool-execution.d.ts +9 -1
- package/dist/types/modes/controllers/command-controller.d.ts +1 -1
- package/dist/types/modes/controllers/event-controller.d.ts +6 -1
- package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
- package/dist/types/modes/interactive-mode.d.ts +6 -0
- package/dist/types/modes/theme/theme.d.ts +1 -1
- package/dist/types/modes/types.d.ts +4 -1
- package/dist/types/modes/utils/context-usage.d.ts +12 -2
- package/dist/types/plan-mode/plan-files.d.ts +10 -0
- package/dist/types/registry/agent-lifecycle.d.ts +21 -9
- package/dist/types/registry/agent-registry.d.ts +11 -4
- package/dist/types/sdk.d.ts +15 -1
- package/dist/types/secrets/index.d.ts +15 -2
- package/dist/types/secrets/obfuscator.d.ts +113 -15
- package/dist/types/session/acp-permission-gate.d.ts +19 -0
- package/dist/types/session/agent-session-events.d.ts +84 -0
- package/dist/types/session/agent-session-types.d.ts +321 -0
- package/dist/types/session/agent-session.d.ts +135 -753
- package/dist/types/session/async-job-delivery.d.ts +28 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/bash-runner.d.ts +75 -0
- package/dist/types/session/blob-store.d.ts +11 -1
- package/dist/types/session/blob-store.test.d.ts +1 -0
- package/dist/types/session/checkpoint-entries.d.ts +28 -0
- package/dist/types/session/eval-runner.d.ts +51 -0
- package/dist/types/session/irc-bridge.d.ts +46 -0
- package/dist/types/session/messages.d.ts +24 -0
- package/dist/types/session/model-controls.d.ts +180 -0
- package/dist/types/session/prewalk.d.ts +46 -0
- package/dist/types/session/queued-messages.d.ts +22 -0
- package/dist/types/session/redis-session-storage.d.ts +1 -0
- package/dist/types/session/retry-fallback-chains.d.ts +74 -0
- package/dist/types/session/role-models.d.ts +15 -0
- package/dist/types/session/session-advisors.d.ts +228 -0
- package/dist/types/session/session-entries.d.ts +8 -0
- package/dist/types/session/session-handoff.d.ts +70 -0
- package/dist/types/session/session-history-format.d.ts +6 -1
- package/dist/types/session/session-maintenance.d.ts +246 -0
- package/dist/types/session/session-manager.d.ts +41 -0
- package/dist/types/session/session-memory.d.ts +56 -0
- package/dist/types/session/session-provider-boundary.d.ts +62 -0
- package/dist/types/session/session-stats.d.ts +48 -0
- package/dist/types/session/session-tools.d.ts +158 -0
- package/dist/types/session/session-workspace.d.ts +32 -0
- package/dist/types/session/stream-guards.d.ts +44 -0
- package/dist/types/session/streaming-output.d.ts +8 -0
- package/dist/types/session/todo-tracker.d.ts +56 -0
- package/dist/types/session/ttsr-coordinator.d.ts +51 -0
- package/dist/types/session/turn-recovery.d.ts +225 -0
- package/dist/types/slash-commands/helpers/session-pin.d.ts +9 -0
- package/dist/types/stt/index.d.ts +0 -2
- package/dist/types/stt/stt-controller.d.ts +7 -0
- package/dist/types/system-prompt.d.ts +2 -0
- package/dist/types/task/executor.d.ts +4 -1
- package/dist/types/task/output-manager.d.ts +3 -1
- package/dist/types/tiny/title-client.d.ts +10 -0
- package/dist/types/tools/approval.d.ts +1 -0
- package/dist/types/tools/browser/launch.d.ts +5 -0
- package/dist/types/tools/builtin-names.d.ts +1 -1
- package/dist/types/tools/computer/protocol.d.ts +43 -0
- package/dist/types/tools/computer/supervisor.d.ts +32 -0
- package/dist/types/tools/computer/worker-entry.d.ts +1 -0
- package/dist/types/tools/computer/worker.d.ts +15 -0
- package/dist/types/tools/computer-renderer.d.ts +22 -0
- package/dist/types/tools/computer.d.ts +71 -0
- package/dist/types/tools/context.d.ts +2 -0
- package/dist/types/tools/default-renderer.d.ts +21 -0
- package/dist/types/tools/image-gen.d.ts +4 -4
- package/dist/types/tools/image-providers.d.ts +38 -0
- package/dist/types/tools/index.d.ts +7 -0
- package/dist/types/tools/path-utils.d.ts +8 -0
- package/dist/types/tools/todo.d.ts +10 -4
- package/dist/types/tools/xdev.d.ts +5 -1
- package/dist/types/tts/streaming-player.d.ts +10 -29
- package/dist/types/tts/vocalizer.d.ts +5 -0
- package/dist/types/utils/jj.d.ts +29 -0
- package/dist/types/utils/lang-from-path.d.ts +1 -0
- package/dist/types/utils/title-generator.d.ts +30 -0
- package/dist/types/utils/tools-manager.d.ts +1 -2
- package/dist/types/vibe/runtime.d.ts +36 -8
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/provider.d.ts +15 -5
- package/dist/types/web/search/types.d.ts +94 -0
- package/package.json +12 -12
- package/scripts/generate-share-viewer.ts +4 -6
- package/src/advisor/__tests__/advisor.test.ts +643 -0
- package/src/advisor/runtime.ts +144 -43
- package/src/async/job-manager.ts +90 -2
- package/src/cli/args.ts +3 -0
- package/src/cli/auth-gateway-cli.ts +18 -3
- package/src/cli/bench-cli.ts +395 -29
- package/src/cli/flag-tables.ts +3 -0
- package/src/cli/gc-cli.ts +2 -2
- package/src/cli/setup-cli.ts +2 -14
- package/src/cli/usage-cli.ts +10 -1
- package/src/cli.ts +8 -0
- package/src/collab/host.ts +3 -2
- package/src/commands/bench.ts +18 -4
- package/src/commands/launch.ts +4 -0
- package/src/config/model-registry.ts +16 -2
- package/src/config/models-config-schema.ts +15 -4
- package/src/config/provider-globals.ts +9 -9
- package/src/config/service-tier.ts +26 -1
- package/src/config/settings-schema.ts +270 -51
- package/src/config/settings.ts +81 -2
- package/src/dap/client.ts +37 -4
- package/src/edit/index.ts +49 -12
- package/src/eval/executor-base.ts +1 -0
- package/src/eval/js/executor.ts +2 -0
- package/src/eval/py/executor.ts +103 -33
- package/src/exec/bash-executor.ts +90 -6
- package/src/exec/direnv.ts +145 -0
- package/src/export/html/args.ts +20 -0
- package/src/export/html/index.ts +45 -47
- package/src/export/html/template.css +19 -1
- package/src/export/html/template.html +6 -0
- package/src/export/html/template.js +21 -0
- package/src/export/html/tool-views.generated.js +31 -31
- package/src/export/html/web-palette.ts +116 -132
- package/src/export/share.ts +249 -49
- package/src/extensibility/extensions/loader.ts +29 -1
- package/src/extensibility/extensions/runner.ts +6 -0
- package/src/extensibility/extensions/types.ts +33 -2
- package/src/extensibility/extensions/wrapper.ts +68 -12
- package/src/extensibility/legacy-pi-coding-agent-shim.ts +7 -1
- package/src/extensibility/plugins/legacy-pi-compat.ts +19 -1
- package/src/hindsight/state.ts +64 -6
- package/src/internal-urls/local-protocol.ts +2 -1
- package/src/internal-urls/memory-protocol.ts +2 -2
- package/src/internal-urls/skill-protocol.ts +2 -2
- package/src/internal-urls/ssh-protocol.ts +2 -1
- package/src/internal-urls/vault-protocol.ts +2 -1
- package/src/live/attestation.ts +91 -0
- package/src/live/controller.ts +517 -0
- package/src/live/prompts/agent-final-message.md +3 -0
- package/src/live/prompts/live-instructions.md +23 -0
- package/src/live/protocol.test.ts +140 -0
- package/src/live/protocol.ts +233 -0
- package/src/live/transport.ts +422 -0
- package/src/live/visualizer.ts +214 -0
- package/src/lsp/client.ts +29 -9
- package/src/lsp/index.ts +19 -4
- package/src/main.ts +8 -1
- package/src/mcp/config-writer.test.ts +43 -0
- package/src/mcp/config-writer.ts +109 -82
- package/src/mcp/oauth-discovery.ts +10 -2
- package/src/mcp/smithery-auth.test.ts +29 -0
- package/src/mcp/smithery-auth.ts +3 -2
- package/src/memories/index.ts +40 -20
- package/src/memory-backend/tool-names.ts +2 -0
- package/src/mnemopi/backend.ts +24 -7
- package/src/modes/acp/acp-agent.ts +56 -10
- package/src/modes/acp/acp-event-mapper.ts +8 -1
- package/src/modes/components/agent-hub.ts +1 -1
- package/src/modes/components/assistant-message.ts +7 -2
- package/src/modes/components/custom-message.ts +4 -1
- package/src/modes/components/login-dialog.ts +14 -4
- package/src/modes/components/message-frame.ts +14 -8
- package/src/modes/components/plan-review-overlay.ts +350 -35
- package/src/modes/components/session-account-selector.ts +62 -0
- package/src/modes/components/settings-defs.ts +23 -1
- package/src/modes/components/settings-selector.ts +169 -1
- package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
- package/src/modes/components/status-line/component.ts +123 -2
- package/src/modes/components/tool-execution.ts +28 -112
- package/src/modes/controllers/command-controller.ts +56 -15
- package/src/modes/controllers/event-controller.ts +111 -16
- package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
- package/src/modes/controllers/extension-ui-controller.ts +20 -4
- package/src/modes/controllers/input-controller.ts +47 -39
- package/src/modes/controllers/live-command-controller.ts +255 -0
- package/src/modes/controllers/mcp-command-controller.ts +10 -1
- package/src/modes/controllers/omfg-controller.ts +44 -40
- package/src/modes/controllers/selector-controller.ts +80 -10
- package/src/modes/controllers/session-focus-controller.ts +6 -1
- package/src/modes/interactive-mode.ts +176 -38
- package/src/modes/runtime-init.ts +2 -0
- package/src/modes/setup-wizard/scenes/web-search.ts +17 -9
- package/src/modes/theme/theme.ts +1 -1
- package/src/modes/types.ts +4 -1
- package/src/modes/utils/context-usage.ts +23 -7
- package/src/modes/utils/ui-helpers.ts +10 -5
- package/src/plan-mode/plan-files.ts +40 -0
- package/src/prompts/bench/cache-prefix-chunk.md +1 -0
- package/src/prompts/bench/cache-prefix.md +3 -0
- package/src/prompts/bench/cache-suffix.md +1 -0
- package/src/prompts/system/computer-safety.md +14 -0
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/project-prompt.md +8 -1
- package/src/prompts/system/subagent-async-pending.md +6 -0
- package/src/prompts/system/system-prompt.md +1 -1
- package/src/prompts/system/workflow-notice.md +48 -40
- package/src/prompts/system/xdev-mount-notice.md +4 -0
- package/src/prompts/tools/computer.md +26 -0
- package/src/prompts/tools/todo.md +3 -1
- package/src/registry/agent-lifecycle.ts +116 -46
- package/src/registry/agent-registry.ts +35 -8
- package/src/registry/persisted-agents.ts +26 -2
- package/src/sdk.ts +215 -136
- package/src/secrets/index.ts +127 -4
- package/src/secrets/obfuscator.ts +2328 -105
- package/src/session/acp-permission-gate.ts +165 -0
- package/src/session/agent-session-error-log.test.ts +1 -1
- package/src/session/agent-session-events.ts +66 -0
- package/src/session/agent-session-types.ts +343 -0
- package/src/session/agent-session.ts +1940 -12218
- package/src/session/artifacts.ts +6 -5
- package/src/session/async-job-delivery.ts +74 -0
- package/src/session/auth-storage.ts +1 -0
- package/src/session/bash-runner.ts +326 -0
- package/src/session/blob-store.test.ts +56 -0
- package/src/session/blob-store.ts +18 -2
- package/src/session/checkpoint-entries.ts +81 -0
- package/src/session/eval-runner.ts +217 -0
- package/src/session/indexed-session-storage.ts +9 -2
- package/src/session/irc-bridge.ts +203 -0
- package/src/session/messages.ts +266 -1
- package/src/session/model-controls.ts +714 -0
- package/src/session/prewalk.ts +252 -0
- package/src/session/queued-messages.ts +93 -0
- package/src/session/redis-session-storage.ts +51 -11
- package/src/session/retry-fallback-chains.ts +455 -0
- package/src/session/role-models.ts +85 -0
- package/src/session/session-advisors.ts +1679 -0
- package/src/session/session-context.ts +6 -3
- package/src/session/session-entries.ts +8 -0
- package/src/session/session-handoff.ts +308 -0
- package/src/session/session-history-format.ts +20 -9
- package/src/session/session-loader.ts +0 -46
- package/src/session/session-maintenance.ts +2983 -0
- package/src/session/session-manager.ts +390 -30
- package/src/session/session-memory.ts +222 -0
- package/src/session/session-provider-boundary.ts +307 -0
- package/src/session/session-stats.ts +293 -0
- package/src/session/session-tools.ts +980 -0
- package/src/session/session-workspace.ts +53 -0
- package/src/session/stream-guards.ts +417 -0
- package/src/session/streaming-output.ts +52 -5
- package/src/session/todo-tracker.ts +380 -0
- package/src/session/ttsr-coordinator.ts +496 -0
- package/src/session/turn-recovery.ts +1629 -0
- package/src/slash-commands/builtin-registry.ts +257 -20
- package/src/slash-commands/helpers/session-pin.ts +44 -0
- package/src/slash-commands/helpers/usage-report.ts +22 -3
- package/src/stt/downloader.ts +0 -2
- package/src/stt/index.ts +0 -2
- package/src/stt/stt-controller.ts +57 -146
- package/src/system-prompt.ts +45 -17
- package/src/task/executor.ts +285 -70
- package/src/task/index.ts +98 -105
- package/src/task/output-manager.ts +25 -3
- package/src/task/persisted-revive.ts +4 -3
- package/src/task/structured-subagent.ts +1 -0
- package/src/tiny/title-client.ts +22 -0
- package/src/tools/approval.ts +55 -10
- package/src/tools/bash-interactive.ts +116 -86
- package/src/tools/bash-skill-urls.ts +28 -2
- package/src/tools/bash.ts +339 -123
- package/src/tools/browser/launch.ts +9 -1
- package/src/tools/browser/tab-supervisor.ts +8 -5
- package/src/tools/browser.ts +94 -47
- package/src/tools/builtin-names.ts +1 -0
- package/src/tools/computer/protocol.ts +28 -0
- package/src/tools/computer/supervisor.ts +258 -0
- package/src/tools/computer/worker-entry.ts +25 -0
- package/src/tools/computer/worker.ts +135 -0
- package/src/tools/computer-renderer.ts +108 -0
- package/src/tools/computer.ts +433 -0
- package/src/tools/context.ts +2 -0
- package/src/tools/default-renderer.ts +139 -0
- package/src/tools/essential-tools.ts +1 -0
- package/src/tools/image-gen.ts +20 -28
- package/src/tools/image-providers.ts +50 -0
- package/src/tools/index.ts +14 -0
- package/src/tools/path-utils.ts +49 -2
- package/src/tools/read.ts +156 -88
- package/src/tools/renderers.ts +9 -1
- package/src/tools/todo.ts +101 -11
- package/src/tools/vibe.ts +1 -2
- package/src/tools/write.ts +51 -1
- package/src/tools/xdev.ts +121 -29
- package/src/tts/streaming-player.ts +82 -283
- package/src/tts/vocalizer.ts +18 -1
- package/src/utils/clipboard.ts +1 -30
- package/src/utils/jj.ts +125 -4
- package/src/utils/lang-from-path.ts +7 -0
- package/src/utils/mac-file-urls.applescript +37 -0
- package/src/utils/title-generator.ts +137 -1
- package/src/utils/tool-choice.ts +14 -0
- package/src/utils/tools-manager.ts +1 -19
- package/src/vibe/runtime.ts +852 -72
- package/src/web/search/index.ts +3 -6
- package/src/web/search/provider.ts +31 -16
- package/src/web/search/providers/xai.ts +7 -1
- package/src/web/search/types.ts +3 -0
- package/dist/types/stt/recorder.d.ts +0 -30
- package/dist/types/stt/transcriber.d.ts +0 -14
- package/dist/types/stt/wav.d.ts +0 -29
- package/dist/types/tts/player.d.ts +0 -32
- package/src/stt/recorder.ts +0 -551
- package/src/stt/transcriber.ts +0 -60
- package/src/stt/wav.ts +0 -173
- package/src/tts/player.ts +0 -137
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { type Agent, type AgentMessage, type ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
2
|
+
import type { AssistantMessage, CodexCompactionContext, Model, ToolChoice } from "@oh-my-pi/pi-ai";
|
|
3
|
+
import type { ModelRegistry } from "../config/model-registry.js";
|
|
4
|
+
import type { Settings } from "../config/settings.js";
|
|
5
|
+
import type { ConfiguredThinkingLevel } from "../thinking.js";
|
|
6
|
+
import type { AgentSessionEvent } from "./agent-session-events.js";
|
|
7
|
+
import type { InitialRetryFallbackState } from "./agent-session-types.js";
|
|
8
|
+
import { type RetryFallbackSelector } from "./retry-fallback-chains.js";
|
|
9
|
+
import type { SessionManager } from "./session-manager.js";
|
|
10
|
+
/** Result shape shared with automatic maintenance recovery. */
|
|
11
|
+
export interface RecoveryCompactionResult {
|
|
12
|
+
deferredHandoff: boolean;
|
|
13
|
+
continuationScheduled: boolean;
|
|
14
|
+
automaticContinuationBlocked?: boolean;
|
|
15
|
+
historyRewritten?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Capabilities borrowed from the owning AgentSession. */
|
|
18
|
+
export interface TurnRecoveryHost {
|
|
19
|
+
agent: Agent;
|
|
20
|
+
sessionManager: SessionManager;
|
|
21
|
+
settings: Settings;
|
|
22
|
+
modelRegistry: ModelRegistry;
|
|
23
|
+
configWarnings: string[];
|
|
24
|
+
model(): Model | undefined;
|
|
25
|
+
thinkingLevel(): ThinkingLevel | undefined;
|
|
26
|
+
configuredThinkingLevel(): ConfiguredThinkingLevel | undefined;
|
|
27
|
+
setThinkingLevel(level: ConfiguredThinkingLevel | undefined): void;
|
|
28
|
+
isDisposed(): boolean;
|
|
29
|
+
isStreaming(): boolean;
|
|
30
|
+
isCompacting(): boolean;
|
|
31
|
+
abortInProgress(): boolean;
|
|
32
|
+
streamingEditAbortTriggered(): boolean;
|
|
33
|
+
promptGeneration(): number;
|
|
34
|
+
sessionId(): string;
|
|
35
|
+
emitSessionEvent(event: AgentSessionEvent): Promise<void>;
|
|
36
|
+
scheduleAgentContinue(options: {
|
|
37
|
+
delayMs?: number;
|
|
38
|
+
generation?: number;
|
|
39
|
+
}): void;
|
|
40
|
+
waitForSessionMessagePersistence(message: AssistantMessage): Promise<void>;
|
|
41
|
+
appendSessionMessage(message: AssistantMessage): void;
|
|
42
|
+
sessionMessageAlreadyPersisted(message: AssistantMessage): boolean;
|
|
43
|
+
setModelWithProviderSessionReset(model: Model): void;
|
|
44
|
+
resetCurrentResponsesProviderSession(reason: string): void;
|
|
45
|
+
maybeAutoRedeemCodexReset(): Promise<boolean>;
|
|
46
|
+
runAutoCompaction(reason: "overflow" | "threshold" | "idle" | "incomplete", willRetry: boolean, deferred?: boolean, allowDefer?: boolean, options?: {
|
|
47
|
+
autoContinue?: boolean;
|
|
48
|
+
triggerContextTokens?: number;
|
|
49
|
+
suppressContinuation?: boolean;
|
|
50
|
+
suppressHandoff?: boolean;
|
|
51
|
+
phase?: CodexCompactionContext["phase"];
|
|
52
|
+
terminalTextAnswer?: boolean;
|
|
53
|
+
}): Promise<RecoveryCompactionResult>;
|
|
54
|
+
withBashBranchTransition<T>(operation: () => T): T;
|
|
55
|
+
}
|
|
56
|
+
/** Construction-time retry state restored from model selection. */
|
|
57
|
+
export interface TurnRecoveryOptions {
|
|
58
|
+
initialRetryFallback?: InitialRetryFallbackState;
|
|
59
|
+
}
|
|
60
|
+
/** Owns terminal-stop recovery, automatic retries, and fallback routing. */
|
|
61
|
+
export declare class TurnRecovery {
|
|
62
|
+
#private;
|
|
63
|
+
constructor(host: TurnRecoveryHost, options?: TurnRecoveryOptions);
|
|
64
|
+
/** Current automatic retry attempt. */
|
|
65
|
+
get attempt(): number;
|
|
66
|
+
/** Promise settled when the active retry saga finishes. */
|
|
67
|
+
get retryPromise(): Promise<void> | undefined;
|
|
68
|
+
/** Resolved selector while fallback routing owns the current model. */
|
|
69
|
+
get retryFallbackModel(): string | undefined;
|
|
70
|
+
/** Resets per-prompt recovery counters and terminal-stop acceptance. */
|
|
71
|
+
resetForNewPrompt(): void;
|
|
72
|
+
/** Sets whether one terminal empty stop is accepted for the current prompt. */
|
|
73
|
+
setAcceptTerminalEmptyStop(accept: boolean): void;
|
|
74
|
+
/** Closes a successful retry saga and annotates recovered persisted errors. */
|
|
75
|
+
onAssistantSettledSuccessfully(message: AssistantMessage): Promise<void>;
|
|
76
|
+
/** Closes a failed retry saga when no compaction continuation took ownership. */
|
|
77
|
+
onErrorSettledWithoutRetry(message: AssistantMessage, compaction: RecoveryCompactionResult): Promise<void>;
|
|
78
|
+
/** Persists an otherwise skipped terminal empty error turn. */
|
|
79
|
+
persistTerminalEmptyErrorTurn(message: AssistantMessage): Promise<void>;
|
|
80
|
+
/** Handles empty terminal assistant turns and schedules bounded recovery. */
|
|
81
|
+
handleEmptyAssistantStop(message: AssistantMessage): Promise<boolean>;
|
|
82
|
+
/** Classifies suspicious terminal stops and schedules bounded recovery. */
|
|
83
|
+
handleUnexpectedAssistantStop(message: AssistantMessage): Promise<boolean>;
|
|
84
|
+
/** Removes a persisted failed assistant turn after its persistence slot settles. */
|
|
85
|
+
dropPersistedAssistantTurn(message: AssistantMessage): Promise<void>;
|
|
86
|
+
/** Runs recovery compaction and restores the failed turn when no rewrite occurs. */
|
|
87
|
+
runRecoveryCompactionWithRollback(reason: "overflow" | "incomplete", message: AssistantMessage, allowDefer: boolean, options: {
|
|
88
|
+
autoContinue: boolean;
|
|
89
|
+
triggerContextTokens?: number;
|
|
90
|
+
}): Promise<RecoveryCompactionResult>;
|
|
91
|
+
/** Restores the configured primary after fallback cooldown expiry. */
|
|
92
|
+
maybeRestoreRetryFallbackPrimary(): Promise<void>;
|
|
93
|
+
/** Applies automatic retry, credential rotation, and model fallback policy. */
|
|
94
|
+
handleRetryableError(message: AssistantMessage, options?: {
|
|
95
|
+
allowModelFallback?: boolean;
|
|
96
|
+
fireworksFastFallback?: boolean;
|
|
97
|
+
hardErrorFallback?: boolean;
|
|
98
|
+
preserveFailedTurn?: boolean;
|
|
99
|
+
}): Promise<boolean>;
|
|
100
|
+
/** Prompts after transient overlap with a prior agent run. */
|
|
101
|
+
promptAgentWithIdleRetry(messages: AgentMessage[], options?: {
|
|
102
|
+
toolChoice?: ToolChoice;
|
|
103
|
+
}): Promise<void>;
|
|
104
|
+
/** Parses provider retry and rate-limit reset hints into a delay. */
|
|
105
|
+
parseRetryAfterMsFromError(errorMessage: string): number | undefined;
|
|
106
|
+
/** Resolve the pending retry promise */
|
|
107
|
+
resolveRetry(): void;
|
|
108
|
+
removeAssistantMessageFromActiveContext(assistantMessage: AssistantMessage, reason?: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Drop an assistant turn from BOTH the live agent context and the persisted
|
|
111
|
+
* session branch (reparenting the leaf to the turn's parent), so a discarded
|
|
112
|
+
* turn does not resurface on reload. Used for empty/reasoning-only stops and
|
|
113
|
+
* the Gemini header-runaway interrupt, which must not replay a partial,
|
|
114
|
+
* loop-fueling thinking block.
|
|
115
|
+
*/
|
|
116
|
+
discardAssistantTurn(assistantMessage: AssistantMessage): void;
|
|
117
|
+
/**
|
|
118
|
+
* Retry an empty, reason-less provider abort: a turn with no content that
|
|
119
|
+
* carries the generic sentinel (bare `abort()`), whether the provider
|
|
120
|
+
* finalized it as `stopReason: "aborted"` or leaked it as `stopReason:
|
|
121
|
+
* "error"` (a stalled/dropped stream reported as an error rather than an
|
|
122
|
+
* abort — issue #5375). Only fires while the session is neither aborting nor
|
|
123
|
+
* tearing down. A user/lifecycle abort (`#abortInProgress`), a dispose-driven
|
|
124
|
+
* abort (`#isDisposed`), or a session-induced streaming-edit guard abort
|
|
125
|
+
* (`StreamingEditGuard.abortTriggered` — auto-generated-file guard or failed-patch
|
|
126
|
+
* preview) is deliberate and MUST settle the turn instead: routing it through
|
|
127
|
+
* retry would orphan `#retryPromise` on a continuation the guard skips
|
|
128
|
+
* (hanging the in-flight `prompt()`) or silently undo the guard's intended
|
|
129
|
+
* abort. Deliberate user interrupts (`UserInterrupt`) and silent aborts carry
|
|
130
|
+
* their own marker, not the generic sentinel, so they never match here.
|
|
131
|
+
*/
|
|
132
|
+
isRetryableReasonlessAbort(message: AssistantMessage): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Check if an error is retryable (transient errors or usage limits).
|
|
135
|
+
* Context overflow is NOT retryable (handled by compaction instead).
|
|
136
|
+
* Usage-limit errors are retryable because the retry handler performs credential switching.
|
|
137
|
+
*/
|
|
138
|
+
isRetryableError(message: AssistantMessage): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Resume a stalled turn after every emitted tool call has produced a result.
|
|
141
|
+
* Cursor calls must also carry the server-execution marker. The failed
|
|
142
|
+
* assistant/tool-result pair stays in context so completed side effects are
|
|
143
|
+
* continued from rather than replayed.
|
|
144
|
+
*/
|
|
145
|
+
canResumeResolvedStreamStall(message: AssistantMessage): boolean;
|
|
146
|
+
/** Checks whether a provider error represents a classifier refusal. */
|
|
147
|
+
isClassifierRefusal(message: AssistantMessage): boolean;
|
|
148
|
+
/** Clears fallback ownership after an explicit model change. */
|
|
149
|
+
clearActiveRetryFallback(): void;
|
|
150
|
+
/** Checks whether a fallback selector remains in cooldown. */
|
|
151
|
+
isRetryFallbackSelectorSuppressed(selector: RetryFallbackSelector): boolean;
|
|
152
|
+
/** Records the cooldown that should suppress a failing selector. */
|
|
153
|
+
noteRetryFallbackCooldown(currentSelector: string, retryAfterMs: number | undefined, errorMessage: string): void;
|
|
154
|
+
/**
|
|
155
|
+
* Map the failing model selector to the chain key that owns it, by
|
|
156
|
+
* specificity: an exact model-selector key, then a `provider/*` wildcard,
|
|
157
|
+
* then a model role whose current assignment matches, then `default`.
|
|
158
|
+
* Model-oriented keys win over roles so a chain follows the model across
|
|
159
|
+
* role reassignments.
|
|
160
|
+
*/
|
|
161
|
+
resolveRetryFallbackRole(currentSelector: string, currentModel?: Model | null | undefined): string | undefined;
|
|
162
|
+
/** Finds fallback candidates that follow the active selector. */
|
|
163
|
+
findRetryFallbackCandidates(role: string, currentSelector: string, currentModel?: Model | null | undefined): RetryFallbackSelector[];
|
|
164
|
+
applyRetryFallbackCandidate(role: string, selector: RetryFallbackSelector, currentSelector: string, options?: {
|
|
165
|
+
pinFallback?: boolean;
|
|
166
|
+
apiKey?: string;
|
|
167
|
+
signal?: AbortSignal;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* True when the current turn failed on a Fireworks Fast (`-fast`) model in a
|
|
171
|
+
* way that should degrade to the reliable base (Standard) model. Fast is a
|
|
172
|
+
* speed-optimized router with no SLA, so any *pre-content* failure — a
|
|
173
|
+
* transient overload/5xx or a hard "router/model not found / unsupported" —
|
|
174
|
+
* is worth retrying on the base id. Skips failures the base model shares:
|
|
175
|
+
* context overflow (compaction's job), usage limits and auth errors (same
|
|
176
|
+
* account/key), and turns that already emitted a tool call (replaying would
|
|
177
|
+
* duplicate work). Requires the base model to exist in the registry.
|
|
178
|
+
*/
|
|
179
|
+
isFireworksFastFallbackEligible(message: AssistantMessage): boolean;
|
|
180
|
+
/**
|
|
181
|
+
* True when a turn failed with a hard (non-retryable) provider error but a
|
|
182
|
+
* configured `retry.fallbackChains` entry covers the active model: the same
|
|
183
|
+
* model is not worth retrying, yet a DIFFERENT model is a fresh chance, so
|
|
184
|
+
* the chain is consulted before the error becomes final. Skips failures a
|
|
185
|
+
* model switch cannot fix or must not replay: cancellations (abort-flavored
|
|
186
|
+
* errors are not model faults), context overflow (compaction's job),
|
|
187
|
+
* classifier refusals (chain consult is handled on the retryable path with
|
|
188
|
+
* `pinFallback`), and turns that already emitted a tool call (replaying
|
|
189
|
+
* could duplicate work).
|
|
190
|
+
*/
|
|
191
|
+
isHardErrorFallbackEligible(message: AssistantMessage): boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Cancel in-progress retry.
|
|
194
|
+
*/
|
|
195
|
+
abortRetry(): void;
|
|
196
|
+
/** Whether auto-retry is currently in progress */
|
|
197
|
+
get isRetrying(): boolean;
|
|
198
|
+
/** Whether auto-retry is enabled */
|
|
199
|
+
get autoRetryEnabled(): boolean;
|
|
200
|
+
/**
|
|
201
|
+
* Toggle auto-retry setting.
|
|
202
|
+
*/
|
|
203
|
+
setAutoRetryEnabled(enabled: boolean): void;
|
|
204
|
+
/**
|
|
205
|
+
* Manually retry the last failed assistant turn.
|
|
206
|
+
* Removes the error message from active agent state when present and
|
|
207
|
+
* re-attempts with a fresh retry budget.
|
|
208
|
+
*
|
|
209
|
+
* A stream that stalls or aborts mid-tool-call ends the turn with
|
|
210
|
+
* `stopReason: "error" | "aborted"` and then appends one synthetic
|
|
211
|
+
* {@link isSyntheticToolResultMessage tool_result} per emitted tool call to
|
|
212
|
+
* preserve the provider's tool_use/tool_result pairing (see
|
|
213
|
+
* `createAbortedToolResult` in `agent-loop.ts`). Those placeholders trail the
|
|
214
|
+
* failed assistant turn, so the retry lookback walks back over them before
|
|
215
|
+
* checking the assistant message; it strips both the placeholders and the
|
|
216
|
+
* failed turn before re-attempting.
|
|
217
|
+
*
|
|
218
|
+
* A restored session deliberately omits failed assistant turns from provider
|
|
219
|
+
* context. In that case, the persisted display transcript remains the source
|
|
220
|
+
* of truth for whether the current branch has a retryable failed tail.
|
|
221
|
+
*
|
|
222
|
+
* @returns true if retry was initiated, false if no failed turn to retry or agent is busy
|
|
223
|
+
*/
|
|
224
|
+
retry(): Promise<boolean>;
|
|
225
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OAuthAccountSummary } from "../../session/auth-storage.js";
|
|
2
|
+
/** Stored OAuth account rendered and matched by `/session pin`. */
|
|
3
|
+
export interface SessionPinAccount extends OAuthAccountSummary {
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
/** Add stable user-facing labels to provider account summaries. */
|
|
7
|
+
export declare function toSessionPinAccounts(accounts: readonly OAuthAccountSummary[]): SessionPinAccount[];
|
|
8
|
+
/** Match a `/session pin` selector by 1-based position or exact account identity. */
|
|
9
|
+
export declare function matchSessionPinAccounts(accounts: readonly SessionPinAccount[], selector: string): SessionPinAccount[];
|
|
@@ -15,8 +15,15 @@ interface Editor {
|
|
|
15
15
|
submit(): void;
|
|
16
16
|
deleteBeforeCursor(count: number): void;
|
|
17
17
|
}
|
|
18
|
+
interface CaptureHandle {
|
|
19
|
+
stop(): void;
|
|
20
|
+
}
|
|
21
|
+
type CaptureFactory = (onAudio: (error: Error | null, samples: Float32Array) => void) => CaptureHandle;
|
|
22
|
+
/** Coordinates native microphone capture with incremental local transcription. */
|
|
18
23
|
export declare class STTController {
|
|
19
24
|
#private;
|
|
25
|
+
/** Creates a controller; tests may replace the hardware capture boundary. */
|
|
26
|
+
constructor(createCapture?: CaptureFactory);
|
|
20
27
|
get state(): SttState;
|
|
21
28
|
toggle(editor: Editor, options: ToggleOptions): Promise<void>;
|
|
22
29
|
dispose(): void;
|
|
@@ -72,6 +72,8 @@ export interface BuildSystemPromptOptions {
|
|
|
72
72
|
skillsSettings?: SkillsSettings;
|
|
73
73
|
/** Working directory. Default: getProjectDir() */
|
|
74
74
|
cwd?: string;
|
|
75
|
+
/** Additional workspace directories beyond cwd (multi-root), absolute. Injected into the project prompt. */
|
|
76
|
+
additionalWorkspaceRoots?: string[];
|
|
75
77
|
/** Pre-loaded context files (skips discovery if provided). */
|
|
76
78
|
contextFiles?: Array<{
|
|
77
79
|
path: string;
|
|
@@ -17,6 +17,7 @@ import type { HindsightSessionState } from "../hindsight/state.js";
|
|
|
17
17
|
import type { LocalProtocolOptions } from "../internal-urls/index.js";
|
|
18
18
|
import type { MCPManager } from "../mcp/manager.js";
|
|
19
19
|
import type { MnemopiSessionState } from "../mnemopi/state.js";
|
|
20
|
+
import { type AgentReviver } from "../registry/agent-lifecycle.js";
|
|
20
21
|
import type { AgentSession } from "../session/agent-session.js";
|
|
21
22
|
import type { ArtifactManager } from "../session/artifacts.js";
|
|
22
23
|
import type { AuthStorage } from "../session/auth-storage.js";
|
|
@@ -44,6 +45,8 @@ export declare function buildBudgetNotice(requests: number, budget: number): str
|
|
|
44
45
|
/** Options for subagent execution */
|
|
45
46
|
export interface ExecutorOptions {
|
|
46
47
|
cwd: string;
|
|
48
|
+
/** Additional workspace directories to seed on the subagent session (multi-root). */
|
|
49
|
+
additionalDirectories?: string[];
|
|
47
50
|
worktree?: string;
|
|
48
51
|
agent: AgentDefinition;
|
|
49
52
|
task: string;
|
|
@@ -249,7 +252,7 @@ export declare function finalizeSubagentLifecycle(args: {
|
|
|
249
252
|
keepAlive: boolean;
|
|
250
253
|
isolated: boolean;
|
|
251
254
|
agentIdleTtlMs: number;
|
|
252
|
-
reviveSession:
|
|
255
|
+
reviveSession: AgentReviver | null;
|
|
253
256
|
}): Promise<void>;
|
|
254
257
|
/** Options for {@link runSubagentFollowUpTurn}. */
|
|
255
258
|
export interface FollowUpTurnOptions {
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The first allocation of a given name keeps the name as-is; subsequent
|
|
5
5
|
* allocations of the same name get a `-2`, `-3`, … suffix. On resume, scans
|
|
6
|
-
* existing output files so
|
|
6
|
+
* existing output and child-session files so prior state is never overwritten.
|
|
7
7
|
*/
|
|
8
8
|
export declare class AgentOutputManager {
|
|
9
9
|
#private;
|
|
10
10
|
constructor(getArtifactsDir: () => string | null, options?: {
|
|
11
11
|
parentPrefix?: string;
|
|
12
12
|
});
|
|
13
|
+
/** Reserve final IDs discovered outside the output directory scan. */
|
|
14
|
+
reserve(ids: Iterable<string>): Promise<void>;
|
|
13
15
|
/**
|
|
14
16
|
* Allocate a unique ID.
|
|
15
17
|
*
|
|
@@ -50,6 +50,16 @@ export declare class TinyTitleClient {
|
|
|
50
50
|
#private;
|
|
51
51
|
constructor(spawnWorker?: () => RefCountedWorkerHandle<TinyTitleWorkerInbound, TinyTitleWorkerOutbound>);
|
|
52
52
|
onProgress(listener: (event: TinyTitleProgressEvent) => void): () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Spawn the tiny-model worker ahead of first use without loading any model.
|
|
55
|
+
* Called from idle TUI startup so the first {@link generate} reuses a live,
|
|
56
|
+
* unref'd subprocess instead of paying subprocess-spawn latency on the submit
|
|
57
|
+
* hot path (issue #6462). No-ops for online / non-local keys and for models
|
|
58
|
+
* already marked failed. A no-op `ping` round-trips the transport to fault in
|
|
59
|
+
* the worker's module graph; no pending request is registered, so
|
|
60
|
+
* {@link #syncWorkerRef} leaves the worker unref'd and idle sessions still exit.
|
|
61
|
+
*/
|
|
62
|
+
prewarm(modelKey: string): void;
|
|
53
63
|
generate(modelKey: string, message: string, signal?: AbortSignal): Promise<string | null>;
|
|
54
64
|
generate(modelKey: string, message: string, options?: TinyTitleGenerateOptions): Promise<string | null>;
|
|
55
65
|
complete(modelKey: string, prompt: string, options?: {
|
|
@@ -14,6 +14,7 @@ export declare const BROWSER_PROTOCOL_TIMEOUT_MS = 60000;
|
|
|
14
14
|
export declare function loadPuppeteer(): Promise<typeof Puppeteer>;
|
|
15
15
|
export declare function loadPuppeteerInWorker(safeDir: string): Promise<typeof Puppeteer>;
|
|
16
16
|
export declare function ensureChromiumExecutable(): Promise<string | undefined>;
|
|
17
|
+
/** Options shared by headless Chromium consumers. */
|
|
17
18
|
export interface LaunchHeadlessOptions {
|
|
18
19
|
headless: boolean;
|
|
19
20
|
viewport?: {
|
|
@@ -21,6 +22,10 @@ export interface LaunchHeadlessOptions {
|
|
|
21
22
|
height: number;
|
|
22
23
|
deviceScaleFactor?: number;
|
|
23
24
|
};
|
|
25
|
+
/** Additional Chromium arguments merged with the centralized launch defaults. */
|
|
26
|
+
args?: readonly string[];
|
|
27
|
+
/** Additional exact Puppeteer default arguments to suppress. */
|
|
28
|
+
ignoreDefaultArgs?: readonly string[];
|
|
24
29
|
}
|
|
25
30
|
export declare function launchHeadlessBrowser(opts: LaunchHeadlessOptions): Promise<Browser>;
|
|
26
31
|
export declare function applyViewport(page: Page, viewport?: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const BUILTIN_TOOL_NAMES: readonly ["read", "bash", "edit", "ast_grep", "ast_edit", "ask", "debug", "eval", "github", "glob", "grep", "lsp", "inspect_image", "browser", "checkpoint", "rewind", "task", "hub", "todo", "web_search", "write", "memory_edit", "retain", "recall", "reflect", "learn", "manage_skill"];
|
|
1
|
+
export declare const BUILTIN_TOOL_NAMES: readonly ["read", "bash", "edit", "ast_grep", "ast_edit", "ask", "debug", "eval", "github", "glob", "grep", "lsp", "inspect_image", "browser", "computer", "checkpoint", "rewind", "task", "hub", "todo", "web_search", "write", "memory_edit", "retain", "recall", "reflect", "learn", "manage_skill"];
|
|
2
2
|
export type BuiltinToolName = (typeof BUILTIN_TOOL_NAMES)[number];
|
|
3
3
|
/** Hidden built-ins: constructible and `--tools`-addressable, but never part of the default active set. */
|
|
4
4
|
export declare const HIDDEN_TOOL_NAMES: readonly ["yield", "goal"];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DesktopAction, DesktopCapabilities, DesktopCapture, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
|
|
2
|
+
export declare const COMPUTER_WORKER_ARG = "__omp_worker_computer";
|
|
3
|
+
export type ComputerWorkerInbound = {
|
|
4
|
+
type: "ping";
|
|
5
|
+
id: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: "init";
|
|
8
|
+
options: DesktopSessionOptions;
|
|
9
|
+
} | {
|
|
10
|
+
type: "execute";
|
|
11
|
+
id: string;
|
|
12
|
+
actions: DesktopAction[];
|
|
13
|
+
} | {
|
|
14
|
+
type: "close";
|
|
15
|
+
};
|
|
16
|
+
export type ComputerWorkerOutbound = {
|
|
17
|
+
type: "pong";
|
|
18
|
+
id: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: "ready";
|
|
21
|
+
capabilities: DesktopCapabilities;
|
|
22
|
+
} | {
|
|
23
|
+
type: "result";
|
|
24
|
+
id: string;
|
|
25
|
+
capture: DesktopCapture;
|
|
26
|
+
capabilities: DesktopCapabilities;
|
|
27
|
+
} | {
|
|
28
|
+
type: "error";
|
|
29
|
+
id?: string;
|
|
30
|
+
error: ComputerWorkerError;
|
|
31
|
+
} | {
|
|
32
|
+
type: "closed";
|
|
33
|
+
};
|
|
34
|
+
export interface ComputerWorkerError {
|
|
35
|
+
name: string;
|
|
36
|
+
message: string;
|
|
37
|
+
stack?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ComputerWorkerTransport {
|
|
40
|
+
send(message: ComputerWorkerOutbound, transfer?: Bun.Transferable[]): void;
|
|
41
|
+
onMessage(handler: (message: ComputerWorkerInbound) => void): () => void;
|
|
42
|
+
close(): void;
|
|
43
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { DesktopAction, DesktopCapabilities, DesktopCapture, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
|
|
2
|
+
import { type ComputerWorkerInbound, type ComputerWorkerOutbound } from "./protocol.js";
|
|
3
|
+
export interface ComputerController {
|
|
4
|
+
readonly capabilities: DesktopCapabilities | undefined;
|
|
5
|
+
execute(actions: DesktopAction[], signal?: AbortSignal): Promise<DesktopCapture>;
|
|
6
|
+
close(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export interface ComputerWorkerHandle {
|
|
9
|
+
send(message: ComputerWorkerInbound): void;
|
|
10
|
+
onMessage(handler: (message: ComputerWorkerOutbound) => void): () => void;
|
|
11
|
+
onError(handler: (error: Error) => void): () => void;
|
|
12
|
+
terminate(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export interface ComputerSupervisorTimeouts {
|
|
15
|
+
startMs: number;
|
|
16
|
+
closeMs: number;
|
|
17
|
+
}
|
|
18
|
+
export type ComputerWorkerFactory = () => ComputerWorkerHandle;
|
|
19
|
+
export declare function spawnComputerWorker(): ComputerWorkerHandle;
|
|
20
|
+
export declare class ComputerSupervisor implements ComputerController {
|
|
21
|
+
#private;
|
|
22
|
+
private readonly options;
|
|
23
|
+
private readonly createWorker;
|
|
24
|
+
private readonly timeouts;
|
|
25
|
+
constructor(options: DesktopSessionOptions, createWorker?: ComputerWorkerFactory, timeouts?: ComputerSupervisorTimeouts);
|
|
26
|
+
get capabilities(): DesktopCapabilities | undefined;
|
|
27
|
+
execute(actions: DesktopAction[], signal?: AbortSignal): Promise<DesktopCapture>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare function registerComputerController(ownerId: string | undefined, controller: ComputerController): () => void;
|
|
31
|
+
export declare function releaseComputerSessionsForOwner(ownerId: string | undefined): Promise<void>;
|
|
32
|
+
export declare function smokeTestComputerWorker(timeoutMs?: number): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type DesktopAction, type DesktopCapture, DesktopSession, type DesktopSessionOptions } from "@oh-my-pi/pi-natives";
|
|
2
|
+
import type { ComputerWorkerTransport } from "./protocol.js";
|
|
3
|
+
export interface NativeDesktopSession {
|
|
4
|
+
readonly capabilities: DesktopSession["capabilities"];
|
|
5
|
+
capture(): Promise<DesktopCapture>;
|
|
6
|
+
execute(actions: DesktopAction[]): Promise<DesktopCapture>;
|
|
7
|
+
close(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export type NativeDesktopSessionFactory = (options: DesktopSessionOptions) => NativeDesktopSession;
|
|
10
|
+
export declare class ComputerWorkerCore {
|
|
11
|
+
#private;
|
|
12
|
+
private readonly transport;
|
|
13
|
+
private readonly createSession;
|
|
14
|
+
constructor(transport: ComputerWorkerTransport, createSession?: NativeDesktopSessionFactory);
|
|
15
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Component } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
|
|
3
|
+
import type { Theme } from "../modes/theme/theme.js";
|
|
4
|
+
interface ComputerRenderArgs {
|
|
5
|
+
actions?: Array<{
|
|
6
|
+
type?: unknown;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
interface ComputerRenderResult {
|
|
10
|
+
content: Array<{
|
|
11
|
+
type: string;
|
|
12
|
+
text?: string;
|
|
13
|
+
}>;
|
|
14
|
+
details?: unknown;
|
|
15
|
+
isError?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const computerToolRenderer: {
|
|
18
|
+
mergeCallAndResult: boolean;
|
|
19
|
+
renderCall(args: ComputerRenderArgs, _options: RenderResultOptions, theme: Theme): Component;
|
|
20
|
+
renderResult(result: ComputerRenderResult, options: RenderResultOptions, theme: Theme, args?: ComputerRenderArgs): Component;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback, ToolApprovalDecision } from "@oh-my-pi/pi-agent-core";
|
|
2
|
+
import type { ComputerAction } from "@oh-my-pi/pi-ai";
|
|
3
|
+
import type { DesktopCapabilities, DesktopCapture, DesktopDisplay, DesktopSessionOptions } from "@oh-my-pi/pi-natives";
|
|
4
|
+
import { type ComputerController } from "./computer/supervisor.js";
|
|
5
|
+
import type { ToolSession } from "./index.js";
|
|
6
|
+
declare const computerSchema: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
7
|
+
actions?: {
|
|
8
|
+
type: "click" | "double_click" | "drag" | "keypress" | "move" | "screenshot" | "scroll" | "type" | "wait";
|
|
9
|
+
x?: number | undefined;
|
|
10
|
+
y?: number | undefined;
|
|
11
|
+
button?: "back" | "forward" | "left" | "right" | "wheel" | undefined;
|
|
12
|
+
path?: {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
}[] | undefined;
|
|
16
|
+
keys?: string[] | null | undefined;
|
|
17
|
+
scroll_x?: number | undefined;
|
|
18
|
+
scroll_y?: number | undefined;
|
|
19
|
+
text?: string | undefined;
|
|
20
|
+
}[] | undefined;
|
|
21
|
+
}, {}>;
|
|
22
|
+
export type ComputerParams = typeof computerSchema.infer;
|
|
23
|
+
export interface ComputerToolDetails {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
backend: DesktopCapture["backend"];
|
|
27
|
+
displayServer?: string;
|
|
28
|
+
capturePermission: string;
|
|
29
|
+
inputPermission: string;
|
|
30
|
+
displays: DesktopDisplay[];
|
|
31
|
+
capabilities?: DesktopCapabilities;
|
|
32
|
+
actions: ComputerAction["type"][];
|
|
33
|
+
}
|
|
34
|
+
export type ComputerControllerFactory = (options: DesktopSessionOptions) => ComputerController;
|
|
35
|
+
export declare function computerApproval(args: unknown): ToolApprovalDecision;
|
|
36
|
+
export declare class ComputerTool implements AgentTool<typeof computerSchema, ComputerToolDetails> {
|
|
37
|
+
#private;
|
|
38
|
+
readonly session: ToolSession;
|
|
39
|
+
readonly name = "computer";
|
|
40
|
+
readonly native: {
|
|
41
|
+
readonly type: "computer";
|
|
42
|
+
};
|
|
43
|
+
readonly label = "Computer";
|
|
44
|
+
readonly loadMode: "essential";
|
|
45
|
+
readonly concurrency: "exclusive";
|
|
46
|
+
readonly summary = "Capture and control the host desktop through native OS APIs";
|
|
47
|
+
readonly parameters: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
48
|
+
actions?: {
|
|
49
|
+
type: "click" | "double_click" | "drag" | "keypress" | "move" | "screenshot" | "scroll" | "type" | "wait";
|
|
50
|
+
x?: number | undefined;
|
|
51
|
+
y?: number | undefined;
|
|
52
|
+
button?: "back" | "forward" | "left" | "right" | "wheel" | undefined;
|
|
53
|
+
path?: {
|
|
54
|
+
x: number;
|
|
55
|
+
y: number;
|
|
56
|
+
}[] | undefined;
|
|
57
|
+
keys?: string[] | null | undefined;
|
|
58
|
+
scroll_x?: number | undefined;
|
|
59
|
+
scroll_y?: number | undefined;
|
|
60
|
+
text?: string | undefined;
|
|
61
|
+
}[] | undefined;
|
|
62
|
+
}, {}>;
|
|
63
|
+
readonly strict = false;
|
|
64
|
+
readonly approval: typeof computerApproval;
|
|
65
|
+
readonly formatApprovalDetails: (args: unknown) => string[];
|
|
66
|
+
constructor(session: ToolSession, createController?: ComputerControllerFactory);
|
|
67
|
+
get description(): string;
|
|
68
|
+
execute(_toolCallId: string, params: ComputerParams, signal?: AbortSignal, _onUpdate?: AgentToolUpdateCallback<ComputerToolDetails>, context?: AgentToolContext): Promise<AgentToolResult<ComputerToolDetails>>;
|
|
69
|
+
close(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
@@ -12,6 +12,8 @@ declare module "@oh-my-pi/pi-agent-core" {
|
|
|
12
12
|
* wrapper must not re-prompt for the same action (explicit per-tool
|
|
13
13
|
* policies and overrides still apply). */
|
|
14
14
|
xdevApproved?: boolean;
|
|
15
|
+
/** Set only after an interactive prompt approves provider computer safety checks. */
|
|
16
|
+
providerSafetyApproved?: boolean;
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
export declare class ToolContextStore {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Component } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import type { RenderResultOptions } from "../extensibility/custom-tools/types.js";
|
|
3
|
+
import type { Theme } from "../modes/theme/theme.js";
|
|
4
|
+
/** Inputs rendered by the fallback card used when a tool has no bespoke renderer. */
|
|
5
|
+
export interface DefaultToolRenderInput {
|
|
6
|
+
/** Human-readable tool label. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Tool arguments, shown inline when collapsed and as a tree when expanded. */
|
|
9
|
+
args: unknown;
|
|
10
|
+
/** Settled or streaming result; omitted while only the call is available. */
|
|
11
|
+
result?: {
|
|
12
|
+
output: string;
|
|
13
|
+
isError?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/** Current expansion and lifecycle state. */
|
|
16
|
+
options: RenderResultOptions;
|
|
17
|
+
}
|
|
18
|
+
/** Format one generic tool call/result card at the available content width. */
|
|
19
|
+
export declare function formatDefaultToolExecution(input: DefaultToolRenderInput, contentWidth: number, uiTheme: Theme): string;
|
|
20
|
+
/** Render the generic fallback as the state-tinted card used by direct custom tools. */
|
|
21
|
+
export declare function renderDefaultToolExecution(input: DefaultToolRenderInput, uiTheme: Theme): Component;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type Model } from "@oh-my-pi/pi-ai";
|
|
2
2
|
import { type ModelRegistry } from "../config/model-registry.js";
|
|
3
3
|
import type { CustomTool } from "../extensibility/custom-tools/types.js";
|
|
4
|
-
|
|
4
|
+
import { type ImageProvider } from "./image-providers.js";
|
|
5
|
+
export type { ImageProvider } from "./image-providers.js";
|
|
5
6
|
export type ImageProviderPreference = ImageProvider | "auto";
|
|
6
7
|
declare const responseModalitySchema: import("arktype/internal/variants/string.ts").StringType<"IMAGE" | "TEXT", {}>;
|
|
7
8
|
export declare const imageGenSchema: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
@@ -59,9 +60,8 @@ interface InlineImageData {
|
|
|
59
60
|
mimeType: string;
|
|
60
61
|
}
|
|
61
62
|
export declare function isImageProviderPreference(value: unknown): value is ImageProviderPreference;
|
|
62
|
-
/** Set the
|
|
63
|
-
export declare function
|
|
63
|
+
/** Set the configured image-provider priority from settings; invalid IDs are dropped. */
|
|
64
|
+
export declare function setImageProviderOrder(providers: readonly string[]): void;
|
|
64
65
|
export declare const imageGenTool: CustomTool<typeof imageGenSchema, ImageGenToolDetails>;
|
|
65
66
|
export declare function getImageGenTools(_modelRegistry?: ModelRegistry, _activeModel?: Model): Promise<Array<CustomTool<typeof imageGenSchema, ImageGenToolDetails>>>;
|
|
66
67
|
export declare function getImageGenToolsWithRegistry(_modelRegistry: ModelRegistry, _activeModel?: Model): Promise<Array<CustomTool<typeof imageGenSchema, ImageGenToolDetails>>>;
|
|
67
|
-
export {};
|