@gajae-code/coding-agent 0.8.1 → 0.9.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 -0
- package/dist/types/append-only-mode.d.ts +31 -0
- package/dist/types/capability/rule.d.ts +8 -0
- package/dist/types/cli/completion-cli.d.ts +41 -0
- package/dist/types/cli/config-cli.d.ts +1 -0
- package/dist/types/cli/fixture-report.d.ts +20 -0
- package/dist/types/cli/fixture-report.test.d.ts +1 -0
- package/dist/types/cli/nofile-limit.d.ts +11 -0
- package/dist/types/cli/notify-cli.d.ts +7 -0
- package/dist/types/cli/update-cli.d.ts +22 -0
- package/dist/types/cli.d.ts +124 -1
- package/dist/types/commands/completion.d.ts +29 -0
- package/dist/types/commands/config.d.ts +3 -0
- package/dist/types/commands/deep-interview.d.ts +3 -0
- package/dist/types/config/file-lock.d.ts +7 -6
- package/dist/types/config/keybindings.d.ts +2 -2
- package/dist/types/config/model-profile-activation.d.ts +6 -0
- package/dist/types/config/settings-schema.d.ts +105 -1
- package/dist/types/config/settings.d.ts +8 -0
- package/dist/types/discovery/index.d.ts +1 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/export/ttsr.d.ts +14 -3
- package/dist/types/extensibility/extensions/runner.d.ts +2 -1
- package/dist/types/extensibility/extensions/types.d.ts +8 -0
- package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +39 -0
- package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +10 -1
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +1 -1
- package/dist/types/gjc-runtime/deep-interview-state.d.ts +17 -2
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +7 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +28 -1
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +42 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +120 -13
- package/dist/types/goals/runtime.d.ts +1 -0
- package/dist/types/hooks/native-skill-hook.d.ts +12 -0
- package/dist/types/main.d.ts +4 -1
- package/dist/types/modes/components/assistant-message.d.ts +5 -1
- package/dist/types/modes/components/model-selector.d.ts +4 -0
- package/dist/types/modes/components/queued-message-selector.d.ts +12 -0
- package/dist/types/modes/components/settings-selector.d.ts +2 -0
- package/dist/types/modes/components/status-line.d.ts +9 -0
- package/dist/types/modes/controllers/command-controller.d.ts +1 -0
- package/dist/types/modes/controllers/event-controller.d.ts +5 -0
- package/dist/types/modes/controllers/input-controller.d.ts +1 -3
- package/dist/types/modes/interactive-mode.d.ts +2 -0
- package/dist/types/modes/print-mode.d.ts +13 -1
- package/dist/types/modes/prompt-action-autocomplete.d.ts +1 -1
- package/dist/types/modes/rpc/rpc-types.d.ts +14 -0
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +19 -0
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +23 -1
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/modes/utils/ui-helpers.d.ts +1 -0
- package/dist/types/notifications/config.d.ts +14 -1
- package/dist/types/notifications/daemon-paths.d.ts +1 -0
- package/dist/types/notifications/index.d.ts +6 -3
- package/dist/types/notifications/lifecycle-commands.d.ts +11 -3
- package/dist/types/notifications/telegram-daemon.d.ts +23 -3
- package/dist/types/notifications/telegram-reference.d.ts +0 -5
- package/dist/types/notifications/threaded-render.d.ts +6 -0
- package/dist/types/runtime-api-key.d.ts +7 -0
- package/dist/types/sdk.d.ts +3 -0
- package/dist/types/session/agent-session.d.ts +53 -1
- package/dist/types/session/agent-storage.d.ts +1 -0
- package/dist/types/session/file-mention-pruning.d.ts +8 -0
- package/dist/types/session/messages.d.ts +4 -0
- package/dist/types/session/session-manager.d.ts +17 -1
- package/dist/types/skill-state/active-state.d.ts +18 -1
- package/dist/types/system-prompt.d.ts +18 -2
- package/dist/types/task/executor.d.ts +3 -0
- package/dist/types/task/fork-context-budget.d.ts +7 -0
- package/dist/types/task/token-log.d.ts +30 -0
- package/dist/types/task/token-log.test.d.ts +1 -0
- package/dist/types/tools/bisect.d.ts +81 -0
- package/dist/types/tools/computer.d.ts +2 -2
- package/dist/types/tools/index.d.ts +1 -0
- package/dist/types/tools/search.d.ts +2 -2
- package/dist/types/utils/file-mentions.d.ts +14 -0
- package/dist/types/utils/git.d.ts +32 -0
- package/dist/types/web/scrapers/youtube.d.ts +8 -0
- package/dist/types/workflow/workflow-intent-diff.d.ts +8 -2
- package/dist/types/workflow/workflow-intent-report-consumer.d.ts +50 -0
- package/dist/types/workflow/workflow-intent-report-schema.d.ts +2 -0
- package/dist/types/workflow/workflow-intent-report.d.ts +48 -0
- package/package.json +7 -7
- package/src/append-only-mode.ts +58 -0
- package/src/autoresearch/prompt.md +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/capability/rule.ts +9 -0
- package/src/cli/completion-cli.ts +234 -0
- package/src/cli/config-cli.ts +61 -9
- package/src/cli/fast-help.ts +1 -0
- package/src/cli/fixture-report.test.ts +230 -0
- package/src/cli/fixture-report.ts +171 -0
- package/src/cli/nofile-limit.ts +48 -0
- package/src/cli/notify-cli.ts +91 -7
- package/src/cli/update-cli.ts +85 -9
- package/src/cli.ts +29 -1
- package/src/commands/completion.ts +84 -0
- package/src/commands/config.ts +2 -0
- package/src/commands/contribution-prep.ts +1 -1
- package/src/commands/deep-interview.ts +2 -1
- package/src/config/file-lock.ts +73 -34
- package/src/config/keybindings.ts +2 -2
- package/src/config/model-profile-activation.ts +65 -0
- package/src/config/model-registry.ts +14 -2
- package/src/config/settings-schema.ts +68 -1
- package/src/config/settings.ts +22 -0
- package/src/coordinator-mcp/server.ts +34 -8
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +50 -18
- package/src/defaults/gjc/skills/ralplan/SKILL.md +40 -99
- package/src/defaults/gjc/skills/team/SKILL.md +17 -14
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +59 -4
- package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +30 -0
- package/src/defaults/gjc-defaults.ts +9 -0
- package/src/discovery/helpers.ts +10 -0
- package/src/discovery/index.ts +1 -0
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +60 -2
- package/src/export/ttsr.ts +96 -18
- package/src/extensibility/extensions/runner.ts +183 -219
- package/src/extensibility/extensions/types.ts +9 -0
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +156 -44
- package/src/gjc-runtime/deep-interview-ambiguity.ts +206 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +62 -8
- package/src/gjc-runtime/deep-interview-runtime.ts +210 -2
- package/src/gjc-runtime/deep-interview-state.ts +44 -2
- package/src/gjc-runtime/session-state-sidecar.ts +263 -20
- package/src/gjc-runtime/state-runtime.ts +12 -2
- package/src/gjc-runtime/state-writer.ts +15 -0
- package/src/gjc-runtime/team-runtime.ts +187 -15
- package/src/gjc-runtime/ultragoal-guard.ts +55 -66
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +315 -0
- package/src/gjc-runtime/ultragoal-runtime.ts +1663 -159
- package/src/gjc-runtime/workflow-manifest.generated.json +113 -2
- package/src/gjc-runtime/workflow-manifest.ts +74 -1
- package/src/goals/runtime.ts +10 -2
- package/src/hindsight/backend.ts +1 -3
- package/src/hooks/native-skill-hook.ts +124 -4
- package/src/internal-urls/docs-index.generated.ts +16 -7
- package/src/main.ts +95 -43
- package/src/memories/index.ts +12 -1
- package/src/modes/components/assistant-message.ts +241 -82
- package/src/modes/components/custom-editor.ts +1 -0
- package/src/modes/components/model-selector.ts +54 -11
- package/src/modes/components/queued-message-selector.ts +92 -0
- package/src/modes/components/settings-selector.ts +4 -0
- package/src/modes/components/status-line.ts +167 -54
- package/src/modes/components/tool-execution.ts +44 -19
- package/src/modes/components/welcome.ts +160 -44
- package/src/modes/controllers/command-controller.ts +40 -4
- package/src/modes/controllers/event-controller.ts +66 -47
- package/src/modes/controllers/extension-ui-controller.ts +4 -10
- package/src/modes/controllers/input-controller.ts +180 -18
- package/src/modes/controllers/selector-controller.ts +122 -27
- package/src/modes/interactive-mode.ts +51 -16
- package/src/modes/print-mode.ts +43 -4
- package/src/modes/prompt-action-autocomplete.ts +21 -20
- package/src/modes/rpc/rpc-mode.ts +29 -3
- package/src/modes/rpc/rpc-types.ts +9 -0
- package/src/modes/shared/agent-wire/command-validation.ts +4 -0
- package/src/modes/shared/agent-wire/event-contract.ts +22 -0
- package/src/modes/shared/agent-wire/event-envelope.ts +82 -0
- package/src/modes/shared/agent-wire/scopes.ts +1 -0
- package/src/modes/types.ts +1 -0
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/modes/utils/ui-helpers.ts +19 -6
- package/src/notifications/config.ts +25 -5
- package/src/notifications/daemon-paths.ts +2 -0
- package/src/notifications/index.ts +117 -14
- package/src/notifications/lifecycle-commands.ts +37 -7
- package/src/notifications/lifecycle-orchestrator.ts +19 -6
- package/src/notifications/telegram-daemon-cli.ts +2 -2
- package/src/notifications/telegram-daemon-control.ts +5 -3
- package/src/notifications/telegram-daemon.ts +302 -51
- package/src/notifications/telegram-reference.ts +0 -16
- package/src/notifications/threaded-render.ts +17 -1
- package/src/prompts/agents/architect.md +19 -10
- package/src/prompts/agents/critic.md +16 -18
- package/src/prompts/agents/executor.md +14 -11
- package/src/prompts/agents/planner.md +18 -13
- package/src/prompts/ci-green-request.md +3 -8
- package/src/prompts/goals/goal-continuation.md +0 -5
- package/src/prompts/goals/goal-mode-active.md +0 -5
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/plan-mode-active.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +3 -3
- package/src/prompts/system/project-prompt.md +0 -13
- package/src/prompts/system/subagent-system-prompt.md +3 -2
- package/src/prompts/system/system-prompt.md +29 -19
- package/src/prompts/system/volatile-project-context.md +10 -0
- package/src/prompts/system/web-search.md +4 -7
- package/src/prompts/tools/apply-patch.md +6 -0
- package/src/prompts/tools/ast-edit.md +1 -0
- package/src/prompts/tools/bash.md +1 -1
- package/src/prompts/tools/bisect.md +22 -0
- package/src/prompts/tools/browser.md +1 -1
- package/src/prompts/tools/computer.md +2 -2
- package/src/prompts/tools/cron.md +0 -2
- package/src/prompts/tools/eval.md +2 -2
- package/src/prompts/tools/find.md +1 -1
- package/src/prompts/tools/github.md +6 -6
- package/src/prompts/tools/goal.md +1 -3
- package/src/prompts/tools/image-gen.md +12 -5
- package/src/prompts/tools/irc.md +5 -4
- package/src/prompts/tools/job.md +2 -2
- package/src/prompts/tools/lsp.md +1 -1
- package/src/prompts/tools/monitor.md +2 -2
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/replace.md +2 -21
- package/src/prompts/tools/rewind.md +1 -1
- package/src/prompts/tools/search-tool-bm25.md +1 -11
- package/src/prompts/tools/search.md +1 -1
- package/src/prompts/tools/skill.md +3 -2
- package/src/prompts/tools/ssh.md +2 -1
- package/src/prompts/tools/subagent.md +2 -2
- package/src/prompts/tools/task.md +4 -5
- package/src/prompts/tools/todo-write.md +1 -1
- package/src/prompts/tools/vim.md +1 -0
- package/src/prompts/tools/web-search.md +2 -0
- package/src/prompts/tools/write.md +8 -2
- package/src/runtime-api-key.ts +16 -0
- package/src/sdk.ts +52 -28
- package/src/session/agent-session.ts +951 -132
- package/src/session/agent-storage.ts +4 -0
- package/src/session/file-mention-pruning.ts +64 -0
- package/src/session/messages.ts +4 -0
- package/src/session/session-manager.ts +103 -4
- package/src/skill-state/active-state.ts +141 -5
- package/src/skill-state/deep-interview-mutation-guard.ts +67 -3
- package/src/slash-commands/builtin-registry.ts +218 -71
- package/src/system-prompt.ts +57 -16
- package/src/task/executor.ts +132 -24
- package/src/task/fork-context-advisory.ts +2 -7
- package/src/task/fork-context-budget.ts +9 -0
- package/src/task/index.ts +13 -6
- package/src/task/output-manager.ts +20 -8
- package/src/task/receipt.ts +26 -7
- package/src/task/token-log.test.ts +188 -0
- package/src/task/token-log.ts +179 -0
- package/src/tools/bisect.ts +367 -0
- package/src/tools/computer.ts +246 -43
- package/src/tools/index.ts +3 -0
- package/src/tools/output-meta.ts +116 -4
- package/src/tools/search.ts +8 -2
- package/src/tools/skill.ts +15 -0
- package/src/tools/telegram-send.ts +6 -0
- package/src/utils/file-mentions.ts +39 -7
- package/src/utils/git.ts +73 -0
- package/src/web/scrapers/youtube.ts +24 -12
- package/src/workflow/workflow-intent-diff.ts +29 -6
- package/src/workflow/workflow-intent-report-consumer.ts +221 -0
- package/src/workflow/workflow-intent-report-schema.ts +129 -0
- package/src/workflow/workflow-intent-report.ts +135 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,66 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.9.0] - 2026-07-07
|
|
6
|
+
### Added
|
|
7
|
+
|
|
8
|
+
- Added `/quit` as an alias of the `/exit` slash command, so the near-universal REPL/CLI quit verb shuts the session down instead of silently falling through to the model as a chat message. Like `/exit` it is a TUI-only shutdown: it is not advertised to ACP clients and is not listed as its own autocomplete/help entry.
|
|
9
|
+
- Added a `/clear` slash command that clears the active conversation context while preserving the current session id and durable session history (#1677).
|
|
10
|
+
- Added an Extragoal local skill template (`docs/extragoal-skill-template.md`) documenting an external final review gate on top of `ultragoal` — a fresh-context, cross-family, tool-restricted read-only reviewer with a machine-parsable verdict contract, mandatory bundle secret scan, prompt-injection stance, explicit findings triage, and a bounded re-sign loop — plus a `reviewer` stance profile and cross-session review-gate recipe in `docs/multi-vendor-profiles.md`, pinned by `test/extragoal-template.test.ts`.
|
|
11
|
+
- Added opt-in live turn streaming to the notifications surface. With `GJC_NOTIFICATIONS_STREAM=1` the session WebSocket now emits throttled non-finalized `turn_stream` frames (each carrying a per-turn `messageRef`) as the assistant message streams, and the Telegram threaded daemon edits ONE message in place — via `editMessageText` keyed by `(session, coalesceKey)` — so the finalized text lands on the same message instead of posting a new one. Off by default; without a `messageRef` finalized turns keep their legacy one-message-per-turn behaviour. Throttle interval is `GJC_NOTIFICATIONS_STREAM_INTERVAL_MS` (default 500ms); streamed frames remain suppressed under redaction.
|
|
12
|
+
- Added `GJC_NOTIFICATIONS_TURN_MAX` to raise the finalized `turn_stream` text cap (default 3500 chars, unchanged) so full long turns reach split-capable clients — the Telegram daemon already fans a long finalized turn across multiple messages via `splitTelegramHtml` — instead of being truncated with an ellipsis at the notification layer. The value is clamped to a finite `[280, 40000]` range: a non-finite or non-positive value (unset, `NaN`, `Infinity`, `<= 0`) falls back to the default, so the cap can never be unbounded. Opt-in and off by default (mirror stays a glanceable per-turn summary); live in-progress frames are intentionally NOT raised so a streaming turn stays one editable preview message rather than fanning across sends.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Stopped the Hindsight memory backend from injecting stale public-memory-tool guidance into the system prompt. `hindsight/backend.ts`'s `STATIC_INSTRUCTIONS` still instructed the model to "Use `recall`/`retain`/`reflect`", but those tools were removed from the public surface in #341 — they are unregistered in `BUILTIN_TOOLS`/`HIDDEN_TOOLS` and not discoverable — so every Hindsight-backed session advertised three uncallable tools in its injected `# Memory` block. #341 cleaned the local-memory prompts, public docs, and tool registry but never touched the Hindsight backend's own injected block, and its `public-memory-tool-surface.test.ts` guard list omitted `backend.ts`, so the drift went unnoticed. The block now describes the automatic recall/retain lifecycle instead of naming tools, and the regression test now guards `hindsight/backend.ts`.
|
|
17
|
+
- Task subagent output-ID allocation now reserves numeric prefixes from `.jsonl` session artifacts and `.patch` sidecars as well as final `.md` outputs, preventing resumed or partial subagent runs from reusing an existing artifact stem (#1733).
|
|
18
|
+
- Restored `/changelog` as a built-in slash command, including autocomplete and `/changelog --full`/`/changelog full`, so the What's New prompt no longer points at a missing command.
|
|
19
|
+
- Corrected the Extragoal template's read-only enforcement claim: the `--tools` allowlist governs the built-in tool surface, while the runtime injects the session `goal` tool (when `goal.enabled` is on) and `generate_image` (when an image credential exists) beyond it. Because goal's mutating ops persist session mode state, disabling it is now a mandatory gate precondition (`goal.enabled: false` in the review working directory's `.gjc/config.yml`), and reviewer calls outside the allowlist are gate-failing contract violations.
|
|
20
|
+
- Corrected the GJC dogfood template's user-level install instructions (`docs/gjc-dogfood-skill-template.md`): the documented verbatim `cp` wrote to `~/.gjc/skills/`, which is not the user-level scan location (`~/.gjc/agent/skills/`), and left the YAML frontmatter mid-file, so the scan's required `description` never parsed and the installed skill was silently skipped. The template now documents the same frontmatter-first `sed` extraction into the scanned location that the Extragoal template ships with, pinned by `test/gjc-dogfood-template.test.ts`.
|
|
21
|
+
- Reconciled the skill-template docs with review fixes that raced their merges: the Extragoal reviewer now disables the injected `goal` tool via a dedicated gate directory outside the repository (keeping the reviewed checkout clean, per the #1685 review) instead of an untracked in-repo `.gjc/config.yml`; both the Extragoal and dogfood templates document the one-time skill-discovery enablement (`skills.enabled` plus the install-matched `enablePiUser` **or** `enablePiProject` scan — not both, since the project scan opts every future session into repo-local `.gjc/skills` discovery, per the #1704 review); and the Extragoal template test pins the corrected contract strings.
|
|
22
|
+
- Team worker auto-checkpoints now exclude the entire `.gjc/_session-*/` session subtree instead of nine enumerated subdirectories, so extragoal gate receipts and the session activity marker are no longer committed with `--no-verify` and merged into the leader branch on repos that do not gitignore `.gjc/_session-*/`.
|
|
23
|
+
- The Telegram threaded daemon now schedules each split chunk of an oversized message through the shared rate-limit pool: a granted send slot maps to exactly one Bot API send, and continuation chunks are re-queued (one token each) rather than fanned out against a single token. This keeps a long finalized turn (e.g. raised via `GJC_NOTIFICATIONS_TURN_MAX`) within the documented per-chat rate-limit / round-robin fairness invariant instead of bursting many `sendMessage` calls on one slot.
|
|
24
|
+
- `gjc config list`, `gjc config get`, and `gjc config set` now redact secret-like setting paths even when malformed config files store object, array, boolean, or numeric values there; `--show-secrets` remains the explicit unsafe opt-in (#1738).
|
|
25
|
+
- `gjc ultragoal` now fails with a clean CLI error (exit 1, actionable stderr) instead of crashing with an uncaught `SessionResolutionError` stack dump when no session id is resolvable (missing `GJC_SESSION_ID` / `--session-id`), and `gjc ultragoal --help` no longer requires a resolvable session.
|
|
26
|
+
- Local memory consolidation no longer falls back to the registry's first model (which can be a retired model the provider rejects with 404, permanently failing every phase1/phase2 job). When no model role is configured and the session model is not yet resolved, it now prefers the most recently used model before falling back to registry order.
|
|
27
|
+
- `search` no longer fails schema validation when `paths` is omitted; it defaults to searching the working directory, matching the common repo-wide-search intent.
|
|
28
|
+
- Ultragoal validation-batch tests are now hermetic: they previously ran `computeCheckpointChangeSet` against the enclosing repository, so their hardcoded declared change set only covered the branch that introduced them — failing for any contributor branch or dirty checkout that touches other files. They now use a root outside the git work tree with `CI_DEV_CHANGED_PATHS` pinned to the declared paths.
|
|
29
|
+
- Added a discoverable `bisect` tool that hunts down the commit responsible for a regression by driving `git bisect` with a shell predicate (exit `0` = good, `125` = skip, any other non-zero = bad). It validates preconditions (git repo, clean worktree, `good` is an ancestor of `bad`), resolves the worktree top level once and runs every git command, the predicate, and teardown from that repository root (so it is safe even when invoked from a subdirectory that a candidate commit deletes), and always restores the working tree on completion, error, or abort — running `git bisect reset` and then discarding any tracked-file edits the predicate made (`git reset --hard`) so the promised clean teardown holds even when the predicate mutates tracked files (untracked files the predicate creates are left in place and reported, never deleted). It supports an `invert` mode to find the commit that *fixed* a behavior, bounds the search with `maxSteps` and a per-step `stepTimeoutMs` (a timed-out step counts as a skip), and reports the culprit commit with its author, date, subject, changed files, and every revision it tested.
|
|
30
|
+
|
|
31
|
+
## [0.8.2] - 2026-07-06
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- Queued message selector entries can now be reordered with `Ctrl+Up` / `Ctrl+Down`, with `Ctrl+Shift+Up` / `Ctrl+Shift+Down` still accepted when the terminal forwards them, while keeping the current draft intact.
|
|
35
|
+
|
|
36
|
+
- Added `gjc completion inshellisense`, which generates or installs a Fig/withfig-compatible `gjc` completion spec for Microsoft inshellisense without adding inshellisense as a runtime dependency.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- `gjc team` packaged binaries now avoid persisting Bun virtual `/$bunfs/...` entrypoints as worker commands, so tmux worker panes launch through a real executable or the `gjc` fallback instead of immediately disappearing (#1661).
|
|
40
|
+
- `computer` now honors `include_screenshot` and `computer.autoScreenshot` by returning bounded post-action screenshots, and batch steps now respect nested per-step `timeout` values.
|
|
41
|
+
- Custom-provider `gpt-5.5` entries without an explicit `contextWindow` now default to the 272K Codex prompt budget unless the provider uses first-party `openai-responses`, so Codex passthrough proxies (e.g. CLIProxyAPI) compact in time instead of dying with `context_length_exceeded` at ~272K while the registry advertises 1M.
|
|
42
|
+
- `telegram_send` now rejects files over Telegram's document upload limit before reading them into memory or handing them to the notification sink.
|
|
43
|
+
- `telegram_send` now rejects file attachments while Telegram notification redaction is enabled, preventing explicit file sends from bypassing the redaction boundary.
|
|
44
|
+
- Telegram notification daemons now persist consumed update ids so threaded replies are not reinjected after a daemon restart replays old `getUpdates` entries.
|
|
45
|
+
- Telegram notify setup now hides the interactive BotFather token prompt input, preventing the raw bot token from being echoed into terminal scrollback while pairing notifications.
|
|
46
|
+
- Telegram unattended workflow-gate listeners are now disposed when a notification session stops, preventing stale stopped servers from retaining future gate emissions after shutdown or notification restart.
|
|
47
|
+
- Telegram notification setup and daemon delivery now reject non-private Telegram chat ids before saving configuration, creating forum topics, or sending session content, preserving the private-chat-only routing boundary.
|
|
48
|
+
- Telegram daemon autostart now refuses to attach a new session to a live daemon whose persisted bot-token fingerprint or chat id differs from the current settings, and it avoids registering the session root until ownership is trusted so rotated Telegram credentials cannot keep leaking through the old daemon.
|
|
49
|
+
- Skill autocomplete now supports direct skill-name prefixes after prompt text (for example, `please /ra` → `/skill:ralplan`) while keeping bare `/` menus free of skill entries.
|
|
50
|
+
- `gjc --tmux` on native Windows/psmux now keeps the status line and composer pinned to the bottom after viewport redraws by honoring the GJC tmux launch marker as a multiplexer signal even when `$TMUX` is absent.
|
|
51
|
+
- Provider safety refusals (e.g. Anthropic `stop_reason: "refusal"` → `Refusal (<category>): …`, and `sensitive` → `Content flagged by safety filters`) are now classified as terminal retry errors and surface immediately. They previously fell through to the unbounded `"unknown"` retry class, and because a refusal is deterministic for the submitted context, the session looped refusal → retry → refusal forever — resubmitting the full context every `retry.maxDelayMs` and re-billing it as a prompt-cache write whenever the backoff outlived the cache TTL (#1655).
|
|
52
|
+
- Coordinator event watches now wake on runtime sidecar state changes and emit a bounded `turn.acknowledged` event, so a tmux-resident session that accepts a prompt and then vanishes is durably classified as recoverable `tmux_session_missing_after_prompt_acknowledgement` instead of leaving only a watch registration with no terminal verdict (#1496).
|
|
53
|
+
- Raw tmux-resident sessions now persist public-safe runtime state under their `.gjc/_session-*/runtime/runtime-state.json` even when no coordinator sidecar env is present, so post-ack owner exits leave recoverable `process_exit_before_terminal_state` evidence instead of looking like successful cleanup with no durable output (#1496).
|
|
54
|
+
|
|
55
|
+
- `gjc config list`, `gjc config get`, and `gjc config set` now redact secret-like string settings by default, with `--show-secrets` as an explicit unsafe opt-in.
|
|
56
|
+
|
|
57
|
+
- `/new` session-start notifications now render directly under the welcome panel instead of leaving an extra blank row above the confirmation line.
|
|
58
|
+
- Goal completion now preserves the terminal `goal({op: "complete"})` state even when a `goal_updated` extension hook throws, preventing hook-side write errors from trapping a verified ultragoal run in the continuation loop.
|
|
59
|
+
- Ultragoal completion no longer requires the computer-use red-team suite for non-computer changes that only touch the shared `tools/index.ts` registration file.
|
|
60
|
+
- Task subagent output-ID allocation (`AgentOutputManager`) is now concurrency-safe. `#ensureInitialized` previously set a boolean flag *before* the awaited `readdir`, so when two `task` calls are dispatched in the same turn (they run concurrently as shared-concurrency tools on one session-scoped manager) the second allocation short-circuited initialization and started from index `0` while the first scan was still in flight — colliding with existing `N-*.md` outputs and duplicating ids across batches, which overwrote prior subagent outputs on resume. The scan is now memoized as a promise so concurrent `allocate`/`allocateBatch`/`peekNextIndex` calls await the same `readdir` before `#nextId` is derived.
|
|
61
|
+
- Task fork-context seeds (`inheritContext`) now keep a *contiguous* run of the most recent messages. The selection loop in `buildForkContextSeed` walks newest→oldest but used `continue` when a message overflowed the token budget, so it skipped the oversized recent message and scavenged smaller *older* ones — yielding a non-contiguous seed that misrepresents the conversation and breaks the recency contract of the `receipt`/`last-turn`/`bounded` modes. It now `break`s at the first over-budget message, so a subagent receives the actual recent context (or none) instead of a jumbled mix of recent and stale messages.
|
|
62
|
+
- The `/settings` → Model → **Default Model Profile** submenu now lists the model profiles from the registry instead of rendering an empty `No matching commands` list. The setting declared `options: "runtime"`, but the selector layer only injected runtime choices for themes, thinking level, and the status-line preset — never for model profiles — so the submenu was always empty. Selecting a profile there now also applies it live (the same `activateModelProfile` path as the `/model` preset flow) and persists it as the startup default, instead of only persisting for the next startup.
|
|
63
|
+
- `gjc stats` now resolves to the usage-statistics command instead of being treated as a chat prompt. `src/commands/stats.ts` (backed by the `@gajae-code/stats` dependency via `src/cli/stats-cli.ts`) existed and was fully functional, but the entry was never added to the `commands` registry in `cli.ts`, so `isSubcommand()` returned false for `stats` and the invocation fell through to the default `launch` command — leaving the usage dashboard/summary unreachable and absent from `gjc --help`. Registered the command and listed it in the help surface.
|
|
64
|
+
|
|
5
65
|
## [0.8.1] - 2026-07-04
|
|
6
66
|
|
|
7
67
|
### Added
|
|
@@ -72,6 +132,9 @@
|
|
|
72
132
|
### Changed
|
|
73
133
|
|
|
74
134
|
- `web_search` latency overhaul: provider hard timeouts are now class-based (pure search APIs 15s, LLM-mediated providers 120s, Kimi 35s aligned to its upstream 30s budget, replacing the uniform 300s ceiling; an explicitly configured `web_search.timeout` still overrides — the schema default no longer reinstalls 300s), DuckDuckGo is fired as a background hedge 3s into a slower primary so a failing primary falls back to an already-settled result, the Gemini 429/5xx retry-delay budget dropped from 5 minutes to 30 seconds, resolved provider chains are cached per AuthStorage for 60s keyed on the credential generation (availability probes skipped on repeat searches; login/logout invalidates immediately), and `WebSearchTool` prewarms the chain at construction. Measured: hung-primary fallback 301s → 15s, slow-failing-primary fallback ~7s → 6s, repeat chain resolution ~26ms → ~0.01ms.
|
|
135
|
+
### Fixed
|
|
136
|
+
|
|
137
|
+
- Kept the default composer border one cell inside the terminal edge to avoid the right rounded input corner protruding in narrow/macOS terminal renderers.
|
|
75
138
|
|
|
76
139
|
## [0.7.10] - 2026-07-02
|
|
77
140
|
### Added
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for append-only context-mode resolution and manager
|
|
3
|
+
* construction. Both the initial session build (`sdk.ts`) and the runtime
|
|
4
|
+
* model/setting-change path (`agent-session.ts`), plus the status UI, resolve
|
|
5
|
+
* through here so the auto allowlist and prefix-reset diagnostics never drift.
|
|
6
|
+
*/
|
|
7
|
+
import { AppendOnlyContextManager } from "@gajae-code/agent-core";
|
|
8
|
+
/**
|
|
9
|
+
* Providers for which append-only context auto-enables. Exact provider-string
|
|
10
|
+
* match only: `anthropic` reached via a gateway/aggregator provider string
|
|
11
|
+
* (e.g. `openrouter`, a custom gateway) does NOT match and stays opt-in via
|
|
12
|
+
* `provider.appendOnlyContext: "on"`, because those transports can rewrite or
|
|
13
|
+
* renormalize the request in ways that have not been validated for append-only
|
|
14
|
+
* prefix stability.
|
|
15
|
+
*/
|
|
16
|
+
export declare function providerSupportsAppendOnlyAuto(provider: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve whether to enable append-only context mode based on the setting and provider.
|
|
19
|
+
*
|
|
20
|
+
* - `"on"` → always enable
|
|
21
|
+
* - `"off"` → never enable
|
|
22
|
+
* - `"auto"` → enable for providers with strong prompt-prefix caching that this
|
|
23
|
+
* harness has validated (see {@link providerSupportsAppendOnlyAuto})
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveAppendOnlyMode(setting: "auto" | "on" | "off" | undefined, provider: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Construct an {@link AppendOnlyContextManager} wired to emit per-session
|
|
28
|
+
* stable-prefix reset diagnostics. Use this at every creation site so the
|
|
29
|
+
* telemetry is uniform.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createAppendOnlyContextManager(provider: string | undefined): AppendOnlyContextManager;
|
|
@@ -12,6 +12,10 @@ export interface RuleFrontmatter {
|
|
|
12
12
|
scope?: string | string[];
|
|
13
13
|
/** Per-rule TTSR interrupt mode override. */
|
|
14
14
|
interruptMode?: "never" | "prose-only" | "tool-only" | "always";
|
|
15
|
+
/** Per-rule TTSR repeat mode override. */
|
|
16
|
+
repeatMode?: "once" | "after-gap";
|
|
17
|
+
/** Per-rule TTSR repeat gap override. */
|
|
18
|
+
repeatGap?: number;
|
|
15
19
|
[key: string]: unknown;
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
@@ -36,6 +40,10 @@ export interface Rule {
|
|
|
36
40
|
scope?: string[];
|
|
37
41
|
/** Per-rule TTSR interrupt mode override (falls back to global ttsr.interruptMode). */
|
|
38
42
|
interruptMode?: "never" | "prose-only" | "tool-only" | "always";
|
|
43
|
+
/** Per-rule TTSR repeat mode override (falls back to global ttsr.repeatMode). */
|
|
44
|
+
repeatMode?: "once" | "after-gap";
|
|
45
|
+
/** Per-rule TTSR repeat gap override (falls back to global ttsr.repeatGap). */
|
|
46
|
+
repeatGap?: number;
|
|
39
47
|
/** Source metadata */
|
|
40
48
|
_source: SourceMeta;
|
|
41
49
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CommandCtor, CommandEntry } from "@gajae-code/utils/cli";
|
|
2
|
+
export type FigName = string | string[];
|
|
3
|
+
export interface FigArg {
|
|
4
|
+
name: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
isOptional?: boolean;
|
|
7
|
+
isVariadic?: boolean;
|
|
8
|
+
suggestions?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface FigOption {
|
|
11
|
+
name: FigName;
|
|
12
|
+
description?: string;
|
|
13
|
+
args?: FigArg;
|
|
14
|
+
isRepeatable?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface FigSubcommand {
|
|
17
|
+
name: FigName;
|
|
18
|
+
description?: string;
|
|
19
|
+
options?: FigOption[];
|
|
20
|
+
args?: FigArg | FigArg[];
|
|
21
|
+
}
|
|
22
|
+
export interface FigSpec extends FigSubcommand {
|
|
23
|
+
name: string;
|
|
24
|
+
subcommands?: FigSubcommand[];
|
|
25
|
+
}
|
|
26
|
+
export type InshellisenseIndexStatus = "created" | "updated" | "already-compatible" | "overwritten";
|
|
27
|
+
export interface InstallGjcInshellisenseSpecOptions {
|
|
28
|
+
dir?: string;
|
|
29
|
+
force?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface InstallGjcInshellisenseSpecResult {
|
|
32
|
+
directory: string;
|
|
33
|
+
specPath: string;
|
|
34
|
+
indexPath: string;
|
|
35
|
+
indexStatus: InshellisenseIndexStatus;
|
|
36
|
+
}
|
|
37
|
+
export declare function defaultInshellisenseSpecDir(homeDir?: string): string;
|
|
38
|
+
export declare function buildGjcFigSpec(entries: CommandEntry[], rootCommandOverride?: CommandCtor): Promise<FigSpec>;
|
|
39
|
+
export declare function renderFigSpecModule(spec: FigSpec): string;
|
|
40
|
+
export declare function renderInshellisenseIndexModule(): string;
|
|
41
|
+
export declare function installGjcInshellisenseSpec(spec: FigSpec, options?: InstallGjcInshellisenseSpecOptions): Promise<InstallGjcInshellisenseSpecResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TaskTokenLog } from "../task/types";
|
|
2
|
+
export interface LiveRunReportShape {
|
|
3
|
+
schemaVersion: 1;
|
|
4
|
+
binaryId: string;
|
|
5
|
+
fixtureId: string;
|
|
6
|
+
totals: {
|
|
7
|
+
turns: number;
|
|
8
|
+
inputTokens: number;
|
|
9
|
+
outputTokens: number;
|
|
10
|
+
cacheReadTokens: number;
|
|
11
|
+
cacheWriteTokens: number;
|
|
12
|
+
totalTokens: number;
|
|
13
|
+
};
|
|
14
|
+
cacheHitRate: number | null;
|
|
15
|
+
receiptArtifactRatio: number | null;
|
|
16
|
+
spawnDecisions: number | null;
|
|
17
|
+
roi: number | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function buildFixtureReport(fixtureId: string, logs: readonly TaskTokenLog[]): LiveRunReportShape;
|
|
20
|
+
export declare function runFixtureReport(fixtureId: string): Promise<number>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
export declare const RECOMMENDED_MACOS_NOFILE_LIMIT = 4096;
|
|
3
|
+
export declare function parseNoFileLimit(text: string): number | undefined;
|
|
4
|
+
export declare function buildMacOSNoFileLimitWarning(currentLimit: number): string;
|
|
5
|
+
export interface WarnIfMacOSNoFileLimitTooLowDeps {
|
|
6
|
+
platform?: NodeJS.Platform;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
execFileSync?: typeof execFileSync;
|
|
9
|
+
writeStderr?: (text: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function warnIfMacOSNoFileLimitTooLow(deps?: WarnIfMacOSNoFileLimitTooLowDeps): void;
|
|
@@ -22,4 +22,11 @@ export interface NotifyCommandDeps {
|
|
|
22
22
|
}
|
|
23
23
|
export declare function parseNotifyArgs(args: string[]): NotifyCommandArgs | undefined;
|
|
24
24
|
export declare function runNotifyCommand(cmd: NotifyCommandArgs, deps?: NotifyCommandDeps): Promise<void>;
|
|
25
|
+
type TokenPromptInput = NodeJS.ReadStream & {
|
|
26
|
+
isRaw?: boolean;
|
|
27
|
+
setRawMode?: (mode: boolean) => unknown;
|
|
28
|
+
};
|
|
29
|
+
type TokenPromptOutput = Pick<NodeJS.WriteStream, "write">;
|
|
30
|
+
export declare function promptForToken(input?: TokenPromptInput, output?: TokenPromptOutput): Promise<string>;
|
|
25
31
|
export declare function printNotifyHelp(): void;
|
|
32
|
+
export {};
|
|
@@ -53,6 +53,28 @@ export declare function formatVerificationFailureForTest(result: InstalledVersio
|
|
|
53
53
|
*/
|
|
54
54
|
export declare function replaceBinaryForUpdate(options: BinaryReplacementOptions): Promise<InstalledVersionVerification>;
|
|
55
55
|
export declare function runPackageManagerUpdateForTest(options: PackageManagerUpdateOptions): Promise<InstalledVersionVerification>;
|
|
56
|
+
export declare function fsyncFileForTest(filePath: string): Promise<void>;
|
|
57
|
+
/** Injectable steps of the binary update flow (seams for testing ordering). */
|
|
58
|
+
export interface BinaryUpdateFlow {
|
|
59
|
+
download(url: string, tempPath: string): Promise<void>;
|
|
60
|
+
fsync(filePath: string): Promise<void>;
|
|
61
|
+
replace(options: BinaryReplacementOptions): Promise<InstalledVersionVerification>;
|
|
62
|
+
verifyInstalledVersion(expectedVersion: string): Promise<InstalledVersionVerification>;
|
|
63
|
+
/** Best-effort cleanup of the temp file when the flow aborts before replace. */
|
|
64
|
+
removeTemp?(filePath: string): Promise<void>;
|
|
65
|
+
/** Called once fsync has succeeded, right before replacement begins. */
|
|
66
|
+
beforeReplace?(): void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Orchestrate download → fsync → replace → verify with a strict ordering
|
|
70
|
+
* contract: the downloaded temp binary MUST be flushed to stable storage
|
|
71
|
+
* before it is published (renamed into place) or exec'd for verification.
|
|
72
|
+
*
|
|
73
|
+
* If fsync fails the temp bytes are not durable, so we abort before
|
|
74
|
+
* replacement/verification and clean up the temp file rather than installing a
|
|
75
|
+
* possibly-truncated binary.
|
|
76
|
+
*/
|
|
77
|
+
export declare function runBinaryUpdateFlow(targetPath: string, url: string, expectedVersion: string, flow: BinaryUpdateFlow): Promise<InstalledVersionVerification>;
|
|
56
78
|
/**
|
|
57
79
|
* Run the update command.
|
|
58
80
|
*/
|
package/dist/types/cli.d.ts
CHANGED
|
@@ -3,7 +3,130 @@
|
|
|
3
3
|
* CLI entry point — registers all commands explicitly and delegates to the
|
|
4
4
|
* lightweight CLI runner from pi-utils.
|
|
5
5
|
*/
|
|
6
|
-
import { type CommandEntry } from "@gajae-code/utils/cli";
|
|
6
|
+
import { Command, type CommandEntry } from "@gajae-code/utils/cli";
|
|
7
7
|
export declare const commands: CommandEntry[];
|
|
8
|
+
export declare class RootHelpCommand extends Command {
|
|
9
|
+
static description: string;
|
|
10
|
+
static hidden: boolean;
|
|
11
|
+
static args: {
|
|
12
|
+
messages: import("@gajae-code/utils/cli").ArgDescriptor & {
|
|
13
|
+
description: string;
|
|
14
|
+
required: false;
|
|
15
|
+
multiple: true;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
static flags: {
|
|
19
|
+
model: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
smol: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
slow: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
plan: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
mpreset: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
default: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
provider: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
38
|
+
description: string;
|
|
39
|
+
};
|
|
40
|
+
"api-key": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
"system-prompt": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
"append-system-prompt": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
47
|
+
description: string;
|
|
48
|
+
};
|
|
49
|
+
"allow-home": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
mode: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
53
|
+
description: string;
|
|
54
|
+
options: string[];
|
|
55
|
+
};
|
|
56
|
+
print: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
57
|
+
char: string;
|
|
58
|
+
description: string;
|
|
59
|
+
};
|
|
60
|
+
continue: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
61
|
+
char: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
resume: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
65
|
+
char: string;
|
|
66
|
+
description: string;
|
|
67
|
+
};
|
|
68
|
+
"session-dir": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
69
|
+
description: string;
|
|
70
|
+
};
|
|
71
|
+
"no-session": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
72
|
+
description: string;
|
|
73
|
+
};
|
|
74
|
+
models: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
75
|
+
description: string;
|
|
76
|
+
};
|
|
77
|
+
"no-tools": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
78
|
+
description: string;
|
|
79
|
+
};
|
|
80
|
+
"no-lsp": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
81
|
+
description: string;
|
|
82
|
+
};
|
|
83
|
+
"no-pty": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
tmux: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
87
|
+
description: string;
|
|
88
|
+
};
|
|
89
|
+
tools: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
90
|
+
description: string;
|
|
91
|
+
};
|
|
92
|
+
thinking: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
93
|
+
description: string;
|
|
94
|
+
options: string[];
|
|
95
|
+
};
|
|
96
|
+
hook: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
97
|
+
description: string;
|
|
98
|
+
multiple: true;
|
|
99
|
+
};
|
|
100
|
+
extension: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
101
|
+
char: string;
|
|
102
|
+
description: string;
|
|
103
|
+
multiple: true;
|
|
104
|
+
};
|
|
105
|
+
"no-extensions": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
106
|
+
description: string;
|
|
107
|
+
};
|
|
108
|
+
"no-skills": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
109
|
+
description: string;
|
|
110
|
+
};
|
|
111
|
+
skills: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
112
|
+
description: string;
|
|
113
|
+
};
|
|
114
|
+
"no-rules": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
115
|
+
description: string;
|
|
116
|
+
};
|
|
117
|
+
export: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
118
|
+
description: string;
|
|
119
|
+
};
|
|
120
|
+
"list-models": import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
121
|
+
description: string;
|
|
122
|
+
};
|
|
123
|
+
"no-title": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
124
|
+
description: string;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
static examples: string[];
|
|
128
|
+
static strict: boolean;
|
|
129
|
+
run(): Promise<void>;
|
|
130
|
+
}
|
|
8
131
|
/** Run the CLI with the given argv (no `process.argv` prefix). */
|
|
9
132
|
export declare function runCli(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate shell completion specs for external completion engines.
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from "@gajae-code/utils/cli";
|
|
5
|
+
export default class Completion extends Command {
|
|
6
|
+
static description: string;
|
|
7
|
+
static args: {
|
|
8
|
+
target: import("@gajae-code/utils/cli").ArgDescriptor & {
|
|
9
|
+
description: string;
|
|
10
|
+
required: false;
|
|
11
|
+
options: readonly ["inshellisense", "fig"];
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
static flags: {
|
|
15
|
+
install: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
dir: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
force: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
json: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
run(): Promise<void>;
|
|
29
|
+
}
|
|
@@ -25,6 +25,9 @@ export default class Config extends Command {
|
|
|
25
25
|
json: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
26
26
|
description: string;
|
|
27
27
|
};
|
|
28
|
+
"show-secrets": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
28
31
|
};
|
|
29
32
|
run(): Promise<void>;
|
|
30
33
|
}
|
|
@@ -12,6 +12,9 @@ export default class DeepInterview extends Command {
|
|
|
12
12
|
deep: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
13
13
|
description: string;
|
|
14
14
|
};
|
|
15
|
+
trace: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
15
18
|
threshold: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
|
|
16
19
|
description: string;
|
|
17
20
|
};
|
|
@@ -13,16 +13,17 @@ export interface FileLockOwnerToken {
|
|
|
13
13
|
pid: number;
|
|
14
14
|
timestamp: number;
|
|
15
15
|
}
|
|
16
|
-
/** Outcome of a guarded
|
|
16
|
+
/** Outcome of a guarded lock-dir removal attempt (`removeFileLockDirForGc`). */
|
|
17
17
|
export type FileLockGcRemoval = "removed" | "owner_changed" | "missing";
|
|
18
18
|
/**
|
|
19
19
|
* @internal
|
|
20
|
-
* Fail-closed removal of a
|
|
21
|
-
* token as close to the unlink as possible
|
|
22
|
-
* STILL holds the exact `{pid, timestamp}`
|
|
20
|
+
* Fail-closed removal of a lock dir whose owner is expected to be dead or
|
|
21
|
+
* finished. Re-reads the on-disk owner token as close to the unlink as possible
|
|
22
|
+
* and only deletes the dir when it STILL holds the exact `{pid, timestamp}`
|
|
23
|
+
* identity the caller observed.
|
|
23
24
|
*
|
|
24
|
-
* Closes
|
|
25
|
-
*
|
|
25
|
+
* Closes stale-cleanup TOCTOU windows (#606): between a dead/stale re-read and
|
|
26
|
+
* the unlink, a live process can reclaim a stale lock at the same path
|
|
26
27
|
* (`acquireLock` rms the stale dir, then re-`mkdir`s and rewrites `info` with a
|
|
27
28
|
* fresh pid+timestamp). Deleting by path alone would reap that LIVE lock. Any
|
|
28
29
|
* mismatch (`owner_changed`) or absent/unreadable info (`missing` — e.g. a
|
|
@@ -244,8 +244,8 @@ export declare const KEYBINDINGS: {
|
|
|
244
244
|
readonly description: "Queue message for next turn";
|
|
245
245
|
};
|
|
246
246
|
readonly "app.message.dequeue": {
|
|
247
|
-
readonly defaultKeys: "alt+up";
|
|
248
|
-
readonly description: "
|
|
247
|
+
readonly defaultKeys: ["alt+up", "alt+down"];
|
|
248
|
+
readonly description: "Select queued message to edit";
|
|
249
249
|
};
|
|
250
250
|
readonly "app.clipboard.pasteImage": {
|
|
251
251
|
readonly defaultKeys: "alt+v" | "ctrl+v";
|
|
@@ -46,7 +46,13 @@ export interface MaterializeModelProfileAssignmentOptions {
|
|
|
46
46
|
role: GjcModelAssignmentTargetId;
|
|
47
47
|
selector: string;
|
|
48
48
|
}
|
|
49
|
+
export interface MaterializeModelProfileAssignmentsOptions {
|
|
50
|
+
session: Pick<ModelProfileActivationSession, "model" | "thinkingLevel" | "setActiveModelProfile" | "getActiveModelProfile">;
|
|
51
|
+
settings: Pick<Settings, "clearOverride" | "get" | "override" | "set">;
|
|
52
|
+
assignments: ReadonlyMap<GjcModelAssignmentTargetId, string> | Partial<Record<GjcModelAssignmentTargetId, string>>;
|
|
53
|
+
}
|
|
49
54
|
export declare function materializeActiveModelProfileAssignment(options: MaterializeModelProfileAssignmentOptions): boolean;
|
|
55
|
+
export declare function materializeActiveModelProfileAssignments(options: MaterializeModelProfileAssignmentsOptions): boolean;
|
|
50
56
|
export declare function formatModelProfileCredentialError(profileLabel: string, providers: readonly string[]): string;
|
|
51
57
|
export declare function prepareModelProfileActivation(options: PrepareModelProfileActivationOptions): Promise<PreparedModelProfileActivation>;
|
|
52
58
|
export declare function applyPreparedModelProfileActivation(prepared: PreparedModelProfileActivation, options?: {
|