@uluops/core 0.5.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 (167) hide show
  1. package/README.md +543 -0
  2. package/definitions/starter/code-validator.agent.yaml +134 -0
  3. package/definitions/starter/docs-validator.agent.yaml +142 -0
  4. package/definitions/starter/public-interface-validator.agent.yaml +138 -0
  5. package/definitions/starter/security-analyst.agent.yaml +144 -0
  6. package/definitions/starter/test-architect.agent.yaml +137 -0
  7. package/dist/ai/AIProvider.d.ts +198 -0
  8. package/dist/ai/AIProvider.d.ts.map +1 -0
  9. package/dist/ai/AIProvider.js +557 -0
  10. package/dist/ai/AIProvider.js.map +1 -0
  11. package/dist/ai/ModelCatalog.d.ts +78 -0
  12. package/dist/ai/ModelCatalog.d.ts.map +1 -0
  13. package/dist/ai/ModelCatalog.js +193 -0
  14. package/dist/ai/ModelCatalog.js.map +1 -0
  15. package/dist/ai/ShellExecutor.d.ts +42 -0
  16. package/dist/ai/ShellExecutor.d.ts.map +1 -0
  17. package/dist/ai/ShellExecutor.js +62 -0
  18. package/dist/ai/ShellExecutor.js.map +1 -0
  19. package/dist/ai/TokenBudgetTracker.d.ts +49 -0
  20. package/dist/ai/TokenBudgetTracker.d.ts.map +1 -0
  21. package/dist/ai/TokenBudgetTracker.js +61 -0
  22. package/dist/ai/TokenBudgetTracker.js.map +1 -0
  23. package/dist/ai/ToolAdapter.d.ts +25 -0
  24. package/dist/ai/ToolAdapter.d.ts.map +1 -0
  25. package/dist/ai/ToolAdapter.js +135 -0
  26. package/dist/ai/ToolAdapter.js.map +1 -0
  27. package/dist/ai/index.d.ts +6 -0
  28. package/dist/ai/index.d.ts.map +1 -0
  29. package/dist/ai/index.js +4 -0
  30. package/dist/ai/index.js.map +1 -0
  31. package/dist/client/UluOpsClient.d.ts +111 -0
  32. package/dist/client/UluOpsClient.d.ts.map +1 -0
  33. package/dist/client/UluOpsClient.js +329 -0
  34. package/dist/client/UluOpsClient.js.map +1 -0
  35. package/dist/constants.d.ts +6 -0
  36. package/dist/constants.d.ts.map +1 -0
  37. package/dist/constants.js +9 -0
  38. package/dist/constants.js.map +1 -0
  39. package/dist/errors/UluOpsError.d.ts +10 -0
  40. package/dist/errors/UluOpsError.d.ts.map +1 -0
  41. package/dist/errors/UluOpsError.js +13 -0
  42. package/dist/errors/UluOpsError.js.map +1 -0
  43. package/dist/errors/index.d.ts +64 -0
  44. package/dist/errors/index.d.ts.map +1 -0
  45. package/dist/errors/index.js +93 -0
  46. package/dist/errors/index.js.map +1 -0
  47. package/dist/executor/AgentExecutor.d.ts +57 -0
  48. package/dist/executor/AgentExecutor.d.ts.map +1 -0
  49. package/dist/executor/AgentExecutor.js +331 -0
  50. package/dist/executor/AgentExecutor.js.map +1 -0
  51. package/dist/executor/CommandExecutor.d.ts +33 -0
  52. package/dist/executor/CommandExecutor.d.ts.map +1 -0
  53. package/dist/executor/CommandExecutor.js +183 -0
  54. package/dist/executor/CommandExecutor.js.map +1 -0
  55. package/dist/executor/PipelineExecutor.d.ts +55 -0
  56. package/dist/executor/PipelineExecutor.d.ts.map +1 -0
  57. package/dist/executor/PipelineExecutor.js +273 -0
  58. package/dist/executor/PipelineExecutor.js.map +1 -0
  59. package/dist/executor/ToolHandler.d.ts +47 -0
  60. package/dist/executor/ToolHandler.d.ts.map +1 -0
  61. package/dist/executor/ToolHandler.js +615 -0
  62. package/dist/executor/ToolHandler.js.map +1 -0
  63. package/dist/executor/WorkflowExecutor.d.ts +55 -0
  64. package/dist/executor/WorkflowExecutor.d.ts.map +1 -0
  65. package/dist/executor/WorkflowExecutor.js +368 -0
  66. package/dist/executor/WorkflowExecutor.js.map +1 -0
  67. package/dist/executor/preflight.d.ts +8 -0
  68. package/dist/executor/preflight.d.ts.map +1 -0
  69. package/dist/executor/preflight.js +102 -0
  70. package/dist/executor/preflight.js.map +1 -0
  71. package/dist/executor/symbols.d.ts +13 -0
  72. package/dist/executor/symbols.d.ts.map +1 -0
  73. package/dist/executor/symbols.js +102 -0
  74. package/dist/executor/symbols.js.map +1 -0
  75. package/dist/index.d.ts +32 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +25 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/parser/OutputExtractor.d.ts +52 -0
  80. package/dist/parser/OutputExtractor.d.ts.map +1 -0
  81. package/dist/parser/OutputExtractor.js +818 -0
  82. package/dist/parser/OutputExtractor.js.map +1 -0
  83. package/dist/parser/outputSchemas.d.ts +223 -0
  84. package/dist/parser/outputSchemas.d.ts.map +1 -0
  85. package/dist/parser/outputSchemas.js +73 -0
  86. package/dist/parser/outputSchemas.js.map +1 -0
  87. package/dist/registry/RegistryClient.d.ts +75 -0
  88. package/dist/registry/RegistryClient.d.ts.map +1 -0
  89. package/dist/registry/RegistryClient.js +419 -0
  90. package/dist/registry/RegistryClient.js.map +1 -0
  91. package/dist/registry/index.d.ts +2 -0
  92. package/dist/registry/index.d.ts.map +1 -0
  93. package/dist/registry/index.js +2 -0
  94. package/dist/registry/index.js.map +1 -0
  95. package/dist/types/agent.d.ts +406 -0
  96. package/dist/types/agent.d.ts.map +1 -0
  97. package/dist/types/agent.js +2 -0
  98. package/dist/types/agent.js.map +1 -0
  99. package/dist/types/ai.d.ts +14 -0
  100. package/dist/types/ai.d.ts.map +1 -0
  101. package/dist/types/ai.js +2 -0
  102. package/dist/types/ai.js.map +1 -0
  103. package/dist/types/command.d.ts +153 -0
  104. package/dist/types/command.d.ts.map +1 -0
  105. package/dist/types/command.js +2 -0
  106. package/dist/types/command.js.map +1 -0
  107. package/dist/types/config.d.ts +136 -0
  108. package/dist/types/config.d.ts.map +1 -0
  109. package/dist/types/config.js +2 -0
  110. package/dist/types/config.js.map +1 -0
  111. package/dist/types/execution.d.ts +172 -0
  112. package/dist/types/execution.d.ts.map +1 -0
  113. package/dist/types/execution.js +2 -0
  114. package/dist/types/execution.js.map +1 -0
  115. package/dist/types/index.d.ts +12 -0
  116. package/dist/types/index.d.ts.map +1 -0
  117. package/dist/types/index.js +2 -0
  118. package/dist/types/index.js.map +1 -0
  119. package/dist/types/parser.d.ts +75 -0
  120. package/dist/types/parser.d.ts.map +1 -0
  121. package/dist/types/parser.js +2 -0
  122. package/dist/types/parser.js.map +1 -0
  123. package/dist/types/pipeline.d.ts +155 -0
  124. package/dist/types/pipeline.d.ts.map +1 -0
  125. package/dist/types/pipeline.js +2 -0
  126. package/dist/types/pipeline.js.map +1 -0
  127. package/dist/types/registry.d.ts +232 -0
  128. package/dist/types/registry.d.ts.map +1 -0
  129. package/dist/types/registry.js +2 -0
  130. package/dist/types/registry.js.map +1 -0
  131. package/dist/types/tools.d.ts +29 -0
  132. package/dist/types/tools.d.ts.map +1 -0
  133. package/dist/types/tools.js +2 -0
  134. package/dist/types/tools.js.map +1 -0
  135. package/dist/types/validation.d.ts +237 -0
  136. package/dist/types/validation.d.ts.map +1 -0
  137. package/dist/types/validation.js +2 -0
  138. package/dist/types/validation.js.map +1 -0
  139. package/dist/types/workflow.d.ts +131 -0
  140. package/dist/types/workflow.d.ts.map +1 -0
  141. package/dist/types/workflow.js +2 -0
  142. package/dist/types/workflow.js.map +1 -0
  143. package/dist/utils/formatError.d.ts +6 -0
  144. package/dist/utils/formatError.d.ts.map +1 -0
  145. package/dist/utils/formatError.js +10 -0
  146. package/dist/utils/formatError.js.map +1 -0
  147. package/dist/utils/parseRef.d.ts +11 -0
  148. package/dist/utils/parseRef.d.ts.map +1 -0
  149. package/dist/utils/parseRef.js +16 -0
  150. package/dist/utils/parseRef.js.map +1 -0
  151. package/dist/utils/sumTokenMetrics.d.ts +9 -0
  152. package/dist/utils/sumTokenMetrics.d.ts.map +1 -0
  153. package/dist/utils/sumTokenMetrics.js +20 -0
  154. package/dist/utils/sumTokenMetrics.js.map +1 -0
  155. package/dist/utils/topoSort.d.ts +24 -0
  156. package/dist/utils/topoSort.d.ts.map +1 -0
  157. package/dist/utils/topoSort.js +60 -0
  158. package/dist/utils/topoSort.js.map +1 -0
  159. package/dist/validation/ValidationClient.d.ts +51 -0
  160. package/dist/validation/ValidationClient.d.ts.map +1 -0
  161. package/dist/validation/ValidationClient.js +179 -0
  162. package/dist/validation/ValidationClient.js.map +1 -0
  163. package/dist/validation/index.d.ts +2 -0
  164. package/dist/validation/index.d.ts.map +1 -0
  165. package/dist/validation/index.js +2 -0
  166. package/dist/validation/index.js.map +1 -0
  167. package/package.json +76 -0
