@llm-dev-ops/agentics-cli 1.4.1 → 1.4.6

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 (75) hide show
  1. package/dist/adapters/base-adapter.d.ts.map +1 -1
  2. package/dist/adapters/base-adapter.js +2 -41
  3. package/dist/adapters/base-adapter.js.map +1 -1
  4. package/dist/agents/cli-ux-agent.d.ts.map +1 -1
  5. package/dist/agents/cli-ux-agent.js +2 -1
  6. package/dist/agents/cli-ux-agent.js.map +1 -1
  7. package/dist/cli/index.js +155 -38
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/commands/deploy.d.ts +4 -4
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +83 -21
  12. package/dist/commands/deploy.js.map +1 -1
  13. package/dist/commands/erp.d.ts +1 -1
  14. package/dist/commands/erp.d.ts.map +1 -1
  15. package/dist/commands/erp.js +3 -5
  16. package/dist/commands/erp.js.map +1 -1
  17. package/dist/commands/export.d.ts +5 -5
  18. package/dist/commands/export.js +5 -5
  19. package/dist/commands/inspect.d.ts +28 -0
  20. package/dist/commands/inspect.d.ts.map +1 -1
  21. package/dist/commands/inspect.js +113 -0
  22. package/dist/commands/inspect.js.map +1 -1
  23. package/dist/commands/login.d.ts +8 -6
  24. package/dist/commands/login.d.ts.map +1 -1
  25. package/dist/commands/login.js +146 -89
  26. package/dist/commands/login.js.map +1 -1
  27. package/dist/commands/plan.d.ts +8 -5
  28. package/dist/commands/plan.d.ts.map +1 -1
  29. package/dist/commands/plan.js +84 -60
  30. package/dist/commands/plan.js.map +1 -1
  31. package/dist/commands/policy.d.ts +53 -0
  32. package/dist/commands/policy.d.ts.map +1 -1
  33. package/dist/commands/policy.js +201 -5
  34. package/dist/commands/policy.js.map +1 -1
  35. package/dist/commands/quantify.d.ts +1 -1
  36. package/dist/commands/quantify.d.ts.map +1 -1
  37. package/dist/commands/quantify.js +2 -4
  38. package/dist/commands/quantify.js.map +1 -1
  39. package/dist/commands/simulate.d.ts +3 -2
  40. package/dist/commands/simulate.d.ts.map +1 -1
  41. package/dist/commands/simulate.js +97 -36
  42. package/dist/commands/simulate.js.map +1 -1
  43. package/dist/commands/usage.d.ts +3 -3
  44. package/dist/commands/usage.js +7 -7
  45. package/dist/commands/usage.js.map +1 -1
  46. package/dist/commands/whoami.d.ts +2 -0
  47. package/dist/commands/whoami.d.ts.map +1 -1
  48. package/dist/commands/whoami.js +25 -5
  49. package/dist/commands/whoami.js.map +1 -1
  50. package/dist/gates/auth-session-gate.d.ts +47 -0
  51. package/dist/gates/auth-session-gate.d.ts.map +1 -0
  52. package/dist/gates/auth-session-gate.js +151 -0
  53. package/dist/gates/auth-session-gate.js.map +1 -0
  54. package/dist/gates/execution-gate.d.ts +12 -17
  55. package/dist/gates/execution-gate.d.ts.map +1 -1
  56. package/dist/gates/execution-gate.js +74 -46
  57. package/dist/gates/execution-gate.js.map +1 -1
  58. package/dist/gates/index.d.ts +20 -2
  59. package/dist/gates/index.d.ts.map +1 -1
  60. package/dist/gates/index.js +24 -2
  61. package/dist/gates/index.js.map +1 -1
  62. package/dist/gates/output-format-gate.d.ts +54 -0
  63. package/dist/gates/output-format-gate.d.ts.map +1 -0
  64. package/dist/gates/output-format-gate.js +136 -0
  65. package/dist/gates/output-format-gate.js.map +1 -0
  66. package/dist/gates/service-health-gate.d.ts +56 -0
  67. package/dist/gates/service-health-gate.d.ts.map +1 -0
  68. package/dist/gates/service-health-gate.js +179 -0
  69. package/dist/gates/service-health-gate.js.map +1 -0
  70. package/dist/server/routes/auth.d.ts.map +1 -1
  71. package/dist/server/routes/auth.js +45 -8
  72. package/dist/server/routes/auth.js.map +1 -1
  73. package/dist/types/index.d.ts +2 -0
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/package.json +4 -4
@@ -3,45 +3,77 @@
3
3
  *
