@llm-dev-ops/agentics-cli 1.3.16 → 1.4.0

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 (51) hide show
  1. package/dist/adapters/base-adapter.d.ts +36 -0
  2. package/dist/adapters/base-adapter.d.ts.map +1 -1
  3. package/dist/adapters/base-adapter.js +93 -7
  4. package/dist/adapters/base-adapter.js.map +1 -1
  5. package/dist/agents/cli-ux-agent.d.ts +153 -0
  6. package/dist/agents/cli-ux-agent.d.ts.map +1 -0
  7. package/dist/agents/cli-ux-agent.js +488 -0
  8. package/dist/agents/cli-ux-agent.js.map +1 -0
  9. package/dist/agents/decision-event.d.ts +177 -0
  10. package/dist/agents/decision-event.d.ts.map +1 -0
  11. package/dist/agents/decision-event.js +346 -0
  12. package/dist/agents/decision-event.js.map +1 -0
  13. package/dist/agents/index.d.ts +20 -0
  14. package/dist/agents/index.d.ts.map +1 -0
  15. package/dist/agents/index.js +23 -0
  16. package/dist/agents/index.js.map +1 -0
  17. package/dist/agents/types.d.ts +304 -0
  18. package/dist/agents/types.d.ts.map +1 -0
  19. package/dist/agents/types.js +74 -0
  20. package/dist/agents/types.js.map +1 -0
  21. package/dist/auth/gcp-identity.d.ts +61 -0
  22. package/dist/auth/gcp-identity.d.ts.map +1 -0
  23. package/dist/auth/gcp-identity.js +228 -0
  24. package/dist/auth/gcp-identity.js.map +1 -0
  25. package/dist/auth/index.d.ts +8 -0
  26. package/dist/auth/index.d.ts.map +1 -0
  27. package/dist/auth/index.js +8 -0
  28. package/dist/auth/index.js.map +1 -0
  29. package/dist/cli/index.js +74 -65
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/commands/policy.d.ts +0 -50
  32. package/dist/commands/policy.d.ts.map +1 -1
  33. package/dist/commands/policy.js +0 -266
  34. package/dist/commands/policy.js.map +1 -1
  35. package/dist/commands/whoami.d.ts +8 -0
  36. package/dist/commands/whoami.d.ts.map +1 -1
  37. package/dist/commands/whoami.js +54 -7
  38. package/dist/commands/whoami.js.map +1 -1
  39. package/dist/contracts/schemas/index.d.ts +505 -0
  40. package/dist/contracts/schemas/index.d.ts.map +1 -1
  41. package/dist/contracts/schemas/index.js +315 -0
  42. package/dist/contracts/schemas/index.js.map +1 -1
  43. package/dist/gates/execution-gate.d.ts +59 -0
  44. package/dist/gates/execution-gate.d.ts.map +1 -0
  45. package/dist/gates/execution-gate.js +115 -0
  46. package/dist/gates/execution-gate.js.map +1 -0
  47. package/dist/gates/index.d.ts +8 -0
  48. package/dist/gates/index.d.ts.map +1 -0
  49. package/dist/gates/index.js +8 -0
  50. package/dist/gates/index.js.map +1 -0
  51. package/package.json +2 -1
