javi-forge 1.4.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 (69) hide show
  1. package/README.md +191 -3
  2. package/ci-local/hooks/pre-push +17 -13
  3. package/dist/commands/ci.d.ts +4 -0
  4. package/dist/commands/ci.d.ts.map +1 -1
  5. package/dist/commands/ci.js +97 -0
  6. package/dist/commands/ci.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +56 -2
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/plugin.d.ts +16 -0
  11. package/dist/commands/plugin.d.ts.map +1 -1
  12. package/dist/commands/plugin.js +70 -1
  13. package/dist/commands/plugin.js.map +1 -1
  14. package/dist/commands/security.d.ts +25 -0
  15. package/dist/commands/security.d.ts.map +1 -0
  16. package/dist/commands/security.js +305 -0
  17. package/dist/commands/security.js.map +1 -0
  18. package/dist/commands/skills.d.ts +82 -0
  19. package/dist/commands/skills.d.ts.map +1 -0
  20. package/dist/commands/skills.js +510 -0
  21. package/dist/commands/skills.js.map +1 -0
  22. package/dist/commands/tdd.d.ts +21 -0
  23. package/dist/commands/tdd.d.ts.map +1 -0
  24. package/dist/commands/tdd.js +117 -0
  25. package/dist/commands/tdd.js.map +1 -0
  26. package/dist/constants.d.ts +7 -0
  27. package/dist/constants.d.ts.map +1 -1
  28. package/dist/constants.js +132 -0
  29. package/dist/constants.js.map +1 -1
  30. package/dist/index.js +156 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/agent-skills.d.ts +38 -0
  33. package/dist/lib/agent-skills.d.ts.map +1 -0
  34. package/dist/lib/agent-skills.js +111 -0
  35. package/dist/lib/agent-skills.js.map +1 -0
  36. package/dist/lib/claudemd.d.ts +8 -0
  37. package/dist/lib/claudemd.d.ts.map +1 -0
  38. package/dist/lib/claudemd.js +72 -0
  39. package/dist/lib/claudemd.js.map +1 -0
  40. package/dist/lib/codex-export.d.ts +16 -0
  41. package/dist/lib/codex-export.d.ts.map +1 -0
  42. package/dist/lib/codex-export.js +111 -0
  43. package/dist/lib/codex-export.js.map +1 -0
  44. package/dist/lib/context.d.ts +12 -0
  45. package/dist/lib/context.d.ts.map +1 -0
  46. package/dist/lib/context.js +75 -0
  47. package/dist/lib/context.js.map +1 -0
  48. package/dist/lib/plugin.d.ts +13 -1
  49. package/dist/lib/plugin.d.ts.map +1 -1
  50. package/dist/lib/plugin.js +68 -0
  51. package/dist/lib/plugin.js.map +1 -1
  52. package/dist/types/index.d.ts +119 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/ui/App.d.ts.map +1 -1
  55. package/dist/ui/App.js +6 -0
  56. package/dist/ui/App.js.map +1 -1
  57. package/dist/ui/OptionSelector.d.ts +2 -0
  58. package/dist/ui/OptionSelector.d.ts.map +1 -1
  59. package/dist/ui/OptionSelector.js +6 -0
  60. package/dist/ui/OptionSelector.js.map +1 -1
  61. package/dist/ui/Plugin.d.ts +1 -1
  62. package/dist/ui/Plugin.d.ts.map +1 -1
  63. package/dist/ui/Plugin.js +18 -1
  64. package/dist/ui/Plugin.js.map +1 -1
  65. package/dist/ui/Skills.d.ts +11 -0
  66. package/dist/ui/Skills.d.ts.map +1 -0
  67. package/dist/ui/Skills.js +119 -0
  68. package/dist/ui/Skills.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,117 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { detectCIStack } from './ci.js';
