@gajae-code/coding-agent 0.11.9 → 0.11.11
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 +56 -1
- package/dist/types/cli.d.ts +8 -1
- package/dist/types/config/model-profile-activation.d.ts +1 -0
- package/dist/types/config/model-profile-contract.d.ts +2 -0
- package/dist/types/config/model-registry.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +57 -2
- package/dist/types/config/settings.d.ts +1 -0
- package/dist/types/extensibility/extensions/types.d.ts +21 -0
- package/dist/types/gjc-runtime/linux-proc.d.ts +22 -14
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +60 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +3 -1
- package/dist/types/gjc-runtime/state-writer.d.ts +1 -0
- package/dist/types/modes/acp/acp-agent.d.ts +14 -9
- package/dist/types/modes/components/queue-pane.d.ts +8 -0
- package/dist/types/modes/components/queued-message-selector.d.ts +6 -0
- package/dist/types/modes/components/welcome.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +16 -8
- package/dist/types/modes/interactive-mode.d.ts +5 -1
- package/dist/types/runtime/memory-domain.d.ts +9 -0
- package/dist/types/runtime/memory-guard-contract.d.ts +71 -0
- package/dist/types/runtime/memory-guard.d.ts +39 -0
- package/dist/types/runtime/memory-limit.d.ts +11 -0
- package/dist/types/runtime-mcp/manager.d.ts +8 -0
- package/dist/types/sdk/acp/final-text.d.ts +19 -0
- package/dist/types/sdk/acp/mcp.d.ts +23 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +2 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +2 -1
- package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
- package/dist/types/sdk/bus/index.d.ts +11 -2
- package/dist/types/sdk/bus/operator-runtime.d.ts +1 -0
- package/dist/types/sdk/bus/rate-limit-pool.d.ts +2 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +14 -7
- package/dist/types/sdk/bus/telegram-daemon.d.ts +97 -8
- package/dist/types/sdk/host/control/operations.d.ts +1 -0
- package/dist/types/sdk/lifecycle-session.d.ts +10 -1
- package/dist/types/sdk/session.d.ts +7 -0
- package/dist/types/sdk/startup-capability.d.ts +6 -0
- package/dist/types/session/agent-session.d.ts +11 -11
- package/dist/types/session/fallback-chain-controller.d.ts +18 -2
- package/dist/types/session/internal/managed-session-scope.d.ts +28 -1
- package/dist/types/session/session-manager.d.ts +34 -0
- package/dist/types/task/executor.d.ts +6 -0
- package/dist/types/task/provider-retry-status.d.ts +13 -0
- package/dist/types/task/types.d.ts +39 -0
- package/dist/types/task/ultragoal-redteam-activation.d.ts +33 -0
- package/dist/types/tools/index.d.ts +3 -1
- package/dist/types/tools/resource-gc.d.ts +19 -0
- package/package.json +8 -8
- package/scripts/generate-sdk-operation-inventory.ts +3 -0
- package/scripts/run-test-manifest.ts +6 -4
- package/src/cli/args.ts +14 -8
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/notify-cli.ts +1 -0
- package/src/cli.ts +48 -2
- package/src/commands/sdk.ts +91 -7
- package/src/config/model-profile-activation.ts +1 -0
- package/src/config/model-profile-contract.ts +13 -0
- package/src/config/model-profiles.ts +31 -7
- package/src/config/model-registry.ts +4 -2
- package/src/config/settings-schema.ts +61 -2
- package/src/config/settings.ts +8 -0
- package/src/defaults/gjc/skills/ralplan/SKILL.md +21 -2
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +1 -1
- package/src/eval/js/tool-bridge.ts +1 -1
- package/src/extensibility/extensions/runner.ts +4 -0
- package/src/extensibility/extensions/types.ts +14 -0
- package/src/gjc-runtime/deep-interview-ambiguity.ts +16 -2
- package/src/gjc-runtime/deep-interview-draft.ts +2 -1
- package/src/gjc-runtime/deep-interview-recorder.ts +16 -1
- package/src/gjc-runtime/deep-interview-state.ts +25 -3
- package/src/gjc-runtime/linux-proc.ts +70 -36
- package/src/gjc-runtime/ralplan-runtime.ts +252 -1
- package/src/gjc-runtime/state-runtime.ts +48 -11
- package/src/gjc-runtime/state-writer.ts +1 -1
- package/src/hooks/skill-state.ts +23 -1
- package/src/internal-urls/docs-index.generated.ts +7 -7
- package/src/internal-urls/local-protocol.ts +23 -4
- package/src/modes/acp/acp-agent.ts +554 -60
- package/src/modes/acp/acp-event-mapper.ts +93 -6
- package/src/modes/components/model-selector.ts +15 -1
- package/src/modes/components/notifications-settings-editor.ts +1 -1
- package/src/modes/components/queue-pane.ts +55 -9
- package/src/modes/components/queued-message-selector.ts +53 -10
- package/src/modes/components/tool-status-header.ts +1 -4
- package/src/modes/components/welcome.ts +18 -3
- package/src/modes/controllers/command-controller.ts +4 -0
- package/src/modes/controllers/extension-ui-controller.ts +4 -10
- package/src/modes/controllers/input-controller.ts +44 -3
- package/src/modes/controllers/selector-controller.ts +38 -8
- package/src/modes/interactive-mode.ts +65 -26
- package/src/modes/runtime-init.ts +1 -0
- package/src/prompts/agent-fragments/restricted-bash.md +1 -1
- package/src/prompts/agents/architect.md +8 -1
- package/src/prompts/agents/critic.md +8 -1
- package/src/prompts/agents/executor.md +1 -1
- package/src/prompts/agents/planner.md +8 -1
- package/src/runtime/memory-domain.ts +66 -0
- package/src/runtime/memory-guard-contract.ts +73 -0
- package/src/runtime/memory-guard.ts +292 -0
- package/src/runtime/memory-limit.ts +50 -0
- package/src/runtime-mcp/manager.ts +26 -6
- package/src/sdk/acp/adapter.ts +8 -1
- package/src/sdk/acp/final-text.ts +40 -0
- package/src/sdk/acp/mcp.ts +26 -0
- package/src/sdk/broker/identity.ts +22 -12
- package/src/sdk/broker/lifecycle.ts +82 -1
- package/src/sdk/bus/chat-daemon-cli.ts +2 -2
- package/src/sdk/bus/chat-daemon-control.ts +4 -3
- package/src/sdk/bus/config.ts +1 -1
- package/src/sdk/bus/daemon-paths.ts +2 -0
- package/src/sdk/bus/index.ts +222 -27
- package/src/sdk/bus/notification-service.ts +19 -5
- package/src/sdk/bus/operator-runtime.ts +31 -5
- package/src/sdk/bus/rate-limit-pool.ts +8 -0
- package/src/sdk/bus/telegram-cli.ts +6 -13
- package/src/sdk/bus/telegram-daemon-cli.ts +8 -3
- package/src/sdk/bus/telegram-daemon-contract.ts +15 -7
- package/src/sdk/bus/telegram-daemon-control.ts +14 -5
- package/src/sdk/bus/telegram-daemon.ts +1191 -164
- package/src/sdk/host/control/dispatch.ts +2 -0
- package/src/sdk/host/control/operations.ts +1 -0
- package/src/sdk/host/host.ts +2 -2
- package/src/sdk/lifecycle-session.ts +19 -3
- package/src/sdk/protocol/operation-inventory.generated.json +58 -0
- package/src/sdk/protocol/operation-registry.ts +1 -0
- package/src/sdk/session.ts +24 -1
- package/src/sdk/startup-capability.ts +6 -0
- package/src/session/agent-session.ts +290 -132
- package/src/session/fallback-chain-controller.ts +47 -8
- package/src/session/internal/managed-session-scope.ts +173 -127
- package/src/session/internal/native-publish-outcome.ts +8 -3
- package/src/session/session-manager.ts +608 -25
- package/src/skill-state/workflow-mutation-guard.ts +41 -7
- package/src/task/executor.ts +152 -42
- package/src/task/index.ts +2 -0
- package/src/task/provider-retry-status.ts +88 -0
- package/src/task/render.ts +45 -26
- package/src/task/types.ts +25 -11
- package/src/task/ultragoal-redteam-activation.ts +75 -0
- package/src/tools/bash-allowed-prefixes.ts +45 -1
- package/src/tools/index.ts +3 -1
- package/src/tools/resource-gc.ts +496 -120
- package/src/tools/subagent-render.ts +74 -16
- package/src/tools/subagent.ts +2 -0
- package/src/workflow/workflow-intent-diff.ts +4 -1
- package/vendor/insane-search/MANIFEST.json +4 -1
- package/vendor/insane-search/engine/bias_check.py +5 -0
- package/vendor/insane-search/engine/fetch_chain.py +67 -1
- package/vendor/insane-search/engine/transport.py +13 -2
- package/vendor/insane-search/engine/validators.py +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,21 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.11.11] - 2026-07-26
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added cross-platform memory-pressure observability with effective host/cgroup limits, configurable GC and restart advisory thresholds, typed Linux process probes, and a Windows Job Object native probe; unsupported lifecycle actions remain advisory-only.
|
|
10
|
+
- Ralplan consensus planning now enforces a finite planner/revision iteration budget at the native write path (default 5, configurable via `gjc.ralplan.maxIterations`). Opening another planner/revision pass past the cap fails closed with exit code 3 and an operator-visible `PLANNING-STUCK` marker instead of silent unbounded re-review; `final`/post-interview escalation remains allowed without auto-implementation. The cap also floors against on-disk `stage-*-{planner,revision}.md` artifacts so a wiped, truncated, or malformed `index.jsonl` cannot fail open after prior openers (#3165).
|
|
11
|
+
- Added `grok-45-eco`, `grok-45-medium`, and `grok-45-pro` built-in xAI presets for `grok-4.5`; every role stays within the model's `high` reasoning cap, while the `xai` provider recommendation remains `grok-medium` to preserve existing defaults (#3177).
|
|
12
|
+
- JetBrains Air ACP sessions now preserve final answers across fast prompt completion, expose tool/retry/goal/notices and session title updates, apply Air's legacy `session/set_model` preset changes through the canonical session configuration path, accept client-supplied stdio/HTTP/SSE MCP servers, reject unsupported additional directories, and reject unavailable model presets before provider dispatch.
|
|
13
|
+
- Mouse support can now be enabled inside tmux and screen with `mouse.enabled: true`, so the wheel scrolls GJC's virtual session viewport before multiplexer scrollback. Dragging highlights rendered terminal text and copies it to the system clipboard on release while GJC owns mouse input. Mouse support remains disabled by default to preserve native terminal or tmux scrollback and selection behavior.
|
|
14
|
+
- macOS queue controls are now discoverable and platform-native throughout the composer, status/help surfaces, and queue editor: Option+Q queues while busy, Option+Up/Down selects queued messages, and the queue pane documents edit/remove/reorder controls. Added Windows-to-macOS default-shortcut parity coverage and terminal guidance for Option-as-Meta, enhanced protocols, and Control-key remaps.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Telegram per-tool activity is now opt-in and remains durably controllable with `/toolactivity on|off` or the Notifications preferences UI; disabling it suppresses tool start/completion success and error bubbles without hiding assistant, ask, or session notifications.
|
|
19
|
+
- Model preset landing now shows explicit `Enter: apply` and `d: set as default` hints; pressing `d` applies the highlighted profile as the default while Enter keeps the session-only apply path (#3161).
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- The #3216 win32 cleanup-producer regression no longer hardcodes divergent directory size `4096`; it injects `nativeRoot.size + 1` so the test stays hermetic when Linux directory size is already `4096` (post-merge Dev CI red on `79f0de870`).
|
|
23
|
+
|
|
24
|
+
- The synchronous `local://` resolver now accepts a `cleanup_pending` legacy-migration marker instead of rejecting it as unsafe. The async gate already treats that state as settled — entries are installed and content-verified, and only retirement of the legacy source is outstanding — so a managed session whose migration ended in `cleanup_pending` previously failed closed with "Unsafe local:// migration marker" on every `local://` read even though `initializeLocalRoot()` had succeeded. Both marker checks now share one settled-state definition; unrecognized marker values are still rejected. Follow-up to #3080; the asymmetry has been reachable since #2797.
|
|
25
|
+
- `/new`, `fork()`, handoff, `/resume`, and branch/tree-jump transitions privately prepare successor identity/transcript/artifacts and immutable managed migration authority, run verified managed `local://` readiness as the last fallible action, then synchronously adopt and publish — so no public manager/agent getter sees the successor before readiness. Pre-commit failure exact-discards staged state; cleanup authority survives dispose/shutdown; handoff/post-commit faults use committed-degraded contracts. Managed staging renames are sorted for deterministic partial-install rollback. Closes the residual #3080 manager-identity window (#3138; builds on #2797 / #2925).
|
|
26
|
+
- Workflow-state readers and handoff paths no longer write corrupt-state warnings straight to `process.stderr`, which painted raw bytes over the live TUI composer during interactive sessions. Warnings now route through the TUI-safe file logger while `gjc state read`/`status`/`handoff` still surface them on the structured command-result `stderr`, so corrupt state stays distinguishable from absent state for CLI/automation (#3002).
|
|
27
|
+
- Managed model fallback now gives each exhausted entry at most one retry with a rotated credential before advancing, so repeated quota failures cannot consume the attempts reserved for downstream models.
|
|
28
|
+
- Windows managed-session artifact migration now uses the native directory-tree root for retained cleanup identity both when producing `cleanup_pending` records and when validating them, avoiding Bun's zero-valued directory `lstat` metadata and false `durability_failed` results while preserving fail-closed authority checks (#2913).
|
|
29
|
+
- Legacy-session artifact migration now retries transient EINTR interruptions during no-replace artifact publishes and classifies exhausted interruptions as pre-mutation failures instead of surfacing `durability_failed` (#3077).
|
|
30
|
+
- Alibaba Token Plan first-event timeouts also match the exported lazy-stream watchdog text, preserve sticky fallback selection across later turns, avoid same-candidate auto-compaction replay, and reset attempt/overflow budgets only when an accepted queued steering/follow-up successor starts (#3026).
|
|
31
|
+
- Legacy auto-compaction now caps provider `Retry-After` delays at `retry.maxDelayMs` instead of sleeping for an unbounded server hint (#3156).
|
|
32
|
+
- Queued steering and follow-up successors now reset predecessor fallback attempt budgets and overflow-maintenance counters only after `continue()` accepts the queued turn, without clearing the sticky fallback cursor.
|
|
33
|
+
- Questions about `ultragoal` behavior now stay on the direct-answer path instead of being misclassified as requests to start the durable workflow.
|
|
34
|
+
- Workflow intent routing now requires a leading `/skill:ultragoal` for slash-command escalation and recognizes Korean object-particle requests such as `ultragoal을 사용해줘` without routing questions that merely mention the command.
|
|
35
|
+
- Aligned the startup GJC Forge splash border with the composer trailing gutter, including the one-row constrained fallback.
|
|
36
|
+
- `gjc resume` and delete no longer pay a durable (fsync-backed) lock acquisition for managed session tombstones that have nothing left to reconcile; a scope with many accumulated already-completed tombstones opens noticeably faster (#3067).
|
|
37
|
+
- `gjc deep-interview apply-round-result` no longer fails with `DI_INTERNAL_ERROR` on every call, which made the deep-interview workflow unable to score a single round. Three defects stacked: the Round-0 topology gate is recorded as a permanently unscorable `answered` shell (`--round` must be >= 1) yet counted toward the "earlier rounds must be scored" precondition, deadlocking every later round; the round-result decoder materializes omitted optional keys as `undefined`, which canonical JSON rejected outright, so any request omitting `targeting`/`ontology`/`bookkeeping` could not be digested; and `scoreToUnits` tested the raw float product, so ordinary scores whose scaling misses the integer grid (`0.69 * 10_000` is `6900.000000000001`) were rejected as non-integral 1e-4 units. Round-0 gate shells are now excluded from the ordering precondition, canonical JSON drops `undefined` object properties like `JSON.stringify` (array elements and the top-level value stay strict), and 1e-4 unit conversion is decided from the shortest round-trip decimal so genuinely off-grid precision such as `0.00005` and `0.05000000000000001` is still rejected.
|
|
38
|
+
- Task output-limit environment overrides now accept only complete positive decimal safe integers; malformed, fractional, exponent-form, whitespace-padded, and precision-losing values fall back to the documented defaults instead of being partially parsed (#3175).
|
|
39
|
+
- Task output-limit environment overrides now honor values loaded from agent, config-root, and home dotenv files through the shared utils env loader while retaining strict positive safe-integer validation and canonical GJC-first alias precedence.
|
|
40
|
+
- `--thinking` now advertises the supported Effort levels and fails closed with a usage error for invalid, missing, empty, or flag-adjacent values, rather than silently ignoring a token or consuming another flag.
|
|
41
|
+
- MCP servers configured with a large `timeout` no longer widen the startup hang window for every consumer. The long startup ceiling now applies only to ACP lifecycle launches that supply their own MCP servers, derived from the session readiness deadline with reserved headroom; ordinary CLI/SDK `mcpConfigPath`, project, user, and plugin-bundle consumers keep the short default. An ACP launch that reaches the readiness cutoff before MCP startup now fails fast as a pending startup instead of silently falling back to the ordinary ceiling.
|
|
42
|
+
|
|
43
|
+
## [0.11.10] - 2026-07-25
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- The built-in `claude-opus`, `opus-codex`, and `fable-opus-codex` presets now use `anthropic/claude-opus-5` instead of `anthropic/claude-opus-4-8`, with effort suffixes preserved; `packages/ai/src/models.json` was regenerated so `anthropic/claude-opus-5` resolves; non-opus roles (`anthropic/claude-sonnet-5` executor/planner overrides, codex and fable roles) are unchanged.
|
|
47
|
+
|
|
5
48
|
## [0.11.9] - 2026-07-24
|
|
6
49
|
|
|
7
50
|
### Fixed
|
|
8
51
|
|
|
52
|
+
- Restricted role-agent `bash` now accepts literal mid-word tildes, so git revision syntax such as `git diff HEAD~1` no longer has to be quoted. Bash performs tilde expansion only at the start of a word, so word-initial forms (`~`, `~/path`, `~user`) remain blocked.
|
|
53
|
+
- Restricted role-agent `bash` now rejects unquoted tildes at every bash expansion position inside assignment words, including the compound `name+=value` form, so `A=~`, `A+=~`, `foo=~root/bar`, `A=x:~`, `A+=x:~`, and repeated colon segments such as `a=x:~:y:~` fail closed. Tildes bash does not expand — mid-word git revisions (`HEAD~1`), non-assignment words (`--opt=~`, `1abc=~`, `a++=~`, `a+b=~`), and quoted forms — remain allowed (#3117).
|
|
54
|
+
- Read-only role agents (`architect`, `planner`, `critic`) now receive the `irc` coordination tool and a read-only git prefix set (`status`, `log`, `show`, `diff`, `blame`, `rev-parse`, `ls-files`) in restricted bash; mutating git and arbitrary shell stay blocked. `irc` also stays in the initial active tool set for subagents whenever the parent runtime reports IRC availability, instead of costing a discovery round-trip (#3109).
|
|
55
|
+
- The restricted-bash workflow guard now allows `/dev/null` redirects (so `cmd 2>/dev/null` is no longer treated as a repository write during planning phases) while keeping `/dev/stdout`, `/dev/stderr`, and `/dev/fd/<n>` blocked, failing closed on `exec` redirections, and recognizing `>|`, `>&path`, `<>`, path-qualified writers, and every `dd of=` operand. Hook-seeded deep-interview state is now gated on `isNativeDeepInterviewV1` and seeded as a native v1 envelope, so typed operations no longer fail with `DI_STATE_SCHEMA_INVALID` and run the interview manually (#3127).
|
|
56
|
+
- The vendored `insane-search` engine no longer treats a `429` as terminal: rate-limited probe and grid candidates back off (linear escalation honoring `Retry-After`, hard-capped at 30s) and continue through grid diversity and browser fallback. The backoff base from `INSANE_RATE_LIMIT_BACKOFF_S` is validated and clamped, so non-numeric, `NaN`, infinite, negative, or huge values can no longer raise, hang, or defeat a per-attempt deadline, and sleeps stay short enough to honor cancellation (#3131).
|
|
57
|
+
- ACP sessions now apply execution permission decisions to eval calls and to tools invoked from JavaScript or Python eval contexts, while non-ACP session behavior remains unchanged.
|
|
58
|
+
- Interactive prompt cancellation now reaches API-key preflight through `ModelRegistry`, allowing aborted submissions to clear immediately even while a shared credential-usage request continues in the background.
|
|
9
59
|
- Alibaba Token Plan canonical first-event timeouts now surface without session retry/fallback replay and are not internally retried by auto-compaction, preventing repeated provider usage (#3026).
|
|
60
|
+
- Delegated-task and subagent status surfaces now distinguish provider recovery from normal running, identify first-event versus idle-stream stalls, show retry budget and provider-progress age, and aggregate concurrent degradation by provider (#3071).
|
|
61
|
+
- Telegram notification daemon ownership hardening (#3048): Bot API outcomes now share one honest classifier so both the initiating `429` response and cooldown-suppressed calls settle retryably instead of being lost or falsely rejected, including selected acknowledgements; exclusive operator work is registered before its callback can throw; notification health degrades corrupt daemon-state JSON to a warning; root-registration ownership tokens propagate through injected and built-in ensure, rollback, reconciliation, teardown, and abandoned-startup cleanup seams, with token-bearing rows refusing tokenless cleanup while genuinely legacy rows retain root-match behavior; and initial daemon readiness is published only after the matching heartbeat sidecar rename is durable, so no waiter can attach during the proof window.
|
|
62
|
+
- `/new`, `fork()`, handoff, `/resume`, and branch/tree-jump transitions now complete verified managed `local://` legacy-root migration for the successor session identity *before* that identity is published to the agent, the workflow-gate emitter, or extension hooks, so no observer can resolve `local://` against an ungated root across the gate's `await` boundary. Matches cold-start `createAgentSession()` (#2797) and extends `/resume` (#2925). Sending a prompt right after `/new` no longer fails with "local:// legacy migration must complete before path resolution".
|
|
10
63
|
|
|
11
64
|
- Telegram notification topics now fence malformed successful `createForumTopic` responses per session endpoint, preventing repeated ambiguous topic creation while keeping explicit Bot API failures retryable.
|
|
12
65
|
- Windows managed-session resume no longer reports `durability_failed` when Bun rejects `fsync` on the read-only descriptor used to revalidate an existing canonical binding; Windows now uses an owner-writable descriptor for that durability fence while retaining no-follow and pre/post identity/content checks.
|
|
13
|
-
- SDK daemon CLI end-to-end tests now
|
|
66
|
+
- SDK daemon CLI end-to-end tests now capture spawned child stdout and stderr through temporary files instead of pipes, removing the CI pipe teardown race that replaced the product exit contract with SIGPIPE status 141 (#3024).
|
|
14
67
|
- Interactive launch bootstrap is now suppressed for parser-accepted `--print=`, `--help=`, and `--version=` equals forms, keeping non-interactive output free of the warming-workspace preamble on TTYs.
|
|
15
68
|
- Managed legacy-session artifact migration now accepts up to 50,000 files, processes copy work in bounded batches, and reports capacity exhaustion separately from unsafe artifact topology (#2935).
|
|
16
69
|
- Kimi Code first-event timeouts now surface after the provider's continuous first-event wait instead of replaying the full request from zero.
|
|
17
70
|
|
|
18
71
|
- Rejected subagent schema payloads now retain their complete structured data in canonical output artifacts; inline results remain bounded while `agent://` output stays lossless (#2894).
|
|
19
72
|
- Managed legacy-session artifact migration now validates Windows directory roots from the native tree snapshot, tolerates only lazy metadata on plain Windows directories, and replays both clean and cleanup-pending detaches while retaining fail-closed receipt validation. Canonical binding durability sync uses a writable no-follow handle on Windows NTFS stacks that reject `FlushFileBuffers` on read-only handles (#3015, #2913).
|
|
73
|
+
- A single managed session tombstone that fails to reconcile (e.g. an artifact directory identity mismatch) no longer blocks resume or delete of every other session in the same managed scope; the failure is isolated to that tombstone and logged, unless it belongs to the session currently being opened, which still fails closed.
|
|
74
|
+
|
|
20
75
|
## [0.11.8] - 2026-07-23
|
|
21
76
|
### Added
|
|
22
77
|
|
package/dist/types/cli.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ import "@gajae-code/utils/postmortem";
|
|
|
7
7
|
import { Command, type CommandEntry } from "@gajae-code/utils/cli";
|
|
8
8
|
export declare const commands: CommandEntry[];
|
|
9
9
|
export declare function interactiveBootstrapText(argv: readonly string[], stdinIsTTY?: boolean, stdoutIsTTY?: boolean): string | undefined;
|
|
10
|
+
type MemoryGuardNativeSmokeLoad = () => Record<string, unknown>;
|
|
11
|
+
export declare function isMemoryGuardNativeSmokeFastPath(argv: readonly string[]): boolean;
|
|
12
|
+
export declare function runMemoryGuardNativeSmokeFastPath(options?: {
|
|
13
|
+
loadNative?: MemoryGuardNativeSmokeLoad;
|
|
14
|
+
writeStdout?: (text: string) => void;
|
|
15
|
+
}): void;
|
|
10
16
|
export declare class RootHelpCommand extends Command {
|
|
11
17
|
static description: string;
|
|
12
18
|
static hidden: boolean;
|
|
@@ -99,7 +105,7 @@ export declare class RootHelpCommand extends Command {
|
|
|
99
105
|
};
|
|
100
106
|
thinking: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
101
107
|
description: string;
|
|
102
|
-
options:
|
|
108
|
+
options: import("@gajae-code/ai").Effort[];
|
|
103
109
|
};
|
|
104
110
|
hook: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
105
111
|
description: string;
|
|
@@ -142,3 +148,4 @@ export declare function normalizeResumeAlias(argv: readonly string[]): string[];
|
|
|
142
148
|
export declare function routeRootArgv(argv: readonly string[]): string[];
|
|
143
149
|
/** Run the CLI with the given argv (no `process.argv` prefix). */
|
|
144
150
|
export declare function runCli(argv: string[]): Promise<void>;
|
|
151
|
+
export {};
|
|
@@ -76,6 +76,7 @@ export interface MaterializeModelProfileAssignmentsOptions {
|
|
|
76
76
|
export declare function materializeActiveModelProfileAssignment(options: MaterializeModelProfileAssignmentOptions): boolean;
|
|
77
77
|
export declare function materializeActiveModelProfileAssignments(options: MaterializeModelProfileAssignmentsOptions): boolean;
|
|
78
78
|
export declare class ModelProfileCredentialError extends Error {
|
|
79
|
+
readonly code = "authentication_failed";
|
|
79
80
|
readonly profileLabel: string;
|
|
80
81
|
readonly providers: readonly string[];
|
|
81
82
|
constructor(profileLabel: string, providers: readonly string[]);
|
|
@@ -5,6 +5,7 @@ export interface ModelProfileCatalogItem {
|
|
|
5
5
|
id: string;
|
|
6
6
|
displayName: string;
|
|
7
7
|
source: "builtin" | "configured";
|
|
8
|
+
available?: boolean;
|
|
8
9
|
}
|
|
9
10
|
export interface UnknownModelProfileDetails {
|
|
10
11
|
requestedProfile: string;
|
|
@@ -31,6 +32,7 @@ export declare class ModelProfileRegistryError extends Error {
|
|
|
31
32
|
export declare function resolveModelProfileName(profileName: string, profiles: ReadonlyMap<string, unknown>): string;
|
|
32
33
|
export declare function validateModelProfileName(profileName: string, profiles: ReadonlyMap<string, unknown>, registryError?: unknown): string;
|
|
33
34
|
export declare function projectModelProfileCatalog(profiles: ReadonlyMap<string, ModelProfileDefinition>, registryError?: unknown): ModelProfileCatalogItem[];
|
|
35
|
+
export declare function isModelProfileProviderAvailable(profile: ModelProfileDefinition, authenticatedProviders: ReadonlySet<string>): boolean;
|
|
34
36
|
export declare function isModelProfileError(value: unknown): value is {
|
|
35
37
|
code: ModelProfileErrorCode;
|
|
36
38
|
message: string;
|
|
@@ -387,12 +387,14 @@ export declare class ModelRegistry {
|
|
|
387
387
|
*/
|
|
388
388
|
getApiKey(model: Model<Api>, sessionId?: string, options?: {
|
|
389
389
|
credentialSelector?: AuthCredentialSelector;
|
|
390
|
+
signal?: AbortSignal;
|
|
390
391
|
}): Promise<string | undefined>;
|
|
391
392
|
/**
|
|
392
393
|
* Get API key for a provider (e.g., "openai").
|
|
393
394
|
*/
|
|
394
395
|
getApiKeyForProvider(provider: string, sessionId?: string, baseUrl?: string, options?: {
|
|
395
396
|
credentialSelector?: AuthCredentialSelector;
|
|
397
|
+
signal?: AbortSignal;
|
|
396
398
|
}): Promise<string | undefined>;
|
|
397
399
|
/**
|
|
398
400
|
* Check if a model is using OAuth credentials (subscription).
|
|
@@ -180,7 +180,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
180
180
|
};
|
|
181
181
|
readonly "notifications.telegram.toolActivity.enabled": {
|
|
182
182
|
readonly type: "boolean";
|
|
183
|
-
readonly default:
|
|
183
|
+
readonly default: false;
|
|
184
184
|
readonly ui: {
|
|
185
185
|
readonly tab: "notifications";
|
|
186
186
|
readonly label: "Telegram Tool Activity";
|
|
@@ -423,6 +423,11 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
423
423
|
readonly default: 0.05;
|
|
424
424
|
readonly validate: (value: number) => boolean;
|
|
425
425
|
};
|
|
426
|
+
readonly "gjc.ralplan.maxIterations": {
|
|
427
|
+
readonly type: "number";
|
|
428
|
+
readonly default: 5;
|
|
429
|
+
readonly validate: (value: number) => boolean;
|
|
430
|
+
};
|
|
426
431
|
readonly "theme.dark": {
|
|
427
432
|
readonly type: "string";
|
|
428
433
|
readonly default: "red-claw";
|
|
@@ -1461,7 +1466,7 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
1461
1466
|
readonly ui: {
|
|
1462
1467
|
readonly tab: "interaction";
|
|
1463
1468
|
readonly label: "Mouse Support";
|
|
1464
|
-
readonly description: "Enable
|
|
1469
|
+
readonly description: "Enable GJC session scrolling, drag-to-copy text selection, and overlay row selection with the mouse. Disabled by default to preserve native terminal or tmux scrollback and selection.";
|
|
1465
1470
|
};
|
|
1466
1471
|
};
|
|
1467
1472
|
readonly steeringMode: {
|
|
@@ -3103,6 +3108,45 @@ export declare const SETTINGS_SCHEMA: {
|
|
|
3103
3108
|
readonly description: "How often the resource GC sweeps browser tabs and stale screenshot directories.";
|
|
3104
3109
|
};
|
|
3105
3110
|
};
|
|
3111
|
+
readonly "memoryGuard.enabled": {
|
|
3112
|
+
readonly type: "boolean";
|
|
3113
|
+
readonly default: false;
|
|
3114
|
+
};
|
|
3115
|
+
readonly "memoryGuard.checkIntervalMs": {
|
|
3116
|
+
readonly type: "number";
|
|
3117
|
+
readonly default: 30000;
|
|
3118
|
+
readonly validate: (value: number) => boolean;
|
|
3119
|
+
};
|
|
3120
|
+
readonly "memoryGuard.gcThresholdPercent": {
|
|
3121
|
+
readonly type: "number";
|
|
3122
|
+
readonly default: 70;
|
|
3123
|
+
readonly validate: (value: number) => boolean;
|
|
3124
|
+
};
|
|
3125
|
+
readonly "memoryGuard.restartThresholdPercent": {
|
|
3126
|
+
readonly type: "number";
|
|
3127
|
+
readonly default: 85;
|
|
3128
|
+
readonly validate: (value: number) => boolean;
|
|
3129
|
+
};
|
|
3130
|
+
readonly "memoryGuard.restartThresholdWindowMs": {
|
|
3131
|
+
readonly type: "number";
|
|
3132
|
+
readonly default: 90000;
|
|
3133
|
+
readonly validate: (value: number) => boolean;
|
|
3134
|
+
};
|
|
3135
|
+
readonly "memoryGuard.cooldownMs": {
|
|
3136
|
+
readonly type: "number";
|
|
3137
|
+
readonly default: 600000;
|
|
3138
|
+
readonly validate: (value: number) => boolean;
|
|
3139
|
+
};
|
|
3140
|
+
readonly "memoryGuard.parentReserveMb": {
|
|
3141
|
+
readonly type: "number";
|
|
3142
|
+
readonly default: 1024;
|
|
3143
|
+
readonly validate: (value: number) => boolean;
|
|
3144
|
+
};
|
|
3145
|
+
readonly "memoryGuard.policyLimitMb": {
|
|
3146
|
+
readonly type: "number";
|
|
3147
|
+
readonly default: 0;
|
|
3148
|
+
readonly validate: (value: number) => boolean;
|
|
3149
|
+
};
|
|
3106
3150
|
readonly "computer.enabled": {
|
|
3107
3151
|
readonly type: "boolean";
|
|
3108
3152
|
readonly default: false;
|
|
@@ -4227,6 +4271,16 @@ export interface ShellMinimizerSettings {
|
|
|
4227
4271
|
except: string[];
|
|
4228
4272
|
maxCaptureBytes: number;
|
|
4229
4273
|
}
|
|
4274
|
+
export interface MemoryGuardSettings {
|
|
4275
|
+
enabled: boolean;
|
|
4276
|
+
checkIntervalMs: number;
|
|
4277
|
+
gcThresholdPercent: number;
|
|
4278
|
+
restartThresholdPercent: number;
|
|
4279
|
+
restartThresholdWindowMs: number;
|
|
4280
|
+
cooldownMs: number;
|
|
4281
|
+
parentReserveMb: number;
|
|
4282
|
+
policyLimitMb: number;
|
|
4283
|
+
}
|
|
4230
4284
|
export interface NotificationsSettings {
|
|
4231
4285
|
enabled: boolean;
|
|
4232
4286
|
telegram: {
|
|
@@ -4284,6 +4338,7 @@ export interface GroupTypeMap {
|
|
|
4284
4338
|
statusLine: StatusLineSettings;
|
|
4285
4339
|
thinkingBudgets: ThinkingBudgetsSettings;
|
|
4286
4340
|
stt: SttSettings;
|
|
4341
|
+
memoryGuard: MemoryGuardSettings;
|
|
4287
4342
|
modelRoles: Record<string, ModelSelectorValue>;
|
|
4288
4343
|
modelTags: ModelTagsSettings;
|
|
4289
4344
|
cycleOrder: string[];
|
|
@@ -89,6 +89,7 @@ export declare class Settings implements NotificationSettingsReader {
|
|
|
89
89
|
has(path: SettingPath): boolean;
|
|
90
90
|
/** Diagnostics from schema reconciliation during the most recent load. */
|
|
91
91
|
getSchemaReport(): SettingsSchemaReport;
|
|
92
|
+
onChanged(listener: (path: SettingPath) => void): () => void;
|
|
92
93
|
/**
|
|
93
94
|
* Set a setting value (sync).
|
|
94
95
|
* Updates global settings and reserves its background persistence slot before
|
|
@@ -186,6 +186,25 @@ export interface ExtensionTranscriptEntry {
|
|
|
186
186
|
textSummary: string;
|
|
187
187
|
ts: string;
|
|
188
188
|
body?: string;
|
|
189
|
+
/**
|
|
190
|
+
* Durable, image-free message blocks used by rich transcript consumers such
|
|
191
|
+
* as ACP replay. Binary image payloads intentionally remain unavailable.
|
|
192
|
+
*/
|
|
193
|
+
content?: Array<{
|
|
194
|
+
type: "text";
|
|
195
|
+
text: string;
|
|
196
|
+
} | {
|
|
197
|
+
type: "thinking";
|
|
198
|
+
thinking: string;
|
|
199
|
+
} | {
|
|
200
|
+
type: "toolCall";
|
|
201
|
+
id: string;
|
|
202
|
+
name: string;
|
|
203
|
+
arguments: unknown;
|
|
204
|
+
}>;
|
|
205
|
+
toolCallId?: string;
|
|
206
|
+
toolName?: string;
|
|
207
|
+
isError?: boolean;
|
|
189
208
|
}
|
|
190
209
|
export interface ContextUsage {
|
|
191
210
|
/** Context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
|
|
@@ -255,6 +274,7 @@ export interface ExtensionContext {
|
|
|
255
274
|
model: Model;
|
|
256
275
|
thinkingLevel: ThinkingLevel | undefined;
|
|
257
276
|
} | undefined>;
|
|
277
|
+
setModelProfile?(name: string): Promise<boolean>;
|
|
258
278
|
cycleThinkingLevel(): ThinkingLevel | undefined;
|
|
259
279
|
setQueueMode(kind: "steering" | "follow_up" | "interrupt", mode: unknown): boolean;
|
|
260
280
|
getSkillState(): unknown;
|
|
@@ -999,6 +1019,7 @@ export interface ExtensionContextActions {
|
|
|
999
1019
|
model: Model;
|
|
1000
1020
|
thinkingLevel: ThinkingLevel | undefined;
|
|
1001
1021
|
} | undefined>;
|
|
1022
|
+
setModelProfile?: (name: string) => Promise<boolean>;
|
|
1002
1023
|
cycleThinkingLevel?: () => ThinkingLevel | undefined;
|
|
1003
1024
|
setQueueMode?: (kind: "steering" | "follow_up" | "interrupt", mode: unknown) => boolean;
|
|
1004
1025
|
getSkillState?: () => unknown;
|
|
@@ -1,29 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared helpers for reading Linux `/proc/<pid>/stat` process
|
|
2
|
+
* Shared helpers for reading Linux `/proc/<pid>/stat` process identity fields.
|
|
3
3
|
*
|
|
4
4
|
* The `comm` field (field 2, wrapped in parentheses) may itself contain spaces
|
|
5
5
|
* and parentheses, so the only robust anchor is the *last* `)` in the stat
|
|
6
6
|
* string. Field 22 (the process start time in clock ticks since boot) is the
|
|
7
|
-
* 20th whitespace-separated token after that closing paren (index 19).
|
|
8
|
-
*
|
|
9
|
-
* Every caller previously parsed this format independently, with subtly
|
|
10
|
-
* different failure handling. This module fails closed: any malformed input
|
|
11
|
-
* (missing `)`, non-numeric field 22, unreadable `/proc` file, non-Linux
|
|
12
|
-
* platform) yields `null` rather than an inconsistent sentinel.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* Parse field 22 (process start time, in clock ticks since boot) from one
|
|
16
|
-
* `/proc/<pid>/stat` record. Returns the raw numeric token, or `null` when the
|
|
17
|
-
* record shape is malformed or field 22 is absent/non-numeric.
|
|
7
|
+
* 20th whitespace-separated token after that closing paren (index 19). Field 7
|
|
8
|
+
* (`tty_nr`) is the 5th token after the closing paren (index 4).
|
|
18
9
|
*/
|
|
10
|
+
export interface LinuxProcStatIdentity {
|
|
11
|
+
startTime: string;
|
|
12
|
+
ttyDevice: string;
|
|
13
|
+
}
|
|
14
|
+
export type LinuxProcPidProbeResult = ({
|
|
15
|
+
kind: "live";
|
|
16
|
+
} & LinuxProcStatIdentity) | {
|
|
17
|
+
kind: "absent";
|
|
18
|
+
} | {
|
|
19
|
+
kind: "unverifiable";
|
|
20
|
+
reason: "unsupported_platform" | "invalid_pid" | "permission_denied" | "read_error" | "malformed_stat";
|
|
21
|
+
};
|
|
22
|
+
/** Parse field 22 (start time) from a `/proc/<pid>/stat` record. */
|
|
19
23
|
export declare function parseLinuxProcStartTime(stat: string | null | undefined): string | null;
|
|
24
|
+
/** Parse field 7 (`tty_nr`) from a `/proc/<pid>/stat` record. */
|
|
25
|
+
export declare function parseLinuxProcTtyDevice(stat: string | null | undefined): string | null;
|
|
26
|
+
export declare function probeLinuxProcPidSync(pid: number): LinuxProcPidProbeResult;
|
|
27
|
+
export declare function probeLinuxProcPid(pid: number): Promise<LinuxProcPidProbeResult>;
|
|
20
28
|
/**
|
|
21
29
|
* Read `/proc/<pid>/stat` synchronously and return the parsed start time.
|
|
22
|
-
* Returns `null`
|
|
30
|
+
* Returns `null` when the probe is absent or unverifiable.
|
|
23
31
|
*/
|
|
24
32
|
export declare function readLinuxProcStartTimeSync(pid: number): string | null;
|
|
25
33
|
/**
|
|
26
34
|
* Read `/proc/<pid>/stat` asynchronously and return the parsed start time.
|
|
27
|
-
* Returns `null`
|
|
35
|
+
* Returns `null` when the probe is absent or unverifiable.
|
|
28
36
|
*/
|
|
29
37
|
export declare function readLinuxProcStartTime(pid: number): Promise<string | null>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RalplanIndexRow } from "./ledger-event-renderer";
|
|
1
2
|
/**
|
|
2
3
|
* Native implementation of `gjc ralplan`.
|
|
3
4
|
*
|
|
@@ -22,5 +23,64 @@ export interface RalplanCommandResult {
|
|
|
22
23
|
stdout?: string;
|
|
23
24
|
stderr?: string;
|
|
24
25
|
}
|
|
26
|
+
/** Default consensus iterations (planner + revision openers) per run. Matches SKILL.md re-review cap. */
|
|
27
|
+
export declare const RALPLAN_DEFAULT_MAX_ITERATIONS = 5;
|
|
28
|
+
/** Inclusive upper bound for `gjc.ralplan.maxIterations` settings overrides. */
|
|
29
|
+
export declare const RALPLAN_MAX_ITERATIONS_LIMIT = 20;
|
|
30
|
+
/** Operator-visible stuck signal for headless/CI orchestration (#3165). */
|
|
31
|
+
export declare const PLANNING_STUCK_MARKER = "PLANNING-STUCK";
|
|
32
|
+
export type RalplanIterationCapDecision = {
|
|
33
|
+
allowed: true;
|
|
34
|
+
currentIterations: number;
|
|
35
|
+
projectedIterations: number;
|
|
36
|
+
maxIterations: number;
|
|
37
|
+
} | {
|
|
38
|
+
allowed: false;
|
|
39
|
+
currentIterations: number;
|
|
40
|
+
projectedIterations: number;
|
|
41
|
+
maxIterations: number;
|
|
42
|
+
reason: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Pure consensus-iteration budget gate (#3165).
|
|
46
|
+
*
|
|
47
|
+
* A `planner` or `revision` write opens a new iteration (same definition as
|
|
48
|
+
* `summarizeRalplanIndex`). Other stages never open iterations and are always
|
|
49
|
+
* allowed by this gate — including `final` after the cap is already reached.
|
|
50
|
+
*
|
|
51
|
+
* `iterationFloor` raises the observed opener count when on-disk evidence or a
|
|
52
|
+
* recovered ledger is higher than the parsed index (fail-closed vs wipe/truncate).
|
|
53
|
+
*/
|
|
54
|
+
export declare function evaluateRalplanIterationCap(input: {
|
|
55
|
+
rows: readonly RalplanIndexRow[];
|
|
56
|
+
stage: string;
|
|
57
|
+
maxIterations?: number;
|
|
58
|
+
/** Minimum opener count (e.g. on-disk stage-*-{planner,revision}.md). */
|
|
59
|
+
iterationFloor?: number;
|
|
60
|
+
}): RalplanIterationCapDecision;
|
|
61
|
+
/**
|
|
62
|
+
* Count on-disk planner/revision stage artifacts for a run. Used as a floor when
|
|
63
|
+
* `index.jsonl` is missing, empty, truncated, or otherwise under-counts openers.
|
|
64
|
+
*/
|
|
65
|
+
export declare function countRalplanOnDiskOpeners(cwd: string, sessionId: string, runId: string): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Load index rows for cap enforcement. Unlike HUD reads, returns structural
|
|
68
|
+
* signals so callers can fail closed when the ledger is empty/malformed while
|
|
69
|
+
* opener artifacts already exist on disk.
|
|
70
|
+
*/
|
|
71
|
+
export declare function loadRalplanIndexForCap(cwd: string, sessionId: string, runId: string): Promise<{
|
|
72
|
+
rows: RalplanIndexRow[];
|
|
73
|
+
indexPresent: boolean;
|
|
74
|
+
parseableLines: number;
|
|
75
|
+
rawLineCount: number;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Resolve ralplan consensus iteration cap. Project `./.gjc/settings.json` overrides
|
|
79
|
+
* user settings, else default 5.
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveRalplanMaxIterations(cwd: string): Promise<{
|
|
82
|
+
maxIterations: number;
|
|
83
|
+
source: string;
|
|
84
|
+
}>;
|
|
25
85
|
export declare function isRalplanArtifactWriteInvocation(args: readonly string[]): boolean;
|
|
26
86
|
export declare function runNativeRalplanCommand(args: string[], cwd?: string): Promise<RalplanCommandResult>;
|
|
@@ -11,6 +11,7 @@ export interface StateCommandResult {
|
|
|
11
11
|
stdout?: string;
|
|
12
12
|
stderr?: string;
|
|
13
13
|
}
|
|
14
|
+
type StateWarningSink = (warning: string) => void;
|
|
14
15
|
/**
|
|
15
16
|
* Reconcile a workflow skill's mode-state + active-state/HUD from a caller-derived
|
|
16
17
|
* payload. Unlike `gjc state write`, this is a derived repair: callers reconcile from
|
|
@@ -34,5 +35,6 @@ export declare function reconcileWorkflowSkillState(options: {
|
|
|
34
35
|
}): Promise<{
|
|
35
36
|
stateFile: string;
|
|
36
37
|
}>;
|
|
37
|
-
export declare function readWorkflowStateJson(cwd: string, skill: CanonicalGjcWorkflowSkill, sessionId?: string): Promise<Record<string, unknown>>;
|
|
38
|
+
export declare function readWorkflowStateJson(cwd: string, skill: CanonicalGjcWorkflowSkill, sessionId?: string, onWarning?: StateWarningSink): Promise<Record<string, unknown>>;
|
|
38
39
|
export declare function runNativeStateCommand(args: string[], cwd?: string): Promise<StateCommandResult>;
|
|
40
|
+
export {};
|
|
@@ -183,6 +183,7 @@ export type StrictMutationReadResult = {
|
|
|
183
183
|
};
|
|
184
184
|
export declare function readExistingStateForMutation(filePath: string): Promise<StrictMutationReadResult>;
|
|
185
185
|
export declare function workflowEnvelopeContentSha256(value: unknown): string;
|
|
186
|
+
export declare function isNativeDeepInterviewV1(value: Record<string, unknown>): boolean;
|
|
186
187
|
export declare function verifyWorkflowEnvelopeReceiptValue(value: unknown, filePath: string): WorkflowReceiptVerification;
|
|
187
188
|
export declare function stampWorkflowEnvelopeChecksum<T>(value: T, filePath: string, computedAt?: string): T;
|
|
188
189
|
export declare function detectWorkflowEnvelopeIntegrityMismatch(filePath: string): Promise<WorkflowEnvelopeIntegrityMismatch | undefined>;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
|
|
1
|
+
import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type AvailableCommand, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
|
|
2
2
|
import { type AcpProviderRegistration, AcpSdkAdapter } from "../../sdk/acp";
|
|
3
3
|
import type { AcpStartupOptions } from "./startup-options";
|
|
4
4
|
export declare const ACP_BOOTSTRAP_RACE_GUARD_MS = 50;
|
|
5
5
|
type JsonObject = Record<string, unknown>;
|
|
6
6
|
/** Applies ACP's offset cursor after narrowing the broker listing to the requested cwd. */
|
|
7
|
-
export declare function paginateAcpSessions(listed: unknown[], cwd: string | undefined, offset: number
|
|
7
|
+
export declare function paginateAcpSessions(listed: unknown[], cwd: string | undefined, offset: number, sessionMetadata?: ReadonlyMap<string, {
|
|
8
|
+
title?: string;
|
|
9
|
+
updatedAt?: string;
|
|
10
|
+
}>): ListSessionsResponse;
|
|
11
|
+
/** Build the ACP command palette from the shared builtins and live SDK skill state. */
|
|
12
|
+
export declare function acpAvailableCommandsFromSkills(query: unknown): AvailableCommand[];
|
|
8
13
|
export type TranscriptReplayBlock = {
|
|
9
14
|
type: "text";
|
|
10
15
|
text: string;
|
|
@@ -27,8 +32,8 @@ export interface TranscriptReplayContent {
|
|
|
27
32
|
};
|
|
28
33
|
}
|
|
29
34
|
export declare function transcriptReplayContent(entry: unknown): TranscriptReplayContent;
|
|
30
|
-
/** Maps live canonical SDK config and model
|
|
31
|
-
export declare function acpSessionStateFromConfig(query: unknown,
|
|
35
|
+
/** Maps live canonical SDK config and the selected model catalog into the ACP 1.2.1 session state surface. */
|
|
36
|
+
export declare function acpSessionStateFromConfig(query: unknown, modelCatalogQuery?: unknown, modelPreset?: string): {
|
|
32
37
|
configOptions: ({
|
|
33
38
|
id: string;
|
|
34
39
|
name: string;
|
|
@@ -40,7 +45,7 @@ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?:
|
|
|
40
45
|
}[];
|
|
41
46
|
} | {
|
|
42
47
|
id: "model";
|
|
43
|
-
name:
|
|
48
|
+
name: string;
|
|
44
49
|
type: "select";
|
|
45
50
|
currentValue: string;
|
|
46
51
|
options: {
|
|
@@ -67,7 +72,7 @@ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?:
|
|
|
67
72
|
})[];
|
|
68
73
|
} | {
|
|
69
74
|
id: "thinking";
|
|
70
|
-
name:
|
|
75
|
+
name: string;
|
|
71
76
|
type: "select";
|
|
72
77
|
currentValue: string;
|
|
73
78
|
options: {
|
|
@@ -94,7 +99,7 @@ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?:
|
|
|
94
99
|
})[];
|
|
95
100
|
} | {
|
|
96
101
|
id: "steeringMode";
|
|
97
|
-
name:
|
|
102
|
+
name: string;
|
|
98
103
|
type: "select";
|
|
99
104
|
currentValue: string;
|
|
100
105
|
options: {
|
|
@@ -121,7 +126,7 @@ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?:
|
|
|
121
126
|
})[];
|
|
122
127
|
} | {
|
|
123
128
|
id: "followUpMode";
|
|
124
|
-
name:
|
|
129
|
+
name: string;
|
|
125
130
|
type: "select";
|
|
126
131
|
currentValue: string;
|
|
127
132
|
options: {
|
|
@@ -148,7 +153,7 @@ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?:
|
|
|
148
153
|
})[];
|
|
149
154
|
} | {
|
|
150
155
|
id: "interruptMode";
|
|
151
|
-
name:
|
|
156
|
+
name: string;
|
|
152
157
|
type: "select";
|
|
153
158
|
currentValue: string;
|
|
154
159
|
options: {
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { Container } from "@gajae-code/tui";
|
|
2
2
|
import type { QueuedMessageEditEntry } from "../../session/agent-session";
|
|
3
|
+
type QueueSelectorAction = "tui.select.confirm" | "tui.select.cancel";
|
|
4
|
+
type QueueSelectorNavigationAction = "tui.select.up" | "tui.select.down" | "tui.select.pageUp" | "tui.select.pageDown";
|
|
3
5
|
export declare class QueuePaneComponent extends Container {
|
|
4
6
|
#private;
|
|
5
7
|
constructor(entries: QueuedMessageEditEntry[], options: {
|
|
6
8
|
selectedIndex?: number;
|
|
9
|
+
formatKeyHint?: (key: string) => string;
|
|
10
|
+
formatSelectAction?: (action: QueueSelectorAction) => string;
|
|
11
|
+
matchesSelectAction?: (keyData: string, action: QueueSelectorAction) => boolean;
|
|
12
|
+
resolveSelectNavigation?: (keyData: string) => QueueSelectorNavigationAction | undefined;
|
|
13
|
+
onSelect: (entry: QueuedMessageEditEntry) => void;
|
|
7
14
|
onDelete: (entry: QueuedMessageEditEntry, index: number) => void;
|
|
8
15
|
onMove: (entry: QueuedMessageEditEntry, index: number, direction: "up" | "down") => void;
|
|
9
16
|
onClose: () => void;
|
|
10
17
|
});
|
|
11
18
|
handleInput(keyData: string): void;
|
|
12
19
|
}
|
|
20
|
+
export {};
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { Container, SelectList } from "@gajae-code/tui";
|
|
2
2
|
import type { QueuedMessageEditEntry } from "../../session/agent-session";
|
|
3
3
|
type QueuedMessageMoveDirection = "up" | "down";
|
|
4
|
+
type QueueSelectorAction = "tui.select.confirm" | "tui.select.cancel";
|
|
5
|
+
type QueueSelectorNavigationAction = "tui.select.up" | "tui.select.down" | "tui.select.pageUp" | "tui.select.pageDown";
|
|
4
6
|
export type { QueuedMessageMoveDirection };
|
|
5
7
|
export declare class QueuedMessageSelectorComponent extends Container {
|
|
6
8
|
#private;
|
|
7
9
|
constructor(entries: QueuedMessageEditEntry[], onSelect: (entry: QueuedMessageEditEntry) => void, onDelete: (entry: QueuedMessageEditEntry, selectedIndex: number) => void, onMove: (entry: QueuedMessageEditEntry, selectedIndex: number, direction: QueuedMessageMoveDirection) => void, onCancel: () => void, options?: {
|
|
8
10
|
selectedIndex?: number;
|
|
11
|
+
formatKeyHint?: (key: string) => string;
|
|
12
|
+
formatSelectAction?: (action: QueueSelectorAction) => string;
|
|
13
|
+
matchesSelectAction?: (keyData: string, action: QueueSelectorAction) => boolean;
|
|
14
|
+
resolveSelectNavigation?: (keyData: string) => QueueSelectorNavigationAction | undefined;
|
|
9
15
|
});
|
|
10
16
|
handleInput(keyData: string): void;
|
|
11
17
|
getSelectList(): SelectList;
|
|
@@ -14,6 +14,7 @@ export interface WelcomeComponentOptions {
|
|
|
14
14
|
getViewportRows?: () => number | undefined;
|
|
15
15
|
getReservedBottomRows?: (termWidth: number) => number;
|
|
16
16
|
changelogMarkdown?: string;
|
|
17
|
+
rightGutterWidth?: number;
|
|
17
18
|
collapseChangelog?: boolean;
|
|
18
19
|
buildLabel?: string;
|
|
19
20
|
keyDisplayContext?: KeyDisplayContext;
|