@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.
- package/README.md +543 -0
- package/definitions/starter/code-validator.agent.yaml +134 -0
- package/definitions/starter/docs-validator.agent.yaml +142 -0
- package/definitions/starter/public-interface-validator.agent.yaml +138 -0
- package/definitions/starter/security-analyst.agent.yaml +144 -0
- package/definitions/starter/test-architect.agent.yaml +137 -0
- package/dist/ai/AIProvider.d.ts +198 -0
- package/dist/ai/AIProvider.d.ts.map +1 -0
- package/dist/ai/AIProvider.js +557 -0
- package/dist/ai/AIProvider.js.map +1 -0
- package/dist/ai/ModelCatalog.d.ts +78 -0
- package/dist/ai/ModelCatalog.d.ts.map +1 -0
- package/dist/ai/ModelCatalog.js +193 -0
- package/dist/ai/ModelCatalog.js.map +1 -0
- package/dist/ai/ShellExecutor.d.ts +42 -0
- package/dist/ai/ShellExecutor.d.ts.map +1 -0
- package/dist/ai/ShellExecutor.js +62 -0
- package/dist/ai/ShellExecutor.js.map +1 -0
- package/dist/ai/TokenBudgetTracker.d.ts +49 -0
- package/dist/ai/TokenBudgetTracker.d.ts.map +1 -0
- package/dist/ai/TokenBudgetTracker.js +61 -0
- package/dist/ai/TokenBudgetTracker.js.map +1 -0
- package/dist/ai/ToolAdapter.d.ts +25 -0
- package/dist/ai/ToolAdapter.d.ts.map +1 -0
- package/dist/ai/ToolAdapter.js +135 -0
- package/dist/ai/ToolAdapter.js.map +1 -0
- package/dist/ai/index.d.ts +6 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/client/UluOpsClient.d.ts +111 -0
- package/dist/client/UluOpsClient.d.ts.map +1 -0
- package/dist/client/UluOpsClient.js +329 -0
- package/dist/client/UluOpsClient.js.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +9 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/UluOpsError.d.ts +10 -0
- package/dist/errors/UluOpsError.d.ts.map +1 -0
- package/dist/errors/UluOpsError.js +13 -0
- package/dist/errors/UluOpsError.js.map +1 -0
- package/dist/errors/index.d.ts +64 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +93 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/executor/AgentExecutor.d.ts +57 -0
- package/dist/executor/AgentExecutor.d.ts.map +1 -0
- package/dist/executor/AgentExecutor.js +331 -0
- package/dist/executor/AgentExecutor.js.map +1 -0
- package/dist/executor/CommandExecutor.d.ts +33 -0
- package/dist/executor/CommandExecutor.d.ts.map +1 -0
- package/dist/executor/CommandExecutor.js +183 -0
- package/dist/executor/CommandExecutor.js.map +1 -0
- package/dist/executor/PipelineExecutor.d.ts +55 -0
- package/dist/executor/PipelineExecutor.d.ts.map +1 -0
- package/dist/executor/PipelineExecutor.js +273 -0
- package/dist/executor/PipelineExecutor.js.map +1 -0
- package/dist/executor/ToolHandler.d.ts +47 -0
- package/dist/executor/ToolHandler.d.ts.map +1 -0
- package/dist/executor/ToolHandler.js +615 -0
- package/dist/executor/ToolHandler.js.map +1 -0
- package/dist/executor/WorkflowExecutor.d.ts +55 -0
- package/dist/executor/WorkflowExecutor.d.ts.map +1 -0
- package/dist/executor/WorkflowExecutor.js +368 -0
- package/dist/executor/WorkflowExecutor.js.map +1 -0
- package/dist/executor/preflight.d.ts +8 -0
- package/dist/executor/preflight.d.ts.map +1 -0
- package/dist/executor/preflight.js +102 -0
- package/dist/executor/preflight.js.map +1 -0
- package/dist/executor/symbols.d.ts +13 -0
- package/dist/executor/symbols.d.ts.map +1 -0
- package/dist/executor/symbols.js +102 -0
- package/dist/executor/symbols.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/OutputExtractor.d.ts +52 -0
- package/dist/parser/OutputExtractor.d.ts.map +1 -0
- package/dist/parser/OutputExtractor.js +818 -0
- package/dist/parser/OutputExtractor.js.map +1 -0
- package/dist/parser/outputSchemas.d.ts +223 -0
- package/dist/parser/outputSchemas.d.ts.map +1 -0
- package/dist/parser/outputSchemas.js +73 -0
- package/dist/parser/outputSchemas.js.map +1 -0
- package/dist/registry/RegistryClient.d.ts +75 -0
- package/dist/registry/RegistryClient.d.ts.map +1 -0
- package/dist/registry/RegistryClient.js +419 -0
- package/dist/registry/RegistryClient.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +2 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/types/agent.d.ts +406 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/ai.d.ts +14 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js +2 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/command.d.ts +153 -0
- package/dist/types/command.d.ts.map +1 -0
- package/dist/types/command.js +2 -0
- package/dist/types/command.js.map +1 -0
- package/dist/types/config.d.ts +136 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/execution.d.ts +172 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +2 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/parser.d.ts +75 -0
- package/dist/types/parser.d.ts.map +1 -0
- package/dist/types/parser.js +2 -0
- package/dist/types/parser.js.map +1 -0
- package/dist/types/pipeline.d.ts +155 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +2 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/registry.d.ts +232 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +2 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/tools.d.ts +29 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +2 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/validation.d.ts +237 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/workflow.d.ts +131 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/formatError.d.ts +6 -0
- package/dist/utils/formatError.d.ts.map +1 -0
- package/dist/utils/formatError.js +10 -0
- package/dist/utils/formatError.js.map +1 -0
- package/dist/utils/parseRef.d.ts +11 -0
- package/dist/utils/parseRef.d.ts.map +1 -0
- package/dist/utils/parseRef.js +16 -0
- package/dist/utils/parseRef.js.map +1 -0
- package/dist/utils/sumTokenMetrics.d.ts +9 -0
- package/dist/utils/sumTokenMetrics.d.ts.map +1 -0
- package/dist/utils/sumTokenMetrics.js +20 -0
- package/dist/utils/sumTokenMetrics.js.map +1 -0
- package/dist/utils/topoSort.d.ts +24 -0
- package/dist/utils/topoSort.d.ts.map +1 -0
- package/dist/utils/topoSort.js +60 -0
- package/dist/utils/topoSort.js.map +1 -0
- package/dist/validation/ValidationClient.d.ts +51 -0
- package/dist/validation/ValidationClient.d.ts.map +1 -0
- package/dist/validation/ValidationClient.js +179 -0
- package/dist/validation/ValidationClient.js.map +1 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelCatalog.d.ts","sourceRoot":"","sources":["../../src/ai/ModelCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,WAAW,EAC7B,KAAK,EACL,UAAU,IAAI,kBAAkB,EAEhC,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAG9B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAEhB,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAC;IAExB,qCAAqC;IACrC,IAAI,EAAE,SAAS,CAAC;IAEhB,yBAAyB;IACzB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAEtD,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAYD;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,UAAU,CAA4B;gBAE1B,GAAG,EAAE,WAAW;IAEpC;;;;;;;OAOG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAwB3E;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKlD;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,iBAAiB,CAAC;KACtC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAKpB;;OAEG;IACH,OAAO,IAAI,IAAI;YASD,eAAe;YAqCf,YAAY;YAcZ,aAAa;YA+Bb,QAAQ;IActB,iEAAiE;IACjE,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,oBAAoB;CAe7B"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { ModelNotFoundError, CapabilityError } from '../errors/index.js';
|
|
2
|
+
const VALID_TIERS = ['budget', 'standard', 'premium', 'reasoning'];
|
|
3
|
+
const DEFAULT_CAPABILITIES = {
|
|
4
|
+
vision: false,
|
|
5
|
+
tools: true,
|
|
6
|
+
streaming: true,
|
|
7
|
+
extendedThinking: false,
|
|
8
|
+
structuredOutput: false,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Registry-backed model catalog with in-memory caching.
|
|
12
|
+
*
|
|
13
|
+
* Resolution priority:
|
|
14
|
+
* 1. Explicit provider:modelId (e.g., "anthropic:claude-sonnet-4-5-20250929")
|
|
15
|
+
* 2. Registry alias (e.g., "sonnet") via models.resolveAlias()
|
|
16
|
+
* 3. Tier name (e.g., "premium") — resolves to first available model for tier
|
|
17
|
+
*
|
|
18
|
+
* Cache is in-memory only. Call refresh() to clear after admin syncs models.
|
|
19
|
+
* No auto-sync or TTL — model sync is an admin operation.
|
|
20
|
+
*/
|
|
21
|
+
export class ModelCatalog {
|
|
22
|
+
sdk;
|
|
23
|
+
aliasCache = new Map();
|
|
24
|
+
modelCache = new Map();
|
|
25
|
+
constructor(sdk) {
|
|
26
|
+
this.sdk = sdk;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a model input to a fully-qualified ResolvedModel.
|
|
30
|
+
*
|
|
31
|
+
* @param input - Alias ('sonnet'), tier ('premium'), or 'provider:modelId'
|
|
32
|
+
* @param opts - Resolution options (capability checks, provider preference)
|
|
33
|
+
* @throws {ModelNotFoundError} If alias/model cannot be resolved
|
|
34
|
+
* @throws {CapabilityError} If model lacks required capabilities
|
|
35
|
+
*/
|
|
36
|
+
async resolve(input, opts) {
|
|
37
|
+
// 1. Explicit provider:modelId
|
|
38
|
+
if (input.includes(':')) {
|
|
39
|
+
return this.resolveExplicit(input, opts);
|
|
40
|
+
}
|
|
41
|
+
// 2. Try alias resolution
|
|
42
|
+
const aliasResult = await this.resolveAlias(input);
|
|
43
|
+
if (aliasResult) {
|
|
44
|
+
const resolved = this.toResolvedModel(aliasResult, input);
|
|
45
|
+
this.validateCapabilities(resolved, opts?.requiredCapabilities);
|
|
46
|
+
return resolved;
|
|
47
|
+
}
|
|
48
|
+
// 3. Try tier resolution
|
|
49
|
+
const tierResult = await this.resolveByTier(input, opts);
|
|
50
|
+
if (tierResult)
|
|
51
|
+
return tierResult;
|
|
52
|
+
throw new ModelNotFoundError(`Cannot resolve model "${input}". Not found as alias, tier, or provider:modelId. ` +
|
|
53
|
+
`Use catalog.listAliases() to see available aliases.`);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* List all available aliases
|
|
57
|
+
*/
|
|
58
|
+
async listAliases() {
|
|
59
|
+
const result = await this.sdk.models.listAliases();
|
|
60
|
+
return result.aliases;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* List available models, optionally filtered
|
|
64
|
+
*/
|
|
65
|
+
async listModels(filter) {
|
|
66
|
+
const result = await this.sdk.models.list(filter);
|
|
67
|
+
return result.models;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clear in-memory cache. Call after admin syncs models in the registry.
|
|
71
|
+
*/
|
|
72
|
+
refresh() {
|
|
73
|
+
this.aliasCache.clear();
|
|
74
|
+
this.modelCache.clear();
|
|
75
|
+
}
|
|
76
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
77
|
+
// Private: Resolution Strategies
|
|
78
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
79
|
+
async resolveExplicit(providerModelId, opts) {
|
|
80
|
+
const colonIdx = providerModelId.indexOf(':');
|
|
81
|
+
const provider = providerModelId.substring(0, colonIdx);
|
|
82
|
+
const modelId = providerModelId.substring(colonIdx + 1);
|
|
83
|
+
// Look up in registry for capabilities/tier
|
|
84
|
+
const model = await this.getModel(provider, modelId);
|
|
85
|
+
if (!model) {
|
|
86
|
+
// Allow unregistered models (user may have access to models not in registry)
|
|
87
|
+
const resolved = {
|
|
88
|
+
provider,
|
|
89
|
+
modelId,
|
|
90
|
+
providerModelId: modelId,
|
|
91
|
+
tier: 'standard',
|
|
92
|
+
capabilities: DEFAULT_CAPABILITIES,
|
|
93
|
+
resolvedFrom: providerModelId,
|
|
94
|
+
};
|
|
95
|
+
this.validateCapabilities(resolved, opts?.requiredCapabilities);
|
|
96
|
+
return resolved;
|
|
97
|
+
}
|
|
98
|
+
const resolved = {
|
|
99
|
+
provider: model.provider,
|
|
100
|
+
modelId: model.modelId,
|
|
101
|
+
providerModelId: model.providerModelId,
|
|
102
|
+
tier: model.tier,
|
|
103
|
+
capabilities: model.capabilities,
|
|
104
|
+
resolvedFrom: providerModelId,
|
|
105
|
+
};
|
|
106
|
+
this.validateCapabilities(resolved, opts?.requiredCapabilities);
|
|
107
|
+
return resolved;
|
|
108
|
+
}
|
|
109
|
+
async resolveAlias(alias) {
|
|
110
|
+
const cached = this.aliasCache.get(alias);
|
|
111
|
+
if (cached !== undefined)
|
|
112
|
+
return cached;
|
|
113
|
+
try {
|
|
114
|
+
const result = await this.sdk.models.resolveAlias(alias);
|
|
115
|
+
this.aliasCache.set(alias, result);
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (this.isNotFoundError(error))
|
|
120
|
+
return null;
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async resolveByTier(tier, opts) {
|
|
125
|
+
if (!VALID_TIERS.includes(tier))
|
|
126
|
+
return null;
|
|
127
|
+
const models = await this.sdk.models.list({
|
|
128
|
+
tier: tier,
|
|
129
|
+
...(opts?.preferredProvider ? { provider: opts.preferredProvider } : {}),
|
|
130
|
+
});
|
|
131
|
+
const model = models.models[0];
|
|
132
|
+
if (!model)
|
|
133
|
+
return null;
|
|
134
|
+
const resolved = {
|
|
135
|
+
provider: model.provider,
|
|
136
|
+
modelId: model.modelId,
|
|
137
|
+
providerModelId: model.providerModelId,
|
|
138
|
+
tier: model.tier,
|
|
139
|
+
capabilities: model.capabilities,
|
|
140
|
+
resolvedFrom: tier,
|
|
141
|
+
};
|
|
142
|
+
this.validateCapabilities(resolved, opts?.requiredCapabilities);
|
|
143
|
+
return resolved;
|
|
144
|
+
}
|
|
145
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
146
|
+
// Private: Cache + Helpers
|
|
147
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
148
|
+
async getModel(provider, modelId) {
|
|
149
|
+
const key = `${provider}:${modelId}`;
|
|
150
|
+
if (this.modelCache.has(key))
|
|
151
|
+
return this.modelCache.get(key);
|
|
152
|
+
try {
|
|
153
|
+
const model = await this.sdk.models.get(provider, modelId);
|
|
154
|
+
this.modelCache.set(key, model);
|
|
155
|
+
return model;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (this.isNotFoundError(error))
|
|
159
|
+
return null;
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** Check if an error is a 404/not-found from the registry API */
|
|
164
|
+
isNotFoundError(error) {
|
|
165
|
+
if (typeof error === 'object' && error !== null && 'status' in error) {
|
|
166
|
+
return error.status === 404;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
toResolvedModel(alias, input) {
|
|
171
|
+
const model = alias.model;
|
|
172
|
+
const targetParts = alias.target.split(':');
|
|
173
|
+
return {
|
|
174
|
+
provider: model?.provider ?? targetParts[0] ?? 'unknown',
|
|
175
|
+
modelId: model?.modelId ?? targetParts[1] ?? alias.target,
|
|
176
|
+
providerModelId: model?.providerModelId ?? targetParts[1] ?? alias.target,
|
|
177
|
+
tier: model?.tier ?? 'standard',
|
|
178
|
+
capabilities: model?.capabilities ?? DEFAULT_CAPABILITIES,
|
|
179
|
+
resolvedFrom: input,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
validateCapabilities(model, required) {
|
|
183
|
+
if (!required || required.length === 0)
|
|
184
|
+
return;
|
|
185
|
+
const missing = required.filter(cap => !model.capabilities[cap]);
|
|
186
|
+
if (missing.length > 0) {
|
|
187
|
+
throw new CapabilityError(`Model "${model.resolvedFrom}" (${model.provider}:${model.modelId}) ` +
|
|
188
|
+
`lacks required capabilities: ${missing.join(', ')}. ` +
|
|
189
|
+
`Model capabilities: ${JSON.stringify(model.capabilities)}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=ModelCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelCatalog.js","sourceRoot":"","sources":["../../src/ai/ModelCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface ShellResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
timedOut: boolean;
|
|
5
|
+
exitCode: number;
|
|
6
|
+
}
|
|
7
|
+
export interface OpenAIShellAction {
|
|
8
|
+
commands: string[];
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
maxOutputLength?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface OpenAIShellOutput {
|
|
13
|
+
output: Array<{
|
|
14
|
+
stdout: string;
|
|
15
|
+
stderr: string;
|
|
16
|
+
outcome: {
|
|
17
|
+
type: 'timeout';
|
|
18
|
+
} | {
|
|
19
|
+
type: 'exit';
|
|
20
|
+
exitCode: number;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Execute a shell command string via `exec()`.
|
|
26
|
+
*
|
|
27
|
+
* SECURITY NOTE: The bash tool is an opt-in feature gated by `agentTools: ['bash']` in the
|
|
28
|
+
* agent YAML definition. When enabled, the LLM-generated command string is passed directly
|
|
29
|
+
* to `exec()` (i.e., `sh -c <command>`), which grants the LLM full host OS access scoped
|
|
30
|
+
* to `cwd`. There is no allowlist or OS-level sandbox. Only enable the bash tool in
|
|
31
|
+
* isolated environments (containers, CI sandboxes). Never enable it for untrusted targets.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runShellCommand(command: string, cwd: string, timeoutMs: number): Promise<ShellResult>;
|
|
34
|
+
/** Anthropic bash tool adapter — returns plain string */
|
|
35
|
+
export declare function executeShellAsString(command: string, cwd: string, timeoutMs: number): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* OpenAI shell tool adapter — returns structured output.
|
|
38
|
+
* Shell tool action shape (verified from @ai-sdk/openai index.d.ts:718-722):
|
|
39
|
+
* { commands: string[], timeoutMs?: number, maxOutputLength?: number }
|
|
40
|
+
*/
|
|
41
|
+
export declare function executeShellAsOpenAIResult(action: OpenAIShellAction, cwd: string, defaultTimeoutMs: number): Promise<OpenAIShellOutput>;
|
|
42
|
+
//# sourceMappingURL=ShellExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellExecutor.d.ts","sourceRoot":"","sources":["../../src/ai/ShellExecutor.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,GAAG;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACnE,CAAC,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,yDAAyD;AACzD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAgB5B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
/**
|
|
5
|
+
* Execute a shell command string via `exec()`.
|
|
6
|
+
*
|
|
7
|
+
* SECURITY NOTE: The bash tool is an opt-in feature gated by `agentTools: ['bash']` in the
|
|
8
|
+
* agent YAML definition. When enabled, the LLM-generated command string is passed directly
|
|
9
|
+
* to `exec()` (i.e., `sh -c <command>`), which grants the LLM full host OS access scoped
|
|
10
|
+
* to `cwd`. There is no allowlist or OS-level sandbox. Only enable the bash tool in
|
|
11
|
+
* isolated environments (containers, CI sandboxes). Never enable it for untrusted targets.
|
|
12
|
+
*/
|
|
13
|
+
export async function runShellCommand(command, cwd, timeoutMs) {
|
|
14
|
+
try {
|
|
15
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
16
|
+
cwd,
|
|
17
|
+
timeout: timeoutMs,
|
|
18
|
+
maxBuffer: 1024 * 1024, // 1MB
|
|
19
|
+
});
|
|
20
|
+
return { stdout: stdout || '', stderr: stderr || '', timedOut: false, exitCode: 0 };
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const err = error;
|
|
24
|
+
if (err.killed || err.signal) {
|
|
25
|
+
return { stdout: err.stdout || '', stderr: err.stderr || '', timedOut: true, exitCode: 1 };
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
stdout: err.stdout || '',
|
|
29
|
+
stderr: err.stderr || String(error),
|
|
30
|
+
timedOut: false,
|
|
31
|
+
exitCode: typeof err.code === 'number' ? err.code : 1,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Anthropic bash tool adapter — returns plain string */
|
|
36
|
+
export async function executeShellAsString(command, cwd, timeoutMs) {
|
|
37
|
+
const result = await runShellCommand(command, cwd, timeoutMs);
|
|
38
|
+
if (result.timedOut)
|
|
39
|
+
return `Command timed out after ${timeoutMs}ms`;
|
|
40
|
+
return result.stdout || result.stderr || '(no output)';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* OpenAI shell tool adapter — returns structured output.
|
|
44
|
+
* Shell tool action shape (verified from @ai-sdk/openai index.d.ts:718-722):
|
|
45
|
+
* { commands: string[], timeoutMs?: number, maxOutputLength?: number }
|
|
46
|
+
*/
|
|
47
|
+
export async function executeShellAsOpenAIResult(action, cwd, defaultTimeoutMs) {
|
|
48
|
+
const timeoutMs = action.timeoutMs ?? defaultTimeoutMs;
|
|
49
|
+
const results = [];
|
|
50
|
+
for (const command of action.commands) {
|
|
51
|
+
const result = await runShellCommand(command, cwd, timeoutMs);
|
|
52
|
+
results.push({
|
|
53
|
+
stdout: result.stdout,
|
|
54
|
+
stderr: result.stderr,
|
|
55
|
+
outcome: result.timedOut
|
|
56
|
+
? { type: 'timeout' }
|
|
57
|
+
: { type: 'exit', exitCode: result.exitCode },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return { output: results };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ShellExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellExecutor.js","sourceRoot":"","sources":["../../src/ai/ShellExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAuBlC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,GAAW,EACX,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE;YAClD,GAAG;YACH,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;SAC/B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACtF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAA+F,CAAC;QAC5G,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC7F,CAAC;QACD,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;YACnC,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACtD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,GAAW,EACX,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,2BAA2B,SAAS,IAAI,CAAC;IACrE,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAyB,EACzB,GAAW,EACX,gBAAwB;IAExB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,gBAAgB,CAAC;IACvD,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,QAAQ;gBACtB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE;gBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;SACzD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks context window usage across steps and provides budget status.
|
|
3
|
+
*
|
|
4
|
+
* Each step's `inputTokens` from the AI SDK represents the TOTAL input tokens
|
|
5
|
+
* for that API call (including all previous conversation + cached tokens).
|
|
6
|
+
* This means the last step's `inputTokens` IS the current context window size.
|
|
7
|
+
* We replace (not accumulate) the input value on each update.
|
|
8
|
+
*
|
|
9
|
+
* Output tokens are incremental per step and accumulated normally.
|
|
10
|
+
*
|
|
11
|
+
* Used by:
|
|
12
|
+
* - ToolAdapter: exposes `get_token_budget` synthetic tool
|
|
13
|
+
* - AIProvider: updated via `onStepFinish` callback
|
|
14
|
+
* - AgentExecutor: passed `contextBudget` to configure the tracker
|
|
15
|
+
*/
|
|
16
|
+
export declare class TokenBudgetTracker {
|
|
17
|
+
private budget;
|
|
18
|
+
/** Current context window size (last step's total input tokens) */
|
|
19
|
+
private currentContextTokens;
|
|
20
|
+
/** Cumulative output tokens across all steps */
|
|
21
|
+
private cumulativeOutput;
|
|
22
|
+
constructor(budget: number);
|
|
23
|
+
/**
|
|
24
|
+
* Record token usage from a completed step.
|
|
25
|
+
*
|
|
26
|
+
* `inputTokens` is the full context window size for the latest API call
|
|
27
|
+
* (replaces previous value). `outputTokens` is incremental (accumulated).
|
|
28
|
+
*/
|
|
29
|
+
update(inputTokens: number, outputTokens: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get current budget status for the LLM.
|
|
32
|
+
*
|
|
33
|
+
* `usedTotal` represents the current context window size, which is
|
|
34
|
+
* what determines whether we'll hit the model's context limit.
|
|
35
|
+
*/
|
|
36
|
+
getStatus(): {
|
|
37
|
+
budget: number;
|
|
38
|
+
usedInput: number;
|
|
39
|
+
usedOutput: number;
|
|
40
|
+
usedTotal: number;
|
|
41
|
+
remaining: number;
|
|
42
|
+
percentUsed: number;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Check if context window usage has exceeded a threshold percentage.
|
|
46
|
+
*/
|
|
47
|
+
isOverThreshold(threshold: number): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=TokenBudgetTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenBudgetTracker.d.ts","sourceRoot":"","sources":["../../src/ai/TokenBudgetTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,MAAM;IAL1B,mEAAmE;IACnE,OAAO,CAAC,oBAAoB,CAAK;IACjC,gDAAgD;IAChD,OAAO,CAAC,gBAAgB,CAAK;gBAET,MAAM,EAAE,MAAM;IAElC;;;;;OAKG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAKvD;;;;;OAKG;IACH,SAAS,IAAI;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB;IAeD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAG5C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks context window usage across steps and provides budget status.
|
|
3
|
+
*
|
|
4
|
+
* Each step's `inputTokens` from the AI SDK represents the TOTAL input tokens
|
|
5
|
+
* for that API call (including all previous conversation + cached tokens).
|
|
6
|
+
* This means the last step's `inputTokens` IS the current context window size.
|
|
7
|
+
* We replace (not accumulate) the input value on each update.
|
|
8
|
+
*
|
|
9
|
+
* Output tokens are incremental per step and accumulated normally.
|
|
10
|
+
*
|
|
11
|
+
* Used by:
|
|
12
|
+
* - ToolAdapter: exposes `get_token_budget` synthetic tool
|
|
13
|
+
* - AIProvider: updated via `onStepFinish` callback
|
|
14
|
+
* - AgentExecutor: passed `contextBudget` to configure the tracker
|
|
15
|
+
*/
|
|
16
|
+
export class TokenBudgetTracker {
|
|
17
|
+
budget;
|
|
18
|
+
/** Current context window size (last step's total input tokens) */
|
|
19
|
+
currentContextTokens = 0;
|
|
20
|
+
/** Cumulative output tokens across all steps */
|
|
21
|
+
cumulativeOutput = 0;
|
|
22
|
+
constructor(budget) {
|
|
23
|
+
this.budget = budget;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Record token usage from a completed step.
|
|
27
|
+
*
|
|
28
|
+
* `inputTokens` is the full context window size for the latest API call
|
|
29
|
+
* (replaces previous value). `outputTokens` is incremental (accumulated).
|
|
30
|
+
*/
|
|
31
|
+
update(inputTokens, outputTokens) {
|
|
32
|
+
this.currentContextTokens = inputTokens;
|
|
33
|
+
this.cumulativeOutput += outputTokens;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get current budget status for the LLM.
|
|
37
|
+
*
|
|
38
|
+
* `usedTotal` represents the current context window size, which is
|
|
39
|
+
* what determines whether we'll hit the model's context limit.
|
|
40
|
+
*/
|
|
41
|
+
getStatus() {
|
|
42
|
+
const usedTotal = this.currentContextTokens;
|
|
43
|
+
const remaining = Math.max(0, this.budget - usedTotal);
|
|
44
|
+
const percentUsed = this.budget > 0 ? Math.round((usedTotal / this.budget) * 100) : 0;
|
|
45
|
+
return {
|
|
46
|
+
budget: this.budget,
|
|
47
|
+
usedInput: this.currentContextTokens,
|
|
48
|
+
usedOutput: this.cumulativeOutput,
|
|
49
|
+
usedTotal,
|
|
50
|
+
remaining,
|
|
51
|
+
percentUsed,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if context window usage has exceeded a threshold percentage.
|
|
56
|
+
*/
|
|
57
|
+
isOverThreshold(threshold) {
|
|
58
|
+
return this.budget > 0 && this.currentContextTokens >= this.budget * threshold;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=TokenBudgetTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenBudgetTracker.js","sourceRoot":"","sources":["../../src/ai/TokenBudgetTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,kBAAkB;IAMT;IALpB,mEAAmE;IAC3D,oBAAoB,GAAG,CAAC,CAAC;IACjC,gDAAgD;IACxC,gBAAgB,GAAG,CAAC,CAAC;IAE7B,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC;;;;;OAKG;IACH,MAAM,CAAC,WAAmB,EAAE,YAAoB;QAC9C,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC;QACxC,IAAI,CAAC,gBAAgB,IAAI,YAAY,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,SAAS;QAQP,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtF,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,oBAAoB;YACpC,UAAU,EAAE,IAAI,CAAC,gBAAgB;YACjC,SAAS;YACT,SAAS;YACT,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACjF,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ToolSet } from 'ai';
|
|
2
|
+
import type { ToolHandler } from '../executor/ToolHandler.js';
|
|
3
|
+
import type { TokenBudgetTracker } from './TokenBudgetTracker.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts UluOps ToolHandler to AI SDK v6 tool format.
|
|
6
|
+
*
|
|
7
|
+
* AI SDK v6 uses Zod schemas via `inputSchema` for input validation.
|
|
8
|
+
* This adapter bridges ToolHandler's JSON Schema tools to AI SDK's Zod-based tool definitions.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ToolAdapter {
|
|
11
|
+
private toolHandler;
|
|
12
|
+
private additionalTools?;
|
|
13
|
+
private budgetTracker?;
|
|
14
|
+
constructor(toolHandler: ToolHandler, additionalTools?: ToolSet | undefined, budgetTracker?: TokenBudgetTracker | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* Execute a tool call via ToolHandler and return content or throw on error.
|
|
17
|
+
*/
|
|
18
|
+
private executeTool;
|
|
19
|
+
/**
|
|
20
|
+
* Get AI SDK v6 compatible tools from ToolHandler.
|
|
21
|
+
* Converts JSON Schema tool definitions to Zod-based AI SDK tools.
|
|
22
|
+
*/
|
|
23
|
+
getTools(): ToolSet;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ToolAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolAdapter.d.ts","sourceRoot":"","sources":["../../src/ai/ToolAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,eAAe,CAAC;IACxB,OAAO,CAAC,aAAa,CAAC;gBAFd,WAAW,EAAE,WAAW,EACxB,eAAe,CAAC,EAAE,OAAO,YAAA,EACzB,aAAa,CAAC,EAAE,kBAAkB,YAAA;IAG5C;;OAEG;YACW,WAAW;IAUzB;;;OAGG;IACH,QAAQ,IAAI,OAAO;CAuHpB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* Converts UluOps ToolHandler to AI SDK v6 tool format.
|
|
5
|
+
*
|
|
6
|
+
* AI SDK v6 uses Zod schemas via `inputSchema` for input validation.
|
|
7
|
+
* This adapter bridges ToolHandler's JSON Schema tools to AI SDK's Zod-based tool definitions.
|
|
8
|
+
*/
|
|
9
|
+
export class ToolAdapter {
|
|
10
|
+
toolHandler;
|
|
11
|
+
additionalTools;
|
|
12
|
+
budgetTracker;
|
|
13
|
+
constructor(toolHandler, additionalTools, budgetTracker) {
|
|
14
|
+
this.toolHandler = toolHandler;
|
|
15
|
+
this.additionalTools = additionalTools;
|
|
16
|
+
this.budgetTracker = budgetTracker;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Execute a tool call via ToolHandler and return content or throw on error.
|
|
20
|
+
*/
|
|
21
|
+
async executeTool(name, input) {
|
|
22
|
+
const result = await this.toolHandler.fulfill({
|
|
23
|
+
id: crypto.randomUUID(),
|
|
24
|
+
name,
|
|
25
|
+
input,
|
|
26
|
+
});
|
|
27
|
+
if (result.is_error)
|
|
28
|
+
throw new Error(result.content);
|
|
29
|
+
return result.content;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get AI SDK v6 compatible tools from ToolHandler.
|
|
33
|
+
* Converts JSON Schema tool definitions to Zod-based AI SDK tools.
|
|
34
|
+
*/
|
|
35
|
+
getTools() {
|
|
36
|
+
const tools = {
|
|
37
|
+
...this.additionalTools,
|
|
38
|
+
read_file: tool({
|
|
39
|
+
description: 'Read the contents of a file. Use start_line/end_line for large files to avoid reading the entire file.',
|
|
40
|
+
inputSchema: z.object({
|
|
41
|
+
path: z.string().describe('File path relative to target directory'),
|
|
42
|
+
start_line: z.number().int().optional().describe('First line to read (1-based). Default: 1'),
|
|
43
|
+
end_line: z.number().int().optional().describe('Last line to read (1-based). Default: end of file'),
|
|
44
|
+
}),
|
|
45
|
+
execute: async ({ path, start_line, end_line }) => this.executeTool('read_file', {
|
|
46
|
+
path,
|
|
47
|
+
...(start_line !== undefined ? { start_line } : {}),
|
|
48
|
+
...(end_line !== undefined ? { end_line } : {}),
|
|
49
|
+
}),
|
|
50
|
+
}),
|
|
51
|
+
list_files: tool({
|
|
52
|
+
description: 'List files in a directory with size/line metadata. Supports glob patterns. Results are capped at max_results.',
|
|
53
|
+
inputSchema: z.object({
|
|
54
|
+
path: z.string().describe('Directory path relative to target'),
|
|
55
|
+
pattern: z.string().optional().describe('Glob pattern (e.g., "**/*.ts")'),
|
|
56
|
+
max_results: z.number().int().optional().describe('Maximum files to return. Default: 200'),
|
|
57
|
+
}),
|
|
58
|
+
execute: async ({ path, pattern, max_results }) => this.executeTool('list_files', {
|
|
59
|
+
path,
|
|
60
|
+
...(pattern !== undefined ? { pattern } : {}),
|
|
61
|
+
...(max_results !== undefined ? { max_results } : {}),
|
|
62
|
+
}),
|
|
63
|
+
}),
|
|
64
|
+
search_content: tool({
|
|
65
|
+
description: 'Search for a pattern across files. Supports regex. Use mode to control output verbosity.',
|
|
66
|
+
inputSchema: z.object({
|
|
67
|
+
pattern: z.string().describe('Search pattern (supports regex)'),
|
|
68
|
+
file_pattern: z.string().optional().describe('Glob pattern for files'),
|
|
69
|
+
max_results: z.number().optional().describe('Max matches (default: 50)'),
|
|
70
|
+
mode: z
|
|
71
|
+
.enum(['matches', 'files', 'count'])
|
|
72
|
+
.optional()
|
|
73
|
+
.describe('"matches" (default), "files" (paths only), "count" (per-file counts)'),
|
|
74
|
+
context_lines: z
|
|
75
|
+
.number()
|
|
76
|
+
.int()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe('Lines of context before/after each match (0-5). Default: 0'),
|
|
79
|
+
}),
|
|
80
|
+
execute: async ({ pattern, file_pattern, max_results, mode, context_lines }) => this.executeTool('search_content', {
|
|
81
|
+
pattern,
|
|
82
|
+
...(file_pattern !== undefined ? { file_pattern } : {}),
|
|
83
|
+
...(max_results !== undefined ? { max_results } : {}),
|
|
84
|
+
...(mode !== undefined ? { mode } : {}),
|
|
85
|
+
...(context_lines !== undefined ? { context_lines } : {}),
|
|
86
|
+
}),
|
|
87
|
+
}),
|
|
88
|
+
get_file_info: tool({
|
|
89
|
+
description: 'Get file metadata (size, line count, language) without reading content. Use before read_file to decide what to read.',
|
|
90
|
+
inputSchema: z.object({
|
|
91
|
+
path: z.string().describe('File path relative to target directory'),
|
|
92
|
+
}),
|
|
93
|
+
execute: async ({ path }) => this.executeTool('get_file_info', { path }),
|
|
94
|
+
}),
|
|
95
|
+
get_directory_tree: tool({
|
|
96
|
+
description: 'Get a hierarchical view of a directory with file counts and sizes. More structured than list_files.',
|
|
97
|
+
inputSchema: z.object({
|
|
98
|
+
path: z.string().describe('Directory path relative to target'),
|
|
99
|
+
max_depth: z.number().int().optional().describe('Maximum depth to traverse. Default: 3'),
|
|
100
|
+
include_sizes: z.boolean().optional().describe('Include file sizes. Default: true'),
|
|
101
|
+
}),
|
|
102
|
+
execute: async ({ path, max_depth, include_sizes }) => this.executeTool('get_directory_tree', {
|
|
103
|
+
path,
|
|
104
|
+
...(max_depth !== undefined ? { max_depth } : {}),
|
|
105
|
+
...(include_sizes !== undefined ? { include_sizes } : {}),
|
|
106
|
+
}),
|
|
107
|
+
}),
|
|
108
|
+
get_symbols: tool({
|
|
109
|
+
description: 'Extract exported symbols (functions, classes, interfaces, types, constants) from a source file with line numbers.',
|
|
110
|
+
inputSchema: z.object({
|
|
111
|
+
path: z.string().describe('File path relative to target directory'),
|
|
112
|
+
include_private: z.boolean().optional().describe('Include non-exported symbols. Default: false'),
|
|
113
|
+
}),
|
|
114
|
+
execute: async ({ path, include_private }) => this.executeTool('get_symbols', {
|
|
115
|
+
path,
|
|
116
|
+
...(include_private !== undefined ? { include_private } : {}),
|
|
117
|
+
}),
|
|
118
|
+
}),
|
|
119
|
+
};
|
|
120
|
+
// Synthetic tool: get_token_budget (needs runtime state, not ToolHandler)
|
|
121
|
+
if (this.budgetTracker) {
|
|
122
|
+
const tracker = this.budgetTracker;
|
|
123
|
+
tools['get_token_budget'] = tool({
|
|
124
|
+
description: 'Get current token budget status showing how much context window has been used. Use to decide whether to read more files or wrap up.',
|
|
125
|
+
inputSchema: z.object({}),
|
|
126
|
+
execute: async () => {
|
|
127
|
+
const status = tracker.getStatus();
|
|
128
|
+
return JSON.stringify(status, null, 2);
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return tools;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=ToolAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolAdapter.js","sourceRoot":"","sources":["../../src/ai/ToolAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AIProvider } from './AIProvider.js';
|
|
2
|
+
export type { AIGenerateResult, AIGenerateOptions } from './AIProvider.js';
|
|
3
|
+
export { ModelCatalog } from './ModelCatalog.js';
|
|
4
|
+
export type { ResolvedModel, ResolveOptions } from './ModelCatalog.js';
|
|
5
|
+
export { ToolAdapter } from './ToolAdapter.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/ai/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|