@telora/mcp-products 0.22.0 → 0.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +16 -16
  2. package/dist/handlers/agentHandlers.js +1 -1
  3. package/dist/handlers/agentHandlers.js.map +1 -1
  4. package/dist/handlers/connectorHandlers.js +2 -2
  5. package/dist/handlers/connectorHandlers.js.map +1 -1
  6. package/dist/handlers/contextHandlers.js +5 -5
  7. package/dist/handlers/contextHandlers.js.map +1 -1
  8. package/dist/handlers/deliveryHandlers.js +8 -8
  9. package/dist/handlers/deliveryHandlers.js.map +1 -1
  10. package/dist/handlers/discoverHandler.js +2 -2
  11. package/dist/handlers/discoverHandler.js.map +1 -1
  12. package/dist/handlers/factoryHandlers.js +4 -4
  13. package/dist/handlers/factoryHandlers.js.map +1 -1
  14. package/dist/handlers/{strategyHandlers.d.ts → focusHandlers.d.ts} +1 -1
  15. package/dist/handlers/focusHandlers.js +206 -0
  16. package/dist/handlers/focusHandlers.js.map +1 -0
  17. package/dist/handlers/ideaHandlers.js +5 -5
  18. package/dist/handlers/ideaHandlers.js.map +1 -1
  19. package/dist/handlers/index.d.ts +1 -1
  20. package/dist/handlers/index.js +1 -1
  21. package/dist/handlers/index.js.map +1 -1
  22. package/dist/handlers/loopHandlers.js +5 -5
  23. package/dist/handlers/loopHandlers.js.map +1 -1
  24. package/dist/handlers/okrHandlers.js +13 -13
  25. package/dist/handlers/okrHandlers.js.map +1 -1
  26. package/dist/handlers/playbookHandlers.js +2 -2
  27. package/dist/handlers/playbookHandlers.js.map +1 -1
  28. package/dist/handlers/prerequisiteTreeHandlers.js +2 -2
  29. package/dist/handlers/prerequisiteTreeHandlers.js.map +1 -1
  30. package/dist/handlers/productHandlers.js +3 -3
  31. package/dist/handlers/productHandlers.js.map +1 -1
  32. package/dist/handlers/realityHandlers.js +9 -9
  33. package/dist/handlers/realityHandlers.js.map +1 -1
  34. package/dist/handlers/realityTreeHandlers.js +6 -6
  35. package/dist/handlers/realityTreeHandlers.js.map +1 -1
  36. package/dist/handlers/reportHandlers.js +1 -1
  37. package/dist/handlers/reportHandlers.js.map +1 -1
  38. package/dist/handlers/riskHandlers.js +17 -17
  39. package/dist/handlers/riskHandlers.js.map +1 -1
  40. package/dist/handlers/savePointHandlers.js +1 -1
  41. package/dist/handlers/savePointHandlers.js.map +1 -1
  42. package/dist/handlers/workflowHandlers.js +2 -2
  43. package/dist/handlers/workflowHandlers.js.map +1 -1
  44. package/dist/index.js +23 -23
  45. package/dist/index.js.map +1 -1
  46. package/package.json +1 -1
  47. package/dist/handlers/factory/blueprintTools.d.ts +0 -3
  48. package/dist/handlers/factory/blueprintTools.js +0 -102
  49. package/dist/handlers/factory/blueprintTools.js.map +0 -1
  50. package/dist/handlers/factory/gateTools.d.ts +0 -3
  51. package/dist/handlers/factory/gateTools.js +0 -55
  52. package/dist/handlers/factory/gateTools.js.map +0 -1
  53. package/dist/handlers/factory/instanceTools.d.ts +0 -3
  54. package/dist/handlers/factory/instanceTools.js +0 -82
  55. package/dist/handlers/factory/instanceTools.js.map +0 -1
  56. package/dist/handlers/factory/specTools.d.ts +0 -3
  57. package/dist/handlers/factory/specTools.js +0 -178
  58. package/dist/handlers/factory/specTools.js.map +0 -1
  59. package/dist/handlers/factory/workUnitTools.d.ts +0 -3
  60. package/dist/handlers/factory/workUnitTools.js +0 -49
  61. package/dist/handlers/factory/workUnitTools.js.map +0 -1
  62. package/dist/handlers/strategyHandlers.js +0 -182
  63. package/dist/handlers/strategyHandlers.js.map +0 -1
