@pantion/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/feature-set.d.ts +14 -0
- package/dist/feature-set.d.ts.map +1 -0
- package/dist/feature-set.js +38 -0
- package/dist/feature-set.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/convergence-prompts.d.ts +4 -0
- package/dist/prompts/convergence-prompts.d.ts.map +1 -0
- package/dist/prompts/convergence-prompts.js +76 -0
- package/dist/prompts/convergence-prompts.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflow-prompts.d.ts +9 -0
- package/dist/prompts/workflow-prompts.d.ts.map +1 -0
- package/dist/prompts/workflow-prompts.js +249 -0
- package/dist/prompts/workflow-prompts.js.map +1 -0
- package/dist/resources/canon-resources.d.ts +4 -0
- package/dist/resources/canon-resources.d.ts.map +1 -0
- package/dist/resources/canon-resources.js +160 -0
- package/dist/resources/canon-resources.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +47 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/amend.d.ts +4 -0
- package/dist/tools/amend.d.ts.map +1 -0
- package/dist/tools/amend.js +106 -0
- package/dist/tools/amend.js.map +1 -0
- package/dist/tools/approve.d.ts +4 -0
- package/dist/tools/approve.d.ts.map +1 -0
- package/dist/tools/approve.js +60 -0
- package/dist/tools/approve.js.map +1 -0
- package/dist/tools/check-convergence.d.ts +4 -0
- package/dist/tools/check-convergence.d.ts.map +1 -0
- package/dist/tools/check-convergence.js +50 -0
- package/dist/tools/check-convergence.js.map +1 -0
- package/dist/tools/check.d.ts +4 -0
- package/dist/tools/check.d.ts.map +1 -0
- package/dist/tools/check.js +190 -0
- package/dist/tools/check.js.map +1 -0
- package/dist/tools/create-skill.d.ts +4 -0
- package/dist/tools/create-skill.d.ts.map +1 -0
- package/dist/tools/create-skill.js +58 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/decompose.d.ts +4 -0
- package/dist/tools/decompose.d.ts.map +1 -0
- package/dist/tools/decompose.js +56 -0
- package/dist/tools/decompose.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +47 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-canons.d.ts +4 -0
- package/dist/tools/list-canons.d.ts.map +1 -0
- package/dist/tools/list-canons.js +28 -0
- package/dist/tools/list-canons.js.map +1 -0
- package/dist/tools/migrate.d.ts +4 -0
- package/dist/tools/migrate.d.ts.map +1 -0
- package/dist/tools/migrate.js +38 -0
- package/dist/tools/migrate.js.map +1 -0
- package/dist/tools/onboard.d.ts +4 -0
- package/dist/tools/onboard.d.ts.map +1 -0
- package/dist/tools/onboard.js +27 -0
- package/dist/tools/onboard.js.map +1 -0
- package/dist/tools/reconverge.d.ts +4 -0
- package/dist/tools/reconverge.d.ts.map +1 -0
- package/dist/tools/reconverge.js +68 -0
- package/dist/tools/reconverge.js.map +1 -0
- package/dist/tools/reject.d.ts +4 -0
- package/dist/tools/reject.d.ts.map +1 -0
- package/dist/tools/reject.js +57 -0
- package/dist/tools/reject.js.map +1 -0
- package/dist/tools/reskill.d.ts +4 -0
- package/dist/tools/reskill.d.ts.map +1 -0
- package/dist/tools/reskill.js +63 -0
- package/dist/tools/reskill.js.map +1 -0
- package/dist/tools/resume.d.ts +4 -0
- package/dist/tools/resume.d.ts.map +1 -0
- package/dist/tools/resume.js +56 -0
- package/dist/tools/resume.js.map +1 -0
- package/dist/tools/reverse.d.ts +4 -0
- package/dist/tools/reverse.d.ts.map +1 -0
- package/dist/tools/reverse.js +32 -0
- package/dist/tools/reverse.js.map +1 -0
- package/dist/tools/save-canon.d.ts +4 -0
- package/dist/tools/save-canon.d.ts.map +1 -0
- package/dist/tools/save-canon.js +97 -0
- package/dist/tools/save-canon.js.map +1 -0
- package/dist/tools/start.d.ts +4 -0
- package/dist/tools/start.d.ts.map +1 -0
- package/dist/tools/start.js +83 -0
- package/dist/tools/start.js.map +1 -0
- package/dist/tools/translate.d.ts +4 -0
- package/dist/tools/translate.d.ts.map +1 -0
- package/dist/tools/translate.js +102 -0
- package/dist/tools/translate.js.map +1 -0
- package/dist/tools/update.d.ts +4 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +42 -0
- package/dist/tools/update.js.map +1 -0
- package/dist/utils/response.d.ts +12 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +18 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +37 -0
- package/protocol/commands/amend.md +188 -0
- package/protocol/commands/build.md +90 -0
- package/protocol/commands/check.md +255 -0
- package/protocol/commands/create-skill.md +81 -0
- package/protocol/commands/decompose.md +230 -0
- package/protocol/commands/dialog.md +173 -0
- package/protocol/commands/help.md +121 -0
- package/protocol/commands/migrate.md +173 -0
- package/protocol/commands/onboard.md +210 -0
- package/protocol/commands/quick.md +170 -0
- package/protocol/commands/redialog.md +252 -0
- package/protocol/commands/reskill.md +73 -0
- package/protocol/commands/resume.md +148 -0
- package/protocol/commands/reverse.md +312 -0
- package/protocol/commands/start.md +220 -0
- package/protocol/commands/translate.md +157 -0
- package/protocol/commands/update.md +205 -0
- package/protocol/commands/validate.md +137 -0
- package/protocol/core-advanced.md +188 -0
- package/protocol/core.md +273 -0
- package/protocol/pantion-future-prompt.md +88 -0
- package/protocol/pantion-intent.md +78 -0
- package/protocol/templates/acceptance-tests.md +116 -0
- package/protocol/templates/behavior-map.md +135 -0
- package/protocol/templates/traceability-map.md +56 -0
- package/skills/image/convergence-rules.md +55 -0
- package/skills/image/prompts/convergence-intro.md +25 -0
- package/skills/image/prompts/translate-intro.md +37 -0
- package/skills/image/skill.json +12 -0
- package/skills/image/translate.md +67 -0
- package/skills/skill-builder/convergence-rules.md +64 -0
- package/skills/skill-builder/prompts/convergence-intro.md +21 -0
- package/skills/skill-builder/prompts/translate-intro.md +17 -0
- package/skills/skill-builder/skill.json +10 -0
- package/skills/skill-builder/translate.md +46 -0
- package/skills/software/convergence-rules.md +29 -0
- package/skills/software/prompts/convergence-intro.md +22 -0
- package/skills/software/prompts/translate-intro.md +19 -0
- package/skills/software/skill.json +12 -0
- package/skills/software/translate.md +74 -0
- package/skills/software-brownfield/convergence-rules.md +109 -0
- package/skills/software-brownfield/prompts/convergence-intro.md +26 -0
- package/skills/software-brownfield/prompts/translate-intro.md +13 -0
- package/skills/software-brownfield/skill.json +12 -0
- package/skills/software-brownfield/translate.md +56 -0
- package/souls/beginner/rules.md +34 -0
- package/souls/beginner/soul.json +6 -0
- package/souls/default/rules.md +25 -0
- package/souls/default/soul.json +6 -0
- package/souls/young/rules.md +67 -0
- package/souls/young/soul.json +6 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { readFileSafe, canonDir, listSkills, getSkill, listSouls, readSkillCanonDialog, readCanonIndex, } from '@pantion/core';
|
|
4
|
+
export function registerResources(server, context) {
|
|
5
|
+
// Resource template: canon dialog
|
|
6
|
+
server.resource('canon-dialog', new ResourceTemplate('pantion://canons/{name}/dialog', {
|
|
7
|
+
list: async () => {
|
|
8
|
+
const canons = readCanonIndex(context.projectPath);
|
|
9
|
+
return {
|
|
10
|
+
resources: canons.map((c) => ({
|
|
11
|
+
uri: `pantion://canons/${c.name}/dialog`,
|
|
12
|
+
name: `${c.name} dialog`,
|
|
13
|
+
mimeType: 'text/markdown',
|
|
14
|
+
})),
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
}), async (uri, variables) => {
|
|
18
|
+
const name = String(variables.name);
|
|
19
|
+
const dir = canonDir(context.projectPath);
|
|
20
|
+
const content = readFileSafe(resolve(dir, name, 'dialog.md'));
|
|
21
|
+
return {
|
|
22
|
+
contents: [{
|
|
23
|
+
uri: uri.href,
|
|
24
|
+
mimeType: 'text/markdown',
|
|
25
|
+
text: content ?? `Canon dialog not found: ${name}`,
|
|
26
|
+
}],
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
// Resource template: canon summary
|
|
30
|
+
server.resource('canon-summary', new ResourceTemplate('pantion://canons/{name}/summary', {
|
|
31
|
+
list: async () => {
|
|
32
|
+
const canons = readCanonIndex(context.projectPath);
|
|
33
|
+
return {
|
|
34
|
+
resources: canons.filter((c) => c.hasSummary).map((c) => ({
|
|
35
|
+
uri: `pantion://canons/${c.name}/summary`,
|
|
36
|
+
name: `${c.name} summary`,
|
|
37
|
+
mimeType: 'text/markdown',
|
|
38
|
+
})),
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
}), async (uri, variables) => {
|
|
42
|
+
const name = String(variables.name);
|
|
43
|
+
const dir = canonDir(context.projectPath);
|
|
44
|
+
const content = readFileSafe(resolve(dir, name, 'summary.md'));
|
|
45
|
+
return {
|
|
46
|
+
contents: [{
|
|
47
|
+
uri: uri.href,
|
|
48
|
+
mimeType: 'text/markdown',
|
|
49
|
+
text: content ?? `Canon summary not found: ${name}`,
|
|
50
|
+
}],
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
// Static resource: canon index
|
|
54
|
+
server.resource('canon-index', 'pantion://canons/index', async (uri) => {
|
|
55
|
+
const dir = canonDir(context.projectPath);
|
|
56
|
+
const content = readFileSafe(resolve(dir, 'index.md'));
|
|
57
|
+
return {
|
|
58
|
+
contents: [{
|
|
59
|
+
uri: uri.href,
|
|
60
|
+
mimeType: 'text/markdown',
|
|
61
|
+
text: content ?? 'No canon index found.',
|
|
62
|
+
}],
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
// Static resource: skills list
|
|
66
|
+
server.resource('skills-list', 'pantion://skills', async (uri) => {
|
|
67
|
+
const skills = listSkills(context.projectPath, context.skillsDir);
|
|
68
|
+
const text = skills.map((s) => `## ${s.manifest.displayName}\n- Name: ${s.manifest.name}\n- Version: ${s.manifest.version}\n- Source: ${s.source}\n- Has Canon: ${s.hasCanon ? 'yes' : 'no'}\n- Keywords: ${s.manifest.keywords.join(', ')}\n- Description: ${s.manifest.description}`).join('\n\n');
|
|
69
|
+
return {
|
|
70
|
+
contents: [{
|
|
71
|
+
uri: uri.href,
|
|
72
|
+
mimeType: 'text/markdown',
|
|
73
|
+
text: text || 'No skills found.',
|
|
74
|
+
}],
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
// Static resource: souls list
|
|
78
|
+
server.resource('souls-list', 'pantion://souls', async (uri) => {
|
|
79
|
+
const souls = listSouls(context.projectPath, context.soulsDir);
|
|
80
|
+
const text = souls.map((s) => `## ${s.manifest.displayName}\n- Name: ${s.manifest.name}\n- Version: ${s.manifest.version}\n- Source: ${s.source}\n- Description: ${s.manifest.description}`).join('\n\n');
|
|
81
|
+
return {
|
|
82
|
+
contents: [{
|
|
83
|
+
uri: uri.href,
|
|
84
|
+
mimeType: 'text/markdown',
|
|
85
|
+
text: text || 'No souls found.',
|
|
86
|
+
}],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
// Resource template: skill canon dialog
|
|
90
|
+
server.resource('skill-canon-dialog', new ResourceTemplate('pantion://skills/{name}/canon/dialog', {
|
|
91
|
+
list: undefined,
|
|
92
|
+
}), async (uri, variables) => {
|
|
93
|
+
const name = String(variables.name);
|
|
94
|
+
const content = readSkillCanonDialog(context.projectPath, name);
|
|
95
|
+
return {
|
|
96
|
+
contents: [{
|
|
97
|
+
uri: uri.href,
|
|
98
|
+
mimeType: 'text/markdown',
|
|
99
|
+
text: content ?? `Skill canon dialog not found: ${name}`,
|
|
100
|
+
}],
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
// Static resource: protocol intent document
|
|
104
|
+
server.resource('protocol-intent', 'pantion://protocol/intent', async (uri) => {
|
|
105
|
+
const content = readFileSafe(resolve(context.protocolDir, 'pantion-intent.md'));
|
|
106
|
+
return {
|
|
107
|
+
contents: [{
|
|
108
|
+
uri: uri.href,
|
|
109
|
+
mimeType: 'text/markdown',
|
|
110
|
+
text: content ?? 'Protocol intent document not found.',
|
|
111
|
+
}],
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
// Static resource: protocol future prompt
|
|
115
|
+
server.resource('protocol-future-prompt', 'pantion://protocol/future-prompt', async (uri) => {
|
|
116
|
+
const content = readFileSafe(resolve(context.protocolDir, 'pantion-future-prompt.md'));
|
|
117
|
+
return {
|
|
118
|
+
contents: [{
|
|
119
|
+
uri: uri.href,
|
|
120
|
+
mimeType: 'text/markdown',
|
|
121
|
+
text: content ?? 'Protocol future prompt document not found.',
|
|
122
|
+
}],
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
// Resource template: skill rules
|
|
126
|
+
server.resource('skill-rules', new ResourceTemplate('pantion://skills/{name}/rules', {
|
|
127
|
+
list: undefined,
|
|
128
|
+
}), async (uri, variables) => {
|
|
129
|
+
const name = String(variables.name);
|
|
130
|
+
const skill = getSkill(name, context.projectPath, context.skillsDir);
|
|
131
|
+
if (!skill) {
|
|
132
|
+
return {
|
|
133
|
+
contents: [{
|
|
134
|
+
uri: uri.href,
|
|
135
|
+
mimeType: 'text/markdown',
|
|
136
|
+
text: `Skill not found: ${name}`,
|
|
137
|
+
}],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const text = [
|
|
141
|
+
`# ${skill.manifest.displayName} — Convergence Rules`,
|
|
142
|
+
'',
|
|
143
|
+
skill.convergenceRules,
|
|
144
|
+
'',
|
|
145
|
+
'---',
|
|
146
|
+
'',
|
|
147
|
+
`# ${skill.manifest.displayName} — Translation Instructions`,
|
|
148
|
+
'',
|
|
149
|
+
skill.translatePrompt,
|
|
150
|
+
].join('\n');
|
|
151
|
+
return {
|
|
152
|
+
contents: [{
|
|
153
|
+
uri: uri.href,
|
|
154
|
+
mimeType: 'text/markdown',
|
|
155
|
+
text,
|
|
156
|
+
}],
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=canon-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canon-resources.js","sourceRoot":"","sources":["../../src/resources/canon-resources.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export interface ServerContext {
|
|
3
|
+
projectPath: string;
|
|
4
|
+
protocolDir: string;
|
|
5
|
+
skillsDir: string;
|
|
6
|
+
soulsDir: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function createServer(context: ServerContext): McpServer;
|
|
9
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CA2C9D"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { registerTools } from './tools/index.js';
|
|
4
|
+
import { registerResources } from './resources/canon-resources.js';
|
|
5
|
+
import { registerPrompts } from './prompts/index.js';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const packageJson = require('../package.json');
|
|
8
|
+
export function createServer(context) {
|
|
9
|
+
const server = new McpServer({
|
|
10
|
+
name: 'pantion',
|
|
11
|
+
version: packageJson.version,
|
|
12
|
+
}, {
|
|
13
|
+
instructions: [
|
|
14
|
+
'You are connected to the Pantion Dialog MCP server.',
|
|
15
|
+
'Pantion turns ideas into unambiguous intent through structured dialog.',
|
|
16
|
+
'',
|
|
17
|
+
'How it works: the user describes what they want to build in natural language.',
|
|
18
|
+
'You call pantion_start to begin a convergence dialog — a structured conversation',
|
|
19
|
+
'that asks targeted questions until the intent is fully clear.',
|
|
20
|
+
'The result is a "canon": a permanent record of what was intended,',
|
|
21
|
+
'from which any agent can build a functionally equivalent system.',
|
|
22
|
+
'',
|
|
23
|
+
'If the user seems unsure where to start, suggest: "Describe what you want to build,',
|
|
24
|
+
'and I\'ll use Pantion to ask the right questions to turn your idea into a clear intent."',
|
|
25
|
+
'For a list of all commands, suggest /pantion-help.',
|
|
26
|
+
'',
|
|
27
|
+
'When the user invokes any Pantion tool for the first time in a session, start your response with:',
|
|
28
|
+
'',
|
|
29
|
+
'**Pantion** — Turning ideas into unambiguous intent through dialog.',
|
|
30
|
+
'',
|
|
31
|
+
'Then proceed with the tool\'s normal behavior.',
|
|
32
|
+
'',
|
|
33
|
+
'Always match the user\'s language. If the user writes in Dutch, respond in Dutch.',
|
|
34
|
+
'The Pantion identity line above should also be in the user\'s language. Examples:',
|
|
35
|
+
'- Dutch: **Pantion** — Ideeën omzetten in eenduidige intent door dialoog.',
|
|
36
|
+
'- English: **Pantion** — Turning ideas into unambiguous intent through dialog.',
|
|
37
|
+
'- German: **Pantion** — Ideen durch Dialog in eindeutige Absichten verwandeln.',
|
|
38
|
+
'',
|
|
39
|
+
'Only show this introduction ONCE per session, on the first Pantion tool invocation.',
|
|
40
|
+
].join('\n'),
|
|
41
|
+
});
|
|
42
|
+
registerTools(server, context);
|
|
43
|
+
registerResources(server, context);
|
|
44
|
+
registerPrompts(server, context);
|
|
45
|
+
return server;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAStE,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,EACD;QACE,YAAY,EAAE;YACZ,qDAAqD;YACrD,wEAAwE;YACxE,EAAE;YACF,+EAA+E;YAC/E,kFAAkF;YAClF,+DAA+D;YAC/D,mEAAmE;YACnE,kEAAkE;YAClE,EAAE;YACF,qFAAqF;YACrF,0FAA0F;YAC1F,oDAAoD;YACpD,EAAE;YACF,mGAAmG;YACnG,EAAE;YACF,qEAAqE;YACrE,EAAE;YACF,gDAAgD;YAChD,EAAE;YACF,mFAAmF;YACnF,mFAAmF;YACnF,2EAA2E;YAC3E,gFAAgF;YAChF,gFAAgF;YAChF,EAAE;YACF,qFAAqF;SACtF,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amend.d.ts","sourceRoot":"","sources":["../../src/tools/amend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiFlD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA2D7E"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { appendAmendment, updateCanonIndex, readFileSafe, canonDir, readCanonIndex, extractHumanStamp, formatHumanStamp, replaceHumanStamp, writeFile, } from '@pantion/core';
|
|
4
|
+
import { success, error } from '../utils/response.js';
|
|
5
|
+
const messageSchema = z.object({
|
|
6
|
+
role: z.enum(['user', 'assistant']),
|
|
7
|
+
content: z.string(),
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Analyze impact: which other canons and derived files are affected by this amendment.
|
|
11
|
+
*/
|
|
12
|
+
function analyzeImpact(canonName, projectPath) {
|
|
13
|
+
const dir = canonDir(projectPath);
|
|
14
|
+
const allCanons = readCanonIndex(projectPath);
|
|
15
|
+
const affectedCanons = [];
|
|
16
|
+
const filesToRegenerate = [];
|
|
17
|
+
// Check if any other canons reference this one as parent
|
|
18
|
+
for (const canon of allCanons) {
|
|
19
|
+
if (canon.name === canonName)
|
|
20
|
+
continue;
|
|
21
|
+
const dialogPath = resolve(dir, canon.name, 'dialog.md');
|
|
22
|
+
const dialog = readFileSafe(dialogPath);
|
|
23
|
+
if (!dialog)
|
|
24
|
+
continue;
|
|
25
|
+
// Check for parent reference in stamp
|
|
26
|
+
const parentMatch = dialog.match(/PARENT:\s*(.+)/i);
|
|
27
|
+
if (parentMatch) {
|
|
28
|
+
const parent = parentMatch[1].trim().toLowerCase();
|
|
29
|
+
if (parent.includes(canonName.toLowerCase()) || parent.includes(`${canonName}-dialog`) || parent.includes(`${canonName}/dialog`)) {
|
|
30
|
+
affectedCanons.push(canon.name);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Check traceability for files that need regeneration
|
|
35
|
+
const traceabilityPath = resolve(dir, canonName, 'traceability.md');
|
|
36
|
+
const traceability = readFileSafe(traceabilityPath);
|
|
37
|
+
if (traceability) {
|
|
38
|
+
// Extract derived file paths from traceability
|
|
39
|
+
const fileRefs = traceability.match(/(?:spec\/|canon\/)[^\s|)]+\.md/g) ?? [];
|
|
40
|
+
for (const ref of fileRefs) {
|
|
41
|
+
filesToRegenerate.push(ref);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Always include summary as needing regeneration
|
|
45
|
+
const summaryPath = resolve(dir, canonName, 'summary.md');
|
|
46
|
+
if (readFileSafe(summaryPath)) {
|
|
47
|
+
filesToRegenerate.push(`canon/${canonName}/summary.md`);
|
|
48
|
+
}
|
|
49
|
+
// Consistency warning for hierarchical systems
|
|
50
|
+
let consistencyWarning;
|
|
51
|
+
if (affectedCanons.length > 0) {
|
|
52
|
+
consistencyWarning = `This canon is referenced as parent by ${affectedCanons.length} other canon(s): ${affectedCanons.join(', ')}. Run pantion_check on each to verify consistency after this amendment.`;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
affected_canons: affectedCanons,
|
|
56
|
+
files_to_regenerate: [...new Set(filesToRegenerate)],
|
|
57
|
+
consistency_warning: consistencyWarning,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function registerAmend(server, context) {
|
|
61
|
+
server.tool('pantion_amend', 'Append an amendment to an existing converged canon. The amendment dialog is appended to the canon file. Returns impact analysis with affected canons and files to regenerate.', {
|
|
62
|
+
canon_name: z.string().describe('Name of the canon to amend'),
|
|
63
|
+
project_path: z.string().optional().describe('Project directory (defaults to server project path)'),
|
|
64
|
+
amendment_dialog: z.array(messageSchema).describe('The amendment dialog to append'),
|
|
65
|
+
stamp: z.string().describe('Raw convergence stamp for the amendment'),
|
|
66
|
+
}, async ({ canon_name, project_path, amendment_dialog, stamp }) => {
|
|
67
|
+
try {
|
|
68
|
+
const projectPath = project_path ?? context.projectPath;
|
|
69
|
+
const date = new Date().toISOString().split('T')[0];
|
|
70
|
+
// Analyze impact before amending
|
|
71
|
+
const impact = analyzeImpact(canon_name, projectPath);
|
|
72
|
+
const canonPath = appendAmendment(canon_name, projectPath, amendment_dialog, stamp);
|
|
73
|
+
// Reset HUMAN STAMP to PENDING after amendment
|
|
74
|
+
const dir = canonDir(projectPath);
|
|
75
|
+
const dialogPath = resolve(dir, canon_name, 'dialog.md');
|
|
76
|
+
const updatedContent = readFileSafe(dialogPath);
|
|
77
|
+
let humanStampReset = false;
|
|
78
|
+
if (updatedContent) {
|
|
79
|
+
const humanStamp = extractHumanStamp(updatedContent);
|
|
80
|
+
if (humanStamp && humanStamp.status !== 'PENDING') {
|
|
81
|
+
const pendingStamp = formatHumanStamp({ status: 'PENDING' });
|
|
82
|
+
const resetContent = replaceHumanStamp(updatedContent, pendingStamp);
|
|
83
|
+
if (resetContent) {
|
|
84
|
+
writeFile(dialogPath, resetContent);
|
|
85
|
+
humanStampReset = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
updateCanonIndex(canon_name, 'amended', date, projectPath);
|
|
90
|
+
return success({
|
|
91
|
+
updated: true,
|
|
92
|
+
canon_path: canonPath,
|
|
93
|
+
human_stamp_reset: humanStampReset || undefined,
|
|
94
|
+
impact_analysis: {
|
|
95
|
+
affected_canons: impact.affected_canons.length > 0 ? impact.affected_canons : undefined,
|
|
96
|
+
files_to_regenerate: impact.files_to_regenerate.length > 0 ? impact.files_to_regenerate : undefined,
|
|
97
|
+
consistency_warning: impact.consistency_warning,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
return error(err instanceof Error ? err.message : String(err));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=amend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amend.js","sourceRoot":"","sources":["../../src/tools/amend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,aAAa,CACpB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,yDAAyD;IACzD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QAEvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,sCAAsC;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,SAAS,CAAC,EAAE,CAAC;gBACjI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAEpD,IAAI,YAAY,EAAE,CAAC;QACjB,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,iCAAiC,CAAC,IAAI,EAAE,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC1D,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,iBAAiB,CAAC,IAAI,CAAC,SAAS,SAAS,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,+CAA+C;IAC/C,IAAI,kBAAsC,CAAC;IAC3C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,kBAAkB,GAAG,yCAAyC,cAAc,CAAC,MAAM,oBAAoB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAAC;IAC5M,CAAC;IAED,OAAO;QACL,eAAe,EAAE,cAAc;QAC/B,mBAAmB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpD,mBAAmB,EAAE,kBAAkB;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,OAAsB;IACrE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,+KAA+K,EAC/K;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QACnG,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACtE,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC;YACL,MAAM,WAAW,GAAG,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpD,iCAAiC;YACjC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEtD,MAAM,SAAS,GAAG,eAAe,CAC/B,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,KAAK,CACN,CAAC;YAEF,+CAA+C;YAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACzD,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;gBACrD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAClD,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC7D,MAAM,YAAY,GAAG,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;oBACrE,IAAI,YAAY,EAAE,CAAC;wBACjB,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;wBACpC,eAAe,GAAG,IAAI,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAE3D,OAAO,OAAO,CAAC;gBACb,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,iBAAiB,EAAE,eAAe,IAAI,SAAS;gBAC/C,eAAe,EAAE;oBACf,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;oBACvF,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;oBACnG,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;iBAChD;aACF,CAAC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/tools/approve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAclD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAiE/E"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { readFileSafe, canonDir, extractConvergenceStamp, extractHumanStamp, formatHumanStamp, replaceHumanStamp, writeFile, assertSafeName, } from '@pantion/core';
|
|
4
|
+
import { success, error } from '../utils/response.js';
|
|
5
|
+
export function registerApprove(server, context) {
|
|
6
|
+
server.tool('pantion_approve', 'Approve a converged canon. Fills in the HUMAN STAMP with APPROVED status. Required before translation or building.', {
|
|
7
|
+
canon_name: z.string().describe('Name of the canon to approve'),
|
|
8
|
+
role: z.string().describe('Role of the approver (e.g. "Product Owner", "Opdrachtgever")'),
|
|
9
|
+
note: z.string().optional().describe('Optional note from the approver'),
|
|
10
|
+
project_path: z.string().optional().describe('Project directory (defaults to server project path)'),
|
|
11
|
+
}, async ({ canon_name, role, note, project_path }) => {
|
|
12
|
+
try {
|
|
13
|
+
const projectPath = project_path ?? context.projectPath;
|
|
14
|
+
assertSafeName(canon_name);
|
|
15
|
+
const dir = canonDir(projectPath);
|
|
16
|
+
const dialogPath = resolve(dir, canon_name, 'dialog.md');
|
|
17
|
+
const content = readFileSafe(dialogPath);
|
|
18
|
+
if (!content) {
|
|
19
|
+
return error(`Canon dialog not found: ${canon_name}`);
|
|
20
|
+
}
|
|
21
|
+
const stamp = extractConvergenceStamp(content);
|
|
22
|
+
if (!stamp || stamp.type === 'draft') {
|
|
23
|
+
return error('Canon is not converged. Only converged canons can be approved.');
|
|
24
|
+
}
|
|
25
|
+
const humanStamp = extractHumanStamp(content);
|
|
26
|
+
if (humanStamp && (humanStamp.status === 'APPROVED' || humanStamp.status === 'AUTO-APPROVED')) {
|
|
27
|
+
return error('Canon is already approved. Use pantion_amend or pantion_redialog to make changes, which will reset the approval.');
|
|
28
|
+
}
|
|
29
|
+
const date = new Date().toISOString().split('T')[0];
|
|
30
|
+
const newStamp = formatHumanStamp({
|
|
31
|
+
status: 'APPROVED',
|
|
32
|
+
date,
|
|
33
|
+
role,
|
|
34
|
+
note: note ?? '[not set]',
|
|
35
|
+
});
|
|
36
|
+
let updated;
|
|
37
|
+
if (humanStamp) {
|
|
38
|
+
updated = replaceHumanStamp(content, newStamp);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
updated = content + '\n\n' + newStamp + '\n';
|
|
42
|
+
}
|
|
43
|
+
if (!updated) {
|
|
44
|
+
return error('Failed to update HUMAN STAMP in dialog file.');
|
|
45
|
+
}
|
|
46
|
+
writeFile(dialogPath, updated);
|
|
47
|
+
return success({
|
|
48
|
+
approved: true,
|
|
49
|
+
canon_name,
|
|
50
|
+
date,
|
|
51
|
+
role,
|
|
52
|
+
note: note ?? undefined,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return error(err instanceof Error ? err.message : String(err));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/tools/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { ServerContext } from '../server.js';
|
|
3
|
+
export declare function registerCheckConvergence(server: McpServer, context: ServerContext): void;
|
|
4
|
+
//# sourceMappingURL=check-convergence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-convergence.d.ts","sourceRoot":"","sources":["../../src/tools/check-convergence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAclD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA+CxF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { validateConvergence, loadSession, saveSession, } from '@pantion/core';
|
|
3
|
+
import { success, error } from '../utils/response.js';
|
|
4
|
+
const messageSchema = z.object({
|
|
5
|
+
role: z.enum(['user', 'assistant']),
|
|
6
|
+
content: z.string(),
|
|
7
|
+
});
|
|
8
|
+
export function registerCheckConvergence(server, context) {
|
|
9
|
+
server.tool('pantion_check-convergence', 'Validate whether a dialog has structurally converged. Checks for DIALOGSPEC STAMP, required fields, and open questions.', {
|
|
10
|
+
session_id: z.string().describe('Session ID from pantion_start'),
|
|
11
|
+
dialog: z.array(messageSchema).describe('The full dialog to validate'),
|
|
12
|
+
}, async ({ session_id, dialog }) => {
|
|
13
|
+
try {
|
|
14
|
+
const messages = dialog.map((m) => ({ role: m.role, content: m.content }));
|
|
15
|
+
const result = validateConvergence(messages);
|
|
16
|
+
// Save dialog to session for recovery
|
|
17
|
+
const session = loadSession(context.projectPath, session_id);
|
|
18
|
+
if (session) {
|
|
19
|
+
session.messages = messages;
|
|
20
|
+
if (result.stamp) {
|
|
21
|
+
session.stampRaw = result.stamp.raw;
|
|
22
|
+
session.status = result.status === 'converged' ? 'converged' : 'draft';
|
|
23
|
+
}
|
|
24
|
+
saveSession(context.projectPath, session);
|
|
25
|
+
}
|
|
26
|
+
return success({
|
|
27
|
+
status: result.status,
|
|
28
|
+
valid: result.valid,
|
|
29
|
+
open_questions: result.openQuestions.length > 0 ? result.openQuestions : undefined,
|
|
30
|
+
stamp: result.stamp ? {
|
|
31
|
+
type: result.stamp.type,
|
|
32
|
+
date: result.stamp.date,
|
|
33
|
+
model: result.stamp.model,
|
|
34
|
+
canonType: result.stamp.canonType,
|
|
35
|
+
openQuestions: result.stamp.openQuestions,
|
|
36
|
+
inferencePolicy: result.stamp.inferencePolicy,
|
|
37
|
+
stabilityZones: result.stamp.stabilityZones,
|
|
38
|
+
flexZones: result.stamp.flexZones,
|
|
39
|
+
} : undefined,
|
|
40
|
+
issues: result.issues,
|
|
41
|
+
categories: result.categories,
|
|
42
|
+
score: result.score,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return error(err instanceof Error ? err.message : String(err));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=check-convergence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-convergence.js","sourceRoot":"","sources":["../../src/tools/check-convergence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/tools/check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA2HlD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAuG7E"}
|