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.
Files changed (70) hide show
  1. package/README.md +11 -0
  2. package/dist/bridges/claude.d.ts.map +1 -1
  3. package/dist/bridges/claude.js +5 -3
  4. package/dist/bridges/claude.js.map +1 -1
  5. package/dist/bridges/copilot.d.ts +3 -0
  6. package/dist/bridges/copilot.d.ts.map +1 -0
  7. package/dist/bridges/copilot.js +38 -0
  8. package/dist/bridges/copilot.js.map +1 -0
  9. package/dist/bridges/cursor.d.ts.map +1 -1
  10. package/dist/bridges/cursor.js +5 -3
  11. package/dist/bridges/cursor.js.map +1 -1
  12. package/dist/bridges/gemini.d.ts.map +1 -1
  13. package/dist/bridges/gemini.js +5 -3
  14. package/dist/bridges/gemini.js.map +1 -1
  15. package/dist/bridges/types.d.ts +1 -0
  16. package/dist/bridges/types.d.ts.map +1 -1
  17. package/dist/bridges/windsurf.d.ts +3 -0
  18. package/dist/bridges/windsurf.d.ts.map +1 -0
  19. package/dist/bridges/windsurf.js +45 -0
  20. package/dist/bridges/windsurf.js.map +1 -0
  21. package/dist/commands/add.d.ts.map +1 -1
  22. package/dist/commands/add.js +59 -11
  23. package/dist/commands/add.js.map +1 -1
  24. package/dist/commands/compile.d.ts.map +1 -1
  25. package/dist/commands/compile.js +48 -30
  26. package/dist/commands/compile.js.map +1 -1
  27. package/dist/commands/doctor.d.ts +1 -0
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +66 -25
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/explain.d.ts +6 -0
  32. package/dist/commands/explain.d.ts.map +1 -0
  33. package/dist/commands/explain.js +109 -0
  34. package/dist/commands/explain.js.map +1 -0
  35. package/dist/commands/init.d.ts.map +1 -1
  36. package/dist/commands/init.js +19 -17
  37. package/dist/commands/init.js.map +1 -1
  38. package/dist/commands/list.d.ts.map +1 -1
  39. package/dist/commands/list.js +33 -19
  40. package/dist/commands/list.js.map +1 -1
  41. package/dist/commands/remove.d.ts.map +1 -1
  42. package/dist/commands/remove.js +30 -8
  43. package/dist/commands/remove.js.map +1 -1
  44. package/dist/core/helpers.d.ts +1 -0
  45. package/dist/core/helpers.d.ts.map +1 -1
  46. package/dist/core/helpers.js +22 -1
  47. package/dist/core/helpers.js.map +1 -1
  48. package/dist/core/markers.d.ts +1 -0
  49. package/dist/core/markers.d.ts.map +1 -1
  50. package/dist/core/markers.js +12 -0
  51. package/dist/core/markers.js.map +1 -1
  52. package/dist/core/parser.d.ts.map +1 -1
  53. package/dist/core/parser.js +5 -0
  54. package/dist/core/parser.js.map +1 -1
  55. package/dist/core/schema.d.ts +8 -0
  56. package/dist/core/schema.d.ts.map +1 -0
  57. package/dist/core/schema.js +10 -0
  58. package/dist/core/schema.js.map +1 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/utils/detect-tools.d.ts +1 -1
  63. package/dist/utils/detect-tools.d.ts.map +1 -1
  64. package/dist/utils/detect-tools.js +3 -1
  65. package/dist/utils/detect-tools.js.map +1 -1
  66. package/dist/utils/ui.d.ts +29 -0
  67. package/dist/utils/ui.d.ts.map +1 -0
  68. package/dist/utils/ui.js +84 -0
  69. package/dist/utils/ui.js.map +1 -0
  70. package/package.json +3 -4
