@pantion/dialogs 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/dialogs/dialog-builder/convergence-rules.md +64 -0
  2. package/dialogs/dialog-builder/dialog.json +10 -0
  3. package/dialogs/dialog-builder/prompts/convergence-intro.md +21 -0
  4. package/dialogs/dialog-builder/prompts/translate-intro.md +17 -0
  5. package/dialogs/dialog-builder/translate.md +46 -0
  6. package/dialogs/image/convergence-rules.md +55 -0
  7. package/dialogs/image/dialog.json +12 -0
  8. package/dialogs/image/prompts/convergence-intro.md +25 -0
  9. package/dialogs/image/prompts/translate-intro.md +37 -0
  10. package/dialogs/image/translate.md +67 -0
  11. package/dialogs/software/convergence-rules.md +29 -0
  12. package/dialogs/software/dialog.json +12 -0
  13. package/dialogs/software/prompts/convergence-intro.md +22 -0
  14. package/dialogs/software/prompts/translate-intro.md +19 -0
  15. package/dialogs/software/translate.md +74 -0
  16. package/dialogs/software-brownfield/convergence-rules.md +109 -0
  17. package/dialogs/software-brownfield/dialog.json +12 -0
  18. package/dialogs/software-brownfield/prompts/convergence-intro.md +26 -0
  19. package/dialogs/software-brownfield/prompts/translate-intro.md +13 -0
  20. package/dialogs/software-brownfield/translate.md +56 -0
  21. package/dialogs/video/convergence-rules.md +96 -0
  22. package/dialogs/video/dialog.json +12 -0
  23. package/dialogs/video/prompts/convergence-intro.md +28 -0
  24. package/dialogs/video/prompts/translate-intro.md +41 -0
  25. package/dialogs/video/translate.md +81 -0
  26. package/dist/core/canon/index-manager.d.ts +27 -0
  27. package/dist/core/canon/index-manager.d.ts.map +1 -0
  28. package/dist/core/canon/index-manager.js +127 -0
  29. package/dist/core/canon/index-manager.js.map +1 -0
  30. package/dist/core/canon/manifest.d.ts +21 -0
  31. package/dist/core/canon/manifest.d.ts.map +1 -0
  32. package/dist/core/canon/manifest.js +56 -0
  33. package/dist/core/canon/manifest.js.map +1 -0
  34. package/dist/core/canon/validator.d.ts +12 -0
  35. package/dist/core/canon/validator.d.ts.map +1 -0
  36. package/dist/core/canon/validator.js +320 -0
  37. package/dist/core/canon/validator.js.map +1 -0
  38. package/dist/core/dialog/canon-writer.d.ts +22 -0
  39. package/dist/core/dialog/canon-writer.d.ts.map +1 -0
  40. package/dist/core/dialog/canon-writer.js +96 -0
  41. package/dist/core/dialog/canon-writer.js.map +1 -0
  42. package/dist/core/dialog/registry.d.ts +10 -0
  43. package/dist/core/dialog/registry.d.ts.map +1 -0
  44. package/dist/core/dialog/registry.js +102 -0
  45. package/dist/core/dialog/registry.js.map +1 -0
  46. package/dist/core/dialog/selector.d.ts +11 -0
  47. package/dist/core/dialog/selector.d.ts.map +1 -0
  48. package/dist/core/dialog/selector.js +32 -0
  49. package/dist/core/dialog/selector.js.map +1 -0
  50. package/dist/core/index.d.ts +20 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +30 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/protocol/convergence.d.ts +11 -0
  55. package/dist/core/protocol/convergence.d.ts.map +1 -0
  56. package/dist/core/protocol/convergence.js +30 -0
  57. package/dist/core/protocol/convergence.js.map +1 -0
  58. package/dist/core/protocol/loader.d.ts +6 -0
  59. package/dist/core/protocol/loader.d.ts.map +1 -0
  60. package/dist/core/protocol/loader.js +31 -0
  61. package/dist/core/protocol/loader.js.map +1 -0
  62. package/dist/core/protocol/stamp-parser.d.ts +46 -0
  63. package/dist/core/protocol/stamp-parser.d.ts.map +1 -0
  64. package/dist/core/protocol/stamp-parser.js +333 -0
  65. package/dist/core/protocol/stamp-parser.js.map +1 -0
  66. package/dist/core/protocol/system-prompt.d.ts +16 -0
  67. package/dist/core/protocol/system-prompt.d.ts.map +1 -0
  68. package/dist/core/protocol/system-prompt.js +68 -0
  69. package/dist/core/protocol/system-prompt.js.map +1 -0
  70. package/dist/core/session/canon-writer.d.ts +33 -0
  71. package/dist/core/session/canon-writer.d.ts.map +1 -0
  72. package/dist/core/session/canon-writer.js +152 -0
  73. package/dist/core/session/canon-writer.js.map +1 -0
  74. package/dist/core/session/manager.d.ts +10 -0
  75. package/dist/core/session/manager.d.ts.map +1 -0
  76. package/dist/core/session/manager.js +105 -0
  77. package/dist/core/session/manager.js.map +1 -0
  78. package/dist/core/skill/canon-writer.d.ts +22 -0
  79. package/dist/core/skill/canon-writer.d.ts.map +1 -0
  80. package/dist/core/skill/canon-writer.js +96 -0
  81. package/dist/core/skill/canon-writer.js.map +1 -0
  82. package/dist/core/skill/registry.d.ts +10 -0
  83. package/dist/core/skill/registry.d.ts.map +1 -0
  84. package/dist/core/skill/registry.js +102 -0
  85. package/dist/core/skill/registry.js.map +1 -0
  86. package/dist/core/skill/selector.d.ts +11 -0
  87. package/dist/core/skill/selector.d.ts.map +1 -0
  88. package/dist/core/skill/selector.js +32 -0
  89. package/dist/core/skill/selector.js.map +1 -0
  90. package/dist/core/soul/registry.d.ts +10 -0
  91. package/dist/core/soul/registry.d.ts.map +1 -0
  92. package/dist/core/soul/registry.js +73 -0
  93. package/dist/core/soul/registry.js.map +1 -0
  94. package/dist/core/types.d.ts +154 -0
  95. package/dist/core/types.d.ts.map +1 -0
  96. package/dist/core/types.js +6 -0
  97. package/dist/core/types.js.map +1 -0
  98. package/dist/core/utils/fs.d.ts +14 -0
  99. package/dist/core/utils/fs.d.ts.map +1 -0
  100. package/dist/core/utils/fs.js +44 -0
  101. package/dist/core/utils/fs.js.map +1 -0
  102. package/dist/core/utils/project-detect.d.ts +3 -0
  103. package/dist/core/utils/project-detect.d.ts.map +1 -0
  104. package/dist/core/utils/project-detect.js +38 -0
  105. package/dist/core/utils/project-detect.js.map +1 -0
  106. package/dist/feature-set.d.ts +14 -0
  107. package/dist/feature-set.d.ts.map +1 -0
  108. package/dist/feature-set.js +38 -0
  109. package/dist/feature-set.js.map +1 -0
  110. package/dist/index.d.ts +3 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +56 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/prompts/convergence-prompts.d.ts +4 -0
  115. package/dist/prompts/convergence-prompts.d.ts.map +1 -0
  116. package/dist/prompts/convergence-prompts.js +76 -0
  117. package/dist/prompts/convergence-prompts.js.map +1 -0
  118. package/dist/prompts/index.d.ts +4 -0
  119. package/dist/prompts/index.d.ts.map +1 -0
  120. package/dist/prompts/index.js +7 -0
  121. package/dist/prompts/index.js.map +1 -0
  122. package/dist/prompts/workflow-prompts.d.ts +9 -0
  123. package/dist/prompts/workflow-prompts.d.ts.map +1 -0
  124. package/dist/prompts/workflow-prompts.js +265 -0
  125. package/dist/prompts/workflow-prompts.js.map +1 -0
  126. package/dist/resources/canon-resources.d.ts +4 -0
  127. package/dist/resources/canon-resources.d.ts.map +1 -0
  128. package/dist/resources/canon-resources.js +164 -0
  129. package/dist/resources/canon-resources.js.map +1 -0
  130. package/dist/server.d.ts +9 -0
  131. package/dist/server.d.ts.map +1 -0
  132. package/dist/server.js +47 -0
  133. package/dist/server.js.map +1 -0
  134. package/dist/tools/amend.d.ts +4 -0
  135. package/dist/tools/amend.d.ts.map +1 -0
  136. package/dist/tools/amend.js +106 -0
  137. package/dist/tools/amend.js.map +1 -0
  138. package/dist/tools/approve.d.ts +4 -0
  139. package/dist/tools/approve.d.ts.map +1 -0
  140. package/dist/tools/approve.js +60 -0
  141. package/dist/tools/approve.js.map +1 -0
  142. package/dist/tools/check-convergence.d.ts +4 -0
  143. package/dist/tools/check-convergence.d.ts.map +1 -0
  144. package/dist/tools/check-convergence.js +50 -0
  145. package/dist/tools/check-convergence.js.map +1 -0
  146. package/dist/tools/check.d.ts +4 -0
  147. package/dist/tools/check.d.ts.map +1 -0
  148. package/dist/tools/check.js +190 -0
  149. package/dist/tools/check.js.map +1 -0
  150. package/dist/tools/create-dialog.d.ts +4 -0
  151. package/dist/tools/create-dialog.d.ts.map +1 -0
  152. package/dist/tools/create-dialog.js +58 -0
  153. package/dist/tools/create-dialog.js.map +1 -0
  154. package/dist/tools/create-skill.d.ts +4 -0
  155. package/dist/tools/create-skill.d.ts.map +1 -0
  156. package/dist/tools/create-skill.js +58 -0
  157. package/dist/tools/create-skill.js.map +1 -0
  158. package/dist/tools/decompose.d.ts +4 -0
  159. package/dist/tools/decompose.d.ts.map +1 -0
  160. package/dist/tools/decompose.js +56 -0
  161. package/dist/tools/decompose.js.map +1 -0
  162. package/dist/tools/index.d.ts +4 -0
  163. package/dist/tools/index.d.ts.map +1 -0
  164. package/dist/tools/index.js +49 -0
  165. package/dist/tools/index.js.map +1 -0
  166. package/dist/tools/list-canons.d.ts +4 -0
  167. package/dist/tools/list-canons.d.ts.map +1 -0
  168. package/dist/tools/list-canons.js +28 -0
  169. package/dist/tools/list-canons.js.map +1 -0
  170. package/dist/tools/migrate.d.ts +4 -0
  171. package/dist/tools/migrate.d.ts.map +1 -0
  172. package/dist/tools/migrate.js +38 -0
  173. package/dist/tools/migrate.js.map +1 -0
  174. package/dist/tools/onboard.d.ts +4 -0
  175. package/dist/tools/onboard.d.ts.map +1 -0
  176. package/dist/tools/onboard.js +27 -0
  177. package/dist/tools/onboard.js.map +1 -0
  178. package/dist/tools/reconverge.d.ts +4 -0
  179. package/dist/tools/reconverge.d.ts.map +1 -0
  180. package/dist/tools/reconverge.js +68 -0
  181. package/dist/tools/reconverge.js.map +1 -0
  182. package/dist/tools/redialog.d.ts +4 -0
  183. package/dist/tools/redialog.d.ts.map +1 -0
  184. package/dist/tools/redialog.js +63 -0
  185. package/dist/tools/redialog.js.map +1 -0
  186. package/dist/tools/reflect.d.ts +4 -0
  187. package/dist/tools/reflect.d.ts.map +1 -0
  188. package/dist/tools/reflect.js +86 -0
  189. package/dist/tools/reflect.js.map +1 -0
  190. package/dist/tools/reject.d.ts +4 -0
  191. package/dist/tools/reject.d.ts.map +1 -0
  192. package/dist/tools/reject.js +57 -0
  193. package/dist/tools/reject.js.map +1 -0
  194. package/dist/tools/reskill.d.ts +4 -0
  195. package/dist/tools/reskill.d.ts.map +1 -0
  196. package/dist/tools/reskill.js +63 -0
  197. package/dist/tools/reskill.js.map +1 -0
  198. package/dist/tools/resume.d.ts +4 -0
  199. package/dist/tools/resume.d.ts.map +1 -0
  200. package/dist/tools/resume.js +56 -0
  201. package/dist/tools/resume.js.map +1 -0
  202. package/dist/tools/reverse.d.ts +4 -0
  203. package/dist/tools/reverse.d.ts.map +1 -0
  204. package/dist/tools/reverse.js +32 -0
  205. package/dist/tools/reverse.js.map +1 -0
  206. package/dist/tools/save-canon.d.ts +4 -0
  207. package/dist/tools/save-canon.d.ts.map +1 -0
  208. package/dist/tools/save-canon.js +97 -0
  209. package/dist/tools/save-canon.js.map +1 -0
  210. package/dist/tools/start.d.ts +4 -0
  211. package/dist/tools/start.d.ts.map +1 -0
  212. package/dist/tools/start.js +83 -0
  213. package/dist/tools/start.js.map +1 -0
  214. package/dist/tools/translate.d.ts +4 -0
  215. package/dist/tools/translate.d.ts.map +1 -0
  216. package/dist/tools/translate.js +102 -0
  217. package/dist/tools/translate.js.map +1 -0
  218. package/dist/tools/update.d.ts +4 -0
  219. package/dist/tools/update.d.ts.map +1 -0
  220. package/dist/tools/update.js +42 -0
  221. package/dist/tools/update.js.map +1 -0
  222. package/dist/tools/validate.d.ts +4 -0
  223. package/dist/tools/validate.d.ts.map +1 -0
  224. package/dist/tools/validate.js +86 -0
  225. package/dist/tools/validate.js.map +1 -0
  226. package/dist/utils/response.d.ts +12 -0
  227. package/dist/utils/response.d.ts.map +1 -0
  228. package/dist/utils/response.js +18 -0
  229. package/dist/utils/response.js.map +1 -0
  230. package/package.json +37 -0
  231. package/protocol/commands/amend.md +188 -0
  232. package/protocol/commands/build.md +90 -0
  233. package/protocol/commands/check.md +255 -0
  234. package/protocol/commands/create-dialog.md +81 -0
  235. package/protocol/commands/decompose.md +230 -0
  236. package/protocol/commands/dialog.md +173 -0
  237. package/protocol/commands/help.md +121 -0
  238. package/protocol/commands/migrate.md +173 -0
  239. package/protocol/commands/onboard.md +210 -0
  240. package/protocol/commands/quick.md +170 -0
  241. package/protocol/commands/redialog.md +73 -0
  242. package/protocol/commands/reflect.md +136 -0
  243. package/protocol/commands/resume.md +148 -0
  244. package/protocol/commands/reverse.md +312 -0
  245. package/protocol/commands/start.md +220 -0
  246. package/protocol/commands/translate.md +157 -0
  247. package/protocol/commands/update.md +205 -0
  248. package/protocol/core-advanced.md +188 -0
  249. package/protocol/core.md +274 -0
  250. package/protocol/pantion-future-prompt.md +88 -0
  251. package/protocol/pantion-intent.md +78 -0
  252. package/protocol/templates/acceptance-tests.md +116 -0
  253. package/protocol/templates/behavior-map.md +135 -0
  254. package/protocol/templates/traceability-map.md +56 -0
  255. package/souls/beginner/rules.md +34 -0
  256. package/souls/beginner/soul.json +6 -0
  257. package/souls/default/rules.md +25 -0
  258. package/souls/default/soul.json +6 -0
  259. package/souls/young/rules.md +67 -0
  260. package/souls/young/soul.json +6 -0
