@oh-my-pi/pi-coding-agent 15.9.67 → 15.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -1
- package/dist/types/cli/args.d.ts +1 -1
- package/dist/types/cli/gallery-cli.d.ts +43 -0
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/types.d.ts +44 -0
- package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
- package/dist/types/cli/gallery-screenshot.d.ts +35 -0
- package/dist/types/commands/gallery.d.ts +47 -0
- package/dist/types/config/keybindings.d.ts +6 -1
- package/dist/types/config/model-id-affixes.d.ts +2 -0
- package/dist/types/config/model-registry.d.ts +8 -1
- package/dist/types/config/settings-schema.d.ts +32 -6
- package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
- package/dist/types/lsp/types.d.ts +10 -0
- package/dist/types/main.d.ts +3 -2
- package/dist/types/memory-backend/index.d.ts +2 -1
- package/dist/types/memory-backend/resolve.d.ts +1 -1
- package/dist/types/memory-backend/types.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +2 -1
- package/dist/types/modes/components/tool-execution.d.ts +18 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
- package/dist/types/modes/index.d.ts +5 -4
- package/dist/types/modes/interactive-mode.d.ts +1 -1
- package/dist/types/modes/setup-version.d.ts +11 -0
- package/dist/types/modes/setup-wizard/index.d.ts +2 -1
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +2 -1
- package/dist/types/modes/types.d.ts +1 -1
- package/dist/types/sdk.d.ts +1 -1
- package/dist/types/task/executor.d.ts +7 -0
- package/dist/types/telemetry-export.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -8
- package/dist/types/tools/fetch.d.ts +15 -7
- package/dist/types/tools/render-utils.d.ts +8 -0
- package/dist/types/tools/renderers.d.ts +16 -2
- package/dist/types/tools/search.d.ts +1 -1
- package/dist/types/tools/write.d.ts +2 -0
- package/dist/types/web/scrapers/github.d.ts +22 -0
- package/dist/types/web/search/providers/perplexity.d.ts +8 -1
- package/dist/types/web/search/types.d.ts +1 -1
- package/package.json +9 -9
- package/scripts/dev-launch +42 -0
- package/scripts/dev-launch-preload.ts +19 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/gallery-cli.ts +223 -0
- package/src/cli/gallery-fixtures/agentic.ts +292 -0
- package/src/cli/gallery-fixtures/codeintel.ts +188 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +153 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +221 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +41 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli-commands.ts +1 -0
- package/src/commands/gallery.ts +52 -0
- package/src/commands/launch.ts +1 -1
- package/src/config/keybindings.ts +15 -6
- package/src/config/model-equivalence.ts +35 -12
- package/src/config/model-id-affixes.ts +39 -22
- package/src/config/model-registry.ts +16 -16
- package/src/config/settings-schema.ts +18 -5
- package/src/config/settings.ts +11 -0
- package/src/dap/client.ts +14 -16
- package/src/edit/renderer.ts +36 -48
- package/src/eval/__tests__/agent-bridge.test.ts +75 -32
- package/src/eval/agent-bridge.ts +34 -7
- package/src/extensibility/extensions/runner.ts +1 -0
- package/src/extensibility/plugins/doctor.ts +0 -1
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/goals/tools/goal-tool.ts +2 -2
- package/src/internal-urls/docs-index.generated.ts +5 -5
- package/src/lsp/client.ts +104 -55
- package/src/lsp/types.ts +10 -0
- package/src/main.ts +44 -49
- package/src/memory-backend/index.ts +13 -1
- package/src/memory-backend/resolve.ts +3 -5
- package/src/memory-backend/types.ts +1 -1
- package/src/modes/components/custom-editor.ts +10 -1
- package/src/modes/components/status-line.ts +3 -5
- package/src/modes/components/tool-execution.ts +61 -16
- package/src/modes/controllers/command-controller.ts +13 -2
- package/src/modes/controllers/input-controller.ts +11 -3
- package/src/modes/controllers/selector-controller.ts +2 -2
- package/src/modes/index.ts +5 -4
- package/src/modes/interactive-mode.ts +17 -3
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +3 -2
- package/src/modes/setup-wizard/scenes/web-search.ts +3 -2
- package/src/modes/types.ts +1 -1
- package/src/modes/utils/context-usage.ts +10 -6
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/sdk.ts +21 -23
- package/src/session/agent-session.ts +7 -7
- package/src/slash-commands/builtin-registry.ts +1 -1
- package/src/slash-commands/helpers/usage-report.ts +2 -0
- package/src/task/executor.ts +20 -2
- package/src/task/render.ts +1 -2
- package/src/telemetry-export.ts +25 -7
- package/src/tools/eval-backends.ts +6 -17
- package/src/tools/eval-render.ts +21 -18
- package/src/tools/eval.ts +5 -4
- package/src/tools/fetch.ts +94 -84
- package/src/tools/render-utils.ts +17 -3
- package/src/tools/renderers.ts +16 -1
- package/src/tools/report-tool-issue.ts +1 -1
- package/src/tools/search.ts +173 -81
- package/src/tools/todo.ts +20 -7
- package/src/tools/write.ts +22 -1
- package/src/web/scrapers/github.ts +255 -3
- package/src/web/scrapers/youtube.ts +3 -2
- package/src/web/search/providers/perplexity.ts +199 -51
- package/src/web/search/render.ts +39 -54
- package/src/web/search/types.ts +5 -1
- package/dist/types/eval/__tests__/shared-executors.test.d.ts +0 -1
- package/src/eval/__tests__/shared-executors.test.ts +0 -609
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,69 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [15.10.0] - 2026-06-06
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- Replaced the `providers.parallelFetch` boolean setting with the `providers.fetch` enum (`auto` / `native` / `trafilatura` / `lynx` / `parallel` / `jina`) that selects the URL reader-backend priority for the `read`/`fetch` tool, mirroring `providers.image`/`providers.webSearch`. Existing configs are migrated automatically: the legacy key is dropped and the new `auto` default applies.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added a GitHub Actions read handler to the `read`/web-fetch GitHub scraper. Fetching `github.com/{owner}/{repo}/actions/runs/{id}` renders the run metadata plus a per-job breakdown (steps listed for any job that did not succeed), and `…/actions/runs/{id}/job/{id}` (also the API-style `…/jobs/{id}`) renders a single job's metadata, step table, and full plain-text logs. Logs are fetched via the `actions/jobs/{id}/logs` redirect using `GITHUB_TOKEN`/`GH_TOKEN` when present, with the per-line ISO timestamp prefix and leading BOM stripped; the section degrades to an explicit notice when logs are unavailable (no token, private repo, or expired/unfinalized run).
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Changed eval `agent()` subagents so they are never subject to the `task.maxRuntimeMs` wall-clock cap. The parent cell's idle watchdog is already suspended for the entire bridge call (`withBridgeTimeoutPause`), so a long-running fan-out/recovery workflow must not be killed by a per-subagent runtime limit. `runEvalAgent` now passes `maxRuntimeMs: 0` to `runSubprocess`, which honors an explicit `ExecutorOptions.maxRuntimeMs` override over the inherited setting.
|
|
18
|
+
- Changed interactive timing behavior so `PI_TIMING=x pi` preloads the module timer before the CLI graph loads and includes the `(modules)` report. `PI_TIMING=full` now also exits after printing, matching `PI_TIMING=x`, so full module reports are usable for cold-start measurement without launching the TUI. Added the root `dev:timing` script for the same profiled startup path.
|
|
19
|
+
- Changed coding-agent startup imports so normal TUI launch imports `InteractiveMode` directly, keeps print/RPC/ACP runners on their branch-only paths, and moves marketplace auto-update work behind a lightweight deferred starter.
|
|
20
|
+
- Changed cold-launch setup gating so the full setup wizard (every scene plus the overlay and their TUI/OAuth/web-search/theme dependencies) is no longer statically imported by `main.ts`. The current setup version now lives in a tiny dependency-free `modes/setup-version` module, and the wizard barrel is lazy-loaded only when the stored setup version is stale or the wizard is forced — the common up-to-date launch skips loading it entirely.
|
|
21
|
+
- Changed cold-launch startup imports so the hot-path CLI files no longer pull the full `@oh-my-pi/pi-ai` barrel: `commands/launch.ts` and `cli/args.ts` import `THINKING_EFFORTS`/`Effort` from the tiny `@oh-my-pi/pi-ai/effort` module, and `config/model-registry.ts` now imports its ~20 symbols from narrow subpaths (`api-registry`, `model-cache`, `model-manager`, `model-thinking`, `models`, `provider-models`, `types`, `utils/event-stream`) instead of the barrel — so launching no longer eagerly loads every provider, auth, OAuth, and usage module re-exported by the barrel.
|
|
22
|
+
- Changed the `read`/`fetch` HTML reader-backend priority to `native > trafilatura > lynx > parallel > jina` (was `parallel > jina > trafilatura > lynx > native`). The in-process native `htmlToMarkdown` runs first — instant, no network, full-fidelity — so the common case no longer depends on a remote service, and a stalled remote backend can no longer mask it. Selecting a specific backend via `providers.fetch` tries it first, then the rest fall back. The low-quality gate (`>100` chars and not `isLowQualityOutput`) now applies uniformly to every backend; when none clears it, the highest-priority substantial-but-low-quality output is still surfaced so the `llms.txt` / document-extraction fallbacks keep running.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Fixed eval `agent()` failures surfacing as an opaque `RuntimeError: bridge call '__agent__' failed` with no reason. When a subagent aborted, `runEvalAgent` built its failure message with `result.error ?? result.stderr ?? result.abortReason ?? …`, but `result.stderr` is the empty string on a clean abort (and `result.error` is gated on a non-empty `stderr`), so the nullish chain stopped at `""` and never reached `abortReason`. The empty string propagated through the loopback bridge and the Python prelude's `RuntimeError(msg or "bridge call … failed")`, discarding the real reason. The chain now uses `||` so an empty `stderr` falls through to `abortReason`.
|
|
27
|
+
- Fixed subagent aborts being mislabeled as the generic "Cancelled by caller" when the abort originated inside the subagent's own turn (`stopReason: "aborted"` with no caller signal and no runtime-limit timer). `runSubprocess` now prefers the aborted assistant message's `errorMessage` (e.g. "Request was aborted" or a specific stream error) for that case, while a real caller signal or wall-clock abort still reports its precise reason.
|
|
28
|
+
- Fixed a long streaming tool preview that alone overflows the viewport dropping its scrolled-off head on ED3-risk terminals (ghostty/kitty/iTerm2/…). When expanded with `Ctrl+O`, a streaming `write` (content streaming in) and a streaming `eval` (stdout streaming below its fixed code cell) render top-anchored and grow append-only, but the tool block never reported itself append-only to the transcript, so the renderer's commit-as-you-go boundary stopped at the block start and the earlier rows that scrolled above the viewport were committed nowhere — they vanished, leaving the preview looking like a viewport-tall circular buffer. `ToolExecutionComponent` now implements `isTranscriptBlockAppendOnly()` (gated on `isTranscriptBlockFinalized()`, so it also covers partial-result streams like `eval`), delegating to a renderer-declared `isStreamingPreviewAppendOnly` predicate so the expanded stream commits its head exactly like a streamed assistant reply. Collapsed previews (bounded sliding tail windows) and finalized/result previews (which can collapse to a capped view) stay deferred.
|
|
29
|
+
- Fixed `read`/`fetch` silently dropping whole list sections on pages with malformed list markup — stray `<img>`, text, or `<video>` nodes as direct children of `<ul>` (e.g. the Alacritty changelog). The Jina reader (previously tried before the local renderers) mis-extracts such lists, returning empty `Added`/`Changed` sections; the native in-process renderer now runs first and preserves the full content.
|
|
30
|
+
- Fixed `/usage` aggregate amount fallback using raw `limits.length` as account count — now counts unique `accountId` values from limit scopes, so N limits from a single account no longer display as "N accts".
|
|
31
|
+
- Fixed `/usage` account labeling falling back to "account N" for providers that use `projectId` as their primary identity (e.g. Google Antigravity, Gemini CLI) — `projectId` from report metadata is now considered before the generic fallback.
|
|
32
|
+
- Fixed the `todo` tool's TUI renderer crashing with `TypeError: args?.ops?.map is not a function` when a streaming tool-call delta surfaced a non-array `ops` field (mid-stream `parseStreamingJson` shapes like `{ ops: "[{" }`, or `[null]` entries before fields arrive). The renderer now treats non-array `ops`, non-object entries, and non-array `items` as missing structure instead of crashing, which also stops the spam-warn cascade that followed each malformed delta. Paired with the Anthropic-side reasoning-replay fix in `packages/ai` ([#2005](https://github.com/can1357/oh-my-pi/issues/2005)).
|
|
33
|
+
- Fixed Python eval `agent()` collapsing subagent runtime-limit aborts (and other empty-stderr aborts) into a generic `RuntimeError: bridge call '__agent__' failed`. `runEvalAgent` coalesced the failure message with `??`, which stopped at the empty `stderr` and never reached `abortReason`, shipping an empty error through the loopback bridge. The bridge now prefers `abortReason` for aborts and trims empty `stderr`/`error` out of the fallback chain, so Python surfaces the actionable reason (e.g. `Subagent runtime limit exceeded (task.maxRuntimeMs=900000)`) ([#2006](https://github.com/can1357/oh-my-pi/issues/2006)).
|
|
34
|
+
|
|
35
|
+
## [15.9.69] - 2026-06-06
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- Added anonymous fallback for Perplexity web search, allowing `web_search` and explicit Perplexity provider usage when no Perplexity credentials are configured
|
|
40
|
+
- Added `gallery` CLI command to render built-in tool renderer output across streaming, in-progress, success, and failure states
|
|
41
|
+
- Added `omp gallery` filtering and rendering options (`--tool`, `--state`, `--width`, `--expanded`, and `--plain`) for focused renderer previews and plain-text output
|
|
42
|
+
- Added `omp gallery` fidelity for tools whose renderers are attached on the tool instance (`lsp`, `task`): the gallery now drives them through the same custom-tool render branch production uses, so regressions in that path surface in the gallery rather than only in a live session.
|
|
43
|
+
- Added `omp gallery --screenshot`, which renders the gallery through a real virtual terminal (VHS) and writes PNG screenshot(s) instead of ANSI, so agents (and anything that can only read raw bytes) can actually see the rendered output. The capture forces truecolor and matches the active theme/symbol preset; tall galleries split across multiple images (whole renderers are never cut). Tune with `--out`, `--font`, and `--font-size`; requires `vhs` on `PATH` and fails with install guidance when absent.
|
|
44
|
+
- Added `app.display.reset`, bound to `Ctrl+L` by default, to force an immediate terminal display reset/redraw without resizing the window.
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- Changed authenticated Perplexity ask requests to default to the `experimental` model preference, matching the anonymous fallback.
|
|
49
|
+
- Changed Perplexity explicit provider availability checks so the setup wizard can mark `perplexity` as available for manual selection without credentials, while auto provider discovery still requires auth
|
|
50
|
+
- Changed the default persistent model selector shortcut from `Ctrl+L` to `Alt+M`, leaving `Ctrl+L` for display reset. Existing user remaps in `keybindings.yml` are preserved.
|
|
51
|
+
- Changed the edit tool result header to carry the diff change stats (`+N / -M / K hunks`) inline next to the file path, and removed the redundant lone language-icon metadata row and the blank line between the header and the diff body, so a single-hunk edit renders as `✔ Edit: <icon> path:LINE ⟨+3 / 1 hunk⟩` immediately followed by the diff.
|
|
52
|
+
- Changed the `web_search` tool result rendering: the answer text now shows in full instead of being truncated to a "… N more lines" preview (the `omp q` CLI still caps its compact output), each source renders as a single `title (domain) · age` line with the URL linked on the title (dropping the snippet and bare-URL rows), and the metadata block collapses to one `Provider: <model> @ <provider> (<auth>)` line plus `Usage:` (removing the redundant Sources/Citations/Request/Queries rows).
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- Fixed Perplexity `perplexity_ask` response parsing so OAuth, cookie, and anonymous searches correctly extract answer text and sources from JSON payloads
|
|
57
|
+
- Fixed framed read results rendering with an extra blank row above and below the output block.
|
|
58
|
+
- Fixed collapsed search result previews that could show only "… N more matches" when the first grouped section exceeded the preview budget. Collapsed search output now compacts to match rows, fills the budget with visible hits before the summary, and keeps truncation details out of the bottom user-visible notice.
|
|
59
|
+
- Fixed the expanded search result view dumping every match when all hits live in one file. A single file's matches collapse into one blank-line group, and the expanded tree list ignored the line budget, so a hot file whose matches span its whole length rendered every row (e.g. lines 374–2858). Expanded search output is now bounded by a larger-than-collapsed budget (`EXPANDED_LINES × 2`), keeps surrounding context rows, and appends a `… N more matches` summary when truncated.
|
|
60
|
+
- Fixed boolean environment flag overrides that were ORed with settings, so `PI_INTENT_TRACING=0`, `PI_AUTO_QA=0`, and per-backend eval flags now take precedence when present while falling back to config when unset.
|
|
61
|
+
- Fixed custom-rendered tools that set `mergeCallAndResult` (e.g. `lsp`) rendering a redundant tool-name line above the framed result once a result arrived. `ToolExecutionComponent`'s custom-tool branch now emits the fallback label only when the tool has no `renderCall` and the call is not suppressed by an existing result, matching the built-in renderer branch.
|
|
62
|
+
- Fixed the `write` tool result rendering with a green success checkmark even when the write failed. `writeToolRenderer.renderResult` now branches on `result.isError`, rendering the error status icon plus the failure message instead of the success header and content preview.
|
|
63
|
+
- Fixed Perplexity OAuth/cookie web search returning a refusal answer ("I don't currently have access to the web-search tools in this turn") despite returning real sources. `callPerplexityOAuth` was prepending the API-style `web-search` system prompt to the query (`query_str = systemPrompt + "\n\n" + query`), but the consumer `www.perplexity.ai/rest/sse/perplexity_ask` endpoint has no system-message slot and reads the prepended instruction as a meta-prompt, making the model decline. The OAuth/cookie path now sends the bare query; the API-key path still passes the system prompt as a proper `system` message.
|
|
64
|
+
- Fixed Perplexity OAuth web search always returning the free `turbo` model instead of the account's Pro model (e.g. `pplx_pro_upgraded`/Sonar). The `www.perplexity.ai/rest/sse/perplexity_ask` endpoint authenticates via the `__Secure-next-auth.session-token` cookie and ignores the `Authorization: Bearer` header entirely — so sending the OAuth session token as a bearer was treated as an anonymous request, which silently downgrades to `turbo` regardless of `model_preference`. The stored Perplexity OAuth token is itself the next-auth session JWT (the macOS app injects the same value as that cookie), so `callPerplexityAsk` now sends it as the `__Secure-next-auth.session-token` cookie, unlocking Pro model selection.
|
|
65
|
+
|
|
5
66
|
## [15.9.67] - 2026-06-06
|
|
67
|
+
|
|
6
68
|
### Added
|
|
7
69
|
|
|
8
70
|
- Added `timeout-pause` and `timeout-resume` eval bridge status events emitted around `agent()`/`llm()` operations
|
|
@@ -9434,4 +9496,4 @@ Initial public release.
|
|
|
9434
9496
|
- Git branch display in footer
|
|
9435
9497
|
- Message queueing during streaming responses
|
|
9436
9498
|
- OAuth integration for Gmail and Google Calendar access
|
|
9437
|
-
- HTML export with syntax highlighting and collapsible sections
|
|
9499
|
+
- HTML export with syntax highlighting and collapsible sections
|
package/dist/types/cli/args.d.ts
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type GalleryFixture } from "./gallery-fixtures";
|
|
2
|
+
/** Lifecycle states the gallery renders, in display order. */
|
|
3
|
+
export declare const GALLERY_STATES: readonly ["streaming", "progress", "success", "error"];
|
|
4
|
+
export type GalleryState = (typeof GALLERY_STATES)[number];
|
|
5
|
+
export interface GalleryCommandArgs {
|
|
6
|
+
/** Render width in columns (defaults to terminal width, clamped). */
|
|
7
|
+
width?: number;
|
|
8
|
+
/** Restrict to a single tool name. */
|
|
9
|
+
tool?: string;
|
|
10
|
+
/** Restrict to specific lifecycle states. */
|
|
11
|
+
states?: GalleryState[];
|
|
12
|
+
/** Render the expanded variant of each renderer. */
|
|
13
|
+
expanded?: boolean;
|
|
14
|
+
/** Strip ANSI styling from the output (useful when redirecting to a file). */
|
|
15
|
+
plain?: boolean;
|
|
16
|
+
/** Capture the rendered gallery as PNG screenshot(s) via VHS instead of printing ANSI. */
|
|
17
|
+
screenshot?: boolean;
|
|
18
|
+
/** Screenshot output path (single image) or base path (suffixed when split across images). */
|
|
19
|
+
out?: string;
|
|
20
|
+
/** Font family for screenshots (must be installed; Nerd Font recommended for icon glyphs). */
|
|
21
|
+
font?: string;
|
|
22
|
+
/** Font size in points for screenshots. */
|
|
23
|
+
fontSize?: number;
|
|
24
|
+
}
|
|
25
|
+
/** One tool's rendered lifecycle, as ANSI lines: a leading blank, the section rule, then each state. */
|
|
26
|
+
export interface GallerySection {
|
|
27
|
+
heading: string;
|
|
28
|
+
lines: string[];
|
|
29
|
+
}
|
|
30
|
+
/** The curated fixture for a tool, or a generic one for registry tools lacking sample data. */
|
|
31
|
+
export declare function resolveFixture(name: string): GalleryFixture;
|
|
32
|
+
/**
|
|
33
|
+
* Render a single tool/state pair to lines. Builds a fresh component, drives it
|
|
34
|
+
* to the requested state, settles any async edit preview, then snapshots the
|
|
35
|
+
* render and stops all animation timers.
|
|
36
|
+
*/
|
|
37
|
+
export declare function renderGalleryState(name: string, fixture: GalleryFixture, state: GalleryState, width: number, expanded?: boolean): Promise<string[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Render the gallery. Iterates the renderer registry (or a single tool),
|
|
40
|
+
* printing each requested lifecycle state under a labeled section — or, with
|
|
41
|
+
* `screenshot`, capturing the rendered output as PNG(s) via VHS.
|
|
42
|
+
*/
|
|
43
|
+
export declare function runGalleryCommand(args: GalleryCommandArgs): Promise<void>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for `omp gallery` sample data. See {@link ./index} for the aggregated
|
|
3
|
+
* fixture registry and the contract each fixture must satisfy.
|
|
4
|
+
*/
|
|
5
|
+
import type { EditMode } from "../../edit";
|
|
6
|
+
/** A tool result snapshot, matching the shape `ToolExecutionComponent` consumes. */
|
|
7
|
+
export interface GalleryResult {
|
|
8
|
+
content: Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
data?: string;
|
|
12
|
+
mimeType?: string;
|
|
13
|
+
}>;
|
|
14
|
+
details?: unknown;
|
|
15
|
+
isError?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface GalleryFixture {
|
|
18
|
+
/** Display label for the tool header (defaults to the tool name). */
|
|
19
|
+
label?: string;
|
|
20
|
+
/** Edit mode for edit-like tools so the streaming preview dispatches correctly. */
|
|
21
|
+
editMode?: EditMode;
|
|
22
|
+
/**
|
|
23
|
+
* Set for tools whose real `AgentTool` attaches `renderCall`/`renderResult`
|
|
24
|
+
* directly on the instance (e.g. `lsp`, `task`). The harness then attaches
|
|
25
|
+
* the registry renderer onto the fake tool so the component routes through
|
|
26
|
+
* the custom-tool branch — the same path production takes — instead of the
|
|
27
|
+
* built-in registry branch. The two branches can diverge, so exercising the
|
|
28
|
+
* real one keeps the gallery honest for these tools.
|
|
29
|
+
*/
|
|
30
|
+
customRendered?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Arguments shown during the streaming state — a partial view of {@link args}
|
|
33
|
+
* as if the tool-call JSON were still arriving. May include `__partialJson`
|
|
34
|
+
* for renderers (bash, edit) that surface fields before the object closes.
|
|
35
|
+
* Defaults to {@link args} when omitted.
|
|
36
|
+
*/
|
|
37
|
+
streamingArgs?: unknown;
|
|
38
|
+
/** Complete arguments shown for the in-progress, success, and error states. */
|
|
39
|
+
args: unknown;
|
|
40
|
+
/** Successful result. */
|
|
41
|
+
result: GalleryResult;
|
|
42
|
+
/** Failed result. Falls back to a generic error when omitted. */
|
|
43
|
+
errorResult?: GalleryResult;
|
|
44
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { GallerySection } from "./gallery-cli";
|
|
2
|
+
/** Nerd Font family so the gallery's icon glyphs (PUA) render instead of tofu. */
|
|
3
|
+
export declare const DEFAULT_SCREENSHOT_FONT = "JetBrainsMono Nerd Font";
|
|
4
|
+
export declare const DEFAULT_SCREENSHOT_FONT_SIZE = 18;
|
|
5
|
+
export interface GalleryScreenshotOptions {
|
|
6
|
+
/** Gallery render width in columns (matches the ANSI line width). */
|
|
7
|
+
width: number;
|
|
8
|
+
/** VHS `FontFamily`. */
|
|
9
|
+
font?: string;
|
|
10
|
+
/** VHS `FontSize`. */
|
|
11
|
+
fontSize?: number;
|
|
12
|
+
/**
|
|
13
|
+
* Output destination. When omitted, PNGs land in a fresh temp directory.
|
|
14
|
+
* With multiple images the path is suffixed (`name-01.png`, `name-02.png`).
|
|
15
|
+
*/
|
|
16
|
+
out?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Capture the gallery sections as one or more PNGs and return their absolute
|
|
20
|
+
* paths. Tall galleries are split across images so no single capture exceeds
|
|
21
|
+
* the terminal-canvas height limit.
|
|
22
|
+
*/
|
|
23
|
+
export declare function captureGalleryScreenshots(sections: GallerySection[], options: GalleryScreenshotOptions): Promise<string[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a chunk's PNG path. A single image keeps the bare name (or the exact
|
|
26
|
+
* `out`); multiple images gain a zero-padded `-NN` suffix so they sort and never
|
|
27
|
+
* collide.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveScreenshotOutputPath(out: string | undefined, baseDir: string, index: number, total: number): string;
|
|
30
|
+
/**
|
|
31
|
+
* Group whole tool sections into chunks that stay under `rowBudget` rows. A
|
|
32
|
+
* single section larger than the budget gets its own (taller) image rather than
|
|
33
|
+
* being split mid-renderer.
|
|
34
|
+
*/
|
|
35
|
+
export declare function chunkGallerySections(sections: GallerySection[], rowBudget: number): GallerySection[][];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render every built-in tool's renderer across its lifecycle states.
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from "@oh-my-pi/pi-utils/cli";
|
|
5
|
+
export default class Gallery extends Command {
|
|
6
|
+
static description: string;
|
|
7
|
+
static flags: {
|
|
8
|
+
tool: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
|
|
9
|
+
char: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
state: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
|
|
13
|
+
char: string;
|
|
14
|
+
description: string;
|
|
15
|
+
options: ("error" | "progress" | "streaming" | "success")[];
|
|
16
|
+
multiple: true;
|
|
17
|
+
};
|
|
18
|
+
width: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
|
|
19
|
+
char: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
expanded: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
|
|
23
|
+
char: string;
|
|
24
|
+
description: string;
|
|
25
|
+
default: boolean;
|
|
26
|
+
};
|
|
27
|
+
plain: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
|
|
28
|
+
description: string;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
screenshot: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
|
|
32
|
+
description: string;
|
|
33
|
+
default: boolean;
|
|
34
|
+
};
|
|
35
|
+
out: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
|
|
36
|
+
char: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
font: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
"font-size": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
run(): Promise<void>;
|
|
47
|
+
}
|
|
@@ -8,6 +8,7 @@ interface AppKeybindings {
|
|
|
8
8
|
"app.clear": true;
|
|
9
9
|
"app.exit": true;
|
|
10
10
|
"app.suspend": true;
|
|
11
|
+
"app.display.reset": true;
|
|
11
12
|
"app.thinking.cycle": true;
|
|
12
13
|
"app.thinking.toggle": true;
|
|
13
14
|
"app.model.cycleForward": true;
|
|
@@ -191,6 +192,10 @@ export declare const KEYBINDINGS: {
|
|
|
191
192
|
readonly defaultKeys: "ctrl+z";
|
|
192
193
|
readonly description: "Suspend application";
|
|
193
194
|
};
|
|
195
|
+
readonly "app.display.reset": {
|
|
196
|
+
readonly defaultKeys: "ctrl+l";
|
|
197
|
+
readonly description: "Reset terminal display";
|
|
198
|
+
};
|
|
194
199
|
readonly "app.thinking.cycle": {
|
|
195
200
|
readonly defaultKeys: "shift+tab";
|
|
196
201
|
readonly description: "Cycle thinking level";
|
|
@@ -208,7 +213,7 @@ export declare const KEYBINDINGS: {
|
|
|
208
213
|
readonly description: "Cycle to previous model";
|
|
209
214
|
};
|
|
210
215
|
readonly "app.model.select": {
|
|
211
|
-
readonly defaultKeys: "
|
|
216
|
+
readonly defaultKeys: "alt+m";
|
|
212
217
|
readonly description: "Select model";
|
|
213
218
|
};
|
|
214
219
|
readonly "app.model.selectTemporary": {
|
|
@@ -5,6 +5,8 @@ export declare function getLongestModelLikeIdSegment(modelId: string): string |
|
|
|
5
5
|
* upstream model id, e.g.
|
|
6
6
|
* "[Kiro] claude-opus-4-8" -> "claude-opus-4-8"
|
|
7
7
|
* "[gcli转] gemini-3.1-pro-preview [假流]" -> "gemini-3.1-pro-preview"
|
|
8
|
+
*
|
|
9
|
+
* Candidates are returned most-stripped first: both ends, then leading-only, then trailing-only.
|
|
8
10
|
*/
|
|
9
11
|
export declare function getBracketStrippedModelIdCandidates(modelId: string): string[];
|
|
10
12
|
export declare function stripBracketedModelIdAffixes(modelId: string): string | undefined;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ModelRefreshStrategy } from "@oh-my-pi/pi-ai/model-manager";
|
|
2
|
+
import type { Api, Context, Model, SimpleStreamOptions, ThinkingConfig } from "@oh-my-pi/pi-ai/types";
|
|
3
|
+
import type { AssistantMessageEventStream } from "@oh-my-pi/pi-ai/utils/event-stream";
|
|
2
4
|
import type { OAuthCredentials, OAuthLoginCallbacks } from "@oh-my-pi/pi-ai/utils/oauth/types";
|
|
3
5
|
import { type ThemeColor } from "../modes/theme/theme";
|
|
4
6
|
import type { AuthStorage } from "../session/auth-storage";
|
|
@@ -355,6 +357,11 @@ export declare class ModelRegistry {
|
|
|
355
357
|
* Check if a model selector is currently suppressed due to rate limits.
|
|
356
358
|
*/
|
|
357
359
|
isSelectorSuppressed(selector: string): boolean;
|
|
360
|
+
/**
|
|
361
|
+
* Clear all cooldown suppressions recorded via {@link suppressSelector}.
|
|
362
|
+
* Used to reset retry-fallback cooldown state without a full {@link refresh}.
|
|
363
|
+
*/
|
|
364
|
+
clearSuppressedSelectors(): void;
|
|
358
365
|
}
|
|
359
366
|
/**
|
|
360
367
|
* Input type for registerProvider API (from extensions).
|
|
@@ -3317,7 +3317,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
3317
3317
|
}, {
|
|
3318
3318
|
readonly value: "perplexity";
|
|
3319
3319
|
readonly label: "Perplexity";
|
|
3320
|
-
readonly description: "
|
|
3320
|
+
readonly description: "Uses auth when configured; explicit selection falls back to anonymous search";
|
|
3321
3321
|
}, {
|
|
3322
3322
|
readonly value: "brave";
|
|
3323
3323
|
readonly label: "Brave";
|
|
@@ -3670,13 +3670,39 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
3670
3670
|
}];
|
|
3671
3671
|
};
|
|
3672
3672
|
};
|
|
3673
|
-
readonly "providers.
|
|
3674
|
-
readonly type: "
|
|
3675
|
-
readonly
|
|
3673
|
+
readonly "providers.fetch": {
|
|
3674
|
+
readonly type: "enum";
|
|
3675
|
+
readonly values: readonly ["auto", "native", "trafilatura", "lynx", "parallel", "jina"];
|
|
3676
|
+
readonly default: "auto";
|
|
3676
3677
|
readonly ui: {
|
|
3677
3678
|
readonly tab: "providers";
|
|
3678
|
-
readonly label: "
|
|
3679
|
-
readonly description: "
|
|
3679
|
+
readonly label: "Fetch Provider";
|
|
3680
|
+
readonly description: "Reader backend priority for the fetch/read URL tool";
|
|
3681
|
+
readonly options: readonly [{
|
|
3682
|
+
readonly value: "auto";
|
|
3683
|
+
readonly label: "Auto";
|
|
3684
|
+
readonly description: "Priority: native > trafilatura > lynx > parallel > jina";
|
|
3685
|
+
}, {
|
|
3686
|
+
readonly value: "native";
|
|
3687
|
+
readonly label: "Native";
|
|
3688
|
+
readonly description: "In-process HTML→Markdown converter (always available)";
|
|
3689
|
+
}, {
|
|
3690
|
+
readonly value: "trafilatura";
|
|
3691
|
+
readonly label: "Trafilatura";
|
|
3692
|
+
readonly description: "Auto-installs via uv/pip";
|
|
3693
|
+
}, {
|
|
3694
|
+
readonly value: "lynx";
|
|
3695
|
+
readonly label: "Lynx";
|
|
3696
|
+
readonly description: "Requires lynx system package";
|
|
3697
|
+
}, {
|
|
3698
|
+
readonly value: "parallel";
|
|
3699
|
+
readonly label: "Parallel";
|
|
3700
|
+
readonly description: "Requires PARALLEL_API_KEY";
|
|
3701
|
+
}, {
|
|
3702
|
+
readonly value: "jina";
|
|
3703
|
+
readonly label: "Jina";
|
|
3704
|
+
readonly description: "Uses r.jina.ai reader (JINA_API_KEY optional)";
|
|
3705
|
+
}];
|
|
3680
3706
|
};
|
|
3681
3707
|
};
|
|
3682
3708
|
readonly "provider.appendOnlyContext": {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type MarketplaceAutoUpdateMode = "off" | "notify" | "auto";
|
|
2
|
+
interface MarketplaceAutoUpdateOptions {
|
|
3
|
+
autoUpdate: MarketplaceAutoUpdateMode;
|
|
4
|
+
resolveActiveProjectRegistryPath: (cwd: string) => Promise<string | null>;
|
|
5
|
+
clearPluginRootsCache: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function scheduleMarketplaceAutoUpdate(options: MarketplaceAutoUpdateOptions): void;
|
|
8
|
+
export {};
|
|
@@ -222,6 +222,16 @@ export interface ServerConfig {
|
|
|
222
222
|
disabled?: boolean;
|
|
223
223
|
/** Per-server warmup timeout in milliseconds. Overrides the global WARMUP_TIMEOUT_MS for this server during startup. */
|
|
224
224
|
warmupTimeoutMs?: number;
|
|
225
|
+
/**
|
|
226
|
+
* Per-server overrides for rust-analyzer workspace-ready polling. When omitted, the module
|
|
227
|
+
* defaults are used. Primarily a tuning/test seam to bound the multi-second settle window.
|
|
228
|
+
*/
|
|
229
|
+
workspaceReadyTimings?: {
|
|
230
|
+
timeoutMs?: number;
|
|
231
|
+
pollMs?: number;
|
|
232
|
+
settleMs?: number;
|
|
233
|
+
statusRequestTimeoutMs?: number;
|
|
234
|
+
};
|
|
225
235
|
capabilities?: ServerCapabilities;
|
|
226
236
|
/** If true, this is a linter/formatter server (e.g., Biome) - used only for diagnostics/actions, not type intelligence */
|
|
227
237
|
isLinter?: boolean;
|
package/dist/types/main.d.ts
CHANGED
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
import type { Args } from "./cli/args";
|
|
8
8
|
import { ModelRegistry } from "./config/model-registry";
|
|
9
9
|
import { Settings } from "./config/settings";
|
|
10
|
-
import { InteractiveMode
|
|
10
|
+
import { InteractiveMode } from "./modes/interactive-mode";
|
|
11
11
|
import type { SubmittedUserInput } from "./modes/types";
|
|
12
12
|
import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, discoverAuthStorage } from "./sdk";
|
|
13
13
|
import type { AgentSession } from "./session/agent-session";
|
|
14
14
|
import type { AuthStorage } from "./session/auth-storage";
|
|
15
15
|
import { type SessionInfo, SessionManager } from "./session/session-manager";
|
|
16
|
+
type RunAcpMode = (createSession: AcpSessionFactory) => Promise<never>;
|
|
16
17
|
export interface InteractiveModeNotify {
|
|
17
18
|
kind: "warn" | "error" | "info";
|
|
18
19
|
message: string;
|
|
@@ -47,7 +48,7 @@ export declare function createSessionManager(parsed: Args, cwd: string, activeSe
|
|
|
47
48
|
interface RunRootCommandDependencies {
|
|
48
49
|
createAgentSession?: typeof createAgentSession;
|
|
49
50
|
discoverAuthStorage?: typeof discoverAuthStorage;
|
|
50
|
-
runAcpMode?:
|
|
51
|
+
runAcpMode?: RunAcpMode;
|
|
51
52
|
settings?: Settings;
|
|
52
53
|
forceSetupWizard?: boolean;
|
|
53
54
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type { MnemopiBackendConfig, MnemopiLlmMode, MnemopiProviderOptions, MnemopiScoping, } from "../mnemopi/config";
|
|
2
|
+
export type { MnemopiMemoryEditOperation, MnemopiMemoryEditOptions, MnemopiMemoryEditResult, MnemopiSessionState, MnemopiSessionStateOptions, } from "../mnemopi/state";
|
|
2
3
|
export * from "./local-backend";
|
|
3
4
|
export * from "./off-backend";
|
|
4
5
|
export * from "./resolve";
|
|
@@ -13,4 +13,4 @@ import type { MemoryBackend } from "./types";
|
|
|
13
13
|
* `memories.enabled` remains accepted only as a legacy migration input. Once
|
|
14
14
|
* a config is loaded, `memory.backend` is the sole runtime selector.
|
|
15
15
|
*/
|
|
16
|
-
export declare function resolveMemoryBackend(settings: Settings): MemoryBackend
|
|
16
|
+
export declare function resolveMemoryBackend(settings: Settings): Promise<MemoryBackend>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Memory backend abstraction.
|
|
3
3
|
*
|
|
4
|
-
* Backends are mutually exclusive — `resolveMemoryBackend(settings)`
|
|
4
|
+
* Backends are mutually exclusive — `await resolveMemoryBackend(settings)` resolves
|
|
5
5
|
* exactly one. Implementations MUST be self-contained: they own the per-session
|
|
6
6
|
* state they create in `start()` and tear it down on `clear()`.
|
|
7
7
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Editor, type KeyId } from "@oh-my-pi/pi-tui";
|
|
2
2
|
import type { AppKeybinding } from "../../config/keybindings";
|
|
3
|
-
type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.clipboard.pasteImage" | "app.clipboard.pasteTextRaw" | "app.clipboard.copyPrompt">;
|
|
3
|
+
type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.display.reset" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.clipboard.pasteImage" | "app.clipboard.pasteTextRaw" | "app.clipboard.copyPrompt">;
|
|
4
4
|
/**
|
|
5
5
|
* Custom editor that handles configurable app-level shortcuts for coding-agent.
|
|
6
6
|
*/
|
|
@@ -14,6 +14,7 @@ export declare class CustomEditor extends Editor {
|
|
|
14
14
|
onEscape?: () => void;
|
|
15
15
|
onClear?: () => void;
|
|
16
16
|
onExit?: () => void;
|
|
17
|
+
onDisplayReset?: () => void;
|
|
17
18
|
onCycleThinkingLevel?: () => void;
|
|
18
19
|
onCycleModelForward?: () => void;
|
|
19
20
|
onCycleModelBackward?: () => void;
|
|
@@ -61,6 +61,24 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
61
61
|
* past, or an explicit {@link seal} flips it to `true`.
|
|
62
62
|
*/
|
|
63
63
|
isTranscriptBlockFinalized(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* While a tool's preview is still streaming, a block whose preview is
|
|
66
|
+
* append-only (rows only grow at the bottom, never re-layout) lets the
|
|
67
|
+
* renderer commit the scrolled-off head of an over-tall preview to native
|
|
68
|
+
* scrollback instead of dropping it — the same anti-yank path a streaming
|
|
69
|
+
* assistant reply uses (see {@link TranscriptContainer} +
|
|
70
|
+
* `NativeScrollbackLiveRegion`). Covers both phases: a pre-result call preview
|
|
71
|
+
* (a `write` whose content streams in) and a partial-result preview that
|
|
72
|
+
* streams output below fixed input (an `eval`/`bash` whose stdout grows under
|
|
73
|
+
* its code cell). Gated on {@link isTranscriptBlockFinalized} so the boundary
|
|
74
|
+
* closes the instant the block reaches a terminal state — a final result that
|
|
75
|
+
* may collapse to a compact view, a backgrounded async tool, or a seal — and
|
|
76
|
+
* the renderer decides whether its current preview shape qualifies via
|
|
77
|
+
* `isStreamingPreviewAppendOnly` (typically: only the expanded full view,
|
|
78
|
+
* which is top-anchored; the collapsed tail window re-layouts but is bounded
|
|
79
|
+
* so it never overflows anyway).
|
|
80
|
+
*/
|
|
81
|
+
isTranscriptBlockAppendOnly(): boolean;
|
|
64
82
|
/**
|
|
65
83
|
* Mark the tool terminal even though no result arrived (the turn aborted or
|
|
66
84
|
* abandoned it) and stop animating, so it can freeze and stops pinning the
|
|
@@ -41,6 +41,6 @@ export declare class SelectorController {
|
|
|
41
41
|
handleResumeSession(sessionPath: string): Promise<void>;
|
|
42
42
|
handleSessionDeleteCommand(): Promise<void>;
|
|
43
43
|
showOAuthSelector(mode: "login" | "logout", providerId?: string): Promise<void>;
|
|
44
|
-
showDebugSelector(): void
|
|
44
|
+
showDebugSelector(): Promise<void>;
|
|
45
45
|
showSessionObserver(registry: SessionObserverRegistry): void;
|
|
46
46
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Interactive mode and embeddable RPC client exports for the coding agent.
|
|
3
|
+
*
|
|
4
|
+
* Branch-specific runners live in their concrete modules so importing this
|
|
5
|
+
* barrel does not pull print, RPC server, or ACP server mode into the normal
|
|
6
|
+
* TUI graph.
|
|
3
7
|
*/
|
|
4
|
-
export { runAcpMode } from "./acp";
|
|
5
8
|
export { InteractiveMode, type InteractiveModeOptions } from "./interactive-mode";
|
|
6
|
-
export { type PrintModeOptions, runPrintMode } from "./print-mode";
|
|
7
9
|
export { defineRpcClientTool, type ModelInfo, RpcClient, type RpcClientCustomTool, type RpcClientOptions, type RpcClientToolContext, type RpcClientToolResult, type RpcEventListener, } from "./rpc/rpc-client";
|
|
8
|
-
export { runRpcMode } from "./rpc/rpc-mode";
|
|
9
10
|
export type { RpcCommand, RpcHostToolCallRequest, RpcHostToolCancelRequest, RpcHostToolDefinition, RpcHostToolResult, RpcHostToolUpdate, RpcResponse, RpcSessionState, } from "./rpc/rpc-types";
|
|
@@ -214,7 +214,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
|
|
|
214
214
|
handleRenameCommand(title: string): Promise<void>;
|
|
215
215
|
handleMemoryCommand(text: string): Promise<void>;
|
|
216
216
|
handleSTTToggle(): Promise<void>;
|
|
217
|
-
showDebugSelector(): void
|
|
217
|
+
showDebugSelector(): Promise<void>;
|
|
218
218
|
showSessionObserver(): void;
|
|
219
219
|
resetObserverRegistry(): void;
|
|
220
220
|
handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup version the wizard advances a fresh install to. Bump it whenever a new
|
|
3
|
+
* setup scene lands (or an existing scene raises its `minVersion`).
|
|
4
|
+
*
|
|
5
|
+
* Kept in its own dependency-free module so the cold-launch gate in `main.ts`
|
|
6
|
+
* can answer "is the stored setup version stale?" without statically importing
|
|
7
|
+
* the full wizard — every scene (sign-in/OAuth, web search, theme previews) plus
|
|
8
|
+
* the overlay component and their TUI deps. MUST equal `max(scene.minVersion)`
|
|
9
|
+
* across `ALL_SCENES`; the `setup-wizard` barrel and test suite guard it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CURRENT_SETUP_VERSION = 1;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Settings } from "../../config/settings";
|
|
2
|
+
import { CURRENT_SETUP_VERSION } from "../setup-version";
|
|
2
3
|
import type { InteractiveModeContext } from "../types";
|
|
3
4
|
import type { SetupScene } from "./scenes/types";
|
|
4
5
|
export type { SetupScene, SetupSceneController, SetupSceneHost, SetupSceneResult } from "./scenes/types";
|
|
6
|
+
export { CURRENT_SETUP_VERSION };
|
|
5
7
|
export declare const ALL_SCENES: readonly [SetupScene, SetupScene, SetupScene];
|
|
6
|
-
export declare const CURRENT_SETUP_VERSION: number;
|
|
7
8
|
export interface SetupSceneSelectionOptions {
|
|
8
9
|
resuming?: boolean;
|
|
9
10
|
isTTY?: boolean;
|