4
+ // =============================================================================
5
+ // Test command resolution
6
+ // =============================================================================
7
+ /**
8
+ * Resolve the correct test command for TDD hook based on stack and build tool.
9
+ * Returns null if no test command can be determined.
10
+ */
11
+ export async function getTddTestCommand(stack, buildTool, projectDir) {
12
+ switch (stack) {
13
+ case 'node': {
14
+ const pkgPath = path.join(projectDir, 'package.json');
15
+ try {
16
+ const pkgContent = await fs.readFile(pkgPath, 'utf-8');
17
+ if (!pkgContent.includes('"test"'))
18
+ return null;
19
+ return buildTool === 'npm' ? 'npm test' : `${buildTool} run test`;
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ case 'python':
26
+ return 'pytest';
27
+ case 'go':
28
+ return 'go test ./...';
29
+ default:
30
+ return null;
31
+ }
32
+ }
33
+ // =============================================================================
34
+ // Hook generation
35
+ // =============================================================================
36
+ /**
37
+ * Generate a TDD-enforcing pre-commit hook script.
38
+ * If testCmd is null, generates a warning-only hook.
39
+ */
40
+ export function generateTddHook(testCmd, stack) {
41
+ if (!testCmd) {
42
+ return `#!/bin/bash
43
+ # =============================================================================
44
+ # TDD PRE-COMMIT: No test command detected for stack "${stack}"
45
+ # =============================================================================
46
+ # Install a test runner and re-run: javi-forge tdd init
47
+ # =============================================================================
48
+
49
+ echo "TDD HOOK: No test command configured for stack '${stack}' — skipping."
50
+ exit 0
51
+ `;
52
+ }
53
+ return `#!/bin/bash
54
+ # =============================================================================
55
+ # TDD PRE-COMMIT: Enforced test-driven development
56
+ # =============================================================================
57
+ # Flow: Tests MUST pass before commit is allowed.
58
+ # Stack: ${stack} | Command: ${testCmd}
59
+ # To skip: git commit --no-verify
60
+ # =============================================================================
61
+
62
+ set -e
63
+
64
+ echo "TDD PRE-COMMIT: Running tests..."
65
+ echo " Stack: ${stack}"
66
+ echo " Command: ${testCmd}"
67
+ echo ""
68
+
69
+ ${testCmd} || {
70
+ echo ""
71
+ echo "TDD FAILED — Tests did not pass."
72
+ echo " Fix failing tests before committing."
73
+ echo " To skip: git commit --no-verify"
74
+ exit 1
75
+ }
76
+
77
+ echo ""
78
+ echo "TDD PASSED — All tests green. Commit allowed."
79
+ `;
80
+ }
81
+ // =============================================================================
82
+ // Hook installation
83
+ // =============================================================================
84
+ /**
85
+ * Install TDD pre-commit hook into .git/hooks/.
86
+ * Detects the project stack automatically and generates the appropriate hook.
87
+ */
88
+ export async function installTddHooks(projectDir) {
89
+ const gitDir = path.join(projectDir, '.git');
90
+ if (!await fs.pathExists(gitDir)) {
91
+ return { installed: [], errors: ['Not a git repository. Run git init first.'] };
92
+ }
93
+ const hooksDir = path.join(gitDir, 'hooks');
94
+ await fs.ensureDir(hooksDir);
95
+ // Detect stack
96
+ let stackInfo;
97
+ try {
98
+ stackInfo = await detectCIStack(projectDir);
99
+ }
100
+ catch {
101
+ return { installed: [], errors: ['Failed to detect project stack.'] };
102
+ }
103
+ const testCmd = await getTddTestCommand(stackInfo.stackType, stackInfo.buildTool, projectDir);
104
+ const hookContent = generateTddHook(testCmd, stackInfo.stackType);
105
+ const installed = [];
106
+ const errors = [];
107
+ const hookPath = path.join(hooksDir, 'pre-commit');
108
+ try {
109
+ await fs.writeFile(hookPath, hookContent, { mode: 0o755 });
110
+ installed.push('pre-commit');
111
+ }
112
+ catch (e) {
113
+ errors.push(`pre-commit: ${e instanceof Error ? e.message : String(e)}`);
114
+ }
115
+ return { installed, errors };
116
+ }
117
+ //# sourceMappingURL=tdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tdd.js","sourceRoot":"","sources":["../../src/commands/tdd.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { StackContextEntry, StackClaudeMdEntry } from './types/index.js';
1
2
  /** Root of the javi-forge package (one level up from dist/) */
2
3
  export declare const FORGE_ROOT: string;
3
4
  /** Templates directory */
@@ -18,8 +19,14 @@ export declare const PLUGIN_REGISTRY_URL = "https://raw.githubusercontent.com/JN
18
19
  export declare const PLUGIN_MANIFEST_FILE = "plugin.json";
19
20
  /** Valid plugin asset directories */
20
21
  export declare const PLUGIN_ASSET_DIRS: readonly ["skills", "commands", "hooks", "agents"];
22
+ /** Agent Skills spec manifest filename */
23
+ export declare const AGENT_SKILLS_MANIFEST_FILE = "skills.json";
21
24
  /** Stack-to-dependabot fragment mapping */
22
25
  export declare const STACK_DEPENDABOT_MAP: Record<string, string[]>;
26
+ /** Stack-to-CLAUDE.md metadata mapping */
27
+ export declare const STACK_CLAUDEMD_MAP: Record<string, StackClaudeMdEntry>;
28
+ /** Stack-to-context template mapping */
29
+ export declare const STACK_CONTEXT_MAP: Record<string, StackContextEntry>;
23
30
  /** Stack-to-CI template filename mapping */
24
31
  export declare const STACK_CI_MAP: Record<string, Record<string, string>>;
25
32
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,+DAA+D;AAC/D,eAAO,MAAM,UAAU,QAAgC,CAAA;AAEvD,0BAA0B;AAC1B,eAAO,MAAM,aAAa,QAAqC,CAAA;AAE/D,wBAAwB;AACxB,eAAO,MAAM,WAAW,QAAmC,CAAA;AAE3D,0BAA0B;AAC1B,eAAO,MAAM,aAAa,QAAqC,CAAA;AAE/D,yBAAyB;AACzB,eAAO,MAAM,YAAY,QAAoC,CAAA;AAE7D,oCAAoC;AACpC,eAAO,MAAM,wBAAwB,QAAmD,CAAA;AAExF,4CAA4C;AAC5C,eAAO,MAAM,WAAW,QAAmC,CAAA;AAE3D,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,qFAAqF,CAAA;AAErH,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,gBAAgB,CAAA;AAEjD,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,oDAAqD,CAAA;AAEnF,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAQzD,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB/D,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAI7E,+DAA+D;AAC/D,eAAO,MAAM,UAAU,QAAgC,CAAA;AAEvD,0BAA0B;AAC1B,eAAO,MAAM,aAAa,QAAqC,CAAA;AAE/D,wBAAwB;AACxB,eAAO,MAAM,WAAW,QAAmC,CAAA;AAE3D,0BAA0B;AAC1B,eAAO,MAAM,aAAa,QAAqC,CAAA;AAE/D,yBAAyB;AACzB,eAAO,MAAM,YAAY,QAAoC,CAAA;AAE7D,oCAAoC;AACpC,eAAO,MAAM,wBAAwB,QAAmD,CAAA;AAExF,4CAA4C;AAC5C,eAAO,MAAM,WAAW,QAAmC,CAAA;AAE3D,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,qFAAqF,CAAA;AAErH,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,gBAAgB,CAAA;AAEjD,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,oDAAqD,CAAA;AAEnF,0CAA0C;AAC1C,eAAO,MAAM,0BAA0B,gBAAgB,CAAA;AAEvD,2CAA2C;AAC3C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAQzD,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAyCjE,CAAA;AAED,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAqF/D,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB/D,CAAA"}
package/dist/constants.js CHANGED
@@ -21,6 +21,8 @@ export const PLUGIN_REGISTRY_URL = 'https://raw.githubusercontent.com/JNZader/ja
21
21
  export const PLUGIN_MANIFEST_FILE = 'plugin.json';
22
22
  /** Valid plugin asset directories */
23
23
  export const PLUGIN_ASSET_DIRS = ['skills', 'commands', 'hooks', 'agents'];
24
+ /** Agent Skills spec manifest filename */
25
+ export const AGENT_SKILLS_MANIFEST_FILE = 'skills.json';
24
26
  /** Stack-to-dependabot fragment mapping */
25
27
  export const STACK_DEPENDABOT_MAP = {
26
28
  'node': ['npm'],
@@ -31,6 +33,136 @@ export const STACK_DEPENDABOT_MAP = {
31
33
  'java-maven': ['maven'],
32
34
  'elixir': [],
33
35
  };
36
+ /** Stack-to-CLAUDE.md metadata mapping */
37
+ export const STACK_CLAUDEMD_MAP = {
38
+ node: {
39
+ skills: ['typescript', 'react-19', 'tailwind-4'],
40
+ conventions: 'TypeScript strict, ESM modules, functional components',
41
+ testFramework: 'vitest',
42
+ },
43
+ python: {
44
+ skills: ['pytest', 'django-drf'],
45
+ conventions: 'PEP 8, type hints, ruff linting',
46
+ testFramework: 'pytest',
47
+ },
48
+ go: {
49
+ skills: [],
50
+ conventions: 'gofmt, golangci-lint, table-driven tests',
51
+ testFramework: 'go test',
52
+ },
53
+ rust: {
54
+ skills: [],
55
+ conventions: 'cargo fmt, clippy, edition 2021+',
56
+ testFramework: 'cargo test',
57
+ },
58
+ 'java-gradle': {
59
+ skills: [],
60
+ conventions: 'Gradle Kotlin DSL, JUnit 5, Checkstyle',
61
+ testFramework: 'JUnit 5',
62
+ },
63
+ 'java-maven': {
64
+ skills: [],
65
+ conventions: 'Maven standard layout, JUnit 5, Checkstyle',
66
+ testFramework: 'JUnit 5',
67
+ },
68
+ elixir: {
69
+ skills: [],
70
+ conventions: 'mix format, Credo, OTP conventions',
71
+ testFramework: 'ExUnit',
72
+ },
73
+ default: {
74
+ skills: [],
75
+ conventions: 'Follow language-specific best practices',
76
+ testFramework: 'project default',
77
+ },
78
+ };
79
+ /** Stack-to-context template mapping */
80
+ export const STACK_CONTEXT_MAP = {
81
+ node: {
82
+ tree: [
83
+ 'src/ — source code',
84
+ ' index.ts — entry point',
85
+ 'tests/ — test suites',
86
+ 'package.json — dependencies & scripts',
87
+ 'tsconfig.json — TypeScript config',
88
+ ].join('\n'),
89
+ conventions: 'TypeScript strict, ESM modules, vitest for testing',
90
+ entryPoint: 'src/index.ts',
91
+ },
92
+ python: {
93
+ tree: [
94
+ 'src/ — source packages',
95
+ ' __init__.py — package root',
96
+ 'tests/ — pytest suites',
97
+ 'pyproject.toml — project config',
98
+ ].join('\n'),
99
+ conventions: 'PEP 8, type hints, pytest, ruff for linting',
100
+ entryPoint: 'src/__init__.py',
101
+ },
102
+ go: {
103
+ tree: [
104
+ 'cmd/ — CLI entry points',
105
+ 'internal/ — private packages',
106
+ 'pkg/ — public packages',
107
+ 'go.mod — module definition',
108
+ 'go.sum — dependency checksums',
109
+ ].join('\n'),
110
+ conventions: 'gofmt, golangci-lint, table-driven tests',
111
+ entryPoint: 'cmd/main.go',
112
+ },
113
+ rust: {
114
+ tree: [
115
+ 'src/ — source code',
116
+ ' main.rs — entry point',
117
+ ' lib.rs — library root',
118
+ 'tests/ — integration tests',
119
+ 'Cargo.toml — manifest & dependencies',
120
+ ].join('\n'),
121
+ conventions: 'cargo fmt, clippy lints, edition 2021+',
122
+ entryPoint: 'src/main.rs',
123
+ },
124
+ 'java-gradle': {
125
+ tree: [
126
+ 'src/main/java/ — application source',
127
+ 'src/test/java/ — test source',
128
+ 'src/main/resources/ — config & assets',
129
+ 'build.gradle.kts — Gradle build script',
130
+ 'settings.gradle.kts — project settings',
131
+ ].join('\n'),
132
+ conventions: 'Gradle Kotlin DSL, JUnit 5, Checkstyle',
133
+ entryPoint: 'src/main/java/Main.java',
134
+ },
135
+ 'java-maven': {
136
+ tree: [
137
+ 'src/main/java/ — application source',
138
+ 'src/test/java/ — test source',
139
+ 'src/main/resources/ — config & assets',
140
+ 'pom.xml — Maven POM',
141
+ ].join('\n'),
142
+ conventions: 'Maven standard layout, JUnit 5, Checkstyle',
143
+ entryPoint: 'src/main/java/Main.java',
144
+ },
145
+ elixir: {
146
+ tree: [
147
+ 'lib/ — application source',
148
+ ' application.ex — OTP application',
149
+ 'test/ — ExUnit tests',
150
+ 'config/ — runtime config',
151
+ 'mix.exs — project definition',
152
+ ].join('\n'),
153
+ conventions: 'mix format, Credo, ExUnit, OTP conventions',
154
+ entryPoint: 'lib/application.ex',
155
+ },
156
+ default: {
157
+ tree: [
158
+ 'src/ — source code',
159
+ 'tests/ — test suites',
160
+ 'README.md — project documentation',
161
+ ].join('\n'),
162
+ conventions: 'Follow language-specific best practices',
163
+ entryPoint: 'src/index',
164
+ },
165
+ };
34
166
  /** Stack-to-CI template filename mapping */
35
167
  export const STACK_CI_MAP = {
36
168
  github: {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAE9D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AAEvD,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAE/D,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AAE3D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAE/D,yBAAyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;AAE7D,oCAAoC;AACpC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;AAExF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AAE3D,0BAA0B;AAC1B,MAAM,CAAC,MAAM,mBAAmB,GAAG,kFAAkF,CAAA;AAErH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAA;AAEjD,qCAAqC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAA;AAEnF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC5D,MAAM,EAAS,CAAC,KAAK,CAAC;IACtB,QAAQ,EAAO,CAAC,KAAK,CAAC;IACtB,IAAI,EAAW,CAAC,OAAO,CAAC;IACxB,MAAM,EAAS,CAAC,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAG,CAAC,OAAO,CAAC;IACxB,QAAQ,EAAO,EAAE;CAClB,CAAA;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,YAAY,GAA2C;IAClE,MAAM,EAAE;QACN,MAAM,EAAS,aAAa;QAC5B,QAAQ,EAAO,eAAe;QAC9B,IAAI,EAAW,WAAW;QAC1B,MAAM,EAAS,aAAa;QAC5B,aAAa,EAAE,aAAa;QAC5B,YAAY,EAAG,aAAa;KAC7B;IACD,MAAM,EAAE;QACN,MAAM,EAAS,oBAAoB;QACnC,QAAQ,EAAO,sBAAsB;QACrC,IAAI,EAAW,kBAAkB;QACjC,MAAM,EAAS,oBAAoB;QACnC,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAG,oBAAoB;KACpC;IACD,UAAU,EAAE;QACV,MAAM,EAAS,qBAAqB;QACpC,QAAQ,EAAO,uBAAuB;QACtC,IAAI,EAAW,mBAAmB;QAClC,MAAM,EAAS,qBAAqB;QACpC,aAAa,EAAE,qBAAqB;QACpC,YAAY,EAAG,qBAAqB;KACrC;CACF,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import path from 'path';
2
3
  import React from 'react';
3
4
  import { render } from 'ink';
4
5
  import { PassThrough } from 'node:stream';
@@ -9,6 +10,7 @@ import App from './ui/App.js';
9
10
  import Doctor from './ui/Doctor.js';
10
11
  import AnalyzeUI from './ui/AnalyzeUI.js';
11
12
  import Plugin from './ui/Plugin.js';
13
+ import Skills from './ui/Skills.js';
12
14
  import LlmsTxt from './ui/LlmsTxt.js';
13
15
  import CI from './ui/CI.js';
14
16
  import { CIProvider as CIContextProvider } from './ui/CIContext.js';
@@ -23,6 +25,7 @@ const cli = meow(`
23
25
  Commands
24
26
  init Bootstrap a new project (default)
25
27
  ci Run CI simulation (lint + compile + test + security + ghagga)
28
+ tdd init Install TDD-enforcing pre-commit hook (auto-detects stack)
26
29
  analyze Run repoforge skills analysis
27
30
  doctor Show health report
28
31
  plugin add Install a plugin from GitHub (org/repo)
@@ -30,6 +33,16 @@ const cli = meow(`
30
33
  plugin list List installed plugins
31
34
  plugin search Search the plugin registry
32
35
  plugin validate Validate a local plugin directory
36
+ plugin sync Auto-detect and wire installed plugins
37
+ plugin export Export plugin to Agent Skills spec format (skills.json)
38
+ plugin import Import an Agent Skills spec package as a javi-forge plugin
39
+ skills doctor Show skills health report (add --deep for conflict detection)
40
+ skills budget Show token cost of loaded skills (add -b N for custom budget)
41
+ skills score Score a skill on quality dimensions (completeness, clarity, testability, token-efficiency)
42
+ skills benchmark Benchmark a skill with structural quality checks
43
+ security baseline Create security baseline from current audit findings
44
+ security check Check for regressions against baseline (exits non-zero if found)
45
+ security update Re-snapshot baseline (acknowledge current vulns)
33
46
  llms-txt Generate AI-friendly llms.txt for current project
34
47
 
35
48
  Options
@@ -41,6 +54,9 @@ const cli = meow(`
41
54
  --ghagga Enable GHAGGA review system
42
55
  --mock Enable mock-first mode (no real API keys needed)
43
56
  --batch Non-interactive mode (auto-proceed, no keyboard input)
57
+ --deep Enable deep analysis (conflict + duplicate detection)
58
+ --budget, -b Token budget limit for skills (default: 8000)
59
+ --skills-dir Custom skills directory path
44
60
  --version Show version
45
61
  --help Show this help
46
62
 
@@ -53,11 +69,17 @@ const cli = meow(`
53
69
  --no-security Skip Semgrep security scan
54
70
  --timeout N Per-step timeout in seconds (default: 600)
55
71
 
72
+ CI hooks (javi-forge ci init)
73
+ Install git hooks that call javi-forge ci.
74
+ No files copied — hooks reference the global CLI.
75
+
56
76
  Examples
57
77
  $ javi-forge
58
78
  $ javi-forge init --dry-run
59
79
  $ javi-forge init --stack node --ci github
60
80
  $ javi-forge ci
81
+ $ javi-forge ci init
82
+ $ javi-forge tdd init
61
83
  $ javi-forge ci --quick
62
84
  $ javi-forge ci --no-ci-ghagga --no-security
63
85
  $ javi-forge ci --no-docker
@@ -85,6 +107,10 @@ const cli = meow(`
85
107
  ciGhagga: { type: 'boolean', default: true },
86
108
  security: { type: 'boolean', default: true },
87
109
  timeout: { type: 'number', default: 600 },
110
+ // Skills flags
111
+ deep: { type: 'boolean', default: false },
112
+ budget: { type: 'number', shortFlag: 'b', default: 8000 },
113
+ skillsDir: { type: 'string', default: '' },
88
114
  }
89
115
  });
90
116
  const subcommand = cli.input[0] ?? 'init';
@@ -99,7 +125,41 @@ const fakeStdin = new PassThrough();
99
125
  Object.defineProperty(fakeStdin, 'isTTY', { value: false });
100
126
  const inkStdin = isTTY ? process.stdin : fakeStdin;
101
127
  switch (subcommand) {
128
+ case 'tdd': {
129
+ if (cli.input[1] === 'init') {
130
+ const { installTddHooks } = await import('./commands/tdd.js');
131
+ const { installed, errors } = await installTddHooks(process.cwd());
132
+ if (installed.length > 0) {
133
+ console.log(`\u2713 Installed TDD hooks: ${installed.join(', ')}`);
134
+ console.log(' Pre-commit hook enforces tests must pass before commit');
135
+ }
136
+ for (const err of errors) {
137
+ console.error(`\u2717 ${err}`);
138
+ }
139
+ process.exit(errors.length > 0 ? 1 : 0);
140
+ }
141
+ else {
142
+ console.error('Usage: javi-forge tdd init');
143
+ console.error(' init Install TDD-enforcing pre-commit hook');
144
+ process.exit(1);
145
+ }
146
+ break;
147
+ }
102
148
  case 'ci': {
149
+ // Sub-command: javi-forge ci init → install git hooks
150
+ if (cli.input[1] === 'init') {
151
+ const { installCIHooks } = await import('./commands/ci.js');
152
+ const { installed, errors } = await installCIHooks(process.cwd());
153
+ if (installed.length > 0) {
154
+ console.log(`✓ Installed git hooks: ${installed.join(', ')}`);
155
+ console.log(' Hooks call javi-forge ci (with npx fallback)');
156
+ }
157
+ for (const err of errors) {
158
+ console.error(`✗ ${err}`);
159
+ }
160
+ process.exit(errors.length > 0 ? 1 : 0);
161
+ break;
162
+ }
103
163
  const ciMode = cli.flags.detect ? 'detect'
104
164
  : cli.flags.shell ? 'shell'
105
165
  : cli.flags.quick ? 'quick'
@@ -125,13 +185,108 @@ switch (subcommand) {
125
185
  }
126
186
  case 'plugin': {
127
187
  const pluginAction = cli.input[1];
128
- const VALID_PLUGIN_ACTIONS = ['add', 'remove', 'list', 'search', 'validate'];
188
+ const VALID_PLUGIN_ACTIONS = ['add', 'remove', 'list', 'search', 'validate', 'sync', 'export', 'import'];
129
189
  const action = pluginAction && VALID_PLUGIN_ACTIONS.includes(pluginAction) ? pluginAction : 'list';
130
190
  const target = cli.input[2];
131
191
  render(React.createElement(CIContextProvider, { isCI: isCI },
132
192
  React.createElement(Plugin, { action: action, target: target, dryRun: cli.flags.dryRun })), { stdin: inkStdin });
133
193
  break;
134
194
  }
195
+ case 'skills': {
196
+ const skillsAction = cli.input[1];
197
+ const VALID_SKILLS_ACTIONS = ['doctor', 'budget', 'score', 'benchmark'];
198
+ if (!skillsAction || !VALID_SKILLS_ACTIONS.includes(skillsAction)) {
199
+ console.error('Usage: javi-forge skills <doctor|budget|score|benchmark>');
200
+ console.error(' doctor Show skills health report (add --deep for conflict detection)');
201
+ console.error(' budget Show token cost of loaded skills (add -b N for custom budget)');
202
+ console.error(' score Score a skill on quality dimensions (0-100)');
203
+ console.error(' benchmark Benchmark a skill with structural quality checks');
204
+ process.exit(1);
205
+ break;
206
+ }
207
+ // Score and benchmark are non-interactive CLI commands
208
+ if (skillsAction === 'score' || skillsAction === 'benchmark') {
209
+ const targetSkill = cli.input[2];
210
+ if (!targetSkill) {
211
+ console.error(`Usage: javi-forge skills ${skillsAction} <skill-name>`);
212
+ process.exit(1);
213
+ break;
214
+ }
215
+ const skillsDir = cli.flags.skillsDir || path.join(process.env['HOME'] ?? '~', '.claude', 'skills');
216
+ const skillPath = path.join(skillsDir, targetSkill, 'SKILL.md');
217
+ if (skillsAction === 'score') {
218
+ const { scoreSkill } = await import('./commands/skills.js');
219
+ const result = await scoreSkill(skillPath, cli.flags.budget);
220
+ if (!result) {
221
+ console.error(`\u2717 Skill not found: ${skillPath}`);
222
+ process.exit(1);
223
+ break;
224
+ }
225
+ console.log(`\nSkill: ${result.skillName}`);
226
+ console.log(` Completeness: ${result.completeness}/100`);
227
+ console.log(` Clarity: ${result.clarity}/100`);
228
+ console.log(` Testability: ${result.testability}/100`);
229
+ console.log(` Token Efficiency: ${result.tokenEfficiency}/100`);
230
+ console.log(` Overall: ${result.overall}/100`);
231
+ console.log(` Threshold: ${result.threshold}`);
232
+ console.log(` Status: ${result.passing ? '\u2713 PASSING' : '\u2717 FAILING'}`);
233
+ process.exit(result.passing ? 0 : 1);
234
+ }
235
+ else {
236
+ const { benchmarkSkill } = await import('./commands/skills.js');
237
+ const result = await benchmarkSkill(skillPath);
238
+ if (!result) {
239
+ console.error(`\u2717 Skill not found: ${skillPath}`);
240
+ process.exit(1);
241
+ break;
242
+ }
243
+ console.log(`\nBenchmark: ${result.skillName}`);
244
+ for (const check of result.checks) {
245
+ const icon = check.passed ? '\u2713' : '\u2717';
246
+ console.log(` ${icon} ${check.name}${check.detail ? ` — ${check.detail}` : ''}`);
247
+ }
248
+ console.log(`\n Pass rate: ${result.passRate}%`);
249
+ process.exit(result.passRate >= 50 ? 0 : 1);
250
+ }
251
+ break;
252
+ }
253
+ const skillsMode = skillsAction;
254
+ render(React.createElement(CIContextProvider, { isCI: isCI },
255
+ React.createElement(Skills, { mode: skillsMode, budget: cli.flags.budget, deep: cli.flags.deep, skillsDir: cli.flags.skillsDir || undefined })), { stdin: inkStdin });
256
+ break;
257
+ }
258
+ case 'security': {
259
+ const securityAction = cli.input[1];
260
+ const VALID_SECURITY_ACTIONS = ['baseline', 'check', 'update'];
261
+ if (!securityAction || !VALID_SECURITY_ACTIONS.includes(securityAction)) {
262
+ console.error('Usage: javi-forge security <baseline|check|update>');
263
+ console.error(' baseline Create security baseline from current audit findings');
264
+ console.error(' check Check for regressions against baseline');
265
+ console.error(' update Re-snapshot baseline (acknowledge current vulns)');
266
+ process.exit(1);
267
+ break;
268
+ }
269
+ const { runSecurity } = await import('./commands/security.js');
270
+ const mode = securityAction;
271
+ try {
272
+ const result = await runSecurity(mode, process.cwd(), (step) => {
273
+ const icon = step.status === 'done' ? '\u2713'
274
+ : step.status === 'error' ? '\u2717'
275
+ : step.status === 'skipped' ? '-'
276
+ : '\u25CB';
277
+ console.log(`${icon} ${step.label}`);
278
+ if (step.detail)
279
+ console.log(` ${step.detail}`);
280
+ });
281
+ if (mode === 'check' && result && result.regressions.length > 0) {
282
+ process.exit(1);
283
+ }
284
+ }
285
+ catch {
286
+ process.exit(1);
287
+ }
288
+ break;
289
+ }
135
290
  case 'init':
136
291
  default: {
137
292
  const presetStack = VALID_STACKS.includes(cli.flags.stack)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { PluginManifest, AgentSkillsManifest } from '../types/index.js';
2
+ /**
3
+ * Convert a javi-forge PluginManifest to an Agent Skills spec manifest.
4
+ */
5
+ export declare function pluginToAgentSkills(manifest: PluginManifest, source?: string): AgentSkillsManifest;
6
+ /**
7
+ * Convert an Agent Skills spec manifest to a javi-forge PluginManifest.
8
+ */
9
+ export declare function agentSkillsToPlugin(agentManifest: AgentSkillsManifest): PluginManifest;
10
+ /**
11
+ * Generate a skills.json file in the given plugin directory from its plugin.json.
12
+ */
13
+ export declare function generateAgentSkillsManifest(pluginDir: string, source?: string): Promise<{
14
+ success: boolean;
15
+ path?: string;
16
+ error?: string;
17
+ }>;
18
+ /**
19
+ * Export an installed plugin to Agent Skills format.
20
+ * Looks up the plugin by name in the global plugins directory.
21
+ */
22
+ export declare function exportPluginAsAgentSkills(name: string): Promise<{
23
+ success: boolean;
24
+ path?: string;
25
+ error?: string;
26
+ }>;
27
+ /**
28
+ * Import an Agent Skills spec package from a directory.
29
+ * Reads skills.json, converts to plugin.json, copies to plugins dir.
30
+ */
31
+ export declare function importAgentSkillsPackage(sourceDir: string, options?: {
32
+ dryRun?: boolean;
33
+ }): Promise<{
34
+ success: boolean;
35
+ name?: string;
36
+ error?: string;
37
+ }>;
38
+ //# sourceMappingURL=agent-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../src/lib/agent-skills.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EAGpB,MAAM,mBAAmB,CAAA;AAK1B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAclG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,GAAG,cAAc,CAQtF;AAID;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB9D;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9D;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,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,CAkD9D"}