@telora/mcp-products 0.22.123 → 0.22.130
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/dist/affordances.js +1 -1
- package/dist/affordances.js.map +1 -1
- package/dist/handlers/agentHandlers.d.ts +22 -0
- package/dist/handlers/agentHandlers.js +109 -11
- package/dist/handlers/agentHandlers.js.map +1 -1
- package/dist/handlers/deliveryHandlers.d.ts +2 -0
- package/dist/handlers/deliveryHandlers.js +19 -79
- package/dist/handlers/deliveryHandlers.js.map +1 -1
- package/dist/handlers/focusHandlers.d.ts +3 -1
- package/dist/handlers/focusHandlers.js +44 -4
- package/dist/handlers/focusHandlers.js.map +1 -1
- package/dist/handlers/issueHandlers.d.ts +2 -0
- package/dist/handlers/issueHandlers.js +12 -2
- package/dist/handlers/issueHandlers.js.map +1 -1
- package/dist/handlers/prdAuthoringGuide.d.ts +1 -1
- package/dist/handlers/prdAuthoringGuide.js +6 -3
- package/dist/handlers/prdAuthoringGuide.js.map +1 -1
- package/dist/shared.d.ts +28 -3
- package/dist/shared.js +87 -5
- package/dist/shared.js.map +1 -1
- package/dist/wire-contract.generated.d.ts +19 -0
- package/dist/wire-contract.generated.js +63 -0
- package/dist/wire-contract.generated.js.map +1 -0
- package/package.json +2 -2
package/dist/affordances.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// delivery scope start empty; their shape is fixed so future seeds slot in
|
|
12
12
|
// without changing the rendering or test code paths.
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
|
-
|
|
14
|
+
import { PRODUCT_API_ENDPOINT } from './shared.js';
|
|
15
15
|
const FOCUS_AFFORDANCES = [
|
|
16
16
|
{
|
|
17
17
|
name: 'debug_artifacts',
|
package/dist/affordances.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affordances.js","sourceRoot":"","sources":["../src/affordances.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qEAAqE;AACrE,yEAAyE;AACzE,qDAAqD;AACrD,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,qEAAqE;AACrE,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,qDAAqD;AACrD,8EAA8E;
|
|
1
|
+
{"version":3,"file":"affordances.js","sourceRoot":"","sources":["../src/affordances.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { type GetCreds } from "../shared.js";
|
|
|
9
9
|
* or null when the disposition is fileable (agent_resolvable / needs_operator /
|
|
10
10
|
* external_wait / unset). Pure so the refusal is unit-tested without the network.
|
|
11
11
|
*/
|
|
12
|
+
export declare const ESCALATION_CREATE_FIELD_KEYS: readonly ["reasonType", "description", "issueId", "whatWasTried", "helpNeeded", "productId", "focusId", "deliveryId", "disposition"];
|
|
12
13
|
export declare function directedHoldFilingRefusal(disposition: string | undefined): string | null;
|
|
13
14
|
/**
|
|
14
15
|
* An agent_resolvable filing is MACHINE-OWNED: hidden from the operator inbox
|
|
@@ -33,6 +34,27 @@ export declare function directedHoldFilingRefusal(disposition: string | undefine
|
|
|
33
34
|
export declare function unreachableAgentResolvableRefusal(disposition: string | undefined, anchors: {
|
|
34
35
|
focusId?: string;
|
|
35
36
|
}): string | null;
|
|
37
|
+
/** Whether the text names an act ONLY a human/operator can perform (union of the five categories). */
|
|
38
|
+
export declare function namesHumanOnlyAct(text: string | undefined): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* A human-owning disposition (needs_operator, external_wait) may be filed only
|
|
41
|
+
* when the filing NAMES an act a human uniquely supplies: authority the machine
|
|
42
|
+
* lacks, information not in the system, a judgment about intent, or a physical
|
|
43
|
+
* act. A filing whose text alone lets a human resolve it by pasting it into an
|
|
44
|
+
* agent session names none of those -- the human would act as a message bus, not
|
|
45
|
+
* a regulator, and the work belongs in the machine lane (agent_resolvable).
|
|
46
|
+
*
|
|
47
|
+
* This is the 426-hand-filed-with-no-kind population the focus targets: an agent
|
|
48
|
+
* declaring human ownership without naming what only a human can do.
|
|
49
|
+
*
|
|
50
|
+
* Returns the refusal message when the disposition is human-owning but neither
|
|
51
|
+
* the description nor helpNeeded names a human-only act; null otherwise. Pure so
|
|
52
|
+
* the refusal is unit-tested without the network.
|
|
53
|
+
*/
|
|
54
|
+
export declare function humanOwningWithoutHumanActRefusal(disposition: string | undefined, filing: {
|
|
55
|
+
description?: string;
|
|
56
|
+
helpNeeded?: string;
|
|
57
|
+
}): string | null;
|
|
36
58
|
/**
|
|
37
59
|
* A cross-product blocker (this product blocked by ANOTHER product) has a
|
|
38
60
|
* first-class AGENT-facing path: telora_product_request (nexus domain). The
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
// telora_agent (role_list | escalate | escalation_list | escalation_get | escalation_update)
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import { ESCALATION_DISPOSITION_VALUES, ESCALATION_DISPOSITIONS } from "@telora/daemon-core";
|
|
6
|
+
import { ESCALATION_DISPOSITION_VALUES, ESCALATION_DISPOSITIONS, ESCALATION_REASONS } from "@telora/daemon-core";
|
|
7
|
+
// Reason-type values from the daemon-core canonical (escalation-types.ts) --
|
|
8
|
+
// same import pattern as the disposition enum above; no local value mirror.
|
|
9
|
+
const ESCALATION_REASON_VALUES = Object.values(ESCALATION_REASONS);
|
|
7
10
|
import { callProductApi, successResult, validationError, buildFields, wrapHandler, LIST_INDEX_NOTE, } from "../shared.js";
|
|
8
11
|
/**
|
|
9
12
|
* A team executing inside a focus can no longer FILE a directed hold. An
|
|
@@ -14,6 +17,14 @@ import { callProductApi, successResult, validationError, buildFields, wrapHandle
|
|
|
14
17
|
* or null when the disposition is fileable (agent_resolvable / needs_operator /
|
|
15
18
|
* external_wait / unset). Pure so the refusal is unit-tested without the network.
|
|
16
19
|
*/
|
|
20
|
+
// Field keys the escalate action forwards to product-api. Exported so the
|
|
21
|
+
// wire-contract drift test can bind them to the generated manifest projection
|
|
22
|
+
// (../wire-contract.generated.ts). `issueId` is the escalation's anchor
|
|
23
|
+
// identifier, not a wire field -- the drift test declares it as such.
|
|
24
|
+
export const ESCALATION_CREATE_FIELD_KEYS = [
|
|
25
|
+
'reasonType', 'description', 'issueId', 'whatWasTried', 'helpNeeded',
|
|
26
|
+
'productId', 'focusId', 'deliveryId', 'disposition',
|
|
27
|
+
];
|
|
17
28
|
export function directedHoldFilingRefusal(disposition) {
|
|
18
29
|
if (disposition === ESCALATION_DISPOSITIONS.NEEDS_INTENT ||
|
|
19
30
|
disposition === ESCALATION_DISPOSITIONS.NEEDS_CLARIFICATION) {
|
|
@@ -63,6 +74,76 @@ export function unreachableAgentResolvableRefusal(disposition, anchors) {
|
|
|
63
74
|
"operator inbox shows a needs_operator escalation immediately. (If you ARE working within a " +
|
|
64
75
|
"focus a machine will spawn against, pass its focusId so the machine lane can reach the filing.)");
|
|
65
76
|
}
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Human-only-act classifier (filing-boundary gate).
|
|
79
|
+
//
|
|
80
|
+
// MIRROR of the canonical daemon classifier at
|
|
81
|
+
// packages/daemon/src/completion/human-only-act.ts. The two live in different
|
|
82
|
+
// packages: this agent-facing MCP surface cannot import the daemon package, and
|
|
83
|
+
// @telora/daemon-core -- the shared home both could import -- would require a
|
|
84
|
+
// publish to consume here. So the regex set is duplicated deliberately; keep the
|
|
85
|
+
// two in sync. Consolidating both onto daemon-core is the follow-up for when
|
|
86
|
+
// daemon-core is next published.
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
/** Category 3: a JUDGMENT about WHAT gets built (scope / intent / priority / direction). */
|
|
89
|
+
function namesIntentJudgment(text) {
|
|
90
|
+
if (!text)
|
|
91
|
+
return false;
|
|
92
|
+
return /\b(re-?scope|rescoping|requirement|intent|priorit|product decision|design decision|what to build|change (?:what|the scope)|which .{0,40}?(?:should|to build))\b/i.test(text);
|
|
93
|
+
}
|
|
94
|
+
/** Category 1: authority / permission / a credential only a human holds. */
|
|
95
|
+
const AUTHORITY_RE = /\b(approv\w*|sign-?off|authoriz\w*|permission|grant\s+\w*\s*access|credential|access\s+token|password|passphrase|secret\b|budget\s+approv\w*|legal\s+review|compliance\s+(?:review|sign))\b/i;
|
|
96
|
+
/** Category 4: a PHYSICAL act / on-site / an external console no agent can reach. */
|
|
97
|
+
const PHYSICAL_RE = /\b(physical\w*|on-?site|hardware|data\s?cent\w*|power\s?cycle|unplug|re-?plug|reboot\s+the\s+\w+|rack\b|cabl\w*|press\s+the\s+\w+\s+button|swap\s+the\s+\w+\s+(?:drive|disk|card|module))\b/i;
|
|
98
|
+
/** External third party the system cannot act on directly (pairs with external_wait). */
|
|
99
|
+
const EXTERNAL_PARTY_RE = /\b(third[-\s]?party|vendor\b|provider['’]?s?\s+(?:support|console|side)|support\s+ticket|reach\s+out\s+to|contact\s+(?:the\s+)?\w+\s+(?:team|support|provider)|escalate\s+to\s+\w+\s+support)\b/i;
|
|
100
|
+
/** Category 2: information/decision only the human holds (not in repo or DB). */
|
|
101
|
+
const HUMAN_INFO_RE = /\b(only\s+(?:you|a\s+human)\s+\w+|human\s+(?:decision|judg(?:e)?ment|input)|business\s+decision|stakeholder\s+\w+|needs?\s+(?:a\s+)?(?:human\s+)?decision)\b/i;
|
|
102
|
+
/** Category 5: operator authority over the running daemon / verify gate / workflow wiring (mirror). */
|
|
103
|
+
const OPERATOR_DOMAIN_RE = /\b(gate[_\s-]?state|verify\s+gate|gate-?stuck|daemon[-\s]?loop|workflow\s+stage|execution_status)\b/i;
|
|
104
|
+
/** Whether the text names an act ONLY a human/operator can perform (union of the five categories). */
|
|
105
|
+
export function namesHumanOnlyAct(text) {
|
|
106
|
+
if (!text)
|
|
107
|
+
return false;
|
|
108
|
+
return (namesIntentJudgment(text) ||
|
|
109
|
+
AUTHORITY_RE.test(text) ||
|
|
110
|
+
PHYSICAL_RE.test(text) ||
|
|
111
|
+
EXTERNAL_PARTY_RE.test(text) ||
|
|
112
|
+
HUMAN_INFO_RE.test(text) ||
|
|
113
|
+
OPERATOR_DOMAIN_RE.test(text));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* A human-owning disposition (needs_operator, external_wait) may be filed only
|
|
117
|
+
* when the filing NAMES an act a human uniquely supplies: authority the machine
|
|
118
|
+
* lacks, information not in the system, a judgment about intent, or a physical
|
|
119
|
+
* act. A filing whose text alone lets a human resolve it by pasting it into an
|
|
120
|
+
* agent session names none of those -- the human would act as a message bus, not
|
|
121
|
+
* a regulator, and the work belongs in the machine lane (agent_resolvable).
|
|
122
|
+
*
|
|
123
|
+
* This is the 426-hand-filed-with-no-kind population the focus targets: an agent
|
|
124
|
+
* declaring human ownership without naming what only a human can do.
|
|
125
|
+
*
|
|
126
|
+
* Returns the refusal message when the disposition is human-owning but neither
|
|
127
|
+
* the description nor helpNeeded names a human-only act; null otherwise. Pure so
|
|
128
|
+
* the refusal is unit-tested without the network.
|
|
129
|
+
*/
|
|
130
|
+
export function humanOwningWithoutHumanActRefusal(disposition, filing) {
|
|
131
|
+
const humanOwning = disposition === ESCALATION_DISPOSITIONS.NEEDS_OPERATOR ||
|
|
132
|
+
disposition === ESCALATION_DISPOSITIONS.EXTERNAL_WAIT;
|
|
133
|
+
if (!humanOwning)
|
|
134
|
+
return null;
|
|
135
|
+
const text = [filing.description, filing.helpNeeded].filter(Boolean).join('\n');
|
|
136
|
+
if (namesHumanOnlyAct(text))
|
|
137
|
+
return null;
|
|
138
|
+
return (`This filing claims a human-owning disposition (${disposition}) but names no act only a human ` +
|
|
139
|
+
"can perform. A human-owning disposition is admissible only when the filing names what a human " +
|
|
140
|
+
"UNIQUELY supplies: authority the machine lacks (an approval / credential), information not in " +
|
|
141
|
+
"the system, a judgment about intent (scope / priority / direction), or a physical act (hardware " +
|
|
142
|
+
"/ on-site / an external console). If a human could resolve this just by reading the description " +
|
|
143
|
+
"and pasting it into an agent session, they would be acting as a message bus, not a regulator -- " +
|
|
144
|
+
"so it belongs in the machine lane. Re-file as agent_resolvable WITH a focusId (so a coding spawn " +
|
|
145
|
+
"reaches it), or rewrite the description/helpNeeded to name the specific human-only act required.");
|
|
146
|
+
}
|
|
66
147
|
/**
|
|
67
148
|
* A cross-product blocker (this product blocked by ANOTHER product) has a
|
|
68
149
|
* first-class AGENT-facing path: telora_product_request (nexus domain). The
|
|
@@ -89,10 +170,8 @@ export function registerAgentTools(server, getCreds) {
|
|
|
89
170
|
action: z.enum(["role_list", "escalate", "escalation_list", "escalation_get", "escalation_update"]).describe("Action to perform"),
|
|
90
171
|
escalationId: z.string().uuid().optional().describe("Escalation UUID (required for escalation_get, escalation_update)"),
|
|
91
172
|
issueId: z.string().uuid().optional().describe("Issue UUID being worked on (escalate only)"),
|
|
92
|
-
reasonType: z.enum([
|
|
93
|
-
"
|
|
94
|
-
"blocked_by_external", "needs_clarification", "security_concern",
|
|
95
|
-
]).optional().describe("Type of escalation (required for escalate)"),
|
|
173
|
+
reasonType: z.enum([...ESCALATION_REASON_VALUES])
|
|
174
|
+
.optional().describe("Type of escalation (required for escalate)"),
|
|
96
175
|
description: z.string().max(5000).optional().describe("What happened and why escalation is needed (required for escalate)"),
|
|
97
176
|
whatWasTried: z.string().max(5000).optional().describe("What approaches were attempted (escalate only)"),
|
|
98
177
|
helpNeeded: z.string().max(5000).optional().describe("Specific help or decision needed from human (escalate only)"),
|
|
@@ -123,6 +202,14 @@ export function registerAgentTools(server, getCreds) {
|
|
|
123
202
|
answer: z.string().max(5000).optional().describe("Structured, agent-addressed answer to a DIRECTED escalation (disposition needs_intent / " +
|
|
124
203
|
"needs_clarification) (escalation_update only). Distinct from resolutionNotes (operator triage): " +
|
|
125
204
|
"this is the answer the daemon reads back to the agent that asked. Stamps answered_by/answered_at."),
|
|
205
|
+
resolutionClass: z.enum([
|
|
206
|
+
"agent_session", "operator_action", "external_change",
|
|
207
|
+
"auto_swept", "duplicate", "declined_invalid", "unknown",
|
|
208
|
+
]).optional().describe("The REALITY axis (escalation_update only): WHAT actually resolved this filing, recorded so it " +
|
|
209
|
+
"can be differenced against the disposition it was filed with (the mis-route measure). " +
|
|
210
|
+
"agent_session = an agent resolved it; operator_action = a human did; external_change = a third " +
|
|
211
|
+
"party cleared it; auto_swept = an automated sweep; duplicate / declined_invalid = not worth " +
|
|
212
|
+
"acting on; unknown = resolver not recorded. Distinct from resolutionNotes (free text)."),
|
|
126
213
|
limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
|
|
127
214
|
offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
|
|
128
215
|
detail: z.enum(["titles", "summary", "full"]).optional().describe("Response detail level"),
|
|
@@ -155,10 +242,21 @@ export function registerAgentTools(server, getCreds) {
|
|
|
155
242
|
const unreachableRefusal = unreachableAgentResolvableRefusal(params.disposition, { focusId: params.focusId });
|
|
156
243
|
if (unreachableRefusal)
|
|
157
244
|
return validationError(unreachableRefusal);
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
245
|
+
// Refuse a human-owning disposition (needs_operator / external_wait)
|
|
246
|
+
// that names no human-only act: a paste-resolvable filing belongs in
|
|
247
|
+
// the machine lane, not the operator inbox. This is the evidence gate
|
|
248
|
+
// at the filing boundary for the hand-filed population.
|
|
249
|
+
const humanActRefusal = humanOwningWithoutHumanActRefusal(params.disposition, { description: params.description, helpNeeded: params.helpNeeded });
|
|
250
|
+
if (humanActRefusal)
|
|
251
|
+
return validationError(humanActRefusal);
|
|
252
|
+
const fields = buildFields(params, [...ESCALATION_CREATE_FIELD_KEYS]);
|
|
253
|
+
// Stamp a recorded kind on every hand-filed escalation. This surface
|
|
254
|
+
// never set one, so hand-filed filings were the null-kind population
|
|
255
|
+
// the routing focus targets; 'agent_filed' makes each a classifiable
|
|
256
|
+
// row. The DB CHECK (agent_escalations_valid_escalation_kind) gates it.
|
|
257
|
+
if (fields.escalationKind === undefined) {
|
|
258
|
+
fields.escalationKind = "agent_filed";
|
|
259
|
+
}
|
|
162
260
|
const result = await callProductApi(getCreds(), {
|
|
163
261
|
action: "escalation_create",
|
|
164
262
|
fields,
|
|
@@ -197,9 +295,9 @@ export function registerAgentTools(server, getCreds) {
|
|
|
197
295
|
case "escalation_update": {
|
|
198
296
|
if (!params.escalationId)
|
|
199
297
|
return validationError("escalationId required for escalation_update");
|
|
200
|
-
const fields = buildFields({ status: params.status, resolutionNotes: params.resolutionNotes, answer: params.answer });
|
|
298
|
+
const fields = buildFields({ status: params.status, resolutionNotes: params.resolutionNotes, answer: params.answer, resolutionClass: params.resolutionClass });
|
|
201
299
|
if (Object.keys(fields).length === 0) {
|
|
202
|
-
return validationError("At least one field (status, resolutionNotes, answer) must be provided");
|
|
300
|
+
return validationError("At least one field (status, resolutionNotes, answer, resolutionClass) must be provided");
|
|
203
301
|
}
|
|
204
302
|
const result = await callProductApi(getCreds(), {
|
|
205
303
|
action: "escalation_update",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentHandlers.js","sourceRoot":"","sources":["../../src/handlers/agentHandlers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mDAAmD;AACnD,+FAA+F;AAC/F,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agentHandlers.js","sourceRoot":"","sources":["../../src/handlers/agentHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,7 @@ export interface DeliveryCreateParams {
|
|
|
15
15
|
workFacing?: string;
|
|
16
16
|
returnFull?: boolean;
|
|
17
17
|
}
|
|
18
|
+
export declare const DELIVERY_CREATE_FIELD_KEYS: readonly ["name", "description", "targetDate", "acceptanceCriteria", "techContext", "workFacing"];
|
|
19
|
+
export declare const DELIVERY_UPDATE_FIELD_KEYS: readonly ["name", "description", "targetDate", "acceptanceCriteria", "techContext", "focusId", "executionStatus", "workFacing"];
|
|
18
20
|
export declare function handleDeliveryCreate(params: DeliveryCreateParams, callApi: (body: Record<string, unknown>) => Promise<unknown>): Promise<ReturnType<typeof successResult> | ReturnType<typeof validationError>>;
|
|
19
21
|
export declare function registerDeliveryTools(server: McpServer, getCreds: GetCreds, profile?: ToolProfile): void;
|
|
@@ -3,94 +3,34 @@
|
|
|
3
3
|
// telora_product_delivery (list | create | update | operationalize | delete | reorder)
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import { EXECUTION_STATUSES,
|
|
6
|
+
import { EXECUTION_STATUSES, WORK_FACINGS } from "@telora/daemon-core";
|
|
7
7
|
import { callProductApi, successResult, validationError, buildFields, wrapHandler, compactEntity, LIST_INDEX_NOTE, } from "../shared.js";
|
|
8
8
|
import { focusRefSchema, isUuid, resolveFocusRef } from "./focusHandlers.js";
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// work to land in 'queued' so a team can pick it up — defaulting to 'planning'
|
|
20
|
-
// would leave the row invisible. Membership is checked via isPostPlanning().
|
|
21
|
-
// Page size for the focus_list lookup. focus_list has no by-id filter, so we
|
|
22
|
-
// walk pages until we find the focus or exhaust them.
|
|
23
|
-
const FOCUS_LOOKUP_PAGE_SIZE = 500;
|
|
24
|
-
// Hard cap on pages walked. 25 * 500 = 12500 focuses per product, well beyond
|
|
25
|
-
// any realistic product size; the cap is a defensive ceiling so a misbehaving
|
|
26
|
-
// backend cannot wedge the handler in an infinite loop.
|
|
27
|
-
const FOCUS_LOOKUP_MAX_PAGES = 25;
|
|
28
|
-
/**
|
|
29
|
-
* Resolve the default executionStatus for a new delivery based on its parent
|
|
30
|
-
* focus's current stage. Returns 'queued' when the focus is past planning,
|
|
31
|
-
* 'planning' otherwise (including when focusId is absent or the focus cannot
|
|
32
|
-
* be located).
|
|
33
|
-
*
|
|
34
|
-
* focus_list is the only available MCP read path (no focus_get by id), so we
|
|
35
|
-
* paginate through it until the focus is found or we exhaust the pages. The
|
|
36
|
-
* page size is generous; the page cap is a defensive ceiling.
|
|
37
|
-
*
|
|
38
|
-
* A lookup failure or genuinely missing focus falls back to 'planning' AND
|
|
39
|
-
* emits a console.warn so the fallback is visible in the daemon log -- the
|
|
40
|
-
* silent fallback was the harmful part of the prior behavior.
|
|
41
|
-
*/
|
|
42
|
-
async function resolveDefaultExecutionStatus(focusId, productId, callApi) {
|
|
43
|
-
if (!focusId)
|
|
44
|
-
return 'planning';
|
|
45
|
-
let pagesWalked = 0;
|
|
46
|
-
try {
|
|
47
|
-
for (let offset = 0; pagesWalked < FOCUS_LOOKUP_MAX_PAGES; offset += FOCUS_LOOKUP_PAGE_SIZE) {
|
|
48
|
-
const response = (await callApi({
|
|
49
|
-
action: 'focus_list',
|
|
50
|
-
productId,
|
|
51
|
-
detail: 'summary',
|
|
52
|
-
limit: FOCUS_LOOKUP_PAGE_SIZE,
|
|
53
|
-
offset,
|
|
54
|
-
}));
|
|
55
|
-
const focuses = response.focuses ?? [];
|
|
56
|
-
pagesWalked += 1;
|
|
57
|
-
const focus = focuses.find((f) => f.id === focusId);
|
|
58
|
-
if (focus) {
|
|
59
|
-
const stage = typeof focus.stage === 'string' ? focus.stage : null;
|
|
60
|
-
if (stage && isPostPlanning(stage))
|
|
61
|
-
return 'queued';
|
|
62
|
-
return 'planning';
|
|
63
|
-
}
|
|
64
|
-
// Last page reached -- no more pages to walk.
|
|
65
|
-
if (focuses.length < FOCUS_LOOKUP_PAGE_SIZE)
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
const exhausted = pagesWalked >= FOCUS_LOOKUP_MAX_PAGES;
|
|
69
|
-
console.warn(`[delivery_create] resolveDefaultExecutionStatus: focus ${focusId} not found in product ${productId} ` +
|
|
70
|
-
`after scanning ${pagesWalked} page(s) of focus_list` +
|
|
71
|
-
(exhausted ? ` (hit ${FOCUS_LOOKUP_MAX_PAGES}-page safety cap)` : '') +
|
|
72
|
-
`. Falling back to executionStatus='planning'. If the focus is past planning stage, ` +
|
|
73
|
-
`pass executionStatus explicitly to override.`);
|
|
74
|
-
return 'planning';
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
console.warn(`[delivery_create] resolveDefaultExecutionStatus: focus_list lookup failed for focus ${focusId} ` +
|
|
78
|
-
`in product ${productId}: ${err.message}. Falling back to executionStatus='planning'.`);
|
|
79
|
-
return 'planning';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
9
|
+
// Field keys this tool forwards to product-api on create/update. Exported so
|
|
10
|
+
// the wire-contract drift test can bind them to the generated manifest
|
|
11
|
+
// projection (../wire-contract.generated.ts) -- an MCP key the manifest does
|
|
12
|
+
// not declare fails that test.
|
|
13
|
+
export const DELIVERY_CREATE_FIELD_KEYS = [
|
|
14
|
+
'name', 'description', 'targetDate', 'acceptanceCriteria', 'techContext', 'workFacing',
|
|
15
|
+
];
|
|
16
|
+
export const DELIVERY_UPDATE_FIELD_KEYS = [
|
|
17
|
+
'name', 'description', 'targetDate', 'acceptanceCriteria', 'techContext', 'focusId', 'executionStatus', 'workFacing',
|
|
18
|
+
];
|
|
82
19
|
export async function handleDeliveryCreate(params, callApi) {
|
|
83
20
|
if (!params.productId)
|
|
84
21
|
return validationError("productId required for create");
|
|
85
22
|
if (!params.name)
|
|
86
23
|
return validationError("name required for create");
|
|
87
|
-
const fields = buildFields(params, [
|
|
24
|
+
const fields = buildFields(params, [...DELIVERY_CREATE_FIELD_KEYS]);
|
|
25
|
+
// Pass executionStatus through ONLY when the caller supplied it. The
|
|
26
|
+
// stage-aware default ('queued' when the parent focus is past planning,
|
|
27
|
+
// else 'planning') is resolved SERVER-SIDE by the product-api
|
|
28
|
+
// delivery_create handler, which already holds the focus row -- the old
|
|
29
|
+
// client-side focus_list pagination walk (and its silent 'planning'
|
|
30
|
+
// fallback) is gone.
|
|
88
31
|
if (typeof params.executionStatus === 'string' && params.executionStatus.length > 0) {
|
|
89
32
|
fields.executionStatus = params.executionStatus;
|
|
90
33
|
}
|
|
91
|
-
else {
|
|
92
|
-
fields.executionStatus = await resolveDefaultExecutionStatus(params.focusId, params.productId, callApi);
|
|
93
|
-
}
|
|
94
34
|
const body = {
|
|
95
35
|
action: "delivery_create",
|
|
96
36
|
productId: params.productId,
|
|
@@ -196,7 +136,7 @@ export function registerDeliveryTools(server, getCreds, profile = 'full') {
|
|
|
196
136
|
case "update": {
|
|
197
137
|
if (!params.deliveryId)
|
|
198
138
|
return validationError("deliveryId required for update");
|
|
199
|
-
const fields = buildFields(params, [
|
|
139
|
+
const fields = buildFields(params, [...DELIVERY_UPDATE_FIELD_KEYS]);
|
|
200
140
|
const hasInjectionAnchor = params.injectionNodeId !== undefined;
|
|
201
141
|
if (Object.keys(fields).length === 0 && !hasInjectionAnchor) {
|
|
202
142
|
return validationError("Provide at least one field to update (or injectionNodeId to anchor)");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliveryHandlers.js","sourceRoot":"","sources":["../../src/handlers/deliveryHandlers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wCAAwC;AACxC,yFAAyF;AACzF,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"deliveryHandlers.js","sourceRoot":"","sources":["../../src/handlers/deliveryHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
3
3
|
import { type GetCreds, type ToolProfile } from "../shared.js";
|
|
4
4
|
/** True when `ref` is a focus UUID (vs. an ephemeral focusKey like "f3"). */
|
|
5
5
|
export declare function isUuid(ref: string): boolean;
|
|
6
|
+
export declare const FOCUS_CREATE_FIELD_KEYS: readonly ["name", "description", "acceptanceCriteria", "targetDate", "readOnly"];
|
|
7
|
+
export declare const FOCUS_UPDATE_FIELD_KEYS: readonly ["name", "description", "acceptanceCriteria", "targetDate", "status", "readOnly", "assignedAgentRoleId", "armNote", "pipelineConfig"];
|
|
6
8
|
/**
|
|
7
9
|
* Zod validator for a focus reference: a UUID OR an ordinal focusKey ("f3").
|
|
8
10
|
* Used wherever a focusId param previously demanded a strict UUID, so a terse
|
|
@@ -30,7 +32,7 @@ type FocusToolParams = {
|
|
|
30
32
|
description?: string;
|
|
31
33
|
acceptanceCriteria?: string;
|
|
32
34
|
targetDate?: string;
|
|
33
|
-
status?: "proposed" | "active" | "complete" | "cancelled";
|
|
35
|
+
status?: "proposed" | "active" | "complete" | "cancelled" | "open";
|
|
34
36
|
readOnly?: boolean;
|
|
35
37
|
assignedAgentRoleId?: string | null;
|
|
36
38
|
armNote?: string;
|
|
@@ -14,10 +14,31 @@ import { callProductApi, successResult, validationError, buildFields, wrapHandle
|
|
|
14
14
|
// variant nibbles) -- never rejecting a valid focus id as "not a UUID".
|
|
15
15
|
const UUID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
16
16
|
const FOCUS_KEY_RE = /^f\d+$/;
|
|
17
|
+
// The virtual focus-list status selector that names the OPEN set (active +
|
|
18
|
+
// proposed) in a single call. NOT a stored focus status -- a query-time
|
|
19
|
+
// sentinel the product-api listFocuses handler expands to
|
|
20
|
+
// `.in('status', ['active','proposed'])`. It is the first-class "what is open?"
|
|
21
|
+
// query: the set of foci that can still absorb new work. Kept in sync with the
|
|
22
|
+
// edge-side OPEN_FOCUS_SELECTOR in supabase/functions/product-api/handlers/focus/crud.ts.
|
|
23
|
+
const OPEN_FOCUS_SELECTOR = "open";
|
|
24
|
+
// The focus-list `status` accepts every concrete focus status PLUS the virtual
|
|
25
|
+
// "open" selector. Built as a literal `const` tuple so z.enum infers the narrow
|
|
26
|
+
// union (`... | "open"`) rather than widening to `string`.
|
|
27
|
+
const FOCUS_LIST_STATUS_VALUES = [...FOCUS_STATUSES, OPEN_FOCUS_SELECTOR];
|
|
17
28
|
/** True when `ref` is a focus UUID (vs. an ephemeral focusKey like "f3"). */
|
|
18
29
|
export function isUuid(ref) {
|
|
19
30
|
return UUID_RE.test(ref);
|
|
20
31
|
}
|
|
32
|
+
// Field keys this tool forwards to product-api on create/update. Exported so
|
|
33
|
+
// the wire-contract drift test can bind them to the generated manifest
|
|
34
|
+
// projection (../wire-contract.generated.ts) -- an MCP key the manifest does
|
|
35
|
+
// not declare fails that test.
|
|
36
|
+
export const FOCUS_CREATE_FIELD_KEYS = [
|
|
37
|
+
'name', 'description', 'acceptanceCriteria', 'targetDate', 'readOnly',
|
|
38
|
+
];
|
|
39
|
+
export const FOCUS_UPDATE_FIELD_KEYS = [
|
|
40
|
+
'name', 'description', 'acceptanceCriteria', 'targetDate', 'status', 'readOnly', 'assignedAgentRoleId', 'armNote', 'pipelineConfig',
|
|
41
|
+
];
|
|
21
42
|
/**
|
|
22
43
|
* Zod validator for a focus reference: a UUID OR an ordinal focusKey ("f3").
|
|
23
44
|
* Used wherever a focusId param previously demanded a strict UUID, so a terse
|
|
@@ -79,7 +100,7 @@ const focusToolSchema = {
|
|
|
79
100
|
description: z.string().max(4000).optional().describe("What this focus aims to achieve"),
|
|
80
101
|
acceptanceCriteria: z.string().max(4000).optional().describe("Focus-level (outcome) acceptance criteria: criteria that span the focus and no single delivery can satisfy alone. This is the home for an outcome-level criterion relocated up from a delivery. Enumerated by review_complete alongside each delivery's criteria, so a relocated criterion is verdicted like any other -- never annotated away in a delivery footnote."),
|
|
81
102
|
targetDate: z.string().optional().describe("Target date (ISO 8601)"),
|
|
82
|
-
status: z.enum(
|
|
103
|
+
status: z.enum(FOCUS_LIST_STATUS_VALUES).optional().describe("Focus status. On update: sets the focus status. On list: filters to that status, OR name 'open' for the OPEN set -- active + proposed foci that can still absorb new work -- in a single call. On an agent profile, OMITTING status defaults to the open set (scoping reads open intent); a caller wanting terminal foci names 'complete'/'cancelled' explicitly. The human profile omitting status is unchanged (full active/proposed-first history where f1/f2/f3 lead)."),
|
|
83
104
|
readOnly: z.boolean().optional().describe("Whether this focus runs in read-only audit mode. Honored on CREATE (an audit-authored focus is read_only=true by construction). The daemon is the sole writer that flips it back to false on ratified release, so passing it on update is a no-op -- it cannot disable audit mode."),
|
|
84
105
|
assignedAgentRoleId: z.string().uuid().nullable().optional().describe("Agent role UUID to assign, or null to unassign (update only). Setting it non-null ARMS the focus -- a human go-signal (unless durably delegated), NOT the tail of scoping: scoping ends at \"scoped, un-armed\". Arming is a declared, attributed act -- state the activation intent via armNote in the same call (see armNote)."),
|
|
85
106
|
armNote: z.string().min(1).optional().describe("Required when this update ARMS the focus (assignedAgentRoleId set non-null): a non-blank declaration of the activation intent. Arming is a declared, attributed act -- the same standard as the delivery tool's unanchoredReason -- so a bare arm with no stated intent is refused (arm_note_required). Recorded durably as product_focuses.arm_note alongside armed_by/armed_by_kind (who armed it and whether by an agent or a human). It marks and records the act; it does NOT forbid a legitimate agent arm under durable delegation. Not needed to unarm (assignedAgentRoleId=null)."),
|
|
@@ -161,8 +182,20 @@ export function buildFocusHandler(getCreds, profile, callApi = (body) => callPro
|
|
|
161
182
|
action: "focus_list",
|
|
162
183
|
productId: params.productId,
|
|
163
184
|
};
|
|
164
|
-
if (params.status !== undefined)
|
|
185
|
+
if (params.status !== undefined) {
|
|
165
186
|
body.status = params.status;
|
|
187
|
+
}
|
|
188
|
+
else if (profile !== 'human') {
|
|
189
|
+
// Agent profiles read OPEN intent by default: when the caller names no
|
|
190
|
+
// status, resolve to the open set (active + proposed) rather than every
|
|
191
|
+
// status. The lazy call becomes the correct call -- scoping places new
|
|
192
|
+
// work against foci that can still absorb it, never terminal ones. A
|
|
193
|
+
// caller wanting terminal foci names that status explicitly. The human
|
|
194
|
+
// profile is untouched (full active/proposed-first history), and the
|
|
195
|
+
// product-api wire contract is unchanged (the default flips here, at the
|
|
196
|
+
// profile seam, not in the shared edge handler).
|
|
197
|
+
body.status = OPEN_FOCUS_SELECTOR;
|
|
198
|
+
}
|
|
166
199
|
if (params.limit !== undefined)
|
|
167
200
|
body.limit = params.limit;
|
|
168
201
|
if (params.offset !== undefined)
|
|
@@ -175,6 +208,13 @@ export function buildFocusHandler(getCreds, profile, callApi = (body) => callPro
|
|
|
175
208
|
listResponse.context_available = true;
|
|
176
209
|
listResponse.context_hint = "Use telora_context_assemble with focusId for layered context (philosophy + focus goals + delivery summaries).";
|
|
177
210
|
}
|
|
211
|
+
else if (body.status === OPEN_FOCUS_SELECTOR) {
|
|
212
|
+
// Make the open-intent rule legible from the response alone: this list
|
|
213
|
+
// is the OPEN set, terminal foci are excluded, and new work belongs in
|
|
214
|
+
// an open focus or a new one.
|
|
215
|
+
listResponse.scoping_hint =
|
|
216
|
+
"This is the OPEN set -- active and proposed foci only. Completed and cancelled foci are excluded: a closed focus is settled intent, it cannot absorb new work and is neither a placement candidate nor a precedent. Place new work in one of these open foci, or create a new focus.";
|
|
217
|
+
}
|
|
178
218
|
return successResult(listResponse);
|
|
179
219
|
}
|
|
180
220
|
case "create": {
|
|
@@ -187,7 +227,7 @@ export function buildFocusHandler(getCreds, profile, callApi = (body) => callPro
|
|
|
187
227
|
// readOnly is honored at CREATE (audit focus by construction). It is NOT
|
|
188
228
|
// in the update field list -- the daemon is the sole writer that flips
|
|
189
229
|
// read_only=false on ratified release.
|
|
190
|
-
const fields = buildFields(params, [
|
|
230
|
+
const fields = buildFields(params, [...FOCUS_CREATE_FIELD_KEYS]);
|
|
191
231
|
const body = {
|
|
192
232
|
action: "focus_create",
|
|
193
233
|
productId: params.productId,
|
|
@@ -214,7 +254,7 @@ export function buildFocusHandler(getCreds, profile, callApi = (body) => callPro
|
|
|
214
254
|
if (params.assignedAgentRoleId && (params.armNote === undefined || params.armNote.trim().length === 0)) {
|
|
215
255
|
return validationError("arm_note_required: arming a focus is a declared act -- pass armNote stating the activation intent in the same call as assignedAgentRoleId.");
|
|
216
256
|
}
|
|
217
|
-
const fields = buildFields(params, [
|
|
257
|
+
const fields = buildFields(params, [...FOCUS_UPDATE_FIELD_KEYS]);
|
|
218
258
|
// clearReviewRequest is a write-only escape hatch: translate it to
|
|
219
259
|
// reviewRequestedAt=null on the wire. Idempotent -- calling against
|
|
220
260
|
// a focus where review_requested_at is already NULL is a no-op write.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusHandlers.js","sourceRoot":"","sources":["../../src/handlers/focusHandlers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"focusHandlers.js","sourceRoot":"","sources":["../../src/handlers/focusHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { type GetCreds, type ToolProfile } from "../shared.js";
|
|
3
|
+
export declare const ISSUE_CREATE_FIELD_KEYS: readonly ["title", "issueType", "description", "status", "parentIssueId", "priority", "context", "relevantFiles", "dependsOn"];
|
|
4
|
+
export declare const ISSUE_UPDATE_FIELD_KEYS: readonly ["title", "description", "status", "issueType", "parentIssueId", "priority", "context", "relevantFiles", "dependsOn", "deliveryId"];
|
|
3
5
|
export declare function registerIssueTools(server: McpServer, getCreds: GetCreds, profile?: ToolProfile): void;
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { callProductApi, successResult, validationError, buildFields, wrapHandler, compactEntity, LIST_INDEX_NOTE, } from "../shared.js";
|
|
7
|
+
// Field keys this tool forwards to product-api on create/update. Exported so
|
|
8
|
+
// the wire-contract drift test can bind them to the generated manifest
|
|
9
|
+
// projection (../wire-contract.generated.ts) -- an MCP key the manifest does
|
|
10
|
+
// not declare fails that test.
|
|
11
|
+
export const ISSUE_CREATE_FIELD_KEYS = [
|
|
12
|
+
'title', 'issueType', 'description', 'status', 'parentIssueId', 'priority', 'context', 'relevantFiles', 'dependsOn',
|
|
13
|
+
];
|
|
14
|
+
export const ISSUE_UPDATE_FIELD_KEYS = [
|
|
15
|
+
'title', 'description', 'status', 'issueType', 'parentIssueId', 'priority', 'context', 'relevantFiles', 'dependsOn', 'deliveryId',
|
|
16
|
+
];
|
|
7
17
|
export function registerIssueTools(server, getCreds, profile = 'full') {
|
|
8
18
|
// Agents cannot delete issues — only humans can. Delete destroys planning data.
|
|
9
19
|
const allowDelete = profile === 'full' || profile === 'human';
|
|
@@ -64,7 +74,7 @@ export function registerIssueTools(server, getCreds, profile = 'full') {
|
|
|
64
74
|
return validationError("deliveryId required for create");
|
|
65
75
|
if (!params.title)
|
|
66
76
|
return validationError("title required for create");
|
|
67
|
-
const fields = buildFields(params, [
|
|
77
|
+
const fields = buildFields(params, [...ISSUE_CREATE_FIELD_KEYS]);
|
|
68
78
|
const result = await callProductApi(getCreds(), {
|
|
69
79
|
action: "issue_create",
|
|
70
80
|
deliveryId: params.deliveryId,
|
|
@@ -75,7 +85,7 @@ export function registerIssueTools(server, getCreds, profile = 'full') {
|
|
|
75
85
|
case "update": {
|
|
76
86
|
if (!params.issueId)
|
|
77
87
|
return validationError("issueId required for update");
|
|
78
|
-
const fields = buildFields(params, [
|
|
88
|
+
const fields = buildFields(params, [...ISSUE_UPDATE_FIELD_KEYS]);
|
|
79
89
|
if (Object.keys(fields).length === 0) {
|
|
80
90
|
return validationError("Provide at least one field to update");
|
|
81
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issueHandlers.js","sourceRoot":"","sources":["../../src/handlers/issueHandlers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"issueHandlers.js","sourceRoot":"","sources":["../../src/handlers/issueHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PRD_AUTHORING_GUIDE = "# PRD Authoring Protocol (capture -> expand -> check)\n\nA PRD turns the human <-> AI dialog into a FULL product description. The core\nmove is **capture, then expand -- never transcribe.** A sparse dialog must not\nyield a sparse PRD: reason OUTWARD from what was said to every capability, flow,\nedge case, data implication, and non-functional a complete product requires,\nINCLUDING the ones nobody said aloud.\n\nTwo zones, two owners, marked by provenance:\n- **Captured intent (STATED, human-owned)** -- what the human actually said,\n preserved, not summarized away. The reference everything is checked against.\n- **AI expansion (INFERRED, machine-owned)** -- the full product derived from\n that intent. Must visibly EXCEED the capture, not reword it.\n\n## Rounds (distinct jobs -- not \"write more\")\n0. **Capture** the dialog as structured intent: every thread, in the human's\n terms. This is the reference.\n1. **Expand** it against the document shape below. Surface what the dialog\n IMPLIES but never stated. If it reads like the dialog reworded, it failed.\n2. **Check against capture** (ideally a fresh sub-agent that won't defend the\n draft): is every captured thread expanded? What does the intent imply that\n is still missing? Where is it transcription, or verbose-but-thin?\n3. **Close the gap.** Re-run round 2 for a real-sized product.\nSurface to the human only at round boundaries, and only for intent (\"did I\ncapture what you meant?\") -- never to fill expansion slots.\n\n## The expansion should cover\n- The realized product, end to end (a reader can picture using it).\n- Problem & users / jobs-to-be-done.\n- **Capabilities** -- each a SIGNIFICANT portion of the product (one capability\n with multiple phases ahead of it, NOT one shippable change). Per capability:\n behavior/flows, data-model implications, surfaces (UI/API/daemon/MCP), edge\n cases, a verifiable acceptance signal, dependencies, and the **>=2 phases** it\n decomposes into.\n- Cross-cutting / non-functional (authz/RLS, perf, security, observability).\n- System-level architecture & data model.\n- Sequencing & pathways (and alternatives held as options).\n- Obstacles & risks (a clearancePredicate is OPTIONAL and advisory only).\n\n## How this is enforced (the authoring gates)\n- `telora_prd create` REQUIRES **capturedIntent** + **expansion**. No PRD\n without the dialog anchor and a full expansion that exceeds it.\n- `telora_prd_tree node_create`: an **overcome** REQUIRES **phases (>=2)** --\n it materializes as a focus, so it must be capability-sized. An **obstacle**\n does NOT require a predicate. The frontier advances when an overcome's focus\n COMPLETES -- that is, when all of that focus's deliveries pass their own verify\n gates. Focus-completion is the single clearance signal; there is no per-obstacle\n predicate gate. A `clearancePredicate`, if supplied, is **advisory only**: it\n documents the author's notion of \"done\" but is NOT evaluated as a frontier gate,\n so you do not need to commit exact shell/test paths before the code exists.\nThese gates enforce STRUCTURE; the depth is on you -- run the rounds.\n\n## Selecting a starter (greenfield UI PRDs)\nA greenfield UI PRD should **select a starter repo** so the product begins ABOVE\nthe UX floor instead of scaffolding a frontend from zero. Set `starterRepoId`\non `telora_prd create`/`update` to a starter from the org library\n(telora_starter_repo list to browse, by look/archetype). At product genesis the\nfactory clones the starter's pinned ref as the product's initial commit and runs\nthe PRD against it (customize/extend) -- so do NOT author a \"scaffold the app\nfrom zero\" phase when a starter is selected; the base is already there. Leave\n`starterRepoId` null for non-UI / non-greenfield PRDs. The starter must be in\nthe same org as the product.\n\n## From document to tree\ngoal -> goal node; each capability -> an overcome node (>=2 phases) that later\nmaterializes as a focus; each obstacle -> an obstacle node (a clearancePredicate\nis optional/advisory, not required); dependencies -> prerequisite edges;\nalternatives -> pathways (commit one). A faithful capture, fully expanded, yields\ncapability-sized foci by construction -- which is the whole point.\n\n## Arming the run (a human go-signal, not an authoring step)\nAuthoring the tree is necessary but not sufficient -- and authoring ENDS at\n\"authored, un-armed\". Arming is a separate, human-owned go/no-go decision, NOT\nthe tail of your authoring pass. The daemon PRD controller only ARMS frontier\nfoci once the PRD is Played -- that is, once `prds.assigned_agent_role_id` is\nset to an agent_roles UUID, via the Factory PRD Play toggle or\n`telora_prd update assignedAgentRoleId=<uuid>` (pass null to pause). Playing\nthe PRD is the human go-signal (unless durably delegated); do not Play it\nyourself to \"finish\" authoring. An un-armed PRD is the correct resting state\nafter authoring, not a fault. When an active PRD has a frontier but no arm role,\nthe controller
|
|
1
|
+
export declare const PRD_AUTHORING_GUIDE = "# PRD Authoring Protocol (capture -> expand -> check)\n\nA PRD turns the human <-> AI dialog into a FULL product description. The core\nmove is **capture, then expand -- never transcribe.** A sparse dialog must not\nyield a sparse PRD: reason OUTWARD from what was said to every capability, flow,\nedge case, data implication, and non-functional a complete product requires,\nINCLUDING the ones nobody said aloud.\n\nTwo zones, two owners, marked by provenance:\n- **Captured intent (STATED, human-owned)** -- what the human actually said,\n preserved, not summarized away. The reference everything is checked against.\n- **AI expansion (INFERRED, machine-owned)** -- the full product derived from\n that intent. Must visibly EXCEED the capture, not reword it.\n\n## Rounds (distinct jobs -- not \"write more\")\n0. **Capture** the dialog as structured intent: every thread, in the human's\n terms. This is the reference.\n1. **Expand** it against the document shape below. Surface what the dialog\n IMPLIES but never stated. If it reads like the dialog reworded, it failed.\n2. **Check against capture** (ideally a fresh sub-agent that won't defend the\n draft): is every captured thread expanded? What does the intent imply that\n is still missing? Where is it transcription, or verbose-but-thin?\n3. **Close the gap.** Re-run round 2 for a real-sized product.\nSurface to the human only at round boundaries, and only for intent (\"did I\ncapture what you meant?\") -- never to fill expansion slots.\n\n## The expansion should cover\n- The realized product, end to end (a reader can picture using it).\n- Problem & users / jobs-to-be-done.\n- **Capabilities** -- each a SIGNIFICANT portion of the product (one capability\n with multiple phases ahead of it, NOT one shippable change). Per capability:\n behavior/flows, data-model implications, surfaces (UI/API/daemon/MCP), edge\n cases, a verifiable acceptance signal, dependencies, and the **>=2 phases** it\n decomposes into.\n- Cross-cutting / non-functional (authz/RLS, perf, security, observability).\n- System-level architecture & data model.\n- Sequencing & pathways (and alternatives held as options).\n- Obstacles & risks (a clearancePredicate is OPTIONAL and advisory only).\n\n## How this is enforced (the authoring gates)\n- `telora_prd create` REQUIRES **capturedIntent** + **expansion**. No PRD\n without the dialog anchor and a full expansion that exceeds it.\n- `telora_prd_tree node_create`: an **overcome** REQUIRES **phases (>=2)** --\n it materializes as a focus, so it must be capability-sized. An **obstacle**\n does NOT require a predicate. The frontier advances when an overcome's focus\n COMPLETES -- that is, when all of that focus's deliveries pass their own verify\n gates. Focus-completion is the single clearance signal; there is no per-obstacle\n predicate gate. A `clearancePredicate`, if supplied, is **advisory only**: it\n documents the author's notion of \"done\" but is NOT evaluated as a frontier gate,\n so you do not need to commit exact shell/test paths before the code exists.\nThese gates enforce STRUCTURE; the depth is on you -- run the rounds.\n\n## Selecting a starter (greenfield UI PRDs)\nA greenfield UI PRD should **select a starter repo** so the product begins ABOVE\nthe UX floor instead of scaffolding a frontend from zero. Set `starterRepoId`\non `telora_prd create`/`update` to a starter from the org library\n(telora_starter_repo list to browse, by look/archetype). At product genesis the\nfactory clones the starter's pinned ref as the product's initial commit and runs\nthe PRD against it (customize/extend) -- so do NOT author a \"scaffold the app\nfrom zero\" phase when a starter is selected; the base is already there. Leave\n`starterRepoId` null for non-UI / non-greenfield PRDs. The starter must be in\nthe same org as the product.\n\n## From document to tree\ngoal -> goal node; each capability -> an overcome node (>=2 phases) that later\nmaterializes as a focus; each obstacle -> an obstacle node (a clearancePredicate\nis optional/advisory, not required); dependencies -> prerequisite edges;\nalternatives -> pathways (commit one). A faithful capture, fully expanded, yields\ncapability-sized foci by construction -- which is the whole point.\n\n## Arming the run (a human go-signal, not an authoring step)\nAuthoring the tree is necessary but not sufficient -- and authoring ENDS at\n\"authored, un-armed\". Arming is a separate, human-owned go/no-go decision, NOT\nthe tail of your authoring pass. The daemon PRD controller only ARMS frontier\nfoci once the PRD is Played -- that is, once `prds.assigned_agent_role_id` is\nset to an agent_roles UUID, via the Factory PRD Play toggle or\n`telora_prd update assignedAgentRoleId=<uuid>` (pass null to pause). Playing\nthe PRD is the human go-signal (unless durably delegated); do not Play it\nyourself to \"finish\" authoring. An un-armed PRD is the correct resting state\nafter authoring, not a fault. When an active PRD has a frontier but no arm role,\nthe controller does NOT file an escalation: an unplayed frontier is a valid\nwaiting state, not a blockage, and filing one would mislabel a normal\nawaiting-go-signal state as blocked and flood the human inbox. Visibility of the\nawaiting-Play state comes from the daemon-log warning (driven off the\n`prdsBlockedNoRole` aggregate) plus the ready-to-Play UI affordance -- a human\nPlays the PRD when they decide the spend is authorized.";
|
|
@@ -90,7 +90,10 @@ set to an agent_roles UUID, via the Factory PRD Play toggle or
|
|
|
90
90
|
the PRD is the human go-signal (unless durably delegated); do not Play it
|
|
91
91
|
yourself to "finish" authoring. An un-armed PRD is the correct resting state
|
|
92
92
|
after authoring, not a fault. When an active PRD has a frontier but no arm role,
|
|
93
|
-
the controller
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
the controller does NOT file an escalation: an unplayed frontier is a valid
|
|
94
|
+
waiting state, not a blockage, and filing one would mislabel a normal
|
|
95
|
+
awaiting-go-signal state as blocked and flood the human inbox. Visibility of the
|
|
96
|
+
awaiting-Play state comes from the daemon-log warning (driven off the
|
|
97
|
+
\`prdsBlockedNoRole\` aggregate) plus the ready-to-Play UI affordance -- a human
|
|
98
|
+
Plays the PRD when they decide the spend is authorized.`;
|
|
96
99
|
//# sourceMappingURL=prdAuthoringGuide.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prdAuthoringGuide.js","sourceRoot":"","sources":["../../src/handlers/prdAuthoringGuide.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,sEAAsE;AACtE,2EAA2E;AAC3E,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"prdAuthoringGuide.js","sourceRoot":"","sources":["../../src/handlers/prdAuthoringGuide.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,sEAAsE;AACtE,2EAA2E;AAC3E,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAqFqB,CAAC"}
|
package/dist/shared.d.ts
CHANGED
|
@@ -30,14 +30,39 @@ export type McpErrorCode = (typeof MCP_ERROR_CODES)[keyof typeof MCP_ERROR_CODES
|
|
|
30
30
|
export declare class McpApiError extends Error {
|
|
31
31
|
readonly code: McpErrorCode;
|
|
32
32
|
readonly status?: number;
|
|
33
|
-
|
|
33
|
+
/** Raw machine-readable code from the edge error envelope, when one was present. */
|
|
34
|
+
readonly wireCode?: string;
|
|
35
|
+
constructor(message: string, code: McpErrorCode, status?: number, wireCode?: string);
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
|
-
* Map a
|
|
37
|
-
* structured `McpErrorCode`.
|
|
38
|
+
* Map a machine-readable wire code from the edge error envelope to a
|
|
39
|
+
* structured `McpErrorCode`. Returns undefined for unrecognized codes so the
|
|
40
|
+
* caller can fall back to prose sniffing. Pure -- safe to unit test.
|
|
41
|
+
*/
|
|
42
|
+
export declare function classifyWireCode(wireCode: string): McpErrorCode | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Classify a backend failure with the wire code as the PREFERRED channel: a
|
|
45
|
+
* recognized machine-readable envelope code wins outright; prose/status
|
|
46
|
+
* sniffing (`classifyApiError`) runs ONLY for codeless or unrecognized-code
|
|
47
|
+
* responses. This is the single precedence definition `callProductApi` uses.
|
|
48
|
+
* Pure -- safe to unit test.
|
|
49
|
+
*/
|
|
50
|
+
export declare function classifyBackendFailure(status: number, message: string, wireCode?: string): McpErrorCode;
|
|
51
|
+
/**
|
|
52
|
+
* FALLBACK-ONLY prose/status classifier for a backend product-api failure.
|
|
53
|
+
* Reached through `classifyBackendFailure` when the error envelope carried no
|
|
54
|
+
* recognized machine-readable code (legacy handlers, transport-level bodies).
|
|
55
|
+
* Do not add branches here for semantics a wire code already expresses --
|
|
56
|
+
* extend WIRE_CODE_TO_MCP instead. Pure -- safe to unit test.
|
|
38
57
|
*/
|
|
39
58
|
export declare function classifyApiError(status: number, message: string): McpErrorCode;
|
|
40
59
|
export declare function loadCredentials(): TrackerConfig;
|
|
60
|
+
/**
|
|
61
|
+
* The product-api edge-function path -- ONE declaration site. Both the live
|
|
62
|
+
* client below and the affordance renderer (affordances.ts) import this;
|
|
63
|
+
* never re-declare the path.
|
|
64
|
+
*/
|
|
65
|
+
export declare const PRODUCT_API_ENDPOINT = "/functions/v1/product-api";
|
|
41
66
|
export declare function callProductApi(creds: TrackerConfig, body: Record<string, unknown>): Promise<unknown>;
|
|
42
67
|
/**
|
|
43
68
|
* Standard sentence appended to tool descriptions for tools that expose a
|
package/dist/shared.js
CHANGED
|
@@ -45,16 +45,86 @@ export const MCP_ERROR_CODES = {
|
|
|
45
45
|
export class McpApiError extends Error {
|
|
46
46
|
code;
|
|
47
47
|
status;
|
|
48
|
-
|
|
48
|
+
/** Raw machine-readable code from the edge error envelope, when one was present. */
|
|
49
|
+
wireCode;
|
|
50
|
+
constructor(message, code, status, wireCode) {
|
|
49
51
|
super(message);
|
|
50
52
|
this.name = "McpApiError";
|
|
51
53
|
this.code = code;
|
|
52
54
|
this.status = status;
|
|
55
|
+
this.wireCode = wireCode;
|
|
53
56
|
}
|
|
54
57
|
}
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Wire-code classification (preferred channel)
|
|
60
|
+
//
|
|
61
|
+
// The edge error envelope is { success: false, error: <prose>, code?: <code> }.
|
|
62
|
+
// The `code` values are members of the canonical registry at
|
|
63
|
+
// src/lib/vocabulary/error-codes.ts (mirrored here as an opaque-string map --
|
|
64
|
+
// MCP cannot import src/lib, it is a different package). When a code is
|
|
65
|
+
// present and recognized, it wins over prose sniffing; prose classification
|
|
66
|
+
// (`classifyApiError`) remains ONLY as the fallback for codeless or
|
|
67
|
+
// unrecognized-code responses (e.g. the legacy SCREAMING_SNAKE batch codes,
|
|
68
|
+
// which intentionally fall through to prose+status).
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
const WIRE_CODE_TO_MCP = {
|
|
71
|
+
// -- class codes --
|
|
72
|
+
validation_failed: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
73
|
+
not_found: MCP_ERROR_CODES.ERR_NOT_FOUND,
|
|
74
|
+
// The action string is not in the handler registry: the caller sent a bad
|
|
75
|
+
// call, and fixing the call is exactly ERR_VALIDATION's semantics.
|
|
76
|
+
unknown_action: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
77
|
+
// Auth-shaped failures: MCP_ERROR_CODES has no auth member. They are not
|
|
78
|
+
// call-shape problems (ERR_VALIDATION would tell the agent to edit params,
|
|
79
|
+
// which cannot fix a credential), so classify as ERR_BACKEND -- the
|
|
80
|
+
// environment/server side is what must change (re-register / re-connect).
|
|
81
|
+
unauthenticated: MCP_ERROR_CODES.ERR_BACKEND,
|
|
82
|
+
org_scope_denied: MCP_ERROR_CODES.ERR_BACKEND,
|
|
83
|
+
daemon_credential_required: MCP_ERROR_CODES.ERR_BACKEND,
|
|
84
|
+
state_conflict: MCP_ERROR_CODES.ERR_STATE_CONFLICT,
|
|
85
|
+
backend_error: MCP_ERROR_CODES.ERR_BACKEND,
|
|
86
|
+
// Rate limiting is transient and retry-after-backoff -- ERR_TIMEOUT's
|
|
87
|
+
// "transient; safe to retry" semantics fit; ERR_BACKEND would be read as a
|
|
88
|
+
// server fault.
|
|
89
|
+
rate_limited: MCP_ERROR_CODES.ERR_TIMEOUT,
|
|
90
|
+
// -- domain refusal codes --
|
|
91
|
+
// Anchoring refusals arrive as 400s whose prose classified to
|
|
92
|
+
// ERR_VALIDATION before codes existed; the remedy is to fix the call
|
|
93
|
+
// (supply injectionNodeId / allowUnanchored+unanchoredReason), so the
|
|
94
|
+
// class is preserved.
|
|
95
|
+
unanchored_delivery: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
96
|
+
tree_required: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
97
|
+
override_reason_required: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
98
|
+
acceptance_criteria_human_subject: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
99
|
+
out_of_reach_node_type: MCP_ERROR_CODES.ERR_VALIDATION,
|
|
100
|
+
token_not_found: MCP_ERROR_CODES.ERR_NOT_FOUND,
|
|
101
|
+
redeem_failed: MCP_ERROR_CODES.ERR_BACKEND,
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Map a machine-readable wire code from the edge error envelope to a
|
|
105
|
+
* structured `McpErrorCode`. Returns undefined for unrecognized codes so the
|
|
106
|
+
* caller can fall back to prose sniffing. Pure -- safe to unit test.
|
|
107
|
+
*/
|
|
108
|
+
export function classifyWireCode(wireCode) {
|
|
109
|
+
return WIRE_CODE_TO_MCP[wireCode];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Classify a backend failure with the wire code as the PREFERRED channel: a
|
|
113
|
+
* recognized machine-readable envelope code wins outright; prose/status
|
|
114
|
+
* sniffing (`classifyApiError`) runs ONLY for codeless or unrecognized-code
|
|
115
|
+
* responses. This is the single precedence definition `callProductApi` uses.
|
|
116
|
+
* Pure -- safe to unit test.
|
|
117
|
+
*/
|
|
118
|
+
export function classifyBackendFailure(status, message, wireCode) {
|
|
119
|
+
return ((wireCode !== undefined ? classifyWireCode(wireCode) : undefined) ??
|
|
120
|
+
classifyApiError(status, message));
|
|
121
|
+
}
|
|
55
122
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
123
|
+
* FALLBACK-ONLY prose/status classifier for a backend product-api failure.
|
|
124
|
+
* Reached through `classifyBackendFailure` when the error envelope carried no
|
|
125
|
+
* recognized machine-readable code (legacy handlers, transport-level bodies).
|
|
126
|
+
* Do not add branches here for semantics a wire code already expresses --
|
|
127
|
+
* extend WIRE_CODE_TO_MCP instead. Pure -- safe to unit test.
|
|
58
128
|
*/
|
|
59
129
|
export function classifyApiError(status, message) {
|
|
60
130
|
const m = (message || "").toLowerCase();
|
|
@@ -128,6 +198,12 @@ export function loadCredentials() {
|
|
|
128
198
|
// ---------------------------------------------------------------------------
|
|
129
199
|
// API client
|
|
130
200
|
// ---------------------------------------------------------------------------
|
|
201
|
+
/**
|
|
202
|
+
* The product-api edge-function path -- ONE declaration site. Both the live
|
|
203
|
+
* client below and the affordance renderer (affordances.ts) import this;
|
|
204
|
+
* never re-declare the path.
|
|
205
|
+
*/
|
|
206
|
+
export const PRODUCT_API_ENDPOINT = "/functions/v1/product-api";
|
|
131
207
|
let httpWarned = false;
|
|
132
208
|
export async function callProductApi(creds, body) {
|
|
133
209
|
if (!httpWarned && creds.teloraUrl.startsWith('http://')) {
|
|
@@ -145,7 +221,7 @@ export async function callProductApi(creds, body) {
|
|
|
145
221
|
// Invalid URL -- will fail on fetch below
|
|
146
222
|
}
|
|
147
223
|
}
|
|
148
|
-
const url = `${creds.teloraUrl}
|
|
224
|
+
const url = `${creds.teloraUrl}${PRODUCT_API_ENDPOINT}`;
|
|
149
225
|
let response;
|
|
150
226
|
try {
|
|
151
227
|
response = await fetch(url, {
|
|
@@ -168,8 +244,14 @@ export async function callProductApi(creds, body) {
|
|
|
168
244
|
const data = await response.json();
|
|
169
245
|
if (!response.ok || !data.success) {
|
|
170
246
|
// Keep the human message verbatim; attach a machine-branchable code.
|
|
247
|
+
// Classification order: the envelope's machine-readable `code` wins when
|
|
248
|
+
// present and recognized; prose+status sniffing is the fallback for
|
|
249
|
+
// codeless (or unrecognized-code) responses. The raw wire code rides
|
|
250
|
+
// along on the error for downstream diagnostics.
|
|
171
251
|
const message = data.error || `API error (${response.status})`;
|
|
172
|
-
|
|
252
|
+
const wireCode = typeof data.code === "string" ? data.code : undefined;
|
|
253
|
+
const mcpCode = classifyBackendFailure(response.status, message, wireCode);
|
|
254
|
+
throw new McpApiError(message, mcpCode, response.status, wireCode);
|
|
173
255
|
}
|
|
174
256
|
return data;
|
|
175
257
|
}
|
package/dist/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAgBlC,8EAA8E;AAC9E,yBAAyB;AACzB,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAC/E,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,uEAAuE;AACvE,+EAA+E;AAC/E,uEAAuE;AACvE,0EAA0E;AAC1E,wEAAwE;AACxE,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mEAAmE;IACnE,cAAc,EAAE,gBAAgB;IAChC,yGAAyG;IACzG,kBAAkB,EAAE,oBAAoB;IACxC,sFAAsF;IACtF,aAAa,EAAE,eAAe;IAC9B,qEAAqE;IACrE,WAAW,EAAE,aAAa;IAC1B,kFAAkF;IAClF,cAAc,EAAE,gBAAgB;IAChC,6EAA6E;IAC7E,WAAW,EAAE,aAAa;IAC1B,4BAA4B;IAC5B,WAAW,EAAE,aAAa;CAClB,CAAC;AAIX;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAe;IACnB,MAAM,CAAU;IACzB,YAAY,OAAe,EAAE,IAAkB,EAAE,MAAe;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED FILE -- DO NOT EDIT.
|
|
3
|
+
*
|
|
4
|
+
* Produced by `npm run gen:wire-contract` from the per-entity wire-contract
|
|
5
|
+
* manifest (scripts/wire-contract-manifest.json) -- the SINGLE declaration
|
|
6
|
+
* site for the cross-runtime entity wire contracts. Edit the manifest and
|
|
7
|
+
* regenerate; the drift gate (`npm run lint:wire-contract`) fails CI when
|
|
8
|
+
* this file differs from what generation would produce.
|
|
9
|
+
*
|
|
10
|
+
* @module wire-contract.generated
|
|
11
|
+
*/
|
|
12
|
+
/** delivery fields the MCP tool surface forwards to product-api. */
|
|
13
|
+
export declare const DELIVERY_MCP_FIELDS: readonly ["name", "description", "targetDate", "acceptanceCriteria", "techContext", "executionStatus", "focusId", "workFacing"];
|
|
14
|
+
/** focus fields the MCP tool surface forwards to product-api. */
|
|
15
|
+
export declare const FOCUS_MCP_FIELDS: readonly ["name", "description", "targetDate", "acceptanceCriteria", "armNote", "status", "assignedAgentRoleId", "pipelineConfig", "readOnly"];
|
|
16
|
+
/** issue fields the MCP tool surface forwards to product-api. */
|
|
17
|
+
export declare const ISSUE_MCP_FIELDS: readonly ["title", "description", "issueType", "parentIssueId", "priority", "status", "context", "relevantFiles", "dependsOn", "deliveryId"];
|
|
18
|
+
/** escalation fields the MCP tool surface forwards to product-api. */
|
|
19
|
+
export declare const ESCALATION_MCP_FIELDS: readonly ["reasonType", "description", "whatWasTried", "helpNeeded", "escalationKind", "productId", "focusId", "deliveryId", "disposition", "status", "resolutionNotes", "answer"];
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED FILE -- DO NOT EDIT.
|
|
3
|
+
*
|
|
4
|
+
* Produced by `npm run gen:wire-contract` from the per-entity wire-contract
|
|
5
|
+
* manifest (scripts/wire-contract-manifest.json) -- the SINGLE declaration
|
|
6
|
+
* site for the cross-runtime entity wire contracts. Edit the manifest and
|
|
7
|
+
* regenerate; the drift gate (`npm run lint:wire-contract`) fails CI when
|
|
8
|
+
* this file differs from what generation would produce.
|
|
9
|
+
*
|
|
10
|
+
* @module wire-contract.generated
|
|
11
|
+
*/
|
|
12
|
+
/** delivery fields the MCP tool surface forwards to product-api. */
|
|
13
|
+
export const DELIVERY_MCP_FIELDS = [
|
|
14
|
+
'name',
|
|
15
|
+
'description',
|
|
16
|
+
'targetDate',
|
|
17
|
+
'acceptanceCriteria',
|
|
18
|
+
'techContext',
|
|
19
|
+
'executionStatus',
|
|
20
|
+
'focusId',
|
|
21
|
+
'workFacing',
|
|
22
|
+
];
|
|
23
|
+
/** focus fields the MCP tool surface forwards to product-api. */
|
|
24
|
+
export const FOCUS_MCP_FIELDS = [
|
|
25
|
+
'name',
|
|
26
|
+
'description',
|
|
27
|
+
'targetDate',
|
|
28
|
+
'acceptanceCriteria',
|
|
29
|
+
'armNote',
|
|
30
|
+
'status',
|
|
31
|
+
'assignedAgentRoleId',
|
|
32
|
+
'pipelineConfig',
|
|
33
|
+
'readOnly',
|
|
34
|
+
];
|
|
35
|
+
/** issue fields the MCP tool surface forwards to product-api. */
|
|
36
|
+
export const ISSUE_MCP_FIELDS = [
|
|
37
|
+
'title',
|
|
38
|
+
'description',
|
|
39
|
+
'issueType',
|
|
40
|
+
'parentIssueId',
|
|
41
|
+
'priority',
|
|
42
|
+
'status',
|
|
43
|
+
'context',
|
|
44
|
+
'relevantFiles',
|
|
45
|
+
'dependsOn',
|
|
46
|
+
'deliveryId',
|
|
47
|
+
];
|
|
48
|
+
/** escalation fields the MCP tool surface forwards to product-api. */
|
|
49
|
+
export const ESCALATION_MCP_FIELDS = [
|
|
50
|
+
'reasonType',
|
|
51
|
+
'description',
|
|
52
|
+
'whatWasTried',
|
|
53
|
+
'helpNeeded',
|
|
54
|
+
'escalationKind',
|
|
55
|
+
'productId',
|
|
56
|
+
'focusId',
|
|
57
|
+
'deliveryId',
|
|
58
|
+
'disposition',
|
|
59
|
+
'status',
|
|
60
|
+
'resolutionNotes',
|
|
61
|
+
'answer',
|
|
62
|
+
];
|
|
63
|
+
//# sourceMappingURL=wire-contract.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-contract.generated.js","sourceRoot":"","sources":["../src/wire-contract.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,iBAAiB;IACjB,SAAS;IACT,YAAY;CACJ,CAAC;AAEX,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,SAAS;IACT,QAAQ;IACR,qBAAqB;IACrB,gBAAgB;IAChB,UAAU;CACF,CAAC;AAEX,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO;IACP,aAAa;IACb,WAAW;IACX,eAAe;IACf,UAAU;IACV,QAAQ;IACR,SAAS;IACT,eAAe;IACf,WAAW;IACX,YAAY;CACJ,CAAC;AAEX,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY;IACZ,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,SAAS;IACT,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,iBAAiB;IACjB,QAAQ;CACA,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telora/mcp-products",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.130",
|
|
4
4
|
"description": "MCP server exposing Telora product operations to Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
41
|
-
"@telora/daemon-core": "^0.2.
|
|
41
|
+
"@telora/daemon-core": "^0.2.86",
|
|
42
42
|
"ts-morph": "^28.0.0",
|
|
43
43
|
"zod": "^4.3.6"
|
|
44
44
|
},
|