@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.
- package/dialogs/dialog-builder/convergence-rules.md +64 -0
- package/dialogs/dialog-builder/dialog.json +10 -0
- package/dialogs/dialog-builder/prompts/convergence-intro.md +21 -0
- package/dialogs/dialog-builder/prompts/translate-intro.md +17 -0
- package/dialogs/dialog-builder/translate.md +46 -0
- package/dialogs/image/convergence-rules.md +55 -0
- package/dialogs/image/dialog.json +12 -0
- package/dialogs/image/prompts/convergence-intro.md +25 -0
- package/dialogs/image/prompts/translate-intro.md +37 -0
- package/dialogs/image/translate.md +67 -0
- package/dialogs/software/convergence-rules.md +29 -0
- package/dialogs/software/dialog.json +12 -0
- package/dialogs/software/prompts/convergence-intro.md +22 -0
- package/dialogs/software/prompts/translate-intro.md +19 -0
- package/dialogs/software/translate.md +74 -0
- package/dialogs/software-brownfield/convergence-rules.md +109 -0
- package/dialogs/software-brownfield/dialog.json +12 -0
- package/dialogs/software-brownfield/prompts/convergence-intro.md +26 -0
- package/dialogs/software-brownfield/prompts/translate-intro.md +13 -0
- package/dialogs/software-brownfield/translate.md +56 -0
- package/dialogs/video/convergence-rules.md +96 -0
- package/dialogs/video/dialog.json +12 -0
- package/dialogs/video/prompts/convergence-intro.md +28 -0
- package/dialogs/video/prompts/translate-intro.md +41 -0
- package/dialogs/video/translate.md +81 -0
- package/dist/core/canon/index-manager.d.ts +27 -0
- package/dist/core/canon/index-manager.d.ts.map +1 -0
- package/dist/core/canon/index-manager.js +127 -0
- package/dist/core/canon/index-manager.js.map +1 -0
- package/dist/core/canon/manifest.d.ts +21 -0
- package/dist/core/canon/manifest.d.ts.map +1 -0
- package/dist/core/canon/manifest.js +56 -0
- package/dist/core/canon/manifest.js.map +1 -0
- package/dist/core/canon/validator.d.ts +12 -0
- package/dist/core/canon/validator.d.ts.map +1 -0
- package/dist/core/canon/validator.js +320 -0
- package/dist/core/canon/validator.js.map +1 -0
- package/dist/core/dialog/canon-writer.d.ts +22 -0
- package/dist/core/dialog/canon-writer.d.ts.map +1 -0
- package/dist/core/dialog/canon-writer.js +96 -0
- package/dist/core/dialog/canon-writer.js.map +1 -0
- package/dist/core/dialog/registry.d.ts +10 -0
- package/dist/core/dialog/registry.d.ts.map +1 -0
- package/dist/core/dialog/registry.js +102 -0
- package/dist/core/dialog/registry.js.map +1 -0
- package/dist/core/dialog/selector.d.ts +11 -0
- package/dist/core/dialog/selector.d.ts.map +1 -0
- package/dist/core/dialog/selector.js +32 -0
- package/dist/core/dialog/selector.js.map +1 -0
- package/dist/core/index.d.ts +20 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +30 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/protocol/convergence.d.ts +11 -0
- package/dist/core/protocol/convergence.d.ts.map +1 -0
- package/dist/core/protocol/convergence.js +30 -0
- package/dist/core/protocol/convergence.js.map +1 -0
- package/dist/core/protocol/loader.d.ts +6 -0
- package/dist/core/protocol/loader.d.ts.map +1 -0
- package/dist/core/protocol/loader.js +31 -0
- package/dist/core/protocol/loader.js.map +1 -0
- package/dist/core/protocol/stamp-parser.d.ts +46 -0
- package/dist/core/protocol/stamp-parser.d.ts.map +1 -0
- package/dist/core/protocol/stamp-parser.js +333 -0
- package/dist/core/protocol/stamp-parser.js.map +1 -0
- package/dist/core/protocol/system-prompt.d.ts +16 -0
- package/dist/core/protocol/system-prompt.d.ts.map +1 -0
- package/dist/core/protocol/system-prompt.js +68 -0
- package/dist/core/protocol/system-prompt.js.map +1 -0
- package/dist/core/session/canon-writer.d.ts +33 -0
- package/dist/core/session/canon-writer.d.ts.map +1 -0
- package/dist/core/session/canon-writer.js +152 -0
- package/dist/core/session/canon-writer.js.map +1 -0
- package/dist/core/session/manager.d.ts +10 -0
- package/dist/core/session/manager.d.ts.map +1 -0
- package/dist/core/session/manager.js +105 -0
- package/dist/core/session/manager.js.map +1 -0
- package/dist/core/skill/canon-writer.d.ts +22 -0
- package/dist/core/skill/canon-writer.d.ts.map +1 -0
- package/dist/core/skill/canon-writer.js +96 -0
- package/dist/core/skill/canon-writer.js.map +1 -0
- package/dist/core/skill/registry.d.ts +10 -0
- package/dist/core/skill/registry.d.ts.map +1 -0
- package/dist/core/skill/registry.js +102 -0
- package/dist/core/skill/registry.js.map +1 -0
- package/dist/core/skill/selector.d.ts +11 -0
- package/dist/core/skill/selector.d.ts.map +1 -0
- package/dist/core/skill/selector.js +32 -0
- package/dist/core/skill/selector.js.map +1 -0
- package/dist/core/soul/registry.d.ts +10 -0
- package/dist/core/soul/registry.d.ts.map +1 -0
- package/dist/core/soul/registry.js +73 -0
- package/dist/core/soul/registry.js.map +1 -0
- package/dist/core/types.d.ts +154 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils/fs.d.ts +14 -0
- package/dist/core/utils/fs.d.ts.map +1 -0
- package/dist/core/utils/fs.js +44 -0
- package/dist/core/utils/fs.js.map +1 -0
- package/dist/core/utils/project-detect.d.ts +3 -0
- package/dist/core/utils/project-detect.d.ts.map +1 -0
- package/dist/core/utils/project-detect.js +38 -0
- package/dist/core/utils/project-detect.js.map +1 -0
- 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 +265 -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 +164 -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-dialog.d.ts +4 -0
- package/dist/tools/create-dialog.d.ts.map +1 -0
- package/dist/tools/create-dialog.js +58 -0
- package/dist/tools/create-dialog.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 +49 -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/redialog.d.ts +4 -0
- package/dist/tools/redialog.d.ts.map +1 -0
- package/dist/tools/redialog.js +63 -0
- package/dist/tools/redialog.js.map +1 -0
- package/dist/tools/reflect.d.ts +4 -0
- package/dist/tools/reflect.d.ts.map +1 -0
- package/dist/tools/reflect.js +86 -0
- package/dist/tools/reflect.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/tools/validate.d.ts +4 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +86 -0
- package/dist/tools/validate.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-dialog.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 +73 -0
- package/protocol/commands/reflect.md +136 -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/core-advanced.md +188 -0
- package/protocol/core.md +274 -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/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,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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|