@planu/cli 0.62.1 → 0.63.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/config/ecosystem-sources.json +34 -0
- package/dist/config/license-plans.json +5 -2
- package/dist/config/skill-registries.json +26 -0
- package/dist/engine/dynamic-knowledge/context-resolver.d.ts +15 -0
- package/dist/engine/dynamic-knowledge/context-resolver.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/context-resolver.js +80 -0
- package/dist/engine/dynamic-knowledge/context-resolver.js.map +1 -0
- package/dist/engine/dynamic-knowledge/index.d.ts +7 -0
- package/dist/engine/dynamic-knowledge/index.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/index.js +7 -0
- package/dist/engine/dynamic-knowledge/index.js.map +1 -0
- package/dist/engine/dynamic-knowledge/knowledge-cache.d.ts +8 -0
- package/dist/engine/dynamic-knowledge/knowledge-cache.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/knowledge-cache.js +90 -0
- package/dist/engine/dynamic-knowledge/knowledge-cache.js.map +1 -0
- package/dist/engine/dynamic-knowledge/knowledge-merger.d.ts +13 -0
- package/dist/engine/dynamic-knowledge/knowledge-merger.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/knowledge-merger.js +135 -0
- package/dist/engine/dynamic-knowledge/knowledge-merger.js.map +1 -0
- package/dist/engine/dynamic-knowledge/query-knowledge.d.ts +17 -0
- package/dist/engine/dynamic-knowledge/query-knowledge.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/query-knowledge.js +73 -0
- package/dist/engine/dynamic-knowledge/query-knowledge.js.map +1 -0
- package/dist/engine/dynamic-knowledge/stack-filter.d.ts +7 -0
- package/dist/engine/dynamic-knowledge/stack-filter.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/stack-filter.js +45 -0
- package/dist/engine/dynamic-knowledge/stack-filter.js.map +1 -0
- package/dist/engine/dynamic-knowledge/web-researcher.d.ts +12 -0
- package/dist/engine/dynamic-knowledge/web-researcher.d.ts.map +1 -0
- package/dist/engine/dynamic-knowledge/web-researcher.js +189 -0
- package/dist/engine/dynamic-knowledge/web-researcher.js.map +1 -0
- package/dist/engine/ecosystem-absorber/capability-detector.d.ts +11 -0
- package/dist/engine/ecosystem-absorber/capability-detector.d.ts.map +1 -0
- package/dist/engine/ecosystem-absorber/capability-detector.js +65 -0
- package/dist/engine/ecosystem-absorber/capability-detector.js.map +1 -0
- package/dist/engine/ecosystem-absorber/ecosystem-watcher.d.ts +11 -0
- package/dist/engine/ecosystem-absorber/ecosystem-watcher.d.ts.map +1 -0
- package/dist/engine/ecosystem-absorber/ecosystem-watcher.js +57 -0
- package/dist/engine/ecosystem-absorber/ecosystem-watcher.js.map +1 -0
- package/dist/engine/ecosystem-absorber/index.d.ts +5 -0
- package/dist/engine/ecosystem-absorber/index.d.ts.map +1 -0
- package/dist/engine/ecosystem-absorber/index.js +6 -0
- package/dist/engine/ecosystem-absorber/index.js.map +1 -0
- package/dist/engine/ecosystem-absorber/knowledge-cache.d.ts +23 -0
- package/dist/engine/ecosystem-absorber/knowledge-cache.d.ts.map +1 -0
- package/dist/engine/ecosystem-absorber/knowledge-cache.js +83 -0
- package/dist/engine/ecosystem-absorber/knowledge-cache.js.map +1 -0
- package/dist/engine/ecosystem-absorber/platform-crawler.d.ts +12 -0
- package/dist/engine/ecosystem-absorber/platform-crawler.d.ts.map +1 -0
- package/dist/engine/ecosystem-absorber/platform-crawler.js +129 -0
- package/dist/engine/ecosystem-absorber/platform-crawler.js.map +1 -0
- package/dist/engine/resilience-fetcher/index.d.ts +2 -0
- package/dist/engine/resilience-fetcher/index.d.ts.map +1 -0
- package/dist/engine/resilience-fetcher/index.js +2 -0
- package/dist/engine/resilience-fetcher/index.js.map +1 -0
- package/dist/engine/resilience-fetcher/resilience-injector.d.ts +11 -0
- package/dist/engine/resilience-fetcher/resilience-injector.d.ts.map +1 -0
- package/dist/engine/resilience-fetcher/resilience-injector.js +72 -0
- package/dist/engine/resilience-fetcher/resilience-injector.js.map +1 -0
- package/dist/engine/skill-registry/agentskill-adapter.d.ts +9 -0
- package/dist/engine/skill-registry/agentskill-adapter.d.ts.map +1 -0
- package/dist/engine/skill-registry/agentskill-adapter.js +64 -0
- package/dist/engine/skill-registry/agentskill-adapter.js.map +1 -0
- package/dist/engine/skill-registry/anthropic-adapter.d.ts +11 -0
- package/dist/engine/skill-registry/anthropic-adapter.d.ts.map +1 -0
- package/dist/engine/skill-registry/anthropic-adapter.js +133 -0
- package/dist/engine/skill-registry/anthropic-adapter.js.map +1 -0
- package/dist/engine/skill-registry/discovery.d.ts +7 -0
- package/dist/engine/skill-registry/discovery.d.ts.map +1 -0
- package/dist/engine/skill-registry/discovery.js +15 -0
- package/dist/engine/skill-registry/discovery.js.map +1 -0
- package/dist/engine/skill-registry/index.d.ts +7 -0
- package/dist/engine/skill-registry/index.d.ts.map +1 -0
- package/dist/engine/skill-registry/index.js +8 -0
- package/dist/engine/skill-registry/index.js.map +1 -0
- package/dist/engine/skill-registry/installer.d.ts +22 -0
- package/dist/engine/skill-registry/installer.d.ts.map +1 -0
- package/dist/engine/skill-registry/installer.js +122 -0
- package/dist/engine/skill-registry/installer.js.map +1 -0
- package/dist/engine/skill-registry/skillssh-adapter.d.ts +7 -0
- package/dist/engine/skill-registry/skillssh-adapter.d.ts.map +1 -0
- package/dist/engine/skill-registry/skillssh-adapter.js +78 -0
- package/dist/engine/skill-registry/skillssh-adapter.js.map +1 -0
- package/dist/engine/skill-registry/unified-search.d.ts +12 -0
- package/dist/engine/skill-registry/unified-search.d.ts.map +1 -0
- package/dist/engine/skill-registry/unified-search.js +116 -0
- package/dist/engine/skill-registry/unified-search.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/create-spec/constitution-validator.d.ts.map +1 -1
- package/dist/tools/create-spec/constitution-validator.js +7 -13
- package/dist/tools/create-spec/constitution-validator.js.map +1 -1
- package/dist/tools/create-spec/resilience-adapter.d.ts +6 -0
- package/dist/tools/create-spec/resilience-adapter.d.ts.map +1 -0
- package/dist/tools/create-spec/resilience-adapter.js +21 -0
- package/dist/tools/create-spec/resilience-adapter.js.map +1 -0
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +46 -4
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/ecosystem-status.d.ts +7 -0
- package/dist/tools/ecosystem-status.d.ts.map +1 -0
- package/dist/tools/ecosystem-status.js +69 -0
- package/dist/tools/ecosystem-status.js.map +1 -0
- package/dist/tools/register-ecosystem-tools.d.ts +7 -0
- package/dist/tools/register-ecosystem-tools.d.ts.map +1 -0
- package/dist/tools/register-ecosystem-tools.js +20 -0
- package/dist/tools/register-ecosystem-tools.js.map +1 -0
- package/dist/tools/register-skill-registry-tools.d.ts +3 -0
- package/dist/tools/register-skill-registry-tools.d.ts.map +1 -0
- package/dist/tools/register-skill-registry-tools.js +40 -0
- package/dist/tools/register-skill-registry-tools.js.map +1 -0
- package/dist/tools/schemas/ecosystem-schemas.d.ts +6 -0
- package/dist/tools/schemas/ecosystem-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/ecosystem-schemas.js +10 -0
- package/dist/tools/schemas/ecosystem-schemas.js.map +1 -0
- package/dist/tools/schemas/index.d.ts +2 -0
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +2 -0
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/skill-registry-schemas.d.ts +15 -0
- package/dist/tools/schemas/skill-registry-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/skill-registry-schemas.js +45 -0
- package/dist/tools/schemas/skill-registry-schemas.js.map +1 -0
- package/dist/tools/skill-registry/index.d.ts +3 -0
- package/dist/tools/skill-registry/index.d.ts.map +1 -0
- package/dist/tools/skill-registry/index.js +4 -0
- package/dist/tools/skill-registry/index.js.map +1 -0
- package/dist/tools/skill-registry/install.d.ts +7 -0
- package/dist/tools/skill-registry/install.d.ts.map +1 -0
- package/dist/tools/skill-registry/install.js +42 -0
- package/dist/tools/skill-registry/install.js.map +1 -0
- package/dist/tools/skill-registry/search.d.ts +8 -0
- package/dist/tools/skill-registry/search.d.ts.map +1 -0
- package/dist/tools/skill-registry/search.js +45 -0
- package/dist/tools/skill-registry/search.js.map +1 -0
- package/dist/types/dynamic-knowledge.d.ts +47 -0
- package/dist/types/dynamic-knowledge.d.ts.map +1 -0
- package/dist/types/dynamic-knowledge.js +11 -0
- package/dist/types/dynamic-knowledge.js.map +1 -0
- package/dist/types/ecosystem.d.ts +45 -0
- package/dist/types/ecosystem.d.ts.map +1 -0
- package/dist/types/ecosystem.js +3 -0
- package/dist/types/ecosystem.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/skill-registry.d.ts +162 -0
- package/dist/types/skill-registry.d.ts.map +1 -0
- package/dist/types/skill-registry.js +3 -0
- package/dist/types/skill-registry.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ecosystem-sources.json +34 -0
- package/src/config/license-plans.json +5 -2
- package/src/config/skill-registries.json +26 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// engine/skill-registry/installer.ts — SPEC-150: Skill installer
|
|
2
|
+
// Installs skills from a registry into a project's .claude/skills/ directory.
|
|
3
|
+
// Manages the local manifest (manifest.json) tracking all installed skills.
|
|
4
|
+
import * as fs from 'node:fs/promises';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import { fetchAnthropicSkillContent } from './anthropic-adapter.js';
|
|
7
|
+
const SKILLS_DIR = '.claude/skills';
|
|
8
|
+
const MANIFEST_FILE = 'manifest.json';
|
|
9
|
+
/** Return the absolute path to the project's skills directory. */
|
|
10
|
+
function skillsRoot(projectPath) {
|
|
11
|
+
return path.join(projectPath, SKILLS_DIR);
|
|
12
|
+
}
|
|
13
|
+
/** Return the absolute path to the manifest file. */
|
|
14
|
+
function manifestPath(projectPath) {
|
|
15
|
+
return path.join(skillsRoot(projectPath), MANIFEST_FILE);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read the skill manifest from disk.
|
|
19
|
+
* Returns an empty manifest if the file does not exist or cannot be parsed.
|
|
20
|
+
*/
|
|
21
|
+
export async function readSkillManifest(projectPath) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = await fs.readFile(manifestPath(projectPath), 'utf-8');
|
|
24
|
+
return JSON.parse(raw);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return { installedAt: new Date().toISOString(), skills: [] };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Write the manifest to disk (creates the directory if needed). */
|
|
31
|
+
async function writeSkillManifest(projectPath, manifest) {
|
|
32
|
+
await fs.mkdir(skillsRoot(projectPath), { recursive: true });
|
|
33
|
+
await fs.writeFile(manifestPath(projectPath), JSON.stringify(manifest, null, 2), 'utf-8');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check whether a skill is already installed in the project.
|
|
37
|
+
*/
|
|
38
|
+
export async function isSkillInstalled(projectPath, skillName) {
|
|
39
|
+
const manifest = await readSkillManifest(projectPath);
|
|
40
|
+
return manifest.skills.some((s) => s.name === skillName);
|
|
41
|
+
}
|
|
42
|
+
/** Update or add a skill entry in the manifest. */
|
|
43
|
+
function upsertManifestEntry(manifest, entry) {
|
|
44
|
+
const existing = manifest.skills.findIndex((s) => s.name === entry.name);
|
|
45
|
+
const skills = existing >= 0
|
|
46
|
+
? manifest.skills.map((s, i) => i === existing ? { ...s, ...entry, updatedAt: new Date().toISOString() } : s)
|
|
47
|
+
: [...manifest.skills, entry];
|
|
48
|
+
return { ...manifest, skills };
|
|
49
|
+
}
|
|
50
|
+
/** Install a skill from the Anthropic (GitHub) source. */
|
|
51
|
+
async function installFromAnthropic(skillName, installDir) {
|
|
52
|
+
const content = await fetchAnthropicSkillContent(skillName);
|
|
53
|
+
if (!content) {
|
|
54
|
+
throw new Error(`Skill "${skillName}" not found in the Anthropic skills repository. ` +
|
|
55
|
+
'Check the skill name and try again.');
|
|
56
|
+
}
|
|
57
|
+
await fs.mkdir(installDir, { recursive: true });
|
|
58
|
+
const skillMdPath = path.join(installDir, 'SKILL.md');
|
|
59
|
+
await fs.writeFile(skillMdPath, content.skillMd, 'utf-8');
|
|
60
|
+
const hasScripts = content.files.some((f) => f.startsWith('scripts/') || f === 'scripts');
|
|
61
|
+
return { filesWritten: [skillMdPath], hasScripts };
|
|
62
|
+
}
|
|
63
|
+
/** Install a skill placeholder for skillssh/agentskill sources (no direct file API yet). */
|
|
64
|
+
async function installFromExternal(skillName, source, installDir) {
|
|
65
|
+
await fs.mkdir(installDir, { recursive: true });
|
|
66
|
+
const placeholder = [
|
|
67
|
+
`# ${skillName}`,
|
|
68
|
+
'',
|
|
69
|
+
`> Installed from: ${source}`,
|
|
70
|
+
`> Installation date: ${new Date().toISOString()}`,
|
|
71
|
+
'',
|
|
72
|
+
'Run `planu registry install` again to refresh this skill.',
|
|
73
|
+
].join('\n');
|
|
74
|
+
const skillMdPath = path.join(installDir, 'SKILL.md');
|
|
75
|
+
await fs.writeFile(skillMdPath, placeholder, 'utf-8');
|
|
76
|
+
return { filesWritten: [skillMdPath], hasScripts: false };
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Install a skill from the specified source into the project's .claude/skills/ directory.
|
|
80
|
+
*
|
|
81
|
+
* Steps:
|
|
82
|
+
* 1. Resolve the target installation directory.
|
|
83
|
+
* 2. Fetch skill content from the appropriate adapter.
|
|
84
|
+
* 3. Write files to disk.
|
|
85
|
+
* 4. Update the local manifest.
|
|
86
|
+
* 5. Return the install result with security flags.
|
|
87
|
+
*/
|
|
88
|
+
export async function installSkill(skillName, source, projectPath) {
|
|
89
|
+
const installDir = path.join(skillsRoot(projectPath), skillName);
|
|
90
|
+
let filesWritten;
|
|
91
|
+
let hasScripts;
|
|
92
|
+
let version;
|
|
93
|
+
if (source === 'anthropic') {
|
|
94
|
+
const result = await installFromAnthropic(skillName, installDir);
|
|
95
|
+
filesWritten = result.filesWritten;
|
|
96
|
+
hasScripts = result.hasScripts;
|
|
97
|
+
version = result.version;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const result = await installFromExternal(skillName, source, installDir);
|
|
101
|
+
filesWritten = result.filesWritten;
|
|
102
|
+
hasScripts = result.hasScripts;
|
|
103
|
+
}
|
|
104
|
+
const manifest = await readSkillManifest(projectPath);
|
|
105
|
+
const entry = {
|
|
106
|
+
name: skillName,
|
|
107
|
+
source,
|
|
108
|
+
version,
|
|
109
|
+
installedAt: new Date().toISOString(),
|
|
110
|
+
path: installDir,
|
|
111
|
+
};
|
|
112
|
+
await writeSkillManifest(projectPath, upsertManifestEntry(manifest, entry));
|
|
113
|
+
return {
|
|
114
|
+
name: skillName,
|
|
115
|
+
source,
|
|
116
|
+
installedPath: installDir,
|
|
117
|
+
filesWritten,
|
|
118
|
+
hasScripts,
|
|
119
|
+
version,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/engine/skill-registry/installer.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,8EAA8E;AAC9E,4EAA4E;AAE5E,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC,kEAAkE;AAClE,SAAS,UAAU,CAAC,WAAmB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,qDAAqD;AACrD,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,QAAuB;IAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAC3E,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AAC3D,CAAC;AAED,mDAAmD;AACnD,SAAS,mBAAmB,CAAC,QAAuB,EAAE,KAA0B;IAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,MAAM,GACV,QAAQ,IAAI,CAAC;QACX,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7E;QACH,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,0DAA0D;AAC1D,KAAK,UAAU,oBAAoB,CACjC,SAAiB,EACjB,UAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,UAAU,SAAS,kDAAkD;YACnE,qCAAqC,CACxC,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;IAE1F,OAAO,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;AACrD,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,mBAAmB,CAChC,SAAiB,EACjB,MAAc,EACd,UAAkB;IAElB,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG;QAClB,KAAK,SAAS,EAAE;QAChB,EAAE;QACF,qBAAqB,MAAM,EAAE;QAC7B,wBAAwB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAClD,EAAE;QACF,2DAA2D;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,MAAc,EACd,WAAmB;IAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;IAEjE,IAAI,YAAsB,CAAC;IAC3B,IAAI,UAAmB,CAAC;IACxB,IAAI,OAA2B,CAAC;IAEhC,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACjE,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACxE,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,KAAK,GAAwB;QACjC,IAAI,EAAE,SAAS;QACf,MAAM;QACN,OAAO;QACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,IAAI,EAAE,UAAU;KACjB,CAAC;IACF,MAAM,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM;QACN,aAAa,EAAE,UAAU;QACzB,YAAY;QACZ,UAAU;QACV,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SkillSearchResult } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Search skills.sh catalog for skills matching the given query and optional stack.
|
|
4
|
+
* Returns an empty array on network errors or unexpected response shapes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function searchSkillsSh(query: string, stack?: string, limit?: number): Promise<SkillSearchResult[]>;
|
|
7
|
+
//# sourceMappingURL=skillssh-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillssh-adapter.d.ts","sourceRoot":"","sources":["../../../src/engine/skill-registry/skillssh-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAmC,MAAM,sBAAsB,CAAC;AA8D/F;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwB9B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// engine/skill-registry/skillssh-adapter.ts — SPEC-150: skills.sh registry adapter
|
|
2
|
+
// Searches the skills.sh catalog API for installable agent skills.
|
|
3
|
+
// Uses native fetch() (Node 18+). No external dependencies.
|
|
4
|
+
const SKILLS_SH_BASE = 'https://skills.sh';
|
|
5
|
+
const CATALOG_PATH = '/api/catalog';
|
|
6
|
+
const SEARCH_PATH = '/api/search';
|
|
7
|
+
const USER_AGENT = 'Planu/1.0';
|
|
8
|
+
const DEFAULT_LIMIT = 10;
|
|
9
|
+
/** Build the search URL with query and stack params. */
|
|
10
|
+
function buildUrl(query, stack) {
|
|
11
|
+
const hasQuery = query.trim().length > 0;
|
|
12
|
+
const endpoint = hasQuery ? SEARCH_PATH : CATALOG_PATH;
|
|
13
|
+
const url = new URL(`${SKILLS_SH_BASE}${endpoint}`);
|
|
14
|
+
if (hasQuery) {
|
|
15
|
+
url.searchParams.set('q', query);
|
|
16
|
+
}
|
|
17
|
+
if (stack) {
|
|
18
|
+
url.searchParams.set('stack', stack);
|
|
19
|
+
}
|
|
20
|
+
return url.toString();
|
|
21
|
+
}
|
|
22
|
+
/** Perform a single fetch against skills.sh, returning parsed JSON or null. */
|
|
23
|
+
async function fetchSkillsSh(url) {
|
|
24
|
+
try {
|
|
25
|
+
const response = await globalThis.fetch(url, {
|
|
26
|
+
headers: {
|
|
27
|
+
'User-Agent': USER_AGENT,
|
|
28
|
+
Accept: 'application/json',
|
|
29
|
+
},
|
|
30
|
+
signal: AbortSignal.timeout(10_000),
|
|
31
|
+
});
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return (await response.json());
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Map a raw skills.sh entry to a unified SkillSearchResult. */
|
|
42
|
+
function mapEntry(entry) {
|
|
43
|
+
const slug = entry.owner ? `${entry.owner}/${entry.name ?? ''}` : (entry.name ?? '');
|
|
44
|
+
return {
|
|
45
|
+
name: entry.name ?? slug,
|
|
46
|
+
description: entry.description ?? `Skill: ${entry.name ?? slug}`,
|
|
47
|
+
source: 'skillssh',
|
|
48
|
+
installCommand: entry.installCommand ?? `planu registry install ${slug}`,
|
|
49
|
+
url: entry.url ?? `${SKILLS_SH_BASE}/skills/${slug}`,
|
|
50
|
+
author: entry.author ?? entry.owner,
|
|
51
|
+
installs: entry.installs,
|
|
52
|
+
license: entry.license,
|
|
53
|
+
tags: entry.tags,
|
|
54
|
+
relevanceScore: 0,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Search skills.sh catalog for skills matching the given query and optional stack.
|
|
59
|
+
* Returns an empty array on network errors or unexpected response shapes.
|
|
60
|
+
*/
|
|
61
|
+
export async function searchSkillsSh(query, stack, limit) {
|
|
62
|
+
const url = buildUrl(query, stack);
|
|
63
|
+
const data = await fetchSkillsSh(url);
|
|
64
|
+
if (!data) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const raw = data.skills ?? data.results ?? [];
|
|
68
|
+
const q = query.toLowerCase();
|
|
69
|
+
// Client-side filter when using catalog endpoint (no query param)
|
|
70
|
+
const filtered = query.trim().length > 0
|
|
71
|
+
? raw
|
|
72
|
+
: raw.filter((entry) => (entry.name ?? '').toLowerCase().includes(q) ||
|
|
73
|
+
(entry.description ?? '').toLowerCase().includes(q) ||
|
|
74
|
+
entry.tags?.some((t) => t.toLowerCase().includes(q)));
|
|
75
|
+
const cap = limit ?? DEFAULT_LIMIT;
|
|
76
|
+
return filtered.slice(0, cap).map(mapEntry);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=skillssh-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillssh-adapter.js","sourceRoot":"","sources":["../../../src/engine/skill-registry/skillssh-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SkillSearchResult, SkillSearchParams, SkillRegistrySource } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Search across all enabled registries in parallel.
|
|
4
|
+
*
|
|
5
|
+
* Steps:
|
|
6
|
+
* 1. Filter enabled registries (and by params.registry if specified).
|
|
7
|
+
* 2. Query each adapter in parallel with Promise.allSettled (failures silenced).
|
|
8
|
+
* 3. Assign relevance scores, merge, deduplicate by name.
|
|
9
|
+
* 4. Sort by relevance desc, cap at params.limit.
|
|
10
|
+
*/
|
|
11
|
+
export declare function searchAllRegistries(params: SkillSearchParams, registries: SkillRegistrySource[]): Promise<SkillSearchResult[]>;
|
|
12
|
+
//# sourceMappingURL=unified-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-search.d.ts","sourceRoot":"","sources":["../../../src/engine/skill-registry/unified-search.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AA0F9B;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,mBAAmB,EAAE,GAChC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwC9B"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// engine/skill-registry/unified-search.ts — SPEC-150: Unified skill search across registries
|
|
2
|
+
// Queries all enabled registries in parallel, merges and ranks results by relevance.
|
|
3
|
+
import { searchAnthropicSkills } from './anthropic-adapter.js';
|
|
4
|
+
import { searchSkillsSh } from './skillssh-adapter.js';
|
|
5
|
+
import { searchAgentSkills } from './agentskill-adapter.js';
|
|
6
|
+
const DEFAULT_LIMIT = 10;
|
|
7
|
+
/** Dispatch a search to the correct adapter based on registry ID. */
|
|
8
|
+
async function queryRegistry(registry, query, stack) {
|
|
9
|
+
try {
|
|
10
|
+
switch (registry.id) {
|
|
11
|
+
case 'anthropic':
|
|
12
|
+
return await searchAnthropicSkills(query);
|
|
13
|
+
case 'skillssh':
|
|
14
|
+
return await searchSkillsSh(query, stack);
|
|
15
|
+
case 'agentskill':
|
|
16
|
+
return await searchAgentSkills(query, stack);
|
|
17
|
+
default:
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Compute a relevance score 0-1 for a skill result.
|
|
27
|
+
*
|
|
28
|
+
* Factors (weighted):
|
|
29
|
+
* - Exact name match: +0.40
|
|
30
|
+
* - Name contains query: +0.25
|
|
31
|
+
* - Description contains query: +0.15
|
|
32
|
+
* - Tag match: +0.10
|
|
33
|
+
* - Registry priority (inverted, capped at 10 registries): up to 0.05
|
|
34
|
+
* - Install popularity (log scale): up to 0.05
|
|
35
|
+
*/
|
|
36
|
+
function computeRelevanceScore(result, query, registryPriority) {
|
|
37
|
+
const q = query.toLowerCase();
|
|
38
|
+
const nameLower = result.name.toLowerCase();
|
|
39
|
+
const descLower = result.description.toLowerCase();
|
|
40
|
+
let score = 0;
|
|
41
|
+
if (nameLower === q) {
|
|
42
|
+
score += 0.4;
|
|
43
|
+
}
|
|
44
|
+
else if (nameLower.includes(q)) {
|
|
45
|
+
score += 0.25;
|
|
46
|
+
}
|
|
47
|
+
if (descLower.includes(q)) {
|
|
48
|
+
score += 0.15;
|
|
49
|
+
}
|
|
50
|
+
if (result.tags?.some((t) => t.toLowerCase().includes(q))) {
|
|
51
|
+
score += 0.1;
|
|
52
|
+
}
|
|
53
|
+
// Priority: priority=1 (highest) yields 0.05, priority=10+ yields 0
|
|
54
|
+
const priorityBonus = Math.max(0, (11 - registryPriority) / 10) * 0.05;
|
|
55
|
+
score += priorityBonus;
|
|
56
|
+
// Popularity: log10(installs+1) capped at 6 (1M installs) → 0-0.05
|
|
57
|
+
if (result.installs && result.installs > 0) {
|
|
58
|
+
const popularityBonus = Math.min(Math.log10(result.installs + 1) / 6, 1) * 0.05;
|
|
59
|
+
score += popularityBonus;
|
|
60
|
+
}
|
|
61
|
+
return Math.min(score, 1);
|
|
62
|
+
}
|
|
63
|
+
/** Deduplicate results by name, keeping the one with the highest relevance score. */
|
|
64
|
+
function deduplicate(results) {
|
|
65
|
+
const best = new Map();
|
|
66
|
+
for (const r of results) {
|
|
67
|
+
const existing = best.get(r.name);
|
|
68
|
+
if (!existing || r.relevanceScore > existing.relevanceScore) {
|
|
69
|
+
best.set(r.name, r);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Array.from(best.values());
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Search across all enabled registries in parallel.
|
|
76
|
+
*
|
|
77
|
+
* Steps:
|
|
78
|
+
* 1. Filter enabled registries (and by params.registry if specified).
|
|
79
|
+
* 2. Query each adapter in parallel with Promise.allSettled (failures silenced).
|
|
80
|
+
* 3. Assign relevance scores, merge, deduplicate by name.
|
|
81
|
+
* 4. Sort by relevance desc, cap at params.limit.
|
|
82
|
+
*/
|
|
83
|
+
export async function searchAllRegistries(params, registries) {
|
|
84
|
+
const enabled = registries.filter((r) => {
|
|
85
|
+
if (!r.enabled) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (params.registry && params.registry !== 'all' && r.id !== params.registry) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
});
|
|
93
|
+
if (enabled.length === 0) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
const settled = await Promise.allSettled(enabled.map((reg) => queryRegistry(reg, params.query, params.stack)));
|
|
97
|
+
const priorityMap = new Map(enabled.map((r) => [r.id, r.priority]));
|
|
98
|
+
const allResults = [];
|
|
99
|
+
for (const outcome of settled) {
|
|
100
|
+
if (outcome.status !== 'fulfilled') {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const result of outcome.value) {
|
|
104
|
+
const priority = priorityMap.get(result.source) ?? 99;
|
|
105
|
+
allResults.push({
|
|
106
|
+
...result,
|
|
107
|
+
relevanceScore: computeRelevanceScore(result, params.query, priority),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const deduped = deduplicate(allResults);
|
|
112
|
+
deduped.sort((a, b) => b.relevanceScore - a.relevanceScore);
|
|
113
|
+
const cap = params.limit ?? DEFAULT_LIMIT;
|
|
114
|
+
return deduped.slice(0, cap);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=unified-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-search.js","sourceRoot":"","sources":["../../../src/engine/skill-registry/unified-search.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -76,10 +76,12 @@ import { registerExportTools } from './tools/register-export-tools.js';
|
|
|
76
76
|
import { registerLivingSpecTools } from './tools/register-living-spec-tools.js';
|
|
77
77
|
import { registerLivingSpecAdvancedTools } from './tools/register-living-spec-advanced-tools.js';
|
|
78
78
|
import { registerSpecRegistryTools } from './tools/register-spec-registry-tools.js';
|
|
79
|
+
import { registerSkillRegistryTools } from './tools/register-skill-registry-tools.js';
|
|
79
80
|
import { registerScanTools } from './tools/register-scan-tools.js';
|
|
80
81
|
import { registerGenerateDashboardTools } from './tools/generate-dashboard.js';
|
|
81
82
|
import { registerGenerateProposalTool } from './tools/generate-proposal.js';
|
|
82
83
|
import { registerExportPdfTool } from './tools/export-pdf.js';
|
|
84
|
+
import { registerEcosystemTools } from './tools/register-ecosystem-tools.js';
|
|
83
85
|
import { PLANU_VERSION } from './config/version.js';
|
|
84
86
|
import { handleActivateLicense } from './tools/activate-license.js';
|
|
85
87
|
import { GroupManager } from './engine/tool-groups/group-manager.js';
|
|
@@ -212,10 +214,12 @@ function createMcpServer() {
|
|
|
212
214
|
registerLivingSpecTools(s);
|
|
213
215
|
registerLivingSpecAdvancedTools(s);
|
|
214
216
|
registerSpecRegistryTools(s);
|
|
217
|
+
registerSkillRegistryTools(s);
|
|
215
218
|
registerScanTools(s);
|
|
216
219
|
registerGenerateDashboardTools(s);
|
|
217
220
|
registerGenerateProposalTool(s);
|
|
218
221
|
registerExportPdfTool(s);
|
|
222
|
+
registerEcosystemTools(s);
|
|
219
223
|
registerPrompts(s);
|
|
220
224
|
return s;
|
|
221
225
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constitution-validator.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec/constitution-validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"constitution-validator.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec/constitution-validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAKpE,wFAAwF;AACxF,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,uBAAuB,CAAC,CA0BlC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Extracted from create-spec.ts to keep file sizes within limits.
|
|
3
3
|
import { knowledgeStore } from '../../storage/index.js';
|
|
4
4
|
import { checkConstitutionCompliance } from '../create-spec-tech.js';
|
|
5
|
+
import { toolResult } from '../response-helpers.js';
|
|
5
6
|
/** Validates spec against Constitution principles. Returns block result or warnings. */
|
|
6
7
|
export async function validateConstitution(projectId, title, tags) {
|
|
7
8
|
const constitution = await knowledgeStore.getConstitution(projectId);
|
|
@@ -11,21 +12,14 @@ export async function validateConstitution(projectId, title, tags) {
|
|
|
11
12
|
const violations = checkConstitutionCompliance(title, tags, constitution.principles);
|
|
12
13
|
const strictViolations = violations.filter((v) => v.severity === 'error');
|
|
13
14
|
if (strictViolations.length > 0) {
|
|
15
|
+
const structured = {
|
|
16
|
+
error: 'Constitution violation',
|
|
17
|
+
strictViolations,
|
|
18
|
+
message: `Spec violates ${strictViolations.length} strict Constitution principle(s). Revise the spec or update the Constitution.`,
|
|
19
|
+
};
|
|
14
20
|
return {
|
|
15
21
|
blocked: true,
|
|
16
|
-
errorResult: {
|
|
17
|
-
content: [
|
|
18
|
-
{
|
|
19
|
-
type: 'text',
|
|
20
|
-
text: JSON.stringify({
|
|
21
|
-
error: 'Constitution violation',
|
|
22
|
-
strictViolations,
|
|
23
|
-
message: `Spec violates ${strictViolations.length} strict Constitution principle(s). Revise the spec or update the Constitution.`,
|
|
24
|
-
}, null, 2),
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
isError: true,
|
|
28
|
-
},
|
|
22
|
+
errorResult: toolResult(`Constitution violation: ${structured.message}`, structured, true),
|
|
29
23
|
warnings: [],
|
|
30
24
|
};
|
|
31
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constitution-validator.js","sourceRoot":"","sources":["../../../src/tools/create-spec/constitution-validator.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kEAAkE;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"constitution-validator.js","sourceRoot":"","sources":["../../../src/tools/create-spec/constitution-validator.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kEAAkE;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,KAAa,EACb,IAAc;IAEd,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAE1E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,wBAAwB;YAC/B,gBAAgB;YAChB,OAAO,EAAE,iBAAiB,gBAAgB,CAAC,MAAM,gFAAgF;SAClI,CAAC;QACF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,UAAU,CAAC,2BAA2B,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC;YAC1F,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build resilience section for a spec.
|
|
3
|
+
* Non-blocking: returns empty string on any failure.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildResilienceSection(specTarget: string, specScope: string, stack: string[], appType?: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=resilience-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience-adapter.d.ts","sourceRoot":"","sources":["../../../src/tools/create-spec/resilience-adapter.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { fetchResilienceCriteria, formatResilienceSection, } from '../../engine/resilience-fetcher/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build resilience section for a spec.
|
|
4
|
+
* Non-blocking: returns empty string on any failure.
|
|
5
|
+
*/
|
|
6
|
+
export async function buildResilienceSection(specTarget, specScope, stack, appType) {
|
|
7
|
+
try {
|
|
8
|
+
const context = {
|
|
9
|
+
stack,
|
|
10
|
+
target: specTarget,
|
|
11
|
+
scope: specScope,
|
|
12
|
+
appType,
|
|
13
|
+
};
|
|
14
|
+
const criteria = await fetchResilienceCriteria(context);
|
|
15
|
+
return formatResilienceSection(criteria);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return ''; // never block spec creation
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=resilience-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience-adapter.js","sourceRoot":"","sources":["../../../src/tools/create-spec/resilience-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0CAA0C,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,EAClB,SAAiB,EACjB,KAAe,EACf,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAmB;YAC9B,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,SAAS;YAChB,OAAO;SACR,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,4BAA4B;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-spec.d.ts","sourceRoot":"","sources":["../../src/tools/create-spec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgCrE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAsRnF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ti } from '../i18n/index.js';
|
|
2
2
|
import { knowledgeStore, specStore } from '../storage/index.js';
|
|
3
3
|
import { describeFilters, isExtendedChallenge } from '../engine/scope-filter.js';
|
|
4
|
+
import { formatSuccess, addNextSteps, toolResult } from './response-helpers.js';
|
|
4
5
|
import { generateHUContent } from './create-spec-hu.js';
|
|
5
6
|
import { buildAgentHuSection } from './create-spec/agent-spec-adapter.js';
|
|
6
7
|
import { isMcpSpec, buildMcpHuSection } from './create-spec/mcp-spec-adapter.js';
|
|
@@ -15,6 +16,7 @@ import { generateProgressContent } from '../engine/progress-writer.js';
|
|
|
15
16
|
import { generatePerSpecExecutiveReport, generatePerSpecTechnicalReport, } from '../engine/doc-generator/per-spec-report/index.js';
|
|
16
17
|
import { buildSpecContext, buildSplitResult } from './create-spec/spec-builder.js';
|
|
17
18
|
import { validateConstitution } from './create-spec/constitution-validator.js';
|
|
19
|
+
import { buildResilienceSection } from './create-spec/resilience-adapter.js';
|
|
18
20
|
import { setupGitBranch, checkContradictions, fireSpecCreatedHook, generatePostCreationSuggestions, } from './create-spec/post-creation.js';
|
|
19
21
|
import { regenerateSpecSummaryHtml } from '../engine/spec-summary-html.js';
|
|
20
22
|
import { notifyStoreChange } from '../engine/doc-generator/portal/regen-hook.js';
|
|
@@ -51,9 +53,11 @@ export async function handleCreateSpec(params) {
|
|
|
51
53
|
const depWarnings = knowledge?.projectPath && knowledge.projectPath.length > 0
|
|
52
54
|
? await runPreSpecDepCheck(knowledge.projectPath, knowledge)
|
|
53
55
|
: undefined;
|
|
56
|
+
const resilienceSection = await buildResilienceSection(spec.target, spec.scope, knowledge?.stack ?? []);
|
|
54
57
|
const huContent = generateHUContent(spec, description, knowledge, undefined, teamScale, depWarnings) +
|
|
55
58
|
agentSection +
|
|
56
|
-
mcpSection
|
|
59
|
+
mcpSection +
|
|
60
|
+
resilienceSection;
|
|
57
61
|
const fichaTecnicaContent = generateFichaTecnicaContent(spec, description, estimation, knowledge, diagrams, teamScale);
|
|
58
62
|
await writeFile(specPath, huContent, 'utf-8');
|
|
59
63
|
await writeFile(technicalPath, fichaTecnicaContent, 'utf-8');
|
|
@@ -175,9 +179,47 @@ export async function handleCreateSpec(params) {
|
|
|
175
179
|
void regenerateSpecSummaryHtml(params.projectPath, allSpecs, [String(result.specId)]);
|
|
176
180
|
notifyStoreChange(params.projectPath, 'specs');
|
|
177
181
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
182
|
+
// Build markdown response
|
|
183
|
+
const lines = [
|
|
184
|
+
`**SPEC-${spec.id}** — ${spec.title}`,
|
|
185
|
+
'',
|
|
186
|
+
`| Field | Value |`,
|
|
187
|
+
`|-------|-------|`,
|
|
188
|
+
`| Type | ${spec.type} |`,
|
|
189
|
+
`| Scope | ${spec.scope} |`,
|
|
190
|
+
`| Difficulty | ${String(spec.difficulty)}/5 |`,
|
|
191
|
+
`| Risk | ${spec.risk} |`,
|
|
192
|
+
`| Target | ${spec.target} |`,
|
|
193
|
+
`| Status | ${spec.status} |`,
|
|
194
|
+
`| Tags | ${spec.tags.join(', ')} |`,
|
|
195
|
+
`| Dev hours | ${String(estimation.devHours)}h |`,
|
|
196
|
+
`| Review hours | ${String(estimation.reviewHours)}h |`,
|
|
197
|
+
`| Cost | $${String(estimation.totalCostUsd)} |`,
|
|
198
|
+
];
|
|
199
|
+
if (spec.gitBranch) {
|
|
200
|
+
lines.push(`| Branch | \`${spec.gitBranch}\` |`);
|
|
201
|
+
}
|
|
202
|
+
if (duplicate) {
|
|
203
|
+
lines.push('', `⚠️ ${ti('spec.duplicateTitle', { title: spec.title, slug: spec.slug })}`);
|
|
204
|
+
}
|
|
205
|
+
if (constitutionCheck.warnings.length > 0) {
|
|
206
|
+
lines.push('', '⚠️ **Constitution Warnings**');
|
|
207
|
+
constitutionCheck.warnings.forEach((w) => lines.push(`- ${w.description}`));
|
|
208
|
+
}
|
|
209
|
+
if (contradictionHint) {
|
|
210
|
+
lines.push('', `⚠️ ${contradictionHint}`);
|
|
211
|
+
}
|
|
212
|
+
if (result.riskWarning) {
|
|
213
|
+
lines.push('', `⚠️ ${result.riskWarning}`);
|
|
214
|
+
}
|
|
215
|
+
if (splitResult) {
|
|
216
|
+
lines.push('', `💡 ${splitResult.formatted ?? 'Consider splitting this spec.'}`);
|
|
217
|
+
}
|
|
218
|
+
const allNextSteps = result.nextSteps ?? [];
|
|
219
|
+
const markdownText = allNextSteps.length > 0
|
|
220
|
+
? addNextSteps(formatSuccess(ti('tools.create_spec.success', { id: spec.id, title: spec.title }), lines.join('\n')), allNextSteps)
|
|
221
|
+
: formatSuccess(ti('tools.create_spec.success', { id: spec.id, title: spec.title }), lines.join('\n'));
|
|
222
|
+
return toolResult(markdownText, result);
|
|
181
223
|
}
|
|
182
224
|
catch (error) {
|
|
183
225
|
const message = error instanceof Error ? error.message : String(error);
|