@ginkoai/cli 1.6.2 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/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 +21 -1
- package/dist/commands/graph/api-client.d.ts.map +1 -1
- package/dist/commands/graph/api-client.js +23 -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 +73 -14
- 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.map +1 -1
- package/dist/commands/start/start-reflection.js +8 -0
- 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/index.js +78 -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/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 +39 -2
- package/dist/lib/sprint-loader.d.ts.map +1 -1
- package/dist/lib/sprint-loader.js +269 -5
- 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/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +7 -0
- package/dist/utils/command-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* List Agents Command (EPIC-004 Sprint 1 TASK-6)
|
|
13
|
+
*
|
|
14
|
+
* List agents with optional filtering by status or capability
|
|
15
|
+
*/
|
|
16
|
+
import chalk from 'chalk';
|
|
17
|
+
import ora from 'ora';
|
|
18
|
+
import { AgentClient } from './agent-client.js';
|
|
19
|
+
/**
|
|
20
|
+
* List agents with optional filtering
|
|
21
|
+
*/
|
|
22
|
+
export async function listAgentsCommand(options) {
|
|
23
|
+
const spinner = ora('Fetching agents...').start();
|
|
24
|
+
try {
|
|
25
|
+
const limit = parseInt(options.limit || '20', 10);
|
|
26
|
+
const offset = parseInt(options.offset || '0', 10);
|
|
27
|
+
const response = await AgentClient.list({
|
|
28
|
+
status: options.status,
|
|
29
|
+
capability: options.capability,
|
|
30
|
+
limit,
|
|
31
|
+
offset,
|
|
32
|
+
});
|
|
33
|
+
spinner.succeed(chalk.green(`Found ${response.total} agent${response.total === 1 ? '' : 's'}`));
|
|
34
|
+
console.log('');
|
|
35
|
+
if (response.agents.length === 0) {
|
|
36
|
+
console.log(chalk.dim(' No agents found'));
|
|
37
|
+
if (options.status || options.capability) {
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(chalk.dim('💡 Try removing filters to see all agents:'));
|
|
40
|
+
console.log(chalk.dim(' ginko agent list'));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log('');
|
|
44
|
+
console.log(chalk.dim('💡 Register your first agent:'));
|
|
45
|
+
console.log(chalk.dim(' ginko agent register --name "Worker-1" --capabilities typescript,testing'));
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Display agents in a table-like format
|
|
50
|
+
response.agents.forEach((agent, index) => {
|
|
51
|
+
console.log(chalk.bold(` ${agent.name}`));
|
|
52
|
+
console.log(chalk.dim(` ├─ ID: ${agent.id}`));
|
|
53
|
+
console.log(chalk.dim(` ├─ Status: ${getStatusBadge(agent.status)}`));
|
|
54
|
+
console.log(chalk.dim(` ├─ Capabilities: ${agent.capabilities.join(', ')}`));
|
|
55
|
+
console.log(chalk.dim(` ├─ Organization: ${agent.organizationId}`));
|
|
56
|
+
console.log(chalk.dim(` ├─ Created: ${formatDate(agent.createdAt)}`));
|
|
57
|
+
console.log(chalk.dim(` └─ Updated: ${formatDate(agent.updatedAt)}`));
|
|
58
|
+
// Add spacing between agents (except last one)
|
|
59
|
+
if (index < response.agents.length - 1) {
|
|
60
|
+
console.log('');
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// Pagination info
|
|
64
|
+
if (response.total > response.limit) {
|
|
65
|
+
console.log('');
|
|
66
|
+
console.log(chalk.dim(` Showing ${response.offset + 1}-${Math.min(response.offset + response.limit, response.total)} of ${response.total} agents`));
|
|
67
|
+
if (response.offset + response.limit < response.total) {
|
|
68
|
+
const nextOffset = response.offset + response.limit;
|
|
69
|
+
console.log('');
|
|
70
|
+
console.log(chalk.dim('💡 View more:'));
|
|
71
|
+
console.log(chalk.dim(` ginko agent list --offset ${nextOffset}`));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner.fail(chalk.red('Failed to list agents'));
|
|
77
|
+
// Handle specific error codes
|
|
78
|
+
if (error.message.includes('Not authenticated')) {
|
|
79
|
+
console.error(chalk.red(' Not authenticated. Run `ginko login` first.'));
|
|
80
|
+
}
|
|
81
|
+
else if (error.message.includes('INVALID_STATUS')) {
|
|
82
|
+
console.error(chalk.red(' Invalid status. Must be one of: active, idle, busy, offline'));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.error(chalk.red(` ${error.message}`));
|
|
86
|
+
}
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get colored status badge
|
|
92
|
+
*/
|
|
93
|
+
function getStatusBadge(status) {
|
|
94
|
+
switch (status) {
|
|
95
|
+
case 'active':
|
|
96
|
+
return chalk.green('● active');
|
|
97
|
+
case 'idle':
|
|
98
|
+
return chalk.yellow('● idle');
|
|
99
|
+
case 'busy':
|
|
100
|
+
return chalk.blue('● busy');
|
|
101
|
+
case 'offline':
|
|
102
|
+
return chalk.gray('● offline');
|
|
103
|
+
default:
|
|
104
|
+
return status;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Format ISO date string to readable format
|
|
109
|
+
*/
|
|
110
|
+
function formatDate(isoString) {
|
|
111
|
+
try {
|
|
112
|
+
const date = new Date(isoString);
|
|
113
|
+
return date.toLocaleString();
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return isoString;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/agent/list.ts"],"names":[],"mappings":"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"}
|