@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
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Policy Command - Standalone CRUD Command for Policy Management
3
+ *
4
+ * ARCHITECTURE:
5
+ * - This is a TERMINAL command with its own control flow
6
+ * - Does NOT participate in orchestration pipelines
7
+ * - Uses local file-based persistence in .agentics/policies/
8
+ * - Has its own error handling and exit codes
9
+ *
10
+ * SUBCOMMANDS:
11
+ * - list List all policies
12
+ * - inspect Inspect a specific policy by ID
13
+ * - create Create a new policy
14
+ * - edit Edit an existing policy
15
+ * - delete Delete a policy
16
+ * - enable Enable a policy
17
+ * - disable Disable a policy
18
+ */
19
+ import type { CommandOptions } from '../types/index.js';
20
+ export declare const POLICY_EXIT_CODES: {
21
+ readonly SUCCESS: 0;
22
+ readonly INPUT_ERROR: 100;
23
+ readonly NOT_FOUND: 100;
24
+ readonly ALREADY_EXISTS: 100;
25
+ readonly INVALID_STATE: 100;
26
+ readonly IO_ERROR: 74;
27
+ readonly UNEXPECTED_ERROR: 1;
28
+ };
29
+ export interface Policy {
30
+ id: string;
31
+ name: string;
32
+ description: string;
33
+ type: PolicyType;
34
+ status: PolicyStatus;
35
+ rules: PolicyRule[];
36
+ created_at: string;
37
+ updated_at: string;
38
+ version: number;
39
+ metadata?: Record<string, unknown>;
40
+ }
41
+ export type PolicyType = 'access-control' | 'rate-limit' | 'cost-limit' | 'compliance' | 'security' | 'custom';
42
+ export type PolicyStatus = 'enabled' | 'disabled' | 'draft';
43
+ export interface PolicyRule {
44
+ id: string;
45
+ condition: string;
46
+ action: 'allow' | 'deny' | 'warn' | 'log';
47
+ priority: number;
48
+ }
49
+ export interface PolicyListInput {
50
+ status?: PolicyStatus;
51
+ type?: PolicyType;
52
+ limit?: number;
53
+ }
54
+ export interface PolicyListResult {
55
+ policies: Policy[];
56
+ count: number;
57
+ timing: number;
58
+ }
59
+ export interface PolicyInspectInput {
60
+ id: string;
61
+ }
62
+ export interface PolicyInspectResult {
63
+ policy: Policy | null;
64
+ found: boolean;
65
+ timing: number;
66
+ }
67
+ export interface PolicyCreateInput {
68
+ name: string;
69
+ description?: string;
70
+ type?: PolicyType;
71
+ rules?: PolicyRule[];
72
+ metadata?: Record<string, unknown>;
73
+ }
74
+ export interface PolicyCreateResult {
75
+ policy: Policy;
76
+ timing: number;
77
+ }
78
+ export interface PolicyEditInput {
79
+ id: string;
80
+ name?: string;
81
+ description?: string;
82
+ type?: PolicyType;
83
+ rules?: PolicyRule[];
84
+ metadata?: Record<string, unknown>;
85
+ }
86
+ export interface PolicyEditResult {
87
+ policy: Policy;
88
+ timing: number;
89
+ }
90
+ export interface PolicyDeleteInput {
91
+ id: string;
92
+ }
93
+ export interface PolicyDeleteResult {
94
+ deleted: boolean;
95
+ id: string;
96
+ timing: number;
97
+ }
98
+ export interface PolicyToggleInput {
99
+ id: string;
100
+ }
101
+ export interface PolicyToggleResult {
102
+ policy: Policy;
103
+ previous_status: PolicyStatus;
104
+ timing: number;
105
+ }
106
+ export declare function formatPolicyForDisplay(policy: Policy): string;
107
+ export declare function formatPoliciesListForDisplay(policies: Policy[]): string;
108
+ /**
109
+ * List all policies with optional filtering
110
+ */
111
+ export declare function executePolicyListCommand(input: PolicyListInput, _options: CommandOptions): Promise<PolicyListResult>;
112
+ /**
113
+ * Inspect a specific policy by ID
114
+ */
115
+ export declare function executePolicyInspectCommand(input: PolicyInspectInput, _options: CommandOptions): Promise<PolicyInspectResult>;
116
+ /**
117
+ * Create a new policy
118
+ */
119
+ export declare function executePolicyCreateCommand(input: PolicyCreateInput, options: CommandOptions): Promise<PolicyCreateResult>;
120
+ /**
121
+ * Edit an existing policy
122
+ */
123
+ export declare function executePolicyEditCommand(input: PolicyEditInput, options: CommandOptions): Promise<PolicyEditResult>;
124
+ /**
125
+ * Delete a policy
126
+ */
127
+ export declare function executePolicyDeleteCommand(input: PolicyDeleteInput, options: CommandOptions): Promise<PolicyDeleteResult>;
128
+ /**
129
+ * Enable a policy
130
+ */
131
+ export declare function executePolicyEnableCommand(input: PolicyToggleInput, options: CommandOptions): Promise<PolicyToggleResult>;
132
+ /**
133
+ * Disable a policy
134
+ */
135
+ export declare function executePolicyDisableCommand(input: PolicyToggleInput, options: CommandOptions): Promise<PolicyToggleResult>;
136
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,460 @@
1
+ /**
2
+ * Policy Command - Standalone CRUD Command for Policy Management
3
+ *
4
+ * ARCHITECTURE:
5
+ * - This is a TERMINAL command with its own control flow
6
+ * - Does NOT participate in orchestration pipelines
7
+ * - Uses local file-based persistence in .agentics/policies/
8
+ * - Has its own error handling and exit codes
9
+ *
10
+ * SUBCOMMANDS:
11
+ * - list List all policies
12
+ * - inspect Inspect a specific policy by ID
13
+ * - create Create a new policy
14
+ * - edit Edit an existing policy
15
+ * - delete Delete a policy
16
+ * - enable Enable a policy
17
+ * - disable Disable a policy
18
+ */
19
+ import * as fs from 'node:fs';
20
+ import * as path from 'node:path';
21
+ import { CLIError } from '../errors/index.js';
22
+ // ============================================================================
23
+ // Policy-Specific Exit Codes
24
+ // ============================================================================
25
+ export const POLICY_EXIT_CODES = {
26
+ SUCCESS: 0,
27
+ INPUT_ERROR: 100,
28
+ NOT_FOUND: 100, // Use ARG_VALIDATION_ERROR for not found
29
+ ALREADY_EXISTS: 100,
30
+ INVALID_STATE: 100,
31
+ IO_ERROR: 74,
32
+ UNEXPECTED_ERROR: 1,
33
+ };
34
+ // ============================================================================
35
+ // Storage Configuration
36
+ // ============================================================================
37
+ function getPoliciesDir() {
38
+ const baseDir = process.env['AGENTICS_DATA_DIR'] ?? process.cwd();
39
+ return path.join(baseDir, '.agentics', 'policies');
40
+ }
41
+ function ensurePoliciesDir() {
42
+ const dir = getPoliciesDir();
43
+ if (!fs.existsSync(dir)) {
44
+ fs.mkdirSync(dir, { recursive: true });
45
+ }
46
+ }
47
+ function getPolicyPath(id) {
48
+ return path.join(getPoliciesDir(), `${id}.json`);
49
+ }
50
+ // ============================================================================
51
+ // Storage Operations
52
+ // ============================================================================
53
+ function loadPolicy(id) {
54
+ const filePath = getPolicyPath(id);
55
+ if (!fs.existsSync(filePath)) {
56
+ return null;
57
+ }
58
+ try {
59
+ const content = fs.readFileSync(filePath, 'utf-8');
60
+ return JSON.parse(content);
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ function savePolicy(policy) {
67
+ ensurePoliciesDir();
68
+ const filePath = getPolicyPath(policy.id);
69
+ fs.writeFileSync(filePath, JSON.stringify(policy, null, 2), 'utf-8');
70
+ }
71
+ function deletePolicy(id) {
72
+ const filePath = getPolicyPath(id);
73
+ if (!fs.existsSync(filePath)) {
74
+ return false;
75
+ }
76
+ fs.unlinkSync(filePath);
77
+ return true;
78
+ }
79
+ function listAllPolicies() {
80
+ const dir = getPoliciesDir();
81
+ if (!fs.existsSync(dir)) {
82
+ return [];
83
+ }
84
+ const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));
85
+ const policies = [];
86
+ for (const file of files) {
87
+ try {
88
+ const content = fs.readFileSync(path.join(dir, file), 'utf-8');
89
+ policies.push(JSON.parse(content));
90
+ }
91
+ catch {
92
+ // Skip invalid files
93
+ }
94
+ }
95
+ return policies;
96
+ }
97
+ // ============================================================================
98
+ // ID Generation
99
+ // ============================================================================
100
+ function generatePolicyId() {
101
+ const timestamp = Date.now().toString(36);
102
+ const random = Math.random().toString(36).substring(2, 8);
103
+ return `pol-${timestamp}-${random}`;
104
+ }
105
+ function generateRuleId() {
106
+ const random = Math.random().toString(36).substring(2, 10);
107
+ return `rule-${random}`;
108
+ }
109
+ // ============================================================================
110
+ // Validation
111
+ // ============================================================================
112
+ function validatePolicyId(id, correlationId) {
113
+ if (!id || typeof id !== 'string' || id.trim() === '') {
114
+ throw new CLIError({
115
+ code: 'ECLI-POLICY-001',
116
+ category: 'INPUT_ERROR',
117
+ message: 'Policy ID is required',
118
+ details: { provided: id },
119
+ module: 'policy',
120
+ correlationId,
121
+ recoverable: false,
122
+ exitCode: POLICY_EXIT_CODES.INPUT_ERROR,
123
+ });
124
+ }
125
+ }
126
+ function validatePolicyName(name, correlationId) {
127
+ if (!name || typeof name !== 'string' || name.trim() === '') {
128
+ throw new CLIError({
129
+ code: 'ECLI-POLICY-002',
130
+ category: 'INPUT_ERROR',
131
+ message: 'Policy name is required',
132
+ details: { provided: name },
133
+ module: 'policy',
134
+ correlationId,
135
+ recoverable: false,
136
+ exitCode: POLICY_EXIT_CODES.INPUT_ERROR,
137
+ });
138
+ }
139
+ if (name.length > 256) {
140
+ throw new CLIError({
141
+ code: 'ECLI-POLICY-003',
142
+ category: 'INPUT_ERROR',
143
+ message: 'Policy name cannot exceed 256 characters',
144
+ details: { provided_length: name.length, max_length: 256 },
145
+ module: 'policy',
146
+ correlationId,
147
+ recoverable: false,
148
+ exitCode: POLICY_EXIT_CODES.INPUT_ERROR,
149
+ });
150
+ }
151
+ }
152
+ function validatePolicyType(type, correlationId) {
153
+ const validTypes = [
154
+ 'access-control',
155
+ 'rate-limit',
156
+ 'cost-limit',
157
+ 'compliance',
158
+ 'security',
159
+ 'custom',
160
+ ];
161
+ if (!validTypes.includes(type)) {
162
+ throw new CLIError({
163
+ code: 'ECLI-POLICY-004',
164
+ category: 'INPUT_ERROR',
165
+ message: `Invalid policy type: ${type}`,
166
+ details: { provided: type, valid_types: validTypes },
167
+ module: 'policy',
168
+ correlationId,
169
+ recoverable: false,
170
+ exitCode: POLICY_EXIT_CODES.INPUT_ERROR,
171
+ });
172
+ }
173
+ }
174
+ // ============================================================================
175
+ // Display Formatting
176
+ // ============================================================================
177
+ export function formatPolicyForDisplay(policy) {
178
+ const lines = [];
179
+ const statusIcon = policy.status === 'enabled' ? '[ON]' : policy.status === 'disabled' ? '[OFF]' : '[DRAFT]';
180
+ lines.push(`${statusIcon} ${policy.id}`);
181
+ lines.push(` Name: ${policy.name}`);
182
+ lines.push(` Type: ${policy.type}`);
183
+ lines.push(` Status: ${policy.status}`);
184
+ lines.push(` Description: ${policy.description || '(none)'}`);
185
+ lines.push(` Rules: ${policy.rules.length}`);
186
+ lines.push(` Version: ${policy.version}`);
187
+ lines.push(` Created: ${new Date(policy.created_at).toLocaleString()}`);
188
+ lines.push(` Updated: ${new Date(policy.updated_at).toLocaleString()}`);
189
+ return lines.join('\n');
190
+ }
191
+ export function formatPoliciesListForDisplay(policies) {
192
+ if (policies.length === 0) {
193
+ return 'No policies found.';
194
+ }
195
+ const lines = [];
196
+ lines.push(`Found ${policies.length} polic${policies.length === 1 ? 'y' : 'ies'}:`);
197
+ lines.push('');
198
+ for (const policy of policies) {
199
+ const statusIcon = policy.status === 'enabled' ? '[ON]' : policy.status === 'disabled' ? '[OFF]' : '[DRAFT]';
200
+ lines.push(`${statusIcon} ${policy.id} - ${policy.name} (${policy.type})`);
201
+ }
202
+ return lines.join('\n');
203
+ }
204
+ // ============================================================================
205
+ // Command Implementations
206
+ // ============================================================================
207
+ /**
208
+ * List all policies with optional filtering
209
+ */
210
+ export async function executePolicyListCommand(input, _options) {
211
+ const startTime = Date.now();
212
+ let policies = listAllPolicies();
213
+ // Apply filters
214
+ if (input.status) {
215
+ policies = policies.filter(p => p.status === input.status);
216
+ }
217
+ if (input.type) {
218
+ policies = policies.filter(p => p.type === input.type);
219
+ }
220
+ // Sort by updated_at descending
221
+ policies.sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime());
222
+ // Apply limit
223
+ if (input.limit && input.limit > 0) {
224
+ policies = policies.slice(0, input.limit);
225
+ }
226
+ return {
227
+ policies,
228
+ count: policies.length,
229
+ timing: Date.now() - startTime,
230
+ };
231
+ }
232
+ /**
233
+ * Inspect a specific policy by ID
234
+ */
235
+ export async function executePolicyInspectCommand(input, _options) {
236
+ const startTime = Date.now();
237
+ const correlationId = _options.trace_id ?? crypto.randomUUID();
238
+ validatePolicyId(input.id, correlationId);
239
+ const policy = loadPolicy(input.id);
240
+ return {
241
+ policy,
242
+ found: policy !== null,
243
+ timing: Date.now() - startTime,
244
+ };
245
+ }
246
+ /**
247
+ * Create a new policy
248
+ */
249
+ export async function executePolicyCreateCommand(input, options) {
250
+ const startTime = Date.now();
251
+ const correlationId = options.trace_id ?? crypto.randomUUID();
252
+ validatePolicyName(input.name, correlationId);
253
+ if (input.type) {
254
+ validatePolicyType(input.type, correlationId);
255
+ }
256
+ const now = new Date().toISOString();
257
+ const policy = {
258
+ id: generatePolicyId(),
259
+ name: input.name.trim(),
260
+ description: input.description?.trim() ?? '',
261
+ type: input.type ?? 'custom',
262
+ status: 'draft',
263
+ rules: (input.rules ?? []).map(r => ({
264
+ ...r,
265
+ id: r.id || generateRuleId(),
266
+ })),
267
+ created_at: now,
268
+ updated_at: now,
269
+ version: 1,
270
+ metadata: input.metadata,
271
+ };
272
+ try {
273
+ savePolicy(policy);
274
+ }
275
+ catch (error) {
276
+ throw new CLIError({
277
+ code: 'ECLI-POLICY-IO-001',
278
+ category: 'INTERNAL_ERROR',
279
+ message: 'Failed to save policy',
280
+ details: { error: error instanceof Error ? error.message : String(error) },
281
+ module: 'policy',
282
+ correlationId,
283
+ recoverable: false,
284
+ exitCode: POLICY_EXIT_CODES.IO_ERROR,
285
+ });
286
+ }
287
+ return {
288
+ policy,
289
+ timing: Date.now() - startTime,
290
+ };
291
+ }
292
+ /**
293
+ * Edit an existing policy
294
+ */
295
+ export async function executePolicyEditCommand(input, options) {
296
+ const startTime = Date.now();
297
+ const correlationId = options.trace_id ?? crypto.randomUUID();
298
+ validatePolicyId(input.id, correlationId);
299
+ const existing = loadPolicy(input.id);
300
+ if (!existing) {
301
+ throw new CLIError({
302
+ code: 'ECLI-POLICY-NOT-FOUND',
303
+ category: 'INPUT_ERROR',
304
+ message: `Policy not found: ${input.id}`,
305
+ details: { id: input.id },
306
+ module: 'policy',
307
+ correlationId,
308
+ recoverable: false,
309
+ exitCode: POLICY_EXIT_CODES.NOT_FOUND,
310
+ });
311
+ }
312
+ if (input.name) {
313
+ validatePolicyName(input.name, correlationId);
314
+ }
315
+ if (input.type) {
316
+ validatePolicyType(input.type, correlationId);
317
+ }
318
+ const updated = {
319
+ ...existing,
320
+ name: input.name?.trim() ?? existing.name,
321
+ description: input.description?.trim() ?? existing.description,
322
+ type: input.type ?? existing.type,
323
+ rules: input.rules !== undefined
324
+ ? input.rules.map(r => ({ ...r, id: r.id || generateRuleId() }))
325
+ : existing.rules,
326
+ metadata: input.metadata !== undefined ? input.metadata : existing.metadata,
327
+ updated_at: new Date().toISOString(),
328
+ version: existing.version + 1,
329
+ };
330
+ try {
331
+ savePolicy(updated);
332
+ }
333
+ catch (error) {
334
+ throw new CLIError({
335
+ code: 'ECLI-POLICY-IO-002',
336
+ category: 'INTERNAL_ERROR',
337
+ message: 'Failed to update policy',
338
+ details: { error: error instanceof Error ? error.message : String(error) },
339
+ module: 'policy',
340
+ correlationId,
341
+ recoverable: false,
342
+ exitCode: POLICY_EXIT_CODES.IO_ERROR,
343
+ });
344
+ }
345
+ return {
346
+ policy: updated,
347
+ timing: Date.now() - startTime,
348
+ };
349
+ }
350
+ /**
351
+ * Delete a policy
352
+ */
353
+ export async function executePolicyDeleteCommand(input, options) {
354
+ const startTime = Date.now();
355
+ const correlationId = options.trace_id ?? crypto.randomUUID();
356
+ validatePolicyId(input.id, correlationId);
357
+ const deleted = deletePolicy(input.id);
358
+ if (!deleted) {
359
+ throw new CLIError({
360
+ code: 'ECLI-POLICY-NOT-FOUND',
361
+ category: 'INPUT_ERROR',
362
+ message: `Policy not found: ${input.id}`,
363
+ details: { id: input.id },
364
+ module: 'policy',
365
+ correlationId,
366
+ recoverable: false,
367
+ exitCode: POLICY_EXIT_CODES.NOT_FOUND,
368
+ });
369
+ }
370
+ return {
371
+ deleted: true,
372
+ id: input.id,
373
+ timing: Date.now() - startTime,
374
+ };
375
+ }
376
+ /**
377
+ * Enable a policy
378
+ */
379
+ export async function executePolicyEnableCommand(input, options) {
380
+ const startTime = Date.now();
381
+ const correlationId = options.trace_id ?? crypto.randomUUID();
382
+ validatePolicyId(input.id, correlationId);
383
+ const existing = loadPolicy(input.id);
384
+ if (!existing) {
385
+ throw new CLIError({
386
+ code: 'ECLI-POLICY-NOT-FOUND',
387
+ category: 'INPUT_ERROR',
388
+ message: `Policy not found: ${input.id}`,
389
+ details: { id: input.id },
390
+ module: 'policy',
391
+ correlationId,
392
+ recoverable: false,
393
+ exitCode: POLICY_EXIT_CODES.NOT_FOUND,
394
+ });
395
+ }
396
+ const previousStatus = existing.status;
397
+ if (existing.status === 'enabled') {
398
+ // Already enabled - return current state without error
399
+ return {
400
+ policy: existing,
401
+ previous_status: previousStatus,
402
+ timing: Date.now() - startTime,
403
+ };
404
+ }
405
+ const updated = {
406
+ ...existing,
407
+ status: 'enabled',
408
+ updated_at: new Date().toISOString(),
409
+ version: existing.version + 1,
410
+ };
411
+ savePolicy(updated);
412
+ return {
413
+ policy: updated,
414
+ previous_status: previousStatus,
415
+ timing: Date.now() - startTime,
416
+ };
417
+ }
418
+ /**
419
+ * Disable a policy
420
+ */
421
+ export async function executePolicyDisableCommand(input, options) {
422
+ const startTime = Date.now();
423
+ const correlationId = options.trace_id ?? crypto.randomUUID();
424
+ validatePolicyId(input.id, correlationId);
425
+ const existing = loadPolicy(input.id);
426
+ if (!existing) {
427
+ throw new CLIError({
428
+ code: 'ECLI-POLICY-NOT-FOUND',
429
+ category: 'INPUT_ERROR',
430
+ message: `Policy not found: ${input.id}`,
431
+ details: { id: input.id },
432
+ module: 'policy',
433
+ correlationId,
434
+ recoverable: false,
435
+ exitCode: POLICY_EXIT_CODES.NOT_FOUND,
436
+ });
437
+ }
438
+ const previousStatus = existing.status;
439
+ if (existing.status === 'disabled') {
440
+ // Already disabled - return current state without error
441
+ return {
442
+ policy: existing,
443
+ previous_status: previousStatus,
444
+ timing: Date.now() - startTime,
445
+ };
446
+ }
447
+ const updated = {
448
+ ...existing,
449
+ status: 'disabled',
450
+ updated_at: new Date().toISOString(),
451
+ version: existing.version + 1,
452
+ };
453
+ savePolicy(updated);
454
+ return {
455
+ policy: updated,
456
+ previous_status: previousStatus,
457
+ timing: Date.now() - startTime,
458
+ };
459
+ }
460
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"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"}