@@ -1,82 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Factory instance MCP tool registrations
3
- // ---------------------------------------------------------------------------
4
- import { z } from "zod";
5
- import { callProductApi, successResult, wrapHandler, } from "../../shared.js";
6
- export function registerInstanceTools(server, getCreds) {
7
- // -- telora_factory_instance_update ------------------------------------------
8
- server.tool("telora_factory_instance_update", "Update a factory instance's status. Use status='building' to resume a paused instance; status='cancelled' to cancel it.", {
9
- instanceId: z.string().uuid().describe("Factory instance UUID"),
10
- status: z.enum(["building", "paused", "cancelled"]).describe("New instance status"),
11
- }, wrapHandler(async ({ instanceId, status }) => {
12
- const result = await callProductApi(getCreds(), {
13
- action: "factory_update_instance_status",
14
- instanceId,
15
- status,
16
- });
17
- return successResult(result.instance);
18
- }));
19
- // -- telora_factory_instance_get ---------------------------------------------
20
- server.tool("telora_factory_instance_get", "Get full details of a factory instance including its blueprint configuration.", {
21
- instanceId: z.string().uuid().describe("Factory instance UUID"),
22
- }, wrapHandler(async ({ instanceId }) => {
23
- const result = await callProductApi(getCreds(), {
24
- action: "factory_instance_get",
25
- instanceId,
26
- });
27
- return successResult(result);
28
- }));
29
- // -- telora_factory_execution_unit_list ---------------------------------------
30
- server.tool("telora_factory_execution_unit_list", "List execution units for a factory instance with status and assigned strategy.", {
31
- instanceId: z.string().uuid().describe("Factory instance UUID"),
32
- detail: z.enum(["summary", "full"]).optional().describe("Response detail level. 'summary' (default) returns id, slotIndex, status, model, assignedStrategyId. 'full' adds config, claudeSessionId, timestamps."),
33
- }, wrapHandler(async ({ instanceId, detail }) => {
34
- const body = {
35
- action: "factory_execution_unit_list",
36
- instanceId,
37
- };
38
- if (detail !== undefined)
39
- body.detail = detail;
40
- const result = await callProductApi(getCreds(), body);
41
- return successResult({ items: result.executionUnits, totalCount: result.totalCount });
42
- }));
43
- // -- telora_factory_execution_unit_get ----------------------------------------
44
- server.tool("telora_factory_execution_unit_get", "Get full details of a single execution unit including config, session state, and assigned strategy name.", {
45
- unitId: z.string().uuid().describe("Execution unit UUID"),
46
- }, wrapHandler(async ({ unitId }) => {
47
- const result = await callProductApi(getCreds(), {
48
- action: "factory_execution_unit_get",
49
- unitId,
50
- });
51
- return successResult(result.executionUnit);
52
- }));
53
- // -- telora_factory_execution_unit_template_list --------------------------------
54
- server.tool("telora_factory_execution_unit_template_list", "List execution unit templates available to your organization. Returns system templates (planning, engineering, review, qa) plus any org-specific custom templates.", {
55
- detail: z.enum(["summary", "full"]).optional().describe("Response detail level. 'summary' (default) returns id, name, type, isSystem. 'full' adds description, defaultConfig, timestamps."),
56
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
57
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
58
- }, wrapHandler(async ({ detail, limit, offset }) => {
59
- const body = {
60
- action: "factory_execution_unit_template_list",
61
- };
62
- if (detail !== undefined)
63
- body.detail = detail;
64
- if (limit !== undefined)
65
- body.limit = limit;
66
- if (offset !== undefined)
67
- body.offset = offset;
68
- const result = await callProductApi(getCreds(), body);
69
- return successResult({ items: result.templates, totalCount: result.totalCount });
70
- }));
71
- // -- telora_factory_execution_unit_template_get ---------------------------------
72
- server.tool("telora_factory_execution_unit_template_get", "Get full details of an execution unit template by ID, including its default configuration and prompt context.", {
73
- templateId: z.string().uuid().describe("Execution unit template UUID"),
74
- }, wrapHandler(async ({ templateId }) => {
75
- const result = await callProductApi(getCreds(), {
76
- action: "factory_execution_unit_template_get",
77
- templateId,
78
- });
79
- return successResult(result.template);
80
- }));
81
- }
82
- //# sourceMappingURL=instanceTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instanceTools.js","sourceRoot":"","sources":["../../../src/handlers/factory/instanceTools.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { type GetCreds } from "../../shared.js";
3
- export declare function registerSpecTools(server: McpServer, getCreds: GetCreds): void;
@@ -1,178 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Factory spec and spec template MCP tool registrations
3
- // ---------------------------------------------------------------------------
4
- import { z } from "zod";
5
- import { callProductApi, successResult, validationError, buildFields, compactEntity, wrapHandler, } from "../../shared.js";
6
- export function registerSpecTools(server, getCreds) {
7
- // -- telora_factory_spec_validate --------------------------------------------
8
- server.tool("telora_factory_spec_validate", "Check whether a spec is compatible with a blueprint before launching. Returns any constraint violations found.", {
9
- specId: z.string().uuid().describe("Spec UUID"),
10
- blueprintId: z.string().uuid().describe("Blueprint UUID to validate against"),
11
- }, wrapHandler(async ({ specId, blueprintId }) => {
12
- const result = await callProductApi(getCreds(), {
13
- action: "factory-spec-compatibility-check",
14
- specId,
15
- blueprintId,
16
- });
17
- return successResult(result);
18
- }));
19
- // -- telora_factory_spec_template_list ---------------------------------------
20
- server.tool("telora_factory_spec_template_list", "List spec templates for your organization. Templates define dimensions that guide the spec authoring conversation. Use templateType='reference' to load the 'Factory Spec Reference' document, which describes spec structure, factory gate architecture, and strategy decomposition conventions.", {
21
- status: z.enum(["draft", "active", "archived"]).optional().describe("Filter by status"),
22
- templateType: z.enum(["spec_type", "reference"]).optional().describe("Filter by template type. 'spec_type' = authoring templates. 'reference' = reference documents (e.g. Factory Spec Reference)."),
23
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
24
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
25
- detail: z.enum(["titles", "summary", "full"]).optional().describe("Response detail level. 'titles' returns id+name only. 'summary' (default) returns compact fields. 'full' returns all fields including template_content."),
26
- }, wrapHandler(async ({ status, templateType, limit, offset, detail }) => {
27
- const fields = buildFields({ status, templateType });
28
- const body = {
29
- action: "factory_spec_template_list",
30
- fields: Object.keys(fields).length > 0 ? fields : undefined,
31
- };
32
- if (limit !== undefined)
33
- body.limit = limit;
34
- if (offset !== undefined)
35
- body.offset = offset;
36
- if (detail !== undefined)
37
- body.detail = detail;
38
- const result = await callProductApi(getCreds(), body);
39
- return successResult({ items: result.specTemplates, totalCount: result.totalCount });
40
- }));
41
- // -- telora_factory_spec_template_create -------------------------------------
42
- server.tool("telora_factory_spec_template_create", "Create a spec template with dimensions that guide the spec authoring agent.", {
43
- name: z.string().max(200).describe("Template name (unique per org)"),
44
- description: z.string().max(2000).optional().describe("Template description"),
45
- templateContent: z.record(z.string(), z.unknown()).describe("Template content with dimensions array. Each dimension has: name, description, importance, probing_questions, good_signal_indicators, anti_patterns"),
46
- tags: z.array(z.string()).optional().describe("Tags for template discovery and AI selection"),
47
- status: z.enum(["draft", "active", "archived"]).optional().describe("Template status (default: draft)"),
48
- templateType: z.enum(["spec_type", "reference"]).optional().describe("Template type. 'spec_type' (default) = authoring template shown in spec creation flow. 'reference' = reference document for agents to load for context (not selectable as a spec type)."),
49
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
50
- }, wrapHandler(async ({ returnFull, ...params }) => {
51
- const fields = buildFields(params, ['name', 'description', 'templateContent', 'tags', 'status', 'templateType']);
52
- const result = await callProductApi(getCreds(), {
53
- action: "factory_spec_template_create",
54
- fields,
55
- });
56
- return successResult(compactEntity(result.specTemplate, Object.keys(fields), returnFull));
57
- }));
58
- // -- telora_factory_spec_template_update -------------------------------------
59
- server.tool("telora_factory_spec_template_update", "Update a spec template. Auto-increments version when templateContent changes.", {
60
- templateId: z.string().uuid().describe("Spec template UUID"),
61
- name: z.string().max(200).optional().describe("Template name"),
62
- description: z.string().max(2000).optional().describe("Template description"),
63
- templateContent: z.record(z.string(), z.unknown()).optional().describe("Updated template content with dimensions"),
64
- tags: z.array(z.string()).optional().describe("Updated tags"),
65
- status: z.enum(["draft", "active", "archived"]).optional().describe("Template status"),
66
- templateType: z.enum(["spec_type", "reference"]).optional().describe("Template type. 'spec_type' = authoring template. 'reference' = reference document."),
67
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
68
- }, wrapHandler(async ({ templateId, returnFull, ...params }) => {
69
- const fields = buildFields(params, ['name', 'description', 'templateContent', 'tags', 'status', 'templateType']);
70
- if (Object.keys(fields).length === 0) {
71
- return validationError("At least one field must be provided to update");
72
- }
73
- const result = await callProductApi(getCreds(), {
74
- action: "factory_spec_template_update",
75
- templateId,
76
- fields,
77
- });
78
- return successResult(compactEntity(result.specTemplate, Object.keys(fields), returnFull));
79
- }));
80
- // -- telora_factory_spec_list -----------------------------------------------
81
- server.tool("telora_factory_spec_list", "List specs for a product. Specs are AI-guided specifications that can be used to launch factory instances.", {
82
- productId: z.string().uuid().optional().describe("Product UUID to filter by"),
83
- status: z.enum(["drafting", "ready", "launched", "abandoned"]).optional().describe("Filter by spec status"),
84
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
85
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
86
- }, wrapHandler(async ({ productId, status, limit, offset }) => {
87
- const fields = buildFields({ status });
88
- const body = {
89
- action: "factory_spec_list",
90
- fields: Object.keys(fields).length > 0 ? fields : undefined,
91
- };
92
- if (productId !== undefined)
93
- body.productId = productId;
94
- if (limit !== undefined)
95
- body.limit = limit;
96
- if (offset !== undefined)
97
- body.offset = offset;
98
- const result = await callProductApi(getCreds(), body);
99
- return successResult({ items: result.specs, totalCount: result.totalCount });
100
- }));
101
- // -- telora_factory_spec_get ------------------------------------------------
102
- server.tool("telora_factory_spec_get", "Get full details of a spec including synthesized spec, readiness, and conversation history.", {
103
- specId: z.string().uuid().describe("Spec UUID"),
104
- }, wrapHandler(async ({ specId }) => {
105
- const result = await callProductApi(getCreds(), {
106
- action: "factory_spec_get",
107
- specId,
108
- });
109
- return successResult(result.spec);
110
- }));
111
- // -- telora_factory_spec_create ---------------------------------------------
112
- server.tool("telora_factory_spec_create", "Create a new spec for a product. The spec starts in 'drafting' status ready for authoring.", {
113
- productId: z.string().uuid().describe("Product UUID"),
114
- title: z.string().max(500).optional().describe("Spec title (default: 'Untitled Spec')"),
115
- specType: z.enum(["prototype", "mvp", "extend_existing"]).optional().describe("Spec type: prototype (quick demo), mvp (narrow launchable), extend_existing (add to existing system)"),
116
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
117
- }, wrapHandler(async ({ productId, returnFull, ...params }) => {
118
- const fields = buildFields(params, ['title', 'specType']);
119
- const result = await callProductApi(getCreds(), {
120
- action: "factory_spec_create",
121
- productId,
122
- fields: Object.keys(fields).length > 0 ? fields : undefined,
123
- });
124
- return successResult(compactEntity(result.spec, ['title', 'status', 'specType'], returnFull));
125
- }));
126
- // -- telora_factory_spec_update ---------------------------------------------
127
- server.tool("telora_factory_spec_update", "Update a spec's content, readiness, conversation, or status.", {
128
- specId: z.string().uuid().describe("Spec UUID"),
129
- title: z.string().max(500).optional().describe("Spec title"),
130
- specType: z.enum(["prototype", "mvp", "extend_existing"]).optional().describe("Spec type: prototype, mvp, or extend_existing"),
131
- conversationPhase: z.enum(["intent_capture", "context_gathering", "template_selection", "dimension_exploration", "synthesis", "readiness_assessment", "strategy_preview"]).optional().describe("Current conversation phase"),
132
- synthesizedSpec: z.string().optional().describe("The synthesized specification text (output of the authoring conversation)"),
133
- conversation: z.array(z.record(z.string(), z.unknown())).optional().describe("Conversation history array [{role, content, timestamp}]"),
134
- readiness: z.record(z.string(), z.unknown()).optional().describe("Readiness assessment {overall: {level, confidence, summary}, dimensions: {name: {level, confidence, gaps, notes}}}"),
135
- status: z.enum(["drafting", "ready", "launched", "abandoned"]).optional().describe("Spec status"),
136
- launchedInstanceId: z.string().uuid().nullable().optional().describe("Factory instance ID (set when spec is launched)"),
137
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
138
- }, wrapHandler(async ({ specId, returnFull, ...params }) => {
139
- const fields = buildFields(params, ['title', 'specType', 'conversationPhase', 'synthesizedSpec', 'conversation', 'readiness', 'status', 'launchedInstanceId']);
140
- if (Object.keys(fields).length === 0) {
141
- return validationError("At least one field must be provided to update");
142
- }
143
- const result = await callProductApi(getCreds(), {
144
- action: "factory_spec_update",
145
- specId,
146
- fields,
147
- });
148
- return successResult(compactEntity(result.spec, Object.keys(fields), returnFull));
149
- }));
150
- // -- telora_factory_spec_template_selection_add -----------------------------
151
- server.tool("telora_factory_spec_template_selection_add", "Add a template selection to a spec. Links a spec template to a spec for dimension guidance.", {
152
- specId: z.string().uuid().describe("Spec UUID"),
153
- templateId: z.string().uuid().describe("Spec template UUID to add"),
154
- selectedBy: z.enum(["user", "ai"]).optional().describe("Who selected this template (default: 'user')"),
155
- }, wrapHandler(async ({ specId, templateId, selectedBy }) => {
156
- const fields = buildFields({ selectedBy });
157
- const result = await callProductApi(getCreds(), {
158
- action: "factory_spec_template_selection_add",
159
- specId,
160
- templateId,
161
- fields: Object.keys(fields).length > 0 ? fields : undefined,
162
- });
163
- return successResult(result.selection);
164
- }));
165
- // -- telora_factory_spec_template_selection_remove ---------------------------
166
- server.tool("telora_factory_spec_template_selection_remove", "Remove a template selection from a spec.", {
167
- specId: z.string().uuid().describe("Spec UUID"),
168
- templateId: z.string().uuid().describe("Spec template UUID to remove"),
169
- }, wrapHandler(async ({ specId, templateId }) => {
170
- await callProductApi(getCreds(), {
171
- action: "factory_spec_template_selection_remove",
172
- specId,
173
- templateId,
174
- });
175
- return successResult("Template selection removed successfully.");
176
- }));
177
- }
178
- //# sourceMappingURL=specTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"specTools.js","sourceRoot":"","sources":["../../../src/handlers/factory/specTools.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { type GetCreds } from "../../shared.js";
3
- export declare function registerWorkUnitTools(server: McpServer, getCreds: GetCreds): void;
@@ -1,49 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Factory work unit MCP tool registrations
3
- // ---------------------------------------------------------------------------
4
- import { z } from "zod";
5
- import { callProductApi, successResult, buildFields, compactEntity, wrapHandler, } from "../../shared.js";
6
- export function registerWorkUnitTools(server, getCreds) {
7
- // -- telora_factory_work_unit_list -------------------------------------------
8
- server.tool("telora_factory_work_unit_list", "List work units for a factory instance with status and dependencies.", {
9
- instanceId: z.string().uuid().describe("Factory instance UUID"),
10
- status: z.enum([
11
- "pending", "ready", "in_progress", "completed", "failed",
12
- ]).optional().describe("Filter by work unit status"),
13
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 500)"),
14
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
15
- }, wrapHandler(async ({ instanceId, status, limit, offset }) => {
16
- const fields = buildFields({ status });
17
- const body = {
18
- action: "factory_work_unit_list",
19
- instanceId,
20
- fields: Object.keys(fields).length > 0 ? fields : undefined,
21
- };
22
- if (limit !== undefined)
23
- body.limit = limit;
24
- if (offset !== undefined)
25
- body.offset = offset;
26
- const result = await callProductApi(getCreds(), body);
27
- return successResult({ items: result.workUnits, totalCount: result.totalCount });
28
- }));
29
- // -- telora_factory_work_unit_update -----------------------------------------
30
- server.tool("telora_factory_work_unit_update", "Update a factory work unit's status or description.", {
31
- workUnitId: z.string().uuid().describe("Work unit UUID"),
32
- status: z.enum([
33
- "pending", "ready", "in_progress", "completed", "failed",
34
- ]).optional().describe("New status"),
35
- title: z.string().max(500).optional().describe("Updated title"),
36
- description: z.string().max(5000).optional().describe("Updated description"),
37
- resetIterations: z.boolean().optional().describe("Reset iteration count to 0 (use with status='ready' to retry a failed work unit)"),
38
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
39
- }, wrapHandler(async ({ workUnitId, returnFull, ...params }) => {
40
- const fields = buildFields(params, ['status', 'title', 'description', 'resetIterations']);
41
- const result = await callProductApi(getCreds(), {
42
- action: "factory_work_unit_update",
43
- workUnitId,
44
- fields,
45
- });
46
- return successResult(compactEntity(result.workUnit, Object.keys(fields), returnFull));
47
- }));
48
- }
49
- //# sourceMappingURL=workUnitTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workUnitTools.js","sourceRoot":"","sources":["../../../src/handlers/factory/workUnitTools.ts"],"names":[],"mappings":"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"}
@@ -1,182 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Strategy tool handler (consolidated):
3
- // telora_product_strategy (list | create | update | reorder)
4
- // ---------------------------------------------------------------------------
5
- import { z } from "zod";
6
- import { callProductApi, successResult, validationError, buildFields, wrapHandler, compactEntity, } from "../shared.js";
7
- export function registerStrategyTools(server, getCreds, profile = 'full') {
8
- server.tool("telora_product_strategy", "Execution roadmap: group deliveries into themed work scopes. Strategies define what the AI daemon works on -- " +
9
- "assigning an agent role queues the strategy for autonomous execution. " +
10
- "Actions: list strategies for a product, create a strategy (name + productId), " +
11
- "update strategy settings (description, status, agent role, pipeline config), reorder strategy priority, " +
12
- "merges (list merge history for a strategy), " +
13
- "retrospective_trigger (create a pending retrospective for a strategy), " +
14
- "retrospective_run (execute a pending retrospective via LLM), " +
15
- "retrospective_list (list retrospectives for a strategy), " +
16
- "retrospective_get (get a single retrospective by ID).", {
17
- action: z.enum(["list", "create", "update", "reorder", "merges", "retrospective_trigger", "retrospective_run", "retrospective_list", "retrospective_get"]).describe("Action to perform"),
18
- productId: z.string().uuid().optional().describe("Product UUID (required for list, create, reorder)"),
19
- strategyId: z.string().uuid().optional().describe("Strategy UUID (required for update)"),
20
- name: z.string().max(200).optional().describe("Strategy name (required for create)"),
21
- description: z.string().max(2000).optional().describe("What this strategy aims to achieve"),
22
- targetDate: z.string().optional().describe("Target date (ISO 8601)"),
23
- status: z.enum(["proposed", "active", "complete", "cancelled"]).optional().describe("Strategy status (update only)"),
24
- readOnly: z.boolean().optional().describe("Whether this strategy runs in read-only audit mode (update only)"),
25
- assignedAgentRoleId: z.string().uuid().nullable().optional().describe("Agent role UUID to assign, or null to unassign (update only)"),
26
- pipelineConfig: z.object({
27
- ci: z.object({
28
- enabled: z.boolean(),
29
- mergeStrategy: z.enum(["fast-forward", "rebase", "merge-commit"]),
30
- }),
31
- cd: z.object({ enabled: z.boolean() }),
32
- teams: z.object({ enabled: z.boolean() }),
33
- }).optional().describe("Pipeline configuration (update only)"),
34
- keyResultIds: z.array(z.string().uuid()).optional().describe("Key result UUIDs to link at creation (create only)"),
35
- retrospectiveId: z.string().uuid().optional().describe("Retrospective UUID (required for retrospective_run, retrospective_get)"),
36
- strategyIds: z.array(z.string().uuid()).optional().describe("Ordered array of strategy UUIDs for reorder (first = rank 0)"),
37
- limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
38
- offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
39
- detail: z.enum(["titles", "summary", "full"]).optional().describe("Response detail level"),
40
- returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
41
- }, wrapHandler(async (params) => {
42
- switch (params.action) {
43
- case "list": {
44
- if (!params.productId)
45
- return validationError("productId required for list");
46
- const body = {
47
- action: "strategy_list",
48
- productId: params.productId,
49
- };
50
- if (params.status !== undefined)
51
- body.status = params.status;
52
- if (params.limit !== undefined)
53
- body.limit = params.limit;
54
- if (params.offset !== undefined)
55
- body.offset = params.offset;
56
- if (params.detail !== undefined)
57
- body.detail = params.detail;
58
- const result = await callProductApi(getCreds(), body);
59
- const listResponse = { items: result.strategies, totalCount: result.totalCount };
60
- if (profile === 'human') {
61
- listResponse.context_available = true;
62
- listResponse.context_hint = "Use telora_context_assemble with strategyId for layered context (philosophy + strategy goals + delivery summaries).";
63
- }
64
- return successResult(listResponse);
65
- }
66
- case "create": {
67
- if (profile !== 'full' && profile !== 'human')
68
- return validationError("strategy create not available in this profile");
69
- if (!params.productId)
70
- return validationError("productId required for create");
71
- if (!params.name)
72
- return validationError("name required for create");
73
- const fields = buildFields(params, ['name', 'description', 'targetDate']);
74
- // Default to active so strategies appear on the dashboard immediately
75
- if (!fields.status)
76
- fields.status = params.status || 'active';
77
- const body = {
78
- action: "strategy_create",
79
- productId: params.productId,
80
- fields,
81
- };
82
- if (params.keyResultIds && params.keyResultIds.length > 0) {
83
- body.keyResultIds = params.keyResultIds;
84
- }
85
- const result = await callProductApi(getCreds(), body);
86
- const compact = compactEntity(result.strategy, Object.keys(fields), params.returnFull);
87
- if (!params.returnFull && result.linkedKeyResultIds?.length) {
88
- compact.linkedKeyResultIds = result.linkedKeyResultIds;
89
- }
90
- return successResult(compact);
91
- }
92
- case "update": {
93
- if (profile !== 'full' && profile !== 'human')
94
- return validationError("strategy update not available in this profile");
95
- if (!params.strategyId)
96
- return validationError("strategyId required for update");
97
- const fields = buildFields(params, ['name', 'description', 'targetDate', 'status', 'readOnly', 'assignedAgentRoleId', 'pipelineConfig']);
98
- if (Object.keys(fields).length === 0) {
99
- return validationError("Provide at least one field to update");
100
- }
101
- const result = await callProductApi(getCreds(), {
102
- action: "strategy_update",
103
- strategyId: params.strategyId,
104
- fields,
105
- });
106
- return successResult(compactEntity(result.strategy, Object.keys(fields), params.returnFull));
107
- }
108
- case "reorder": {
109
- if (profile !== 'full' && profile !== 'human')
110
- return validationError("strategy reorder not available in this profile");
111
- if (!params.productId)
112
- return validationError("productId required for reorder");
113
- if (!params.strategyIds)
114
- return validationError("strategyIds required for reorder");
115
- const result = await callProductApi(getCreds(), {
116
- action: "strategy_reorder",
117
- productId: params.productId,
118
- strategyIds: params.strategyIds,
119
- });
120
- return successResult(result.strategies);
121
- }
122
- case "merges": {
123
- if (!params.strategyId)
124
- return validationError("strategyId required for merges");
125
- const body = {
126
- action: "strategy_merge_list",
127
- strategyId: params.strategyId,
128
- };
129
- if (params.limit !== undefined)
130
- body.limit = params.limit;
131
- if (params.offset !== undefined)
132
- body.offset = params.offset;
133
- const result = await callProductApi(getCreds(), body);
134
- return successResult({ items: result.merges, totalCount: result.totalCount });
135
- }
136
- case "retrospective_trigger": {
137
- if (!params.strategyId)
138
- return validationError("strategyId required for retrospective_trigger");
139
- const result = await callProductApi(getCreds(), {
140
- action: "strategy_retrospective_trigger",
141
- strategyId: params.strategyId,
142
- });
143
- return successResult(result.retrospective);
144
- }
145
- case "retrospective_run": {
146
- if (!params.retrospectiveId)
147
- return validationError("retrospectiveId required for retrospective_run");
148
- const result = await callProductApi(getCreds(), {
149
- action: "strategy_retrospective_run",
150
- fields: { entityId: params.retrospectiveId },
151
- });
152
- return successResult(result.retrospective);
153
- }
154
- case "retrospective_list": {
155
- if (!params.strategyId)
156
- return validationError("strategyId required for retrospective_list");
157
- const body = {
158
- action: "strategy_retrospective_list",
159
- strategyId: params.strategyId,
160
- };
161
- if (params.limit !== undefined)
162
- body.limit = params.limit;
163
- if (params.offset !== undefined)
164
- body.offset = params.offset;
165
- const result = await callProductApi(getCreds(), body);
166
- return successResult({ items: result.retrospectives, totalCount: result.totalCount });
167
- }
168
- case "retrospective_get": {
169
- if (!params.retrospectiveId)
170
- return validationError("retrospectiveId required for retrospective_get");
171
- const result = await callProductApi(getCreds(), {
172
- action: "strategy_retrospective_get",
173
- fields: { entityId: params.retrospectiveId },
174
- });
175
- return successResult(result.retrospective);
176
- }
177
- default:
178
- return validationError(`Unknown action: ${params.action}`);
179
- }
180
- }));
181
- }
182
- //# sourceMappingURL=strategyHandlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strategyHandlers.js","sourceRoot":"","sources":["../../src/handlers/strategyHandlers.ts"],"names":[],"mappings":"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"}