dev-workflows 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/bridges/claude.d.ts.map +1 -1
- package/dist/bridges/claude.js +5 -3
- package/dist/bridges/claude.js.map +1 -1
- package/dist/bridges/copilot.d.ts +3 -0
- package/dist/bridges/copilot.d.ts.map +1 -0
- package/dist/bridges/copilot.js +38 -0
- package/dist/bridges/copilot.js.map +1 -0
- package/dist/bridges/cursor.d.ts.map +1 -1
- package/dist/bridges/cursor.js +5 -3
- package/dist/bridges/cursor.js.map +1 -1
- package/dist/bridges/gemini.d.ts.map +1 -1
- package/dist/bridges/gemini.js +5 -3
- package/dist/bridges/gemini.js.map +1 -1
- package/dist/bridges/types.d.ts +1 -0
- package/dist/bridges/types.d.ts.map +1 -1
- package/dist/bridges/windsurf.d.ts +3 -0
- package/dist/bridges/windsurf.d.ts.map +1 -0
- package/dist/bridges/windsurf.js +45 -0
- package/dist/bridges/windsurf.js.map +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +59 -11
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +48 -30
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +66 -25
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain.d.ts +6 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +109 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +19 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +33 -19
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +30 -8
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/helpers.d.ts +1 -0
- package/dist/core/helpers.d.ts.map +1 -1
- package/dist/core/helpers.js +22 -1
- package/dist/core/helpers.js.map +1 -1
- package/dist/core/markers.d.ts +1 -0
- package/dist/core/markers.d.ts.map +1 -1
- package/dist/core/markers.js +12 -0
- package/dist/core/markers.js.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +5 -0
- package/dist/core/parser.js.map +1 -1
- package/dist/core/schema.d.ts +8 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +10 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/detect-tools.d.ts +1 -1
- package/dist/utils/detect-tools.d.ts.map +1 -1
- package/dist/utils/detect-tools.js +3 -1
- package/dist/utils/detect-tools.js.map +1 -1
- package/dist/utils/ui.d.ts +29 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +84 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# dev-workflows
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/dev-workflows)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
[](https://docs.dev-workflows.com)
|
|
6
|
+
|
|
7
|
+
|
|
3
8
|
> Define AI coding rules once. Compile to CLAUDE.md, .cursor/rules, GEMINI.md.
|
|
4
9
|
|
|
5
10
|
AI coding tools (Claude Code, Cursor, Gemini CLI) each use different config files for project rules. dev-workflows lets you define rules once in YAML and compile them to each tool's native format. No duplication, no drift.
|
|
@@ -8,6 +13,8 @@ AI coding tools (Claude Code, Cursor, Gemini CLI) each use different config file
|
|
|
8
13
|
|
|
9
14
|
```bash
|
|
10
15
|
npx dev-workflows init
|
|
16
|
+
devw add typescript-strict
|
|
17
|
+
devw compile
|
|
11
18
|
```
|
|
12
19
|
|
|
13
20
|
Requires Node.js >= 22.
|
|
@@ -56,6 +63,10 @@ Content outside the markers is preserved — your manual notes stay intact.
|
|
|
56
63
|
| `devw list` | List available blocks and rules |
|
|
57
64
|
| `devw doctor` | Validate configuration |
|
|
58
65
|
|
|
66
|
+
## Contributing
|
|
67
|
+
|
|
68
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
69
|
+
|
|
59
70
|
## License
|
|
60
71
|
|
|
61
72
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/bridges/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/bridges/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;AAiC9D,eAAO,MAAM,YAAY,EAAE,MAU1B,CAAC"}
|
package/dist/bridges/claude.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { filterRules, groupByScope,
|
|
1
|
+
import { filterRules, groupByScope, formatScopeHeading } from '../core/helpers.js';
|
|
2
2
|
function buildMarkdown(rules) {
|
|
3
3
|
const lines = [
|
|
4
4
|
'# Project Rules',
|
|
@@ -6,12 +6,13 @@ function buildMarkdown(rules) {
|
|
|
6
6
|
const filtered = filterRules(rules);
|
|
7
7
|
const grouped = groupByScope(filtered);
|
|
8
8
|
for (const [scope, scopeRules] of grouped) {
|
|
9
|
-
lines.push('', `## ${
|
|
9
|
+
lines.push('', `## ${formatScopeHeading(scope)}`);
|
|
10
|
+
lines.push('');
|
|
10
11
|
for (const rule of scopeRules) {
|
|
11
12
|
const contentLines = rule.content.split('\n');
|
|
12
13
|
const first = contentLines[0];
|
|
13
14
|
if (first !== undefined) {
|
|
14
|
-
lines.push(
|
|
15
|
+
lines.push(`- ${first}`);
|
|
15
16
|
}
|
|
16
17
|
for (let i = 1; i < contentLines.length; i++) {
|
|
17
18
|
const line = contentLines[i];
|
|
@@ -27,6 +28,7 @@ function buildMarkdown(rules) {
|
|
|
27
28
|
export const claudeBridge = {
|
|
28
29
|
id: 'claude',
|
|
29
30
|
outputPaths: ['CLAUDE.md'],
|
|
31
|
+
usesMarkers: true,
|
|
30
32
|
compile(rules, _config) {
|
|
31
33
|
const output = new Map();
|
|
32
34
|
output.set('CLAUDE.md', buildMarkdown(rules));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/bridges/claude.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/bridges/claude.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAa;QACtB,iBAAiB;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,WAAW,EAAE,IAAI;IAEjB,OAAO,CAAC,KAAa,EAAE,OAAsB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../src/bridges/copilot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;AAiC9D,eAAO,MAAM,aAAa,EAAE,MAU3B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { filterRules, groupByScope, formatScopeHeading } from '../core/helpers.js';
|
|
2
|
+
function buildMarkdown(rules) {
|
|
3
|
+
const lines = [
|
|
4
|
+
'# Project Rules',
|
|
5
|
+
];
|
|
6
|
+
const filtered = filterRules(rules);
|
|
7
|
+
const grouped = groupByScope(filtered);
|
|
8
|
+
for (const [scope, scopeRules] of grouped) {
|
|
9
|
+
lines.push('', `## ${formatScopeHeading(scope)}`);
|
|
10
|
+
lines.push('');
|
|
11
|
+
for (const rule of scopeRules) {
|
|
12
|
+
const contentLines = rule.content.split('\n');
|
|
13
|
+
const first = contentLines[0];
|
|
14
|
+
if (first !== undefined) {
|
|
15
|
+
lines.push(`- ${first}`);
|
|
16
|
+
}
|
|
17
|
+
for (let i = 1; i < contentLines.length; i++) {
|
|
18
|
+
const line = contentLines[i];
|
|
19
|
+
if (line !== undefined) {
|
|
20
|
+
lines.push(` ${line}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
lines.push('');
|
|
26
|
+
return lines.join('\n');
|
|
27
|
+
}
|
|
28
|
+
export const copilotBridge = {
|
|
29
|
+
id: 'copilot',
|
|
30
|
+
outputPaths: ['.github/copilot-instructions.md'],
|
|
31
|
+
usesMarkers: true,
|
|
32
|
+
compile(rules, _config) {
|
|
33
|
+
const output = new Map();
|
|
34
|
+
output.set('.github/copilot-instructions.md', buildMarkdown(rules));
|
|
35
|
+
return output;
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/bridges/copilot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAa;QACtB,iBAAiB;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,EAAE,EAAE,SAAS;IACb,WAAW,EAAE,CAAC,iCAAiC,CAAC;IAChD,WAAW,EAAE,IAAI;IAEjB,OAAO,CAAC,KAAa,EAAE,OAAsB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/bridges/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/bridges/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;AAyC9D,eAAO,MAAM,YAAY,EAAE,MAU1B,CAAC"}
|
package/dist/bridges/cursor.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { filterRules, groupByScope,
|
|
1
|
+
import { filterRules, groupByScope, formatScopeHeading } from '../core/helpers.js';
|
|
2
2
|
const FRONTMATTER = `---
|
|
3
3
|
description: Project rules generated by dev-workflows
|
|
4
4
|
globs:
|
|
@@ -13,12 +13,13 @@ function buildMdc(rules) {
|
|
|
13
13
|
const filtered = filterRules(rules);
|
|
14
14
|
const grouped = groupByScope(filtered);
|
|
15
15
|
for (const [scope, scopeRules] of grouped) {
|
|
16
|
-
lines.push('', `## ${
|
|
16
|
+
lines.push('', `## ${formatScopeHeading(scope)}`);
|
|
17
|
+
lines.push('');
|
|
17
18
|
for (const rule of scopeRules) {
|
|
18
19
|
const contentLines = rule.content.split('\n');
|
|
19
20
|
const first = contentLines[0];
|
|
20
21
|
if (first !== undefined) {
|
|
21
|
-
lines.push(
|
|
22
|
+
lines.push(`- ${first}`);
|
|
22
23
|
}
|
|
23
24
|
for (let i = 1; i < contentLines.length; i++) {
|
|
24
25
|
const line = contentLines[i];
|
|
@@ -34,6 +35,7 @@ function buildMdc(rules) {
|
|
|
34
35
|
export const cursorBridge = {
|
|
35
36
|
id: 'cursor',
|
|
36
37
|
outputPaths: ['.cursor/rules/devworkflows.mdc'],
|
|
38
|
+
usesMarkers: false,
|
|
37
39
|
compile(rules, _config) {
|
|
38
40
|
const output = new Map();
|
|
39
41
|
output.set('.cursor/rules/devworkflows.mdc', buildMdc(rules));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/bridges/cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/bridges/cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,MAAM,WAAW,GAAG;;;;IAIhB,CAAC;AAEL,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,KAAK,GAAa;QACtB,WAAW;QACX,EAAE;QACF,4DAA4D;KAC7D,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,CAAC,gCAAgC,CAAC;IAC/C,WAAW,EAAE,KAAK;IAElB,OAAO,CAAC,KAAa,EAAE,OAAsB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/bridges/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/bridges/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;AAiC9D,eAAO,MAAM,YAAY,EAAE,MAU1B,CAAC"}
|
package/dist/bridges/gemini.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { filterRules, groupByScope,
|
|
1
|
+
import { filterRules, groupByScope, formatScopeHeading } from '../core/helpers.js';
|
|
2
2
|
function buildMarkdown(rules) {
|
|
3
3
|
const lines = [
|
|
4
4
|
'# Project Rules',
|
|
@@ -6,12 +6,13 @@ function buildMarkdown(rules) {
|
|
|
6
6
|
const filtered = filterRules(rules);
|
|
7
7
|
const grouped = groupByScope(filtered);
|
|
8
8
|
for (const [scope, scopeRules] of grouped) {
|
|
9
|
-
lines.push('', `## ${
|
|
9
|
+
lines.push('', `## ${formatScopeHeading(scope)}`);
|
|
10
|
+
lines.push('');
|
|
10
11
|
for (const rule of scopeRules) {
|
|
11
12
|
const contentLines = rule.content.split('\n');
|
|
12
13
|
const first = contentLines[0];
|
|
13
14
|
if (first !== undefined) {
|
|
14
|
-
lines.push(
|
|
15
|
+
lines.push(`- ${first}`);
|
|
15
16
|
}
|
|
16
17
|
for (let i = 1; i < contentLines.length; i++) {
|
|
17
18
|
const line = contentLines[i];
|
|
@@ -27,6 +28,7 @@ function buildMarkdown(rules) {
|
|
|
27
28
|
export const geminiBridge = {
|
|
28
29
|
id: 'gemini',
|
|
29
30
|
outputPaths: ['GEMINI.md'],
|
|
31
|
+
usesMarkers: true,
|
|
30
32
|
compile(rules, _config) {
|
|
31
33
|
const output = new Map();
|
|
32
34
|
output.set('GEMINI.md', buildMarkdown(rules));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/bridges/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/bridges/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAa;QACtB,iBAAiB;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,WAAW,EAAE,IAAI;IAEjB,OAAO,CAAC,KAAa,EAAE,OAAsB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
package/dist/bridges/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridges/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpE"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridges/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/bridges/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,YAAY,CAAC;AA6C9D,eAAO,MAAM,cAAc,EAAE,MAU5B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { filterRules, groupByScope, formatScopeHeading } from '../core/helpers.js';
|
|
2
|
+
const WINDSURF_CHAR_LIMIT = 6000;
|
|
3
|
+
function buildMarkdown(rules) {
|
|
4
|
+
const lines = [
|
|
5
|
+
'<!-- Generated by dev-workflows. Do not edit manually. -->',
|
|
6
|
+
'',
|
|
7
|
+
'# Project Rules',
|
|
8
|
+
];
|
|
9
|
+
const filtered = filterRules(rules);
|
|
10
|
+
const grouped = groupByScope(filtered);
|
|
11
|
+
for (const [scope, scopeRules] of grouped) {
|
|
12
|
+
lines.push('', `## ${formatScopeHeading(scope)}`);
|
|
13
|
+
lines.push('');
|
|
14
|
+
for (const rule of scopeRules) {
|
|
15
|
+
const contentLines = rule.content.split('\n');
|
|
16
|
+
const first = contentLines[0];
|
|
17
|
+
if (first !== undefined) {
|
|
18
|
+
lines.push(`- ${first}`);
|
|
19
|
+
}
|
|
20
|
+
for (let i = 1; i < contentLines.length; i++) {
|
|
21
|
+
const line = contentLines[i];
|
|
22
|
+
if (line !== undefined) {
|
|
23
|
+
lines.push(` ${line}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
lines.push('');
|
|
29
|
+
const content = lines.join('\n');
|
|
30
|
+
if (content.length > WINDSURF_CHAR_LIMIT) {
|
|
31
|
+
console.warn(`Warning: Windsurf output is ${String(content.length)} chars (limit: ${String(WINDSURF_CHAR_LIMIT)}). Windsurf may truncate the content.`);
|
|
32
|
+
}
|
|
33
|
+
return content;
|
|
34
|
+
}
|
|
35
|
+
export const windsurfBridge = {
|
|
36
|
+
id: 'windsurf',
|
|
37
|
+
outputPaths: ['.windsurf/rules/devworkflows.md'],
|
|
38
|
+
usesMarkers: false,
|
|
39
|
+
compile(rules, _config) {
|
|
40
|
+
const output = new Map();
|
|
41
|
+
output.set('.windsurf/rules/devworkflows.md', buildMarkdown(rules));
|
|
42
|
+
return output;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/bridges/windsurf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAa;QACtB,4DAA4D;QAC5D,EAAE;QACF,iBAAiB;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CACV,+BAA+B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,MAAM,CAAC,mBAAmB,CAAC,uCAAuC,CAC1I,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,EAAE,EAAE,UAAU;IACd,WAAW,EAAE,CAAC,iCAAiC,CAAC;IAChD,WAAW,EAAE,KAAK;IAElB,OAAO,CAAC,KAAa,EAAE,OAAsB;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQzD"}
|
package/dist/commands/add.js
CHANGED
|
@@ -1,42 +1,90 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { select } from '@inquirer/prompts';
|
|
3
4
|
import { loadAllBlocks, loadBlock } from '../blocks/registry.js';
|
|
4
5
|
import { installBlock } from '../blocks/installer.js';
|
|
5
6
|
import { fileExists } from '../utils/fs.js';
|
|
7
|
+
import { readConfig } from '../core/parser.js';
|
|
8
|
+
import * as ui from '../utils/ui.js';
|
|
9
|
+
import { ICONS } from '../utils/ui.js';
|
|
6
10
|
async function listAvailableBlocks() {
|
|
7
11
|
const blocks = await loadAllBlocks();
|
|
8
12
|
if (blocks.length === 0) {
|
|
9
|
-
|
|
13
|
+
ui.warn('No blocks available');
|
|
10
14
|
return;
|
|
11
15
|
}
|
|
12
|
-
|
|
16
|
+
// Try to load installed blocks from config
|
|
17
|
+
let installedBlocks = [];
|
|
18
|
+
try {
|
|
19
|
+
const config = await readConfig(process.cwd());
|
|
20
|
+
installedBlocks = config.blocks;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// No config — that's fine, just don't show installed indicator
|
|
24
|
+
}
|
|
25
|
+
ui.header('Available blocks');
|
|
26
|
+
ui.newline();
|
|
13
27
|
for (const block of blocks) {
|
|
14
|
-
|
|
15
|
-
console.log(`
|
|
16
|
-
console.log(
|
|
28
|
+
const installed = installedBlocks.includes(block.id) ? chalk.green(` ${ICONS.success}`) + chalk.dim(' installed') : '';
|
|
29
|
+
console.log(`${chalk.cyan(` ${block.id}`)} ${chalk.dim(ICONS.dash)} ${block.description}${installed}`);
|
|
30
|
+
console.log(` ${chalk.dim(`${String(block.rules.length)} rules ${ICONS.dot} v${block.version}`)}`);
|
|
31
|
+
ui.newline();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function selectBlock(installedBlocks) {
|
|
35
|
+
const blocks = await loadAllBlocks();
|
|
36
|
+
if (blocks.length === 0) {
|
|
37
|
+
ui.warn('No blocks available');
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const available = blocks.filter((b) => !installedBlocks.includes(b.id));
|
|
41
|
+
if (available.length === 0) {
|
|
42
|
+
ui.success('All blocks already installed');
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
return await select({
|
|
47
|
+
message: 'Which block to install?',
|
|
48
|
+
choices: blocks.map((b) => {
|
|
49
|
+
const installed = installedBlocks.includes(b.id);
|
|
50
|
+
return {
|
|
51
|
+
name: installed ? `${b.id} ${ICONS.success} installed` : `${b.id} ${ICONS.dash} ${b.description}`,
|
|
52
|
+
value: b.id,
|
|
53
|
+
disabled: installed,
|
|
54
|
+
};
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
17
60
|
}
|
|
18
61
|
}
|
|
19
62
|
async function runAdd(blockId, options) {
|
|
20
|
-
if (options.list
|
|
63
|
+
if (options.list) {
|
|
21
64
|
await listAvailableBlocks();
|
|
22
65
|
return;
|
|
23
66
|
}
|
|
24
67
|
const cwd = process.cwd();
|
|
25
68
|
if (!(await fileExists(join(cwd, '.dwf', 'config.yml')))) {
|
|
26
|
-
|
|
27
|
-
console.error('Run "devw init" first.');
|
|
69
|
+
ui.error('.dwf/config.yml not found', 'Run devw init to initialize the project');
|
|
28
70
|
process.exitCode = 1;
|
|
29
71
|
return;
|
|
30
72
|
}
|
|
73
|
+
if (!blockId) {
|
|
74
|
+
const config = await readConfig(cwd);
|
|
75
|
+
const selected = await selectBlock(config.blocks);
|
|
76
|
+
if (!selected)
|
|
77
|
+
return;
|
|
78
|
+
blockId = selected;
|
|
79
|
+
}
|
|
31
80
|
const block = await loadBlock(blockId);
|
|
32
81
|
if (!block) {
|
|
33
|
-
|
|
34
|
-
console.error('Run "devw add --list" to see available blocks.');
|
|
82
|
+
ui.error(`Block "${blockId}" not found`, 'Run devw add --list to see available blocks');
|
|
35
83
|
process.exitCode = 1;
|
|
36
84
|
return;
|
|
37
85
|
}
|
|
38
86
|
const rulesAdded = await installBlock(cwd, block);
|
|
39
|
-
|
|
87
|
+
ui.success(`Added ${block.id} (${String(rulesAdded)} rules)`);
|
|
40
88
|
if (!options.noCompile) {
|
|
41
89
|
// Dynamic import to avoid circular dependency
|
|
42
90
|
const { runCompileFromAdd } = await import('./compile.js');
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmID,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ7D"}
|
package/dist/commands/compile.js
CHANGED
|
@@ -6,17 +6,21 @@ import { computeRulesHash, writeHash } from '../core/hash.js';
|
|
|
6
6
|
import { claudeBridge } from '../bridges/claude.js';
|
|
7
7
|
import { cursorBridge } from '../bridges/cursor.js';
|
|
8
8
|
import { geminiBridge } from '../bridges/gemini.js';
|
|
9
|
-
import {
|
|
9
|
+
import { windsurfBridge } from '../bridges/windsurf.js';
|
|
10
|
+
import { copilotBridge } from '../bridges/copilot.js';
|
|
11
|
+
import { mergeMarkedContent, removeMarkedBlock } from '../core/markers.js';
|
|
10
12
|
import { fileExists } from '../utils/fs.js';
|
|
11
|
-
|
|
13
|
+
import * as ui from '../utils/ui.js';
|
|
14
|
+
import { ICONS } from '../utils/ui.js';
|
|
15
|
+
const BRIDGES = [claudeBridge, cursorBridge, geminiBridge, windsurfBridge, copilotBridge];
|
|
12
16
|
function getBridge(id) {
|
|
13
17
|
return BRIDGES.find((b) => b.id === id);
|
|
14
18
|
}
|
|
15
19
|
async function runCompile(options) {
|
|
16
20
|
const cwd = process.cwd();
|
|
21
|
+
const startTime = performance.now();
|
|
17
22
|
if (!(await fileExists(join(cwd, '.dwf', 'config.yml')))) {
|
|
18
|
-
|
|
19
|
-
console.error('Run "devw init" first.');
|
|
23
|
+
ui.error('.dwf/config.yml not found', 'Run devw init to initialize the project');
|
|
20
24
|
process.exitCode = 1;
|
|
21
25
|
return;
|
|
22
26
|
}
|
|
@@ -26,37 +30,56 @@ async function runCompile(options) {
|
|
|
26
30
|
let toolIds = config.tools;
|
|
27
31
|
if (options.tool) {
|
|
28
32
|
if (!config.tools.includes(options.tool)) {
|
|
29
|
-
|
|
30
|
-
console.error(`Configured tools: ${config.tools.join(', ')}`);
|
|
33
|
+
ui.error(`Tool "${options.tool}" is not configured in .dwf/config.yml`, `Configured tools: ${config.tools.join(', ')}`);
|
|
31
34
|
process.exitCode = 1;
|
|
32
35
|
return;
|
|
33
36
|
}
|
|
34
37
|
toolIds = [options.tool];
|
|
35
38
|
}
|
|
36
39
|
if (options.verbose) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
ui.keyValue('Project:', chalk.bold(config.project.name));
|
|
41
|
+
ui.keyValue('Mode:', config.mode);
|
|
42
|
+
ui.keyValue('Rules:', String(rules.length));
|
|
43
|
+
ui.keyValue('Tools:', chalk.cyan(toolIds.join(', ')));
|
|
44
|
+
ui.newline();
|
|
42
45
|
}
|
|
43
46
|
const activeRules = rules.filter((r) => r.enabled);
|
|
44
|
-
if (activeRules.length === 0) {
|
|
45
|
-
console.log(chalk.yellow('No active rules found in .dwf/rules/. Nothing to compile.'));
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
47
|
let filesWritten = 0;
|
|
48
|
+
const writtenPaths = [];
|
|
49
49
|
for (const toolId of toolIds) {
|
|
50
50
|
const bridge = getBridge(toolId);
|
|
51
51
|
if (!bridge) {
|
|
52
|
-
|
|
52
|
+
ui.warn(`No bridge for tool "${toolId}", skipping`);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// When zero active rules, clean up output files instead of writing empty content
|
|
56
|
+
if (activeRules.length === 0 && !options.dryRun) {
|
|
57
|
+
for (const relativePath of bridge.outputPaths) {
|
|
58
|
+
const absolutePath = join(cwd, relativePath);
|
|
59
|
+
if (!(await fileExists(absolutePath)))
|
|
60
|
+
continue;
|
|
61
|
+
if (bridge.usesMarkers) {
|
|
62
|
+
const existing = await readFile(absolutePath, 'utf-8');
|
|
63
|
+
const cleaned = removeMarkedBlock(existing);
|
|
64
|
+
if (cleaned.length === 0) {
|
|
65
|
+
await unlink(absolutePath);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
await writeFile(absolutePath, cleaned + '\n', 'utf-8');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
await unlink(absolutePath);
|
|
73
|
+
}
|
|
74
|
+
writtenPaths.push(relativePath);
|
|
75
|
+
filesWritten++;
|
|
76
|
+
}
|
|
53
77
|
continue;
|
|
54
78
|
}
|
|
55
79
|
const outputs = bridge.compile(rules, config);
|
|
56
80
|
for (const [relativePath, rawContent] of outputs) {
|
|
57
|
-
const isMarkdownBridge = rawContent.startsWith('# Project Rules');
|
|
58
81
|
let content = rawContent;
|
|
59
|
-
if (
|
|
82
|
+
if (bridge.usesMarkers) {
|
|
60
83
|
const absoluteCheck = join(cwd, relativePath);
|
|
61
84
|
let existing = null;
|
|
62
85
|
try {
|
|
@@ -84,27 +107,22 @@ async function runCompile(options) {
|
|
|
84
107
|
await unlink(absolutePath);
|
|
85
108
|
}
|
|
86
109
|
await symlink(cachePath, absolutePath);
|
|
87
|
-
if (options.verbose) {
|
|
88
|
-
console.log(` ${chalk.dim(relativePath)} -> ${chalk.dim(`.dwf/.cache/${relativePath}`)}`);
|
|
89
|
-
}
|
|
90
110
|
}
|
|
91
111
|
else {
|
|
92
112
|
await writeFile(absolutePath, content, 'utf-8');
|
|
93
|
-
if (options.verbose) {
|
|
94
|
-
console.log(` ${chalk.dim(relativePath)}`);
|
|
95
|
-
}
|
|
96
113
|
}
|
|
114
|
+
writtenPaths.push(relativePath);
|
|
97
115
|
filesWritten++;
|
|
98
116
|
}
|
|
99
117
|
}
|
|
100
118
|
if (!options.dryRun) {
|
|
101
119
|
const hash = computeRulesHash(activeRules);
|
|
102
120
|
await writeHash(cwd, hash);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
121
|
+
const elapsed = performance.now() - startTime;
|
|
122
|
+
ui.newline();
|
|
123
|
+
ui.success(`Compiled ${String(activeRules.length)} rules ${ICONS.arrow} ${String(filesWritten)} file${filesWritten !== 1 ? 's' : ''} ${ui.timing(elapsed)}`);
|
|
124
|
+
ui.newline();
|
|
125
|
+
ui.list(writtenPaths);
|
|
108
126
|
}
|
|
109
127
|
}
|
|
110
128
|
export async function runCompileFromAdd() {
|
|
@@ -114,7 +132,7 @@ export function registerCompileCommand(program) {
|
|
|
114
132
|
program
|
|
115
133
|
.command('compile')
|
|
116
134
|
.description('Compile .dwf/ rules into editor-specific config files')
|
|
117
|
-
.option('--tool <tool>', 'Compile only a specific bridge (claude, cursor, gemini)')
|
|
135
|
+
.option('--tool <tool>', 'Compile only a specific bridge (claude, cursor, gemini, windsurf, copilot)')
|
|
118
136
|
.option('--dry-run', 'Show output without writing files')
|
|
119
137
|
.option('--verbose', 'Show detailed output')
|
|
120
138
|
.action((options) => runCompile(options));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export declare function checkConfigExists(cwd: string): Promise<CheckResult>;
|
|
|
9
9
|
export declare function checkConfigValid(cwd: string): Promise<CheckResult>;
|
|
10
10
|
export declare function checkRulesValid(cwd: string): Promise<CheckResult>;
|
|
11
11
|
export declare function checkDuplicateIds(rules: Rule[]): CheckResult;
|
|
12
|
+
export declare function checkScopeFormat(rules: Rule[]): CheckResult;
|
|
12
13
|
export declare function checkBridgesAvailable(config: ProjectConfig): CheckResult;
|
|
13
14
|
export declare function checkSymlinks(cwd: string, config: ProjectConfig): Promise<CheckResult>;
|
|
14
15
|
export declare function checkHashSync(cwd: string, rules: Rule[]): Promise<CheckResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAU,aAAa,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAQvE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKzE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQxE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2CvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CA2B5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAmB3D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAWxE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC5F;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBpF;AAkGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK5D"}
|