dev-workflows 0.3.0 → 0.5.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 (67) hide show
  1. package/README.md +68 -21
  2. package/dist/bridges/types.d.ts +20 -0
  3. package/dist/bridges/types.d.ts.map +1 -1
  4. package/dist/bridges/types.js +5 -1
  5. package/dist/bridges/types.js.map +1 -1
  6. package/dist/commands/add.d.ts +26 -0
  7. package/dist/commands/add.d.ts.map +1 -1
  8. package/dist/commands/add.js +517 -57
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/compile.d.ts +1 -0
  11. package/dist/commands/compile.d.ts.map +1 -1
  12. package/dist/commands/compile.js +8 -3
  13. package/dist/commands/compile.js.map +1 -1
  14. package/dist/commands/doctor.d.ts +3 -1
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +49 -1
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/init.d.ts +1 -0
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +15 -3
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/list.d.ts.map +1 -1
  23. package/dist/commands/list.js +51 -17
  24. package/dist/commands/list.js.map +1 -1
  25. package/dist/commands/remove.d.ts.map +1 -1
  26. package/dist/commands/remove.js +111 -22
  27. package/dist/commands/remove.js.map +1 -1
  28. package/dist/commands/watch.js +1 -1
  29. package/dist/commands/watch.js.map +1 -1
  30. package/dist/core/assets.d.ts +28 -0
  31. package/dist/core/assets.d.ts.map +1 -0
  32. package/dist/core/assets.js +169 -0
  33. package/dist/core/assets.js.map +1 -0
  34. package/dist/core/converter.d.ts +18 -0
  35. package/dist/core/converter.d.ts.map +1 -0
  36. package/dist/core/converter.js +113 -0
  37. package/dist/core/converter.js.map +1 -0
  38. package/dist/core/parser.d.ts.map +1 -1
  39. package/dist/core/parser.js +28 -0
  40. package/dist/core/parser.js.map +1 -1
  41. package/dist/core/settings-merge.d.ts +6 -0
  42. package/dist/core/settings-merge.d.ts.map +1 -0
  43. package/dist/core/settings-merge.js +41 -0
  44. package/dist/core/settings-merge.js.map +1 -0
  45. package/dist/utils/cache.d.ts +10 -0
  46. package/dist/utils/cache.d.ts.map +1 -0
  47. package/dist/utils/cache.js +43 -0
  48. package/dist/utils/cache.js.map +1 -0
  49. package/dist/utils/github.d.ts +13 -0
  50. package/dist/utils/github.d.ts.map +1 -0
  51. package/dist/utils/github.js +76 -0
  52. package/dist/utils/github.js.map +1 -0
  53. package/package.json +2 -2
  54. package/content/blocks/nextjs-approuter.yml +0 -37
  55. package/content/blocks/react-conventions.yml +0 -36
  56. package/content/blocks/supabase-rls.yml +0 -30
  57. package/content/blocks/tailwind.yml +0 -28
  58. package/content/blocks/testing-basics.yml +0 -36
  59. package/content/blocks/typescript-strict.yml +0 -33
  60. package/dist/blocks/installer.d.ts +0 -4
  61. package/dist/blocks/installer.d.ts.map +0 -1
  62. package/dist/blocks/installer.js +0 -119
  63. package/dist/blocks/installer.js.map +0 -1
  64. package/dist/blocks/registry.d.ts +0 -18
  65. package/dist/blocks/registry.d.ts.map +0 -1
  66. package/dist/blocks/registry.js +0 -85
  67. package/dist/blocks/registry.js.map +0 -1
@@ -1,53 +1,142 @@
1
1
  import { join } from 'node:path';
2
- import { select } from '@inquirer/prompts';
2
+ import { readFile, writeFile, unlink } from 'node:fs/promises';
3
+ import { parse, stringify } from 'yaml';
4
+ import { checkbox, confirm } from '@inquirer/prompts';
3
5
  import { readConfig } from '../core/parser.js';
4
- import { uninstallBlock } from '../blocks/installer.js';
5
6
  import { fileExists } from '../utils/fs.js';