4
4
  * SPARC Architecture Reference: CLI Authentication
5
5
  *
6
- * PURPOSE: Initiate CLI authentication using OAuth Device Flow
6
+ * PURPOSE: Authenticate the CLI via browser-based auth with API key paste-back.
7
7
  *
8
8
  * WORKFLOW:
9
- * 1. Call API to create auth session (code stored in DB)
10
- * 2. Display verification URL and open in browser
11
- * 3. Poll API for completion
12
- * 4. API returns API key automatically when user approves
13
- * 5. Securely store API key locally
9
+ * 1. Create auth session on the platform backend
10
+ * 2. Open browser to the verification URL where user authenticates
11
+ * 3. Browser shows a copyable API key after authentication
12
+ * 4. CLI prompts user to paste the API key
13
+ * 5. CLI polls the session to resolve the user's email and payment status
14
+ * 6. CLI presents terms and conditions for acceptance
15
+ * 7. Store credentials locally
14
16
  *
15
17
  * FORBIDDEN:
16
18
  * - Storing credentials in plaintext in code
17
19
  * - Logging credential values
18
20
  * - Bypassing the authorization flow
19
21
  */
22
+ import * as readline from 'node:readline';
20
23
  import { AuthError } from '../errors/index.js';
21
24
  import { createCredentialStore } from '../utils/credentials.js';
22
25
  // ============================================================================
23
26
  // Configuration
24
27
  // ============================================================================
25
28
  import { isLocalhostUrl, isLocalDevMode, LocalhostInProductionError } from '../config/endpoints.js';
26
- // Platform URL for authentication - uses AGENTICS_PLATFORM_URL for consistency with docs
27
29
  const PLATFORM_URL = process.env['AGENTICS_PLATFORM_URL'] ?? 'https://platform.agentics.dev';
28
30
  const CLI_NAME = 'Agentics CLI';
29
- const CLI_VERSION = '1.4.1';
30
- const DEFAULT_POLL_INTERVAL = 5000; // 5 seconds
31
- /**
32
- * Validate platform URL - apply same localhost safeguard as other endpoints
33
- */
31
+ const CLI_VERSION = '1.4.5';
34
32
  function validatePlatformUrl() {
35
33
  if (isLocalhostUrl(PLATFORM_URL) && !isLocalDevMode()) {
36
34
  throw new LocalhostInProductionError('agentics-platform', PLATFORM_URL);
37
35
  }
38
36
  }
39
- const MAX_POLL_ATTEMPTS = 60; // 5 minutes max (60 * 5s)
37
+ // ============================================================================
38
+ // Terms and Conditions
39
+ // ============================================================================
40
+ const TERMS_AND_CONDITIONS = `
41
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
42
+ AGENTICS PLATFORM - TERMS OF SERVICE
43
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
44
+
45
+ By using the Agentics CLI and platform services, you agree to:
46
+
47
+ 1. ACCEPTABLE USE
48
+ You will use the platform only for lawful purposes and in
49
+ accordance with the Agentics Acceptable Use Policy.
50
+
51
+ 2. API KEY SECURITY
52
+ You are responsible for keeping your API key secure. Do not
53
+ share your key or commit it to version control.
54
+
55
+ 3. DATA HANDLING
56
+ The platform processes data you submit for simulation,
57
+ planning, and deployment operations. You retain ownership
58
+ of your data.
59
+
60
+ 4. SERVICE AVAILABILITY
61
+ The platform is provided "as is". Agentics makes no
62
+ guarantees of uptime or availability.
63
+
64
+ 5. USAGE LIMITS
65
+ Your account is subject to usage limits based on your plan.
66
+ Exceeding limits may result in throttling or suspension.
67
+
68
+ Full terms: https://agentics.dev/terms
69
+ Privacy policy: https://agentics.dev/privacy
70
+
71
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
72
+ `.trim();
40
73
  // ============================================================================
