dev-workflows 0.2.2 → 0.4.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.
- package/README.md +1 -0
- package/dist/bridges/types.d.ts +7 -0
- package/dist/bridges/types.d.ts.map +1 -1
- package/dist/commands/add.d.ts +23 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +356 -57
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/compile.d.ts +18 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +101 -78
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +25 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +13 -13
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +85 -22
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +106 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/converter.d.ts +18 -0
- package/dist/core/converter.d.ts.map +1 -0
- package/dist/core/converter.js +113 -0
- package/dist/core/converter.js.map +1 -0
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +13 -0
- package/dist/core/parser.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/cache.d.ts +10 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +43 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/github.d.ts +11 -0
- package/dist/utils/github.d.ts.map +1 -0
- package/dist/utils/github.js +68 -0
- package/dist/utils/github.js.map +1 -0
- package/dist/utils/ui.d.ts +1 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +1 -0
- package/dist/utils/ui.js.map +1 -1
- package/package.json +5 -4
- package/content/blocks/nextjs-approuter.yml +0 -37
- package/content/blocks/react-conventions.yml +0 -36
- package/content/blocks/supabase-rls.yml +0 -30
- package/content/blocks/tailwind.yml +0 -28
- package/content/blocks/testing-basics.yml +0 -36
- package/content/blocks/typescript-strict.yml +0 -33
- package/dist/blocks/installer.d.ts +0 -4
- package/dist/blocks/installer.d.ts.map +0 -1
- package/dist/blocks/installer.js +0 -119
- package/dist/blocks/installer.js.map +0 -1
- package/dist/blocks/registry.d.ts +0 -18
- package/dist/blocks/registry.d.ts.map +0 -1
- package/dist/blocks/registry.js +0 -85
- package/dist/blocks/registry.js.map +0 -1
package/README.md
CHANGED
|
@@ -40,6 +40,7 @@ You define rules in YAML. The compiler generates each editor's native format. Ch
|
|
|
40
40
|
| `devw add <block>` | Install a prebuilt rule block |
|
|
41
41
|
| `devw remove <block>` | Remove a rule block |
|
|
42
42
|
| `devw compile` | Generate editor-specific rule files |
|
|
43
|
+
| `devw watch` | Watch `.dwf/` and recompile on changes |
|
|
43
44
|
| `devw doctor` | Validate config and detect rule drift |
|
|
44
45
|
| `devw list rules` | List all active rules |
|
|
45
46
|
| `devw list blocks` | List installed blocks |
|
package/dist/bridges/types.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ export interface Rule {
|
|
|
6
6
|
tags?: string[];
|
|
7
7
|
enabled: boolean;
|
|
8
8
|
sourceBlock?: string;
|
|
9
|
+
source?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PulledEntry {
|
|
12
|
+
path: string;
|
|
13
|
+
version: string;
|
|
14
|
+
pulled_at: string;
|
|
9
15
|
}
|
|
10
16
|
export interface ProjectConfig {
|
|
11
17
|
version: string;
|
|
@@ -16,6 +22,7 @@ export interface ProjectConfig {
|
|
|
16
22
|
tools: string[];
|
|
17
23
|
mode: 'copy' | 'link';
|
|
18
24
|
blocks: string[];
|
|
25
|
+
pulled: PulledEntry[];
|
|
19
26
|
}
|
|
20
27
|
export interface Bridge {
|
|
21
28
|
id: string;
|
|
@@ -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;
|
|
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;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;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;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;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"}
|
package/dist/commands/add.d.ts
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
import { convert } from '../core/converter.js';
|
|
3
|
+
import type { PulledEntry } from '../bridges/types.js';
|
|
4
|
+
export declare const BACK_VALUE = "__back__";
|
|
5
|
+
export declare function pluralRules(count: number): string;
|
|
2
6
|
export interface AddOptions {
|
|
3
7
|
list?: boolean;
|
|
4
8
|
noCompile?: boolean;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
dryRun?: boolean;
|
|
5
11
|
}
|
|
12
|
+
export declare function validateInput(input: string): {
|
|
13
|
+
category: string;
|
|
14
|
+
name: string;
|
|
15
|
+
} | null;
|
|
16
|
+
interface CachedRegistry {
|
|
17
|
+
categories: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
rules: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare function fetchRegistry(cwd: string): Promise<CachedRegistry | null>;
|
|
26
|
+
export declare function generateYamlOutput(category: string, name: string, result: ReturnType<typeof convert>, pulledAt: string): string;
|
|
27
|
+
export declare function updateConfig(cwd: string, entry: PulledEntry): Promise<void>;
|
|
6
28
|
export declare function registerAddCommand(program: Command): void;
|
|
29
|
+
export {};
|
|
7
30
|
//# sourceMappingURL=add.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUtF;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC,CAAC;CACJ;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoD/E;AAuCD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAClC,QAAQ,EAAE,MAAM,GACf,MAAM,CA6BR;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAuRD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUzD"}
|
package/dist/commands/add.js
CHANGED
|
@@ -1,67 +1,358 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
3
|
import chalk from 'chalk';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { stringify, parse } from 'yaml';
|
|
5
|
+
import { select, checkbox, confirm } from '@inquirer/prompts';
|
|
6
|
+
import { fetchRawContent, listDirectory } from '../utils/github.js';
|
|
7
|
+
import { convert } from '../core/converter.js';
|
|
6
8
|
import { fileExists } from '../utils/fs.js';
|
|
7
9
|
import { readConfig } from '../core/parser.js';
|
|
10
|
+
import * as cache from '../utils/cache.js';
|
|
8
11
|
import * as ui from '../utils/ui.js';
|
|
9
12
|
import { ICONS } from '../utils/ui.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
const KEBAB_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
14
|
+
export const BACK_VALUE = '__back__';
|
|
15
|
+
export function pluralRules(count) {
|
|
16
|
+
return count === 1 ? '1 rule' : `${String(count)} rules`;
|
|
17
|
+
}
|
|
18
|
+
export function validateInput(input) {
|
|
19
|
+
const parts = input.split('/');
|
|
20
|
+
if (parts.length !== 2)
|
|
21
|
+
return null;
|
|
22
|
+
const category = parts[0];
|
|
23
|
+
const name = parts[1];
|
|
24
|
+
if (!category || !name)
|
|
25
|
+
return null;
|
|
26
|
+
if (!KEBAB_RE.test(category) || !KEBAB_RE.test(name))
|
|
27
|
+
return null;
|
|
28
|
+
return { category, name };
|
|
29
|
+
}
|
|
30
|
+
export async function fetchRegistry(cwd) {
|
|
31
|
+
const cached = await cache.getFromDisk(cwd, 'registry');
|
|
32
|
+
if (cached)
|
|
33
|
+
return cached;
|
|
34
|
+
ui.info('Fetching available rules from GitHub...');
|
|
35
|
+
ui.newline();
|
|
36
|
+
let topLevel;
|
|
37
|
+
try {
|
|
38
|
+
topLevel = await listDirectory();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
42
|
+
ui.error(`Could not fetch rule registry: ${msg}`);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const categories = [];
|
|
46
|
+
for (const entry of topLevel) {
|
|
47
|
+
if (entry.type !== 'dir')
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
const files = await listDirectory(entry.name);
|
|
51
|
+
const rules = [];
|
|
52
|
+
for (const file of files) {
|
|
53
|
+
if (file.type !== 'file')
|
|
54
|
+
continue;
|
|
55
|
+
try {
|
|
56
|
+
const content = await fetchRawContent(`${entry.name}/${file.name}`);
|
|
57
|
+
const fmMatch = /^---\n([\s\S]*?)\n---/.exec(content);
|
|
58
|
+
if (fmMatch?.[1]) {
|
|
59
|
+
const fm = parse(fmMatch[1]);
|
|
60
|
+
const description = typeof fm['description'] === 'string' ? fm['description'] : '';
|
|
61
|
+
rules.push({ name: file.name, description });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
rules.push({ name: file.name, description: '' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (rules.length > 0) {
|
|
69
|
+
categories.push({ name: entry.name, rules });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Skip categories that fail to list
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const registry = { categories };
|
|
77
|
+
await cache.set(cwd, 'registry', registry);
|
|
78
|
+
return registry;
|
|
79
|
+
}
|
|
80
|
+
async function runList(categoryFilter) {
|
|
81
|
+
const cwd = process.cwd();
|
|
82
|
+
const registry = await fetchRegistry(cwd);
|
|
83
|
+
if (!registry) {
|
|
84
|
+
process.exitCode = 1;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const displayCategories = categoryFilter
|
|
88
|
+
? registry.categories.filter((c) => c.name === categoryFilter)
|
|
89
|
+
: registry.categories;
|
|
90
|
+
if (displayCategories.length === 0) {
|
|
91
|
+
if (categoryFilter) {
|
|
92
|
+
ui.warn(`Category "${categoryFilter}" not found`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
ui.warn('No rules available');
|
|
96
|
+
}
|
|
14
97
|
return;
|
|
15
98
|
}
|
|
16
|
-
|
|
17
|
-
|
|
99
|
+
ui.header('Available rules');
|
|
100
|
+
ui.newline();
|
|
101
|
+
for (const category of displayCategories) {
|
|
102
|
+
console.log(` ${chalk.cyan(`${category.name}/`)}`);
|
|
103
|
+
for (const rule of category.rules) {
|
|
104
|
+
const desc = rule.description ? chalk.dim(` ${rule.description}`) : '';
|
|
105
|
+
console.log(` ${chalk.white(rule.name.padEnd(20))}${desc}`);
|
|
106
|
+
}
|
|
107
|
+
ui.newline();
|
|
108
|
+
}
|
|
109
|
+
console.log(` ${chalk.dim(`Add a rule: devw add <category>/<rule>`)}`);
|
|
110
|
+
}
|
|
111
|
+
export function generateYamlOutput(category, name, result, pulledAt) {
|
|
112
|
+
const source = `${category}/${name}`;
|
|
113
|
+
const githubUrl = `https://github.com/gpolanco/dev-workflows/blob/main/content/rules/${source}.md`;
|
|
114
|
+
const header = [
|
|
115
|
+
`# Pulled from: ${source} (v${result.version})`,
|
|
116
|
+
`# Source: ${githubUrl}`,
|
|
117
|
+
`# Do not edit manually — changes will be overwritten on next pull.`,
|
|
118
|
+
'',
|
|
119
|
+
].join('\n');
|
|
120
|
+
const doc = {
|
|
121
|
+
source: {
|
|
122
|
+
registry: 'dev-workflows',
|
|
123
|
+
path: source,
|
|
124
|
+
version: result.version,
|
|
125
|
+
pulled_at: pulledAt,
|
|
126
|
+
},
|
|
127
|
+
scope: result.scope,
|
|
128
|
+
rules: result.rules.map((r) => ({
|
|
129
|
+
id: r.id,
|
|
130
|
+
severity: r.severity,
|
|
131
|
+
content: r.content,
|
|
132
|
+
tags: r.tags,
|
|
133
|
+
source: r.source,
|
|
134
|
+
})),
|
|
135
|
+
};
|
|
136
|
+
return header + stringify(doc, { lineWidth: 0 });
|
|
137
|
+
}
|
|
138
|
+
export async function updateConfig(cwd, entry) {
|
|
139
|
+
const configPath = join(cwd, '.dwf', 'config.yml');
|
|
140
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
141
|
+
const doc = parse(raw);
|
|
142
|
+
const pulled = Array.isArray(doc['pulled']) ? doc['pulled'] : [];
|
|
143
|
+
const existingIdx = pulled.findIndex((p) => p.path === entry.path);
|
|
144
|
+
if (existingIdx >= 0) {
|
|
145
|
+
pulled[existingIdx] = entry;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
pulled.push(entry);
|
|
149
|
+
}
|
|
150
|
+
doc['pulled'] = pulled;
|
|
151
|
+
await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8');
|
|
152
|
+
}
|
|
153
|
+
async function downloadAndInstall(cwd, category, name, options) {
|
|
154
|
+
const source = `${category}/${name}`;
|
|
155
|
+
const fileName = `pulled-${category}-${name}.yml`;
|
|
156
|
+
const filePath = join(cwd, '.dwf', 'rules', fileName);
|
|
157
|
+
ui.info(`Downloading ${source}...`);
|
|
158
|
+
let markdown;
|
|
18
159
|
try {
|
|
19
|
-
|
|
20
|
-
installedBlocks = config.blocks;
|
|
160
|
+
markdown = await fetchRawContent(source);
|
|
21
161
|
}
|
|
22
|
-
catch {
|
|
23
|
-
|
|
162
|
+
catch (err) {
|
|
163
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
164
|
+
ui.error(msg);
|
|
165
|
+
process.exitCode = 1;
|
|
166
|
+
return false;
|
|
24
167
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
168
|
+
let result;
|
|
169
|
+
try {
|
|
170
|
+
result = convert(markdown, category, name);
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
174
|
+
ui.error(`Conversion failed: ${msg}`);
|
|
175
|
+
process.exitCode = 1;
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
if (await fileExists(filePath)) {
|
|
179
|
+
try {
|
|
180
|
+
const existingRaw = await readFile(filePath, 'utf-8');
|
|
181
|
+
const existingDoc = parse(existingRaw);
|
|
182
|
+
const existingSource = existingDoc['source'];
|
|
183
|
+
const existingVersion = typeof existingSource?.['version'] === 'string' ? existingSource['version'] : '';
|
|
184
|
+
if (existingVersion === result.version) {
|
|
185
|
+
ui.success(`Already up to date (${source} v${result.version})`);
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
if (!options.force) {
|
|
189
|
+
ui.newline();
|
|
190
|
+
ui.info(`${source} already exists locally (v${existingVersion} ${ICONS.arrow} v${result.version})`);
|
|
191
|
+
try {
|
|
192
|
+
const shouldOverwrite = await confirm({
|
|
193
|
+
message: 'Overwrite with new version?',
|
|
194
|
+
default: true,
|
|
195
|
+
});
|
|
196
|
+
if (!shouldOverwrite) {
|
|
197
|
+
ui.error('Cancelled');
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
ui.error('Cancelled');
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Can't parse existing file — overwrite
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const pulledAt = new Date().toISOString();
|
|
212
|
+
const yamlOutput = generateYamlOutput(category, name, result, pulledAt);
|
|
213
|
+
if (options.dryRun) {
|
|
214
|
+
ui.newline();
|
|
215
|
+
ui.header('Dry run — would write:');
|
|
31
216
|
ui.newline();
|
|
217
|
+
console.log(chalk.dim(` ${fileName}`));
|
|
218
|
+
ui.newline();
|
|
219
|
+
console.log(yamlOutput);
|
|
220
|
+
return false;
|
|
32
221
|
}
|
|
222
|
+
await mkdir(join(cwd, '.dwf', 'rules'), { recursive: true });
|
|
223
|
+
await writeFile(filePath, yamlOutput, 'utf-8');
|
|
224
|
+
const entry = {
|
|
225
|
+
path: source,
|
|
226
|
+
version: result.version,
|
|
227
|
+
pulled_at: pulledAt,
|
|
228
|
+
};
|
|
229
|
+
await updateConfig(cwd, entry);
|
|
230
|
+
ui.success(`Added ${source} (${pluralRules(result.rules.length)})`);
|
|
231
|
+
return true;
|
|
33
232
|
}
|
|
34
|
-
async function
|
|
35
|
-
const
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
return
|
|
233
|
+
async function runInteractive(cwd, options) {
|
|
234
|
+
const registry = await fetchRegistry(cwd);
|
|
235
|
+
if (!registry) {
|
|
236
|
+
process.exitCode = 1;
|
|
237
|
+
return;
|
|
39
238
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return undefined;
|
|
239
|
+
if (registry.categories.length === 0) {
|
|
240
|
+
ui.warn('No rules available');
|
|
241
|
+
return;
|
|
44
242
|
}
|
|
243
|
+
let installedPaths;
|
|
45
244
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
245
|
+
const config = await readConfig(cwd);
|
|
246
|
+
installedPaths = new Set(config.pulled.map((p) => p.path));
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
installedPaths = new Set();
|
|
250
|
+
}
|
|
251
|
+
const allSelected = [];
|
|
252
|
+
const processedCategories = new Set();
|
|
253
|
+
try {
|
|
254
|
+
for (;;) {
|
|
255
|
+
const availableCategories = registry.categories.filter((c) => !processedCategories.has(c.name));
|
|
256
|
+
if (availableCategories.length === 0)
|
|
257
|
+
break;
|
|
258
|
+
const selectedCategoryName = await select({
|
|
259
|
+
message: 'Choose a category',
|
|
260
|
+
choices: availableCategories.map((c) => {
|
|
261
|
+
const allInstalled = c.rules.every((r) => installedPaths.has(`${c.name}/${r.name}`));
|
|
262
|
+
const label = `${c.name} (${pluralRules(c.rules.length)})`;
|
|
263
|
+
return {
|
|
264
|
+
name: allInstalled ? `${label} ${chalk.dim('(all installed)')}` : label,
|
|
265
|
+
value: c.name,
|
|
266
|
+
};
|
|
267
|
+
}),
|
|
268
|
+
});
|
|
269
|
+
const category = registry.categories.find((c) => c.name === selectedCategoryName);
|
|
270
|
+
if (!category)
|
|
271
|
+
break;
|
|
272
|
+
const selected = await checkbox({
|
|
273
|
+
message: 'Select rules to add',
|
|
274
|
+
choices: [
|
|
275
|
+
{ name: '\u2190 Back to categories', value: BACK_VALUE },
|
|
276
|
+
...category.rules.map((r) => {
|
|
277
|
+
const path = `${category.name}/${r.name}`;
|
|
278
|
+
const installed = installedPaths.has(path);
|
|
279
|
+
const desc = r.description ? ` ${ICONS.dash} ${r.description}` : '';
|
|
280
|
+
const suffix = installed ? chalk.dim(' (already installed)') : '';
|
|
281
|
+
return {
|
|
282
|
+
name: `${r.name}${desc}${suffix}`,
|
|
283
|
+
value: r.name,
|
|
284
|
+
};
|
|
285
|
+
}),
|
|
286
|
+
],
|
|
287
|
+
});
|
|
288
|
+
const realRules = selected.filter((v) => v !== BACK_VALUE);
|
|
289
|
+
if (realRules.length === 0) {
|
|
290
|
+
if (selected.includes(BACK_VALUE))
|
|
291
|
+
continue;
|
|
292
|
+
ui.warn('No rules selected');
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
for (const ruleName of realRules) {
|
|
296
|
+
const ruleInfo = category.rules.find((r) => r.name === ruleName);
|
|
297
|
+
allSelected.push({
|
|
298
|
+
category: category.name,
|
|
299
|
+
name: ruleName,
|
|
300
|
+
description: ruleInfo?.description ?? '',
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
processedCategories.add(category.name);
|
|
304
|
+
const remaining = registry.categories.filter((c) => !processedCategories.has(c.name));
|
|
305
|
+
if (remaining.length === 0)
|
|
306
|
+
break;
|
|
307
|
+
const addMore = await confirm({
|
|
308
|
+
message: 'Add rules from another category?',
|
|
309
|
+
default: true,
|
|
310
|
+
});
|
|
311
|
+
if (!addMore)
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
ui.error('Cancelled');
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (allSelected.length === 0)
|
|
320
|
+
return;
|
|
321
|
+
ui.newline();
|
|
322
|
+
ui.header('Rules to install:');
|
|
323
|
+
for (const rule of allSelected) {
|
|
324
|
+
const desc = rule.description ? chalk.dim(` ${ICONS.dash} ${rule.description}`) : '';
|
|
325
|
+
console.log(` ${rule.category}/${rule.name}${desc}`);
|
|
326
|
+
}
|
|
327
|
+
ui.newline();
|
|
328
|
+
try {
|
|
329
|
+
const shouldProceed = await confirm({
|
|
330
|
+
message: `Install ${pluralRules(allSelected.length)}?`,
|
|
331
|
+
default: true,
|
|
56
332
|
});
|
|
333
|
+
if (!shouldProceed) {
|
|
334
|
+
ui.error('Cancelled');
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
57
337
|
}
|
|
58
338
|
catch {
|
|
59
|
-
|
|
339
|
+
ui.error('Cancelled');
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
let anyAdded = false;
|
|
343
|
+
for (const rule of allSelected) {
|
|
344
|
+
const added = await downloadAndInstall(cwd, rule.category, rule.name, options);
|
|
345
|
+
if (added)
|
|
346
|
+
anyAdded = true;
|
|
347
|
+
}
|
|
348
|
+
if (anyAdded && !options.noCompile) {
|
|
349
|
+
const { runCompileFromAdd } = await import('./compile.js');
|
|
350
|
+
await runCompileFromAdd();
|
|
60
351
|
}
|
|
61
352
|
}
|
|
62
|
-
async function runAdd(
|
|
353
|
+
async function runAdd(ruleArg, options) {
|
|
63
354
|
if (options.list) {
|
|
64
|
-
await
|
|
355
|
+
await runList(ruleArg);
|
|
65
356
|
return;
|
|
66
357
|
}
|
|
67
358
|
const cwd = process.cwd();
|
|
@@ -70,23 +361,29 @@ async function runAdd(blockId, options) {
|
|
|
70
361
|
process.exitCode = 1;
|
|
71
362
|
return;
|
|
72
363
|
}
|
|
73
|
-
if (!
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
364
|
+
if (!ruleArg) {
|
|
365
|
+
if (!process.stdout.isTTY || !process.stdin.isTTY) {
|
|
366
|
+
ui.error('No rule specified', 'Usage: devw add <category>/<rule>');
|
|
367
|
+
process.exitCode = 1;
|
|
77
368
|
return;
|
|
78
|
-
|
|
369
|
+
}
|
|
370
|
+
await runInteractive(cwd, options);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
if (!ruleArg.includes('/')) {
|
|
374
|
+
ui.error('Block format is no longer supported', 'Use: devw add <category>/<rule>. Run devw add --list to browse.');
|
|
375
|
+
process.exitCode = 1;
|
|
376
|
+
return;
|
|
79
377
|
}
|
|
80
|
-
const
|
|
81
|
-
if (!
|
|
82
|
-
ui.error(`
|
|
378
|
+
const parsed = validateInput(ruleArg);
|
|
379
|
+
if (!parsed) {
|
|
380
|
+
ui.error(`Invalid rule path "${ruleArg}"`, 'Format: <category>/<rule> — both must be kebab-case (e.g., typescript/strict)');
|
|
83
381
|
process.exitCode = 1;
|
|
84
382
|
return;
|
|
85
383
|
}
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
if (!options.noCompile) {
|
|
89
|
-
// Dynamic import to avoid circular dependency
|
|
384
|
+
const { category, name } = parsed;
|
|
385
|
+
const added = await downloadAndInstall(cwd, category, name, options);
|
|
386
|
+
if (added && !options.noCompile) {
|
|
90
387
|
const { runCompileFromAdd } = await import('./compile.js');
|
|
91
388
|
await runCompileFromAdd();
|
|
92
389
|
}
|
|
@@ -94,10 +391,12 @@ async function runAdd(blockId, options) {
|
|
|
94
391
|
export function registerAddCommand(program) {
|
|
95
392
|
program
|
|
96
393
|
.command('add')
|
|
97
|
-
.argument('[
|
|
98
|
-
.description('
|
|
99
|
-
.option('--list', 'List
|
|
394
|
+
.argument('[rule]', 'Rule path: <category>/<rule>')
|
|
395
|
+
.description('Add rules from the dev-workflows registry')
|
|
396
|
+
.option('--list', 'List available rules')
|
|
100
397
|
.option('--no-compile', 'Skip auto-compile after adding')
|
|
101
|
-
.
|
|
398
|
+
.option('--force', 'Overwrite without asking')
|
|
399
|
+
.option('--dry-run', 'Show output without writing files')
|
|
400
|
+
.action((rule, options) => runAdd(rule, options));
|
|
102
401
|
}
|
|
103
402
|
//# sourceMappingURL=add.js.map
|
package/dist/commands/add.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -4,6 +4,24 @@ export interface CompileOptions {
|
|
|
4
4
|
dryRun?: boolean;
|
|
5
5
|
verbose?: boolean;
|
|
6
6
|
}
|
|
7
|
+
export interface BridgeResult {
|
|
8
|
+
bridgeId: string;
|
|
9
|
+
outputPath: string;
|
|
10
|
+
success: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface CompileResult {
|
|
15
|
+
results: BridgeResult[];
|
|
16
|
+
activeRuleCount: number;
|
|
17
|
+
elapsedMs: number;
|
|
18
|
+
}
|
|
19
|
+
export interface PipelineOptions {
|
|
20
|
+
cwd: string;
|
|
21
|
+
tool?: string;
|
|
22
|
+
write?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function executePipeline(options: PipelineOptions): Promise<CompileResult>;
|
|
7
25
|
export declare function runCompileFromAdd(): Promise<void>;
|
|
8
26
|
export declare function registerCompileCommand(program: Command): void;
|
|
9
27
|
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -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;AAezC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;
|
|
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;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAmGtF;AAgDD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ7D"}
|