7
+ import { isAssetType, removeAsset } from '../core/assets.js';
8
+ import { validateInput } from './add.js';
6
9
  import * as ui from '../utils/ui.js';
7
- function ensureConfig(cwd) {
8
- return fileExists(join(cwd, '.dwf', 'config.yml'));
10
+ async function removePulledEntry(cwd, path) {
11
+ const configPath = join(cwd, '.dwf', 'config.yml');
12
+ const raw = await readFile(configPath, 'utf-8');
13
+ const doc = parse(raw);
14
+ const pulled = Array.isArray(doc['pulled']) ? doc['pulled'] : [];
15
+ doc['pulled'] = pulled.filter((p) => p.path !== path);
16
+ await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8');
9
17
  }
10
- async function selectBlock(blocks) {
11
- return select({
12
- message: 'Which block to remove?',
13
- choices: blocks.map((id) => ({ name: id, value: id })),
14
- });
18
+ async function removeAssetEntry(cwd, type, name) {
19
+ const configPath = join(cwd, '.dwf', 'config.yml');
20
+ const raw = await readFile(configPath, 'utf-8');
21
+ const doc = parse(raw);
22
+ const assets = Array.isArray(doc['assets']) ? doc['assets'] : [];
23
+ doc['assets'] = assets.filter((a) => !(a.type === type && a.name === name));
24
+ await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8');
15
25
  }
16
- async function runRemove(blockId) {
26
+ async function removeRule(cwd, path) {
27
+ const parts = path.split('/');
28
+ if (parts.length !== 2)
29
+ return false;
30
+ const category = parts[0];
31
+ const name = parts[1];
32
+ if (!category || !name)
33
+ return false;
34
+ const fileName = `pulled-${category}-${name}.yml`;
35
+ const filePath = join(cwd, '.dwf', 'rules', fileName);
36
+ if (await fileExists(filePath)) {
37
+ await unlink(filePath);
38
+ }
39
+ await removePulledEntry(cwd, path);
40
+ return true;
41
+ }
42
+ async function runRemove(ruleArg) {
17
43
  const cwd = process.cwd();
18
- if (!(await ensureConfig(cwd))) {
44
+ if (!(await fileExists(join(cwd, '.dwf', 'config.yml')))) {
19
45
  ui.error('.dwf/config.yml not found', 'Run devw init to initialize the project');
20
46
  process.exitCode = 1;
21
47
  return;
22
48
  }
23
49
  const config = await readConfig(cwd);
24
- if (!blockId) {
25
- if (config.blocks.length === 0) {
26
- ui.warn('No blocks installed');
50
+ if (!ruleArg) {
51
+ if (config.pulled.length === 0) {
52
+ ui.warn('No rules installed');
27
53
  return;
28
54
  }
55
+ let selectedRules;
29
56
  try {
30
- blockId = await selectBlock(config.blocks);
57
+ selectedRules = await checkbox({
58
+ message: 'Which rules to remove?',
59
+ choices: config.pulled.map((p) => ({
60
+ name: `${p.path} (v${p.version})`,
61
+ value: p.path,
62
+ })),
63
+ });
31
64
  }
32
65
  catch {
33
66
  return;
34
67
  }
68
+ if (selectedRules.length === 0) {
69
+ ui.warn('No rules selected');
70
+ return;
71
+ }
72
+ try {
73
+ const shouldProceed = await confirm({
74
+ message: `Remove ${String(selectedRules.length)} rule(s)?`,
75
+ default: true,
76
+ });
77
+ if (!shouldProceed) {
78
+ ui.info('Remove cancelled');
79
+ return;
80
+ }
81
+ }
82
+ catch {
83
+ return;
84
+ }
85
+ for (const path of selectedRules) {
86
+ await removeRule(cwd, path);
87
+ ui.success(`Removed ${path}`);
88
+ }
89
+ const { runCompileFromAdd } = await import('./compile.js');
90
+ await runCompileFromAdd();
91
+ return;
92
+ }
93
+ if (!ruleArg.includes('/')) {
94
+ ui.error('Block format is no longer supported', 'Use: devw remove <category>/<rule>');
95
+ process.exitCode = 1;
96
+ return;
97
+ }
98
+ const parsed = validateInput(ruleArg);
99
+ if (!parsed) {
100
+ ui.error(`Invalid rule path "${ruleArg}"`, 'Format: <category>/<rule> — both must be kebab-case (e.g., typescript/strict)');
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ const { category, name } = parsed;
105
+ if (isAssetType(category)) {
106
+ const installed = config.assets.find((a) => a.type === category && a.name === name);
107
+ if (!installed) {
108
+ ui.error(`Asset "${category}/${name}" is not installed`, config.assets.length > 0
109
+ ? `Installed assets: ${config.assets.map((a) => `${a.type}/${a.name}`).join(', ')}`
110
+ : 'No assets installed');
111
+ process.exitCode = 1;
112
+ return;
113
+ }
114
+ await removeAsset(cwd, category, name);
115
+ await removeAssetEntry(cwd, category, name);
116
+ ui.success(`Removed ${category}/${name}`);
117
+ const { runCompileFromAdd } = await import('./compile.js');
118
+ await runCompileFromAdd();
119
+ return;
35
120
  }
36
- if (!config.blocks.includes(blockId)) {
37
- ui.error(`Block "${blockId}" is not installed`, `Installed blocks: ${config.blocks.length > 0 ? config.blocks.join(', ') : '(none)'}`);
121
+ const source = `${category}/${name}`;
122
+ const installed = config.pulled.find((p) => p.path === source);
123
+ if (!installed) {
124
+ ui.error(`Rule "${source}" is not installed`, config.pulled.length > 0
125
+ ? `Installed rules: ${config.pulled.map((p) => p.path).join(', ')}`
126
+ : 'No rules installed');
38
127
  process.exitCode = 1;
39
128
  return;
40
129
  }
41
- const rulesRemoved = await uninstallBlock(cwd, blockId);
42
- ui.success(`Removed ${blockId} (${String(rulesRemoved)} rules)`);
130
+ await removeRule(cwd, source);
131
+ ui.success(`Removed ${source}`);
43
132
  const { runCompileFromAdd } = await import('./compile.js');
44
133
  await runCompileFromAdd();
45
134
  }
46
135
  export function registerRemoveCommand(program) {
47
136
  program
48
137
  .command('remove')
49
- .argument('[block]', 'Block ID to remove')
50
- .description('Remove an installed rule block')
51
- .action((blockId) => runRemove(blockId));
138
+ .argument('[rule]', 'Rule path: <category>/<rule>')
139
+ .description('Remove an installed rule')
140
+ .action((rule) => runRemove(rule));
52
141
  }
53
142
  //# sourceMappingURL=remove.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAgB;IACzC,OAAO,MAAM,CAAS;QACpB,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAgB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,KAAK,CAAC,2BAA2B,EAAE,yCAAyC,CAAC,CAAC;QACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,EAAE,CAAC,KAAK,CAAC,UAAU,OAAO,oBAAoB,EAAE,qBAAqB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,EAAE,CAAC,OAAO,CAAC,WAAW,OAAO,KAAK,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEjE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACzC,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ async function runWatch(options) {
34
34
  process.exitCode = 1;
35
35
  return;
36
36
  }
37
- const watcher = chokidar.watch(['**/*.yml', '**/*.yaml'], {
37
+ const watcher = chokidar.watch(['**/*.yml', '**/*.yaml', 'assets/**/*.md', 'assets/**/*.json'], {
38
38
  cwd: dwfDir,
39
39
  ignoreInitial: true,
40
40
  awaitWriteFinish: { stabilityThreshold: 100, pollInterval: 50 },
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AssetType, ProjectConfig } from '../bridges/types.js';
2
+ export declare function isAssetType(category: string): category is AssetType;
3
+ export interface AssetFrontmatter {
4
+ name: string;
5
+ description: string;
6
+ version: string;
7
+ tool?: string;
8
+ output_path?: string;
9
+ }
10
+ export declare function parseAssetFrontmatter(content: string): {
11
+ frontmatter: AssetFrontmatter;
12
+ body: string;
13
+ };
14
+ export interface AssetFile {
15
+ type: AssetType;
16
+ name: string;
17
+ content: string;
18
+ }
19
+ export declare function readAssets(cwd: string): Promise<AssetFile[]>;
20
+ export interface DeployResult {
21
+ deployed: string[];
22
+ }
23
+ export declare function deployCommands(cwd: string, _config: ProjectConfig): Promise<DeployResult>;
24
+ export declare function deployTemplates(cwd: string, _config: ProjectConfig): Promise<DeployResult>;
25
+ export declare function deployHooks(cwd: string, _config: ProjectConfig): Promise<DeployResult>;
26
+ export declare function deployAssets(cwd: string, config: ProjectConfig): Promise<DeployResult>;
27
+ export declare function removeAsset(cwd: string, type: AssetType, name: string): Promise<boolean>;
28
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/core/assets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,SAAS,CAEnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA+BtG;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BlE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B/F;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAyBhG;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAiC5F;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAa5F;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9F"}
@@ -0,0 +1,169 @@
1
+ import { readFile, writeFile, readdir, mkdir, unlink } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { ASSET_TYPE } from '../bridges/types.js';
5
+ import { fileExists } from '../utils/fs.js';
6
+ import { mergeSettingsFile } from './settings-merge.js';
7
+ const ASSET_TYPE_VALUES = new Set(Object.values(ASSET_TYPE));
8
+ export function isAssetType(category) {
9
+ return ASSET_TYPE_VALUES.has(category);
10
+ }
11
+ export function parseAssetFrontmatter(content) {
12
+ const fmRegex = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
13
+ const match = fmRegex.exec(content);
14
+ if (!match?.[1]) {
15
+ return {
16
+ frontmatter: { name: '', description: '', version: '0.1.0' },
17
+ body: content,
18
+ };
19
+ }
20
+ const raw = parseYaml(match[1]);
21
+ if (!raw || typeof raw !== 'object') {
22
+ return {
23
+ frontmatter: { name: '', description: '', version: '0.1.0' },
24
+ body: match[2] ?? '',
25
+ };
26
+ }
27
+ const fm = raw;
28
+ return {
29
+ frontmatter: {
30
+ name: typeof fm['name'] === 'string' ? fm['name'] : '',
31
+ description: typeof fm['description'] === 'string' ? fm['description'] : '',
32
+ version: typeof fm['version'] === 'string' ? fm['version'] : '0.1.0',
33
+ tool: typeof fm['tool'] === 'string' ? fm['tool'] : undefined,
34
+ output_path: typeof fm['output_path'] === 'string' ? fm['output_path'] : undefined,
35
+ },
36
+ body: match[2] ?? '',
37
+ };
38
+ }
39
+ export async function readAssets(cwd) {
40
+ const assetsDir = join(cwd, '.dwf', 'assets');
41
+ const assets = [];
42
+ for (const type of Object.values(ASSET_TYPE)) {
43
+ const typeDir = join(assetsDir, `${type}s`);
44
+ if (!(await fileExists(typeDir)))
45
+ continue;
46
+ let entries;
47
+ try {
48
+ entries = await readdir(typeDir);
49
+ }
50
+ catch {
51
+ continue;
52
+ }
53
+ for (const file of entries) {
54
+ const filePath = join(typeDir, file);
55
+ try {
56
+ const content = await readFile(filePath, 'utf-8');
57
+ const name = file.replace(/\.(md|json|yml|yaml)$/, '');
58
+ assets.push({ type, name, content });
59
+ }
60
+ catch {
61
+ // Skip unreadable files
62
+ }
63
+ }
64
+ }
65
+ return assets;
66
+ }
67
+ export async function deployCommands(cwd, _config) {
68
+ const commandsDir = join(cwd, '.dwf', 'assets', 'commands');
69
+ const outputDir = join(cwd, '.claude', 'commands');
70
+ const deployed = [];
71
+ if (!(await fileExists(commandsDir)))
72
+ return { deployed };
73
+ let entries;
74
+ try {
75
+ entries = await readdir(commandsDir);
76
+ }
77
+ catch {
78
+ return { deployed };
79
+ }
80
+ await mkdir(outputDir, { recursive: true });
81
+ for (const file of entries) {
82
+ if (!file.endsWith('.md'))
83
+ continue;
84
+ const content = await readFile(join(commandsDir, file), 'utf-8');
85
+ const { body } = parseAssetFrontmatter(content);
86
+ const outputPath = join(outputDir, file);
87
+ await writeFile(outputPath, body.trimStart(), 'utf-8');
88
+ deployed.push(`.claude/commands/${file}`);
89
+ }
90
+ return { deployed };
91
+ }
92
+ export async function deployTemplates(cwd, _config) {
93
+ const templatesDir = join(cwd, '.dwf', 'assets', 'templates');
94
+ const deployed = [];
95
+ if (!(await fileExists(templatesDir)))
96
+ return { deployed };
97
+ let entries;
98
+ try {
99
+ entries = await readdir(templatesDir);
100
+ }
101
+ catch {
102
+ return { deployed };
103
+ }
104
+ for (const file of entries) {
105
+ if (!file.endsWith('.md'))
106
+ continue;
107
+ const content = await readFile(join(templatesDir, file), 'utf-8');
108
+ const { frontmatter, body } = parseAssetFrontmatter(content);
109
+ const outputPath = frontmatter.output_path ?? 'docs/specs';
110
+ const outputDir = join(cwd, outputPath);
111
+ await mkdir(outputDir, { recursive: true });
112
+ await writeFile(join(outputDir, file), body.trimStart(), 'utf-8');
113
+ deployed.push(`${outputPath}/${file}`);
114
+ }
115
+ return { deployed };
116
+ }
117
+ export async function deployHooks(cwd, _config) {
118
+ const hooksDir = join(cwd, '.dwf', 'assets', 'hooks');
119
+ const deployed = [];
120
+ if (!(await fileExists(hooksDir)))
121
+ return { deployed };
122
+ let entries;
123
+ try {
124
+ entries = await readdir(hooksDir);
125
+ }
126
+ catch {
127
+ return { deployed };
128
+ }
129
+ for (const file of entries) {
130
+ if (!file.endsWith('.json'))
131
+ continue;
132
+ const content = await readFile(join(hooksDir, file), 'utf-8');
133
+ let parsed;
134
+ try {
135
+ parsed = JSON.parse(content);
136
+ }
137
+ catch {
138
+ continue;
139
+ }
140
+ if (!parsed || typeof parsed !== 'object')
141
+ continue;
142
+ const hookDoc = parsed;
143
+ const settings = hookDoc['settings'];
144
+ if (!settings || typeof settings !== 'object' || Array.isArray(settings))
145
+ continue;
146
+ await mergeSettingsFile(cwd, settings);
147
+ deployed.push('.claude/settings.local.json');
148
+ }
149
+ return { deployed: [...new Set(deployed)] };
150
+ }
151
+ export async function deployAssets(cwd, config) {
152
+ const allDeployed = [];
153
+ const commandResult = await deployCommands(cwd, config);
154
+ allDeployed.push(...commandResult.deployed);
155
+ const templateResult = await deployTemplates(cwd, config);
156
+ allDeployed.push(...templateResult.deployed);
157
+ const hookResult = await deployHooks(cwd, config);
158
+ allDeployed.push(...hookResult.deployed);
159
+ return { deployed: allDeployed };
160
+ }
161
+ export async function removeAsset(cwd, type, name) {
162
+ const ext = type === 'hook' ? 'json' : 'md';
163
+ const filePath = join(cwd, '.dwf', 'assets', `${type}s`, `${name}.${ext}`);
164
+ if (!(await fileExists(filePath)))
165
+ return false;
166
+ await unlink(filePath);
167
+ return true;
168
+ }
169
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/core/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface ConvertedRule {
2
+ id: string;
3
+ scope: string;
4
+ severity: 'error';
5
+ content: string;
6
+ tags: string[];
7
+ source: string;
8
+ }
9
+ export interface ConvertResult {
10
+ name: string;
11
+ description: string;
12
+ version: string;
13
+ scope: string;
14
+ tags: string[];
15
+ rules: ConvertedRule[];
16
+ }
17
+ export declare function convert(markdown: string, category: string, name: string): ConvertResult;
18
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAqHD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CA2BvF"}
@@ -0,0 +1,113 @@
1
+ import { parse as parseYaml } from 'yaml';
2
+ import { isValidScope } from './schema.js';
3
+ function parseFrontmatter(markdown) {
4
+ const fmRegex = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
5
+ const match = fmRegex.exec(markdown);
6
+ if (!match?.[1]) {
7
+ throw new Error('Invalid rule file: missing YAML frontmatter');
8
+ }
9
+ const raw = parseYaml(match[1]);
10
+ if (!raw || typeof raw !== 'object') {
11
+ throw new Error('Invalid rule file: frontmatter is not an object');
12
+ }
13
+ const fm = raw;
14
+ const name = typeof fm['name'] === 'string' ? fm['name'] : '';
15
+ const description = typeof fm['description'] === 'string' ? fm['description'] : '';
16
+ const version = typeof fm['version'] === 'string' ? fm['version'] : '0.1.0';
17
+ const scope = typeof fm['scope'] === 'string' ? fm['scope'] : 'conventions';
18
+ const tags = Array.isArray(fm['tags'])
19
+ ? fm['tags'].filter((t) => typeof t === 'string')
20
+ : [];
21
+ if (!name) {
22
+ throw new Error('Invalid rule file: missing "name" in frontmatter');
23
+ }
24
+ if (!description) {
25
+ throw new Error('Invalid rule file: missing "description" in frontmatter');
26
+ }
27
+ if (!isValidScope(scope)) {
28
+ throw new Error(`Invalid rule file: invalid scope "${scope}"`);
29
+ }
30
+ return {
31
+ frontmatter: { name, description, version, scope, tags },
32
+ body: match[2] ?? '',
33
+ };
34
+ }
35
+ function toKebabCase(text) {
36
+ return text
37
+ .toLowerCase()
38
+ .replace(/[^a-z0-9\s-]/g, '')
39
+ .replace(/\s+/g, '-')
40
+ .replace(/-+/g, '-')
41
+ .replace(/^-|-$/g, '');
42
+ }
43
+ function parseBullets(body) {
44
+ const lines = body.split('\n');
45
+ const bullets = [];
46
+ let currentHeading = null;
47
+ let headingIndex = 0;
48
+ let currentBullet = null;
49
+ function flushBullet() {
50
+ if (currentBullet !== null) {
51
+ bullets.push({
52
+ heading: currentHeading,
53
+ content: currentBullet.trimEnd(),
54
+ index: headingIndex++,
55
+ });
56
+ currentBullet = null;
57
+ }
58
+ }
59
+ for (const line of lines) {
60
+ if (line.startsWith('## ')) {
61
+ flushBullet();
62
+ currentHeading = toKebabCase(line.slice(3).trim());
63
+ headingIndex = 0;
64
+ continue;
65
+ }
66
+ if (line.startsWith('- ')) {
67
+ flushBullet();
68
+ currentBullet = line.slice(2);
69
+ continue;
70
+ }
71
+ // Indented continuation (2+ spaces) of a bullet
72
+ if (currentBullet !== null && line.length > 0 && /^\s{2,}/.test(line)) {
73
+ currentBullet += '\n' + line.trimStart();
74
+ continue;
75
+ }
76
+ // Empty line — might be between bullets, keep accumulating
77
+ if (currentBullet !== null && line.trim() === '') {
78
+ continue;
79
+ }
80
+ // Non-bullet, non-heading content — flush if we had a bullet
81
+ if (currentBullet !== null && line.trim() !== '') {
82
+ flushBullet();
83
+ }
84
+ }
85
+ flushBullet();
86
+ return bullets;
87
+ }
88
+ export function convert(markdown, category, name) {
89
+ const { frontmatter, body } = parseFrontmatter(markdown);
90
+ const bullets = parseBullets(body);
91
+ const source = `${category}/${name}`;
92
+ const rules = bullets.map((bullet) => {
93
+ const headingPart = bullet.heading ? `-${bullet.heading}` : '';
94
+ const id = `pulled-${category}-${name}${headingPart}-${String(bullet.index)}`;
95
+ return {
96
+ id,
97
+ scope: frontmatter.scope,
98
+ severity: 'error',
99
+ content: bullet.content,
100
+ tags: [...frontmatter.tags],
101
+ source,
102
+ };
103
+ });
104
+ return {
105
+ name: frontmatter.name,
106
+ description: frontmatter.description,
107
+ version: frontmatter.version,
108
+ scope: frontmatter.scope,
109
+ tags: frontmatter.tags,
110
+ rules,
111
+ };
112
+ }
113
+ //# sourceMappingURL=converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiB/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4CpE;AAqBD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CA+B5D"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAsC,MAAM,qBAAqB,CAAC;AAmBnG,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwEpE;AAsBD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CA+B5D"}
@@ -1,6 +1,7 @@
1
1
  import { readFile, readdir } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  import { parse } from 'yaml';
4
+ import { ASSET_TYPE } from '../bridges/types.js';
4
5
  import { isValidScope } from './schema.js';
5
6
  export async function readConfig(cwd) {
6
7
  const configPath = join(cwd, '.dwf', 'config.yml');
@@ -31,12 +32,38 @@ export async function readConfig(cwd) {
31
32
  const blocks = Array.isArray(blocksRaw)
32
33
  ? blocksRaw.filter((b) => typeof b === 'string')
33
34
  : [];
35
+ const pulledRaw = doc['pulled'];
36
+ const pulled = Array.isArray(pulledRaw)
37
+ ? pulledRaw
38
+ .filter((p) => p !== null && typeof p === 'object')
39
+ .map((p) => ({
40
+ path: typeof p['path'] === 'string' ? p['path'] : '',
41
+ version: typeof p['version'] === 'string' ? p['version'] : '',
42
+ pulled_at: typeof p['pulled_at'] === 'string' ? p['pulled_at'] : '',
43
+ }))
44
+ .filter((p) => p.path !== '')
45
+ : [];
46
+ const assetTypeValues = new Set(Object.values(ASSET_TYPE));
47
+ const assetsRaw = doc['assets'];
48
+ const assets = Array.isArray(assetsRaw)
49
+ ? assetsRaw
50
+ .filter((a) => a !== null && typeof a === 'object')
51
+ .map((a) => ({
52
+ type: (typeof a['type'] === 'string' ? a['type'] : ''),
53
+ name: typeof a['name'] === 'string' ? a['name'] : '',
54
+ version: typeof a['version'] === 'string' ? a['version'] : '',
55
+ installed_at: typeof a['installed_at'] === 'string' ? a['installed_at'] : '',
56
+ }))
57
+ .filter((a) => a.name !== '' && assetTypeValues.has(a.type))
58
+ : [];
34
59
  return {
35
60
  version,
36
61
  project: { name: projectName, description: projectDescription },
37
62
  tools,
38
63
  mode: modeRaw,
39
64
  blocks,
65
+ pulled,
66
+ assets,
40
67
  };
41
68
  }
42
69
  function normalizeRule(raw, scope) {
@@ -54,6 +81,7 @@ function normalizeRule(raw, scope) {
54
81
  tags: raw.tags,
55
82
  enabled,
56
83
  sourceBlock: raw.sourceBlock,
84
+ source: raw.source,
57
85
  };
58
86
  }
59
87
  export async function readRules(cwd) {