javi-forge 1.5.0 → 1.6.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.
Files changed (65) hide show
  1. package/README.md +191 -3
  2. package/ci-local/hooks/pre-push +17 -13
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +56 -2
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/plugin.d.ts +16 -0
  7. package/dist/commands/plugin.d.ts.map +1 -1
  8. package/dist/commands/plugin.js +70 -1
  9. package/dist/commands/plugin.js.map +1 -1
  10. package/dist/commands/security.d.ts +25 -0
  11. package/dist/commands/security.d.ts.map +1 -0
  12. package/dist/commands/security.js +305 -0
  13. package/dist/commands/security.js.map +1 -0
  14. package/dist/commands/skills.d.ts +82 -0
  15. package/dist/commands/skills.d.ts.map +1 -0
  16. package/dist/commands/skills.js +510 -0
  17. package/dist/commands/skills.js.map +1 -0
  18. package/dist/commands/tdd.d.ts +21 -0
  19. package/dist/commands/tdd.d.ts.map +1 -0
  20. package/dist/commands/tdd.js +117 -0
  21. package/dist/commands/tdd.js.map +1 -0
  22. package/dist/constants.d.ts +7 -0
  23. package/dist/constants.d.ts.map +1 -1
  24. package/dist/constants.js +132 -0
  25. package/dist/constants.js.map +1 -1
  26. package/dist/index.js +137 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/agent-skills.d.ts +38 -0
  29. package/dist/lib/agent-skills.d.ts.map +1 -0
  30. package/dist/lib/agent-skills.js +111 -0
  31. package/dist/lib/agent-skills.js.map +1 -0
  32. package/dist/lib/claudemd.d.ts +8 -0
  33. package/dist/lib/claudemd.d.ts.map +1 -0
  34. package/dist/lib/claudemd.js +72 -0
  35. package/dist/lib/claudemd.js.map +1 -0
  36. package/dist/lib/codex-export.d.ts +16 -0
  37. package/dist/lib/codex-export.d.ts.map +1 -0
  38. package/dist/lib/codex-export.js +111 -0
  39. package/dist/lib/codex-export.js.map +1 -0
  40. package/dist/lib/context.d.ts +12 -0
  41. package/dist/lib/context.d.ts.map +1 -0
  42. package/dist/lib/context.js +75 -0
  43. package/dist/lib/context.js.map +1 -0
  44. package/dist/lib/plugin.d.ts +13 -1
  45. package/dist/lib/plugin.d.ts.map +1 -1
  46. package/dist/lib/plugin.js +68 -0
  47. package/dist/lib/plugin.js.map +1 -1
  48. package/dist/types/index.d.ts +119 -0
  49. package/dist/types/index.d.ts.map +1 -1
  50. package/dist/ui/App.d.ts.map +1 -1
  51. package/dist/ui/App.js +6 -0
  52. package/dist/ui/App.js.map +1 -1
  53. package/dist/ui/OptionSelector.d.ts +2 -0
  54. package/dist/ui/OptionSelector.d.ts.map +1 -1
  55. package/dist/ui/OptionSelector.js +6 -0
  56. package/dist/ui/OptionSelector.js.map +1 -1
  57. package/dist/ui/Plugin.d.ts +1 -1
  58. package/dist/ui/Plugin.d.ts.map +1 -1
  59. package/dist/ui/Plugin.js +18 -1
  60. package/dist/ui/Plugin.js.map +1 -1
  61. package/dist/ui/Skills.d.ts +11 -0
  62. package/dist/ui/Skills.d.ts.map +1 -0
  63. package/dist/ui/Skills.js +119 -0
  64. package/dist/ui/Skills.js.map +1 -0
  65. package/package.json +1 -1