@@ -0,0 +1,488 @@
1
+ /**
2
+ * CLI UX Agent Implementation
3
+ *
4
+ * CONSTITUTION REFERENCE: PROMPT 0, PROMPT 1, PROMPT 2
5
+ *
6
+ * AGENT NAME: CLI UX Agent
7
+ * CLASSIFICATION: CLI_UX_ORCHESTRATION
8
+ *
9
+ * PURPOSE:
10
+ * Provide a consistent, guided, and contract-validated command-line user
11
+ * experience for interacting with the Agentics Dev platform.
12
+ *
13
+ * SCOPE:
14
+ * - Parse and validate CLI commands
15
+ * - Guide users through workflows
16
+ * - Orchestrate calls to Agentics services
17
+ * - Normalize and present outputs
18
+ * - Emit UX-level interaction signals
19
+ *
20
+ * NON-RESPONSIBILITIES (EXPLICIT):
21
+ * - Execute inference
22
+ * - Execute workflows
23
+ * - Modify upstream state directly
24
+ * - Apply optimizations
25
+ * - Enforce governance or policy decisions
26
+ * - Trigger retries or automation implicitly
27
+ * - Persist business state
28
+ * - Connect directly to databases
29
+ */
30
+ import * as crypto from 'node:crypto';
31
+ import { CLI_UX_AGENT_ID, CLI_UX_AGENT_VERSION, CLI_UX_AGENT_CLASSIFICATION, INVOCABLE_SERVICES, NON_RESPONSIBILITIES, } from './types.js';
32
+ import { DecisionEventBuilder, createDecisionEventEmitter, createTelemetryEmitter, } from './decision-event.js';
33
+ // ============================================================================
34
+ // Agent Registration (PROMPT 1 Requirement)
35
+ // ============================================================================
36
+ /**
37
+ * CLI UX Agent registration metadata.
38
+ * Defines the complete contract for this agent.
39
+ */
40
+ export const CLI_UX_AGENT_REGISTRATION = {
41
+ identifier: {
42
+ agent_id: CLI_UX_AGENT_ID,
43
+ agent_version: CLI_UX_AGENT_VERSION,
44
+ agent_name: 'CLI UX Agent',
45
+ classification: CLI_UX_AGENT_CLASSIFICATION,
46
+ },
47
+ purpose: 'Provide a consistent, guided, and contract-validated command-line user ' +
48
+ 'experience for interacting with the Agentics Dev platform.',
49
+ inputs_schema_ref: 'agentics-contracts/cli-ux-agent-input/v1',
50
+ outputs_schema_ref: 'agentics-contracts/cli-ux-agent-output/v1',
51
+ decision_event_schema_ref: 'agentics-contracts/decision-event/v1',
52
+ invocable_services: [...INVOCABLE_SERVICES],
53
+ non_responsibilities: [...NON_RESPONSIBILITIES],
54
+ failure_modes: [
55
+ {
56
+ code: 'ECLI-AGENT-001',
57
+ description: 'Command validation failed',
58
+ exit_code: 100,
59
+ recoverable: false,
60
+ },
61
+ {
62
+ code: 'ECLI-AGENT-002',
63
+ description: 'Service routing failed',
64
+ exit_code: 140,
65
+ recoverable: false,
66
+ },
67
+ {
68
+ code: 'ECLI-AGENT-003',
69
+ description: 'Output formatting failed',
70
+ exit_code: 150,
71
+ recoverable: true,
72
+ },
73
+ {
74
+ code: 'ECLI-AGENT-004',
75
+ description: 'Authentication required',
76
+ exit_code: 130,
77
+ recoverable: true,
78
+ },
79
+ {
80
+ code: 'ECLI-AGENT-005',
81
+ description: 'Execution gate blocked',
82
+ exit_code: 77,
83
+ recoverable: false,
84
+ },
85
+ ],
86
+ };
87
+ // ============================================================================
88
+ // CLI UX Agent Implementation
89
+ // ============================================================================
90
+ export class CLIUXAgent {
91
+ config;
92
+ decisionEmitter;
93
+ telemetryEmitter;
94
+ constructor(config = {}) {
95
+ this.config = {
96
+ emit_decisions: config.emit_decisions ?? false,
97
+ emit_telemetry: config.emit_telemetry ?? false,
98
+ ruvector_url: config.ruvector_url ?? process.env['RUVECTOR_SERVICE_URL'] ?? '',
99
+ telemetry_endpoint: config.telemetry_endpoint ?? '',
100
+ default_output_format: config.default_output_format ?? 'json',
101
+ default_timeout: config.default_timeout ?? 30000,
102
+ };
103
+ this.decisionEmitter = createDecisionEventEmitter({
104
+ ruvector_url: this.config.ruvector_url,
105
+ enabled: this.config.emit_decisions,
106
+ });
107
+ this.telemetryEmitter = createTelemetryEmitter({
108
+ enabled: this.config.emit_telemetry,
109
+ endpoint: this.config.telemetry_endpoint,
110
+ });
111
+ }
112
+ /**
113
+ * Get agent identifier.
114
+ */
115
+ getIdentifier() {
116
+ return CLI_UX_AGENT_REGISTRATION.identifier;
117
+ }
118
+ /**
119
+ * Get agent registration.
120
+ */
121
+ getRegistration() {
122
+ return CLI_UX_AGENT_REGISTRATION;
123
+ }
124
+ /**
125
+ * Process a CLI command.
126
+ *
127
+ * EXECUTION FLOW:
128
+ * 1. Record invocation telemetry
129
+ * 2. Validate command
130
+ * 3. Resolve execution context
131
+ * 4. Calculate confidence
132
+ * 5. Build result
133
+ * 6. Emit DecisionEvent (async, non-blocking)
134
+ * 7. Record completion telemetry
135
+ * 8. Return output
136
+ *
137
+ * CONFIRMS:
138
+ * - This agent does NOT execute inference
139
+ * - This agent does NOT modify platform state
140
+ * - This agent does NOT enforce policies
141
+ * - This agent does NOT trigger automation implicitly
142
+ */
143
+ async process(input) {
144
+ const startTime = Date.now();
145
+ const startedAt = new Date().toISOString();
146
+ // Record invocation telemetry
147
+ this.telemetryEmitter.record('agent_invocation', CLI_UX_AGENT_ID, input.trace_id, {
148
+ type: 'invocation',
149
+ command: input.command.command,
150
+ subcommand: input.command.subcommand,
151
+ input_hash: this.computeInputHash(input),
152
+ });
153
+ try {
154
+ // Step 1: Validate command
155
+ const validation = this.validateCommand(input.command);
156
+ if (!validation.valid) {
157
+ const result = this.buildErrorResult(validation.errors);
158
+ return this.buildOutput(false, result, input, startTime, startedAt);
159
+ }
160
+ // Step 2: Check for guidance scenarios
161
+ const guidance = this.checkForGuidance(input);
162
+ if (guidance) {
163
+ return this.buildOutput(true, guidance, input, startTime, startedAt);
164
+ }
165
+ // Step 3: Build success result (orchestration happens in CLI command handlers)
166
+ const result = this.buildSuccessResult(input);
167
+ return this.buildOutput(true, result, input, startTime, startedAt);
168
+ }
169
+ catch (error) {
170
+ const result = {
171
+ type: 'error',
172
+ code: 'ECLI-AGENT-999',
173
+ message: error instanceof Error ? error.message : 'Unknown error',
174
+ recoverable: false,
175
+ };
176
+ return this.buildOutput(false, result, input, startTime, startedAt);
177
+ }
178
+ }
179
+ /**
180
+ * Validate command syntax and structure.
181
+ */
182
+ validateCommand(command) {
183
+ const errors = [];
184
+ // Validate command name
185
+ if (!command.command || command.command.trim() === '') {
186
+ errors.push({
187
+ field: 'command',
188
+ message: 'Command name is required',
189
+ code: 'ECLI-VAL-001',
190
+ });
191
+ }
192
+ // Validate command is known
193
+ const knownCommands = [
194
+ 'login', 'logout', 'whoami',
195
+ 'plan', 'simulate', 'inspect', 'quantify',
196
+ 'deploy', 'export', 'erp', 'diligence',
197
+ 'usage', 'policy', 'audit',
198
+ 'help', 'version',
199
+ ];
200
+ if (command.command && !knownCommands.includes(command.command)) {
201
+ errors.push({
202
+ field: 'command',
203
+ message: `Unknown command: ${command.command}. Run 'agentics help' for available commands.`,
204
+ code: 'ECLI-VAL-002',
205
+ });
206
+ }
207
+ // Validate subcommands for commands that require them
208
+ const commandsRequiringSubcommand = ['plan', 'simulate', 'erp', 'diligence'];
209
+ if (command.command &&
210
+ commandsRequiringSubcommand.includes(command.command) &&
211
+ !command.subcommand) {
212
+ errors.push({
213
+ field: 'subcommand',
214
+ message: `Command '${command.command}' requires a subcommand. Run 'agentics ${command.command} help' for options.`,
215
+ code: 'ECLI-VAL-003',
216
+ });
217
+ }
218
+ return {
219
+ valid: errors.length === 0,
220
+ errors,
221
+ };
222
+ }
223
+ /**
224
+ * Resolve environment context from arguments.
225
+ */
226
+ resolveContext(args) {
227
+ const flags = this.parseFlags(args);
228
+ const options = this.parseOptions(args);
229
+ return {
230
+ cwd: process.cwd(),
231
+ authenticated: this.checkAuthentication(),
232
+ execution_gate_enabled: this.checkExecutionGate(),
233
+ output_format: options['format'] ?? this.config.default_output_format,
234
+ verbose: flags['verbose'] || flags['v'] || false,
235
+ timeout: parseInt(options['timeout'] ?? String(this.config.default_timeout), 10),
236
+ };
237
+ }
238
+ /**
239
+ * Calculate confidence score for a decision.
240
+ */
241
+ calculateConfidence(input, result) {
242
+ const components = [];
243
+ // Command resolution confidence
244
+ const commandConfidence = this.calculateCommandConfidence(input.command);
245
+ components.push({
246
+ name: 'command_resolution',
247
+ value: commandConfidence,
248
+ weight: 0.4,
249
+ });
250
+ // Input validation confidence
251
+ const validationConfidence = result.type === 'error' ? 0.0 : 1.0;
252
+ components.push({
253
+ name: 'input_validation',
254
+ value: validationConfidence,
255
+ weight: 0.3,
256
+ });
257
+ // Context confidence
258
+ const contextConfidence = input.context.authenticated ? 1.0 : 0.5;
259
+ components.push({
260
+ name: 'context_resolution',
261
+ value: contextConfidence,
262
+ weight: 0.3,
263
+ });
264
+ // Calculate weighted average
265
+ const totalWeight = components.reduce((sum, c) => sum + c.weight, 0);
266
+ const weightedSum = components.reduce((sum, c) => sum + c.value * c.weight, 0);
267
+ const value = weightedSum / totalWeight;
268
+ return {
269
+ value,
270
+ basis: 'command_resolution',
271
+ components,
272
+ };
273
+ }
274
+ // ============================================================================
275
+ // Private Methods
276
+ // ============================================================================
277
+ buildOutput(success, result, input, startTime, startedAt) {
278
+ const completedAt = new Date().toISOString();
279
+ const totalMs = Date.now() - startTime;
280
+ const timing = {
281
+ total_ms: totalMs,
282
+ breakdown: {
283
+ validation: Math.min(10, totalMs * 0.1),
284
+ processing: totalMs * 0.9,
285
+ },
286
+ started_at: startedAt,
287
+ completed_at: completedAt,
288
+ };
289
+ // Calculate confidence
290
+ const confidence = this.calculateConfidence(input, result);
291
+ // Build and emit DecisionEvent (async, non-blocking)
292
+ const decisionEvent = this.buildDecisionEvent(input, result, confidence);
293
+ if (this.config.emit_decisions) {
294
+ this.decisionEmitter.emitAsync(decisionEvent);
295
+ }
296
+ // Record completion telemetry
297
+ this.telemetryEmitter.record('agent_completion', CLI_UX_AGENT_ID, input.trace_id, {
298
+ type: 'completion',
299
+ success,
300
+ duration_ms: totalMs,
301
+ services_invoked: result.type === 'success' ? result.services_invoked : [],
302
+ });
303
+ return {
304
+ success,
305
+ result,
306
+ decision_event: decisionEvent,
307
+ timing,
308
+ };
309
+ }
310
+ buildDecisionEvent(input, result, confidence) {
311
+ const builder = new DecisionEventBuilder({
312
+ trace_id: input.trace_id,
313
+ command: input.command.command,
314
+ subcommand: input.command.subcommand,
315
+ });
316
+ const decisionType = this.determineDecisionType(input, result);
317
+ const constraints = this.buildConstraints(input);
318
+ builder
319
+ .withDecisionType(decisionType)
320
+ .withInputsHash(input)
321
+ .withResultType(result.type)
322
+ .withConfidence(confidence)
323
+ .withConstraints(constraints);
324
+ if (result.type === 'success') {
325
+ const successResult = result;
326
+ if (successResult.artifact_ref) {
327
+ builder.withArtifactRef(successResult.artifact_ref);
328
+ }
329
+ builder.withServicesInvoked(successResult.services_invoked);
330
+ }
331
+ return builder.build();
332
+ }
333
+ determineDecisionType(input, result) {
334
+ if (result.type === 'error') {
335
+ return 'error_presentation';
336
+ }
337
+ if (result.type === 'guidance') {
338
+ return 'workflow_guidance';
339
+ }
340
+ // Determine based on command
341
+ const { command } = input.command;
342
+ if (['help', 'version'].includes(command)) {
343
+ return 'workflow_guidance';
344
+ }
345
+ if (['plan', 'simulate', 'inspect', 'quantify', 'deploy', 'export', 'erp', 'diligence'].includes(command)) {
346
+ return 'service_routing';
347
+ }
348
+ return 'cli_ux_orchestration';
349
+ }
350
+ buildConstraints(input) {
351
+ const environment = {
352
+ is_local: !process.env['AGENTICS_PRODUCTION'],
353
+ is_production: !!process.env['AGENTICS_PRODUCTION'],
354
+ execution_gate_enabled: input.context.execution_gate_enabled,
355
+ auth_present: input.context.authenticated,
356
+ };
357
+ return {
358
+ permissions: input.context.authenticated ? ['authenticated'] : ['anonymous'],
359
+ environment,
360
+ scope: [],
361
+ };
362
+ }
363
+ buildSuccessResult(input) {
364
+ return {
365
+ type: 'success',
366
+ data: {
367
+ command: input.command.command,
368
+ subcommand: input.command.subcommand,
369
+ processed: true,
370
+ },
371
+ services_invoked: [],
372
+ };
373
+ }
374
+ buildErrorResult(errors) {
375
+ return {
376
+ type: 'error',
377
+ code: errors[0]?.code ?? 'ECLI-AGENT-001',
378
+ message: errors.map(e => e.message).join('; '),
379
+ details: { errors },
380
+ recoverable: false,
381
+ };
382
+ }
383
+ checkForGuidance(input) {
384
+ const { command } = input.command;
385
+ // Help command
386
+ if (command === 'help' || input.command.flags['help'] || input.command.flags['h']) {
387
+ return {
388
+ type: 'guidance',
389
+ message: 'Available commands and options',
390
+ options: [
391
+ { label: 'plan', command: 'agentics plan', description: 'Create simulation plans' },
392
+ { label: 'simulate', command: 'agentics simulate', description: 'Run simulations' },
393
+ { label: 'inspect', command: 'agentics inspect', description: 'Query simulation results' },
394
+ { label: 'quantify', command: 'agentics quantify', description: 'Generate ROI analysis' },
395
+ { label: 'deploy', command: 'agentics deploy', description: 'Resolve deployment intent' },
396
+ { label: 'export', command: 'agentics export', description: 'Generate IaC artifacts' },
397
+ ],
398
+ next_steps: [
399
+ 'Run "agentics <command> help" for command-specific help',
400
+ 'Run "agentics login" to authenticate',
401
+ ],
402
+ };
403
+ }
404
+ // No guidance needed
405
+ return null;
406
+ }
407
+ calculateCommandConfidence(command) {
408
+ // Known commands have high confidence
409
+ const knownCommands = [
410
+ 'login', 'logout', 'whoami',
411
+ 'plan', 'simulate', 'inspect', 'quantify',
412
+ 'deploy', 'export', 'erp', 'diligence',
413
+ 'usage', 'policy', 'audit',
414
+ 'help', 'version',
415
+ ];
416
+ if (!command.command) {
417
+ return 0.0;
418
+ }
419
+ if (knownCommands.includes(command.command)) {
420
+ return 1.0;
421
+ }
422
+ // Partial match
423
+ const partialMatch = knownCommands.some(c => c.startsWith(command.command));
424
+ if (partialMatch) {
425
+ return 0.5;
426
+ }
427
+ return 0.1;
428
+ }
429
+ parseFlags(args) {
430
+ const flags = {};
431
+ for (const arg of args) {
432
+ if (arg.startsWith('--') && !arg.includes('=')) {
433
+ flags[arg.slice(2)] = true;
434
+ }
435
+ else if (arg.startsWith('-') && !arg.startsWith('--')) {
436
+ flags[arg.slice(1)] = true;
437
+ }
438
+ }
439
+ return flags;
440
+ }
441
+ parseOptions(args) {
442
+ const options = {};
443
+ for (let i = 0; i < args.length; i++) {
444
+ const arg = args[i];
445
+ if (arg?.startsWith('--') && arg.includes('=')) {
446
+ const [key, value] = arg.slice(2).split('=');
447
+ if (key && value) {
448
+ options[key] = value;
449
+ }
450
+ }
451
+ else if (arg?.startsWith('--') && args[i + 1] && !args[i + 1]?.startsWith('-')) {
452
+ options[arg.slice(2)] = args[i + 1];
453
+ i++;
454
+ }
455
+ }
456
+ return options;
457
+ }
458
+ checkAuthentication() {
459
+ // Check for auth token in environment
460
+ return !!process.env['AGENTICS_API_KEY'] || !!process.env['AGENTICS_AUTH_TOKEN'];
461
+ }
462
+ checkExecutionGate() {
463
+ return process.env['AGENTICS_EXECUTION_ENABLED'] !== 'false';
464
+ }
465
+ computeInputHash(input) {
466
+ const canonical = JSON.stringify({
467
+ command: input.command,
468
+ args: input.args,
469
+ });
470
+ return crypto.createHash('sha256').update(canonical).digest('hex').slice(0, 16);
471
+ }
472
+ }
473
+ // ============================================================================
474
+ // Factory Functions
475
+ // ============================================================================
476
+ /**
477
+ * Create a CLI UX Agent instance.
478
+ */
479
+ export function createCLIUXAgent(config) {
480
+ return new CLIUXAgent(config);
481
+ }
482
+ /**
483
+ * Get the CLI UX Agent registration.
484
+ */
485
+ export function getCLIUXAgentRegistration() {
486
+ return CLI_UX_AGENT_REGISTRATION;
487
+ }
488
+ //# sourceMappingURL=cli-ux-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-ux-agent.js","sourceRoot":"","sources":["../../src/agents/cli-ux-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * DecisionEvent Emitter
3
+ *
4
+ * CONSTITUTION REFERENCE: PROMPT 0, PROMPT 2
5
+ *
6
+ * PURPOSE: Emit CLI UX-level DecisionEvents to ruvector-service.
7
+ *
8
+ * EMISSION RULES:
9
+ * - At most ONE DecisionEvent per agent invocation
10
+ * - Async, non-blocking emission only
11
+ * - NEVER persists locally
12
+ * - MAY fail silently (UX must not depend on emission)
13
+ *
14
+ * DATA RULES:
15
+ * - Only emit UX telemetry and interaction data
16
+ * - Never emit raw inputs or sensitive data
17
+ * - Always use hashes for reproducibility
18
+ */
19
+ import type { DecisionEvent, DecisionType, ConfidenceScore, ConstraintsApplied, ExecutionReference, EnvironmentContext, TelemetryEventType, TelemetryData } from './types.js';
20
+ export interface DecisionEventBuilderOptions {
21
+ trace_id: string;
22
+ command: string;
23
+ subcommand?: string;
24
+ }
25
+ /**
26
+ * Builder for constructing DecisionEvents.
27
+ * Ensures all required fields are set before emission.
28
+ */
29
+ export declare class DecisionEventBuilder {
30
+ private readonly trace_id;
31
+ private readonly command;
32
+ private readonly subcommand?;
33
+ private decision_type;
34
+ private inputs_hash;
35
+ private result_type;
36
+ private artifact_ref?;
37
+ private services_invoked;
38
+ private confidence;
39
+ private constraints;
40
+ private execution_ref;
41
+ constructor(options: DecisionEventBuilderOptions);
42
+ /**
43
+ * Set decision type.
44
+ */
45
+ withDecisionType(type: DecisionType): this;
46
+ /**
47
+ * Set inputs hash from raw inputs.
48
+ * Computes hash, never stores raw data.
49
+ */
50
+ withInputsHash(inputs: unknown): this;
51
+ /**
52
+ * Set result type.
53
+ */
54
+ withResultType(type: 'success' | 'error' | 'guidance'): this;
55
+ /**
56
+ * Set artifact reference.
57
+ */
58
+ withArtifactRef(ref: string): this;
59
+ /**
60
+ * Add services that were invoked.
61
+ */
62
+ withServicesInvoked(services: string[]): this;
63
+ /**
64
+ * Set confidence score.
65
+ */
66
+ withConfidence(confidence: ConfidenceScore): this;
67
+ /**
68
+ * Set constraints applied.
69
+ */
70
+ withConstraints(constraints: ConstraintsApplied): this;
71
+ /**
72
+ * Set environment context.
73
+ */
74
+ withEnvironment(env: EnvironmentContext): this;
75
+ /**
76
+ * Set execution reference from downstream service.
77
+ */
78
+ withExecutionRef(ref: ExecutionReference): this;
79
+ /**
80
+ * Build the DecisionEvent.
81
+ */
82
+ build(): DecisionEvent;
83
+ /**
84
+ * Compute hash of inputs for reproducibility.
85
+ */
86
+ private computeHash;
87
+ private sortKeys;
88
+ }
89
+ export interface DecisionEventEmitterConfig {
90
+ /** RuVector service URL */
91
+ ruvector_url?: string;
92
+ /** Enable emission (default: true if ruvector_url set) */
93
+ enabled?: boolean;
94
+ /** Timeout for emission in ms */
95
+ timeout?: number;
96
+ /** Auth token for ruvector-service */
97
+ auth_token?: string;
98
+ }
99
+ /**
100
+ * Emits DecisionEvents to ruvector-service.
101
+ *
102
+ * CRITICAL: Emission is async and non-blocking.
103
+ * Failures are logged but do not affect UX flow.
104
+ */
105
+ export declare class DecisionEventEmitter {
106
+ private readonly config;
107
+ constructor(config?: DecisionEventEmitterConfig);
108
+ /**
109
+ * Check if emission is enabled.
110
+ */
111
+ isEnabled(): boolean;
112
+ /**
113
+ * Emit a DecisionEvent.
114
+ *
115
+ * RULES:
116
+ * - Async, non-blocking
117
+ * - Never throws - failures are silent
118
+ * - Only one event per invocation should be emitted
119
+ */
120
+ emit(event: DecisionEvent): Promise<EmissionResult>;
121
+ /**
122
+ * Emit without waiting (fire and forget).
123
+ * Use when you don't care about the result.
124
+ */
125
+ emitAsync(event: DecisionEvent): void;
126
+ }
127
+ export interface EmissionResult {
128
+ success: boolean;
129
+ event_id?: string;
130
+ reason?: 'emission_disabled' | 'http_error' | 'timeout' | 'network_error';
131
+ status_code?: number;
132
+ }
133
+ export interface TelemetryEmitterConfig {
134
+ /** Enable telemetry emission */
135
+ enabled?: boolean;
136
+ /** Telemetry endpoint */
137
+ endpoint?: string;
138
+ /** Batch size before flush */
139
+ batch_size?: number;
140
+ /** Flush interval in ms */
141
+ flush_interval?: number;
142
+ }
143
+ /**
144
+ * Emits telemetry events compatible with LLM-Observatory.
145
+ */
146
+ export declare class TelemetryEmitter {
147
+ private readonly config;
148
+ private readonly buffer;
149
+ private flushTimer;
150
+ constructor(config?: TelemetryEmitterConfig);
151
+ /**
152
+ * Record a telemetry event.
153
+ */
154
+ record(event_type: TelemetryEventType, agent_id: string, trace_id: string, data: TelemetryData): void;
155
+ /**
156
+ * Flush buffered events.
157
+ */
158
+ flush(): Promise<void>;
159
+ /**
160
+ * Stop the flush timer.
161
+ */
162
+ stop(): void;
163
+ private startFlushTimer;
164
+ }
165
+ /**
166
+ * Create a DecisionEvent builder.
167
+ */
168
+ export declare function createDecisionEventBuilder(options: DecisionEventBuilderOptions): DecisionEventBuilder;
169
+ /**
170
+ * Create a DecisionEvent emitter.
171
+ */
172
+ export declare function createDecisionEventEmitter(config?: DecisionEventEmitterConfig): DecisionEventEmitter;
173
+ /**
174
+ * Create a telemetry emitter.
175
+ */
176
+ export declare function createTelemetryEmitter(config?: TelemetryEmitterConfig): TelemetryEmitter;
177
+ //# sourceMappingURL=decision-event.d.ts.map