@gajae-code/coding-agent 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/types/async/job-manager.d.ts +26 -0
- package/dist/types/cli/args.d.ts +1 -0
- package/dist/types/cli/list-models.d.ts +6 -0
- package/dist/types/commands/gc.d.ts +26 -0
- package/dist/types/config/file-lock-gc.d.ts +5 -0
- package/dist/types/config/file-lock.d.ts +7 -0
- package/dist/types/coordinator/contract.d.ts +1 -1
- package/dist/types/defaults/gjc/extensions/grok-build/index.d.ts +1 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/index.d.ts +1 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.d.ts +25 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +27 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/billing.d.ts +8 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/register.d.ts +5 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +10 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/usage.d.ts +2 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +2 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/shared/errors.d.ts +38 -0
- package/dist/types/defaults/gjc-grok-cli.d.ts +5 -0
- package/dist/types/extensibility/extensions/index.d.ts +1 -0
- package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +35 -0
- package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +103 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +2 -0
- package/dist/types/gjc-runtime/deep-interview-state.d.ts +112 -0
- package/dist/types/gjc-runtime/gc-render.d.ts +6 -0
- package/dist/types/gjc-runtime/gc-runtime.d.ts +134 -0
- package/dist/types/gjc-runtime/ledger-event-renderer.d.ts +68 -0
- package/dist/types/gjc-runtime/team-gc.d.ts +7 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +5 -0
- package/dist/types/gjc-runtime/tmux-common.d.ts +11 -0
- package/dist/types/gjc-runtime/tmux-gc.d.ts +7 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +13 -0
- package/dist/types/harness-control-plane/gc-adapter.d.ts +3 -0
- package/dist/types/harness-control-plane/owner.d.ts +7 -0
- package/dist/types/harness-control-plane/storage.d.ts +20 -0
- package/dist/types/modes/components/hook-selector.d.ts +7 -1
- package/dist/types/modes/controllers/command-controller.d.ts +1 -0
- package/dist/types/modes/rpc/rpc-mode.d.ts +16 -1
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +13 -0
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +25 -0
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +2 -0
- package/dist/types/session/agent-session.d.ts +1 -1
- package/dist/types/session/blob-store.d.ts +39 -3
- package/dist/types/skill-state/workflow-hud.d.ts +14 -0
- package/dist/types/tools/ask.d.ts +15 -1
- package/dist/types/tools/subagent.d.ts +6 -0
- package/package.json +7 -7
- package/src/async/job-manager.ts +52 -0
- package/src/cli/args.ts +3 -0
- package/src/cli/auth-broker-cli.ts +1 -0
- package/src/cli/list-models.ts +13 -1
- package/src/cli.ts +1 -0
- package/src/commands/gc.ts +22 -0
- package/src/commands/harness.ts +7 -3
- package/src/config/file-lock-gc.ts +181 -0
- package/src/config/file-lock.ts +14 -0
- package/src/config/model-profiles.ts +24 -15
- package/src/coordinator/contract.ts +1 -0
- package/src/coordinator-mcp/server.ts +459 -3
- package/src/defaults/gjc/agent.models.grok-cli.yml +36 -0
- package/src/defaults/gjc/extensions/grok-build/index.ts +1 -0
- package/src/defaults/gjc/extensions/grok-build/package.json +7 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/biome.json +39 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/package.json +8 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/index.ts +1 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +155 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/payload/sanitize.ts +361 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/billing.ts +57 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/register.ts +99 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +50 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/usage.ts +56 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +36 -0
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/errors.ts +44 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +131 -113
- package/src/defaults/gjc/skills/deep-interview/lateral-review-panel.md +49 -0
- package/src/defaults/gjc-defaults.ts +7 -0
- package/src/defaults/gjc-grok-cli.ts +22 -0
- package/src/extensibility/extensions/index.ts +1 -0
- package/src/extensibility/extensions/prefix-command-bridge.ts +128 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +417 -0
- package/src/gjc-runtime/deep-interview-runtime.ts +18 -26
- package/src/gjc-runtime/deep-interview-state.ts +324 -0
- package/src/gjc-runtime/gc-render.ts +70 -0
- package/src/gjc-runtime/gc-runtime.ts +403 -0
- package/src/gjc-runtime/ledger-event-renderer.ts +164 -0
- package/src/gjc-runtime/ralplan-runtime.ts +58 -7
- package/src/gjc-runtime/state-renderer.ts +12 -3
- package/src/gjc-runtime/state-runtime.ts +46 -29
- package/src/gjc-runtime/team-gc.ts +49 -0
- package/src/gjc-runtime/team-runtime.ts +179 -2
- package/src/gjc-runtime/tmux-common.ts +14 -0
- package/src/gjc-runtime/tmux-gc.ts +176 -0
- package/src/gjc-runtime/tmux-sessions.ts +49 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +12 -0
- package/src/harness-control-plane/gc-adapter.ts +184 -0
- package/src/harness-control-plane/owner.ts +11 -0
- package/src/harness-control-plane/storage.ts +70 -0
- package/src/internal-urls/docs-index.generated.ts +14 -8
- package/src/main.ts +7 -2
- package/src/modes/components/hook-selector.ts +19 -0
- package/src/modes/components/model-selector.ts +25 -8
- package/src/modes/components/status-line/segments.ts +1 -1
- package/src/modes/controllers/command-controller.ts +25 -6
- package/src/modes/controllers/extension-ui-controller.ts +3 -0
- package/src/modes/controllers/selector-controller.ts +1 -0
- package/src/modes/rpc/rpc-mode.ts +151 -33
- package/src/modes/shared/agent-wire/command-dispatch.ts +278 -261
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +30 -1
- package/src/modes/shared/agent-wire/session-registry.ts +109 -0
- package/src/modes/shared/agent-wire/unattended-action-policy.ts +24 -0
- package/src/modes/shared/agent-wire/unattended-run-controller.ts +23 -3
- package/src/modes/shared/agent-wire/unattended-session.ts +16 -1
- package/src/sdk.ts +17 -3
- package/src/session/agent-session.ts +77 -8
- package/src/session/blob-store.ts +59 -3
- package/src/session/session-manager.ts +4 -4
- package/src/setup/hermes/templates/operator-instructions.v1.md +7 -1
- package/src/skill-state/workflow-hud.ts +106 -10
- package/src/slash-commands/builtin-registry.ts +3 -2
- package/src/task/executor.ts +9 -0
- package/src/tools/ask.ts +56 -1
- package/src/tools/job.ts +3 -2
- package/src/tools/monitor.ts +36 -1
- package/src/tools/subagent-render.ts +9 -0
- package/src/tools/subagent.ts +26 -2
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gjc gc` runtime — a global, liveness-only, dry-run-by-default garbage
|
|
3
|
+
* collector for stale GJC session/PID records.
|
|
4
|
+
*
|
|
5
|
+
* Design (see .gjc/plans/ralplan/2026-06-13-1347-954f/pending-approval.md):
|
|
6
|
+
* - This module is an ORCHESTRATOR only. It owns the shared PID probe, the
|
|
7
|
+
* report/exit-code policy, and text/JSON rendering. It must NOT parse private
|
|
8
|
+
* store layouts directly; every store is reached through an injectable
|
|
9
|
+
* `GcStoreAdapter` that lives next to its store owner.
|
|
10
|
+
* - Liveness-only and fail-closed: only `ESRCH` (no such process) is `dead`
|
|
11
|
+
* (removable). `process.kill(pid, 0)` success, `EPERM`, and any unknown probe
|
|
12
|
+
* error all mean KEEP — a live process is never signalled or killed.
|
|
13
|
+
* - Dry-run by default: nothing is deleted unless `--prune`/`--force`.
|
|
14
|
+
*/
|
|
15
|
+
export type GcStore = "harness_leases" | "team_workers" | "file_locks" | "tmux_sessions" | "registry_entries";
|
|
16
|
+
export declare const GC_STORES: readonly GcStore[];
|
|
17
|
+
/** Why a probed pid is kept instead of treated as dead. */
|
|
18
|
+
export type GcPidKeepReason = "alive" | "eperm" | "unknown";
|
|
19
|
+
export interface GcPidProbeResult {
|
|
20
|
+
/** `dead` only on ESRCH; `keep` for alive/eperm/unknown (fail-closed). */
|
|
21
|
+
status: "dead" | "keep";
|
|
22
|
+
reason?: GcPidKeepReason;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Single shared liveness contract threaded through every classifier + prune path. */
|
|
26
|
+
export type GcPidProbe = (pid: number) => GcPidProbeResult;
|
|
27
|
+
export type GcPidStatus = "dead" | "alive" | "eperm" | "unknown" | "none";
|
|
28
|
+
export type GcAction = "none" | "would_remove" | "removed" | "remove_failed" | "skipped";
|
|
29
|
+
export interface GcRecord {
|
|
30
|
+
store: GcStore;
|
|
31
|
+
/** Stable identifier: session id, lock dir path, worker id, tmux name, registry session id. */
|
|
32
|
+
id: string;
|
|
33
|
+
path?: string;
|
|
34
|
+
root?: string;
|
|
35
|
+
pid?: number;
|
|
36
|
+
pid_status?: GcPidStatus;
|
|
37
|
+
/** Store-specific classification label (e.g. "dead", "live", "unclassified", "terminal_lifecycle"). */
|
|
38
|
+
status: string;
|
|
39
|
+
stale: boolean;
|
|
40
|
+
removable: boolean;
|
|
41
|
+
action: GcAction;
|
|
42
|
+
reason: string;
|
|
43
|
+
detail?: string;
|
|
44
|
+
error?: string;
|
|
45
|
+
removed?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface GcError {
|
|
48
|
+
store: GcStore;
|
|
49
|
+
scope: string;
|
|
50
|
+
message: string;
|
|
51
|
+
}
|
|
52
|
+
export interface GcCollectResult {
|
|
53
|
+
records: GcRecord[];
|
|
54
|
+
errors: GcError[];
|
|
55
|
+
}
|
|
56
|
+
export interface GcPruneOutcome {
|
|
57
|
+
removed: boolean;
|
|
58
|
+
error?: string;
|
|
59
|
+
/** Set when a removable record was skipped at prune time (e.g. TOCTOU became live). */
|
|
60
|
+
skipped?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface GcContext {
|
|
63
|
+
probe: GcPidProbe;
|
|
64
|
+
force: boolean;
|
|
65
|
+
env: NodeJS.ProcessEnv;
|
|
66
|
+
cwd: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A store-owned GC adapter. `collect` discovers + classifies (using the shared
|
|
70
|
+
* probe) without mutating anything. `prune` removes a single record, and MUST
|
|
71
|
+
* re-validate / re-probe immediately before any destructive action.
|
|
72
|
+
*/
|
|
73
|
+
export interface GcStoreAdapter {
|
|
74
|
+
store: GcStore;
|
|
75
|
+
collect(ctx: GcContext): Promise<GcCollectResult>;
|
|
76
|
+
prune(record: GcRecord, ctx: GcContext): Promise<GcPruneOutcome>;
|
|
77
|
+
}
|
|
78
|
+
export interface GcCounts {
|
|
79
|
+
discovered: number;
|
|
80
|
+
stale: number;
|
|
81
|
+
alive: number;
|
|
82
|
+
eperm: number;
|
|
83
|
+
unknown: number;
|
|
84
|
+
terminal_lifecycle: number;
|
|
85
|
+
unclassified: number;
|
|
86
|
+
would_remove: number;
|
|
87
|
+
removed: number;
|
|
88
|
+
failed: number;
|
|
89
|
+
errors: number;
|
|
90
|
+
by_store: Record<GcStore, {
|
|
91
|
+
discovered: number;
|
|
92
|
+
stale: number;
|
|
93
|
+
would_remove: number;
|
|
94
|
+
removed: number;
|
|
95
|
+
failed: number;
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
export interface GcReport {
|
|
99
|
+
dry_run: boolean;
|
|
100
|
+
stores: Record<GcStore, GcRecord[]>;
|
|
101
|
+
counts: GcCounts;
|
|
102
|
+
errors: GcError[];
|
|
103
|
+
}
|
|
104
|
+
export interface GcRunResult {
|
|
105
|
+
stdout: string;
|
|
106
|
+
stderr: string;
|
|
107
|
+
status: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The shared, fail-closed PID probe. ESRCH => dead/removable; success => alive;
|
|
111
|
+
* EPERM => kept (owned by another user); any other error => kept as unknown.
|
|
112
|
+
*/
|
|
113
|
+
export declare const gcPidProbe: GcPidProbe;
|
|
114
|
+
/** Map a `GcPidProbe` onto the harness lease probe shape (`"alive"|"dead"|"eperm"`). */
|
|
115
|
+
export declare function gcProbeToLeasePidStatus(probe: GcPidProbe): (pid: number) => "alive" | "dead" | "eperm";
|
|
116
|
+
/** Translate a probe result into a record-friendly pid status label. */
|
|
117
|
+
export declare function gcPidStatusLabel(result: GcPidProbeResult): Exclude<GcPidStatus, "none">;
|
|
118
|
+
/**
|
|
119
|
+
* Collect every store's records (catching hard discovery errors per adapter),
|
|
120
|
+
* then optionally prune removable records with per-record revalidation.
|
|
121
|
+
*/
|
|
122
|
+
export declare function collectGcReport(adapters: GcStoreAdapter[], ctx: GcContext, prune: boolean): Promise<GcReport>;
|
|
123
|
+
/**
|
|
124
|
+
* Exit-code policy:
|
|
125
|
+
* - usage/parse error => 2
|
|
126
|
+
* - hard discovery errors => 1 (both modes)
|
|
127
|
+
* - prune mode with a failed intended removal => 1
|
|
128
|
+
* - otherwise => 0
|
|
129
|
+
*/
|
|
130
|
+
export declare function computeExitCode(report: GcReport): number;
|
|
131
|
+
export declare function runGjcGcCommand(argv: string[], cwd?: string, env?: NodeJS.ProcessEnv, adapters?: GcStoreAdapter[]): Promise<GcRunResult>;
|
|
132
|
+
export declare function gcHelpText(): string;
|
|
133
|
+
/** Lazily assemble the real store adapters (kept lazy to avoid import cycles). */
|
|
134
|
+
export declare function defaultGcAdapters(): Promise<GcStoreAdapter[]>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure parse + summarize for ledger-backed skill observability.
|
|
3
|
+
*
|
|
4
|
+
* Workflow progress for ultragoal/ralplan cannot be observed via subagent tool
|
|
5
|
+
* events (those skills persist through `bash`-backed `gjc` CLI calls whose tool
|
|
6
|
+
* `details` carry no structured payload). The durable source of truth is the
|
|
7
|
+
* append-only ledgers:
|
|
8
|
+
* - ultragoal: `.gjc/ultragoal/ledger.jsonl`
|
|
9
|
+
* - ralplan: `.gjc/plans/ralplan/<run-id>/index.jsonl`
|
|
10
|
+
*
|
|
11
|
+
* This module is I/O-free: callers read the files and pass lines or already-parsed
|
|
12
|
+
* rows. It feeds the compact HUD chip builders in `skill-state/workflow-hud.ts`
|
|
13
|
+
* via the runtime sync paths. Display-string helpers stay theme-free.
|
|
14
|
+
*/
|
|
15
|
+
/** Minimal projection of an ultragoal ledger row used for the HUD chip. */
|
|
16
|
+
export interface UltragoalLedgerEventLite {
|
|
17
|
+
/** Normalized from the row's `event` field, or `type` for reconcile rows. */
|
|
18
|
+
event: string;
|
|
19
|
+
goalId?: string;
|
|
20
|
+
status?: string;
|
|
21
|
+
timestamp?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Coerce an already-parsed ledger row into the lite shape. Accepts both the
|
|
25
|
+
* `event`-keyed vocabulary (plan_created, goal_started, goal_checkpointed,
|
|
26
|
+
* steering_accepted/rejected, review_blockers_recorded) and the `type`-keyed
|
|
27
|
+
* reconcile-failure row (`type: "reconcile_failed"`). Returns undefined when no
|
|
28
|
+
* event/type discriminator is present.
|
|
29
|
+
*/
|
|
30
|
+
export declare function coerceUltragoalLedgerEvent(row: Record<string, unknown>): UltragoalLedgerEventLite | undefined;
|
|
31
|
+
/** Parse a single ultragoal ledger JSONL line; undefined for blank/malformed lines. */
|
|
32
|
+
export declare function parseUltragoalLedgerLine(line: string): UltragoalLedgerEventLite | undefined;
|
|
33
|
+
/** The most recent event, or undefined when the ledger is empty. */
|
|
34
|
+
export declare function latestUltragoalLedgerEvent(events: readonly UltragoalLedgerEventLite[]): UltragoalLedgerEventLite | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Best-effort latest event from raw ledger text: parses line-by-line and skips
|
|
37
|
+
* blank/malformed rows so a torn or hand-edited ledger never throws on the HUD
|
|
38
|
+
* path. Strict receipt consumers should keep using the validating reader.
|
|
39
|
+
*/
|
|
40
|
+
export declare function latestUltragoalLedgerEventFromText(text: string): UltragoalLedgerEventLite | undefined;
|
|
41
|
+
/** Minimal projection of a ralplan `index.jsonl` row. */
|
|
42
|
+
export interface RalplanIndexRow {
|
|
43
|
+
stage: string;
|
|
44
|
+
stageN?: number;
|
|
45
|
+
}
|
|
46
|
+
/** Parse a single ralplan index JSONL line; undefined for blank/malformed lines. */
|
|
47
|
+
export declare function parseRalplanIndexLine(line: string): RalplanIndexRow | undefined;
|
|
48
|
+
export interface RalplanIndexSummary {
|
|
49
|
+
/** Number of consensus iterations (planner/revision boundaries), >= 0. */
|
|
50
|
+
iteration: number;
|
|
51
|
+
/** Stage names present in the current (latest) iteration, in append order. */
|
|
52
|
+
currentStages: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Derive iteration count and current-iteration stage presence from index rows.
|
|
56
|
+
*
|
|
57
|
+
* `stage_n` is NOT used as the iteration key: it is stored verbatim per row and a
|
|
58
|
+
* single planner/architect/critic pass can span multiple stage_n values. Instead,
|
|
59
|
+
* a `planner` or `revision` row opens a new iteration and subsequent rows attach
|
|
60
|
+
* to it. No verdict is derived here (index rows carry none).
|
|
61
|
+
*/
|
|
62
|
+
export declare function summarizeRalplanIndex(rows: readonly RalplanIndexRow[]): RalplanIndexSummary;
|
|
63
|
+
/**
|
|
64
|
+
* Compact, theme-free presence string for the ralplan `stages` chip, e.g.
|
|
65
|
+
* `P·A·C`. Collapses past `cap` with a "… N more" suffix. Returns undefined when
|
|
66
|
+
* there are no stages.
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatRalplanStagePresence(stages: readonly string[], cap?: number): string | undefined;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GC adapter for team workers (`.gjc/state/team/<name>/workers/<id>/` heartbeat
|
|
3
|
+
* + lifecycle). Liveness-only: numeric PID status dominates lifecycle/heartbeat
|
|
4
|
+
* signals.
|
|
5
|
+
*/
|
|
6
|
+
import type { GcStoreAdapter } from "./gc-runtime";
|
|
7
|
+
export declare const teamWorkersGcAdapter: GcStoreAdapter;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { WorkflowHudSummary } from "../skill-state/active-state";
|
|
2
|
+
import type { GcPidProbe, GcRecord } from "./gc-runtime";
|
|
2
3
|
export type GjcTeamPhase = "starting" | "running" | "awaiting_integration" | "complete" | "failed" | "cancelled";
|
|
3
4
|
export type GjcTeamTaskStatus = "pending" | "blocked" | "in_progress" | "completed" | "failed";
|
|
4
5
|
export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
|
|
@@ -272,6 +273,10 @@ export interface GjcWorkerIntegrationAttemptRequestResult {
|
|
|
272
273
|
}
|
|
273
274
|
export declare const GJC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "notification-list", "notification-read", "notification-replay", "notification-mark-pane-attempt", "worker-startup-ack", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "transition-task", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "update-worker-status", "read-worker-heartbeat", "recover-stale-claims", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "read-traces", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
|
|
274
275
|
export declare function resolveGjcTeamStateRoot(cwd?: string, env?: NodeJS.ProcessEnv): string;
|
|
276
|
+
/** @internal */
|
|
277
|
+
export declare function listTeamWorkerGcRecords(teamRoot: string, probe: GcPidProbe): Promise<GcRecord[]>;
|
|
278
|
+
/** @internal */
|
|
279
|
+
export declare function pruneTeamWorkerGcRecord(record: GcRecord, probe: GcPidProbe): Promise<boolean>;
|
|
275
280
|
export declare function persistGjcTeamModeStateSummary(snapshot: GjcTeamSnapshot, cwd?: string): Promise<void>;
|
|
276
281
|
export declare function recoverGjcTeamStaleClaims(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamLivenessRecoveryResult>;
|
|
277
282
|
type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
|
|
@@ -21,6 +21,17 @@ export interface TmuxCommandResult {
|
|
|
21
21
|
export type TmuxCommandRunner = (args: string[]) => TmuxCommandResult;
|
|
22
22
|
export declare function envDisabled(value: string | undefined): boolean;
|
|
23
23
|
export declare function resolveGjcTmuxCommand(env?: NodeJS.ProcessEnv): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build the exact-session target for tmux *option* commands
|
|
26
|
+
* (`show-options` / `set-option`) and `display-message -t`.
|
|
27
|
+
*
|
|
28
|
+
* Session-scoped commands such as `kill-session` / `attach-session` resolve a
|
|
29
|
+
* bare exact target (`=NAME`), but tmux 3.6a refuses to resolve a bare `=NAME`
|
|
30
|
+
* for option/display commands. Appending the empty window separator (`=NAME:`)
|
|
31
|
+
* keeps the exact-session match while giving tmux the window-qualified target
|
|
32
|
+
* those commands require. See gajae-code#580.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildGjcTmuxExactOptionTarget(sessionName: string): string;
|
|
24
35
|
export declare const GJC_TMUX_UNTAGGED_REASON = "gjc_tmux_session_untagged";
|
|
25
36
|
export declare function buildGjcTmuxUntaggedSessionHint(tmuxCommand: string): string;
|
|
26
37
|
export declare function buildGjcTmuxUntaggedSessionError(sessionName: string, tmuxCommand: string): string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GC adapter for gjc-tagged tmux sessions. Stale iff `@gjc-project` path is gone
|
|
3
|
+
* OR `@gjc-branch` has no live git worktree. Removal is a spec-authorized
|
|
4
|
+
* destructive `kill-session`, gated by exact-target re-read + revalidation.
|
|
5
|
+
*/
|
|
6
|
+
import type { GcStoreAdapter } from "./gc-runtime";
|
|
7
|
+
export declare const tmuxSessionsGcAdapter: GcStoreAdapter;
|
|
@@ -9,9 +9,22 @@ export interface GjcTmuxSessionStatus {
|
|
|
9
9
|
branchSlug?: string;
|
|
10
10
|
project?: string;
|
|
11
11
|
}
|
|
12
|
+
export interface GjcTmuxSessionTagsForGc {
|
|
13
|
+
profile?: string;
|
|
14
|
+
project?: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface GjcTmuxSessionsForGc {
|
|
18
|
+
tagged: GjcTmuxSessionStatus[];
|
|
19
|
+
untagged: string[];
|
|
20
|
+
}
|
|
12
21
|
export declare function listGjcTmuxSessions(env?: NodeJS.ProcessEnv): GjcTmuxSessionStatus[];
|
|
22
|
+
/** @internal */
|
|
23
|
+
export declare function listTmuxSessionsForGc(env?: NodeJS.ProcessEnv): GjcTmuxSessionsForGc;
|
|
13
24
|
export declare function findGjcTmuxSessionByBranch(branch: string, env?: NodeJS.ProcessEnv, project?: string | null): GjcTmuxSessionStatus | undefined;
|
|
14
25
|
export declare function statusGjcTmuxSession(sessionName: string, env?: NodeJS.ProcessEnv): GjcTmuxSessionStatus;
|
|
15
26
|
export declare function createGjcTmuxSession(env?: NodeJS.ProcessEnv): GjcTmuxSessionStatus;
|
|
27
|
+
/** @internal */
|
|
28
|
+
export declare function readTmuxSessionTagsForGc(sessionName: string, env?: NodeJS.ProcessEnv): GjcTmuxSessionTagsForGc;
|
|
16
29
|
export declare function removeGjcTmuxSession(sessionName: string, env?: NodeJS.ProcessEnv): GjcTmuxSessionStatus;
|
|
17
30
|
export declare function attachGjcTmuxSession(sessionName: string, env?: NodeJS.ProcessEnv): never;
|
|
@@ -44,3 +44,10 @@ export interface ResolvedOwner {
|
|
|
44
44
|
}
|
|
45
45
|
/** Determine whether a live owner currently holds the session (for CLI routing). */
|
|
46
46
|
export declare function resolveOwner(root: string, sessionId: string): Promise<ResolvedOwner>;
|
|
47
|
+
/**
|
|
48
|
+
* Owner liveness for verbs that do not route to the owner (e.g. `classify`): a routable owner
|
|
49
|
+
* has a live lease and a socket endpoint. This is the same lease/socket probe `observe` uses to
|
|
50
|
+
* decide routing, so non-routing verbs derive `ownerLive` consistently instead of assuming the
|
|
51
|
+
* owner is gone (which would misclassify a live owner as vanished/restart-clean).
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveOwnerLive(root: string, sessionId: string): Promise<boolean>;
|
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import type { EventEnvelope, ReceiptFamily, SessionState } from "./types";
|
|
2
|
+
interface HarnessRootRegistryEntry {
|
|
3
|
+
root: string;
|
|
4
|
+
updatedAt: string;
|
|
5
|
+
}
|
|
6
|
+
export interface HarnessRootRegistryForGc {
|
|
7
|
+
sessionId: string;
|
|
8
|
+
roots: HarnessRootRegistryEntry[];
|
|
9
|
+
}
|
|
10
|
+
export interface HarnessRootRegistryListingForGc {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
file: string;
|
|
13
|
+
roots: HarnessRootRegistryEntry[];
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
2
16
|
interface ResolveHarnessSessionRootOptions {
|
|
3
17
|
expectedWorkspace?: string;
|
|
4
18
|
}
|
|
5
19
|
export declare function canonicalWorkspacePath(workspace: string): string;
|
|
20
|
+
/** @internal */
|
|
21
|
+
export declare function listHarnessRootRegistriesForGc(env?: NodeJS.ProcessEnv): Promise<HarnessRootRegistryListingForGc[]>;
|
|
22
|
+
/** @internal */
|
|
23
|
+
export declare function rewriteHarnessRootRegistryForGc(file: string, registry: HarnessRootRegistryForGc): Promise<void>;
|
|
24
|
+
/** @internal */
|
|
25
|
+
export declare function removeHarnessRootRegistryFileForGc(file: string): Promise<void>;
|
|
6
26
|
export declare const MAX_UNIX_SOCKET_PATH_BYTES = 100;
|
|
7
27
|
export declare function controlSocketPath(root: string, sessionId: string, env?: NodeJS.ProcessEnv): string;
|
|
8
28
|
export declare class StorageError extends Error {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Generic selector component for hooks.
|
|
3
3
|
* Displays a list of string options with keyboard navigation.
|
|
4
4
|
*/
|
|
5
|
-
import { Container, type TUI } from "@gajae-code/tui";
|
|
5
|
+
import { type AutocompleteProvider, Container, type TUI } from "@gajae-code/tui";
|
|
6
6
|
export interface HookSelectorOptions {
|
|
7
7
|
tui?: TUI;
|
|
8
8
|
timeout?: number;
|
|
@@ -33,6 +33,12 @@ export interface HookSelectorOptions {
|
|
|
33
33
|
optionLabel: string;
|
|
34
34
|
onSubmit: (text: string) => void;
|
|
35
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Autocomplete provider for the inline custom-input editor. When present,
|
|
38
|
+
* the "Other (type your own)" editor gains the same `@` file-link and `/`
|
|
39
|
+
* completion behavior as the main prompt editor.
|
|
40
|
+
*/
|
|
41
|
+
autocompleteProvider?: AutocompleteProvider;
|
|
36
42
|
}
|
|
37
43
|
export declare class HookSelectorComponent extends Container {
|
|
38
44
|
#private;
|
|
@@ -35,3 +35,4 @@ export declare class CommandController {
|
|
|
35
35
|
handleContributionPrepCommand(customInstructions?: string): Promise<void>;
|
|
36
36
|
}
|
|
37
37
|
export declare function renderProviderSection(details: ProviderDetails, uiTheme: Pick<typeof theme, "fg">): string;
|
|
38
|
+
export declare function renderUsageReports(reports: UsageReport[], uiTheme: typeof theme, nowMs: number, availableWidth: number): string;
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC mode: Headless operation with JSON stdin/stdout protocol.
|
|
3
|
+
*
|
|
4
|
+
* Used for embedding the agent in other applications.
|
|
5
|
+
* Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.
|
|
6
|
+
*
|
|
7
|
+
* Protocol:
|
|
8
|
+
* - Commands: JSON objects with `type` field, optional `id` for correlation
|
|
9
|
+
* - Responses: JSON objects with `type: "response"`, `command`, `success`, and optional `data`/`error`
|
|
10
|
+
* - Events: AgentSessionEvent objects streamed as they occur
|
|
11
|
+
* - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response
|
|
12
|
+
*/
|
|
1
13
|
import type { ExtensionUIContext, ExtensionUIDialogOptions } from "../../extensibility/extensions";
|
|
2
14
|
import type { AgentSession } from "../../session/agent-session";
|
|
3
15
|
import type { RpcExtensionUIRequest, RpcExtensionUIResponse, RpcHostToolCallRequest, RpcHostToolCancelRequest, RpcHostUriCancelRequest, RpcHostUriRequest, RpcResponse } from "./rpc-types";
|
|
@@ -7,6 +19,7 @@ export type PendingExtensionRequest = {
|
|
|
7
19
|
reject: (error: Error) => void;
|
|
8
20
|
};
|
|
9
21
|
type RpcOutput = (obj: RpcResponse | RpcExtensionUIRequest | RpcHostToolCallRequest | RpcHostToolCancelRequest | RpcHostUriRequest | RpcHostUriCancelRequest | object) => void;
|
|
22
|
+
export declare function shouldEmitRpcTitlesForTest(): boolean;
|
|
10
23
|
export declare function requestRpcEditor(pendingRequests: Map<string, PendingExtensionRequest>, output: RpcOutput, title: string, prefill?: string, dialogOptions?: ExtensionUIDialogOptions, editorOptions?: {
|
|
11
24
|
promptStyle?: boolean;
|
|
12
25
|
}): Promise<string | undefined>;
|
|
@@ -14,4 +27,6 @@ export declare function requestRpcEditor(pendingRequests: Map<string, PendingExt
|
|
|
14
27
|
* Run in RPC mode.
|
|
15
28
|
* Listens for JSON commands on stdin, outputs events and responses on stdout.
|
|
16
29
|
*/
|
|
17
|
-
export declare function runRpcMode(session: AgentSession, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void
|
|
30
|
+
export declare function runRpcMode(session: AgentSession, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void, options?: {
|
|
31
|
+
listen?: string;
|
|
32
|
+
}): Promise<never>;
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { OpenGateInput } from "./workflow-gate-broker";
|
|
2
2
|
/** "Other (type your own)" sentinel, mirroring the interactive ask tool. */
|
|
3
3
|
export declare const GATE_OTHER_OPTION = "Other (type your own)";
|
|
4
|
+
/** Optional structured deep-interview round metadata supplied by the agent. */
|
|
5
|
+
export interface AskGateDeepInterviewState {
|
|
6
|
+
round_id?: string;
|
|
7
|
+
round: number;
|
|
8
|
+
component: string;
|
|
9
|
+
dimension: string;
|
|
10
|
+
ambiguity: number;
|
|
11
|
+
}
|
|
4
12
|
export interface AskGateQuestion {
|
|
5
13
|
id: string;
|
|
6
14
|
question: string;
|
|
@@ -9,6 +17,11 @@ export interface AskGateQuestion {
|
|
|
9
17
|
}>;
|
|
10
18
|
multi?: boolean;
|
|
11
19
|
recommended?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Structured round metadata. When present it is the authoritative source for gate
|
|
22
|
+
* `stage_state`; when absent, the question text is regex-parsed as a fallback.
|
|
23
|
+
*/
|
|
24
|
+
deepInterview?: AskGateDeepInterviewState;
|
|
12
25
|
}
|
|
13
26
|
export interface AskGateResult {
|
|
14
27
|
id: string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type RpcSessionTransport = "stdio" | "bridge" | "socket";
|
|
2
|
+
export interface RpcSessionRecord {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
pid: number;
|
|
5
|
+
transport: RpcSessionTransport;
|
|
6
|
+
cwd: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
/** ISO-8601 start timestamp. */
|
|
9
|
+
startedAt: string;
|
|
10
|
+
/** Reachable endpoint for persistent transports (issue 09); absent for stdio. */
|
|
11
|
+
endpoint?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Write (or replace) the registry record for a session. The record is written to
|
|
15
|
+
* a same-directory temp file and atomically renamed into place so a concurrent
|
|
16
|
+
* reader never observes (and reaps) a partially-written record.
|
|
17
|
+
*/
|
|
18
|
+
export declare function registerRpcSession(record: RpcSessionRecord, agentDir?: string): Promise<string>;
|
|
19
|
+
/** Remove a session's registry record. Best-effort: a missing file is not an error. */
|
|
20
|
+
export declare function unregisterRpcSession(sessionId: string, agentDir?: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* List live RPC sessions, reaping records whose process is gone or whose file is
|
|
23
|
+
* unparseable. Returns records sorted by `startedAt` ascending.
|
|
24
|
+
*/
|
|
25
|
+
export declare function listRpcSessions(agentDir?: string): Promise<RpcSessionRecord[]>;
|
|
@@ -20,6 +20,8 @@ import type { RpcUnattendedActionClass } from "../../rpc/rpc-types";
|
|
|
20
20
|
import type { BridgeCommandScope } from "./scopes";
|
|
21
21
|
/** Coarse command scope -> `command.<scope>` action class. */
|
|
22
22
|
export declare function actionClassForScope(scope: BridgeCommandScope): RpcUnattendedActionClass;
|
|
23
|
+
/** Runtime list of every v1 action class — membership-validation source for negotiate (#319). */
|
|
24
|
+
export declare const RPC_UNATTENDED_ACTION_CLASSES: readonly RpcUnattendedActionClass[];
|
|
23
25
|
/**
|
|
24
26
|
* Classify a (possibly compound / nested) bash command into the most severe
|
|
25
27
|
* action class across all statements and nested substitutions. Fail-closed.
|
|
@@ -143,7 +143,7 @@ export type AgentSessionEvent = AgentEvent | {
|
|
|
143
143
|
};
|
|
144
144
|
/** Listener function for agent session events */
|
|
145
145
|
export type AgentSessionEventListener = (event: AgentSessionEvent) => void;
|
|
146
|
-
export type AsyncJobSnapshotItem = Pick<AsyncJob, "id" | "type" | "status" | "label" | "startTime" | "metadata">;
|
|
146
|
+
export type AsyncJobSnapshotItem = Pick<AsyncJob, "id" | "type" | "status" | "label" | "startTime" | "endTime" | "metadata">;
|
|
147
147
|
export interface AsyncJobSnapshot {
|
|
148
148
|
running: AsyncJobSnapshotItem[];
|
|
149
149
|
recent: AsyncJobSnapshotItem[];
|
|
@@ -78,22 +78,58 @@ export declare function externalizeImageDataSync(blobStore: BlobStore, base64Dat
|
|
|
78
78
|
/**
|
|
79
79
|
* Resolve an externalized provider image data URL back to its original string.
|
|
80
80
|
* If the data is not a blob reference, returns it unchanged.
|
|
81
|
-
*
|
|
81
|
+
*
|
|
82
|
+
* LEGACY PERSISTED-IMAGE COMPATIBILITY BOUNDARY: when the persisted blob is missing
|
|
83
|
+
* (e.g. resuming an old session whose image blob was pruned), this warns and returns
|
|
84
|
+
* the reference as-is rather than throwing, so legacy resume degrades gracefully.
|
|
85
|
+
* New resident byte-sensitive TEXT uses the fail-closed path instead
|
|
86
|
+
* (`resolveTextBlobSync` -> `ResidentBlobMissingError`). Do NOT route new byte-sensitive
|
|
87
|
+
* resident data through this warn-and-return path.
|
|
82
88
|
*/
|
|
83
89
|
export declare function resolveImageDataUrl(blobStore: BlobStore, data: string): Promise<string>;
|
|
84
90
|
/**
|
|
85
91
|
* Resolve a blob reference back to base64 data.
|
|
86
92
|
* If the data is not a blob reference, returns it unchanged.
|
|
87
|
-
*
|
|
93
|
+
*
|
|
94
|
+
* LEGACY PERSISTED-IMAGE COMPATIBILITY BOUNDARY: when the blob is missing this warns
|
|
95
|
+
* and returns the reference as-is (downstream sees an invalid base64 ref but does not
|
|
96
|
+
* crash), preserving legacy-session resume. Byte-sensitive resident TEXT is fail-closed
|
|
97
|
+
* via `resolveTextBlobSync`; do NOT route new byte-sensitive resident data here.
|
|
88
98
|
*/
|
|
89
99
|
export declare function resolveImageData(blobStore: BlobStore, data: string): Promise<string>;
|
|
90
100
|
/** Synchronously resolve an externalized provider image data URL back to its original string. */
|
|
91
101
|
export declare function resolveImageDataUrlSync(blobStore: BlobStore, data: string): string;
|
|
92
102
|
/** Synchronously resolve a blob reference back to base64 data. */
|
|
93
103
|
export declare function resolveImageDataSync(blobStore: BlobStore, data: string): string;
|
|
94
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Synchronously resolve a blob reference back to utf8 text.
|
|
106
|
+
*
|
|
107
|
+
* FAIL-CLOSED byte-sensitive path: a missing resident blob throws
|
|
108
|
+
* `ResidentBlobMissingError` rather than degrading, so a missing resident text blob can
|
|
109
|
+
* never silently leak a `blob:sha256:` ref into provider payloads, UI, or exports.
|
|
110
|
+
* (Contrast the legacy persisted-image warn-and-return resolvers above.)
|
|
111
|
+
*/
|
|
95
112
|
export declare function resolveTextBlobSync(blobStore: BlobStore, data: string, context?: {
|
|
96
113
|
kind?: "text";
|
|
97
114
|
sessionId?: string;
|
|
98
115
|
sessionFile?: string;
|
|
99
116
|
}): string;
|
|
117
|
+
/**
|
|
118
|
+
* FAIL-CLOSED resident variant of {@link resolveImageDataUrlSync}: a missing resident
|
|
119
|
+
* image-data-url blob throws `ResidentBlobMissingError` ("imageUrl") instead of warn-returning,
|
|
120
|
+
* so resident byte-sensitive provider image data can never leak a `blob:sha256:` ref into
|
|
121
|
+
* materialized entries, context, or provider payloads. The warn-and-return `resolveImageDataUrl*`
|
|
122
|
+
* resolvers remain ONLY for legacy persisted-image resume.
|
|
123
|
+
*/
|
|
124
|
+
export declare function resolveResidentImageDataUrlSync(blobStore: BlobStore, data: string, context?: {
|
|
125
|
+
sessionId?: string;
|
|
126
|
+
sessionFile?: string;
|
|
127
|
+
}): string;
|
|
128
|
+
/**
|
|
129
|
+
* FAIL-CLOSED resident variant of {@link resolveImageDataSync}: a missing resident image blob
|
|
130
|
+
* throws `ResidentBlobMissingError` ("imageData") instead of warn-returning a placeholder.
|
|
131
|
+
*/
|
|
132
|
+
export declare function resolveResidentImageDataSync(blobStore: BlobStore, data: string, context?: {
|
|
133
|
+
sessionId?: string;
|
|
134
|
+
sessionFile?: string;
|
|
135
|
+
}): string;
|
|
@@ -18,6 +18,8 @@ interface RalplanHudState extends WorkflowGateHudState {
|
|
|
18
18
|
stage?: string;
|
|
19
19
|
waiting?: string;
|
|
20
20
|
iteration?: number;
|
|
21
|
+
iterationFromIndex?: number;
|
|
22
|
+
stages?: string;
|
|
21
23
|
verdict?: string;
|
|
22
24
|
latestSummary?: string;
|
|
23
25
|
pendingApproval?: boolean;
|
|
@@ -61,6 +63,18 @@ interface TeamHudState extends WorkflowGateHudState {
|
|
|
61
63
|
};
|
|
62
64
|
}
|
|
63
65
|
export declare function buildDeepInterviewHudSummary(state: DeepInterviewHudState): WorkflowHudSummary;
|
|
66
|
+
export interface DeepInterviewHudDeriveOptions {
|
|
67
|
+
phase?: string;
|
|
68
|
+
specStatus?: string;
|
|
69
|
+
updatedAt?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Single source of deep-interview HUD derivation. Reads a complete (normalized)
|
|
73
|
+
* mode-state envelope so recorder, `gjc state write`, reconcile, seed, and handoff
|
|
74
|
+
* all produce identical chips. Topology-aware `target`/`weakest` come from
|
|
75
|
+
* `state.topology`; `legacy_missing` topology omits those chips (no synthetic values).
|
|
76
|
+
*/
|
|
77
|
+
export declare function deriveDeepInterviewHud(payload: Record<string, unknown>, options?: DeepInterviewHudDeriveOptions): WorkflowHudSummary;
|
|
64
78
|
export declare function buildRalplanHudSummary(state: RalplanHudState): WorkflowHudSummary;
|
|
65
79
|
export declare function buildUltragoalHudSummary(state: UltragoalHudState): WorkflowHudSummary;
|
|
66
80
|
export declare function buildTeamHudSummary(state: TeamHudState): WorkflowHudSummary;
|
|
@@ -20,7 +20,7 @@ import * as z from "zod/v4";
|
|
|
20
20
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
21
21
|
import { type Theme } from "../modes/theme/theme";
|
|
22
22
|
import type { ToolSession } from ".";
|
|
23
|
-
declare const askSchema: z.ZodObject<{
|
|
23
|
+
export declare const askSchema: z.ZodObject<{
|
|
24
24
|
questions: z.ZodArray<z.ZodObject<{
|
|
25
25
|
id: z.ZodString;
|
|
26
26
|
question: z.ZodString;
|
|
@@ -29,6 +29,13 @@ declare const askSchema: z.ZodObject<{
|
|
|
29
29
|
}, z.core.$strip>>;
|
|
30
30
|
multi: z.ZodOptional<z.ZodBoolean>;
|
|
31
31
|
recommended: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
deepInterview: z.ZodOptional<z.ZodObject<{
|
|
33
|
+
round_id: z.ZodOptional<z.ZodString>;
|
|
34
|
+
round: z.ZodNumber;
|
|
35
|
+
component: z.ZodString;
|
|
36
|
+
dimension: z.ZodString;
|
|
37
|
+
ambiguity: z.ZodNumber;
|
|
38
|
+
}, z.core.$strip>>;
|
|
32
39
|
}, z.core.$strip>>;
|
|
33
40
|
}, z.core.$strip>;
|
|
34
41
|
export type AskToolInput = z.infer<typeof askSchema>;
|
|
@@ -73,6 +80,13 @@ export declare class AskTool implements AgentTool<typeof askSchema, AskToolDetai
|
|
|
73
80
|
}, z.core.$strip>>;
|
|
74
81
|
multi: z.ZodOptional<z.ZodBoolean>;
|
|
75
82
|
recommended: z.ZodOptional<z.ZodNumber>;
|
|
83
|
+
deepInterview: z.ZodOptional<z.ZodObject<{
|
|
84
|
+
round_id: z.ZodOptional<z.ZodString>;
|
|
85
|
+
round: z.ZodNumber;
|
|
86
|
+
component: z.ZodString;
|
|
87
|
+
dimension: z.ZodString;
|
|
88
|
+
ambiguity: z.ZodNumber;
|
|
89
|
+
}, z.core.$strip>>;
|
|
76
90
|
}, z.core.$strip>>;
|
|
77
91
|
}, z.core.$strip>;
|
|
78
92
|
readonly strict = true;
|
|
@@ -46,6 +46,12 @@ export interface SubagentSnapshot {
|
|
|
46
46
|
progress?: AgentProgress;
|
|
47
47
|
/** True when a live in-session progress producer exists for this subagent. */
|
|
48
48
|
liveProgressAvailable?: boolean;
|
|
49
|
+
/** Model the subagent actually runs on (after any auth fallback). */
|
|
50
|
+
effectiveModel?: string;
|
|
51
|
+
/** Model originally requested via role/preset mapping; differs from effective on fallback. */
|
|
52
|
+
requestedModel?: string;
|
|
53
|
+
/** True when the requested model lacked credentials and fell back to the parent model. */
|
|
54
|
+
modelFellBack?: boolean;
|
|
49
55
|
}
|
|
50
56
|
export interface SubagentToolDetails {
|
|
51
57
|
subagents: SubagentSnapshot[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.1",
|
|
5
5
|
"description": "Gajae Code CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://gaebal-gajae.dev",
|
|
7
7
|
"author": "Yeachan-Heo",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"@agentclientprotocol/sdk": "0.21.0",
|
|
52
52
|
"@babel/parser": "^7.29.3",
|
|
53
53
|
"@mozilla/readability": "^0.6.0",
|
|
54
|
-
"@gajae-code/stats": "0.5.
|
|
55
|
-
"@gajae-code/agent-core": "0.5.
|
|
56
|
-
"@gajae-code/ai": "0.5.
|
|
57
|
-
"@gajae-code/natives": "0.5.
|
|
58
|
-
"@gajae-code/tui": "0.5.
|
|
59
|
-
"@gajae-code/utils": "0.5.
|
|
54
|
+
"@gajae-code/stats": "0.5.1",
|
|
55
|
+
"@gajae-code/agent-core": "0.5.1",
|
|
56
|
+
"@gajae-code/ai": "0.5.1",
|
|
57
|
+
"@gajae-code/natives": "0.5.1",
|
|
58
|
+
"@gajae-code/tui": "0.5.1",
|
|
59
|
+
"@gajae-code/utils": "0.5.1",
|
|
60
60
|
"@puppeteer/browsers": "^2.13.0",
|
|
61
61
|
"@types/turndown": "5.0.6",
|
|
62
62
|
"@xterm/headless": "^6.0.0",
|