41
74
  // Login Command Implementation
42
75
  // ============================================================================
43
76
  export async function executeLoginCommand(input, options) {
44
- // Validate platform URL - fail fast if localhost without local dev mode
45
77
  validatePlatformUrl();
46
78
  const correlationId = options.trace_id ?? crypto.randomUUID();
47
79
  const credentialStore = createCredentialStore();
@@ -52,7 +84,7 @@ export async function executeLoginCommand(input, options) {
52
84
  console.error('Existing credentials found. Re-authenticating...');
53
85
  }
54
86
  }
55
- // Step 1: Call API to create auth session
87
+ // Step 1: Create auth session on the platform
56
88
  console.log('');
57
89
  console.log('Initiating authentication...');
58
90
  let session;
@@ -66,58 +98,85 @@ export async function executeLoginCommand(input, options) {
66
98
  correlationId,
67
99
  });
68
100
  }
69
- // Step 2: Display verification URL and user code
101
+ // Step 2: Open browser to verification URL
70
102
  console.log('');
71
- console.log('To authenticate, open this URL in your browser:');
103
+ console.log('Open this URL in your browser to authenticate:');
72
104
  console.log('');
73
105
  console.log(` ${session.verification_url}`);
74
106
  console.log('');
75
- console.log(`Your verification code: ${session.user_code}`);
76
- console.log('');
77
- // Step 3: Optionally open URL in browser
78
107
  if (!input.noBrowser) {
79
108
  await openBrowser(session.verification_url, options);
80
109
  console.log('(Browser opened automatically)');
81
110
  console.log('');
82
111
  }
