@telora/mcp-products 0.22.7 → 0.22.10

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.
@@ -1,305 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Factory tool handlers (consolidated):
3
- // telora_factory_blueprint_list, telora_factory_blueprint_create, _update
4
- // telora_factory_spec (create | get | list | update | validate)
5
- // telora_factory_spec_template (create | list | update)
6
- // telora_factory_spec_template_selection (add | remove)
7
- // telora_factory_instance (get | update)
8
- // telora_factory_work_unit (list | update)
9
- // telora_factory_gate (result_create | escalate)
10
- // telora_factory_execution_unit (list | get | template_list | template_get)
11
- // ---------------------------------------------------------------------------
12
- import { z } from "zod";
13
- import { callProductApi, successResult, validationError, buildFields, compactEntity, wrapHandler, } from "../shared.js";
14
- export function registerFactoryTools(server, getCreds, profile = 'full') {
15
- // -- telora_factory_blueprint_list -------------------------------------------
16
- server.tool("telora_factory_blueprint_list", "Factory infrastructure: list available blueprints. Blueprints define gate configurations (deterministic, behavioral, adversarial), " +
17
- "resource limits, and execution models for automated software production.", {
18
- status: z.enum(["draft", "active", "archived"]).optional().describe("Filter by status"),
19
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
20
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
21
- detail: z.enum(["titles", "summary", "full"]).optional().describe("Response detail level. 'titles' returns id+name only. 'summary' (default) returns compact navigation fields. 'full' returns all fields."),
22
- }, wrapHandler(async ({ status, limit, offset, detail }) => {
23
- const fields = buildFields({ status });
24
- const body = {
25
- action: "factory_blueprint_list",
26
- fields: Object.keys(fields).length > 0 ? fields : undefined,
27
- };
28
- if (limit !== undefined)
29
- body.limit = limit;
30
- if (offset !== undefined)
31
- body.offset = offset;
32
- if (detail !== undefined)
33
- body.detail = detail;
34
- const result = await callProductApi(getCreds(), body);
35
- return successResult({ items: result.blueprints, totalCount: result.totalCount });
36
- }));
37
- // -- telora_factory_blueprint_create / _update --------------------------------
38
- if (profile === 'full') {
39
- server.tool("telora_factory_blueprint_create", "Factory infrastructure: create a new blueprint defining gate types, resource budgets (tokens, wall clock, iterations), " +
40
- "and escalation triggers for automated production runs.", {
41
- name: z.string().max(200).describe("Blueprint name"),
42
- description: z.string().max(2000).optional().describe("Blueprint description"),
43
- operationalNotes: z.string().max(5000).optional().describe("Operational notes for agents executing this blueprint"),
44
- specConstraints: z.string().max(5000).optional().describe("Compatibility requirements specs must satisfy before being launched with this blueprint. Prose description of what the spec must/must not say."),
45
- status: z.enum(["draft", "active", "archived"]).optional().describe("Blueprint status (default: draft)"),
46
- gatesEnabled: z.array(z.enum(["deterministic", "behavioral", "adversarial"])).optional().describe("Gate types to enable"),
47
- deterministicConfig: z.record(z.string(), z.unknown()).optional().describe("Deterministic gate configuration"),
48
- behavioralConfig: z.record(z.string(), z.unknown()).optional().describe("Behavioral gate configuration"),
49
- adversarialConfig: z.record(z.string(), z.unknown()).optional().describe("Adversarial gate configuration"),
50
- maxTokenBudget: z.number().int().min(0).optional().describe("Max token budget per instance"),
51
- maxWallClockHours: z.number().min(0).optional().describe("Max wall clock hours per instance"),
52
- maxIterationsPerWorkUnit: z.number().int().min(1).optional().describe("Max iterations per work unit"),
53
- maxWorkUnits: z.number().int().min(1).optional().describe("Max work units per instance"),
54
- escalationTriggers: z.array(z.string()).optional().describe("Conditions that trigger escalation"),
55
- pauseTimeoutHours: z.number().min(0).optional().describe("Hours before paused instance times out"),
56
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
57
- }, wrapHandler(async ({ returnFull, ...params }) => {
58
- const fields = buildFields(params, [
59
- 'name', 'description', 'operationalNotes', 'specConstraints', 'status',
60
- 'gatesEnabled', 'deterministicConfig', 'behavioralConfig', 'adversarialConfig',
61
- 'maxTokenBudget', 'maxWallClockHours', 'maxIterationsPerWorkUnit', 'maxWorkUnits',
62
- 'escalationTriggers', 'pauseTimeoutHours',
63
- ]);
64
- const result = await callProductApi(getCreds(), {
65
- action: "factory_blueprint_create",
66
- fields,
67
- });
68
- return successResult(compactEntity(result.blueprint, Object.keys(fields), returnFull));
69
- }));
70
- server.tool("telora_factory_blueprint_update", "Factory infrastructure: update a blueprint's gate config, resource limits, status, pipeline graph, or execution unit settings.", {
71
- blueprintId: z.string().uuid().describe("Blueprint UUID"),
72
- name: z.string().max(200).optional().describe("Blueprint name"),
73
- description: z.string().max(2000).optional().describe("Blueprint description"),
74
- operationalNotes: z.string().max(5000).optional().describe("Operational notes for agents executing this blueprint"),
75
- specConstraints: z.string().max(5000).optional().describe("Compatibility requirements specs must satisfy before being launched with this blueprint. Prose description of what the spec must/must not say."),
76
- status: z.enum(["draft", "active", "archived"]).optional().describe("Blueprint status"),
77
- gatesEnabled: z.array(z.enum(["deterministic", "behavioral", "adversarial"])).optional().describe("Gate types to enable"),
78
- deterministicConfig: z.record(z.string(), z.unknown()).optional().describe("Deterministic gate configuration"),
79
- behavioralConfig: z.record(z.string(), z.unknown()).optional().describe("Behavioral gate configuration"),
80
- adversarialConfig: z.record(z.string(), z.unknown()).optional().describe("Adversarial gate configuration"),
81
- maxTokenBudget: z.number().int().min(0).optional().describe("Max token budget per instance"),
82
- maxWallClockHours: z.number().min(0).optional().describe("Max wall clock hours per instance"),
83
- maxIterationsPerWorkUnit: z.number().int().min(1).optional().describe("Max iterations per work unit"),
84
- maxWorkUnits: z.number().int().min(1).optional().describe("Max work units per instance"),
85
- escalationTriggers: z.array(z.string()).optional().describe("Conditions that trigger escalation"),
86
- pauseTimeoutHours: z.number().min(0).optional().describe("Hours before paused instance times out"),
87
- executionUnitCount: z.number().int().min(1).optional().describe("Number of execution units per instance (default 1)"),
88
- executionUnitConfig: z.record(z.string(), z.unknown()).optional().describe("Default execution unit config (model, MCP tools, agent teams)"),
89
- pipelineGraph: z.record(z.string(), z.unknown()).optional().describe("Pipeline graph configuration with nodes and edges"),
90
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
91
- }, wrapHandler(async ({ blueprintId, returnFull, ...params }) => {
92
- const fields = buildFields(params, [
93
- 'name', 'description', 'operationalNotes', 'specConstraints', 'status',
94
- 'gatesEnabled', 'deterministicConfig', 'behavioralConfig', 'adversarialConfig',
95
- 'maxTokenBudget', 'maxWallClockHours', 'maxIterationsPerWorkUnit', 'maxWorkUnits',
96
- 'escalationTriggers', 'pauseTimeoutHours',
97
- 'executionUnitCount', 'executionUnitConfig', 'pipelineGraph',
98
- ]);
99
- if (Object.keys(fields).length === 0) {
100
- return validationError("At least one field must be provided to update");
101
- }
102
- const result = await callProductApi(getCreds(), {
103
- action: "factory_blueprint_update",
104
- blueprintId,
105
- fields,
106
- });
107
- return successResult(compactEntity(result.blueprint, Object.keys(fields), returnFull));
108
- }));
109
- }
110
- // -- telora_factory_spec removed (PRT is the sole factory input) --
111
- // -- telora_factory_spec_template removed --
112
- // -- telora_factory_spec_template_selection removed --
113
- // -- telora_factory_instance (consolidated) -----------------------------------
114
- // Available in all profiles: humans need get/update (pause, cancel) for instances
115
- server.tool("telora_factory_instance", "Factory execution: view and control running factory instances. " +
116
- "Instances represent an active build cycle from a spec + blueprint. " +
117
- "Actions: get instance details (includes blueprint config), " +
118
- "update instance status (resume paused with 'building', cancel with 'cancelled').", {
119
- action: z.enum(["get", "update"]).describe("Action to perform"),
120
- instanceId: z.string().uuid().describe("Factory instance UUID"),
121
- status: z.enum(["building", "paused", "cancelled"]).optional().describe("New instance status (required for update)"),
122
- }, wrapHandler(async (params) => {
123
- if (params.action === "get") {
124
- const result = await callProductApi(getCreds(), {
125
- action: "factory_instance_get",
126
- instanceId: params.instanceId,
127
- });
128
- return successResult(result);
129
- }
130
- else {
131
- if (!params.status)
132
- return validationError("status required for update");
133
- const result = await callProductApi(getCreds(), {
134
- action: "factory_update_instance_status",
135
- instanceId: params.instanceId,
136
- status: params.status,
137
- });
138
- return successResult(result.instance);
139
- }
140
- }));
141
- // -- telora_factory_work_unit (consolidated) ----------------------------------
142
- // Gated out for human profile: work units, gates, and execution units are daemon-only
143
- if (profile !== 'human') {
144
- server.tool("telora_factory_work_unit", "Build artifacts: manage individual work units within a factory instance. " +
145
- "Work units are atomic tasks produced during planning and executed during build cycles. " +
146
- "Actions: list work units (by instance, filter by status), update fields (status, title, description, reset iterations).", {
147
- action: z.enum(["list", "update"]).describe("Action to perform"),
148
- instanceId: z.string().uuid().optional().describe("Factory instance UUID (required for list)"),
149
- workUnitId: z.string().uuid().optional().describe("Work unit UUID (required for update)"),
150
- status: z.enum(["pending", "ready", "in_progress", "completed", "failed"]).optional().describe("Work unit status (list: filter; update: new status)"),
151
- title: z.string().max(500).optional().describe("Updated title (update only)"),
152
- description: z.string().max(5000).optional().describe("Updated description (update only)"),
153
- resetIterations: z.boolean().optional().describe("Reset iteration count to 0 (update only, use with status='ready' to retry)"),
154
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 500)"),
155
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
156
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
157
- }, wrapHandler(async (params) => {
158
- if (params.action === "list") {
159
- if (!params.instanceId)
160
- return validationError("instanceId required for list");
161
- const fields = buildFields({ status: params.status });
162
- const body = {
163
- action: "factory_work_unit_list",
164
- instanceId: params.instanceId,
165
- fields: Object.keys(fields).length > 0 ? fields : undefined,
166
- };
167
- if (params.limit !== undefined)
168
- body.limit = params.limit;
169
- if (params.offset !== undefined)
170
- body.offset = params.offset;
171
- const result = await callProductApi(getCreds(), body);
172
- return successResult({ items: result.workUnits, totalCount: result.totalCount });
173
- }
174
- else {
175
- if (!params.workUnitId)
176
- return validationError("workUnitId required for update");
177
- const fields = buildFields({ status: params.status, title: params.title, description: params.description, resetIterations: params.resetIterations });
178
- const result = await callProductApi(getCreds(), {
179
- action: "factory_work_unit_update",
180
- workUnitId: params.workUnitId,
181
- fields,
182
- });
183
- return successResult(compactEntity(result.workUnit, Object.keys(fields), params.returnFull));
184
- }
185
- }));
186
- // -- telora_factory_gate (consolidated) ---------------------------------------
187
- server.tool("telora_factory_gate", "Quality gates: record gate check results and escalate factory issues. " +
188
- "Gates validate work unit output through deterministic, behavioral, or adversarial checks. " +
189
- "Actions: result_create (record a gate check pass/fail), escalate (request human help for a factory issue).", {
190
- action: z.enum(["result_create", "escalate"]).describe("Action to perform"),
191
- focusId: z.string().uuid().optional().describe("Focus UUID (required for result_create)"),
192
- instanceId: z.string().uuid().optional().describe("Factory instance UUID (optional for escalate)"),
193
- gateType: z.enum(["deterministic", "behavioral", "adversarial"]).optional().describe("Gate type (required for result_create)"),
194
- iteration: z.number().int().min(0).optional().describe("Iteration number (required for result_create)"),
195
- passed: z.boolean().optional().describe("Whether the gate check passed (required for result_create)"),
196
- checkName: z.string().max(500).optional().describe("Name of the check (result_create only)"),
197
- output: z.string().max(10000).optional().describe("Gate check output text (result_create only)"),
198
- durationMs: z.number().int().min(0).optional().describe("Duration in milliseconds (result_create only)"),
199
- isAdversaryGenerated: z.boolean().optional().describe("Whether this check was generated by an adversary (result_create only)"),
200
- reasonType: z.enum([
201
- "decision_needed", "error_encountered", "out_of_scope",
202
- "blocked_by_external", "needs_clarification", "security_concern",
203
- ]).optional().describe("Type of escalation (required for escalate)"),
204
- description: z.string().max(5000).optional().describe("What happened and why escalation is needed (required for escalate)"),
205
- whatWasTried: z.string().max(5000).optional().describe("What approaches were attempted (escalate only)"),
206
- helpNeeded: z.string().max(5000).optional().describe("Specific help needed from human (escalate only)"),
207
- }, wrapHandler(async (params) => {
208
- if (params.action === "result_create") {
209
- if (!params.focusId)
210
- return validationError("focusId required for result_create");
211
- if (!params.gateType)
212
- return validationError("gateType required for result_create");
213
- if (params.iteration === undefined)
214
- return validationError("iteration required for result_create");
215
- if (params.passed === undefined)
216
- return validationError("passed required for result_create");
217
- const fields = buildFields(params, [
218
- 'gateType', 'iteration', 'passed', 'checkName', 'output', 'durationMs', 'isAdversaryGenerated',
219
- ]);
220
- const result = await callProductApi(getCreds(), {
221
- action: "factory_gate_result_create",
222
- focusId: params.focusId,
223
- fields,
224
- });
225
- return successResult(result.gateResult);
226
- }
227
- else {
228
- if (!params.reasonType)
229
- return validationError("reasonType required for escalate");
230
- if (!params.description)
231
- return validationError("description required for escalate");
232
- const fields = buildFields(params, ['reasonType', 'description', 'whatWasTried', 'helpNeeded']);
233
- const body = {
234
- action: "factory_escalate",
235
- fields,
236
- };
237
- if (params.instanceId !== undefined)
238
- body.instanceId = params.instanceId;
239
- const result = await callProductApi(getCreds(), body);
240
- return successResult(`Escalation created. A human will review your request.\n\n${JSON.stringify(result.escalation, null, 2)}`);
241
- }
242
- }));
243
- // -- telora_factory_execution_unit (consolidated) -----------------------------
244
- server.tool("telora_factory_execution_unit", "Pipeline nodes: manage execution units and their templates within factory instances. " +
245
- "Execution units represent configurable pipeline nodes (planning, engineering, review, QA). " +
246
- "Actions: list units for an instance, get unit details, template_list, template_get.", {
247
- action: z.enum(["list", "get", "template_list", "template_get"]).describe("Action to perform"),
248
- instanceId: z.string().uuid().optional().describe("Factory instance UUID (required for list)"),
249
- unitId: z.string().uuid().optional().describe("Execution unit UUID (required for get)"),
250
- templateId: z.string().uuid().optional().describe("Execution unit template UUID (required for template_get)"),
251
- detail: z.enum(["summary", "full"]).optional().describe("Response detail level"),
252
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
253
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
254
- }, wrapHandler(async (params) => {
255
- switch (params.action) {
256
- case "list": {
257
- if (!params.instanceId)
258
- return validationError("instanceId required for list");
259
- const body = {
260
- action: "factory_execution_unit_list",
261
- instanceId: params.instanceId,
262
- };
263
- if (params.detail !== undefined)
264
- body.detail = params.detail;
265
- const result = await callProductApi(getCreds(), body);
266
- return successResult({ items: result.executionUnits, totalCount: result.totalCount });
267
- }
268
- case "get": {
269
- if (!params.unitId)
270
- return validationError("unitId required for get");
271
- const result = await callProductApi(getCreds(), {
272
- action: "factory_execution_unit_get",
273
- unitId: params.unitId,
274
- });
275
- return successResult(result.executionUnit);
276
- }
277
- case "template_list": {
278
- const body = {
279
- action: "factory_execution_unit_template_list",
280
- };
281
- if (params.detail !== undefined)
282
- body.detail = params.detail;
283
- if (params.limit !== undefined)
284
- body.limit = params.limit;
285
- if (params.offset !== undefined)
286
- body.offset = params.offset;
287
- const result = await callProductApi(getCreds(), body);
288
- return successResult({ items: result.templates, totalCount: result.totalCount });
289
- }
290
- case "template_get": {
291
- if (!params.templateId)
292
- return validationError("templateId required for template_get");
293
- const result = await callProductApi(getCreds(), {
294
- action: "factory_execution_unit_template_get",
295
- templateId: params.templateId,
296
- });
297
- return successResult(result.template);
298
- }
299
- default:
300
- return validationError(`Unknown action: ${params.action}`);
301
- }
302
- }));
303
- } // end profile !== 'human' gate
304
- }
305
- //# sourceMappingURL=factoryHandlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factoryHandlers.js","sourceRoot":"","sources":["../../src/handlers/factoryHandlers.ts"],"names":[],"mappings":"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"}