@llm-dev-ops/agentics-cli 1.3.8 → 1.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/adapters/base-adapter.d.ts +58 -1
  2. package/dist/adapters/base-adapter.d.ts.map +1 -1
  3. package/dist/adapters/base-adapter.js +110 -0
  4. package/dist/adapters/base-adapter.js.map +1 -1
  5. package/dist/cli/index.js +992 -16
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/commands/deploy.d.ts +95 -13
  8. package/dist/commands/deploy.d.ts.map +1 -1
  9. package/dist/commands/deploy.js +420 -14
  10. package/dist/commands/deploy.js.map +1 -1
  11. package/dist/commands/erp.d.ts +302 -0
  12. package/dist/commands/erp.d.ts.map +1 -0
  13. package/dist/commands/erp.js +1064 -0
  14. package/dist/commands/erp.js.map +1 -0
  15. package/dist/commands/export.d.ts +40 -13
  16. package/dist/commands/export.d.ts.map +1 -1
  17. package/dist/commands/export.js +434 -14
  18. package/dist/commands/export.js.map +1 -1
  19. package/dist/commands/index.d.ts +20 -12
  20. package/dist/commands/index.d.ts.map +1 -1
  21. package/dist/commands/index.js +10 -6
  22. package/dist/commands/index.js.map +1 -1
  23. package/dist/commands/inspect.d.ts +84 -18
  24. package/dist/commands/inspect.d.ts.map +1 -1
  25. package/dist/commands/inspect.js +585 -131
  26. package/dist/commands/inspect.js.map +1 -1
  27. package/dist/commands/logout.d.ts +34 -0
  28. package/dist/commands/logout.d.ts.map +1 -0
  29. package/dist/commands/logout.js +73 -0
  30. package/dist/commands/logout.js.map +1 -0
  31. package/dist/commands/plan.d.ts +147 -14
  32. package/dist/commands/plan.d.ts.map +1 -1
  33. package/dist/commands/plan.js +551 -16
  34. package/dist/commands/plan.js.map +1 -1
  35. package/dist/commands/policy.d.ts +136 -0
  36. package/dist/commands/policy.d.ts.map +1 -0
  37. package/dist/commands/policy.js +460 -0
  38. package/dist/commands/policy.js.map +1 -0
  39. package/dist/commands/quantify.d.ts +131 -13
  40. package/dist/commands/quantify.d.ts.map +1 -1
  41. package/dist/commands/quantify.js +425 -14
  42. package/dist/commands/quantify.js.map +1 -1
  43. package/dist/commands/simulate.d.ts +119 -13
  44. package/dist/commands/simulate.d.ts.map +1 -1
  45. package/dist/commands/simulate.js +363 -14
  46. package/dist/commands/simulate.js.map +1 -1
  47. package/dist/commands/usage.d.ts +110 -0
  48. package/dist/commands/usage.d.ts.map +1 -0
  49. package/dist/commands/usage.js +507 -0
  50. package/dist/commands/usage.js.map +1 -0
  51. package/dist/commands/whoami.d.ts +33 -0
  52. package/dist/commands/whoami.d.ts.map +1 -0
  53. package/dist/commands/whoami.js +93 -0
  54. package/dist/commands/whoami.js.map +1 -0
  55. package/dist/config/endpoints.d.ts.map +1 -1
  56. package/dist/config/endpoints.js +15 -0
  57. package/dist/config/endpoints.js.map +1 -1
  58. package/dist/modules/command-parser.d.ts +1 -1
  59. package/dist/modules/command-parser.d.ts.map +1 -1
  60. package/dist/modules/command-parser.js +6 -1
  61. package/dist/modules/command-parser.js.map +1 -1
  62. package/dist/modules/output-renderer.d.ts +1 -0
  63. package/dist/modules/output-renderer.d.ts.map +1 -1
  64. package/dist/modules/output-renderer.js +25 -1
  65. package/dist/modules/output-renderer.js.map +1 -1
  66. package/dist/types/index.d.ts +3 -0
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/index.js.map +1 -1
  69. package/package.json +4 -4