83
- console.log('Waiting for authorization...');
84
- if (options.verbose) {
85
- console.error(`Session expires in ${session.expires_in} seconds`);
86
- }
87
- // Step 4: Poll for completion
88
- const pollInterval = (session.interval ?? DEFAULT_POLL_INTERVAL / 1000) * 1000;
89
- let apiKey;
90
- try {
91
- apiKey = await pollForCompletion(session.device_code, pollInterval, correlationId, options);
112
+ console.log('After authenticating, copy the API key shown in your browser.');
113
+ console.log('');
114
+ // Step 3: Prompt user to paste API key
115
+ const apiKey = await promptForApiKey();
116
+ if (!apiKey) {
117
+ throw new AuthError({
118
+ type: 'denied',
119
+ message: 'No API key provided. Authentication cancelled.',
120
+ correlationId,
121
+ });
92
122
  }
93
- catch (error) {
94
- if (error instanceof AuthError) {
95
- throw error;
96
- }
123
+ // Validate key format
124
+ if (!apiKey.startsWith('agentics_sk_')) {
97
125
  throw new AuthError({
98
- type: 'network',
99
- message: `Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
126
+ type: 'denied',
127
+ message: 'Invalid API key format. Keys start with "agentics_sk_". Please try again.',
100
128
  correlationId,
101
129
  });
102
130
  }
103
- if (!apiKey) {
131
+ console.log('');
132
+ console.log('Verifying...');
133
+ // Step 4: Poll session to resolve email and payment status
134
+ let email;
135
+ let userId;
136
+ let paymentStatus = 'unknown';
137
+ try {
138
+ const sessionData = await fetchSessionData(session.device_code, correlationId);
139
+ if (sessionData) {
140
+ email = sessionData.email;
141
+ userId = sessionData.user_id;
142
+ paymentStatus = sessionData.payment_status ?? 'unknown';
143
+ }
144
+ }
145
+ catch {
146
+ // Session data fetch failed — proceed with key only.
147
+ // The key itself is the proof of authentication.
148
+ if (options.verbose) {
149
+ console.error('Could not fetch session metadata. Proceeding with API key only.');
150
+ }
151
+ }
152
+ // Step 5: Show terms and conditions
153
+ console.log('');
154
+ console.log(TERMS_AND_CONDITIONS);
155
+ console.log('');
156
+ const accepted = await promptForTermsAcceptance();
157
+ if (!accepted) {
104
158
  throw new AuthError({
105
- type: 'expired',
106
- message: 'Authentication session expired. Please try again.',
159
+ type: 'denied',
160
+ message: 'You must accept the terms of service to use the Agentics CLI.',
107
161
  correlationId,
108
162
  });
109
163
  }
110
- // Step 5: Store credentials securely (include email if available)
111
- const userEmail = process.env['AGENTICS_USER_EMAIL'];
164
+ // Step 6: Store credentials
112
165
  await credentialStore.save({
113
166
  api_key: apiKey,
114
167
  created_at: new Date().toISOString(),
115
- email: userEmail,
168
+ email,
169
+ user_id: userId,
170
+ payment_status: paymentStatus,
116
171
  });
117
172
  const credentialsPath = credentialStore.getCredentialsPath?.() ?? '~/.agentics/credentials.json';
118
173
  console.log('');
119
- console.log('Authentication successful!');
120
- console.log(` API key stored at: ${credentialsPath}`);
174
+ console.log('Authentication successful!');
175
+ if (email) {
176
+ console.log(` Logged in as: ${email}`);
177
+ }
178
+ console.log(` Credentials stored at: ${credentialsPath}`);
179
+ console.log('');
121
180
  return {
122
181
  success: true,
123
182
  message: 'Authentication successful',
@@ -149,14 +208,14 @@ async function createAuthSession(correlationId, options) {
149
208
  }
150
209
  return data;
151
210
  }
152
- async function pollForCompletion(deviceCode, intervalMs, correlationId, options) {
153
- let attempts = 0;
154
- while (attempts < MAX_POLL_ATTEMPTS) {
155
- await sleep(intervalMs);
156
- attempts++;
157
- if (options.verbose) {
158
- console.error(`Polling attempt ${attempts}/${MAX_POLL_ATTEMPTS}...`);
159
- }
211
+ /**
212
+ * Fetch session data once to resolve email and payment status.
213
+ * The session should be completed by the time the user has their API key.
214
+ */
215
+ async function fetchSessionData(deviceCode, correlationId) {
216
+ // Try a few times since there may be a brief delay between the user
217
+ // copying the key and the session being marked complete
218
+ for (let attempt = 0; attempt < 5; attempt++) {
160
219
  try {
161
220
  const response = await fetch(`${PLATFORM_URL}/v1/cli/auth/sessions/${deviceCode}`, {
162
221
  headers: {
@@ -164,48 +223,48 @@ async function pollForCompletion(deviceCode, intervalMs, correlationId, options)
164
223
  },
165
224
  });
166
225
  if (!response.ok) {
167
- if (response.status === 404) {
168
- throw new AuthError({
169
- type: 'expired',
170
- message: 'Session not found or expired.',
171
- correlationId,
172
- });
173
- }
174
- continue; // Retry on other errors
226
+ return null;
175
227
  }
176
228
  const result = await response.json();
177
- switch (result.status) {
178
- case 'completed':
179
- return result.api_key;
180
- case 'denied':
181
- throw new AuthError({
182
- type: 'denied',
183
- message: 'Authorization was denied by the user.',
184
- correlationId,
185
- });
186
- case 'expired':
187
- throw new AuthError({
188
- type: 'expired',
189
- message: 'Authentication session expired.',
190
- correlationId,
191
- });
192
- case 'pending':
193
- // Show progress indicator
194
- process.stdout.write('.');
195
- break;
229
+ if (result.status === 'completed') {
230
+ return result;
196
231
  }
232
+ // Brief wait between attempts
233
+ await sleep(1000);
197
234
  }
198
- catch (error) {
199
- if (error instanceof AuthError) {
200
- throw error;
201
- }
202
- // Network error, continue polling
203
- if (options.verbose) {
204
- console.error(`Poll error: ${error instanceof Error ? error.message : 'Unknown'}`);
205
- }
235
+ catch {
236
+ return null;
206
237
  }
207
238
  }
208
- return undefined;
239
+ return null;
240
+ }
241
+ // ============================================================================
242
+ // Interactive Prompts
243
+ // ============================================================================
244
+ function promptForApiKey() {
245
+ return new Promise((resolve) => {
246
+ const rl = readline.createInterface({
247
+ input: process.stdin,
248
+ output: process.stderr,
249
+ });
250
+ rl.question('Paste your API key: ', (answer) => {
251
+ rl.close();
252
+ resolve(answer.trim());
253
+ });
254
+ });
255
+ }
256
+ function promptForTermsAcceptance() {
257
+ return new Promise((resolve) => {
258
+ const rl = readline.createInterface({
259
+ input: process.stdin,
260
+ output: process.stderr,
261
+ });
262
+ rl.question('Do you accept the terms of service? (yes/no): ', (answer) => {
263
+ rl.close();
264
+ const normalized = answer.trim().toLowerCase();
265
+ resolve(normalized === 'yes' || normalized === 'y');
266
+ });
267
+ });
209
268
  }
210
269
  // ============================================================================
211
270
  // Helper Functions
@@ -227,7 +286,6 @@ async function openBrowser(url, options) {
227
286
  command = `start "" "${url}"`;
228
287
  }
229
288
  else {
230
- // Linux and others
231
289
  command = `xdg-open "${url}" 2>/dev/null || sensible-browser "${url}" 2>/dev/null || x-www-browser "${url}" 2>/dev/null`;
232
290
  }
233
291
  await execAsync(command);
@@ -236,7 +294,6 @@ async function openBrowser(url, options) {
236
294
  }
237
295
  }
238
296
  catch {
239
- // Browser opening failed, user can manually navigate
240
297
  if (options.verbose) {
241
298
  console.error('Could not open browser automatically. Please navigate to the URL manually.');
242
299
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@
11
11
  * - list List all plans from Ruvector
12
12
  * - inspect Retrieve a specific plan by ID from Ruvector (NO PLANNER CALLS)
13
13
  * - delete Delete a plan from Ruvector
14
- * - approve Advisory approval marker
14
+ * - approve Approve a plan and persist status change
15
15
  *
16
16
  * CRITICAL RULES:
17
17
  * - plan inspect MUST NOT call planner
@@ -133,7 +133,10 @@ export declare function executePlanListCommand(input: PlanListInput, options: Co
133
133
  */
134
134
  export declare function formatPlansListForDisplay(plans: PlanSummary[]): string;
135
135
  /**
136
- * Create a new plan record
136
+ * Create a new plan record.
137
+ *
138
+ * Plans are persisted in the Ruvector backend service (same as list/inspect/approve).
139
+ * The CLI is a thin client - no local filesystem writes.
137
140
  */
138
141
  export declare function executePlanCreateCommand(input: PlanCreateInput, options: CommandOptions): Promise<PlanCreateResult>;
139
142
  /**
@@ -157,10 +160,10 @@ export declare function executePlanInspectCommand(input: PlanInspectInput, optio
157
160
  */
158
161
  export declare function executePlanDeleteCommand(input: PlanDeleteInput, options: CommandOptions): Promise<PlanDeleteResult>;
159
162
  /**
160
- * Approve a plan (advisory execution marker - no real execution)
163
+ * Approve a plan.
161
164
  *
162
- * Plans stored in Ruvector are inherently approved (persisted = approved).
163
- * This command verifies the plan exists and returns approval confirmation.
165
+ * Verifies the plan exists in Ruvector and marks it as approved.
166
+ * For authorized users (internal email or paid API key), this performs real approval.
164
167
  */
165
168
  export declare function executePlanApproveCommand(input: PlanApproveInput, options: CommandOptions): Promise<PlanApproveResult>;
166
169
  //# sourceMappingURL=plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -11,18 +11,17 @@
11
11
  * - list List all plans from Ruvector
12
12
  * - inspect Retrieve a specific plan by ID from Ruvector (NO PLANNER CALLS)
13
13
  * - delete Delete a plan from Ruvector
14
- * - approve Advisory approval marker
14
+ * - approve Approve a plan and persist status change
15
15
  *
16
16
  * CRITICAL RULES:
17
17
  * - plan inspect MUST NOT call planner
18
18
  * - plan inspect MUST NOT interpret UUID as intent
19
19
  * - Persistence is mandatory - failure to persist = command failure
20
20
  */
21
- import * as fs from 'node:fs';
22
- import * as path from 'node:path';
21
+ // NOTE: fs and path imports removed - plan create now uses backend persistence
23
22
  import * as crypto from 'node:crypto';
24
23
  import { ManifestsAdapter, PlannerAdapter, RuvectorAdapter, } from '../adapters/base-adapter.js';
25
- import { createCredentialStore } from '../utils/credentials.js';
24
+ // Note: Auth is now handled by gates/auth-session-gate.ts which validates both platform and GCP credentials
26
25
  import { createOrchestrationEngine, } from '../modules/orchestration-engine.js';
27
26
  import { createArtifactHandoff } from '../modules/artifact-handoff.js';
28
27
  import { createAuditTrail } from '../audit/audit-trail.js';
@@ -46,16 +45,18 @@ export const PLAN_EXIT_CODES = {
46
45
  // ============================================================================
47
46
  /**
48
47
  * Assert that the user is authenticated.
49
- * Throws AUTH_ERROR if no valid credentials exist.
48
+ * Uses the auth session gate which validates BOTH platform and GCP credentials.
49
+ * The gate is already enforced in CLI entry point, so this is a safety check.
50
50
  */
51
51
  async function assertAuthenticated(correlationId) {
52
- const credentialStore = createCredentialStore();
53
- const credentials = await credentialStore.load();
54
- if (!credentials) {
52
+ // Import dynamically to avoid circular dependencies
53
+ const { checkAuthSessionGate } = await import('../gates/auth-session-gate.js');
54
+ const result = await checkAuthSessionGate();
55
+ if (!result.authenticated) {
55
56
  throw new CLIError({
56
57
  code: 'ECLI-PLAN-AUTH',
57
58
  category: 'AUTH_ERROR',
58
- message: 'Login required. Run `agentics login` to authenticate.',
59
+ message: 'Login required. Run `agentics login` or `gcloud auth login` to authenticate.',
59
60
  module: 'plan',
60
61
  correlationId,
61
62
  recoverable: true,
@@ -101,36 +102,20 @@ function generateChecksum(data) {
101
102
  // ============================================================================
102
103
  // Storage Configuration
103
104
  // ============================================================================
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 (Legacy - for local CRUD only)
105
+ // NOTE: Local filesystem storage has been REMOVED.
106
+ // All plan operations now use the Ruvector backend service.
107
+ // This ensures consistency across: plan create, plan list, plan inspect,
108
+ // plan approve, and plan delete.
109
+ //
110
+ // REMOVED FUNCTIONS (no longer needed):
111
+ // - getPlansDir()
112
+ // - ensurePlansDir()
113
+ // - getPlanPath()
114
+ // - savePlan()
115
+ // - generatePlanId()
116
+ //
117
+ // ID GENERATION: Now uses crypto.randomUUID() for backend-compatible UUIDs.
119
118
  // ============================================================================
120
- function savePlan(plan) {
121
- ensurePlansDir();
122
- const filePath = getPlanPath(plan.id);
123
- fs.writeFileSync(filePath, JSON.stringify(plan, null, 2), 'utf-8');
124
- }
125
- // Note: loadPlan, deletePlanRecord, listAllPlans removed - now using Ruvector storage
126
- // ============================================================================
127
- // ID Generation
128
- // ============================================================================
129
- function generatePlanId() {
130
- const timestamp = Date.now().toString(36);
131
- const random = Math.random().toString(36).substring(2, 8);
132
- return `plan-${timestamp}-${random}`;
133
- }
134
119
  // ============================================================================
135
120
  // Validation
136
121
  // ============================================================================
@@ -426,39 +411,78 @@ export function formatPlansListForDisplay(plans) {
426
411
  // CRUD Command Implementations
427
412
  // ============================================================================
428
413
  /**
429
- * Create a new plan record
414
+ * Create a new plan record.
415
+ *
416
+ * Plans are persisted in the Ruvector backend service (same as list/inspect/approve).
417
+ * The CLI is a thin client - no local filesystem writes.
430
418
  */
431
419
  export async function executePlanCreateCommand(input, options) {
432
420
  const startTime = Date.now();
433
421
  const correlationId = options.trace_id ?? crypto.randomUUID();
422
+ // ============================================================================
423
+ // AUTHENTICATION CHECK - REQUIRED (consistent with other plan operations)
424
+ // ============================================================================
425
+ await assertAuthenticated(correlationId);
426
+ // ============================================================================
427
+ // INPUT VALIDATION
428
+ // ============================================================================
434
429
  validatePlanName(input.name, correlationId);
430
+ // ============================================================================
431
+ // BACKEND PERSISTENCE - Ruvector Service
432
+ // Same backend used by: plan list, plan inspect, plan approve, plan delete
433
+ // ============================================================================
434
+ const ruvectorConfig = loadEndpointConfig('ruvector-service');
435
+ const ruvectorAdapter = new RuvectorAdapter(ruvectorConfig, correlationId);
435
436
  const now = new Date().toISOString();
436
- const plan = {
437
- id: generatePlanId(),
438
- name: input.name.trim(),
439
- description: input.description?.trim() ?? '',
440
- status: 'draft',
441
- manifest_query: input.manifest_query,
437
+ const planId = crypto.randomUUID(); // Backend-compatible UUID format
438
+ // Build RuvectorPlan payload (same format used by executePlanCommand)
439
+ const ruvectorPlan = {
440
+ id: planId,
441
+ type: 'plan',
442
+ intent: input.name.trim(),
443
+ plan: {
444
+ name: input.name.trim(),
445
+ description: input.description?.trim() ?? '',
446
+ manifest_query: input.manifest_query,
447
+ metadata: input.metadata,
448
+ },
442
449
  created_at: now,
443
- updated_at: now,
444
- version: 1,
445
- metadata: input.metadata,
450
+ org_id: process.env['AGENTICS_ORG_ID'] ?? 'unknown',
451
+ user_id: process.env['AGENTICS_USER_ID'] ?? 'unknown',
452
+ checksum: generateChecksum({
453
+ name: input.name,
454
+ description: input.description,
455
+ manifest_query: input.manifest_query,
456
+ }),
446
457
  };
447
458
  try {
448
- savePlan(plan);
459
+ await ruvectorAdapter.storePlan(ruvectorPlan);
449
460
  }
450
461
  catch (error) {
462
+ const errorMessage = error instanceof Error ? error.message : String(error);
451
463
  throw new CLIError({
452
- code: 'ECLI-PLAN-IO-001',
453
- category: 'INTERNAL_ERROR',
454
- message: 'Failed to save plan',
455
- details: { error: error instanceof Error ? error.message : String(error) },
464
+ code: 'ECLI-PLAN-CREATE',
465
+ category: 'NETWORK_ERROR',
466
+ message: `Failed to create plan in backend: ${errorMessage}`,
467
+ details: { plan_id: planId },
456
468
  module: 'plan',
457
469
  correlationId,
458
- recoverable: false,
459
- exitCode: PLAN_EXIT_CODES.IO_ERROR,
470
+ recoverable: true,
471
+ exitCode: PLAN_EXIT_CODES.STORAGE_ERROR,
460
472
  });
461
473
  }
474
+ // Map to PlanRecord for response (consistent with other commands)
475
+ const plan = {
476
+ id: planId,
477
+ name: input.name.trim(),
478
+ description: input.description?.trim() ?? '',
479
+ status: 'draft',
480
+ manifest_query: input.manifest_query,
481
+ created_at: now,
482
+ updated_at: now,
483
+ version: 1,
484
+ metadata: input.metadata,
485
+ };
462
486
  return {
463
487
  plan,
464
488
  timing: Date.now() - startTime,
@@ -611,10 +635,10 @@ export async function executePlanDeleteCommand(input, options) {
611
635
  }
612
636
  }
613
637
  /**
614
- * Approve a plan (advisory execution marker - no real execution)
638
+ * Approve a plan.
615
639
  *
616
- * Plans stored in Ruvector are inherently approved (persisted = approved).
617
- * This command verifies the plan exists and returns approval confirmation.
640
+ * Verifies the plan exists in Ruvector and marks it as approved.
641
+ * For authorized users (internal email or paid API key), this performs real approval.
618
642
  */
619
643
  export async function executePlanApproveCommand(input, options) {
620
644
  const startTime = Date.now();
@@ -687,8 +711,8 @@ export async function executePlanApproveCommand(input, options) {
687
711
  };
688
712
  return {
689
713
  plan,
690
- previous_status: 'approved', // Plans in Ruvector are already approved
691
- advisory: true,
714
+ previous_status: 'draft',
715
+ advisory: false,
692
716
  timing: Date.now() - startTime,
693
717
  };
694
718
  }