@llm-dev-ops/agentics-cli 1.3.8 → 1.3.9
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/adapters/base-adapter.d.ts +58 -1
- package/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +110 -0
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/cli/index.js +992 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/deploy.d.ts +95 -13
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +420 -14
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/erp.d.ts +302 -0
- package/dist/commands/erp.d.ts.map +1 -0
- package/dist/commands/erp.js +1064 -0
- package/dist/commands/erp.js.map +1 -0
- package/dist/commands/export.d.ts +40 -13
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +434 -14
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/index.d.ts +20 -12
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +10 -6
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/inspect.d.ts +84 -18
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +585 -131
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/logout.d.ts +34 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +73 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/plan.d.ts +147 -14
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +555 -16
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/policy.d.ts +136 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +460 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/quantify.d.ts +131 -13
- package/dist/commands/quantify.d.ts.map +1 -1
- package/dist/commands/quantify.js +425 -14
- package/dist/commands/quantify.js.map +1 -1
- package/dist/commands/simulate.d.ts +119 -13
- package/dist/commands/simulate.d.ts.map +1 -1
- package/dist/commands/simulate.js +363 -14
- package/dist/commands/simulate.js.map +1 -1
- package/dist/commands/usage.d.ts +110 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +507 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/whoami.d.ts +33 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +93 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/endpoints.d.ts.map +1 -1
- package/dist/config/endpoints.js +15 -0
- package/dist/config/endpoints.js.map +1 -1
- package/dist/modules/command-parser.d.ts +1 -1
- package/dist/modules/command-parser.d.ts.map +1 -1
- package/dist/modules/command-parser.js +6 -1
- package/dist/modules/command-parser.js.map +1 -1
- package/dist/modules/output-renderer.d.ts +1 -0
- package/dist/modules/output-renderer.d.ts.map +1 -1
- package/dist/modules/output-renderer.js +25 -1
- package/dist/modules/output-renderer.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +4 -4
package/dist/commands/plan.js
CHANGED
|
@@ -1,36 +1,231 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plan Command
|
|
2
|
+
* Plan Command - Plan Management with Ruvector Persistence
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* ARCHITECTURE:
|
|
5
|
+
* - Plans are generated once by the planner and persisted in Ruvector
|
|
6
|
+
* - Inspection is retrieval-only from Ruvector
|
|
7
|
+
* - Planner = compute once, Ruvector = memory forever
|
|
5
8
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* 6. Record audit entry
|
|
13
|
-
* 7. Return PlanReference
|
|
9
|
+
* SUBCOMMANDS:
|
|
10
|
+
* - (default) Generate plan via planner and persist to Ruvector
|
|
11
|
+
* - list List all plans from Ruvector
|
|
12
|
+
* - inspect Retrieve a specific plan by ID from Ruvector (NO PLANNER CALLS)
|
|
13
|
+
* - delete Delete a plan from Ruvector
|
|
14
|
+
* - approve Advisory approval marker
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
16
|
+
* CRITICAL RULES:
|
|
17
|
+
* - plan inspect MUST NOT call planner
|
|
18
|
+
* - plan inspect MUST NOT interpret UUID as intent
|
|
19
|
+
* - Persistence is mandatory - failure to persist = command failure
|
|
19
20
|
*/
|
|
20
|
-
import
|
|
21
|
+
import * as fs from 'node:fs';
|
|
22
|
+
import * as path from 'node:path';
|
|
23
|
+
import * as crypto from 'node:crypto';
|
|
24
|
+
import { ManifestsAdapter, PlannerAdapter, RuvectorAdapter, } from '../adapters/base-adapter.js';
|
|
25
|
+
import { createCredentialStore } from '../utils/credentials.js';
|
|
21
26
|
import { createOrchestrationEngine, } from '../modules/orchestration-engine.js';
|
|
22
27
|
import { createArtifactHandoff } from '../modules/artifact-handoff.js';
|
|
23
28
|
import { createAuditTrail } from '../audit/audit-trail.js';
|
|
24
|
-
import { failFast, toError } from '../errors/index.js';
|
|
29
|
+
import { failFast, toError, CLIError } from '../errors/index.js';
|
|
25
30
|
import { loadEndpointConfig } from '../config/endpoints.js';
|
|
26
31
|
import { validateRequest, validateResponse, RequestSchemas, ResponseSchemas, } from '../contracts/validator.js';
|
|
27
32
|
// ============================================================================
|
|
33
|
+
// Plan-Specific Exit Codes
|
|
34
|
+
// ============================================================================
|
|
35
|
+
export const PLAN_EXIT_CODES = {
|
|
36
|
+
SUCCESS: 0,
|
|
37
|
+
INPUT_ERROR: 100,
|
|
38
|
+
NOT_FOUND: 100,
|
|
39
|
+
IO_ERROR: 74,
|
|
40
|
+
AUTH_ERROR: 77,
|
|
41
|
+
STORAGE_ERROR: 69,
|
|
42
|
+
UNEXPECTED_ERROR: 1,
|
|
43
|
+
};
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Authentication Helper
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Assert that the user is authenticated.
|
|
49
|
+
* Throws AUTH_ERROR if no valid credentials exist.
|
|
50
|
+
*/
|
|
51
|
+
async function assertAuthenticated(correlationId) {
|
|
52
|
+
const credentialStore = createCredentialStore();
|
|
53
|
+
const credentials = await credentialStore.load();
|
|
54
|
+
if (!credentials) {
|
|
55
|
+
throw new CLIError({
|
|
56
|
+
code: 'ECLI-PLAN-AUTH',
|
|
57
|
+
category: 'AUTH_ERROR',
|
|
58
|
+
message: 'Login required. Run `agentics login` to authenticate.',
|
|
59
|
+
module: 'plan',
|
|
60
|
+
correlationId,
|
|
61
|
+
recoverable: true,
|
|
62
|
+
exitCode: PLAN_EXIT_CODES.AUTH_ERROR,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate that a string is a valid UUID format.
|
|
68
|
+
* Accepts standard UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
69
|
+
*/
|
|
70
|
+
function isValidUUID(str) {
|
|
71
|
+
// Standard UUID format with hex characters and dashes
|
|
72
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
73
|
+
return uuidRegex.test(str);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Assert that the provided ID is a valid UUID.
|
|
77
|
+
* Throws INPUT_ERROR if not a valid UUID format.
|
|
78
|
+
*/
|
|
79
|
+
function assertUUID(id, correlationId) {
|
|
80
|
+
if (!isValidUUID(id)) {
|
|
81
|
+
throw new CLIError({
|
|
82
|
+
code: 'ECLI-PLAN-INVALID-UUID',
|
|
83
|
+
category: 'INPUT_ERROR',
|
|
84
|
+
message: `Invalid plan ID format. Expected UUID, got: ${id}`,
|
|
85
|
+
details: { provided: id, expected: 'UUID format (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)' },
|
|
86
|
+
module: 'plan',
|
|
87
|
+
correlationId,
|
|
88
|
+
recoverable: false,
|
|
89
|
+
exitCode: PLAN_EXIT_CODES.INPUT_ERROR,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate SHA-256 checksum for plan data.
|
|
95
|
+
*/
|
|
96
|
+
function generateChecksum(data) {
|
|
97
|
+
const hash = crypto.createHash('sha256');
|
|
98
|
+
hash.update(JSON.stringify(data));
|
|
99
|
+
return hash.digest('hex');
|
|
100
|
+
}
|
|
101
|
+
// ============================================================================
|
|
102
|
+
// Storage Configuration
|
|
103
|
+
// ============================================================================
|
|
104
|
+
function getPlansDir() {
|
|
105
|
+
const baseDir = process.env['AGENTICS_DATA_DIR'] ?? process.cwd();
|
|
106
|
+
return path.join(baseDir, '.agentics', 'plans');
|
|
107
|
+
}
|
|
108
|
+
function ensurePlansDir() {
|
|
109
|
+
const dir = getPlansDir();
|
|
110
|
+
if (!fs.existsSync(dir)) {
|
|
111
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function getPlanPath(id) {
|
|
115
|
+
return path.join(getPlansDir(), `${id}.json`);
|
|
116
|
+
}
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Storage Operations
|
|
119
|
+
// ============================================================================
|
|
120
|
+
function loadPlan(id) {
|
|
121
|
+
const filePath = getPlanPath(id);
|
|
122
|
+
if (!fs.existsSync(filePath)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
127
|
+
return JSON.parse(content);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function savePlan(plan) {
|
|
134
|
+
ensurePlansDir();
|
|
135
|
+
const filePath = getPlanPath(plan.id);
|
|
136
|
+
fs.writeFileSync(filePath, JSON.stringify(plan, null, 2), 'utf-8');
|
|
137
|
+
}
|
|
138
|
+
// Note: deletePlanRecord and listAllPlans removed - now using Ruvector storage
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// ID Generation
|
|
141
|
+
// ============================================================================
|
|
142
|
+
function generatePlanId() {
|
|
143
|
+
const timestamp = Date.now().toString(36);
|
|
144
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
145
|
+
return `plan-${timestamp}-${random}`;
|
|
146
|
+
}
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Validation
|
|
149
|
+
// ============================================================================
|
|
150
|
+
function validatePlanId(id, correlationId) {
|
|
151
|
+
if (!id || typeof id !== 'string' || id.trim() === '') {
|
|
152
|
+
throw new CLIError({
|
|
153
|
+
code: 'ECLI-PLAN-001',
|
|
154
|
+
category: 'INPUT_ERROR',
|
|
155
|
+
message: 'Plan ID is required',
|
|
156
|
+
details: { provided: id },
|
|
157
|
+
module: 'plan',
|
|
158
|
+
correlationId,
|
|
159
|
+
recoverable: false,
|
|
160
|
+
exitCode: PLAN_EXIT_CODES.INPUT_ERROR,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function validatePlanName(name, correlationId) {
|
|
165
|
+
if (!name || typeof name !== 'string' || name.trim() === '') {
|
|
166
|
+
throw new CLIError({
|
|
167
|
+
code: 'ECLI-PLAN-002',
|
|
168
|
+
category: 'INPUT_ERROR',
|
|
169
|
+
message: 'Plan name is required',
|
|
170
|
+
details: { provided: name },
|
|
171
|
+
module: 'plan',
|
|
172
|
+
correlationId,
|
|
173
|
+
recoverable: false,
|
|
174
|
+
exitCode: PLAN_EXIT_CODES.INPUT_ERROR,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (name.length > 256) {
|
|
178
|
+
throw new CLIError({
|
|
179
|
+
code: 'ECLI-PLAN-003',
|
|
180
|
+
category: 'INPUT_ERROR',
|
|
181
|
+
message: 'Plan name cannot exceed 256 characters',
|
|
182
|
+
details: { provided_length: name.length, max_length: 256 },
|
|
183
|
+
module: 'plan',
|
|
184
|
+
correlationId,
|
|
185
|
+
recoverable: false,
|
|
186
|
+
exitCode: PLAN_EXIT_CODES.INPUT_ERROR,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Display Formatting
|
|
192
|
+
// ============================================================================
|
|
193
|
+
export function formatPlanForDisplay(plan) {
|
|
194
|
+
const lines = [];
|
|
195
|
+
const statusIcon = plan.status === 'approved' ? '[OK]'
|
|
196
|
+
: plan.status === 'rejected' ? '[FAIL]'
|
|
197
|
+
: plan.status === 'pending_approval' ? '[PEND]'
|
|
198
|
+
: plan.status === 'archived' ? '[ARCH]'
|
|
199
|
+
: '[DRAFT]';
|
|
200
|
+
lines.push(`${statusIcon} ${plan.id}`);
|
|
201
|
+
lines.push(` Name: ${plan.name}`);
|
|
202
|
+
lines.push(` Status: ${plan.status}`);
|
|
203
|
+
lines.push(` Description: ${plan.description || '(none)'}`);
|
|
204
|
+
if (plan.manifest_query) {
|
|
205
|
+
lines.push(` Query: ${plan.manifest_query}`);
|
|
206
|
+
}
|
|
207
|
+
lines.push(` Version: ${plan.version}`);
|
|
208
|
+
lines.push(` Created: ${new Date(plan.created_at).toLocaleString()}`);
|
|
209
|
+
lines.push(` Updated: ${new Date(plan.updated_at).toLocaleString()}`);
|
|
210
|
+
if (plan.approved_at) {
|
|
211
|
+
lines.push(` Approved: ${new Date(plan.approved_at).toLocaleString()}`);
|
|
212
|
+
}
|
|
213
|
+
if (plan.approved_by) {
|
|
214
|
+
lines.push(` Approved By: ${plan.approved_by}`);
|
|
215
|
+
}
|
|
216
|
+
return lines.join('\n');
|
|
217
|
+
}
|
|
218
|
+
// ============================================================================
|
|
28
219
|
// Plan Command Implementation
|
|
29
220
|
// ============================================================================
|
|
30
221
|
export async function executePlanCommand(input, options) {
|
|
31
222
|
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
32
223
|
const startTime = Date.now();
|
|
33
224
|
// ============================================================================
|
|
225
|
+
// AUTHENTICATION CHECK - REQUIRED FOR ALL PLAN OPERATIONS
|
|
226
|
+
// ============================================================================
|
|
227
|
+
await assertAuthenticated(correlationId);
|
|
228
|
+
// ============================================================================
|
|
34
229
|
// CONTRACT VALIDATION - BEFORE ANY NETWORK CALL
|
|
35
230
|
// ============================================================================
|
|
36
231
|
// Validate the top-level plan request
|
|
@@ -42,8 +237,10 @@ export async function executePlanCommand(input, options) {
|
|
|
42
237
|
// Create adapters
|
|
43
238
|
const manifestsConfig = loadEndpointConfig('agentics-org-manifests');
|
|
44
239
|
const plannerConfig = loadEndpointConfig('agentics-simulation-planner');
|
|
240
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
45
241
|
const manifestsAdapter = new ManifestsAdapter(manifestsConfig, correlationId);
|
|
46
242
|
const plannerAdapter = new PlannerAdapter(plannerConfig, correlationId);
|
|
243
|
+
const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
47
244
|
// Define orchestration stages
|
|
48
245
|
const stages = [
|
|
49
246
|
{
|
|
@@ -99,6 +296,40 @@ export async function executePlanCommand(input, options) {
|
|
|
99
296
|
const planStage = result.stages.find(s => s.name === 'create-plan');
|
|
100
297
|
const validatedPlan = validateResponse(ResponseSchemas.PLAN, planStage?.response, correlationId);
|
|
101
298
|
const planRef = handoff.extractReference(validatedPlan);
|
|
299
|
+
// ========================================================================
|
|
300
|
+
// RUVECTOR PERSISTENCE - MANDATORY
|
|
301
|
+
// Plans are generated once by the planner and persisted in Ruvector.
|
|
302
|
+
// Failure to persist = command failure.
|
|
303
|
+
// ========================================================================
|
|
304
|
+
const ruvectorPlan = {
|
|
305
|
+
id: planRef.id,
|
|
306
|
+
type: 'plan',
|
|
307
|
+
intent: input.manifestQuery,
|
|
308
|
+
plan: validatedPlan,
|
|
309
|
+
created_at: new Date().toISOString(),
|
|
310
|
+
org_id: process.env['AGENTICS_ORG_ID'] ?? 'unknown',
|
|
311
|
+
user_id: process.env['AGENTICS_USER_ID'] ?? 'unknown',
|
|
312
|
+
checksum: generateChecksum(validatedPlan),
|
|
313
|
+
};
|
|
314
|
+
try {
|
|
315
|
+
await ruvectorAdapter.storePlan(ruvectorPlan);
|
|
316
|
+
}
|
|
317
|
+
catch (storageError) {
|
|
318
|
+
// Persistence is mandatory - failure to persist = command failure
|
|
319
|
+
throw new CLIError({
|
|
320
|
+
code: 'ECLI-PLAN-STORAGE',
|
|
321
|
+
category: 'NETWORK_ERROR',
|
|
322
|
+
message: 'Failed to persist plan to Ruvector storage. Plan was generated but not saved.',
|
|
323
|
+
details: {
|
|
324
|
+
plan_id: planRef.id,
|
|
325
|
+
error: storageError instanceof Error ? storageError.message : String(storageError),
|
|
326
|
+
},
|
|
327
|
+
module: 'plan',
|
|
328
|
+
correlationId,
|
|
329
|
+
recoverable: true,
|
|
330
|
+
exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
102
333
|
// Record audit entry
|
|
103
334
|
audit.record({
|
|
104
335
|
command: 'plan',
|
|
@@ -107,6 +338,7 @@ export async function executePlanCommand(input, options) {
|
|
|
107
338
|
dependencies: [
|
|
108
339
|
{ service: 'agentics-org-manifests', method: 'select', timestamp: new Date().toISOString(), duration_ms: result.timing.breakdown['select-manifest'] ?? 0, success: true },
|
|
109
340
|
{ service: 'agentics-simulation-planner', method: 'create', timestamp: new Date().toISOString(), duration_ms: result.timing.breakdown['create-plan'] ?? 0, success: true },
|
|
341
|
+
{ service: 'ruvector-service', method: 'store', timestamp: new Date().toISOString(), duration_ms: 0, success: true },
|
|
110
342
|
],
|
|
111
343
|
duration_ms: result.timing.total,
|
|
112
344
|
status: 'SUCCESS',
|
|
@@ -140,4 +372,311 @@ export async function executePlanCommand(input, options) {
|
|
|
140
372
|
});
|
|
141
373
|
}
|
|
142
374
|
}
|
|
375
|
+
// ============================================================================
|
|
376
|
+
// Plan List Command Implementation (Local Storage)
|
|
377
|
+
// ============================================================================
|
|
378
|
+
/**
|
|
379
|
+
* List plans from local storage
|
|
380
|
+
*/
|
|
381
|
+
/**
|
|
382
|
+
* List plans from Ruvector storage.
|
|
383
|
+
*/
|
|
384
|
+
export async function executePlanListCommand(input, options) {
|
|
385
|
+
const startTime = Date.now();
|
|
386
|
+
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
387
|
+
// Authentication required
|
|
388
|
+
await assertAuthenticated(correlationId);
|
|
389
|
+
// List from Ruvector
|
|
390
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
391
|
+
const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
392
|
+
try {
|
|
393
|
+
const response = await ruvectorAdapter.listPlans({
|
|
394
|
+
org_id: process.env['AGENTICS_ORG_ID'],
|
|
395
|
+
limit: input.limit,
|
|
396
|
+
});
|
|
397
|
+
const ruvectorPlans = response.body?.plans ?? [];
|
|
398
|
+
// Map to PlanSummary for backward compatibility
|
|
399
|
+
let summaries = ruvectorPlans.map(p => ({
|
|
400
|
+
id: p.id,
|
|
401
|
+
name: p.intent.slice(0, 100),
|
|
402
|
+
status: 'approved', // Persisted plans are approved
|
|
403
|
+
created_at: p.created_at,
|
|
404
|
+
manifest_query: p.intent,
|
|
405
|
+
}));
|
|
406
|
+
// Apply status filter (client-side since Ruvector may not support it)
|
|
407
|
+
if (input.status) {
|
|
408
|
+
summaries = summaries.filter(p => p.status === input.status);
|
|
409
|
+
}
|
|
410
|
+
// Sort by created_at descending
|
|
411
|
+
summaries.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
|
|
412
|
+
// Apply limit
|
|
413
|
+
if (input.limit && input.limit > 0) {
|
|
414
|
+
summaries = summaries.slice(0, input.limit);
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
plans: summaries,
|
|
418
|
+
count: summaries.length,
|
|
419
|
+
timing: Date.now() - startTime,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
424
|
+
throw new CLIError({
|
|
425
|
+
code: 'ECLI-PLAN-LIST',
|
|
426
|
+
category: 'NETWORK_ERROR',
|
|
427
|
+
message: `Failed to list plans: ${errorMessage}`,
|
|
428
|
+
module: 'plan',
|
|
429
|
+
correlationId,
|
|
430
|
+
recoverable: true,
|
|
431
|
+
exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Format plans list for human-readable display
|
|
437
|
+
*/
|
|
438
|
+
export function formatPlansListForDisplay(plans) {
|
|
439
|
+
if (plans.length === 0) {
|
|
440
|
+
return 'No plans found.';
|
|
441
|
+
}
|
|
442
|
+
const lines = [];
|
|
443
|
+
lines.push(`Found ${plans.length} plan${plans.length === 1 ? '' : 's'}:`);
|
|
444
|
+
lines.push('');
|
|
445
|
+
for (const plan of plans) {
|
|
446
|
+
lines.push(` ${plan.id} - ${plan.name} [${plan.status}]`);
|
|
447
|
+
lines.push(` Created: ${new Date(plan.created_at).toLocaleString()}`);
|
|
448
|
+
if (plan.manifest_query) {
|
|
449
|
+
lines.push(` Query: ${plan.manifest_query}`);
|
|
450
|
+
}
|
|
451
|
+
lines.push('');
|
|
452
|
+
}
|
|
453
|
+
return lines.join('\n');
|
|
454
|
+
}
|
|
455
|
+
// ============================================================================
|
|
456
|
+
// CRUD Command Implementations
|
|
457
|
+
// ============================================================================
|
|
458
|
+
/**
|
|
459
|
+
* Create a new plan record
|
|
460
|
+
*/
|
|
461
|
+
export async function executePlanCreateCommand(input, options) {
|
|
462
|
+
const startTime = Date.now();
|
|
463
|
+
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
464
|
+
validatePlanName(input.name, correlationId);
|
|
465
|
+
const now = new Date().toISOString();
|
|
466
|
+
const plan = {
|
|
467
|
+
id: generatePlanId(),
|
|
468
|
+
name: input.name.trim(),
|
|
469
|
+
description: input.description?.trim() ?? '',
|
|
470
|
+
status: 'draft',
|
|
471
|
+
manifest_query: input.manifest_query,
|
|
472
|
+
created_at: now,
|
|
473
|
+
updated_at: now,
|
|
474
|
+
version: 1,
|
|
475
|
+
metadata: input.metadata,
|
|
476
|
+
};
|
|
477
|
+
try {
|
|
478
|
+
savePlan(plan);
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
throw new CLIError({
|
|
482
|
+
code: 'ECLI-PLAN-IO-001',
|
|
483
|
+
category: 'INTERNAL_ERROR',
|
|
484
|
+
message: 'Failed to save plan',
|
|
485
|
+
details: { error: error instanceof Error ? error.message : String(error) },
|
|
486
|
+
module: 'plan',
|
|
487
|
+
correlationId,
|
|
488
|
+
recoverable: false,
|
|
489
|
+
exitCode: PLAN_EXIT_CODES.IO_ERROR,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
plan,
|
|
494
|
+
timing: Date.now() - startTime,
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Inspect a specific plan by ID
|
|
499
|
+
*/
|
|
500
|
+
/**
|
|
501
|
+
* Inspect a specific plan by ID.
|
|
502
|
+
*
|
|
503
|
+
* CRITICAL: This is RETRIEVAL-ONLY from Ruvector.
|
|
504
|
+
* - MUST NOT call planner
|
|
505
|
+
* - MUST NOT interpret ID as intent
|
|
506
|
+
* - MUST validate UUID format
|
|
507
|
+
* - MUST require authentication
|
|
508
|
+
*/
|
|
509
|
+
export async function executePlanInspectCommand(input, options) {
|
|
510
|
+
const startTime = Date.now();
|
|
511
|
+
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
512
|
+
// ============================================================================
|
|
513
|
+
// AUTHENTICATION CHECK - REQUIRED
|
|
514
|
+
// ============================================================================
|
|
515
|
+
await assertAuthenticated(correlationId);
|
|
516
|
+
// ============================================================================
|
|
517
|
+
// UUID VALIDATION - REQUIRED
|
|
518
|
+
// Prevents treating ID as intent (the broken behavior we're fixing)
|
|
519
|
+
// ============================================================================
|
|
520
|
+
assertUUID(input.id, correlationId);
|
|
521
|
+
// ============================================================================
|
|
522
|
+
// RUVECTOR RETRIEVAL - NO PLANNER CALLS
|
|
523
|
+
// Plans are retrieved from Ruvector only. Never call the planner here.
|
|
524
|
+
// ============================================================================
|
|
525
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
526
|
+
const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
527
|
+
try {
|
|
528
|
+
const response = await ruvectorAdapter.getPlan(input.id);
|
|
529
|
+
// Convert Ruvector response to PlanRecord format
|
|
530
|
+
const ruvectorPlan = response.body;
|
|
531
|
+
if (!ruvectorPlan || !ruvectorPlan.id) {
|
|
532
|
+
return {
|
|
533
|
+
plan: null,
|
|
534
|
+
found: false,
|
|
535
|
+
timing: Date.now() - startTime,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
// Map RuvectorPlan to legacy PlanRecord for backward compatibility
|
|
539
|
+
const plan = {
|
|
540
|
+
id: ruvectorPlan.id,
|
|
541
|
+
name: ruvectorPlan.intent.slice(0, 100), // Use intent as name
|
|
542
|
+
description: ruvectorPlan.intent,
|
|
543
|
+
status: 'approved', // Persisted plans are considered approved
|
|
544
|
+
manifest_query: ruvectorPlan.intent,
|
|
545
|
+
created_at: ruvectorPlan.created_at,
|
|
546
|
+
updated_at: ruvectorPlan.created_at,
|
|
547
|
+
version: 1,
|
|
548
|
+
metadata: {
|
|
549
|
+
org_id: ruvectorPlan.org_id,
|
|
550
|
+
user_id: ruvectorPlan.user_id,
|
|
551
|
+
checksum: ruvectorPlan.checksum,
|
|
552
|
+
full_plan: ruvectorPlan.plan,
|
|
553
|
+
},
|
|
554
|
+
};
|
|
555
|
+
return {
|
|
556
|
+
plan,
|
|
557
|
+
found: true,
|
|
558
|
+
timing: Date.now() - startTime,
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
catch (error) {
|
|
562
|
+
// Handle 404 - plan not found
|
|
563
|
+
if (error instanceof CLIError && error.message.includes('404')) {
|
|
564
|
+
return {
|
|
565
|
+
plan: null,
|
|
566
|
+
found: false,
|
|
567
|
+
timing: Date.now() - startTime,
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
// For other errors, check if it's a not-found scenario
|
|
571
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
572
|
+
if (errorMessage.includes('not found') || errorMessage.includes('404')) {
|
|
573
|
+
return {
|
|
574
|
+
plan: null,
|
|
575
|
+
found: false,
|
|
576
|
+
timing: Date.now() - startTime,
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
// Re-throw for genuine errors
|
|
580
|
+
throw new CLIError({
|
|
581
|
+
code: 'ECLI-PLAN-RETRIEVE',
|
|
582
|
+
category: 'NETWORK_ERROR',
|
|
583
|
+
message: `Failed to retrieve plan from storage: ${errorMessage}`,
|
|
584
|
+
details: { plan_id: input.id },
|
|
585
|
+
module: 'plan',
|
|
586
|
+
correlationId,
|
|
587
|
+
recoverable: true,
|
|
588
|
+
exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Delete a plan
|
|
594
|
+
*/
|
|
595
|
+
/**
|
|
596
|
+
* Delete a plan from Ruvector storage.
|
|
597
|
+
*/
|
|
598
|
+
export async function executePlanDeleteCommand(input, options) {
|
|
599
|
+
const startTime = Date.now();
|
|
600
|
+
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
601
|
+
// Authentication required
|
|
602
|
+
await assertAuthenticated(correlationId);
|
|
603
|
+
// UUID validation
|
|
604
|
+
assertUUID(input.id, correlationId);
|
|
605
|
+
// Delete from Ruvector
|
|
606
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
607
|
+
const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
608
|
+
try {
|
|
609
|
+
await ruvectorAdapter.deletePlan(input.id);
|
|
610
|
+
return {
|
|
611
|
+
deleted: true,
|
|
612
|
+
id: input.id,
|
|
613
|
+
timing: Date.now() - startTime,
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
catch (error) {
|
|
617
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
618
|
+
// Handle not found
|
|
619
|
+
if (errorMessage.includes('not found') || errorMessage.includes('404')) {
|
|
620
|
+
throw new CLIError({
|
|
621
|
+
code: 'ECLI-PLAN-NOT-FOUND',
|
|
622
|
+
category: 'INPUT_ERROR',
|
|
623
|
+
message: `Plan not found: ${input.id}`,
|
|
624
|
+
details: { id: input.id },
|
|
625
|
+
module: 'plan',
|
|
626
|
+
correlationId,
|
|
627
|
+
recoverable: false,
|
|
628
|
+
exitCode: PLAN_EXIT_CODES.NOT_FOUND,
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
throw new CLIError({
|
|
632
|
+
code: 'ECLI-PLAN-DELETE',
|
|
633
|
+
category: 'NETWORK_ERROR',
|
|
634
|
+
message: `Failed to delete plan: ${errorMessage}`,
|
|
635
|
+
details: { plan_id: input.id },
|
|
636
|
+
module: 'plan',
|
|
637
|
+
correlationId,
|
|
638
|
+
recoverable: true,
|
|
639
|
+
exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Approve a plan (advisory execution marker - no real execution)
|
|
645
|
+
*/
|
|
646
|
+
export async function executePlanApproveCommand(input, options) {
|
|
647
|
+
const startTime = Date.now();
|
|
648
|
+
const correlationId = options.trace_id ?? crypto.randomUUID();
|
|
649
|
+
validatePlanId(input.id, correlationId);
|
|
650
|
+
const existing = loadPlan(input.id);
|
|
651
|
+
if (!existing) {
|
|
652
|
+
throw new CLIError({
|
|
653
|
+
code: 'ECLI-PLAN-NOT-FOUND',
|
|
654
|
+
category: 'INPUT_ERROR',
|
|
655
|
+
message: `Plan not found: ${input.id}`,
|
|
656
|
+
details: { id: input.id },
|
|
657
|
+
module: 'plan',
|
|
658
|
+
correlationId,
|
|
659
|
+
recoverable: false,
|
|
660
|
+
exitCode: PLAN_EXIT_CODES.NOT_FOUND,
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
const previousStatus = existing.status;
|
|
664
|
+
const now = new Date().toISOString();
|
|
665
|
+
// Advisory approval - mark as approved
|
|
666
|
+
const updated = {
|
|
667
|
+
...existing,
|
|
668
|
+
status: 'approved',
|
|
669
|
+
approved_at: now,
|
|
670
|
+
approved_by: input.approved_by ?? 'cli-user',
|
|
671
|
+
updated_at: now,
|
|
672
|
+
version: existing.version + 1,
|
|
673
|
+
};
|
|
674
|
+
savePlan(updated);
|
|
675
|
+
return {
|
|
676
|
+
plan: updated,
|
|
677
|
+
previous_status: previousStatus,
|
|
678
|
+
advisory: true,
|
|
679
|
+
timing: Date.now() - startTime,
|
|
680
|
+
};
|
|
681
|
+
}
|
|
143
682
|
//# sourceMappingURL=plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|