@@ -1,36 +1,231 @@
1
1
  /**
2
- * Plan Command
2
+ * Plan Command - Plan Management with Ruvector Persistence
3
3
  *
4
- * SPARC Pseudocode Reference: §2.1
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
- * FLOW:
7
- * 1. Parse arguments CommandObject
8
- * 2. VALIDATE request against contract (MUST pass before network call)
9
- * 3. Select manifest via agentics-org-manifests
10
- * 4. Create plan via agentics-simulation-planner
11
- * 5. VALIDATE response has execution_metadata (reject if missing)
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
- * CONTRACT ENFORCEMENT:
16
- * - Request validation happens BEFORE any network call
17
- * - Response validation requires execution_metadata
18
- * - No bypass flags or soft-fail behavior
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 { ManifestsAdapter, PlannerAdapter, } from '../adapters/base-adapter.js';
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,36 @@ 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 - BEST EFFORT
301
+ // Plans are generated once by the planner and persisted in Ruvector.
302
+ // If Ruvector is unavailable, log warning but return the plan.
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
+ let persistedToRuvector = false;
315
+ try {
316
+ await ruvectorAdapter.storePlan(ruvectorPlan);
317
+ persistedToRuvector = true;
318
+ }
319
+ catch {
320
+ // Best effort - log but don't fail the command
321
+ // Plan was generated successfully, return it even if storage fails
322
+ console.error(JSON.stringify({
323
+ level: 'WARN',
324
+ message: 'Failed to persist plan to Ruvector storage. Plan returned but not saved for future retrieval.',
325
+ plan_id: planRef.id,
326
+ correlationId,
327
+ }));
328
+ }
102
329
  // Record audit entry
103
330
  audit.record({
104
331
  command: 'plan',
@@ -107,6 +334,7 @@ export async function executePlanCommand(input, options) {
107
334
  dependencies: [
108
335
  { service: 'agentics-org-manifests', method: 'select', timestamp: new Date().toISOString(), duration_ms: result.timing.breakdown['select-manifest'] ?? 0, success: true },
109
336
  { service: 'agentics-simulation-planner', method: 'create', timestamp: new Date().toISOString(), duration_ms: result.timing.breakdown['create-plan'] ?? 0, success: true },
337
+ { service: 'ruvector-service', method: 'store', timestamp: new Date().toISOString(), duration_ms: 0, success: persistedToRuvector },
110
338
  ],
111
339
  duration_ms: result.timing.total,
112
340
  status: 'SUCCESS',
@@ -140,4 +368,311 @@ export async function executePlanCommand(input, options) {
140
368
  });
141
369
  }
142
370
  }
371
+ // ============================================================================
372
+ // Plan List Command Implementation (Local Storage)
373
+ // ============================================================================
374
+ /**
375
+ * List plans from local storage
376
+ */
377
+ /**
378
+ * List plans from Ruvector storage.
379
+ */
380
+ export async function executePlanListCommand(input, options) {
381
+ const startTime = Date.now();
382
+ const correlationId = options.trace_id ?? crypto.randomUUID();
383
+ // Authentication required
384
+ await assertAuthenticated(correlationId);
385
+ // List from Ruvector
386
+ const ruvectorConfig = loadEndpointConfig('ruvector-service');
387
+ const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
388
+ try {
389
+ const response = await ruvectorAdapter.listPlans({
390
+ org_id: process.env['AGENTICS_ORG_ID'],
391
+ limit: input.limit,
392
+ });
393
+ const ruvectorPlans = response.body?.plans ?? [];
394
+ // Map to PlanSummary for backward compatibility
395
+ let summaries = ruvectorPlans.map(p => ({
396
+ id: p.id,
397
+ name: p.intent.slice(0, 100),
398
+ status: 'approved', // Persisted plans are approved
399
+ created_at: p.created_at,
400
+ manifest_query: p.intent,
401
+ }));
402
+ // Apply status filter (client-side since Ruvector may not support it)
403
+ if (input.status) {
404
+ summaries = summaries.filter(p => p.status === input.status);
405
+ }
406
+ // Sort by created_at descending
407
+ summaries.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
408
+ // Apply limit
409
+ if (input.limit && input.limit > 0) {
410
+ summaries = summaries.slice(0, input.limit);
411
+ }
412
+ return {
413
+ plans: summaries,
414
+ count: summaries.length,
415
+ timing: Date.now() - startTime,
416
+ };
417
+ }
418
+ catch (error) {
419
+ const errorMessage = error instanceof Error ? error.message : String(error);
420
+ throw new CLIError({
421
+ code: 'ECLI-PLAN-LIST',
422
+ category: 'NETWORK_ERROR',
423
+ message: `Failed to list plans: ${errorMessage}`,
424
+ module: 'plan',
425
+ correlationId,
426
+ recoverable: true,
427
+ exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
428
+ });
429
+ }
430
+ }
431
+ /**
432
+ * Format plans list for human-readable display
433
+ */
434
+ export function formatPlansListForDisplay(plans) {
435
+ if (plans.length === 0) {
436
+ return 'No plans found.';
437
+ }
438
+ const lines = [];
439
+ lines.push(`Found ${plans.length} plan${plans.length === 1 ? '' : 's'}:`);
440
+ lines.push('');
441
+ for (const plan of plans) {
442
+ lines.push(` ${plan.id} - ${plan.name} [${plan.status}]`);
443
+ lines.push(` Created: ${new Date(plan.created_at).toLocaleString()}`);
444
+ if (plan.manifest_query) {
445
+ lines.push(` Query: ${plan.manifest_query}`);
446
+ }
447
+ lines.push('');
448
+ }
449
+ return lines.join('\n');
450
+ }
451
+ // ============================================================================
452
+ // CRUD Command Implementations
453
+ // ============================================================================
454
+ /**
455
+ * Create a new plan record
456
+ */
457
+ export async function executePlanCreateCommand(input, options) {
458
+ const startTime = Date.now();
459
+ const correlationId = options.trace_id ?? crypto.randomUUID();
460
+ validatePlanName(input.name, correlationId);
461
+ const now = new Date().toISOString();
462
+ const plan = {
463
+ id: generatePlanId(),
464
+ name: input.name.trim(),
465
+ description: input.description?.trim() ?? '',
466
+ status: 'draft',
467
+ manifest_query: input.manifest_query,
468
+ created_at: now,
469
+ updated_at: now,
470
+ version: 1,
471
+ metadata: input.metadata,
472
+ };
473
+ try {
474
+ savePlan(plan);
475
+ }
476
+ catch (error) {
477
+ throw new CLIError({
478
+ code: 'ECLI-PLAN-IO-001',
479
+ category: 'INTERNAL_ERROR',
480
+ message: 'Failed to save plan',
481
+ details: { error: error instanceof Error ? error.message : String(error) },
482
+ module: 'plan',
483
+ correlationId,
484
+ recoverable: false,
485
+ exitCode: PLAN_EXIT_CODES.IO_ERROR,
486
+ });
487
+ }
488
+ return {
489
+ plan,
490
+ timing: Date.now() - startTime,
491
+ };
492
+ }
493
+ /**
494
+ * Inspect a specific plan by ID
495
+ */
496
+ /**
497
+ * Inspect a specific plan by ID.
498
+ *
499
+ * CRITICAL: This is RETRIEVAL-ONLY from Ruvector.
500
+ * - MUST NOT call planner
501
+ * - MUST NOT interpret ID as intent
502
+ * - MUST validate UUID format
503
+ * - MUST require authentication
504
+ */
505
+ export async function executePlanInspectCommand(input, options) {
506
+ const startTime = Date.now();
507
+ const correlationId = options.trace_id ?? crypto.randomUUID();
508
+ // ============================================================================
509
+ // AUTHENTICATION CHECK - REQUIRED
510
+ // ============================================================================
511
+ await assertAuthenticated(correlationId);
512
+ // ============================================================================
513
+ // UUID VALIDATION - REQUIRED
514
+ // Prevents treating ID as intent (the broken behavior we're fixing)
515
+ // ============================================================================
516
+ assertUUID(input.id, correlationId);
517
+ // ============================================================================
518
+ // RUVECTOR RETRIEVAL - NO PLANNER CALLS
519
+ // Plans are retrieved from Ruvector only. Never call the planner here.
520
+ // ============================================================================
521
+ const ruvectorConfig = loadEndpointConfig('ruvector-service');
522
+ const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
523
+ try {
524
+ const response = await ruvectorAdapter.getPlan(input.id);
525
+ // Convert Ruvector response to PlanRecord format
526
+ const ruvectorPlan = response.body;
527
+ if (!ruvectorPlan || !ruvectorPlan.id) {
528
+ return {
529
+ plan: null,
530
+ found: false,
531
+ timing: Date.now() - startTime,
532
+ };
533
+ }
534
+ // Map RuvectorPlan to legacy PlanRecord for backward compatibility
535
+ const plan = {
536
+ id: ruvectorPlan.id,
537
+ name: ruvectorPlan.intent.slice(0, 100), // Use intent as name
538
+ description: ruvectorPlan.intent,
539
+ status: 'approved', // Persisted plans are considered approved
540
+ manifest_query: ruvectorPlan.intent,
541
+ created_at: ruvectorPlan.created_at,
542
+ updated_at: ruvectorPlan.created_at,
543
+ version: 1,
544
+ metadata: {
545
+ org_id: ruvectorPlan.org_id,
546
+ user_id: ruvectorPlan.user_id,
547
+ checksum: ruvectorPlan.checksum,
548
+ full_plan: ruvectorPlan.plan,
549
+ },
550
+ };
551
+ return {
552
+ plan,
553
+ found: true,
554
+ timing: Date.now() - startTime,
555
+ };
556
+ }
557
+ catch (error) {
558
+ // Handle 404 - plan not found
559
+ if (error instanceof CLIError && error.message.includes('404')) {
560
+ return {
561
+ plan: null,
562
+ found: false,
563
+ timing: Date.now() - startTime,
564
+ };
565
+ }
566
+ // For other errors, check if it's a not-found scenario
567
+ const errorMessage = error instanceof Error ? error.message : String(error);
568
+ if (errorMessage.includes('not found') || errorMessage.includes('404')) {
569
+ return {
570
+ plan: null,
571
+ found: false,
572
+ timing: Date.now() - startTime,
573
+ };
574
+ }
575
+ // Re-throw for genuine errors
576
+ throw new CLIError({
577
+ code: 'ECLI-PLAN-RETRIEVE',
578
+ category: 'NETWORK_ERROR',
579
+ message: `Failed to retrieve plan from storage: ${errorMessage}`,
580
+ details: { plan_id: input.id },
581
+ module: 'plan',
582
+ correlationId,
583
+ recoverable: true,
584
+ exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
585
+ });
586
+ }
587
+ }
588
+ /**
589
+ * Delete a plan
590
+ */
591
+ /**
592
+ * Delete a plan from Ruvector storage.
593
+ */
594
+ export async function executePlanDeleteCommand(input, options) {
595
+ const startTime = Date.now();
596
+ const correlationId = options.trace_id ?? crypto.randomUUID();
597
+ // Authentication required
598
+ await assertAuthenticated(correlationId);
599
+ // UUID validation
600
+ assertUUID(input.id, correlationId);
601
+ // Delete from Ruvector
602
+ const ruvectorConfig = loadEndpointConfig('ruvector-service');
603
+ const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
604
+ try {
605
+ await ruvectorAdapter.deletePlan(input.id);
606
+ return {
607
+ deleted: true,
608
+ id: input.id,
609
+ timing: Date.now() - startTime,
610
+ };
611
+ }
612
+ catch (error) {
613
+ const errorMessage = error instanceof Error ? error.message : String(error);
614
+ // Handle not found
615
+ if (errorMessage.includes('not found') || errorMessage.includes('404')) {
616
+ throw new CLIError({
617
+ code: 'ECLI-PLAN-NOT-FOUND',
618
+ category: 'INPUT_ERROR',
619
+ message: `Plan not found: ${input.id}`,
620
+ details: { id: input.id },
621
+ module: 'plan',
622
+ correlationId,
623
+ recoverable: false,
624
+ exitCode: PLAN_EXIT_CODES.NOT_FOUND,
625
+ });
626
+ }
627
+ throw new CLIError({
628
+ code: 'ECLI-PLAN-DELETE',
629
+ category: 'NETWORK_ERROR',
630
+ message: `Failed to delete plan: ${errorMessage}`,
631
+ details: { plan_id: input.id },
632
+ module: 'plan',
633
+ correlationId,
634
+ recoverable: true,
635
+ exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
636
+ });
637
+ }
638
+ }
639
+ /**
640
+ * Approve a plan (advisory execution marker - no real execution)
641
+ */
642
+ export async function executePlanApproveCommand(input, options) {
643
+ const startTime = Date.now();
644
+ const correlationId = options.trace_id ?? crypto.randomUUID();
645
+ validatePlanId(input.id, correlationId);
646
+ const existing = loadPlan(input.id);
647
+ if (!existing) {
648
+ throw new CLIError({
649
+ code: 'ECLI-PLAN-NOT-FOUND',
650
+ category: 'INPUT_ERROR',
651
+ message: `Plan not found: ${input.id}`,
652
+ details: { id: input.id },
653
+ module: 'plan',
654
+ correlationId,
655
+ recoverable: false,
656
+ exitCode: PLAN_EXIT_CODES.NOT_FOUND,
657
+ });
658
+ }
659
+ const previousStatus = existing.status;
660
+ const now = new Date().toISOString();
661
+ // Advisory approval - mark as approved
662
+ const updated = {
663
+ ...existing,
664
+ status: 'approved',
665
+ approved_at: now,
666
+ approved_by: input.approved_by ?? 'cli-user',
667
+ updated_at: now,
668
+ version: existing.version + 1,
669
+ };
670
+ savePlan(updated);
671
+ return {
672
+ plan: updated,
673
+ previous_status: previousStatus,
674
+ advisory: true,
675
+ timing: Date.now() - startTime,
676
+ };
677
+ }
143
678
  //# 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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"}