@ginkoai/cli 1.6.1 → 1.7.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/README.md +34 -0
- package/dist/commands/agent/agent-client.d.ts +150 -0
- package/dist/commands/agent/agent-client.d.ts.map +1 -0
- package/dist/commands/agent/agent-client.js +170 -0
- package/dist/commands/agent/agent-client.js.map +1 -0
- package/dist/commands/agent/index.d.ts +22 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +121 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/list.d.ts +22 -0
- package/dist/commands/agent/list.d.ts.map +1 -0
- package/dist/commands/agent/list.js +119 -0
- package/dist/commands/agent/list.js.map +1 -0
- package/dist/commands/agent/register.d.ts +21 -0
- package/dist/commands/agent/register.d.ts.map +1 -0
- package/dist/commands/agent/register.js +97 -0
- package/dist/commands/agent/register.js.map +1 -0
- package/dist/commands/agent/status.d.ts +19 -0
- package/dist/commands/agent/status.d.ts.map +1 -0
- package/dist/commands/agent/status.js +271 -0
- package/dist/commands/agent/status.js.map +1 -0
- package/dist/commands/agent/work.d.ts +22 -0
- package/dist/commands/agent/work.d.ts.map +1 -0
- package/dist/commands/agent/work.js +459 -0
- package/dist/commands/agent/work.js.map +1 -0
- package/dist/commands/checkpoint/create.d.ts +27 -0
- package/dist/commands/checkpoint/create.d.ts.map +1 -0
- package/dist/commands/checkpoint/create.js +82 -0
- package/dist/commands/checkpoint/create.js.map +1 -0
- package/dist/commands/checkpoint/index.d.ts +23 -0
- package/dist/commands/checkpoint/index.d.ts.map +1 -0
- package/dist/commands/checkpoint/index.js +91 -0
- package/dist/commands/checkpoint/index.js.map +1 -0
- package/dist/commands/checkpoint/list.d.ts +27 -0
- package/dist/commands/checkpoint/list.d.ts.map +1 -0
- package/dist/commands/checkpoint/list.js +115 -0
- package/dist/commands/checkpoint/list.js.map +1 -0
- package/dist/commands/checkpoint/show.d.ts +23 -0
- package/dist/commands/checkpoint/show.d.ts.map +1 -0
- package/dist/commands/checkpoint/show.js +102 -0
- package/dist/commands/checkpoint/show.js.map +1 -0
- package/dist/commands/dlq.d.ts +24 -0
- package/dist/commands/dlq.d.ts.map +1 -0
- package/dist/commands/dlq.js +172 -0
- package/dist/commands/dlq.js.map +1 -0
- package/dist/commands/epic.d.ts +29 -0
- package/dist/commands/epic.d.ts.map +1 -0
- package/dist/commands/epic.js +322 -0
- package/dist/commands/epic.js.map +1 -0
- package/dist/commands/escalation/create.d.ts +22 -0
- package/dist/commands/escalation/create.d.ts.map +1 -0
- package/dist/commands/escalation/create.js +122 -0
- package/dist/commands/escalation/create.js.map +1 -0
- package/dist/commands/escalation/escalation-client.d.ts +101 -0
- package/dist/commands/escalation/escalation-client.d.ts.map +1 -0
- package/dist/commands/escalation/escalation-client.js +129 -0
- package/dist/commands/escalation/escalation-client.js.map +1 -0
- package/dist/commands/escalation/index.d.ts +22 -0
- package/dist/commands/escalation/index.d.ts.map +1 -0
- package/dist/commands/escalation/index.js +94 -0
- package/dist/commands/escalation/index.js.map +1 -0
- package/dist/commands/escalation/list.d.ts +24 -0
- package/dist/commands/escalation/list.d.ts.map +1 -0
- package/dist/commands/escalation/list.js +170 -0
- package/dist/commands/escalation/list.js.map +1 -0
- package/dist/commands/escalation/resolve.d.ts +20 -0
- package/dist/commands/escalation/resolve.d.ts.map +1 -0
- package/dist/commands/escalation/resolve.js +102 -0
- package/dist/commands/escalation/resolve.js.map +1 -0
- package/dist/commands/graph/api-client.d.ts +222 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +82 -0
- package/dist/commands/graph/api-client.js.map +1 -1
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +9 -1
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +110 -16
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/notifications/history.d.ts +21 -0
- package/dist/commands/notifications/history.d.ts.map +1 -0
- package/dist/commands/notifications/history.js +160 -0
- package/dist/commands/notifications/history.js.map +1 -0
- package/dist/commands/notifications/index.d.ts +22 -0
- package/dist/commands/notifications/index.d.ts.map +1 -0
- package/dist/commands/notifications/index.js +87 -0
- package/dist/commands/notifications/index.js.map +1 -0
- package/dist/commands/notifications/list.d.ts +19 -0
- package/dist/commands/notifications/list.d.ts.map +1 -0
- package/dist/commands/notifications/list.js +132 -0
- package/dist/commands/notifications/list.js.map +1 -0
- package/dist/commands/notifications/test.d.ts +19 -0
- package/dist/commands/notifications/test.d.ts.map +1 -0
- package/dist/commands/notifications/test.js +217 -0
- package/dist/commands/notifications/test.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +25 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +858 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/sprint/deps.d.ts +29 -0
- package/dist/commands/sprint/deps.d.ts.map +1 -0
- package/dist/commands/sprint/deps.js +269 -0
- package/dist/commands/sprint/deps.js.map +1 -0
- package/dist/commands/sprint/index.d.ts +10 -5
- package/dist/commands/sprint/index.d.ts.map +1 -1
- package/dist/commands/sprint/index.js +26 -5
- package/dist/commands/sprint/index.js.map +1 -1
- package/dist/commands/start/index.d.ts.map +1 -1
- package/dist/commands/start/index.js +6 -0
- package/dist/commands/start/index.js.map +1 -1
- package/dist/commands/start/start-reflection.d.ts +11 -0
- package/dist/commands/start/start-reflection.d.ts.map +1 -1
- package/dist/commands/start/start-reflection.js +150 -12
- package/dist/commands/start/start-reflection.js.map +1 -1
- package/dist/commands/verify.d.ts +17 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +232 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/session-log-manager.d.ts +1 -1
- package/dist/core/session-log-manager.d.ts.map +1 -1
- package/dist/core/session-log-manager.js +12 -3
- package/dist/core/session-log-manager.js.map +1 -1
- package/dist/index.js +98 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/__tests__/task-timeout.test.d.ts +12 -0
- package/dist/lib/__tests__/task-timeout.test.d.ts.map +1 -0
- package/dist/lib/__tests__/task-timeout.test.js +278 -0
- package/dist/lib/__tests__/task-timeout.test.js.map +1 -0
- package/dist/lib/agent-heartbeat.d.ts +68 -0
- package/dist/lib/agent-heartbeat.d.ts.map +1 -0
- package/dist/lib/agent-heartbeat.js +117 -0
- package/dist/lib/agent-heartbeat.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +85 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/checkpoint.js +323 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/context-metrics.d.ts +230 -0
- package/dist/lib/context-metrics.d.ts.map +1 -0
- package/dist/lib/context-metrics.js +372 -0
- package/dist/lib/context-metrics.js.map +1 -0
- package/dist/lib/dead-letter-queue.d.ts +108 -0
- package/dist/lib/dead-letter-queue.d.ts.map +1 -0
- package/dist/lib/dead-letter-queue.js +378 -0
- package/dist/lib/dead-letter-queue.js.map +1 -0
- package/dist/lib/event-logger.d.ts +9 -1
- package/dist/lib/event-logger.d.ts.map +1 -1
- package/dist/lib/event-logger.js +45 -3
- package/dist/lib/event-logger.js.map +1 -1
- package/dist/lib/event-queue.d.ts.map +1 -1
- package/dist/lib/event-queue.js +13 -2
- package/dist/lib/event-queue.js.map +1 -1
- package/dist/lib/examples/timeout-demo.d.ts +13 -0
- package/dist/lib/examples/timeout-demo.d.ts.map +1 -0
- package/dist/lib/examples/timeout-demo.js +102 -0
- package/dist/lib/examples/timeout-demo.js.map +1 -0
- package/dist/lib/examples/timeout-integration-example.d.ts +17 -0
- package/dist/lib/examples/timeout-integration-example.d.ts.map +1 -0
- package/dist/lib/examples/timeout-integration-example.js +223 -0
- package/dist/lib/examples/timeout-integration-example.js.map +1 -0
- package/dist/lib/notification-hooks.d.ts +103 -0
- package/dist/lib/notification-hooks.d.ts.map +1 -0
- package/dist/lib/notification-hooks.js +223 -0
- package/dist/lib/notification-hooks.js.map +1 -0
- package/dist/lib/notifications/discord.d.ts +20 -0
- package/dist/lib/notifications/discord.d.ts.map +1 -0
- package/dist/lib/notifications/discord.js +140 -0
- package/dist/lib/notifications/discord.js.map +1 -0
- package/dist/lib/notifications/index.d.ts +66 -0
- package/dist/lib/notifications/index.d.ts.map +1 -0
- package/dist/lib/notifications/index.js +120 -0
- package/dist/lib/notifications/index.js.map +1 -0
- package/dist/lib/notifications/slack.d.ts +20 -0
- package/dist/lib/notifications/slack.d.ts.map +1 -0
- package/dist/lib/notifications/slack.js +186 -0
- package/dist/lib/notifications/slack.js.map +1 -0
- package/dist/lib/notifications/teams.d.ts +20 -0
- package/dist/lib/notifications/teams.d.ts.map +1 -0
- package/dist/lib/notifications/teams.js +146 -0
- package/dist/lib/notifications/teams.js.map +1 -0
- package/dist/lib/notifications/webhook.d.ts +23 -0
- package/dist/lib/notifications/webhook.d.ts.map +1 -0
- package/dist/lib/notifications/webhook.js +65 -0
- package/dist/lib/notifications/webhook.js.map +1 -0
- package/dist/lib/orchestrator-state.d.ts +194 -0
- package/dist/lib/orchestrator-state.d.ts.map +1 -0
- package/dist/lib/orchestrator-state.js +332 -0
- package/dist/lib/orchestrator-state.js.map +1 -0
- package/dist/lib/output-formatter.d.ts +25 -1
- package/dist/lib/output-formatter.d.ts.map +1 -1
- package/dist/lib/output-formatter.js +37 -17
- package/dist/lib/output-formatter.js.map +1 -1
- package/dist/lib/realtime-cursor.d.ts +107 -0
- package/dist/lib/realtime-cursor.d.ts.map +1 -0
- package/dist/lib/realtime-cursor.js +260 -0
- package/dist/lib/realtime-cursor.js.map +1 -0
- package/dist/lib/rollback.d.ts +86 -0
- package/dist/lib/rollback.d.ts.map +1 -0
- package/dist/lib/rollback.js +405 -0
- package/dist/lib/rollback.js.map +1 -0
- package/dist/lib/sprint-loader.d.ts +41 -2
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +335 -9
- package/dist/lib/sprint-loader.js.map +1 -1
- package/dist/lib/stale-agent-detector.d.ts +102 -0
- package/dist/lib/stale-agent-detector.d.ts.map +1 -0
- package/dist/lib/stale-agent-detector.js +156 -0
- package/dist/lib/stale-agent-detector.js.map +1 -0
- package/dist/lib/task-dependencies.d.ts +143 -0
- package/dist/lib/task-dependencies.d.ts.map +1 -0
- package/dist/lib/task-dependencies.js +357 -0
- package/dist/lib/task-dependencies.js.map +1 -0
- package/dist/lib/task-timeout.d.ts +153 -0
- package/dist/lib/task-timeout.d.ts.map +1 -0
- package/dist/lib/task-timeout.js +505 -0
- package/dist/lib/task-timeout.js.map +1 -0
- package/dist/lib/verification/build-check.d.ts +55 -0
- package/dist/lib/verification/build-check.d.ts.map +1 -0
- package/dist/lib/verification/build-check.js +111 -0
- package/dist/lib/verification/build-check.js.map +1 -0
- package/dist/lib/verification/index.d.ts +19 -0
- package/dist/lib/verification/index.d.ts.map +1 -0
- package/dist/lib/verification/index.js +17 -0
- package/dist/lib/verification/index.js.map +1 -0
- package/dist/lib/verification/lint-check.d.ts +34 -0
- package/dist/lib/verification/lint-check.d.ts.map +1 -0
- package/dist/lib/verification/lint-check.js +215 -0
- package/dist/lib/verification/lint-check.js.map +1 -0
- package/dist/lib/verification/test-runner.d.ts +50 -0
- package/dist/lib/verification/test-runner.d.ts.map +1 -0
- package/dist/lib/verification/test-runner.js +225 -0
- package/dist/lib/verification/test-runner.js.map +1 -0
- package/dist/templates/ai-instructions-template.d.ts +3 -2
- package/dist/templates/ai-instructions-template.d.ts.map +1 -1
- package/dist/templates/ai-instructions-template.js +104 -2
- package/dist/templates/ai-instructions-template.js.map +1 -1
- package/dist/templates/epic-template.md +319 -0
- package/dist/utils/command-helpers.d.ts +10 -0
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +59 -1
- package/dist/utils/command-helpers.js.map +1 -1
- package/dist/utils/pattern-confidence.d.ts +82 -0
- package/dist/utils/pattern-confidence.d.ts.map +1 -0
- package/dist/utils/pattern-confidence.js +172 -0
- package/dist/utils/pattern-confidence.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,6 +33,19 @@ ginko status
|
|
|
33
33
|
- `ginko start [sessionId]` - Start or resume a session
|
|
34
34
|
- `ginko handoff [message]` - Create a session handoff
|
|
35
35
|
- `ginko status` - Show current session status
|
|
36
|
+
- `ginko log [description]` - Log events to session (ADR-033 defensive logging)
|
|
37
|
+
|
|
38
|
+
### Planning & Organization
|
|
39
|
+
- `ginko charter` - Create and manage project charter (AI-assisted)
|
|
40
|
+
- Default: Output template for AI-mediated conversation
|
|
41
|
+
- `--view` - View existing charter
|
|
42
|
+
- `--edit` - Edit charter conversationally
|
|
43
|
+
- `--no-ai` - Interactive CLI mode
|
|
44
|
+
- `ginko epic` - Create and manage epics with sprint breakdown (AI-assisted)
|
|
45
|
+
- Default: Output template for AI-mediated conversation
|
|
46
|
+
- `--list` - List existing epics
|
|
47
|
+
- `--view` - View epic details with sprint progress
|
|
48
|
+
- `--sync` - Sync epic to graph database
|
|
36
49
|
|
|
37
50
|
### Context & Configuration
|
|
38
51
|
- `ginko context` - Manage session context
|
|
@@ -180,6 +193,27 @@ ginko context --show # View tracked files
|
|
|
180
193
|
ginko compact # Clean up old context
|
|
181
194
|
```
|
|
182
195
|
|
|
196
|
+
### Planning with Epics
|
|
197
|
+
```bash
|
|
198
|
+
ginko epic # AI guides epic creation conversation
|
|
199
|
+
# AI asks about goals, success criteria, scope, sprints
|
|
200
|
+
# Creates docs/sprints/EPIC-XXX-name.md and sprint files
|
|
201
|
+
|
|
202
|
+
ginko epic --list # List all epics
|
|
203
|
+
ginko epic --view # View epic with sprint progress
|
|
204
|
+
ginko epic --sync # Sync to graph database
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Project Charter
|
|
208
|
+
```bash
|
|
209
|
+
ginko charter # AI guides charter conversation
|
|
210
|
+
# AI asks about purpose, users, success criteria, scope
|
|
211
|
+
# Creates docs/PROJECT-CHARTER.md
|
|
212
|
+
|
|
213
|
+
ginko charter --view # View existing charter
|
|
214
|
+
ginko charter --edit # Refine charter conversationally
|
|
215
|
+
```
|
|
216
|
+
|
|
183
217
|
## Future Features
|
|
184
218
|
|
|
185
219
|
### Persistent Context Modules (Coming Soon)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [agent, api, client, epic-004, multi-agent]
|
|
6
|
+
* @related: [register.ts, list.ts, status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [auth-storage]
|
|
10
|
+
*/
|
|
11
|
+
interface RegisterAgentRequest {
|
|
12
|
+
name: string;
|
|
13
|
+
capabilities: string[];
|
|
14
|
+
status?: 'active' | 'idle' | 'busy' | 'offline';
|
|
15
|
+
metadata?: Record<string, any>;
|
|
16
|
+
}
|
|
17
|
+
interface RegisterAgentResponse {
|
|
18
|
+
agentId: string;
|
|
19
|
+
name: string;
|
|
20
|
+
capabilities: string[];
|
|
21
|
+
status: string;
|
|
22
|
+
organizationId: string;
|
|
23
|
+
createdAt: string;
|
|
24
|
+
}
|
|
25
|
+
interface ListAgentsRequest {
|
|
26
|
+
status?: string;
|
|
27
|
+
capability?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
offset?: number;
|
|
30
|
+
}
|
|
31
|
+
interface ListAgentsResponse {
|
|
32
|
+
agents: Array<{
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
capabilities: string[];
|
|
36
|
+
status: string;
|
|
37
|
+
organizationId: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
updatedAt: string;
|
|
40
|
+
metadata?: Record<string, any>;
|
|
41
|
+
}>;
|
|
42
|
+
total: number;
|
|
43
|
+
limit: number;
|
|
44
|
+
offset: number;
|
|
45
|
+
}
|
|
46
|
+
interface AvailableTask {
|
|
47
|
+
id: string;
|
|
48
|
+
title: string;
|
|
49
|
+
description: string;
|
|
50
|
+
effort: string;
|
|
51
|
+
priority: number;
|
|
52
|
+
requiredCapabilities: string[];
|
|
53
|
+
sprintId: string;
|
|
54
|
+
}
|
|
55
|
+
interface AvailableTasksResponse {
|
|
56
|
+
tasks: AvailableTask[];
|
|
57
|
+
total: number;
|
|
58
|
+
}
|
|
59
|
+
interface ClaimTaskResponse {
|
|
60
|
+
task: {
|
|
61
|
+
id: string;
|
|
62
|
+
status: string;
|
|
63
|
+
claimedAt: string;
|
|
64
|
+
};
|
|
65
|
+
agent: {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
status: string;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
interface ReleaseTaskResponse {
|
|
72
|
+
success: boolean;
|
|
73
|
+
taskId: string;
|
|
74
|
+
status: string;
|
|
75
|
+
agentId: string;
|
|
76
|
+
releasedAt: string;
|
|
77
|
+
}
|
|
78
|
+
interface TaskContextResponse {
|
|
79
|
+
files: string[];
|
|
80
|
+
acceptanceCriteria: Array<{
|
|
81
|
+
id: string;
|
|
82
|
+
description: string;
|
|
83
|
+
verifiable: boolean;
|
|
84
|
+
}>;
|
|
85
|
+
patterns: Array<{
|
|
86
|
+
id: string;
|
|
87
|
+
name: string;
|
|
88
|
+
confidence: string;
|
|
89
|
+
}>;
|
|
90
|
+
gotchas: Array<{
|
|
91
|
+
id: string;
|
|
92
|
+
description: string;
|
|
93
|
+
severity: string;
|
|
94
|
+
}>;
|
|
95
|
+
constraints: Array<{
|
|
96
|
+
id: string;
|
|
97
|
+
type: string;
|
|
98
|
+
description: string;
|
|
99
|
+
}>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Agent API client
|
|
103
|
+
*/
|
|
104
|
+
export declare class AgentClient {
|
|
105
|
+
private static apiUrl;
|
|
106
|
+
/**
|
|
107
|
+
* Check if user is authenticated
|
|
108
|
+
*/
|
|
109
|
+
private static requireAuth;
|
|
110
|
+
/**
|
|
111
|
+
* Make authenticated API request
|
|
112
|
+
*/
|
|
113
|
+
private static request;
|
|
114
|
+
/**
|
|
115
|
+
* Register a new agent
|
|
116
|
+
*/
|
|
117
|
+
static register(data: RegisterAgentRequest): Promise<RegisterAgentResponse>;
|
|
118
|
+
/**
|
|
119
|
+
* List agents with optional filtering
|
|
120
|
+
*/
|
|
121
|
+
static list(params?: ListAgentsRequest): Promise<ListAgentsResponse>;
|
|
122
|
+
/**
|
|
123
|
+
* Get available tasks that match agent capabilities
|
|
124
|
+
* @param graphId - Graph namespace ID
|
|
125
|
+
* @param capabilities - Agent capabilities to match
|
|
126
|
+
* @param limit - Max tasks to return
|
|
127
|
+
*/
|
|
128
|
+
static getAvailableTasks(graphId: string, capabilities?: string[], limit?: number): Promise<AvailableTasksResponse>;
|
|
129
|
+
/**
|
|
130
|
+
* Claim a task atomically
|
|
131
|
+
* @param taskId - Task ID to claim
|
|
132
|
+
* @param agentId - Agent ID claiming the task
|
|
133
|
+
* @returns ClaimTaskResponse if successful, or throws error on conflict
|
|
134
|
+
*/
|
|
135
|
+
static claimTask(taskId: string, agentId: string): Promise<ClaimTaskResponse>;
|
|
136
|
+
/**
|
|
137
|
+
* Release a claimed task back to available
|
|
138
|
+
* @param taskId - Task ID to release
|
|
139
|
+
* @param agentId - Agent ID releasing the task
|
|
140
|
+
*/
|
|
141
|
+
static releaseTask(taskId: string, agentId: string): Promise<ReleaseTaskResponse>;
|
|
142
|
+
/**
|
|
143
|
+
* Get task context (files, acceptance criteria, patterns, gotchas)
|
|
144
|
+
* @param taskId - Task ID to get context for
|
|
145
|
+
* @param graphId - Graph namespace ID
|
|
146
|
+
*/
|
|
147
|
+
static getTaskContext(taskId: string, graphId: string): Promise<TaskContextResponse>;
|
|
148
|
+
}
|
|
149
|
+
export type { AvailableTask, ClaimTaskResponse, TaskContextResponse };
|
|
150
|
+
//# sourceMappingURL=agent-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/agent-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: utility
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [agent, api, client, epic-004, multi-agent]
|
|
6
|
+
* @related: [register.ts, list.ts, status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [auth-storage]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Agent API Client (EPIC-004 Sprint 1 TASK-6)
|
|
13
|
+
*
|
|
14
|
+
* Client for interacting with agent management API endpoints
|
|
15
|
+
*/
|
|
16
|
+
import { getAccessToken, isAuthenticated } from '../../utils/auth-storage.js';
|
|
17
|
+
/**
|
|
18
|
+
* Agent API client
|
|
19
|
+
*/
|
|
20
|
+
export class AgentClient {
|
|
21
|
+
static apiUrl = process.env.GINKO_API_URL || 'https://app.ginkoai.com';
|
|
22
|
+
/**
|
|
23
|
+
* Check if user is authenticated
|
|
24
|
+
*/
|
|
25
|
+
static async requireAuth() {
|
|
26
|
+
if (!await isAuthenticated()) {
|
|
27
|
+
throw new Error('Not authenticated. Run "ginko login" first.');
|
|
28
|
+
}
|
|
29
|
+
const token = await getAccessToken();
|
|
30
|
+
if (!token) {
|
|
31
|
+
throw new Error('Failed to get access token. Run "ginko login" again.');
|
|
32
|
+
}
|
|
33
|
+
return token;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Make authenticated API request
|
|
37
|
+
*/
|
|
38
|
+
static async request(method, endpoint, body) {
|
|
39
|
+
const token = await this.requireAuth();
|
|
40
|
+
const url = `${this.apiUrl}${endpoint}`;
|
|
41
|
+
const debugMode = process.env.GINKO_DEBUG_API === 'true';
|
|
42
|
+
if (debugMode) {
|
|
43
|
+
console.log(`\n[Agent API Debug] ${method} ${url}`);
|
|
44
|
+
if (body) {
|
|
45
|
+
console.log('[Agent API Debug] Request body:', JSON.stringify(body, null, 2));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch(url, {
|
|
50
|
+
method,
|
|
51
|
+
headers: {
|
|
52
|
+
'Authorization': `Bearer ${token}`,
|
|
53
|
+
'Content-Type': 'application/json',
|
|
54
|
+
'X-Client-Version': 'ginko-cli@1.2.0',
|
|
55
|
+
},
|
|
56
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
57
|
+
});
|
|
58
|
+
if (debugMode) {
|
|
59
|
+
console.log(`[Agent API Debug] Response status: ${response.status} ${response.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
const errorData = await response.json();
|
|
63
|
+
if (debugMode) {
|
|
64
|
+
console.log('[Agent API Debug] Error response:', JSON.stringify(errorData, null, 2));
|
|
65
|
+
}
|
|
66
|
+
throw new Error(errorData.error.message || `API error: ${response.status}`);
|
|
67
|
+
}
|
|
68
|
+
const responseData = await response.json();
|
|
69
|
+
if (debugMode) {
|
|
70
|
+
console.log('[Agent API Debug] Response data:', JSON.stringify(responseData, null, 2));
|
|
71
|
+
}
|
|
72
|
+
return responseData;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof Error) {
|
|
76
|
+
throw new Error(`Failed to ${method} ${url}: ${error.message}`);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Register a new agent
|
|
83
|
+
*/
|
|
84
|
+
static async register(data) {
|
|
85
|
+
return this.request('POST', '/api/v1/agent', data);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* List agents with optional filtering
|
|
89
|
+
*/
|
|
90
|
+
static async list(params = {}) {
|
|
91
|
+
const queryParams = new URLSearchParams();
|
|
92
|
+
if (params.status) {
|
|
93
|
+
queryParams.append('status', params.status);
|
|
94
|
+
}
|
|
95
|
+
if (params.capability) {
|
|
96
|
+
queryParams.append('capability', params.capability);
|
|
97
|
+
}
|
|
98
|
+
if (params.limit !== undefined) {
|
|
99
|
+
queryParams.append('limit', params.limit.toString());
|
|
100
|
+
}
|
|
101
|
+
if (params.offset !== undefined) {
|
|
102
|
+
queryParams.append('offset', params.offset.toString());
|
|
103
|
+
}
|
|
104
|
+
const queryString = queryParams.toString();
|
|
105
|
+
const endpoint = queryString ? `/api/v1/agent?${queryString}` : '/api/v1/agent';
|
|
106
|
+
return this.request('GET', endpoint);
|
|
107
|
+
}
|
|
108
|
+
// ============================================================
|
|
109
|
+
// EPIC-004 Sprint 4 TASK-8: Task Management Methods
|
|
110
|
+
// ============================================================
|
|
111
|
+
/**
|
|
112
|
+
* Get available tasks that match agent capabilities
|
|
113
|
+
* @param graphId - Graph namespace ID
|
|
114
|
+
* @param capabilities - Agent capabilities to match
|
|
115
|
+
* @param limit - Max tasks to return
|
|
116
|
+
*/
|
|
117
|
+
static async getAvailableTasks(graphId, capabilities, limit = 10) {
|
|
118
|
+
const queryParams = new URLSearchParams();
|
|
119
|
+
queryParams.append('graphId', graphId);
|
|
120
|
+
queryParams.append('limit', limit.toString());
|
|
121
|
+
if (capabilities && capabilities.length > 0) {
|
|
122
|
+
queryParams.append('capabilities', capabilities.join(','));
|
|
123
|
+
}
|
|
124
|
+
return this.request('GET', `/api/v1/task/available?${queryParams.toString()}`);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Claim a task atomically
|
|
128
|
+
* @param taskId - Task ID to claim
|
|
129
|
+
* @param agentId - Agent ID claiming the task
|
|
130
|
+
* @returns ClaimTaskResponse if successful, or throws error on conflict
|
|
131
|
+
*/
|
|
132
|
+
static async claimTask(taskId, agentId) {
|
|
133
|
+
const request = { agentId };
|
|
134
|
+
return this.request('POST', `/api/v1/task/${taskId}/claim`, request);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Release a claimed task back to available
|
|
138
|
+
* @param taskId - Task ID to release
|
|
139
|
+
* @param agentId - Agent ID releasing the task
|
|
140
|
+
*/
|
|
141
|
+
static async releaseTask(taskId, agentId) {
|
|
142
|
+
const request = { agentId };
|
|
143
|
+
return this.request('POST', `/api/v1/task/${taskId}/release`, request);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get task context (files, acceptance criteria, patterns, gotchas)
|
|
147
|
+
* @param taskId - Task ID to get context for
|
|
148
|
+
* @param graphId - Graph namespace ID
|
|
149
|
+
*/
|
|
150
|
+
static async getTaskContext(taskId, graphId) {
|
|
151
|
+
// Load context from multiple endpoints in parallel
|
|
152
|
+
const [files, patterns, gotchas, constraints] = await Promise.all([
|
|
153
|
+
this.request('GET', `/api/v1/task/${taskId}/files?graphId=${graphId}`)
|
|
154
|
+
.catch(() => ({ files: [] })),
|
|
155
|
+
this.request('GET', `/api/v1/task/${taskId}/patterns?graphId=${graphId}`).catch(() => ({ patterns: [] })),
|
|
156
|
+
this.request('GET', `/api/v1/task/${taskId}/gotchas?graphId=${graphId}`).catch(() => ({ gotchas: [] })),
|
|
157
|
+
this.request('GET', `/api/v1/task/${taskId}/constraints?graphId=${graphId}`).catch(() => ({ constraints: [] })),
|
|
158
|
+
]);
|
|
159
|
+
// Acceptance criteria come from the task itself (loaded locally)
|
|
160
|
+
// For now return empty - will be parsed from sprint file
|
|
161
|
+
return {
|
|
162
|
+
files: files.files || [],
|
|
163
|
+
acceptanceCriteria: [],
|
|
164
|
+
patterns: patterns.patterns || [],
|
|
165
|
+
gotchas: gotchas.gotchas || [],
|
|
166
|
+
constraints: constraints.constraints || [],
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=agent-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../../../src/commands/agent/agent-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [agent, cli, epic-004, multi-agent, collaboration]
|
|
6
|
+
* @related: [register.ts, list.ts, status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Agent Commands (EPIC-004 Sprint 1 TASK-6)
|
|
13
|
+
*
|
|
14
|
+
* CLI commands for AI-to-AI collaboration agent management
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from 'commander';
|
|
17
|
+
/**
|
|
18
|
+
* Main agent command with subcommands
|
|
19
|
+
*/
|
|
20
|
+
export declare function agentCommand(): Command;
|
|
21
|
+
export default agentCommand;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,YAAY,YAqG3B;AAGD,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [agent, cli, epic-004, multi-agent, collaboration]
|
|
6
|
+
* @related: [register.ts, list.ts, status.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: medium
|
|
9
|
+
* @dependencies: [commander, chalk]
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Agent Commands (EPIC-004 Sprint 1 TASK-6)
|
|
13
|
+
*
|
|
14
|
+
* CLI commands for AI-to-AI collaboration agent management
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from 'commander';
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
import { registerAgentCommand } from './register.js';
|
|
19
|
+
import { listAgentsCommand } from './list.js';
|
|
20
|
+
import { statusAgentCommand } from './status.js';
|
|
21
|
+
import { workAgentCommand } from './work.js';
|
|
22
|
+
/**
|
|
23
|
+
* Main agent command with subcommands
|
|
24
|
+
*/
|
|
25
|
+
export function agentCommand() {
|
|
26
|
+
const agent = new Command('agent')
|
|
27
|
+
.description('Manage AI agents for multi-agent collaboration (EPIC-004)')
|
|
28
|
+
.showHelpAfterError('(use --help for additional information)')
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
${chalk.gray('Quick Start:')}
|
|
31
|
+
${chalk.green('ginko login')} ${chalk.gray('# Authenticate first')}
|
|
32
|
+
${chalk.green('ginko agent register')} --name "Worker-1" \\
|
|
33
|
+
--capabilities typescript,testing ${chalk.gray('# Register agent')}
|
|
34
|
+
${chalk.green('ginko agent list')} ${chalk.gray('# List all agents')}
|
|
35
|
+
${chalk.green('ginko agent status')} ${chalk.gray('# Show current agent')}
|
|
36
|
+
|
|
37
|
+
${chalk.gray('Usage Examples:')}
|
|
38
|
+
${chalk.green('ginko agent register')} --name "Backend-Agent" --capabilities typescript,nodejs,api
|
|
39
|
+
${chalk.green('ginko agent list')} --status active
|
|
40
|
+
${chalk.green('ginko agent list')} --capability typescript
|
|
41
|
+
${chalk.green('ginko agent status')}
|
|
42
|
+
|
|
43
|
+
${chalk.gray('Features:')}
|
|
44
|
+
${chalk.cyan('🤖 Agent Registration')} - Register agents with capabilities
|
|
45
|
+
${chalk.cyan('📋 Agent Discovery')} - List and filter available agents
|
|
46
|
+
${chalk.cyan('📊 Agent Status')} - View current agent details
|
|
47
|
+
${chalk.cyan('🔄 Multi-Agent Collab')} - Enable AI-to-AI collaboration
|
|
48
|
+
|
|
49
|
+
${chalk.gray('Learn More:')}
|
|
50
|
+
${chalk.dim('https://docs.ginko.ai/multi-agent')}
|
|
51
|
+
`)
|
|
52
|
+
.action(() => {
|
|
53
|
+
// When called without subcommand, show help
|
|
54
|
+
agent.help({ error: false });
|
|
55
|
+
});
|
|
56
|
+
// Register command
|
|
57
|
+
agent
|
|
58
|
+
.command('register')
|
|
59
|
+
.description('Register a new agent with capabilities')
|
|
60
|
+
.requiredOption('--name <name>', 'Agent name (e.g., "Worker-1", "Backend-Agent")')
|
|
61
|
+
.requiredOption('--capabilities <capabilities>', 'Comma-separated capabilities (e.g., "typescript,testing,api")')
|
|
62
|
+
.option('--status <status>', 'Initial status (active|idle|busy|offline)', 'active')
|
|
63
|
+
.action(async (options) => {
|
|
64
|
+
await registerAgentCommand(options);
|
|
65
|
+
});
|
|
66
|
+
// List command
|
|
67
|
+
agent
|
|
68
|
+
.command('list')
|
|
69
|
+
.description('List agents with optional filtering')
|
|
70
|
+
.option('--status <status>', 'Filter by status (active|idle|busy|offline)')
|
|
71
|
+
.option('--capability <capability>', 'Filter by capability')
|
|
72
|
+
.option('--limit <limit>', 'Max results (default 20, max 100)', '20')
|
|
73
|
+
.option('--offset <offset>', 'Pagination offset (default 0)', '0')
|
|
74
|
+
.action(async (options) => {
|
|
75
|
+
await listAgentsCommand(options);
|
|
76
|
+
});
|
|
77
|
+
// Status command
|
|
78
|
+
agent
|
|
79
|
+
.command('status')
|
|
80
|
+
.description('Show current agent status and details')
|
|
81
|
+
.action(async () => {
|
|
82
|
+
await statusAgentCommand();
|
|
83
|
+
});
|
|
84
|
+
// Work command (EPIC-004 Sprint 4 TASK-8)
|
|
85
|
+
agent
|
|
86
|
+
.command('work')
|
|
87
|
+
.description('Start worker agent that loads context and polls for task assignments')
|
|
88
|
+
.option('--name <name>', 'Agent name (required if not already registered)')
|
|
89
|
+
.option('--capabilities <capabilities>', 'Comma-separated capabilities (required if not already registered)')
|
|
90
|
+
.option('--poll-interval <seconds>', 'Task polling interval in seconds (default: 5)', '5')
|
|
91
|
+
.option('--max-tasks <count>', 'Max tasks to process before exiting (0 = unlimited)', '0')
|
|
92
|
+
.addHelpText('after', `
|
|
93
|
+
${chalk.gray('Worker Agent Flow:')}
|
|
94
|
+
${chalk.dim('1. Register as worker agent (or use existing from .ginko/agent.json)')}
|
|
95
|
+
${chalk.dim('2. Call ginko start to load project context (events, patterns, ADRs)')}
|
|
96
|
+
${chalk.dim('3. Start heartbeat to maintain online status')}
|
|
97
|
+
${chalk.dim('4. Enter polling loop for task assignments')}
|
|
98
|
+
${chalk.dim('5. On assignment: claim task atomically, load task-specific context')}
|
|
99
|
+
${chalk.dim('6. Execute task (AI does the work), log events, verify')}
|
|
100
|
+
${chalk.dim('7. Report completion/blocker via events')}
|
|
101
|
+
${chalk.dim('8. Return to polling')}
|
|
102
|
+
|
|
103
|
+
${chalk.gray('Examples:')}
|
|
104
|
+
${chalk.green('ginko agent work --name "Worker-1" --capabilities typescript,testing')}
|
|
105
|
+
${chalk.green('ginko agent work')} ${chalk.dim('# Uses existing agent from .ginko/agent.json')}
|
|
106
|
+
${chalk.green('ginko agent work --poll-interval 10')} ${chalk.dim('# Poll every 10 seconds')}
|
|
107
|
+
${chalk.green('ginko agent work --max-tasks 5')} ${chalk.dim('# Process 5 tasks then exit')}
|
|
108
|
+
`)
|
|
109
|
+
.action(async (options) => {
|
|
110
|
+
await workAgentCommand({
|
|
111
|
+
name: options.name,
|
|
112
|
+
capabilities: options.capabilities,
|
|
113
|
+
pollInterval: parseInt(options.pollInterval, 10),
|
|
114
|
+
maxTasks: parseInt(options.maxTasks, 10),
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
return agent;
|
|
118
|
+
}
|
|
119
|
+
// Export for use in main CLI
|
|
120
|
+
export default agentCommand;
|
|
121
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileType: command
|
|
3
|
+
* @status: current
|
|
4
|
+
* @updated: 2025-12-05
|
|
5
|
+
* @tags: [agent, list, cli, epic-004, multi-agent]
|
|
6
|
+
* @related: [index.ts, agent-client.ts]
|
|
7
|
+
* @priority: high
|
|
8
|
+
* @complexity: low
|
|
9
|
+
* @dependencies: [commander, chalk, ora]
|
|
10
|
+
*/
|
|
11
|
+
interface ListOptions {
|
|
12
|
+
status?: string;
|
|
13
|
+
capability?: string;
|
|
14
|
+
limit?: string;
|
|
15
|
+
offset?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* List agents with optional filtering
|
|
19
|
+
*/
|
|
20
|
+
export declare function listAgentsCommand(options: ListOptions): Promise<void>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E3E"}
|