@telora/mcp-products 0.21.1
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 +276 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +94 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/handlers/agentHandlers.d.ts +3 -0
- package/dist/handlers/agentHandlers.js +97 -0
- package/dist/handlers/agentHandlers.js.map +1 -0
- package/dist/handlers/connectorHandlers.d.ts +3 -0
- package/dist/handlers/connectorHandlers.js +401 -0
- package/dist/handlers/connectorHandlers.js.map +1 -0
- package/dist/handlers/contextHandlers.d.ts +8 -0
- package/dist/handlers/contextHandlers.js +169 -0
- package/dist/handlers/contextHandlers.js.map +1 -0
- package/dist/handlers/deliveryHandlers.d.ts +3 -0
- package/dist/handlers/deliveryHandlers.js +122 -0
- package/dist/handlers/deliveryHandlers.js.map +1 -0
- package/dist/handlers/deploymentProfileHandlers.d.ts +3 -0
- package/dist/handlers/deploymentProfileHandlers.js +104 -0
- package/dist/handlers/deploymentProfileHandlers.js.map +1 -0
- package/dist/handlers/discoverHandler.d.ts +23 -0
- package/dist/handlers/discoverHandler.js +83 -0
- package/dist/handlers/discoverHandler.js.map +1 -0
- package/dist/handlers/factoryHandlers.d.ts +3 -0
- package/dist/handlers/factoryHandlers.js +484 -0
- package/dist/handlers/factoryHandlers.js.map +1 -0
- package/dist/handlers/ideaHandlers.d.ts +3 -0
- package/dist/handlers/ideaHandlers.js +245 -0
- package/dist/handlers/ideaHandlers.js.map +1 -0
- package/dist/handlers/index.d.ts +15 -0
- package/dist/handlers/index.js +19 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/infrastructureHandlers.d.ts +3 -0
- package/dist/handlers/infrastructureHandlers.js +335 -0
- package/dist/handlers/infrastructureHandlers.js.map +1 -0
- package/dist/handlers/issueHandlers.d.ts +3 -0
- package/dist/handlers/issueHandlers.js +94 -0
- package/dist/handlers/issueHandlers.js.map +1 -0
- package/dist/handlers/okrHandlers.d.ts +3 -0
- package/dist/handlers/okrHandlers.js +194 -0
- package/dist/handlers/okrHandlers.js.map +1 -0
- package/dist/handlers/playbookHandlers.d.ts +3 -0
- package/dist/handlers/playbookHandlers.js +93 -0
- package/dist/handlers/playbookHandlers.js.map +1 -0
- package/dist/handlers/productHandlers.d.ts +3 -0
- package/dist/handlers/productHandlers.js +129 -0
- package/dist/handlers/productHandlers.js.map +1 -0
- package/dist/handlers/reportHandlers.d.ts +3 -0
- package/dist/handlers/reportHandlers.js +59 -0
- package/dist/handlers/reportHandlers.js.map +1 -0
- package/dist/handlers/strategyHandlers.d.ts +3 -0
- package/dist/handlers/strategyHandlers.js +116 -0
- package/dist/handlers/strategyHandlers.js.map +1 -0
- package/dist/handlers/workflowHandlers.d.ts +3 -0
- package/dist/handlers/workflowHandlers.js +93 -0
- package/dist/handlers/workflowHandlers.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +284 -0
- package/dist/index.js.map +1 -0
- package/dist/shared.d.ts +77 -0
- package/dist/shared.js +147 -0
- package/dist/shared.js.map +1 -0
- package/package.json +47 -0
- package/scripts/postinstall.js +96 -0
|
@@ -0,0 +1,484 @@
|
|
|
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 (consolidated) --------------------------------------
|
|
111
|
+
server.tool("telora_factory_spec", "Factory specifications: define what to build. Specs capture requirements through a conversational authoring flow " +
|
|
112
|
+
"(intent capture, context gathering, synthesis, readiness assessment). " +
|
|
113
|
+
"Actions: create a spec (productId), get spec details, list specs, update fields (conversation, readiness, synthesized text), " +
|
|
114
|
+
"validate spec against a blueprint's constraints.", {
|
|
115
|
+
action: z.enum(["create", "get", "list", "update", "validate"]).describe("Action to perform"),
|
|
116
|
+
specId: z.string().uuid().optional().describe("Spec UUID (required for get, update, validate)"),
|
|
117
|
+
productId: z.string().uuid().optional().describe("Product UUID (required for create, optional filter for list)"),
|
|
118
|
+
blueprintId: z.string().uuid().optional().describe("Blueprint UUID (required for validate)"),
|
|
119
|
+
title: z.string().max(500).optional().describe("Spec title (for create/update)"),
|
|
120
|
+
specType: z.enum(["prototype", "mvp", "extend_existing"]).optional().describe("Spec type (for create/update)"),
|
|
121
|
+
conversationPhase: z.enum(["intent_capture", "context_gathering", "template_selection", "dimension_exploration", "synthesis", "readiness_assessment", "strategy_preview"]).optional().describe("Current conversation phase (for update)"),
|
|
122
|
+
synthesizedSpec: z.string().optional().describe("Synthesized specification text (for update)"),
|
|
123
|
+
conversation: z.array(z.record(z.string(), z.unknown())).optional().describe("Conversation history [{role, content, timestamp}] (for update)"),
|
|
124
|
+
readiness: z.record(z.string(), z.unknown()).optional().describe("Readiness assessment {overall, dimensions} (for update)"),
|
|
125
|
+
status: z.enum(["drafting", "ready", "launched", "abandoned"]).optional().describe("Spec status (for list filter or update)"),
|
|
126
|
+
launchedInstanceId: z.string().uuid().nullable().optional().describe("Factory instance ID when spec is launched (for update)"),
|
|
127
|
+
limit: z.number().int().min(1).max(500).optional().describe("Max results for list (1-500, default 50)"),
|
|
128
|
+
offset: z.number().int().min(0).optional().describe("Skip results for list (default 0)"),
|
|
129
|
+
returnFull: z.boolean().optional().describe("Return full entity (default: compact, for create/update)"),
|
|
130
|
+
}, wrapHandler(async (params) => {
|
|
131
|
+
switch (params.action) {
|
|
132
|
+
case "create": {
|
|
133
|
+
if (!params.productId)
|
|
134
|
+
return validationError("productId is required for create");
|
|
135
|
+
const fields = buildFields(params, ['title', 'specType']);
|
|
136
|
+
const result = await callProductApi(getCreds(), {
|
|
137
|
+
action: "factory_spec_create",
|
|
138
|
+
productId: params.productId,
|
|
139
|
+
fields: Object.keys(fields).length > 0 ? fields : undefined,
|
|
140
|
+
});
|
|
141
|
+
return successResult(compactEntity(result.spec, ['title', 'status', 'specType'], params.returnFull));
|
|
142
|
+
}
|
|
143
|
+
case "get": {
|
|
144
|
+
if (!params.specId)
|
|
145
|
+
return validationError("specId is required for get");
|
|
146
|
+
const result = await callProductApi(getCreds(), {
|
|
147
|
+
action: "factory_spec_get",
|
|
148
|
+
specId: params.specId,
|
|
149
|
+
});
|
|
150
|
+
return successResult(result.spec);
|
|
151
|
+
}
|
|
152
|
+
case "list": {
|
|
153
|
+
const fields = buildFields({ status: params.status });
|
|
154
|
+
const body = {
|
|
155
|
+
action: "factory_spec_list",
|
|
156
|
+
fields: Object.keys(fields).length > 0 ? fields : undefined,
|
|
157
|
+
};
|
|
158
|
+
if (params.productId !== undefined)
|
|
159
|
+
body.productId = params.productId;
|
|
160
|
+
if (params.limit !== undefined)
|
|
161
|
+
body.limit = params.limit;
|
|
162
|
+
if (params.offset !== undefined)
|
|
163
|
+
body.offset = params.offset;
|
|
164
|
+
const result = await callProductApi(getCreds(), body);
|
|
165
|
+
return successResult({ items: result.specs, totalCount: result.totalCount });
|
|
166
|
+
}
|
|
167
|
+
case "update": {
|
|
168
|
+
if (!params.specId)
|
|
169
|
+
return validationError("specId is required for update");
|
|
170
|
+
const fields = buildFields(params, ['title', 'specType', 'conversationPhase', 'synthesizedSpec', 'conversation', 'readiness', 'status', 'launchedInstanceId']);
|
|
171
|
+
if (Object.keys(fields).length === 0) {
|
|
172
|
+
return validationError("At least one field must be provided to update");
|
|
173
|
+
}
|
|
174
|
+
const result = await callProductApi(getCreds(), {
|
|
175
|
+
action: "factory_spec_update",
|
|
176
|
+
specId: params.specId,
|
|
177
|
+
fields,
|
|
178
|
+
});
|
|
179
|
+
return successResult(compactEntity(result.spec, Object.keys(fields), params.returnFull));
|
|
180
|
+
}
|
|
181
|
+
case "validate": {
|
|
182
|
+
if (!params.specId)
|
|
183
|
+
return validationError("specId is required for validate");
|
|
184
|
+
if (!params.blueprintId)
|
|
185
|
+
return validationError("blueprintId is required for validate");
|
|
186
|
+
const result = await callProductApi(getCreds(), {
|
|
187
|
+
action: "factory-spec-compatibility-check",
|
|
188
|
+
specId: params.specId,
|
|
189
|
+
blueprintId: params.blueprintId,
|
|
190
|
+
});
|
|
191
|
+
return successResult(result);
|
|
192
|
+
}
|
|
193
|
+
default:
|
|
194
|
+
return validationError(`Unknown action: ${params.action}`);
|
|
195
|
+
}
|
|
196
|
+
}));
|
|
197
|
+
// -- telora_factory_spec_template (consolidated) -----------------------------
|
|
198
|
+
// Gated out for human profile: templates, selections, work units, gates,
|
|
199
|
+
// and execution units are primarily used by the daemon or admin setup.
|
|
200
|
+
if (profile !== 'human') {
|
|
201
|
+
server.tool("telora_factory_spec_template", "Spec authoring templates: dimension-based guidance for writing factory specs. " +
|
|
202
|
+
"Templates define the structure and dimensions AI uses during spec conversations. " +
|
|
203
|
+
"Actions: create a template (name + content), list templates (filter by type: spec_type or reference), update template fields.", {
|
|
204
|
+
action: z.enum(["create", "list", "update"]).describe("Action to perform"),
|
|
205
|
+
templateId: z.string().uuid().optional().describe("Spec template UUID (required for update)"),
|
|
206
|
+
name: z.string().max(200).optional().describe("Template name (required for create, unique per org)"),
|
|
207
|
+
description: z.string().max(2000).optional().describe("Template description"),
|
|
208
|
+
templateContent: z.record(z.string(), z.unknown()).optional().describe("Template content with dimensions array (required for create)"),
|
|
209
|
+
tags: z.array(z.string()).optional().describe("Tags for template discovery and AI selection"),
|
|
210
|
+
status: z.enum(["draft", "active", "archived"]).optional().describe("Template status (default: draft)"),
|
|
211
|
+
templateType: z.enum(["spec_type", "reference"]).optional().describe("Template type. 'spec_type' (default) = authoring template. 'reference' = reference document for agents."),
|
|
212
|
+
limit: z.number().int().min(1).max(500).optional().describe("Max results for list (1-500, default 50)"),
|
|
213
|
+
offset: z.number().int().min(0).optional().describe("Skip results for list (default 0)"),
|
|
214
|
+
detail: z.enum(["titles", "summary", "full"]).optional().describe("Detail level for list"),
|
|
215
|
+
returnFull: z.boolean().optional().describe("Return full entity (default: compact, for create/update)"),
|
|
216
|
+
}, wrapHandler(async (params) => {
|
|
217
|
+
switch (params.action) {
|
|
218
|
+
case "create": {
|
|
219
|
+
if (!params.name)
|
|
220
|
+
return validationError("name is required for create");
|
|
221
|
+
if (!params.templateContent)
|
|
222
|
+
return validationError("templateContent is required for create");
|
|
223
|
+
const fields = buildFields(params, ['name', 'description', 'templateContent', 'tags', 'status', 'templateType']);
|
|
224
|
+
const result = await callProductApi(getCreds(), {
|
|
225
|
+
action: "factory_spec_template_create",
|
|
226
|
+
fields,
|
|
227
|
+
});
|
|
228
|
+
return successResult(compactEntity(result.specTemplate, Object.keys(fields), params.returnFull));
|
|
229
|
+
}
|
|
230
|
+
case "list": {
|
|
231
|
+
const fields = buildFields({ status: params.status, templateType: params.templateType });
|
|
232
|
+
const body = {
|
|
233
|
+
action: "factory_spec_template_list",
|
|
234
|
+
fields: Object.keys(fields).length > 0 ? fields : undefined,
|
|
235
|
+
};
|
|
236
|
+
if (params.limit !== undefined)
|
|
237
|
+
body.limit = params.limit;
|
|
238
|
+
if (params.offset !== undefined)
|
|
239
|
+
body.offset = params.offset;
|
|
240
|
+
if (params.detail !== undefined)
|
|
241
|
+
body.detail = params.detail;
|
|
242
|
+
const result = await callProductApi(getCreds(), body);
|
|
243
|
+
return successResult({ items: result.specTemplates, totalCount: result.totalCount });
|
|
244
|
+
}
|
|
245
|
+
case "update": {
|
|
246
|
+
if (!params.templateId)
|
|
247
|
+
return validationError("templateId is required for update");
|
|
248
|
+
const fields = buildFields(params, ['name', 'description', 'templateContent', 'tags', 'status', 'templateType']);
|
|
249
|
+
if (Object.keys(fields).length === 0) {
|
|
250
|
+
return validationError("At least one field must be provided to update");
|
|
251
|
+
}
|
|
252
|
+
const result = await callProductApi(getCreds(), {
|
|
253
|
+
action: "factory_spec_template_update",
|
|
254
|
+
templateId: params.templateId,
|
|
255
|
+
fields,
|
|
256
|
+
});
|
|
257
|
+
return successResult(compactEntity(result.specTemplate, Object.keys(fields), params.returnFull));
|
|
258
|
+
}
|
|
259
|
+
default:
|
|
260
|
+
return validationError(`Unknown action: ${params.action}`);
|
|
261
|
+
}
|
|
262
|
+
}));
|
|
263
|
+
// -- telora_factory_spec_template_selection (consolidated) -------------------
|
|
264
|
+
server.tool("telora_factory_spec_template_selection", "Template linking: associate authoring templates with a factory spec. " +
|
|
265
|
+
"Selected templates guide the AI conversation during spec authoring. " +
|
|
266
|
+
"Actions: add (link template to spec), remove (unlink). Both require specId + templateId.", {
|
|
267
|
+
action: z.enum(["add", "remove"]).describe("Action to perform"),
|
|
268
|
+
specId: z.string().uuid().describe("Spec UUID"),
|
|
269
|
+
templateId: z.string().uuid().describe("Spec template UUID"),
|
|
270
|
+
selectedBy: z.enum(["user", "ai"]).optional().describe("Who selected this template (for add, default: 'user')"),
|
|
271
|
+
}, wrapHandler(async (params) => {
|
|
272
|
+
if (params.action === "add") {
|
|
273
|
+
const fields = buildFields({ selectedBy: params.selectedBy });
|
|
274
|
+
const result = await callProductApi(getCreds(), {
|
|
275
|
+
action: "factory_spec_template_selection_add",
|
|
276
|
+
specId: params.specId,
|
|
277
|
+
templateId: params.templateId,
|
|
278
|
+
fields: Object.keys(fields).length > 0 ? fields : undefined,
|
|
279
|
+
});
|
|
280
|
+
return successResult(result.selection);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
await callProductApi(getCreds(), {
|
|
284
|
+
action: "factory_spec_template_selection_remove",
|
|
285
|
+
specId: params.specId,
|
|
286
|
+
templateId: params.templateId,
|
|
287
|
+
});
|
|
288
|
+
return successResult("Template selection removed successfully.");
|
|
289
|
+
}
|
|
290
|
+
}));
|
|
291
|
+
} // end profile !== 'human' gate (templates, selections)
|
|
292
|
+
// -- telora_factory_instance (consolidated) -----------------------------------
|
|
293
|
+
// Available in all profiles: humans need get/update (pause, cancel) for instances
|
|
294
|
+
server.tool("telora_factory_instance", "Factory execution: view and control running factory instances. " +
|
|
295
|
+
"Instances represent an active build cycle from a spec + blueprint. " +
|
|
296
|
+
"Actions: get instance details (includes blueprint config), " +
|
|
297
|
+
"update instance status (resume paused with 'building', cancel with 'cancelled').", {
|
|
298
|
+
action: z.enum(["get", "update"]).describe("Action to perform"),
|
|
299
|
+
instanceId: z.string().uuid().describe("Factory instance UUID"),
|
|
300
|
+
status: z.enum(["building", "paused", "cancelled"]).optional().describe("New instance status (required for update)"),
|
|
301
|
+
}, wrapHandler(async (params) => {
|
|
302
|
+
if (params.action === "get") {
|
|
303
|
+
const result = await callProductApi(getCreds(), {
|
|
304
|
+
action: "factory_instance_get",
|
|
305
|
+
instanceId: params.instanceId,
|
|
306
|
+
});
|
|
307
|
+
return successResult(result);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
if (!params.status)
|
|
311
|
+
return validationError("status required for update");
|
|
312
|
+
const result = await callProductApi(getCreds(), {
|
|
313
|
+
action: "factory_update_instance_status",
|
|
314
|
+
instanceId: params.instanceId,
|
|
315
|
+
status: params.status,
|
|
316
|
+
});
|
|
317
|
+
return successResult(result.instance);
|
|
318
|
+
}
|
|
319
|
+
}));
|
|
320
|
+
// -- telora_factory_work_unit (consolidated) ----------------------------------
|
|
321
|
+
// Gated out for human profile: work units, gates, and execution units are daemon-only
|
|
322
|
+
if (profile !== 'human') {
|
|
323
|
+
server.tool("telora_factory_work_unit", "Build artifacts: manage individual work units within a factory instance. " +
|
|
324
|
+
"Work units are atomic tasks produced during planning and executed during build cycles. " +
|
|
325
|
+
"Actions: list work units (by instance, filter by status), update fields (status, title, description, reset iterations).", {
|
|
326
|
+
action: z.enum(["list", "update"]).describe("Action to perform"),
|
|
327
|
+
instanceId: z.string().uuid().optional().describe("Factory instance UUID (required for list)"),
|
|
328
|
+
workUnitId: z.string().uuid().optional().describe("Work unit UUID (required for update)"),
|
|
329
|
+
status: z.enum(["pending", "ready", "in_progress", "completed", "failed"]).optional().describe("Work unit status (list: filter; update: new status)"),
|
|
330
|
+
title: z.string().max(500).optional().describe("Updated title (update only)"),
|
|
331
|
+
description: z.string().max(5000).optional().describe("Updated description (update only)"),
|
|
332
|
+
resetIterations: z.boolean().optional().describe("Reset iteration count to 0 (update only, use with status='ready' to retry)"),
|
|
333
|
+
limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 500)"),
|
|
334
|
+
offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
|
|
335
|
+
returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
|
|
336
|
+
}, wrapHandler(async (params) => {
|
|
337
|
+
if (params.action === "list") {
|
|
338
|
+
if (!params.instanceId)
|
|
339
|
+
return validationError("instanceId required for list");
|
|
340
|
+
const fields = buildFields({ status: params.status });
|
|
341
|
+
const body = {
|
|
342
|
+
action: "factory_work_unit_list",
|
|
343
|
+
instanceId: params.instanceId,
|
|
344
|
+
fields: Object.keys(fields).length > 0 ? fields : undefined,
|
|
345
|
+
};
|
|
346
|
+
if (params.limit !== undefined)
|
|
347
|
+
body.limit = params.limit;
|
|
348
|
+
if (params.offset !== undefined)
|
|
349
|
+
body.offset = params.offset;
|
|
350
|
+
const result = await callProductApi(getCreds(), body);
|
|
351
|
+
return successResult({ items: result.workUnits, totalCount: result.totalCount });
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
if (!params.workUnitId)
|
|
355
|
+
return validationError("workUnitId required for update");
|
|
356
|
+
const fields = buildFields({ status: params.status, title: params.title, description: params.description, resetIterations: params.resetIterations });
|
|
357
|
+
const result = await callProductApi(getCreds(), {
|
|
358
|
+
action: "factory_work_unit_update",
|
|
359
|
+
workUnitId: params.workUnitId,
|
|
360
|
+
fields,
|
|
361
|
+
});
|
|
362
|
+
return successResult(compactEntity(result.workUnit, Object.keys(fields), params.returnFull));
|
|
363
|
+
}
|
|
364
|
+
}));
|
|
365
|
+
// -- telora_factory_gate (consolidated) ---------------------------------------
|
|
366
|
+
server.tool("telora_factory_gate", "Quality gates: record gate check results and escalate factory issues. " +
|
|
367
|
+
"Gates validate work unit output through deterministic, behavioral, or adversarial checks. " +
|
|
368
|
+
"Actions: result_create (record a gate check pass/fail), escalate (request human help for a factory issue).", {
|
|
369
|
+
action: z.enum(["result_create", "escalate"]).describe("Action to perform"),
|
|
370
|
+
strategyId: z.string().uuid().optional().describe("Strategy UUID (required for result_create)"),
|
|
371
|
+
instanceId: z.string().uuid().optional().describe("Factory instance UUID (optional for escalate)"),
|
|
372
|
+
gateType: z.enum(["deterministic", "behavioral", "adversarial"]).optional().describe("Gate type (required for result_create)"),
|
|
373
|
+
iteration: z.number().int().min(0).optional().describe("Iteration number (required for result_create)"),
|
|
374
|
+
passed: z.boolean().optional().describe("Whether the gate check passed (required for result_create)"),
|
|
375
|
+
checkName: z.string().max(500).optional().describe("Name of the check (result_create only)"),
|
|
376
|
+
output: z.string().max(10000).optional().describe("Gate check output text (result_create only)"),
|
|
377
|
+
durationMs: z.number().int().min(0).optional().describe("Duration in milliseconds (result_create only)"),
|
|
378
|
+
isAdversaryGenerated: z.boolean().optional().describe("Whether this check was generated by an adversary (result_create only)"),
|
|
379
|
+
reasonType: z.enum([
|
|
380
|
+
"decision_needed", "error_encountered", "out_of_scope",
|
|
381
|
+
"blocked_by_external", "needs_clarification", "security_concern",
|
|
382
|
+
]).optional().describe("Type of escalation (required for escalate)"),
|
|
383
|
+
description: z.string().max(5000).optional().describe("What happened and why escalation is needed (required for escalate)"),
|
|
384
|
+
whatWasTried: z.string().max(5000).optional().describe("What approaches were attempted (escalate only)"),
|
|
385
|
+
helpNeeded: z.string().max(5000).optional().describe("Specific help needed from human (escalate only)"),
|
|
386
|
+
}, wrapHandler(async (params) => {
|
|
387
|
+
if (params.action === "result_create") {
|
|
388
|
+
if (!params.strategyId)
|
|
389
|
+
return validationError("strategyId required for result_create");
|
|
390
|
+
if (!params.gateType)
|
|
391
|
+
return validationError("gateType required for result_create");
|
|
392
|
+
if (params.iteration === undefined)
|
|
393
|
+
return validationError("iteration required for result_create");
|
|
394
|
+
if (params.passed === undefined)
|
|
395
|
+
return validationError("passed required for result_create");
|
|
396
|
+
const fields = buildFields(params, [
|
|
397
|
+
'gateType', 'iteration', 'passed', 'checkName', 'output', 'durationMs', 'isAdversaryGenerated',
|
|
398
|
+
]);
|
|
399
|
+
const result = await callProductApi(getCreds(), {
|
|
400
|
+
action: "factory_gate_result_create",
|
|
401
|
+
strategyId: params.strategyId,
|
|
402
|
+
fields,
|
|
403
|
+
});
|
|
404
|
+
return successResult(result.gateResult);
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
if (!params.reasonType)
|
|
408
|
+
return validationError("reasonType required for escalate");
|
|
409
|
+
if (!params.description)
|
|
410
|
+
return validationError("description required for escalate");
|
|
411
|
+
const fields = buildFields(params, ['reasonType', 'description', 'whatWasTried', 'helpNeeded']);
|
|
412
|
+
const body = {
|
|
413
|
+
action: "factory_escalate",
|
|
414
|
+
fields,
|
|
415
|
+
};
|
|
416
|
+
if (params.instanceId !== undefined)
|
|
417
|
+
body.instanceId = params.instanceId;
|
|
418
|
+
const result = await callProductApi(getCreds(), body);
|
|
419
|
+
return successResult(`Escalation created. A human will review your request.\n\n${JSON.stringify(result.escalation, null, 2)}`);
|
|
420
|
+
}
|
|
421
|
+
}));
|
|
422
|
+
// -- telora_factory_execution_unit (consolidated) -----------------------------
|
|
423
|
+
server.tool("telora_factory_execution_unit", "Pipeline nodes: manage execution units and their templates within factory instances. " +
|
|
424
|
+
"Execution units represent configurable pipeline nodes (planning, engineering, review, QA). " +
|
|
425
|
+
"Actions: list units for an instance, get unit details, template_list, template_get.", {
|
|
426
|
+
action: z.enum(["list", "get", "template_list", "template_get"]).describe("Action to perform"),
|
|
427
|
+
instanceId: z.string().uuid().optional().describe("Factory instance UUID (required for list)"),
|
|
428
|
+
unitId: z.string().uuid().optional().describe("Execution unit UUID (required for get)"),
|
|
429
|
+
templateId: z.string().uuid().optional().describe("Execution unit template UUID (required for template_get)"),
|
|
430
|
+
detail: z.enum(["summary", "full"]).optional().describe("Response detail level"),
|
|
431
|
+
limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
|
|
432
|
+
offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
|
|
433
|
+
}, wrapHandler(async (params) => {
|
|
434
|
+
switch (params.action) {
|
|
435
|
+
case "list": {
|
|
436
|
+
if (!params.instanceId)
|
|
437
|
+
return validationError("instanceId required for list");
|
|
438
|
+
const body = {
|
|
439
|
+
action: "factory_execution_unit_list",
|
|
440
|
+
instanceId: params.instanceId,
|
|
441
|
+
};
|
|
442
|
+
if (params.detail !== undefined)
|
|
443
|
+
body.detail = params.detail;
|
|
444
|
+
const result = await callProductApi(getCreds(), body);
|
|
445
|
+
return successResult({ items: result.executionUnits, totalCount: result.totalCount });
|
|
446
|
+
}
|
|
447
|
+
case "get": {
|
|
448
|
+
if (!params.unitId)
|
|
449
|
+
return validationError("unitId required for get");
|
|
450
|
+
const result = await callProductApi(getCreds(), {
|
|
451
|
+
action: "factory_execution_unit_get",
|
|
452
|
+
unitId: params.unitId,
|
|
453
|
+
});
|
|
454
|
+
return successResult(result.executionUnit);
|
|
455
|
+
}
|
|
456
|
+
case "template_list": {
|
|
457
|
+
const body = {
|
|
458
|
+
action: "factory_execution_unit_template_list",
|
|
459
|
+
};
|
|
460
|
+
if (params.detail !== undefined)
|
|
461
|
+
body.detail = params.detail;
|
|
462
|
+
if (params.limit !== undefined)
|
|
463
|
+
body.limit = params.limit;
|
|
464
|
+
if (params.offset !== undefined)
|
|
465
|
+
body.offset = params.offset;
|
|
466
|
+
const result = await callProductApi(getCreds(), body);
|
|
467
|
+
return successResult({ items: result.templates, totalCount: result.totalCount });
|
|
468
|
+
}
|
|
469
|
+
case "template_get": {
|
|
470
|
+
if (!params.templateId)
|
|
471
|
+
return validationError("templateId required for template_get");
|
|
472
|
+
const result = await callProductApi(getCreds(), {
|
|
473
|
+
action: "factory_execution_unit_template_get",
|
|
474
|
+
templateId: params.templateId,
|
|
475
|
+
});
|
|
476
|
+
return successResult(result.template);
|
|
477
|
+
}
|
|
478
|
+
default:
|
|
479
|
+
return validationError(`Unknown action: ${params.action}`);
|
|
480
|
+
}
|
|
481
|
+
}));
|
|
482
|
+
} // end profile !== 'human' gate
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=factoryHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factoryHandlers.js","sourceRoot":"","sources":["../../src/handlers/factoryHandlers.ts"],"names":[],"mappings":"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"}
|