@gajae-code/coding-agent 0.1.2 → 0.2.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 +30 -1
- package/dist/types/commands/gjc-runtime-bridge.d.ts +24 -0
- package/dist/types/config/model-registry.d.ts +1 -0
- package/dist/types/config/model-resolver.d.ts +4 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +23 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +40 -1
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +15 -10
- package/dist/types/hooks/skill-state.d.ts +4 -1
- package/dist/types/modes/components/model-selector.d.ts +2 -4
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/sdk.d.ts +2 -4
- package/dist/types/session/agent-session.d.ts +3 -9
- package/dist/types/skill-state/active-state.d.ts +19 -0
- package/dist/types/skill-state/workflow-hud.d.ts +62 -0
- package/package.json +9 -9
- package/src/commands/deep-interview.ts +21 -2
- package/src/commands/gjc-runtime-bridge.ts +161 -15
- package/src/commands/ralplan.ts +21 -2
- package/src/commands/team.ts +54 -3
- package/src/commands/ultragoal.ts +21 -1
- package/src/config/model-registry.ts +4 -0
- package/src/config/model-resolver.ts +5 -1
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +6 -6
- package/src/defaults/gjc/skills/ralplan/SKILL.md +5 -9
- package/src/defaults/gjc/skills/team/SKILL.md +5 -4
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +8 -8
- package/src/gjc-runtime/launch-tmux.ts +73 -2
- package/src/gjc-runtime/team-runtime.ts +365 -35
- package/src/gjc-runtime/ultragoal-guard.ts +43 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +307 -187
- package/src/hooks/skill-state.ts +4 -1
- package/src/main.ts +1 -0
- package/src/modes/components/model-selector.ts +108 -8
- package/src/modes/components/skill-hud/render.ts +35 -8
- package/src/modes/interactive-mode.ts +34 -22
- package/src/prompts/system/system-prompt.md +5 -4
- package/src/sdk.ts +3 -1
- package/src/session/agent-session.ts +15 -3
- package/src/skill-state/active-state.ts +104 -4
- package/src/skill-state/workflow-hud.ts +160 -0
- package/src/tools/image-gen.ts +19 -10
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.2.0] - 2026-05-28
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added scoped GJC tmux profile handling for `gjc --tmux` and `gjc team` sessions without mutating global tmux configuration.
|
|
10
|
+
- Added GJC team integration hardening for worker turn-end integration requests, auto-rebase/auto-merge conflict surfacing, protected checkpoint classification, and leader/worker-visible integration summaries.
|
|
11
|
+
- Added Node 20 release baseline validation to the release/check surface.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Clarified the public workflow contract so `deep-interview` and `ralplan` are invoked through `/skill:<name>`, while `gjc ultragoal` and `gjc team` remain native runtime commands.
|
|
16
|
+
- Updated the README hero image and Discord community invite.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Restored Ultragoal completion receipt export/generation validation and completion gates.
|
|
21
|
+
- Fixed workflow bridge guidance and tests so private compatibility bridge commands are not advertised as public skill-loading paths.
|
|
22
|
+
|
|
23
|
+
## [0.1.3] - 2026-05-28
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Released the current dev branch fixes with refreshed 0.1.3 package metadata.
|
|
28
|
+
|
|
29
|
+
## [0.1.2] - 2026-05-28
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Updated package metadata for the Gajae Code npm publication.
|
|
34
|
+
|
|
5
35
|
### Fixed
|
|
6
36
|
|
|
7
37
|
- Fixed slash-command autocomplete so skill command matches no longer hide built-in fuzzy candidates like `/model` while typing `/mode`.
|
|
@@ -12,7 +42,6 @@
|
|
|
12
42
|
|
|
13
43
|
- Restored `gjc team` multi-worker GJC-team parity orchestration with current-window worker panes, GJC-scoped state/API semantics, and `N:agent-type` launches.
|
|
14
44
|
- Ported GJC team worker-worktree integration parity so `status`/`resume` auto-checkpoint dirty workers, merge or cherry-pick worker commits, cross-rebase idle workers, and record conflicts under `.gjc` integration artifacts.
|
|
15
|
-
- Restored `gjc team` multi-worker OMX-parity orchestration with current-window worker panes, GJC-scoped state/API semantics, and `N:agent-type` launches.
|
|
16
45
|
|
|
17
46
|
### Added
|
|
18
47
|
|
|
@@ -1,6 +1,30 @@
|
|
|
1
|
+
import { type WorkflowHudSummary } from "../skill-state/active-state";
|
|
2
|
+
export declare const WORKFLOW_HUD_PROTOCOL = "workflow-hud-summary-v1";
|
|
1
3
|
export interface GjcRuntimeBridgeResult {
|
|
2
4
|
status: number;
|
|
3
5
|
error?: string;
|
|
4
6
|
}
|
|
7
|
+
export interface WorkflowHudBridgePayload {
|
|
8
|
+
version: 1;
|
|
9
|
+
skill: string;
|
|
10
|
+
phase?: string;
|
|
11
|
+
active?: boolean;
|
|
12
|
+
session_id?: string;
|
|
13
|
+
thread_id?: string;
|
|
14
|
+
turn_id?: string;
|
|
15
|
+
hud: WorkflowHudSummary;
|
|
16
|
+
}
|
|
17
|
+
export interface GjcRuntimeHudBridgeResult extends GjcRuntimeBridgeResult {
|
|
18
|
+
hudPayload?: WorkflowHudBridgePayload;
|
|
19
|
+
}
|
|
20
|
+
export interface GjcRuntimeHudBridgeOptions {
|
|
21
|
+
cwd?: string;
|
|
22
|
+
env?: NodeJS.ProcessEnv;
|
|
23
|
+
sidecarSkill: string;
|
|
24
|
+
onHudPayload?: (payload: WorkflowHudBridgePayload) => Promise<void> | void;
|
|
25
|
+
pollIntervalMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function normalizeWorkflowHudBridgePayload(raw: unknown, expectedSkill: string): WorkflowHudBridgePayload | null;
|
|
5
28
|
export declare function runGjcRuntimeBridge(endpoint: string, args: string[], env?: NodeJS.ProcessEnv): GjcRuntimeBridgeResult;
|
|
29
|
+
export declare function runGjcRuntimeBridgeWithHudSidecar(endpoint: string, args: string[], options: GjcRuntimeHudBridgeOptions): Promise<GjcRuntimeHudBridgeResult>;
|
|
6
30
|
export declare function runBridgedRuntimeEndpoint(endpoint: string, args: string[]): Promise<void>;
|
|
@@ -327,6 +327,7 @@ export declare class ModelRegistry {
|
|
|
327
327
|
* Check if a model is using OAuth credentials (subscription).
|
|
328
328
|
*/
|
|
329
329
|
isUsingOAuth(model: Model<Api>): boolean;
|
|
330
|
+
getSessionCredentialType(provider: string, sessionId?: string): "api_key" | "oauth" | undefined;
|
|
330
331
|
/**
|
|
331
332
|
* Remove custom API/OAuth registrations for a specific extension source.
|
|
332
333
|
*/
|
|
@@ -7,9 +7,12 @@ import { type ModelRegistry, type ModelRole } from "./model-registry";
|
|
|
7
7
|
import type { Settings } from "./settings";
|
|
8
8
|
/** Default model IDs for each known provider */
|
|
9
9
|
export declare const defaultModelPerProvider: Record<KnownProvider, string>;
|
|
10
|
-
export interface
|
|
10
|
+
export interface ScopedModelSelection {
|
|
11
11
|
model: Model<Api>;
|
|
12
12
|
thinkingLevel?: ThinkingLevel;
|
|
13
|
+
explicitThinkingLevel?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ScopedModel extends ScopedModelSelection {
|
|
13
16
|
explicitThinkingLevel: boolean;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
@@ -3,6 +3,8 @@ export declare const GJC_DEFAULT_TMUX_SESSION = "gajae_code";
|
|
|
3
3
|
export declare const GJC_TMUX_LAUNCHED_ENV = "GJC_TMUX_LAUNCHED";
|
|
4
4
|
export declare const GJC_LAUNCH_POLICY_ENV = "GJC_LAUNCH_POLICY";
|
|
5
5
|
export declare const GJC_TMUX_COMMAND_ENV = "GJC_TMUX_COMMAND";
|
|
6
|
+
export declare const GJC_TMUX_PROFILE_ENV = "GJC_TMUX_PROFILE";
|
|
7
|
+
export declare const GJC_TMUX_MOUSE_ENV = "GJC_MOUSE";
|
|
6
8
|
interface TtyState {
|
|
7
9
|
stdin: boolean;
|
|
8
10
|
stdout: boolean;
|
|
@@ -40,6 +42,27 @@ export interface TmuxLaunchPlan {
|
|
|
40
42
|
newSessionArgs: string[];
|
|
41
43
|
attachSessionArgs: string[];
|
|
42
44
|
}
|
|
45
|
+
export interface GjcTmuxProfileCommand {
|
|
46
|
+
description: string;
|
|
47
|
+
args: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface GjcTmuxProfileResult {
|
|
50
|
+
skipped: boolean;
|
|
51
|
+
commands: GjcTmuxProfileCommand[];
|
|
52
|
+
failures: Array<{
|
|
53
|
+
command: GjcTmuxProfileCommand;
|
|
54
|
+
stderr?: string;
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
export interface GjcTmuxProfileContext {
|
|
58
|
+
tmuxCommand: string;
|
|
59
|
+
target: string;
|
|
60
|
+
cwd?: string;
|
|
61
|
+
env?: NodeJS.ProcessEnv;
|
|
62
|
+
spawnSync?: TmuxSpawnSync;
|
|
63
|
+
}
|
|
64
|
+
export declare function buildGjcTmuxProfileCommands(target: string, env?: NodeJS.ProcessEnv): GjcTmuxProfileCommand[];
|
|
65
|
+
export declare function applyGjcTmuxProfile(context: GjcTmuxProfileContext): GjcTmuxProfileResult;
|
|
43
66
|
export declare function buildDefaultTmuxLaunchPlan(context: TmuxLaunchContext): TmuxLaunchPlan | undefined;
|
|
44
67
|
export declare function launchDefaultTmuxIfNeeded(context: TmuxLaunchContext): boolean;
|
|
45
68
|
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { WorkflowHudSummary } from "../skill-state/active-state";
|
|
1
2
|
export type GjcTeamPhase = "starting" | "running" | "complete" | "failed" | "cancelled";
|
|
2
3
|
export type GjcTeamTaskStatus = "pending" | "blocked" | "in_progress" | "completed" | "failed";
|
|
3
4
|
export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
|
|
4
5
|
export declare const GJC_TEAM_DEFAULT_WORKERS = 3;
|
|
5
6
|
export declare const GJC_TEAM_MAX_WORKERS = 20;
|
|
7
|
+
export type GjcTeamWorkerCli = "gjc";
|
|
6
8
|
export interface GjcTeamLeader {
|
|
7
9
|
session_id: string;
|
|
8
10
|
pane_id: string;
|
|
@@ -71,6 +73,7 @@ export interface GjcTeamConfig {
|
|
|
71
73
|
max_workers: number;
|
|
72
74
|
state_root: string;
|
|
73
75
|
worker_command: string;
|
|
76
|
+
worker_cli_plan: GjcTeamWorkerCli[];
|
|
74
77
|
tmux_command: string;
|
|
75
78
|
tmux_session: string;
|
|
76
79
|
tmux_session_name: string;
|
|
@@ -138,7 +141,10 @@ export interface GjcTeamMailboxMessage {
|
|
|
138
141
|
delivered_at?: string;
|
|
139
142
|
notified_at?: string;
|
|
140
143
|
}
|
|
141
|
-
|
|
144
|
+
export declare function resolveGjcTeamWorkerCli(env?: NodeJS.ProcessEnv): GjcTeamWorkerCli;
|
|
145
|
+
export declare function resolveGjcTeamWorkerCliPlan(workerCount: number, env?: NodeJS.ProcessEnv): GjcTeamWorkerCli[];
|
|
146
|
+
export declare function translateGjcWorkerLaunchArgsForCli(workerCli: GjcTeamWorkerCli, args: string[]): string[];
|
|
147
|
+
export interface GjcTeamEvent {
|
|
142
148
|
event_id: string;
|
|
143
149
|
ts: string;
|
|
144
150
|
type: string;
|
|
@@ -159,12 +165,45 @@ interface WorkerHeartbeatFile {
|
|
|
159
165
|
turn_count: number;
|
|
160
166
|
alive: boolean;
|
|
161
167
|
}
|
|
168
|
+
export interface GjcWorkerIntegrationAttemptRequestResult {
|
|
169
|
+
requested: boolean;
|
|
170
|
+
reason: "requested" | "not_worker" | "missing_worktree" | "no_changes" | "deduped" | "git_error";
|
|
171
|
+
worker?: string;
|
|
172
|
+
team_name?: string;
|
|
173
|
+
fingerprint?: string;
|
|
174
|
+
head?: string | null;
|
|
175
|
+
status?: GjcWorkerCheckpointClassification["kind"];
|
|
176
|
+
}
|
|
162
177
|
export declare const GJC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "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", "read-worker-heartbeat", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
|
|
163
178
|
export declare function resolveGjcTeamStateRoot(cwd?: string, env?: NodeJS.ProcessEnv): string;
|
|
164
179
|
export declare function resolveGjcTmuxCommand(env?: NodeJS.ProcessEnv): string;
|
|
165
180
|
export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv): string;
|
|
181
|
+
export type GjcWorkerCheckpointClassification = {
|
|
182
|
+
kind: "clean";
|
|
183
|
+
files: string[];
|
|
184
|
+
} | {
|
|
185
|
+
kind: "eligible";
|
|
186
|
+
files: string[];
|
|
187
|
+
} | {
|
|
188
|
+
kind: "protected_only";
|
|
189
|
+
files: string[];
|
|
190
|
+
} | {
|
|
191
|
+
kind: "conflicted";
|
|
192
|
+
files: string[];
|
|
193
|
+
} | {
|
|
194
|
+
kind: "git_error";
|
|
195
|
+
files: string[];
|
|
196
|
+
detail: string;
|
|
197
|
+
};
|
|
198
|
+
export declare function classifyGjcTeamCheckpointFiles(files: string[]): {
|
|
199
|
+
eligible: string[];
|
|
200
|
+
protected: string[];
|
|
201
|
+
};
|
|
202
|
+
export declare function classifyWorkerCheckpointStatus(cwd: string): GjcWorkerCheckpointClassification;
|
|
166
203
|
export declare function startGjcTeam(options: GjcTeamStartOptions): Promise<GjcTeamSnapshot>;
|
|
167
204
|
export declare function readGjcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
205
|
+
export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcWorkerIntegrationAttemptRequestResult>;
|
|
206
|
+
export declare function buildTeamHudSummary(snapshot: GjcTeamSnapshot, latestEvent?: GjcTeamEvent, latestMessage?: GjcTeamMailboxMessage): Promise<WorkflowHudSummary>;
|
|
168
207
|
export declare function monitorGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
169
208
|
export declare function listGjcTeams(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot[]>;
|
|
170
209
|
export declare function shutdownGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WorkflowHudSummary } from "../skill-state/active-state";
|
|
1
2
|
export type UltragoalGjcGoalMode = "aggregate" | "per-story";
|
|
2
3
|
export type UltragoalGoalStatus = "pending" | "active" | "complete" | "failed" | "blocked" | "review_blocked" | "superseded";
|
|
3
4
|
export interface UltragoalGoal {
|
|
@@ -34,6 +35,7 @@ export interface UltragoalCompletionVerification {
|
|
|
34
35
|
gjcGoalMode: UltragoalGjcGoalMode;
|
|
35
36
|
gjcObjective: string;
|
|
36
37
|
qualityGateHash: string;
|
|
38
|
+
gjcGoalSnapshotHash: string;
|
|
37
39
|
planGeneration: string;
|
|
38
40
|
basis: {
|
|
39
41
|
planHashBeforeCheckpoint: string;
|
|
@@ -77,8 +79,21 @@ interface JsonObject {
|
|
|
77
79
|
export declare function hashStructuredValue(value: unknown): string;
|
|
78
80
|
export declare function getUltragoalPaths(cwd: string): UltragoalPaths;
|
|
79
81
|
export declare function readUltragoalLedger(cwd: string): Promise<UltragoalLedgerEvent[]>;
|
|
82
|
+
export declare function computeUltragoalPlanGeneration(input: {
|
|
83
|
+
plan: UltragoalPlan;
|
|
84
|
+
ledger: readonly UltragoalLedgerEvent[];
|
|
85
|
+
goal: UltragoalGoal;
|
|
86
|
+
receiptKind: UltragoalReceiptKind;
|
|
87
|
+
beforeStatus: UltragoalGoalStatus;
|
|
88
|
+
excludeEventId?: string;
|
|
89
|
+
targetGoalUpdatedAt?: string;
|
|
90
|
+
}): {
|
|
91
|
+
planGeneration: string;
|
|
92
|
+
basis: UltragoalCompletionVerification["basis"];
|
|
93
|
+
};
|
|
80
94
|
export declare function readUltragoalPlan(cwd: string): Promise<UltragoalPlan | null>;
|
|
81
95
|
export declare function getUltragoalStatus(cwd: string): Promise<UltragoalStatusSummary>;
|
|
96
|
+
export declare function buildUltragoalHudSummary(summary: UltragoalStatusSummary, latestLedger?: UltragoalLedgerEvent): WorkflowHudSummary;
|
|
82
97
|
export declare function createUltragoalPlan(input: {
|
|
83
98
|
cwd: string;
|
|
84
99
|
brief: string;
|
|
@@ -92,16 +107,6 @@ export declare function startNextUltragoalGoal(input: {
|
|
|
92
107
|
goal?: UltragoalGoal;
|
|
93
108
|
allComplete: boolean;
|
|
94
109
|
}>;
|
|
95
|
-
export declare function computeUltragoalPlanGeneration(input: {
|
|
96
|
-
plan: UltragoalPlan;
|
|
97
|
-
ledger: readonly UltragoalLedgerEvent[];
|
|
98
|
-
goal: UltragoalGoal;
|
|
99
|
-
receiptKind: UltragoalReceiptKind;
|
|
100
|
-
beforeStatus: UltragoalGoalStatus;
|
|
101
|
-
excludeEventId?: string;
|
|
102
|
-
}): UltragoalCompletionVerification["basis"] & {
|
|
103
|
-
planGeneration: string;
|
|
104
|
-
};
|
|
105
110
|
export declare function checkpointUltragoalGoal(input: {
|
|
106
111
|
cwd: string;
|
|
107
112
|
goalId: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SkillDiscoverySettings } from "../config/skill-settings-defaults";
|
|
2
|
+
import type { SkillActiveEntry as CanonicalSkillActiveEntry, WorkflowHudSummary } from "../skill-state/active-state";
|
|
2
3
|
import { type GjcWorkflowSkill } from "./skill-keywords";
|
|
3
4
|
export declare const GJC_STATE_DIR = ".gjc/state";
|
|
4
5
|
export declare const SKILL_ACTIVE_STATE_FILE = "skill-active-state.json";
|
|
@@ -13,7 +14,7 @@ export interface SkillKeywordMatch {
|
|
|
13
14
|
skill: GjcWorkflowSkill;
|
|
14
15
|
priority: number;
|
|
15
16
|
}
|
|
16
|
-
export interface SkillActiveEntry {
|
|
17
|
+
export interface SkillActiveEntry extends Omit<CanonicalSkillActiveEntry, "skill"> {
|
|
17
18
|
skill: GjcWorkflowSkill;
|
|
18
19
|
phase?: string;
|
|
19
20
|
active?: boolean;
|
|
@@ -22,6 +23,8 @@ export interface SkillActiveEntry {
|
|
|
22
23
|
session_id?: string;
|
|
23
24
|
thread_id?: string;
|
|
24
25
|
turn_id?: string;
|
|
26
|
+
hud?: WorkflowHudSummary;
|
|
27
|
+
stale?: boolean;
|
|
25
28
|
}
|
|
26
29
|
export interface SkillActiveState {
|
|
27
30
|
version: number;
|
|
@@ -2,11 +2,9 @@ import { ThinkingLevel } from "@gajae-code/agent-core";
|
|
|
2
2
|
import { type Model } from "@gajae-code/ai";
|
|
3
3
|
import { Container, Input, type TUI } from "@gajae-code/tui";
|
|
4
4
|
import type { GjcModelAssignmentTargetId, ModelRegistry } from "../../config/model-registry";
|
|
5
|
+
import { type ScopedModelSelection } from "../../config/model-resolver";
|
|
5
6
|
import type { Settings } from "../../config/settings";
|
|
6
|
-
|
|
7
|
-
model: Model;
|
|
8
|
-
thinkingLevel?: ThinkingLevel;
|
|
9
|
-
}
|
|
7
|
+
type ScopedModelItem = ScopedModelSelection;
|
|
10
8
|
/**
|
|
11
9
|
* Component that renders a canonical model selector with provider tabs.
|
|
12
10
|
* - Tab/Arrow Left/Right: Switch between provider tabs
|
|
@@ -132,6 +132,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
|
|
|
132
132
|
cancelPendingSubmission(): boolean;
|
|
133
133
|
markPendingSubmissionStarted(input: SubmittedUserInput): boolean;
|
|
134
134
|
finishPendingSubmission(input: SubmittedUserInput): void;
|
|
135
|
+
updateEditorChrome(): void;
|
|
135
136
|
updateEditorBorderColor(): void;
|
|
136
137
|
updateEditorTopBorder(): void;
|
|
137
138
|
rebuildChatFromMessages(): void;
|
package/dist/types/sdk.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type AgentTelemetryConfig, type ThinkingLevel } from "@gajae-code/agent
|
|
|
2
2
|
import { type Model } from "@gajae-code/ai";
|
|
3
3
|
import { type Rule } from "./capability/rule";
|
|
4
4
|
import { ModelRegistry } from "./config/model-registry";
|
|
5
|
+
import { type ScopedModelSelection } from "./config/model-resolver";
|
|
5
6
|
import { type PromptTemplate } from "./config/prompt-templates";
|
|
6
7
|
import { Settings, type SkillsSettings } from "./config/settings";
|
|
7
8
|
import "./discovery";
|
|
@@ -40,10 +41,7 @@ export interface CreateAgentSessionOptions {
|
|
|
40
41
|
/** Thinking selector. Default: from settings, else unset */
|
|
41
42
|
thinkingLevel?: ThinkingLevel;
|
|
42
43
|
/** Models available for cycling (Ctrl+P in interactive mode) */
|
|
43
|
-
scopedModels?:
|
|
44
|
-
model: Model;
|
|
45
|
-
thinkingLevel?: ThinkingLevel;
|
|
46
|
-
}>;
|
|
44
|
+
scopedModels?: ScopedModelSelection[];
|
|
47
45
|
/** System prompt blocks. Array replaces default, function receives default blocks and returns final blocks. */
|
|
48
46
|
systemPrompt?: string[] | ((defaultPrompt: string[]) => string[]);
|
|
49
47
|
/** Optional provider-facing session identifier for prompt caches and sticky auth selection.
|
|
@@ -18,7 +18,7 @@ import type { AssistantMessage, Effort, ImageContent, Message, MessageAttributio
|
|
|
18
18
|
import { type AsyncJob, type AsyncJobDeliveryState, AsyncJobManager } from "../async";
|
|
19
19
|
import type { Rule } from "../capability/rule";
|
|
20
20
|
import { type ModelRegistry } from "../config/model-registry";
|
|
21
|
-
import { type ResolvedModelRoleValue } from "../config/model-resolver";
|
|
21
|
+
import { type ResolvedModelRoleValue, type ScopedModelSelection } from "../config/model-resolver";
|
|
22
22
|
import { type PromptTemplate } from "../config/prompt-templates";
|
|
23
23
|
import type { Settings, SkillsSettings } from "../config/settings";
|
|
24
24
|
import { RawSseDebugBuffer } from "../debug/raw-sse-buffer";
|
|
@@ -119,10 +119,7 @@ export interface AgentSessionConfig {
|
|
|
119
119
|
sessionManager: SessionManager;
|
|
120
120
|
settings: Settings;
|
|
121
121
|
/** Models to cycle through with Ctrl+P (from --models flag) */
|
|
122
|
-
scopedModels?:
|
|
123
|
-
model: Model;
|
|
124
|
-
thinkingLevel?: ThinkingLevel;
|
|
125
|
-
}>;
|
|
122
|
+
scopedModels?: ScopedModelSelection[];
|
|
126
123
|
/** Initial session thinking selector. */
|
|
127
124
|
thinkingLevel?: ThinkingLevel;
|
|
128
125
|
/** Prompt templates for expansion */
|
|
@@ -446,10 +443,7 @@ export declare class AgentSession {
|
|
|
446
443
|
/** Current session display name, if set */
|
|
447
444
|
get sessionName(): string | undefined;
|
|
448
445
|
/** Scoped models for cycling (from --models flag) */
|
|
449
|
-
get scopedModels(): ReadonlyArray<
|
|
450
|
-
model: Model;
|
|
451
|
-
thinkingLevel?: ThinkingLevel;
|
|
452
|
-
}>;
|
|
446
|
+
get scopedModels(): ReadonlyArray<ScopedModelSelection>;
|
|
453
447
|
/** Prompt templates */
|
|
454
448
|
getPlanModeState(): PlanModeState | undefined;
|
|
455
449
|
setPlanModeState(state: PlanModeState | undefined): void;
|
|
@@ -2,6 +2,21 @@ export declare const SKILL_ACTIVE_STATE_FILE = "skill-active-state.json";
|
|
|
2
2
|
export declare const SKILL_ACTIVE_STALE_MS: number;
|
|
3
3
|
export declare const CANONICAL_GJC_WORKFLOW_SKILLS: readonly ["deep-interview", "ralplan", "ultragoal", "team"];
|
|
4
4
|
export type CanonicalGjcWorkflowSkill = (typeof CANONICAL_GJC_WORKFLOW_SKILLS)[number];
|
|
5
|
+
export type WorkflowHudSeverity = "info" | "warning" | "blocked" | "error" | "success";
|
|
6
|
+
export interface WorkflowHudChip {
|
|
7
|
+
label: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
priority?: number;
|
|
10
|
+
severity?: WorkflowHudSeverity;
|
|
11
|
+
}
|
|
12
|
+
export interface WorkflowHudSummary {
|
|
13
|
+
version: 1;
|
|
14
|
+
summary?: string;
|
|
15
|
+
chips?: WorkflowHudChip[];
|
|
16
|
+
details?: WorkflowHudChip[];
|
|
17
|
+
severity?: WorkflowHudSeverity;
|
|
18
|
+
updated_at?: string;
|
|
19
|
+
}
|
|
5
20
|
export interface SkillActiveEntry {
|
|
6
21
|
skill: string;
|
|
7
22
|
phase?: string;
|
|
@@ -11,6 +26,8 @@ export interface SkillActiveEntry {
|
|
|
11
26
|
session_id?: string;
|
|
12
27
|
thread_id?: string;
|
|
13
28
|
turn_id?: string;
|
|
29
|
+
hud?: WorkflowHudSummary;
|
|
30
|
+
stale?: boolean;
|
|
14
31
|
}
|
|
15
32
|
export interface SkillActiveState {
|
|
16
33
|
version?: number;
|
|
@@ -41,7 +58,9 @@ export interface SyncSkillActiveStateOptions {
|
|
|
41
58
|
turnId?: string;
|
|
42
59
|
nowIso?: string;
|
|
43
60
|
source?: string;
|
|
61
|
+
hud?: WorkflowHudSummary;
|
|
44
62
|
}
|
|
63
|
+
export declare function normalizeWorkflowHudSummary(raw: unknown): WorkflowHudSummary | undefined;
|
|
45
64
|
export declare function isCanonicalGjcWorkflowSkill(skill: string): skill is CanonicalGjcWorkflowSkill;
|
|
46
65
|
export declare function listActiveSkills(raw: unknown): SkillActiveEntry[];
|
|
47
66
|
export declare function normalizeSkillActiveState(raw: unknown): SkillActiveState | null;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { WorkflowHudSummary } from "./active-state";
|
|
2
|
+
interface DeepInterviewHudState {
|
|
3
|
+
phase?: string;
|
|
4
|
+
ambiguity?: number;
|
|
5
|
+
threshold?: number;
|
|
6
|
+
roundCount?: number;
|
|
7
|
+
targetComponent?: string;
|
|
8
|
+
weakestDimension?: string;
|
|
9
|
+
specStatus?: string;
|
|
10
|
+
updatedAt?: string;
|
|
11
|
+
}
|
|
12
|
+
interface RalplanHudState {
|
|
13
|
+
stage?: string;
|
|
14
|
+
waiting?: string;
|
|
15
|
+
iteration?: number;
|
|
16
|
+
verdict?: string;
|
|
17
|
+
latestSummary?: string;
|
|
18
|
+
pendingApproval?: boolean;
|
|
19
|
+
updatedAt?: string;
|
|
20
|
+
}
|
|
21
|
+
interface UltragoalLikeGoal {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
status: string;
|
|
25
|
+
}
|
|
26
|
+
interface UltragoalHudState {
|
|
27
|
+
status: string;
|
|
28
|
+
currentGoal?: UltragoalLikeGoal;
|
|
29
|
+
counts: Record<string, number>;
|
|
30
|
+
goals: UltragoalLikeGoal[];
|
|
31
|
+
latestLedgerEvent?: {
|
|
32
|
+
event?: string;
|
|
33
|
+
goalId?: string;
|
|
34
|
+
timestamp?: string;
|
|
35
|
+
};
|
|
36
|
+
updatedAt?: string;
|
|
37
|
+
}
|
|
38
|
+
interface TeamHudWorker {
|
|
39
|
+
id: string;
|
|
40
|
+
status?: string;
|
|
41
|
+
}
|
|
42
|
+
interface TeamHudState {
|
|
43
|
+
phase: string;
|
|
44
|
+
task_total: number;
|
|
45
|
+
task_counts: Record<string, number>;
|
|
46
|
+
workers: TeamHudWorker[];
|
|
47
|
+
updated_at?: string;
|
|
48
|
+
latestEvent?: {
|
|
49
|
+
type?: string;
|
|
50
|
+
worker?: string;
|
|
51
|
+
message?: string;
|
|
52
|
+
};
|
|
53
|
+
latestMessage?: {
|
|
54
|
+
from_worker?: string;
|
|
55
|
+
body?: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export declare function buildDeepInterviewHudSummary(state: DeepInterviewHudState): WorkflowHudSummary;
|
|
59
|
+
export declare function buildRalplanHudSummary(state: RalplanHudState): WorkflowHudSummary;
|
|
60
|
+
export declare function buildUltragoalHudSummary(state: UltragoalHudState): WorkflowHudSummary;
|
|
61
|
+
export declare function buildTeamHudSummary(state: TeamHudState): WorkflowHudSummary;
|
|
62
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "Gajae Code CLI with read, bash, edit, write tools and session management",
|
|
6
|
-
"homepage": "https://gajae
|
|
7
|
-
"author": "
|
|
6
|
+
"homepage": "https://gaebal-gajae.dev",
|
|
7
|
+
"author": "Yeachan-Heo",
|
|
8
8
|
"contributors": [
|
|
9
9
|
"Mario Zechner"
|
|
10
10
|
],
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
"@agentclientprotocol/sdk": "0.21.0",
|
|
49
49
|
"@babel/parser": "^7.29.3",
|
|
50
50
|
"@mozilla/readability": "^0.6.0",
|
|
51
|
-
"@gajae-code/stats": "0.
|
|
52
|
-
"@gajae-code/agent-core": "0.
|
|
53
|
-
"@gajae-code/ai": "0.
|
|
54
|
-
"@gajae-code/natives": "0.
|
|
55
|
-
"@gajae-code/tui": "0.
|
|
56
|
-
"@gajae-code/utils": "0.
|
|
51
|
+
"@gajae-code/stats": "0.2.0",
|
|
52
|
+
"@gajae-code/agent-core": "0.2.0",
|
|
53
|
+
"@gajae-code/ai": "0.2.0",
|
|
54
|
+
"@gajae-code/natives": "0.2.0",
|
|
55
|
+
"@gajae-code/tui": "0.2.0",
|
|
56
|
+
"@gajae-code/utils": "0.2.0",
|
|
57
57
|
"@puppeteer/browsers": "^2.13.0",
|
|
58
58
|
"@types/turndown": "5.0.6",
|
|
59
59
|
"@xterm/headless": "^6.0.0",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "@gajae-code/utils/cli";
|
|
2
|
-
import {
|
|
2
|
+
import { syncSkillActiveState } from "../skill-state/active-state";
|
|
3
|
+
import { runGjcRuntimeBridgeWithHudSidecar } from "./gjc-runtime-bridge";
|
|
3
4
|
|
|
4
5
|
export default class DeepInterview extends Command {
|
|
5
6
|
static description = "Run private GJC deep-interview workflow commands";
|
|
@@ -7,6 +8,24 @@ export default class DeepInterview extends Command {
|
|
|
7
8
|
static examples = ["$ gjc deep-interview --help"];
|
|
8
9
|
|
|
9
10
|
async run(): Promise<void> {
|
|
10
|
-
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
const result = await runGjcRuntimeBridgeWithHudSidecar("deep-interview", this.argv, {
|
|
13
|
+
cwd,
|
|
14
|
+
sidecarSkill: "deep-interview",
|
|
15
|
+
onHudPayload: payload =>
|
|
16
|
+
syncSkillActiveState({
|
|
17
|
+
cwd,
|
|
18
|
+
skill: "deep-interview",
|
|
19
|
+
active: payload.active ?? true,
|
|
20
|
+
phase: payload.phase,
|
|
21
|
+
sessionId: payload.session_id,
|
|
22
|
+
threadId: payload.thread_id,
|
|
23
|
+
turnId: payload.turn_id,
|
|
24
|
+
hud: payload.hud,
|
|
25
|
+
source: "gjc-runtime-bridge",
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
if (result.error) process.stderr.write(`${result.error}\n`);
|
|
29
|
+
process.exitCode = result.status;
|
|
11
30
|
}
|
|
12
31
|
}
|