@@ -0,0 +1,102 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ /**
5
+ * Skill search order: project-local > user-global > bundled.
6
+ * skillsDir allows explicitly specifying where bundled skills live.
7
+ */
8
+ function getSkillDirs(projectPath, skillsDir) {
9
+ const dirs = [];
10
+ // Project-local skills
11
+ const projectSkills = resolve(projectPath, 'skills');
12
+ if (existsSync(projectSkills)) {
13
+ dirs.push({ dir: projectSkills, source: 'project' });
14
+ }
15
+ // User-global skills
16
+ const userSkills = resolve(homedir(), '.pantion', 'skills');
17
+ if (existsSync(userSkills)) {
18
+ dirs.push({ dir: userSkills, source: 'user' });
19
+ }
20
+ // Bundled skills (explicit or relative)
21
+ if (skillsDir && existsSync(skillsDir)) {
22
+ dirs.push({ dir: skillsDir, source: 'bundled' });
23
+ }
24
+ return dirs;
25
+ }
26
+ function loadSkill(dir, source) {
27
+ const manifestPath = resolve(dir, 'skill.json');
28
+ if (!existsSync(manifestPath))
29
+ return null;
30
+ try {
31
+ const raw = JSON.parse(readFileSync(manifestPath, 'utf-8'));
32
+ if (!raw ||
33
+ typeof raw !== 'object' ||
34
+ typeof raw.name !== 'string' ||
35
+ typeof raw.displayName !== 'string' ||
36
+ typeof raw.description !== 'string' ||
37
+ typeof raw.version !== 'string' ||
38
+ !Array.isArray(raw.keywords)) {
39
+ return null;
40
+ }
41
+ const manifest = raw;
42
+ const convergenceRulesPath = resolve(dir, 'convergence-rules.md');
43
+ const translatePath = resolve(dir, 'translate.md');
44
+ const convergenceRules = existsSync(convergenceRulesPath)
45
+ ? readFileSync(convergenceRulesPath, 'utf-8')
46
+ : '';
47
+ const translatePrompt = existsSync(translatePath)
48
+ ? readFileSync(translatePath, 'utf-8')
49
+ : '';
50
+ const prompts = {};
51
+ const promptsDir = resolve(dir, 'prompts');
52
+ if (existsSync(promptsDir)) {
53
+ for (const file of readdirSync(promptsDir)) {
54
+ if (file.endsWith('.md')) {
55
+ prompts[file.replace('.md', '')] = readFileSync(resolve(promptsDir, file), 'utf-8');
56
+ }
57
+ }
58
+ }
59
+ // Check for dynamic skill canon
60
+ const canonDialogPath = resolve(dir, 'canon', 'skill-dialog.md');
61
+ const hasCanon = existsSync(canonDialogPath);
62
+ return {
63
+ manifest,
64
+ convergenceRules,
65
+ translatePrompt,
66
+ prompts,
67
+ path: dir,
68
+ source: hasCanon ? 'dynamic' : source,
69
+ hasCanon,
70
+ };
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ /**
77
+ * List all available skills (deduplicated by name, project > user > bundled).
78
+ */
79
+ export function listSkills(projectPath, skillsDir) {
80
+ const skills = new Map();
81
+ // Iterate in reverse priority order so higher-priority overwrites
82
+ const dirs = getSkillDirs(projectPath, skillsDir).reverse();
83
+ for (const { dir, source } of dirs) {
84
+ if (!existsSync(dir))
85
+ continue;
86
+ for (const entry of readdirSync(dir)) {
87
+ const skillDir = resolve(dir, entry);
88
+ const skill = loadSkill(skillDir, source);
89
+ if (skill) {
90
+ skills.set(skill.manifest.name, skill);
91
+ }
92
+ }
93
+ }
94
+ return Array.from(skills.values());
95
+ }
96
+ /**
97
+ * Get a specific skill by name.
98
+ */
99
+ export function getSkill(name, projectPath, skillsDir) {
100
+ return listSkills(projectPath, skillsDir).find((s) => s.manifest.name === name) ?? null;
101
+ }
102
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/skill/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Skill } from '../types.js';
2
+ export interface SkillSelection {
3
+ skill: Skill;
4
+ matchedKeywords: string[];
5
+ }
6
+ /**
7
+ * Auto-select a skill based on the user's first message.
8
+ * Matches against skill keywords. Returns the skill and which keywords matched.
9
+ */
10
+ export declare function autoSelectSkill(userMessage: string, projectPath: string, skillsDir?: string): SkillSelection | null;
11
+ //# sourceMappingURL=selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/core/skill/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA4BnH"}
@@ -0,0 +1,32 @@
1
+ import { listSkills } from './registry.js';
2
+ /**
3
+ * Auto-select a skill based on the user's first message.
4
+ * Matches against skill keywords. Returns the skill and which keywords matched.
5
+ */
6
+ export function autoSelectSkill(userMessage, projectPath, skillsDir) {
7
+ const skills = listSkills(projectPath, skillsDir);
8
+ if (skills.length === 0)
9
+ return null;
10
+ const lower = userMessage.toLowerCase();
11
+ let bestMatch = null;
12
+ let bestScore = 0;
13
+ let bestKeywords = [];
14
+ for (const skill of skills) {
15
+ const matched = [];
16
+ for (const keyword of skill.manifest.keywords) {
17
+ if (lower.includes(keyword.toLowerCase())) {
18
+ matched.push(keyword);
19
+ }
20
+ }
21
+ if (matched.length > bestScore ||
22
+ (matched.length === bestScore && bestMatch && skill.manifest.name < bestMatch.manifest.name)) {
23
+ bestScore = matched.length;
24
+ bestMatch = skill;
25
+ bestKeywords = matched;
26
+ }
27
+ }
28
+ if (!bestMatch)
29
+ return null;
30
+ return { skill: bestMatch, matchedKeywords: bestKeywords };
31
+ }
32
+ //# sourceMappingURL=selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/core/skill/selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,WAAmB,EAAE,SAAkB;IAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,SAAS,GAAiB,IAAI,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IACE,OAAO,CAAC,MAAM,GAAG,SAAS;YAC1B,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC5F,CAAC;YACD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,SAAS,GAAG,KAAK,CAAC;YAClB,YAAY,GAAG,OAAO,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Soul } from '../types.js';
2
+ /**
3
+ * List all available souls (deduplicated by name, project > user > bundled).
4
+ */
5
+ export declare function listSouls(projectPath: string, soulsDir?: string): Soul[];
6
+ /**
7
+ * Get a specific soul by name.
8
+ */
9
+ export declare function getSoul(name: string, projectPath: string, soulsDir?: string): Soul | null;
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/soul/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,aAAa,CAAC;AAoDtD;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAkBxE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEzF"}
@@ -0,0 +1,73 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ /**
5
+ * Soul search order: project-local > user-global > bundled.
6
+ * soulsDir allows explicitly specifying where bundled souls live.
7
+ */
8
+ function getSoulDirs(projectPath, soulsDir) {
9
+ const dirs = [];
10
+ // Project-local souls
11
+ const projectSouls = resolve(projectPath, 'souls');
12
+ if (existsSync(projectSouls)) {
13
+ dirs.push({ dir: projectSouls, source: 'project' });
14
+ }
15
+ // User-global souls
16
+ const userSouls = resolve(homedir(), '.pantion', 'souls');
17
+ if (existsSync(userSouls)) {
18
+ dirs.push({ dir: userSouls, source: 'user' });
19
+ }
20
+ // Bundled souls (explicit or relative)
21
+ if (soulsDir && existsSync(soulsDir)) {
22
+ dirs.push({ dir: soulsDir, source: 'bundled' });
23
+ }
24
+ return dirs;
25
+ }
26
+ function loadSoul(dir, source) {
27
+ const manifestPath = resolve(dir, 'soul.json');
28
+ if (!existsSync(manifestPath))
29
+ return null;
30
+ try {
31
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
32
+ const rulesPath = resolve(dir, 'rules.md');
33
+ const rules = existsSync(rulesPath)
34
+ ? readFileSync(rulesPath, 'utf-8')
35
+ : '';
36
+ return {
37
+ manifest,
38
+ rules,
39
+ path: dir,
40
+ source,
41
+ };
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * List all available souls (deduplicated by name, project > user > bundled).
49
+ */
50
+ export function listSouls(projectPath, soulsDir) {
51
+ const souls = new Map();
52
+ // Iterate in reverse priority order so higher-priority overwrites
53
+ const dirs = getSoulDirs(projectPath, soulsDir).reverse();
54
+ for (const { dir, source } of dirs) {
55
+ if (!existsSync(dir))
56
+ continue;
57
+ for (const entry of readdirSync(dir)) {
58
+ const soulDir = resolve(dir, entry);
59
+ const soul = loadSoul(soulDir, source);
60
+ if (soul) {
61
+ souls.set(soul.manifest.name, soul);
62
+ }
63
+ }
64
+ }
65
+ return Array.from(souls.values());
66
+ }
67
+ /**
68
+ * Get a specific soul by name.
69
+ */
70
+ export function getSoul(name, projectPath, soulsDir) {
71
+ return listSouls(projectPath, soulsDir).find((s) => s.manifest.name === name) ?? null;
72
+ }
73
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/soul/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Core types shared across the Pantion system.
3
+ * These are independent of any LLM provider.
4
+ */
5
+ export interface Message {
6
+ role: 'user' | 'assistant';
7
+ content: string;
8
+ }
9
+ export type SessionStatus = 'active' | 'draft' | 'converged' | 'converged-quick' | 'converged-dialog' | 'amended';
10
+ export interface Session {
11
+ id: string;
12
+ name: string;
13
+ status: SessionStatus;
14
+ dialog?: string;
15
+ soul?: string;
16
+ messages: Message[];
17
+ systemPrompt: string;
18
+ createdAt: string;
19
+ updatedAt: string;
20
+ canonName?: string;
21
+ stampRaw?: string;
22
+ canonType?: 'project' | 'dialog';
23
+ targetDialogName?: string;
24
+ }
25
+ export interface SessionMeta {
26
+ id: string;
27
+ name: string;
28
+ status: SessionStatus;
29
+ dialog?: string;
30
+ soul?: string;
31
+ updatedAt: string;
32
+ canonName?: string;
33
+ messageCount: number;
34
+ canonType?: 'project' | 'dialog';
35
+ targetDialogName?: string;
36
+ }
37
+ export interface DialogManifest {
38
+ name: string;
39
+ displayName: string;
40
+ description: string;
41
+ version: string;
42
+ keywords: string[];
43
+ }
44
+ export interface Dialog {
45
+ manifest: DialogManifest;
46
+ convergenceRules: string;
47
+ translatePrompt: string;
48
+ prompts: Record<string, string>;
49
+ path: string;
50
+ source: 'bundled' | 'user' | 'project' | 'dynamic';
51
+ hasCanon?: boolean;
52
+ }
53
+ export interface SoulManifest {
54
+ name: string;
55
+ displayName: string;
56
+ description: string;
57
+ version: string;
58
+ }
59
+ export interface Soul {
60
+ manifest: SoulManifest;
61
+ rules: string;
62
+ path: string;
63
+ source: 'bundled' | 'user' | 'project';
64
+ }
65
+ export interface OpenQuestion {
66
+ id: string;
67
+ text: string;
68
+ resolvedAt?: string;
69
+ }
70
+ export interface ConvergenceStamp {
71
+ type: 'converged' | 'converged-quick' | 'converged-dialog' | 'draft';
72
+ date: string;
73
+ model?: string;
74
+ canonType: string;
75
+ parent: string;
76
+ openQuestions: string[];
77
+ resolvedQuestions?: OpenQuestion[];
78
+ inferencePolicy: string;
79
+ stabilityZones: string[];
80
+ flexZones: string[];
81
+ raw: string;
82
+ }
83
+ export type HumanStampStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'AUTO-APPROVED';
84
+ export interface HumanStamp {
85
+ status: HumanStampStatus;
86
+ date: string;
87
+ role: string;
88
+ note: string;
89
+ raw: string;
90
+ }
91
+ export interface ProgressStamp {
92
+ type: 'draft';
93
+ date: string;
94
+ session: number;
95
+ canonType: string;
96
+ resolved: string[];
97
+ openQuestions: string[];
98
+ nextFocus: string;
99
+ raw: string;
100
+ }
101
+ export type ConvergenceEvent = {
102
+ type: 'converged';
103
+ stamp: ConvergenceStamp;
104
+ } | {
105
+ type: 'draft';
106
+ stamp: ProgressStamp;
107
+ } | {
108
+ type: 'none';
109
+ };
110
+ export interface ValidationIssue {
111
+ severity: 'error' | 'warning' | 'info';
112
+ message: string;
113
+ }
114
+ export type ChecklistStatus = 'pass' | 'fail' | 'warning' | 'na';
115
+ export interface ChecklistCategory {
116
+ name: string;
117
+ status: ChecklistStatus;
118
+ detail?: string;
119
+ }
120
+ export type TotalOutcome = 'PASS' | 'WARN' | 'FAIL';
121
+ export interface ValidationResult {
122
+ valid: boolean;
123
+ status: 'converged' | 'open';
124
+ issues: ValidationIssue[];
125
+ openQuestions: string[];
126
+ stamp?: ConvergenceStamp;
127
+ categories?: ChecklistCategory[];
128
+ score?: number;
129
+ totalOutcome?: TotalOutcome;
130
+ }
131
+ export interface CanonMetadata {
132
+ dialog?: string;
133
+ soul?: string;
134
+ mode?: 'dialog' | 'full';
135
+ checkResult?: string;
136
+ }
137
+ export interface CanonEntry {
138
+ name: string;
139
+ type: string;
140
+ status: string;
141
+ date: string;
142
+ hasSummary: boolean;
143
+ openQuestions: string[];
144
+ humanStampStatus?: HumanStampStatus;
145
+ }
146
+ export interface ProjectContext {
147
+ hasCanonDir: boolean;
148
+ hasCanons: boolean;
149
+ hasDrafts: boolean;
150
+ hasSessions: boolean;
151
+ canonCount: number;
152
+ draftCount: number;
153
+ }
154
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core types shared across the Pantion system.
3
+ * These are independent of any LLM provider.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Validate that a resolved path stays within the given base directory.
3
+ * Throws if the path escapes (path traversal).
4
+ */
5
+ export declare function assertPathWithin(filePath: string, baseDir: string): void;
6
+ /**
7
+ * Validate that a name is safe for use in filenames (no path separators or traversal).
8
+ */
9
+ export declare function assertSafeName(name: string): void;
10
+ export declare function ensureDir(dir: string): void;
11
+ export declare function writeFile(filePath: string, content: string): void;
12
+ export declare function readFileSafe(filePath: string): string | null;
13
+ export declare function canonDir(projectPath: string): string;
14
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/core/utils/fs.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO5D;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,44 @@
1
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
2
+ import { resolve, dirname } from 'node:path';
3
+ /**
4
+ * Validate that a resolved path stays within the given base directory.
5
+ * Throws if the path escapes (path traversal).
6
+ */
7
+ export function assertPathWithin(filePath, baseDir) {
8
+ const resolved = resolve(filePath);
9
+ const base = resolve(baseDir) + '/';
10
+ if (!resolved.startsWith(base) && resolved !== resolve(baseDir)) {
11
+ throw new Error(`Path escapes allowed directory: ${filePath}`);
12
+ }
13
+ }
14
+ /**
15
+ * Validate that a name is safe for use in filenames (no path separators or traversal).
16
+ */
17
+ export function assertSafeName(name) {
18
+ if (!name || /[/\\]|\.\./.test(name)) {
19
+ throw new Error(`Unsafe name: ${name}`);
20
+ }
21
+ }
22
+ export function ensureDir(dir) {
23
+ if (!existsSync(dir)) {
24
+ mkdirSync(dir, { recursive: true });
25
+ }
26
+ }
27
+ export function writeFile(filePath, content) {
28
+ ensureDir(dirname(filePath));
29
+ writeFileSync(filePath, content, 'utf-8');
30
+ }
31
+ export function readFileSafe(filePath) {
32
+ if (!existsSync(filePath))
33
+ return null;
34
+ try {
35
+ return readFileSync(filePath, 'utf-8');
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ export function canonDir(projectPath) {
42
+ return resolve(projectPath, 'canon');
43
+ }
44
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/core/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,OAAO,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectContext } from '../types.js';
2
+ export declare function detectProjectContext(projectPath: string): ProjectContext;
3
+ //# sourceMappingURL=project-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detect.d.ts","sourceRoot":"","sources":["../../../src/core/utils/project-detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAsCxE"}
@@ -0,0 +1,38 @@
1
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ export function detectProjectContext(projectPath) {
4
+ const dir = resolve(projectPath, 'canon');
5
+ const sessionsDir = resolve(projectPath, '.pantion', 'sessions');
6
+ const result = {
7
+ hasCanonDir: false,
8
+ hasCanons: false,
9
+ hasDrafts: false,
10
+ hasSessions: false,
11
+ canonCount: 0,
12
+ draftCount: 0,
13
+ };
14
+ if (existsSync(dir)) {
15
+ result.hasCanonDir = true;
16
+ const files = readdirSync(dir).filter((f) => f.endsWith('-dialog.md'));
17
+ result.canonCount = files.length;
18
+ result.hasCanons = files.length > 0;
19
+ }
20
+ if (existsSync(sessionsDir)) {
21
+ const sessionFiles = readdirSync(sessionsDir).filter((f) => f.endsWith('.json'));
22
+ result.hasSessions = sessionFiles.length > 0;
23
+ for (const file of sessionFiles) {
24
+ try {
25
+ const content = JSON.parse(readFileSync(resolve(sessionsDir, file), 'utf-8'));
26
+ if (content.status === 'draft') {
27
+ result.draftCount++;
28
+ result.hasDrafts = true;
29
+ }
30
+ }
31
+ catch {
32
+ // skip corrupt files
33
+ }
34
+ }
35
+ }
36
+ return result;
37
+ }
38
+ //# sourceMappingURL=project-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detect.js","sourceRoot":"","sources":["../../../src/core/utils/project-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAmB;QAC7B,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC/B,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Feature set — determines which tools and prompts are registered.
3
+ *
4
+ * Tools not in this list are not registered with the MCP server:
5
+ * the client cannot see them, cannot call them, they do not exist.
6
+ *
7
+ * To enable a tool: add its name to the array.
8
+ * To disable a tool: remove its name from the array.
9
+ *
10
+ * All resources are always registered (they are read-only and harmless).
11
+ */
12
+ export declare const ENABLED_TOOLS: readonly string[];
13
+ export declare function isToolEnabled(name: string): boolean;
14
+ //# sourceMappingURL=feature-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-set.d.ts","sourceRoot":"","sources":["../src/feature-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAuB1C,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Feature set — determines which tools and prompts are registered.
3
+ *
4
+ * Tools not in this list are not registered with the MCP server:
5
+ * the client cannot see them, cannot call them, they do not exist.
6
+ *
7
+ * To enable a tool: add its name to the array.
8
+ * To disable a tool: remove its name from the array.
9
+ *
10
+ * All resources are always registered (they are read-only and harmless).
11
+ */
12
+ export const ENABLED_TOOLS = [
13
+ // Core set (v0.1) — enough to prove the value
14
+ 'pantion_start',
15
+ 'pantion_check-convergence',
16
+ 'pantion_save-canon',
17
+ 'pantion_list-canons',
18
+ 'pantion_check',
19
+ 'pantion_translate',
20
+ 'pantion_resume',
21
+ 'pantion_amend',
22
+ 'pantion_approve',
23
+ 'pantion_reflect',
24
+ // 'pantion_reject',
25
+ // 'pantion_redialog',
26
+ // 'pantion_onboard',
27
+ // 'pantion_reverse',
28
+ // --- Power user (uncomment when ready) ---
29
+ // 'pantion_decompose',
30
+ // 'pantion_create-dialog',
31
+ // 'pantion_redialog',
32
+ // 'pantion_update',
33
+ // 'pantion_migrate',
34
+ ];
35
+ export function isToolEnabled(name) {
36
+ return ENABLED_TOOLS.includes(name);
37
+ }
38
+ //# sourceMappingURL=feature-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-set.js","sourceRoot":"","sources":["../src/feature-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,8CAA8C;IAC9C,eAAe;IACf,2BAA2B;IAC3B,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,qBAAqB;IACrB,qBAAqB;IAErB,4CAA4C;IAC5C,uBAAuB;IACvB,2BAA2B;IAC3B,sBAAsB;IACtB,oBAAoB;IACpB,qBAAqB;CACtB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}