package/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # dev-workflows
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/dev-workflows)](https://www.npmjs.com/package/dev-workflows)
4
+ [![license](https://img.shields.io/npm/l/dev-workflows)](./LICENSE)
5
+ [![docs](https://img.shields.io/badge/docs-dev--workflows.com-blue)](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;AAgC9D,eAAO,MAAM,YAAY,EAAE,MAS1B,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"}
@@ -1,4 +1,4 @@
1
- import { filterRules, groupByScope, capitalize } from '../core/helpers.js';
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('', `## ${capitalize(scope)}`);
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('', `- ${first}`);
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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,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,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,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,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC/B,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;IAE1B,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"}
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,3 @@
1
+ import type { Bridge } from './types.js';
2
+ export declare const copilotBridge: Bridge;
3
+ //# sourceMappingURL=copilot.d.ts.map
@@ -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;AAwC9D,eAAO,MAAM,YAAY,EAAE,MAS1B,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"}
@@ -1,4 +1,4 @@
1
- import { filterRules, groupByScope, capitalize } from '../core/helpers.js';
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('', `## ${capitalize(scope)}`);
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('', `- ${first}`);
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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,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,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,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,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC/B,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;IAE/C,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
+ {"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;AAgC9D,eAAO,MAAM,YAAY,EAAE,MAS1B,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"}
@@ -1,4 +1,4 @@
1
- import { filterRules, groupByScope, capitalize } from '../core/helpers.js';
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('', `## ${capitalize(scope)}`);
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('', `- ${first}`);
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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3E,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,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,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,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC/B,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;IAE1B,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"}
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"}
@@ -20,6 +20,7 @@ export interface ProjectConfig {
20
20
  export interface Bridge {
21
21
  id: string;
22
22
  outputPaths: string[];
23
+ usesMarkers: boolean;
23
24
  compile(rules: Rule[], config: ProjectConfig): Map<string, string>;
24
25
  }
25
26
  //# sourceMappingURL=types.d.ts.map
@@ -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,3 @@
1
+ import type { Bridge } from './types.js';
2
+ export declare const windsurfBridge: Bridge;
3
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -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;AAMzC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmDD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQzD"}
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"}
@@ -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
- console.log(chalk.yellow('No blocks available.'));
13
+ ui.warn('No blocks available');
10
14
  return;
11
15
  }
12
- console.log(chalk.bold('Available blocks:\n'));
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
- console.log(` ${chalk.cyan(block.id)} ${block.description}`);
15
- console.log(` ${chalk.dim(`${String(block.rules.length)} rules | v${block.version}`)}`);
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 || !blockId) {
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
- console.error(chalk.red('Error: .dwf/config.yml not found.'));
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
- console.error(chalk.red(`Error: block "${blockId}" not found.`));
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
- console.log(chalk.green(`Added block "${block.name}" (${String(rulesAdded)} rules).`));
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');
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
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;AAWzC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyHD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ7D"}
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"}
@@ -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 { mergeMarkedContent } from '../core/markers.js';
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
- const BRIDGES = [claudeBridge, cursorBridge, geminiBridge];
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
- console.error(chalk.red('Error: .dwf/config.yml not found.'));
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
- console.error(chalk.red(`Error: tool "${options.tool}" is not configured in .dwf/config.yml`));
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
- console.log(chalk.dim(`Project: ${config.project.name}`));
38
- console.log(chalk.dim(`Mode: ${config.mode}`));
39
- console.log(chalk.dim(`Rules loaded: ${String(rules.length)}`));
40
- console.log(chalk.dim(`Tools: ${toolIds.join(', ')}`));
41
- console.log('');
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
- console.warn(chalk.yellow(`Warning: no bridge for tool "${toolId}", skipping.`));
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 (isMarkdownBridge && !options.dryRun) {
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
- console.log('');
104
- console.log(chalk.green(`Compiled ${String(filesWritten)} file${filesWritten !== 1 ? 's' : ''} successfully.`));
105
- if (options.verbose) {
106
- console.log(chalk.dim(`Mode: ${config.mode}`));
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":"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"}
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;AAQzC,OAAO,KAAK,EAAU,aAAa,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAMvE,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,CAmB5D;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;AAiFD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK5D"}
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"}