@@ -0,0 +1,111 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { AGENT_SKILLS_MANIFEST_FILE, PLUGIN_MANIFEST_FILE, PLUGINS_DIR } from '../constants.js';
4
+ // ── Conversion ─────────────────────────────────────────────────────────────
5
+ /**
6
+ * Convert a javi-forge PluginManifest to an Agent Skills spec manifest.
7
+ */
8
+ export function pluginToAgentSkills(manifest, source) {
9
+ const skills = (manifest.skills ?? []).map(s => ({
10
+ name: s,
11
+ description: `${s} skill from ${manifest.name}`,
12
+ path: `skills/${s}`,
13
+ }));
14
+ return {
15
+ name: manifest.name,
16
+ version: manifest.version,
17
+ description: manifest.description,
18
+ skills,
19
+ ...(source ? { metadata: { forge_source: source } } : {}),
20
+ };
21
+ }
22
+ /**
23
+ * Convert an Agent Skills spec manifest to a javi-forge PluginManifest.
24
+ */
25
+ export function agentSkillsToPlugin(agentManifest) {
26
+ return {
27
+ name: agentManifest.name,
28
+ version: agentManifest.version,
29
+ description: agentManifest.description,
30
+ skills: agentManifest.skills.map(s => s.name),
31
+ tags: ['agent-skills-import'],
32
+ };
33
+ }
34
+ // ── File I/O ───────────────────────────────────────────────────────────────
35
+ /**
36
+ * Generate a skills.json file in the given plugin directory from its plugin.json.
37
+ */
38
+ export async function generateAgentSkillsManifest(pluginDir, source) {
39
+ const manifestPath = path.join(pluginDir, PLUGIN_MANIFEST_FILE);
40
+ if (!await fs.pathExists(manifestPath)) {
41
+ return { success: false, error: 'plugin.json not found' };
42
+ }
43
+ let manifest;
44
+ try {
45
+ manifest = await fs.readJson(manifestPath);
46
+ }
47
+ catch {
48
+ return { success: false, error: 'invalid plugin.json' };
49
+ }
50
+ const agentManifest = pluginToAgentSkills(manifest, source);
51
+ const outPath = path.join(pluginDir, AGENT_SKILLS_MANIFEST_FILE);
52
+ await fs.writeJson(outPath, agentManifest, { spaces: 2 });
53
+ return { success: true, path: outPath };
54
+ }
55
+ /**
56
+ * Export an installed plugin to Agent Skills format.
57
+ * Looks up the plugin by name in the global plugins directory.
58
+ */
59
+ export async function exportPluginAsAgentSkills(name) {
60
+ const pluginDir = path.join(PLUGINS_DIR, name);
61
+ if (!await fs.pathExists(pluginDir)) {
62
+ return { success: false, error: `plugin "${name}" is not installed` };
63
+ }
64
+ return generateAgentSkillsManifest(pluginDir);
65
+ }
66
+ /**
67
+ * Import an Agent Skills spec package from a directory.
68
+ * Reads skills.json, converts to plugin.json, copies to plugins dir.
69
+ */
70
+ export async function importAgentSkillsPackage(sourceDir, options = {}) {
71
+ const { dryRun = false } = options;
72
+ const skillsPath = path.join(sourceDir, AGENT_SKILLS_MANIFEST_FILE);
73
+ if (!await fs.pathExists(skillsPath)) {
74
+ return { success: false, error: 'skills.json not found' };
75
+ }
76
+ let agentManifest;
77
+ try {
78
+ agentManifest = await fs.readJson(skillsPath);
79
+ }
80
+ catch {
81
+ return { success: false, error: 'invalid skills.json' };
82
+ }
83
+ if (!agentManifest.name || !agentManifest.version || !agentManifest.description) {
84
+ return { success: false, error: 'skills.json missing required fields (name, version, description)' };
85
+ }
86
+ const pluginName = agentManifest.name;
87
+ if (dryRun) {
88
+ return { success: true, name: pluginName };
89
+ }
90
+ const destDir = path.join(PLUGINS_DIR, pluginName);
91
+ // Remove existing version if present
92
+ if (await fs.pathExists(destDir)) {
93
+ await fs.remove(destDir);
94
+ }
95
+ // Copy the source directory
96
+ await fs.copy(sourceDir, destDir);
97
+ // Generate plugin.json from skills.json
98
+ const pluginManifest = agentSkillsToPlugin(agentManifest);
99
+ await fs.writeJson(path.join(destDir, PLUGIN_MANIFEST_FILE), pluginManifest, { spaces: 2 });
100
+ // Write install metadata
101
+ const installedPlugin = {
102
+ name: pluginName,
103
+ version: agentManifest.version,
104
+ installedAt: new Date().toISOString(),
105
+ source: `agent-skills:${sourceDir}`,
106
+ manifest: pluginManifest,
107
+ };
108
+ await fs.writeJson(path.join(destDir, '.installed.json'), installedPlugin, { spaces: 2 });
109
+ return { success: true, name: pluginName };
110
+ }
111
+ //# sourceMappingURL=agent-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../src/lib/agent-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { InitOptions, StackClaudeMdEntry } from '../types/index.js';
2
+ export declare function buildClaudeMd(projectName: string, stack: string, entry: StackClaudeMdEntry, contextDir: boolean, modules: string[]): string;
3
+ /**
4
+ * Generate CLAUDE.md content from InitOptions metadata.
5
+ * Pure function — does NOT perform filesystem I/O.
6
+ */
7
+ export declare function generateClaudeMd(options: InitOptions): string;
8
+ //# sourceMappingURL=claudemd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudemd.d.ts","sourceRoot":"","sources":["../../src/lib/claudemd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAWxE,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CA4CR;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAe7D"}
@@ -0,0 +1,72 @@
1
+ import { STACK_CLAUDEMD_MAP } from '../constants.js';
2
+ // =============================================================================
3
+ // Internal helpers
4
+ // =============================================================================
5
+ function getStackClaudeMd(stack) {
6
+ return STACK_CLAUDEMD_MAP[stack] ?? STACK_CLAUDEMD_MAP['default'];
7
+ }
8
+ export function buildClaudeMd(projectName, stack, entry, contextDir, modules) {
9
+ const lines = [];
10
+ lines.push(`# ${projectName}`);
11
+ lines.push('');
12
+ // Stack section
13
+ lines.push('## Stack');
14
+ lines.push(`- **Language/Runtime**: ${stack}`);
15
+ lines.push(`- **Conventions**: ${entry.conventions}`);
16
+ lines.push(`- **Testing**: ${entry.testFramework}`);
17
+ lines.push('');
18
+ // Skills section
19
+ if (entry.skills.length > 0) {
20
+ lines.push('## Recommended Skills');
21
+ for (const skill of entry.skills) {
22
+ lines.push(`- Load \`~/.claude/skills/${skill}/SKILL.md\` before writing code`);
23
+ }
24
+ lines.push('');
25
+ }
26
+ // Project Context section (conditional on contextDir)
27
+ if (contextDir) {
28
+ lines.push('## Project Context');
29
+ lines.push('- See `.context/INDEX.md` for file structure and entry points');
30
+ lines.push('- See `.context/summary.md` for project overview');
31
+ lines.push('');
32
+ }
33
+ // Conventions section
34
+ lines.push('## Conventions');
35
+ lines.push(`- ${entry.conventions}`);
36
+ lines.push('- Scaffolded with javi-forge — see `.javi-forge/manifest.json` for config');
37
+ lines.push('');
38
+ // Modules section
39
+ if (modules.length > 0) {
40
+ lines.push('## Modules');
41
+ lines.push(`- ${modules.join(', ')}`);
42
+ lines.push('');
43
+ }
44
+ return lines.join('\n');
45
+ }
46
+ // =============================================================================
47
+ // Public API
48
+ // =============================================================================
49
+ /**
50
+ * Generate CLAUDE.md content from InitOptions metadata.
51
+ * Pure function — does NOT perform filesystem I/O.
52
+ */
53
+ export function generateClaudeMd(options) {
54
+ const { projectName, stack, contextDir } = options;
55
+ const entry = getStackClaudeMd(stack);
56
+ // Collect enabled modules for listing
57
+ const modules = [];
58
+ if (options.aiSync)
59
+ modules.push('ai-sync');
60
+ if (options.sdd)
61
+ modules.push('sdd');
62
+ if (options.ghagga)
63
+ modules.push('ghagga');
64
+ if (options.mock)
65
+ modules.push('mock');
66
+ if (options.contextDir)
67
+ modules.push('context');
68
+ if (options.claudeMd)
69
+ modules.push('claude-md');
70
+ return buildClaudeMd(projectName, stack, entry, contextDir, modules);
71
+ }
72
+ //# sourceMappingURL=claudemd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudemd.js","sourceRoot":"","sources":["../../src/lib/claudemd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CodexTomlEntry, CodexExportResult } from '../types/index.js';
2
+ /**
3
+ * Convert a SKILL.md raw content string into a CodexTomlEntry.
4
+ * Returns null if the file has no valid frontmatter or missing name.
5
+ */
6
+ export declare function skillToCodexToml(raw: string): CodexTomlEntry | null;
7
+ /**
8
+ * Serialize a CodexTomlEntry to a TOML string.
9
+ */
10
+ export declare function serializeToml(entry: CodexTomlEntry): string;
11
+ /**
12
+ * Export an installed plugin's SKILL.md files as Codex-compatible TOML subagent files.
13
+ * Writes .toml files to a `codex/` subdirectory inside the plugin directory.
14
+ */
15
+ export declare function exportPluginAsCodexToml(name: string): Promise<CodexExportResult>;
16
+ //# sourceMappingURL=codex-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-export.d.ts","sourceRoot":"","sources":["../../src/lib/codex-export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAS1E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoBnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAa3D;AAID;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CAuD5B"}
@@ -0,0 +1,111 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { PLUGINS_DIR, PLUGIN_MANIFEST_FILE } from '../constants.js';
4
+ import { parseFrontmatter } from './frontmatter.js';
5
+ const DEFAULT_MODEL = 'o4-mini';
6
+ // ── Conversion ─────────────────────────────────────────────────────────────
7
+ /**
8
+ * Convert a SKILL.md raw content string into a CodexTomlEntry.
9
+ * Returns null if the file has no valid frontmatter or missing name.
10
+ */
11
+ export function skillToCodexToml(raw) {
12
+ const parsed = parseFrontmatter(raw);
13
+ if (!parsed)
14
+ return null;
15
+ const name = parsed.data['name'];
16
+ if (typeof name !== 'string' || !name)
17
+ return null;
18
+ const description = typeof parsed.data['description'] === 'string'
19
+ ? parsed.data['description']
20
+ : '';
21
+ const model = typeof parsed.data['model'] === 'string'
22
+ ? parsed.data['model']
23
+ : DEFAULT_MODEL;
24
+ const instructions = description
25
+ ? `${description}\n\n${parsed.content}`.trim()
26
+ : parsed.content.trim();
27
+ return { name, model, instructions };
28
+ }
29
+ /**
30
+ * Serialize a CodexTomlEntry to a TOML string.
31
+ */
32
+ export function serializeToml(entry) {
33
+ const escapedName = escapeTomlString(entry.name);
34
+ const escapedModel = escapeTomlString(entry.model);
35
+ const escapedInstructions = escapeTomlMultiline(entry.instructions);
36
+ return [
37
+ `name = "${escapedName}"`,
38
+ `model = "${escapedModel}"`,
39
+ `instructions = """`,
40
+ escapedInstructions,
41
+ `"""`,
42
+ '',
43
+ ].join('\n');
44
+ }
45
+ // ── File I/O ───────────────────────────────────────────────────────────────
46
+ /**
47
+ * Export an installed plugin's SKILL.md files as Codex-compatible TOML subagent files.
48
+ * Writes .toml files to a `codex/` subdirectory inside the plugin directory.
49
+ */
50
+ export async function exportPluginAsCodexToml(name) {
51
+ const pluginDir = path.join(PLUGINS_DIR, name);
52
+ if (!await fs.pathExists(pluginDir)) {
53
+ return { success: false, error: `plugin "${name}" is not installed` };
54
+ }
55
+ // Read plugin manifest for skill list
56
+ const manifestPath = path.join(pluginDir, PLUGIN_MANIFEST_FILE);
57
+ if (!await fs.pathExists(manifestPath)) {
58
+ return { success: false, error: 'plugin.json not found' };
59
+ }
60
+ let manifest;
61
+ try {
62
+ manifest = await fs.readJson(manifestPath);
63
+ }
64
+ catch {
65
+ return { success: false, error: 'invalid plugin.json' };
66
+ }
67
+ const skillNames = manifest.skills ?? [];
68
+ if (skillNames.length === 0) {
69
+ return { success: false, error: 'plugin has no skills to export' };
70
+ }
71
+ const codexDir = path.join(pluginDir, 'codex');
72
+ await fs.ensureDir(codexDir);
73
+ const writtenFiles = [];
74
+ for (const skillName of skillNames) {
75
+ const skillPath = path.join(pluginDir, 'skills', skillName, 'SKILL.md');
76
+ if (!await fs.pathExists(skillPath))
77
+ continue;
78
+ let raw;
79
+ try {
80
+ raw = await fs.readFile(skillPath, 'utf-8');
81
+ }
82
+ catch {
83
+ continue;
84
+ }
85
+ const entry = skillToCodexToml(raw);
86
+ if (!entry)
87
+ continue;
88
+ const toml = serializeToml(entry);
89
+ const outPath = path.join(codexDir, `${skillName}.toml`);
90
+ await fs.writeFile(outPath, toml, 'utf-8');
91
+ writtenFiles.push(outPath);
92
+ }
93
+ if (writtenFiles.length === 0) {
94
+ return { success: false, error: 'no skills with valid frontmatter found' };
95
+ }
96
+ return { success: true, files: writtenFiles };
97
+ }
98
+ // ── Helpers ────────────────────────────────────────────────────────────────
99
+ function escapeTomlString(value) {
100
+ return value
101
+ .replace(/\\/g, '\\\\')
102
+ .replace(/"/g, '\\"')
103
+ .replace(/\n/g, '\\n');
104
+ }
105
+ function escapeTomlMultiline(value) {
106
+ // In TOML multiline basic strings ("""), only backslashes and triple quotes need escaping
107
+ return value
108
+ .replace(/\\/g, '\\\\')
109
+ .replace(/"""/g, '"\\"\"');
110
+ }
111
+ //# sourceMappingURL=codex-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-export.js","sourceRoot":"","sources":["../../src/lib/codex-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { InitOptions, StackContextEntry } from '../types/index.js';
2
+ export declare function buildIndexMd(projectName: string, stackCtx: StackContextEntry, ciProvider: string, memory: string): string;
3
+ export declare function buildSummaryMd(projectName: string, stack: string, ciProvider: string, memory: string, modules: string[]): string;
4
+ /**
5
+ * Generate .context/ directory content from InitOptions metadata.
6
+ * Pure function — does NOT perform filesystem I/O.
7
+ */
8
+ export declare function generateContextDir(options: InitOptions): Promise<{
9
+ index: string;
10
+ summary: string;
11
+ }>;
12
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAWvE,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAmBR;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CAqBR;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB7C"}
@@ -0,0 +1,75 @@
1
+ import { STACK_CONTEXT_MAP } from '../constants.js';
2
+ // =============================================================================
3
+ // Internal helpers
4
+ // =============================================================================
5
+ function getStackContext(stack) {
6
+ return STACK_CONTEXT_MAP[stack] ?? STACK_CONTEXT_MAP['default'];
7
+ }
8
+ export function buildIndexMd(projectName, stackCtx, ciProvider, memory) {
9
+ return `# ${projectName} — File Index
10
+
11
+ ## Directory Structure
12
+
13
+ \`\`\`
14
+ ${stackCtx.tree}
15
+ \`\`\`
16
+
17
+ ## Entry Point
18
+
19
+ \`${stackCtx.entryPoint}\`
20
+
21
+ ## Conventions
22
+
23
+ - **Stack conventions**: ${stackCtx.conventions}
24
+ - **CI**: ${ciProvider}
25
+ - **Memory**: ${memory}
26
+ `;
27
+ }
28
+ export function buildSummaryMd(projectName, stack, ciProvider, memory, modules) {
29
+ const modulesList = modules.length > 0 ? modules.join(', ') : 'none';
30
+ return `# ${projectName}
31
+
32
+ ## Overview
33
+
34
+ ${stack}-based project scaffolded with javi-forge.
35
+
36
+ ## Stack
37
+
38
+ - **Language/Runtime**: ${stack}
39
+ - **CI**: ${ciProvider}
40
+ - **Memory**: ${memory}
41
+ - **Modules**: ${modulesList}
42
+
43
+ ## Key Decisions
44
+
45
+ - Scaffolded with javi-forge
46
+ - AI-ready project structure with .context/ directory
47
+ `;
48
+ }
49
+ // =============================================================================
50
+ // Public API
51
+ // =============================================================================
52
+ /**
53
+ * Generate .context/ directory content from InitOptions metadata.
54
+ * Pure function — does NOT perform filesystem I/O.
55
+ */
56
+ export async function generateContextDir(options) {
57
+ const { projectName, stack, ciProvider, memory } = options;
58
+ const stackCtx = getStackContext(stack);
59
+ // Collect enabled modules for summary
60
+ const modules = [];
61
+ if (options.aiSync)
62
+ modules.push('ai-sync');
63
+ if (options.sdd)
64
+ modules.push('sdd');
65
+ if (options.ghagga)
66
+ modules.push('ghagga');
67
+ if (options.mock)
68
+ modules.push('mock');
69
+ if (options.contextDir)
70
+ modules.push('context');
71
+ const index = buildIndexMd(projectName, stackCtx, ciProvider, memory);
72
+ const summary = buildSummaryMd(projectName, stack, ciProvider, memory, modules);
73
+ return { index, summary };
74
+ }
75
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,WAAmB,EACnB,QAA2B,EAC3B,UAAkB,EAClB,MAAc;IAEd,OAAO,KAAK,WAAW;;;;;EAKvB,QAAQ,CAAC,IAAI;;;;;IAKX,QAAQ,CAAC,UAAU;;;;2BAII,QAAQ,CAAC,WAAW;YACnC,UAAU;gBACN,MAAM;CACrB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,KAAa,EACb,UAAkB,EAClB,MAAc,EACd,OAAiB;IAEjB,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAEpE,OAAO,KAAK,WAAW;;;;EAIvB,KAAK;;;;0BAImB,KAAK;YACnB,UAAU;gBACN,MAAM;iBACL,WAAW;;;;;;CAM3B,CAAA;AACD,CAAC;AAED,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAoB;IAEpB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1D,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAEvC,sCAAsC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3C,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1C,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAE/C,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACrE,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;AAC3B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { PluginValidationResult, InstalledPlugin, PluginRegistryEntry } from '../types/index.js';
1
+ import type { PluginValidationResult, InstalledPlugin, PluginRegistryEntry, PluginSyncResult } from '../types/index.js';
2
2
  /**
3
3
  * Validate a plugin directory structure and manifest.
4
4
  */
@@ -31,6 +31,18 @@ export declare function listInstalledPlugins(): Promise<InstalledPlugin[]>;
31
31
  * Fetch the remote plugin registry and optionally filter by query.
32
32
  */
33
33
  export declare function searchRegistry(query?: string): Promise<PluginRegistryEntry[]>;
34
+ /**
35
+ * Detect installed plugins in a project's .javi-forge/plugins/ directory.
36
+ * Returns an array of plugin names (sorted alphabetically).
37
+ */
38
+ export declare function detectProjectPlugins(projectDir: string): Promise<string[]>;
39
+ /**
40
+ * Sync detected plugins into the project manifest.
41
+ * Returns a report of added, removed, and unchanged plugins.
42
+ */
43
+ export declare function syncPlugins(projectDir: string, options?: {
44
+ dryRun?: boolean;
45
+ }): Promise<PluginSyncResult>;
34
46
  /**
35
47
  * Normalize a GitHub source to a git clone URL.
36
48
  * Accepts: "org/repo", "https://github.com/org/repo", "github.com/org/repo"
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/lib/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,eAAe,EAEf,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAU1B;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4EvF;AAID;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6D9D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAY/C;AAID;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAkBvE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuBnF;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB7D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/lib/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,eAAe,EAEf,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAA;AAW1B;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4EvF;AAID;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgE9D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAY/C;AAID;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAkBvE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAuBnF;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBhF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB7D"}
@@ -3,6 +3,7 @@ import path from 'path';
3
3
  import { execFile } from 'child_process';
4
4
  import { promisify } from 'util';
5
5
  import { PLUGINS_DIR, PLUGIN_MANIFEST_FILE, PLUGIN_ASSET_DIRS, PLUGIN_REGISTRY_URL } from '../constants.js';
6
+ import { generateAgentSkillsManifest } from './agent-skills.js';
6
7
  const execFileAsync = promisify(execFile);
7
8
  const KEBAB_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
8
9
  const SEMVER_RE = /^\d+\.\d+\.\d+$/;
@@ -131,6 +132,8 @@ export async function installPlugin(source, options = {}) {
131
132
  manifest: validation.manifest,
132
133
  };
133
134
  await fs.writeJson(path.join(destDir, '.installed.json'), installedPlugin, { spaces: 2 });
135
+ // Generate Agent Skills spec manifest for cross-agent compatibility
136
+ await generateAgentSkillsManifest(destDir, source).catch(() => { });
134
137
  }
135
138
  return { success: true, name: pluginName };
136
139
  }
@@ -204,6 +207,71 @@ export async function searchRegistry(query) {
204
207
  return [];
205
208
  }
206
209
  }
210
+ // ── Sync ───────────────────────────────────────────────────────────────
211
+ /**
212
+ * Detect installed plugins in a project's .javi-forge/plugins/ directory.
213
+ * Returns an array of plugin names (sorted alphabetically).
214
+ */
215
+ export async function detectProjectPlugins(projectDir) {
216
+ const pluginsDir = path.join(projectDir, '.javi-forge', 'plugins');
217
+ if (!await fs.pathExists(pluginsDir))
218
+ return [];
219
+ const entries = await fs.readdir(pluginsDir);
220
+ const plugins = [];
221
+ for (const entry of entries) {
222
+ if (entry.startsWith('.'))
223
+ continue;
224
+ const metaPath = path.join(pluginsDir, entry, '.installed.json');
225
+ if (await fs.pathExists(metaPath)) {
226
+ try {
227
+ const meta = await fs.readJson(metaPath);
228
+ if (meta.name) {
229
+ plugins.push(meta.name);
230
+ }
231
+ }
232
+ catch { /* skip corrupt entries */ }
233
+ }
234
+ }
235
+ return plugins.sort();
236
+ }
237
+ /**
238
+ * Sync detected plugins into the project manifest.
239
+ * Returns a report of added, removed, and unchanged plugins.
240
+ */
241
+ export async function syncPlugins(projectDir, options = {}) {
242
+ const { dryRun = false } = options;
243
+ const detected = await detectProjectPlugins(projectDir);
244
+ const manifestPath = path.join(projectDir, '.javi-forge', 'manifest.json');
245
+ let manifest;
246
+ if (await fs.pathExists(manifestPath)) {
247
+ manifest = await fs.readJson(manifestPath);
248
+ }
249
+ else {
250
+ // No manifest yet — treat current plugins as empty
251
+ manifest = {
252
+ version: '0.1.0',
253
+ projectName: path.basename(projectDir),
254
+ stack: 'node',
255
+ ciProvider: 'github',
256
+ memory: 'none',
257
+ createdAt: new Date().toISOString(),
258
+ updatedAt: new Date().toISOString(),
259
+ modules: [],
260
+ };
261
+ }
262
+ const previous = new Set(manifest.plugins ?? []);
263
+ const current = new Set(detected);
264
+ const added = detected.filter(p => !previous.has(p));
265
+ const removed = [...previous].filter(p => !current.has(p));
266
+ const unchanged = detected.filter(p => previous.has(p));
267
+ if (!dryRun && (added.length > 0 || removed.length > 0)) {
268
+ manifest.plugins = detected;
269
+ manifest.updatedAt = new Date().toISOString();
270
+ await fs.ensureDir(path.dirname(manifestPath));
271
+ await fs.writeJson(manifestPath, manifest, { spaces: 2 });
272
+ }
273
+ return { added, removed, unchanged };
274
+ }
207
275
  // ── Helpers ─────────────────────────────────────────────────────────────────
208
276
  /**
209
277
  * Normalize a GitHub source to a git clone URL.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/lib/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/lib/plugin.ts"],"names":[],"mappings":"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"}