@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.
Files changed (41) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/dist/types/commands/gjc-runtime-bridge.d.ts +24 -0
  3. package/dist/types/config/model-registry.d.ts +1 -0
  4. package/dist/types/config/model-resolver.d.ts +4 -1
  5. package/dist/types/gjc-runtime/launch-tmux.d.ts +23 -0
  6. package/dist/types/gjc-runtime/team-runtime.d.ts +40 -1
  7. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +15 -10
  8. package/dist/types/hooks/skill-state.d.ts +4 -1
  9. package/dist/types/modes/components/model-selector.d.ts +2 -4
  10. package/dist/types/modes/interactive-mode.d.ts +1 -0
  11. package/dist/types/sdk.d.ts +2 -4
  12. package/dist/types/session/agent-session.d.ts +3 -9
  13. package/dist/types/skill-state/active-state.d.ts +19 -0
  14. package/dist/types/skill-state/workflow-hud.d.ts +62 -0
  15. package/package.json +9 -9
  16. package/src/commands/deep-interview.ts +21 -2
  17. package/src/commands/gjc-runtime-bridge.ts +161 -15
  18. package/src/commands/ralplan.ts +21 -2
  19. package/src/commands/team.ts +54 -3
  20. package/src/commands/ultragoal.ts +21 -1
  21. package/src/config/model-registry.ts +4 -0
  22. package/src/config/model-resolver.ts +5 -1
  23. package/src/defaults/gjc/skills/deep-interview/SKILL.md +6 -6
  24. package/src/defaults/gjc/skills/ralplan/SKILL.md +5 -9
  25. package/src/defaults/gjc/skills/team/SKILL.md +5 -4
  26. package/src/defaults/gjc/skills/ultragoal/SKILL.md +8 -8
  27. package/src/gjc-runtime/launch-tmux.ts +73 -2
  28. package/src/gjc-runtime/team-runtime.ts +365 -35
  29. package/src/gjc-runtime/ultragoal-guard.ts +43 -1
  30. package/src/gjc-runtime/ultragoal-runtime.ts +307 -187
  31. package/src/hooks/skill-state.ts +4 -1
  32. package/src/main.ts +1 -0
  33. package/src/modes/components/model-selector.ts +108 -8
  34. package/src/modes/components/skill-hud/render.ts +35 -8
  35. package/src/modes/interactive-mode.ts +34 -22
  36. package/src/prompts/system/system-prompt.md +5 -4
  37. package/src/sdk.ts +3 -1
  38. package/src/session/agent-session.ts +15 -3
  39. package/src/skill-state/active-state.ts +104 -4
  40. package/src/skill-state/workflow-hud.ts +160 -0
  41. 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 ScopedModel {
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
- interface GjcTeamEvent {
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
- interface ScopedModelItem {
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;
@@ -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?: Array<{
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?: Array<{
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.1.2",
4
+ "version": "0.2.0",
5
5
  "description": "Gajae Code CLI with read, bash, edit, write tools and session management",
6
- "homepage": "https://gajae-code.dev",
7
- "author": "Can Boluk",
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.1.2",
52
- "@gajae-code/agent-core": "0.1.2",
53
- "@gajae-code/ai": "0.1.2",
54
- "@gajae-code/natives": "0.1.2",
55
- "@gajae-code/tui": "0.1.2",
56
- "@gajae-code/utils": "0.1.2",
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 { runBridgedRuntimeEndpoint } from "./gjc-runtime-bridge";
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
- await runBridgedRuntimeEndpoint("deep-interview", this.argv);
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
  }