@@ -0,0 +1,111 @@
1
+ import type { UluOpsConfig } from '../types/config.js';
2
+ import type { ExecutionInput, ExecutionResult, ExecutionOptions } from '../types/execution.js';
3
+ import type { AgentResult } from '../types/agent.js';
4
+ import type { CommandResult } from '../types/command.js';
5
+ import type { WorkflowResult } from '../types/workflow.js';
6
+ import type { PipelineHandle } from '../types/pipeline.js';
7
+ import type { DefinitionSummary } from '../types/registry.js';
8
+ import type { DefinitionType } from '../types/execution.js';
9
+ import type { RunSubmissionResponse, RunHistoryEntry, ValidationQueryOptions } from '../types/validation.js';
10
+ /**
11
+ * Unified UluOps SDK client.
12
+ *
13
+ * Wires together registry, validation, AI, and execution layers.
14
+ * Provides type-safe methods for each execution type plus auto-routing.
15
+ *
16
+ * Execution methods:
17
+ * - `runAgent(name, target, options?)` — Direct agent execution with call-time options
18
+ * - `runCommand(name, input)` — Command execution with saved configuration
19
+ * - `runWorkflow(name, input)` — Workflow execution
20
+ * - `run(name, input)` — Auto-detect type and route
21
+ * - `startPipeline(name, input)` — Async pipeline execution
22
+ */
23
+ export declare class UluOpsClient {
24
+ private registry;
25
+ private validation;
26
+ private agentExecutor;
27
+ private commandExecutor;
28
+ private workflowExecutor;
29
+ private pipelineExecutor;
30
+ private config;
31
+ private logger;
32
+ constructor(config: UluOpsConfig);
33
+ /**
34
+ * Direct agent execution with call-time options.
35
+ *
36
+ * Use for interactive/ad-hoc validation, experimentation, and development.
37
+ * For reproducible CI runs, use `runCommand()` instead.
38
+ */
39
+ runAgent(name: string, target: string, options?: ExecutionOptions): Promise<AgentResult>;
40
+ /**
41
+ * Execute a saved command configuration.
42
+ *
43
+ * Uses model, thresholds, and aggregation from the command definition.
44
+ * Ideal for CI/CD pipelines and team-standardized validation.
45
+ */
46
+ runCommand(name: string, input: ExecutionInput): Promise<CommandResult>;
47
+ /**
48
+ * Execute a workflow with multi-phase orchestration.
49
+ */
50
+ runWorkflow(name: string, input: ExecutionInput): Promise<WorkflowResult>;
51
+ /**
52
+ * Universal execution — auto-routes based on definition type.
53
+ *
54
+ * Resolves the definition name and delegates to the appropriate executor.
55
+ * Agents are directly executable (wrapped as ExecutionResult).
56
+ */
57
+ run(name: string, input: ExecutionInput): Promise<ExecutionResult | AgentResult>;
58
+ /**
59
+ * Start an async pipeline execution.
60
+ * Returns a PipelineHandle for monitoring and control.
61
+ */
62
+ startPipeline(name: string, input: ExecutionInput): Promise<PipelineHandle>;
63
+ /** Run the built-in `validate` command against a target. */
64
+ validate(target: string, options?: Record<string, unknown>): Promise<CommandResult>;
65
+ /** Run the built-in `security` command against a target. */
66
+ security(target: string, options?: Record<string, unknown>): Promise<CommandResult>;
67
+ /** Run the built-in `optimize` command against a target. */
68
+ optimize(target: string, options?: Record<string, unknown>): Promise<CommandResult>;
69
+ /** Run the built-in `ship` workflow against a target. */
70
+ ship(target: string, options?: Record<string, unknown>): Promise<WorkflowResult>;
71
+ /** Run the built-in `post-implementation` workflow against a target. */
72
+ postImplementation(target: string, options?: Record<string, unknown>): Promise<WorkflowResult>;
73
+ /** List available definitions from local files and registry. */
74
+ list(filter?: {
75
+ type?: DefinitionType;
76
+ domain?: string;
77
+ }): Promise<DefinitionSummary[]>;
78
+ /** Inspect a definition's metadata and interface. */
79
+ describe(name: string): Promise<{
80
+ type: DefinitionType;
81
+ name: string;
82
+ version: string;
83
+ hash: string;
84
+ interface: Record<string, unknown>;
85
+ }>;
86
+ /** Query validation run history for a project. */
87
+ getHistory(project: string, options?: ValidationQueryOptions): Promise<RunHistoryEntry[]>;
88
+ /** Get details for a specific validation run by ID. */
89
+ getRun(runId: string): Promise<RunSubmissionResponse>;
90
+ /** Preview what a submission would do without saving (dry run). */
91
+ validateRun(project: string, workflowType: string, result: ExecutionResult): Promise<{
92
+ wouldCreate: boolean;
93
+ wouldUpdate: boolean;
94
+ wouldRegress: boolean;
95
+ validationErrors: string[];
96
+ }>;
97
+ /** Manually submit execution results to the validation service. */
98
+ submitResults(project: string, workflowType: string, result: ExecutionResult): Promise<RunSubmissionResponse>;
99
+ private resolveConfig;
100
+ /**
101
+ * Resolve AI config with env var fallbacks.
102
+ *
103
+ * Default: Anthropic provider with ANTHROPIC_API_KEY env var.
104
+ * Env var convention: <PROVIDER>_API_KEY (e.g., ANTHROPIC_API_KEY, OPENAI_API_KEY)
105
+ */
106
+ private resolveAIConfig;
107
+ private resolveByRef;
108
+ private trackIfEnabled;
109
+ private extractInterface;
110
+ }
111
+ //# sourceMappingURL=UluOpsClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UluOpsClient.d.ts","sourceRoot":"","sources":["../../src/client/UluOpsClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ import { RegistryClient } from '../registry/RegistryClient.js';
2
+ import { ValidationClient } from '../validation/ValidationClient.js';
3
+ import { AIProvider } from '../ai/AIProvider.js';
4
+ import { ModelCatalog } from '../ai/ModelCatalog.js';
5
+ import { AgentExecutor } from '../executor/AgentExecutor.js';
6
+ import { CommandExecutor } from '../executor/CommandExecutor.js';
7
+ import { WorkflowExecutor } from '../executor/WorkflowExecutor.js';
8
+ import { PipelineExecutor } from '../executor/PipelineExecutor.js';
9
+ import { createLogger } from '@uluops/sdk-core';
10
+ import { ConfigurationError } from '../errors/index.js';
11
+ import { parseRef } from '../utils/parseRef.js';
12
+ /** Default request timeout: 5 minutes. Allows for model cold-start + multi-step tool loops in agent execution. */
13
+ const DEFAULT_TIMEOUT_MS = 300_000;
14
+ /**
15
+ * Unified UluOps SDK client.
16
+ *
17
+ * Wires together registry, validation, AI, and execution layers.
18
+ * Provides type-safe methods for each execution type plus auto-routing.
19
+ *
20
+ * Execution methods:
21
+ * - `runAgent(name, target, options?)` — Direct agent execution with call-time options
22
+ * - `runCommand(name, input)` — Command execution with saved configuration
23
+ * - `runWorkflow(name, input)` — Workflow execution
24
+ * - `run(name, input)` — Auto-detect type and route
25
+ * - `startPipeline(name, input)` — Async pipeline execution
26
+ */
27
+ export class UluOpsClient {
28
+ registry;
29
+ validation;
30
+ agentExecutor;
31
+ commandExecutor;
32
+ workflowExecutor;
33
+ pipelineExecutor;
34
+ config;
35
+ logger;
36
+ constructor(config) {
37
+ this.config = this.resolveConfig(config);
38
+ this.logger = createLogger('[core]', this.config.debug);
39
+ const logger = this.logger;
40
+ this.registry = new RegistryClient(this.config, logger);
41
+ this.validation = new ValidationClient(this.config);
42
+ // ModelCatalog resolves aliases via registry (no auto-sync; cache cleared via refresh())
43
+ const modelCatalog = new ModelCatalog(this.registry.registrySdk);
44
+ const aiProvider = new AIProvider(this.config, modelCatalog, logger);
45
+ this.agentExecutor = new AgentExecutor(this.config, aiProvider, logger);
46
+ this.commandExecutor = new CommandExecutor(this.agentExecutor, this.registry);
47
+ this.workflowExecutor = new WorkflowExecutor(this.commandExecutor, this.registry);
48
+ this.pipelineExecutor = new PipelineExecutor(this.workflowExecutor, this.commandExecutor, this.registry);
49
+ }
50
+ // ─── Primary Execution Methods ──────────────────────────────────────────
51
+ /**
52
+ * Direct agent execution with call-time options.
53
+ *
54
+ * Use for interactive/ad-hoc validation, experimentation, and development.
55
+ * For reproducible CI runs, use `runCommand()` instead.
56
+ */
57
+ async runAgent(name, target, options) {
58
+ const resolved = await this.resolveByRef(name, 'agent');
59
+ if (resolved.type !== 'agent') {
60
+ throw new ConfigurationError(`${name} is not an agent (type: ${resolved.type}). Use runCommand() instead.`);
61
+ }
62
+ const result = await this.agentExecutor.execute(resolved, { target }, options);
63
+ await this.trackIfEnabled(result, resolved, 'agent', options);
64
+ return result;
65
+ }
66
+ /**
67
+ * Execute a saved command configuration.
68
+ *
69
+ * Uses model, thresholds, and aggregation from the command definition.
70
+ * Ideal for CI/CD pipelines and team-standardized validation.
71
+ */
72
+ async runCommand(name, input) {
73
+ const resolved = await this.resolveByRef(name, 'command');
74
+ if (resolved.type !== 'command') {
75
+ throw new ConfigurationError(`${name} is not a command (type: ${resolved.type}). Use runAgent() for agents or runWorkflow() for workflows.`);
76
+ }
77
+ const result = await this.commandExecutor.execute(resolved, input);
78
+ await this.trackIfEnabled(result, resolved, 'command');
79
+ return result;
80
+ }
81
+ /**
82
+ * Execute a workflow with multi-phase orchestration.
83
+ */
84
+ async runWorkflow(name, input) {
85
+ const resolved = await this.resolveByRef(name, 'workflow');
86
+ if (resolved.type !== 'workflow') {
87
+ throw new ConfigurationError(`${name} is not a workflow (type: ${resolved.type}). Use runAgent() for agents or runCommand() for commands.`);
88
+ }
89
+ const result = await this.workflowExecutor.execute(resolved, input);
90
+ await this.trackIfEnabled(result, resolved, 'workflow');
91
+ return result;
92
+ }
93
+ /**
94
+ * Universal execution — auto-routes based on definition type.
95
+ *
96
+ * Resolves the definition name and delegates to the appropriate executor.
97
+ * Agents are directly executable (wrapped as ExecutionResult).
98
+ */
99
+ async run(name, input) {
100
+ const resolved = await this.resolveByRef(name);
101
+ let result;
102
+ switch (resolved.type) {
103
+ case 'agent':
104
+ result = await this.agentExecutor.execute(resolved, input);
105
+ break;
106
+ case 'command':
107
+ result = await this.commandExecutor.execute(resolved, input);
108
+ break;
109
+ case 'workflow':
110
+ result = await this.workflowExecutor.execute(resolved, input);
111
+ break;
112
+ case 'pipeline':
113
+ result = await this.pipelineExecutor.execute(resolved, input);
114
+ break;
115
+ default:
116
+ throw new ConfigurationError(`Unknown definition type: ${resolved.type}`);
117
+ }
118
+ await this.trackIfEnabled(result, resolved, resolved.type);
119
+ return result;
120
+ }
121
+ /**
122
+ * Start an async pipeline execution.
123
+ * Returns a PipelineHandle for monitoring and control.
124
+ */
125
+ async startPipeline(name, input) {
126
+ const resolved = await this.resolveByRef(name, 'pipeline');
127
+ if (resolved.type !== 'pipeline') {
128
+ throw new ConfigurationError(`${name} is not a pipeline (type: ${resolved.type}). Use runWorkflow() for workflows or runCommand() for commands.`);
129
+ }
130
+ return this.pipelineExecutor.start(resolved, input);
131
+ }
132
+ // ─── Convenience Methods ────────────────────────────────────────────────
133
+ /** Run the built-in `validate` command against a target. */
134
+ async validate(target, options) {
135
+ return this.runCommand('validate', { target, options });
136
+ }
137
+ /** Run the built-in `security` command against a target. */
138
+ async security(target, options) {
139
+ return this.runCommand('security', { target, options });
140
+ }
141
+ /** Run the built-in `optimize` command against a target. */
142
+ async optimize(target, options) {
143
+ return this.runCommand('optimize', { target, options });
144
+ }
145
+ /** Run the built-in `ship` workflow against a target. */
146
+ async ship(target, options) {
147
+ return this.runWorkflow('ship', { target, options });
148
+ }
149
+ /** Run the built-in `post-implementation` workflow against a target. */
150
+ async postImplementation(target, options) {
151
+ return this.runWorkflow('post-implementation', { target, options });
152
+ }
153
+ // ─── Discovery ──────────────────────────────────────────────────────────
154
+ /** List available definitions from local files and registry. */
155
+ async list(filter) {
156
+ return this.registry.list(filter);
157
+ }
158
+ /** Inspect a definition's metadata and interface. */
159
+ async describe(name) {
160
+ const resolved = await this.registry.resolve(name);
161
+ return {
162
+ type: resolved.type,
163
+ name: resolved.name,
164
+ version: resolved.version,
165
+ hash: resolved.hash,
166
+ interface: this.extractInterface(resolved.definition),
167
+ };
168
+ }
169
+ // ─── Validation Service Delegation ──────────────────────────────────────
170
+ /** Query validation run history for a project. */
171
+ async getHistory(project, options) {
172
+ return this.validation.getHistory(project, options);
173
+ }
174
+ /** Get details for a specific validation run by ID. */
175
+ async getRun(runId) {
176
+ return this.validation.getRun(runId);
177
+ }
178
+ /** Preview what a submission would do without saving (dry run). */
179
+ async validateRun(project, workflowType, result) {
180
+ return this.validation.validateRun(project, workflowType, result);
181
+ }
182
+ /** Manually submit execution results to the validation service. */
183
+ async submitResults(project, workflowType, result) {
184
+ return this.validation.submit({ project, workflowType, result });
185
+ }
186
+ // ─── Private Helpers ────────────────────────────────────────────────────
187
+ resolveConfig(config) {
188
+ const apiKey = config.apiKey ?? process.env['ULUOPS_API_KEY'] ?? process.env['ULU_API_KEY'];
189
+ if (!apiKey) {
190
+ throw new ConfigurationError('UluOps API key is required. Provide via config.apiKey, ULUOPS_API_KEY, or ULU_API_KEY environment variable. ' +
191
+ 'Generate a key at https://app.uluops.ai.');
192
+ }
193
+ if (!apiKey.startsWith('ulr_')) {
194
+ throw new ConfigurationError(`Invalid API key format: keys must begin with "ulr_". ` +
195
+ `Got: "${apiKey.substring(0, 4)}...". ` +
196
+ `Generate a valid key at https://app.uluops.ai.`);
197
+ }
198
+ return {
199
+ apiKey,
200
+ ai: this.resolveAIConfig(config.ai),
201
+ registryUrl: config.registryUrl ?? process.env['ULUOPS_REGISTRY_URL'] ?? 'https://api.uluops.ai/api/v1/registry',
202
+ validationUrl: config.validationUrl ?? process.env['ULUOPS_VALIDATION_URL'] ?? 'https://api.uluops.ai/api/v1/ops',
203
+ dashboardUrl: config.dashboardUrl ?? process.env['ULUOPS_DASHBOARD_URL'] ?? 'https://app.uluops.ai',
204
+ localDefinitions: config.localDefinitions ?? process.env['ULUOPS_LOCAL_DEFINITIONS'],
205
+ trackingEnabled: config.trackingEnabled ?? (process.env['ULUOPS_TRACKING_ENABLED'] !== 'false'),
206
+ timeout: config.timeout ?? DEFAULT_TIMEOUT_MS,
207
+ defaultProject: config.defaultProject ?? process.env['ULUOPS_PROJECT'],
208
+ defaultThinkingBudget: config.defaultThinkingBudget ?? 10_000,
209
+ debug: config.debug ?? (process.env['ULUOPS_DEBUG'] === 'true'),
210
+ contextBudget: config.contextBudget ?? 200_000,
211
+ };
212
+ }
213
+ /**
214
+ * Resolve AI config with env var fallbacks.
215
+ *
216
+ * Default: Anthropic provider with ANTHROPIC_API_KEY env var.
217
+ * Env var convention: <PROVIDER>_API_KEY (e.g., ANTHROPIC_API_KEY, OPENAI_API_KEY)
218
+ */
219
+ resolveAIConfig(ai) {
220
+ const providers = {};
221
+ if (ai?.providers) {
222
+ // Use explicitly configured providers with env var fallback
223
+ for (const [name, creds] of Object.entries(ai.providers)) {
224
+ const apiKey = creds.apiKey ?? resolveProviderApiKey(name);
225
+ if (apiKey) {
226
+ providers[name] = { apiKey };
227
+ }
228
+ }
229
+ }
230
+ else {
231
+ // Auto-detect: scan env vars for known provider API keys
232
+ const KNOWN_PROVIDERS = ['anthropic', 'openai', 'google', 'mistral', 'cohere'];
233
+ for (const name of KNOWN_PROVIDERS) {
234
+ const apiKey = resolveProviderApiKey(name);
235
+ if (apiKey) {
236
+ providers[name] = { apiKey };
237
+ }
238
+ }
239
+ }
240
+ return {
241
+ providers,
242
+ defaultProvider: ai?.defaultProvider ?? 'anthropic',
243
+ modelOverride: ai?.modelOverride,
244
+ };
245
+ }
246
+ async resolveByRef(name, type) {
247
+ const [refName, refVersion] = parseRef(name);
248
+ return type
249
+ ? this.registry.resolve(refName, refVersion, type)
250
+ : this.registry.resolve(refName, refVersion);
251
+ }
252
+ async trackIfEnabled(result, resolved, workflowType, options) {
253
+ const shouldTrack = options?.trackResults ?? this.config.trackingEnabled;
254
+ if (!shouldTrack)
255
+ return;
256
+ try {
257
+ // SAFETY: AgentResult extends ExecutionResult structurally — both share
258
+ // type, name, version, definitionHash, decision, score, durationMs, recommendations, metrics.
259
+ // AgentResult adds agentType, maxScore, categories which the validation API ignores.
260
+ const execResult = {
261
+ type: result.type,
262
+ name: result.name,
263
+ version: result.version,
264
+ definitionHash: result.definitionHash,
265
+ decision: result.decision,
266
+ score: result.score,
267
+ durationMs: result.durationMs,
268
+ recommendations: result.recommendations,
269
+ metrics: result.metrics,
270
+ };
271
+ const response = await this.validation.submit({
272
+ project: options?.project ?? this.config.defaultProject ?? resolved.name,
273
+ workflowType,
274
+ result: execResult,
275
+ });
276
+ // Attach dashboard URL to original result for caller convenience
277
+ result.dashboardUrl = response.dashboardUrl;
278
+ // Record execution in registry for definition-level analytics (non-fatal)
279
+ if (resolved.version !== 'unknown') {
280
+ try {
281
+ await this.registry.registrySdk.executions.record(resolved.type, resolved.name, resolved.version, { source: 'core-sdk', runId: response.runId });
282
+ this.logger.debug(`Execution recorded for ${resolved.type}/${resolved.name}@${resolved.version}`);
283
+ }
284
+ catch (execError) {
285
+ this.logger.warn(`Execution recording failed (non-fatal): ${execError instanceof Error ? execError.message : String(execError)}`);
286
+ }
287
+ }
288
+ else {
289
+ this.logger.debug('Skipping execution recording for unversioned local definition');
290
+ }
291
+ }
292
+ catch (error) {
293
+ this.logger.warn(`Tracking submission failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);
294
+ if (error instanceof Error && 'statusCode' in error) {
295
+ this.logger.debug(`Tracking error: statusCode=${error.statusCode}`);
296
+ }
297
+ }
298
+ }
299
+ extractInterface(definition) {
300
+ const def = definition;
301
+ for (const key of ['agent', 'command', 'workflow', 'pipeline']) {
302
+ const section = def[key];
303
+ if (section && typeof section === 'object') {
304
+ const iface = section['interface'];
305
+ if (iface && typeof iface === 'object') {
306
+ return iface;
307
+ }
308
+ }
309
+ }
310
+ return {};
311
+ }
312
+ }
313
+ /**
314
+ * Resolve an API key for a provider from environment variables.
315
+ * Checks `<PROVIDER>_API_KEY` first, then provider-specific fallbacks
316
+ * (e.g., `GOOGLE_GENERATIVE_AI_API_KEY` for Google's SDK default).
317
+ */
318
+ function resolveProviderApiKey(name) {
319
+ const envKey = `${name.toUpperCase()}_API_KEY`;
320
+ const apiKey = process.env[envKey];
321
+ if (apiKey)
322
+ return apiKey;
323
+ // Google SDK uses GOOGLE_GENERATIVE_AI_API_KEY by default
324
+ if (name === 'google') {
325
+ return process.env['GOOGLE_GENERATIVE_AI_API_KEY'];
326
+ }
327
+ return undefined;
328
+ }
329
+ //# sourceMappingURL=UluOpsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UluOpsClient.js","sourceRoot":"","sources":["../../src/client/UluOpsClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Path to bundled starter agent definitions.
3
+ * Use as `localDefinitions` in config for quick-start without registry access.
4
+ */
5
+ export declare const STARTER_DEFINITIONS_DIR: string;
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAA+C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
4
+ /**
5
+ * Path to bundled starter agent definitions.
6
+ * Use as `localDefinitions` in config for quick-start without registry access.
7
+ */
8
+ export const STARTER_DEFINITIONS_DIR = resolve(__dirname, '../definitions/starter');
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Base error class for all @uluops/core SDK errors.
3
+ *
4
+ * Supports the standard `cause` property (ES2022) for wrapping
5
+ * underlying errors while preserving the original stack trace.
6
+ */
7
+ export declare class UluOpsError extends Error {
8
+ constructor(message: string, options?: ErrorOptions);
9
+ }
10
+ //# sourceMappingURL=UluOpsError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UluOpsError.d.ts","sourceRoot":"","sources":["../../src/errors/UluOpsError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Base error class for all @uluops/core SDK errors.
3
+ *
4
+ * Supports the standard `cause` property (ES2022) for wrapping
5
+ * underlying errors while preserving the original stack trace.
6
+ */
7
+ export class UluOpsError extends Error {
8
+ constructor(message, options) {
9
+ super(message, options);
10
+ this.name = 'UluOpsError';
11
+ }
12
+ }
13
+ //# sourceMappingURL=UluOpsError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UluOpsError.js","sourceRoot":"","sources":["../../src/errors/UluOpsError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,64 @@
1
+ import { UluOpsError } from './UluOpsError.js';
2
+ export { UluOpsError } from './UluOpsError.js';
3
+ /** Thrown when agent/command/workflow execution fails. May include a partial result. */
4
+ export declare class ExecutionError extends UluOpsError {
5
+ readonly partialResult?: unknown | undefined;
6
+ constructor(message: string, partialResult?: unknown | undefined, options?: ErrorOptions);
7
+ }
8
+ /** Thrown when a preflight check fails (e.g. missing env var, unavailable tool). */
9
+ export declare class PreflightError extends UluOpsError {
10
+ readonly check: string;
11
+ readonly details?: Record<string, unknown> | undefined;
12
+ constructor(message: string, check: string, details?: Record<string, unknown> | undefined);
13
+ }
14
+ /** Thrown when the SDK is misconfigured (missing API key, invalid provider, etc.). */
15
+ export declare class ConfigurationError extends UluOpsError {
16
+ constructor(message: string);
17
+ }
18
+ /** Thrown when a model alias cannot be resolved via the registry model catalog. */
19
+ export declare class ModelNotFoundError extends UluOpsError {
20
+ constructor(message: string);
21
+ }
22
+ /** Thrown when a resolved model lacks a required capability (e.g. tools, vision, extendedThinking). */
23
+ export declare class CapabilityError extends UluOpsError {
24
+ constructor(message: string);
25
+ }
26
+ /**
27
+ * Error codes for validation service errors
28
+ */
29
+ export declare const ValidationErrorCodes: {
30
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
31
+ readonly NOT_FOUND: "NOT_FOUND";
32
+ readonly CONFLICT: "CONFLICT";
33
+ readonly RATE_LIMITED: "RATE_LIMITED";
34
+ readonly REQUEST_FAILED: "REQUEST_FAILED";
35
+ readonly SUBMISSION_FAILED: "SUBMISSION_FAILED";
36
+ readonly UNAUTHORIZED: "UNAUTHORIZED";
37
+ readonly FORBIDDEN: "FORBIDDEN";
38
+ };
39
+ export type ValidationErrorCode = typeof ValidationErrorCodes[keyof typeof ValidationErrorCodes];
40
+ /** Thrown when the validation service rejects a submission or returns an error. */
41
+ export declare class ValidationError extends UluOpsError {
42
+ readonly code?: ValidationErrorCode;
43
+ constructor(message: string, code?: ValidationErrorCode);
44
+ }
45
+ /** Thrown when a workflow phase gate fails. Includes partial results for completed phases. */
46
+ export declare class WorkflowError extends UluOpsError {
47
+ readonly context: {
48
+ partialResult: unknown;
49
+ };
50
+ constructor(message: string, context: {
51
+ partialResult: unknown;
52
+ });
53
+ }
54
+ /** Thrown when a pipeline stage fails or a pipeline-level error occurs. */
55
+ export declare class PipelineError extends UluOpsError {
56
+ constructor(message: string);
57
+ }
58
+ /** Thrown when structured output cannot be extracted from an LLM response. */
59
+ export declare class ParseError extends UluOpsError {
60
+ readonly contentPreview: string;
61
+ constructor(message: string, contentPreview: string);
62
+ }
63
+ export { SdkApiError, RateLimitError, UnauthorizedError, ForbiddenError, NotFoundError, ServiceUnavailableError, NetworkError, TimeoutError, } from '@uluops/sdk-core/errors';
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wFAAwF;AACxF,qBAAa,cAAe,SAAQ,WAAW;aAG3B,aAAa,CAAC,EAAE,OAAO;gBADvC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,OAAO,YAAA,EACvC,OAAO,CAAC,EAAE,YAAY;CAKzB;AAED,oFAAoF;AACpF,qBAAa,cAAe,SAAQ,WAAW;aAG3B,KAAK,EAAE,MAAM;aACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED,sFAAsF;AACtF,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,mFAAmF;AACnF,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,uGAAuG;AACvG,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;CASvB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjG,mFAAmF;AACnF,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,SAAgB,IAAI,CAAC,EAAE,mBAAmB,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB;CAKxD;AAED,8FAA8F;AAC9F,qBAAa,aAAc,SAAQ,WAAW;aAG1B,OAAO,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE;gBADnD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE;CAKtD;AAED,2EAA2E;AAC3E,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,8EAA8E;AAC9E,qBAAa,UAAW,SAAQ,WAAW;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAKpD;AAGD,OAAO,EACL,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,YAAY,EACZ,YAAY,GACb,MAAM,yBAAyB,CAAC"}