auden 0.1.0-alpha.2
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/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/auden-paths.d.ts +8 -0
- package/dist/auden-paths.d.ts.map +1 -0
- package/dist/auden-paths.js +10 -0
- package/dist/auden-paths.js.map +1 -0
- package/dist/bin.d.ts +11 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +13 -0
- package/dist/bin.js.map +1 -0
- package/dist/chunk.d.ts +3 -0
- package/dist/chunk.d.ts.map +1 -0
- package/dist/chunk.js +13 -0
- package/dist/chunk.js.map +1 -0
- package/dist/commands/doctor.d.ts +13 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +125 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval/index.d.ts +2 -0
- package/dist/commands/eval/index.d.ts.map +1 -0
- package/dist/commands/eval/index.js +2 -0
- package/dist/commands/eval/index.js.map +1 -0
- package/dist/commands/eval/run.d.ts +38 -0
- package/dist/commands/eval/run.d.ts.map +1 -0
- package/dist/commands/eval/run.js +179 -0
- package/dist/commands/eval/run.js.map +1 -0
- package/dist/commands/guides/active.d.ts +2 -0
- package/dist/commands/guides/active.d.ts.map +1 -0
- package/dist/commands/guides/active.js +38 -0
- package/dist/commands/guides/active.js.map +1 -0
- package/dist/commands/guides/index.d.ts +2 -0
- package/dist/commands/guides/index.d.ts.map +1 -0
- package/dist/commands/guides/index.js +13 -0
- package/dist/commands/guides/index.js.map +1 -0
- package/dist/commands/guides/project.d.ts +13 -0
- package/dist/commands/guides/project.d.ts.map +1 -0
- package/dist/commands/guides/project.js +71 -0
- package/dist/commands/guides/project.js.map +1 -0
- package/dist/commands/guides/search.d.ts +8 -0
- package/dist/commands/guides/search.d.ts.map +1 -0
- package/dist/commands/guides/search.js +46 -0
- package/dist/commands/guides/search.js.map +1 -0
- package/dist/commands/init.d.ts +43 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +436 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +23 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +55 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/pull.d.ts +38 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +127 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/rules/export.d.ts +140 -0
- package/dist/commands/rules/export.d.ts.map +1 -0
- package/dist/commands/rules/export.js +635 -0
- package/dist/commands/rules/export.js.map +1 -0
- package/dist/commands/rules/import.d.ts +33 -0
- package/dist/commands/rules/import.d.ts.map +1 -0
- package/dist/commands/rules/import.js +122 -0
- package/dist/commands/rules/import.js.map +1 -0
- package/dist/commands/rules/index.d.ts +2 -0
- package/dist/commands/rules/index.d.ts.map +1 -0
- package/dist/commands/rules/index.js +13 -0
- package/dist/commands/rules/index.js.map +1 -0
- package/dist/commands/rules/watch.d.ts +43 -0
- package/dist/commands/rules/watch.d.ts.map +1 -0
- package/dist/commands/rules/watch.js +125 -0
- package/dist/commands/rules/watch.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +61 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/suggest.d.ts +8 -0
- package/dist/commands/suggest.d.ts.map +1 -0
- package/dist/commands/suggest.js +43 -0
- package/dist/commands/suggest.js.map +1 -0
- package/dist/commands/sync.d.ts +23 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +193 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/verdict/index.d.ts +2 -0
- package/dist/commands/verdict/index.d.ts.map +1 -0
- package/dist/commands/verdict/index.js +11 -0
- package/dist/commands/verdict/index.js.map +1 -0
- package/dist/commands/verdict/record.d.ts +18 -0
- package/dist/commands/verdict/record.d.ts.map +1 -0
- package/dist/commands/verdict/record.js +60 -0
- package/dist/commands/verdict/record.js.map +1 -0
- package/dist/config.d.ts +96 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +246 -0
- package/dist/config.js.map +1 -0
- package/dist/context/pull.d.ts +40 -0
- package/dist/context/pull.d.ts.map +1 -0
- package/dist/context/pull.js +46 -0
- package/dist/context/pull.js.map +1 -0
- package/dist/dashboard-health.d.ts +20 -0
- package/dist/dashboard-health.d.ts.map +1 -0
- package/dist/dashboard-health.js +24 -0
- package/dist/dashboard-health.js.map +1 -0
- package/dist/eval-provider.d.ts +30 -0
- package/dist/eval-provider.d.ts.map +1 -0
- package/dist/eval-provider.js +359 -0
- package/dist/eval-provider.js.map +1 -0
- package/dist/eval-summary.d.ts +24 -0
- package/dist/eval-summary.d.ts.map +1 -0
- package/dist/eval-summary.js +30 -0
- package/dist/eval-summary.js.map +1 -0
- package/dist/feedback/extract.d.ts +6 -0
- package/dist/feedback/extract.d.ts.map +1 -0
- package/dist/feedback/extract.js +580 -0
- package/dist/feedback/extract.js.map +1 -0
- package/dist/http-retry.d.ts +23 -0
- package/dist/http-retry.d.ts.map +1 -0
- package/dist/http-retry.js +54 -0
- package/dist/http-retry.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +70 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +121 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/scope.d.ts +30 -0
- package/dist/mcp/scope.d.ts.map +1 -0
- package/dist/mcp/scope.js +64 -0
- package/dist/mcp/scope.js.map +1 -0
- package/dist/mcp/server.d.ts +57 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +427 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/write-items.d.ts +34 -0
- package/dist/mcp/write-items.d.ts.map +1 -0
- package/dist/mcp/write-items.js +59 -0
- package/dist/mcp/write-items.js.map +1 -0
- package/dist/rules/deletions-client.d.ts +16 -0
- package/dist/rules/deletions-client.d.ts.map +1 -0
- package/dist/rules/deletions-client.js +40 -0
- package/dist/rules/deletions-client.js.map +1 -0
- package/dist/rules/diff.d.ts +19 -0
- package/dist/rules/diff.d.ts.map +1 -0
- package/dist/rules/diff.js +36 -0
- package/dist/rules/diff.js.map +1 -0
- package/dist/rules/discover.d.ts +81 -0
- package/dist/rules/discover.d.ts.map +1 -0
- package/dist/rules/discover.js +307 -0
- package/dist/rules/discover.js.map +1 -0
- package/dist/rules/file-origin.d.ts +16 -0
- package/dist/rules/file-origin.d.ts.map +1 -0
- package/dist/rules/file-origin.js +31 -0
- package/dist/rules/file-origin.js.map +1 -0
- package/dist/rules/global-flag.d.ts +12 -0
- package/dist/rules/global-flag.d.ts.map +1 -0
- package/dist/rules/global-flag.js +15 -0
- package/dist/rules/global-flag.js.map +1 -0
- package/dist/rules/import-client.d.ts +37 -0
- package/dist/rules/import-client.d.ts.map +1 -0
- package/dist/rules/import-client.js +98 -0
- package/dist/rules/import-client.js.map +1 -0
- package/dist/rules/init-pull.d.ts +34 -0
- package/dist/rules/init-pull.d.ts.map +1 -0
- package/dist/rules/init-pull.js +43 -0
- package/dist/rules/init-pull.js.map +1 -0
- package/dist/rules/member-files-client.d.ts +17 -0
- package/dist/rules/member-files-client.d.ts.map +1 -0
- package/dist/rules/member-files-client.js +29 -0
- package/dist/rules/member-files-client.js.map +1 -0
- package/dist/rules/path-contains.d.ts +9 -0
- package/dist/rules/path-contains.d.ts.map +1 -0
- package/dist/rules/path-contains.js +17 -0
- package/dist/rules/path-contains.js.map +1 -0
- package/dist/rules/payload.d.ts +13 -0
- package/dist/rules/payload.d.ts.map +1 -0
- package/dist/rules/payload.js +35 -0
- package/dist/rules/payload.js.map +1 -0
- package/dist/rules/pull-bundle.d.ts +13 -0
- package/dist/rules/pull-bundle.d.ts.map +1 -0
- package/dist/rules/pull-bundle.js +32 -0
- package/dist/rules/pull-bundle.js.map +1 -0
- package/dist/rules/watch.d.ts +121 -0
- package/dist/rules/watch.d.ts.map +1 -0
- package/dist/rules/watch.js +457 -0
- package/dist/rules/watch.js.map +1 -0
- package/dist/skill-template.d.ts +19 -0
- package/dist/skill-template.d.ts.map +1 -0
- package/dist/skill-template.js +174 -0
- package/dist/skill-template.js.map +1 -0
- package/dist/sync-batches.d.ts +37 -0
- package/dist/sync-batches.d.ts.map +1 -0
- package/dist/sync-batches.js +67 -0
- package/dist/sync-batches.js.map +1 -0
- package/dist/sync-client.d.ts +22 -0
- package/dist/sync-client.d.ts.map +1 -0
- package/dist/sync-client.js +38 -0
- package/dist/sync-client.js.map +1 -0
- package/dist/sync-response.d.ts +23 -0
- package/dist/sync-response.d.ts.map +1 -0
- package/dist/sync-response.js +22 -0
- package/dist/sync-response.js.map +1 -0
- package/dist/token-verify.d.ts +14 -0
- package/dist/token-verify.d.ts.map +1 -0
- package/dist/token-verify.js +30 -0
- package/dist/token-verify.js.map +1 -0
- package/dist/usage/extract.d.ts +31 -0
- package/dist/usage/extract.d.ts.map +1 -0
- package/dist/usage/extract.js +200 -0
- package/dist/usage/extract.js.map +1 -0
- package/dist/usage/providers.d.ts +8 -0
- package/dist/usage/providers.d.ts.map +1 -0
- package/dist/usage/providers.js +23 -0
- package/dist/usage/providers.js.map +1 -0
- package/dist/verdict-queue.d.ts +50 -0
- package/dist/verdict-queue.d.ts.map +1 -0
- package/dist/verdict-queue.js +131 -0
- package/dist/verdict-queue.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const rulesImportCommand: import("citty").CommandDef<{
|
|
2
|
+
all: {
|
|
3
|
+
type: "boolean";
|
|
4
|
+
description: string;
|
|
5
|
+
default: false;
|
|
6
|
+
};
|
|
7
|
+
global: {
|
|
8
|
+
type: "boolean";
|
|
9
|
+
description: string;
|
|
10
|
+
default: false;
|
|
11
|
+
};
|
|
12
|
+
'no-global': {
|
|
13
|
+
type: "boolean";
|
|
14
|
+
description: string;
|
|
15
|
+
default: false;
|
|
16
|
+
};
|
|
17
|
+
token: {
|
|
18
|
+
type: "string";
|
|
19
|
+
description: string;
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
'dashboard-url': {
|
|
23
|
+
type: "string";
|
|
24
|
+
description: string;
|
|
25
|
+
default: string;
|
|
26
|
+
};
|
|
27
|
+
cwd: {
|
|
28
|
+
type: "string";
|
|
29
|
+
description: string;
|
|
30
|
+
default: string;
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/rules/import.ts"],"names":[],"mappings":"AA4DA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwF7B,CAAA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { createInterface } from 'node:readline/promises';
|
|
3
|
+
import { defineCommand } from 'citty';
|
|
4
|
+
import { readConfigDiscoverGlobal, readConfigToken, resolveDashboardUrl, } from '../../config.js';
|
|
5
|
+
import { discoverGuideFiles } from '../../rules/discover.js';
|
|
6
|
+
import { resolveGlobalFlag } from '../../rules/global-flag.js';
|
|
7
|
+
import { importRules } from '../../rules/import-client.js';
|
|
8
|
+
import { buildRulePayload } from '../../rules/payload.js';
|
|
9
|
+
const PREVIEW_LINES = 4;
|
|
10
|
+
function preview(rawContent) {
|
|
11
|
+
const lines = rawContent.split(/\r?\n/).slice(0, PREVIEW_LINES);
|
|
12
|
+
return lines.map((line) => ` ${line}`).join('\n');
|
|
13
|
+
}
|
|
14
|
+
function memberSummary(file) {
|
|
15
|
+
// Member sync withheld: more unimportable files than the payload can
|
|
16
|
+
// report, so absence can't be distinguished from removal this run.
|
|
17
|
+
if (!file.members && file.membersSkipped) {
|
|
18
|
+
return ` (skill file sync skipped: ${file.membersSkipped} unimportable file(s))`;
|
|
19
|
+
}
|
|
20
|
+
if (!file.members || (file.members.length === 0 && !file.membersSkipped))
|
|
21
|
+
return '';
|
|
22
|
+
const parts = [`+${file.members.length} skill file(s)`];
|
|
23
|
+
if (file.membersSkipped) {
|
|
24
|
+
// Folded causes: binary/non-UTF-8, oversized, unreadable, or beyond the
|
|
25
|
+
// per-skill file cap — the preview stays honest by not naming one.
|
|
26
|
+
parts.push(`${file.membersSkipped} skipped`);
|
|
27
|
+
}
|
|
28
|
+
return ` (${parts.join(', ')})`;
|
|
29
|
+
}
|
|
30
|
+
function formatList(files) {
|
|
31
|
+
return files
|
|
32
|
+
.map((file, index) => {
|
|
33
|
+
const header = ` ${index + 1}. [${file.format}] ${file.displayPath}${memberSummary(file)}`;
|
|
34
|
+
const body = preview(file.rawContent);
|
|
35
|
+
return body ? `${header}\n${body}` : header;
|
|
36
|
+
})
|
|
37
|
+
.join('\n\n');
|
|
38
|
+
}
|
|
39
|
+
async function confirm(prompt) {
|
|
40
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
41
|
+
try {
|
|
42
|
+
const answer = (await rl.question(prompt)).trim().toLowerCase();
|
|
43
|
+
return answer === 'y' || answer === 'yes';
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
rl.close();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export const rulesImportCommand = defineCommand({
|
|
50
|
+
meta: {
|
|
51
|
+
name: 'import',
|
|
52
|
+
description: 'Discover and import guide files from the current repo',
|
|
53
|
+
},
|
|
54
|
+
args: {
|
|
55
|
+
all: {
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
description: 'Skip the confirmation prompt and import every detected file',
|
|
58
|
+
default: false,
|
|
59
|
+
},
|
|
60
|
+
global: {
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
description: 'Also scan ~/.claude/CLAUDE.md (overrides config default)',
|
|
63
|
+
default: false,
|
|
64
|
+
},
|
|
65
|
+
'no-global': {
|
|
66
|
+
type: 'boolean',
|
|
67
|
+
description: 'Skip ~/.claude/CLAUDE.md even when config.discoverGlobal is true',
|
|
68
|
+
default: false,
|
|
69
|
+
},
|
|
70
|
+
token: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'Auden API token (overrides token in config)',
|
|
73
|
+
default: '',
|
|
74
|
+
},
|
|
75
|
+
'dashboard-url': {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'Override the dashboard base URL for this call (default: ~/.auden/config.json then the baked-in default)',
|
|
78
|
+
default: '',
|
|
79
|
+
},
|
|
80
|
+
cwd: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Project root to scan (defaults to current working directory)',
|
|
83
|
+
default: '',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
async run({ args }) {
|
|
87
|
+
const cwd = args.cwd || process.cwd();
|
|
88
|
+
const useGlobal = resolveGlobalFlag({ global: args.global, 'no-global': args['no-global'] }, await readConfigDiscoverGlobal());
|
|
89
|
+
const files = await discoverGuideFiles(useGlobal ? { cwd, global: true, homedir: homedir() } : { cwd });
|
|
90
|
+
if (files.length === 0) {
|
|
91
|
+
console.log(' No supported guide files found.');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log(`Detected ${files.length} guide file(s):\n`);
|
|
95
|
+
console.log(formatList(files));
|
|
96
|
+
console.log('');
|
|
97
|
+
if (!args.all) {
|
|
98
|
+
const proceed = await confirm(`Import ${files.length} file(s)? [y/N] `);
|
|
99
|
+
if (!proceed) {
|
|
100
|
+
console.log(' Aborted. No files imported.');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const token = args.token || (await readConfigToken());
|
|
105
|
+
if (!token) {
|
|
106
|
+
console.log(' No dashboard token configured — pass --token or run "auden init".');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const rules = files.map(buildRulePayload);
|
|
110
|
+
const result = await importRules({
|
|
111
|
+
dashboardUrl: await resolveDashboardUrl(args['dashboard-url']),
|
|
112
|
+
token,
|
|
113
|
+
rules,
|
|
114
|
+
});
|
|
115
|
+
console.log(` Imported ${result.imported} guide(s), skipped ${result.skipped} duplicate(s).`);
|
|
116
|
+
if (result.members) {
|
|
117
|
+
const { added, updated, removed, unchanged } = result.members;
|
|
118
|
+
console.log(` Skill files: ${added} added, ${updated} updated, ${removed} removed, ${unchanged} unchanged.`);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/rules/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/rules/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,qDAUvB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
export const rulesCommand = defineCommand({
|
|
3
|
+
meta: {
|
|
4
|
+
name: 'rules',
|
|
5
|
+
description: 'Discover, import, and round-trip-export rule files',
|
|
6
|
+
},
|
|
7
|
+
subCommands: {
|
|
8
|
+
import: () => import('./import.js').then((m) => m.rulesImportCommand),
|
|
9
|
+
export: () => import('./export.js').then((m) => m.rulesExportCommand),
|
|
10
|
+
watch: () => import('./watch.js').then((m) => m.rulesWatchCommand),
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,oDAAoD;KAClE;IACD,WAAW,EAAE;QACX,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACrE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACrE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;KACnE;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const rulesWatchCommand: import("citty").CommandDef<{
|
|
2
|
+
global: {
|
|
3
|
+
type: "boolean";
|
|
4
|
+
description: string;
|
|
5
|
+
default: false;
|
|
6
|
+
};
|
|
7
|
+
'no-global': {
|
|
8
|
+
type: "boolean";
|
|
9
|
+
description: string;
|
|
10
|
+
default: false;
|
|
11
|
+
};
|
|
12
|
+
'no-initial': {
|
|
13
|
+
type: "boolean";
|
|
14
|
+
description: string;
|
|
15
|
+
default: false;
|
|
16
|
+
};
|
|
17
|
+
debounce: {
|
|
18
|
+
type: "string";
|
|
19
|
+
description: string;
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
'delete-stability': {
|
|
23
|
+
type: "string";
|
|
24
|
+
description: string;
|
|
25
|
+
default: string;
|
|
26
|
+
};
|
|
27
|
+
token: {
|
|
28
|
+
type: "string";
|
|
29
|
+
description: string;
|
|
30
|
+
default: string;
|
|
31
|
+
};
|
|
32
|
+
'dashboard-url': {
|
|
33
|
+
type: "string";
|
|
34
|
+
description: string;
|
|
35
|
+
default: string;
|
|
36
|
+
};
|
|
37
|
+
cwd: {
|
|
38
|
+
type: "string";
|
|
39
|
+
description: string;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
}>;
|
|
43
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/commands/rules/watch.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkI5B,CAAA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { defineCommand } from 'citty';
|
|
4
|
+
import { readConfigDiscoverGlobal, readConfigToken, resolveDashboardUrl, } from '../../config.js';
|
|
5
|
+
import { deleteRules } from '../../rules/deletions-client.js';
|
|
6
|
+
import { discoverGuideFiles } from '../../rules/discover.js';
|
|
7
|
+
import { resolveGlobalFlag } from '../../rules/global-flag.js';
|
|
8
|
+
import { importRules } from '../../rules/import-client.js';
|
|
9
|
+
import { buildRulePayload } from '../../rules/payload.js';
|
|
10
|
+
import { createFsWatchSource, RuleWatchEngine } from '../../rules/watch.js';
|
|
11
|
+
const DEFAULT_DEBOUNCE_MS = 200;
|
|
12
|
+
const DEFAULT_DELETE_STABILITY_MS = 500;
|
|
13
|
+
export const rulesWatchCommand = defineCommand({
|
|
14
|
+
meta: {
|
|
15
|
+
name: 'watch',
|
|
16
|
+
description: 'Watch discovered guide files and push changes/deletions to the dashboard',
|
|
17
|
+
},
|
|
18
|
+
args: {
|
|
19
|
+
global: {
|
|
20
|
+
type: 'boolean',
|
|
21
|
+
description: 'Also watch ~/.claude (overrides config default)',
|
|
22
|
+
default: false,
|
|
23
|
+
},
|
|
24
|
+
'no-global': {
|
|
25
|
+
type: 'boolean',
|
|
26
|
+
description: 'Skip ~/.claude even when config.discoverGlobal is true',
|
|
27
|
+
default: false,
|
|
28
|
+
},
|
|
29
|
+
'no-initial': {
|
|
30
|
+
type: 'boolean',
|
|
31
|
+
description: 'Skip the initial import; only sync events after startup',
|
|
32
|
+
default: false,
|
|
33
|
+
},
|
|
34
|
+
debounce: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: `Debounce window in ms (default ${DEFAULT_DEBOUNCE_MS})`,
|
|
37
|
+
default: String(DEFAULT_DEBOUNCE_MS),
|
|
38
|
+
},
|
|
39
|
+
'delete-stability': {
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: `Wait this many ms before treating a missing file as deleted (default ${DEFAULT_DELETE_STABILITY_MS})`,
|
|
42
|
+
default: String(DEFAULT_DELETE_STABILITY_MS),
|
|
43
|
+
},
|
|
44
|
+
token: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'Auden API token (overrides token in config)',
|
|
47
|
+
default: '',
|
|
48
|
+
},
|
|
49
|
+
'dashboard-url': {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Override the dashboard base URL for this call (default: ~/.auden/config.json then the baked-in default)',
|
|
52
|
+
default: '',
|
|
53
|
+
},
|
|
54
|
+
cwd: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'Project root to watch (defaults to current working directory)',
|
|
57
|
+
default: '',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
async run({ args }) {
|
|
61
|
+
const cwd = args.cwd || process.cwd();
|
|
62
|
+
const useGlobal = resolveGlobalFlag({ global: args.global, 'no-global': args['no-global'] }, await readConfigDiscoverGlobal());
|
|
63
|
+
const debounceMs = Math.max(0, Number.parseInt(args.debounce, 10) || 0);
|
|
64
|
+
const deleteStabilityMs = Math.max(0, Number.parseInt(args['delete-stability'], 10) || 0);
|
|
65
|
+
const token = args.token || (await readConfigToken());
|
|
66
|
+
if (!token) {
|
|
67
|
+
console.log(' No dashboard token configured — pass --token or run "auden init".');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const dashboardUrl = await resolveDashboardUrl(args['dashboard-url']);
|
|
71
|
+
const initial = await discoverGuideFiles(useGlobal ? { cwd, global: true, homedir: homedir() } : { cwd });
|
|
72
|
+
if (initial.length > 0 && !args['no-initial']) {
|
|
73
|
+
const payloads = initial.map(buildRulePayload);
|
|
74
|
+
try {
|
|
75
|
+
const result = await importRules({ dashboardUrl, token, rules: payloads });
|
|
76
|
+
console.log(` initial sync: imported ${result.imported}, skipped ${result.skipped} duplicate(s)`);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.log(` initial sync failed: ${err instanceof Error ? err.message : err}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (initial.length === 0) {
|
|
83
|
+
console.log(' No supported guide files yet — watching for new ones.');
|
|
84
|
+
}
|
|
85
|
+
const home = homedir();
|
|
86
|
+
const allowedRoots = useGlobal ? [cwd, join(home, '.claude')] : [cwd];
|
|
87
|
+
const engine = new RuleWatchEngine({
|
|
88
|
+
cwd,
|
|
89
|
+
initial,
|
|
90
|
+
allowedRoots,
|
|
91
|
+
source: createFsWatchSource(useGlobal ? { cwd, global: true, homedir: home } : { cwd, global: false }),
|
|
92
|
+
debounceMs,
|
|
93
|
+
deleteStabilityMs,
|
|
94
|
+
sendImports: async (payloads) => {
|
|
95
|
+
const result = await importRules({ dashboardUrl, token, rules: payloads });
|
|
96
|
+
if (result.imported === 0 && result.skipped > 0) {
|
|
97
|
+
// Quiet success — duplicates are expected when content rotates back.
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
sendDeletions: async (deletions) => {
|
|
101
|
+
await deleteRules({ dashboardUrl, token, deletions });
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
engine.start();
|
|
105
|
+
console.log(` Watching ${cwd}${useGlobal ? ' and ~/.claude' : ''} — Ctrl+C to stop.`);
|
|
106
|
+
let stopping = false;
|
|
107
|
+
const onSignal = async () => {
|
|
108
|
+
if (stopping)
|
|
109
|
+
return;
|
|
110
|
+
stopping = true;
|
|
111
|
+
console.log(' Stopping watcher…');
|
|
112
|
+
try {
|
|
113
|
+
await engine.shutdown();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
process.exit(0);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
process.on('SIGINT', () => void onSignal());
|
|
120
|
+
process.on('SIGTERM', () => void onSignal());
|
|
121
|
+
// Keep the event loop alive until the user signals stop.
|
|
122
|
+
await new Promise(() => { });
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/commands/rules/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa,gCAsDxB,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { defineCommand } from 'citty';
|
|
3
|
+
import { AUDEN_CONFIG, AUDEN_GUIDES_FILE, AUDEN_QUEUE_DIR } from '../auden-paths.js';
|
|
4
|
+
import { readVerdictQueue } from '../verdict-queue.js';
|
|
5
|
+
export const statusCommand = defineCommand({
|
|
6
|
+
meta: {
|
|
7
|
+
name: 'status',
|
|
8
|
+
description: 'Show connected platforms, guide count, and pending syncs',
|
|
9
|
+
},
|
|
10
|
+
args: {},
|
|
11
|
+
async run() {
|
|
12
|
+
// Read config
|
|
13
|
+
let platform = '(not configured)';
|
|
14
|
+
let projectName = '';
|
|
15
|
+
try {
|
|
16
|
+
const raw = await readFile(AUDEN_CONFIG, 'utf8');
|
|
17
|
+
const config = JSON.parse(raw);
|
|
18
|
+
if (typeof config['platform'] === 'string')
|
|
19
|
+
platform = config['platform'];
|
|
20
|
+
if (typeof config['name'] === 'string')
|
|
21
|
+
projectName = config['name'];
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Config not found — show minimal status
|
|
25
|
+
}
|
|
26
|
+
// Count loaded guides
|
|
27
|
+
let guideCount = 0;
|
|
28
|
+
try {
|
|
29
|
+
const raw = await readFile(AUDEN_GUIDES_FILE, 'utf8');
|
|
30
|
+
const parsed = JSON.parse(raw);
|
|
31
|
+
if (Array.isArray(parsed)) {
|
|
32
|
+
guideCount = parsed.length;
|
|
33
|
+
}
|
|
34
|
+
else if (parsed && typeof parsed === 'object' && 'guides' in parsed) {
|
|
35
|
+
const guideBundle = parsed;
|
|
36
|
+
if (Array.isArray(guideBundle.guides)) {
|
|
37
|
+
guideCount = guideBundle.guides.length;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// No guides synced yet
|
|
43
|
+
}
|
|
44
|
+
// Count pending sync queue. Use readVerdictQueue so only valid, syncable
|
|
45
|
+
// verdicts are counted — permanently-invalid files are reported separately
|
|
46
|
+
// instead of inflating the pending count (they are cleaned on next sync).
|
|
47
|
+
const queue = await readVerdictQueue(AUDEN_QUEUE_DIR);
|
|
48
|
+
const pendingCount = queue.actions.length;
|
|
49
|
+
const invalidCount = queue.invalidFilePaths.length;
|
|
50
|
+
console.log('Auden status:');
|
|
51
|
+
if (projectName)
|
|
52
|
+
console.log(` project: ${projectName}`);
|
|
53
|
+
console.log(` platform: ${platform}`);
|
|
54
|
+
console.log(` guides: ${guideCount}`);
|
|
55
|
+
console.log(` pending: ${pendingCount} verdict(s) queued`);
|
|
56
|
+
if (invalidCount > 0) {
|
|
57
|
+
console.log(` invalid: ${invalidCount} unreadable queue file(s) (cleaned on next sync)`);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0DAA0D;KACxE;IACD,IAAI,EAAE,EAAE;IACR,KAAK,CAAC,GAAG;QACP,cAAc;QACd,IAAI,QAAQ,GAAG,kBAAkB,CAAA;QACjC,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAA;YACzD,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ;gBAAE,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;YACzE,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ;gBAAE,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;QAED,sBAAsB;QACtB,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAA;YACzC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,UAAU,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,CAAC;iBAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBACtE,MAAM,WAAW,GAAG,MAA8B,CAAA;gBAClD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAA;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QAED,yEAAyE;QACzE,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,eAAe,CAAC,CAAA;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;QACzC,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAA;QAElD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC5B,IAAI,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,oBAAoB,CAAC,CAAA;QAC5D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CACT,eAAe,YAAY,kDAAkD,CAC9E,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc;;;;;;EAkDzB,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { extractConversationalFeedback } from '../feedback/extract.js';
|
|
3
|
+
export const suggestCommand = defineCommand({
|
|
4
|
+
meta: {
|
|
5
|
+
name: 'suggest',
|
|
6
|
+
description: 'Surface pending guide suggestions extracted from recent session history',
|
|
7
|
+
},
|
|
8
|
+
args: {
|
|
9
|
+
'transcripts-dir': {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: 'Claude Code transcript directory (JSONL files)',
|
|
12
|
+
default: '',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
async run({ args }) {
|
|
16
|
+
const transcriptsDir = args['transcripts-dir'] || '';
|
|
17
|
+
const extracted = await extractConversationalFeedback(transcriptsDir ? { transcriptsDir } : undefined);
|
|
18
|
+
if (extracted.guideSuggestions.length === 0 &&
|
|
19
|
+
extracted.skillSuggestions.length === 0) {
|
|
20
|
+
console.log(' No pending guide suggestions found.');
|
|
21
|
+
console.log(' Suggestions appear after patterns repeat across multiple sessions.');
|
|
22
|
+
console.log(' Run "auden sync" to pull the latest guides from the dashboard.');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (extracted.guideSuggestions.length > 0) {
|
|
26
|
+
console.log(`Guide suggestions (${extracted.guideSuggestions.length}):`);
|
|
27
|
+
for (const suggestion of extracted.guideSuggestions) {
|
|
28
|
+
console.log(`\n ${suggestion.content}`);
|
|
29
|
+
console.log(` Confidence: ${Math.round(suggestion.confidence * 100)}%`);
|
|
30
|
+
console.log(` Reasoning: ${suggestion.reasoning}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (extracted.skillSuggestions.length > 0) {
|
|
34
|
+
console.log(`\nSkill suggestions (${extracted.skillSuggestions.length}):`);
|
|
35
|
+
for (const suggestion of extracted.skillSuggestions) {
|
|
36
|
+
console.log(`\n ${suggestion.signal}`);
|
|
37
|
+
console.log(` Confidence: ${Math.round(suggestion.confidence * 100)}%`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
console.log('\n Run "auden sync" to send these suggestions to the dashboard for review.');
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/commands/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAA;AAEtE,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EACT,yEAAyE;KAC5E;IACD,IAAI,EAAE;QACJ,iBAAiB,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,EAAE;SACZ;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;QACpD,MAAM,SAAS,GAAG,MAAM,6BAA6B,CACnD,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAA;QAED,IACE,SAAS,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;YACvC,SAAS,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EACvC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;YACnF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;YAC/E,OAAM;QACR,CAAC;QAED,IAAI,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAA;YACxE,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;gBACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;gBACxE,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,CAAC,SAAS,EAAE,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAA;YAC1E,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;gBACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CACT,6EAA6E,CAC9E,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const syncCommand: import("citty").CommandDef<{
|
|
2
|
+
token: {
|
|
3
|
+
type: "string";
|
|
4
|
+
description: string;
|
|
5
|
+
default: string;
|
|
6
|
+
};
|
|
7
|
+
'dashboard-url': {
|
|
8
|
+
type: "string";
|
|
9
|
+
description: string;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
'transcripts-dir': {
|
|
13
|
+
type: "string";
|
|
14
|
+
description: string;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
'dry-run': {
|
|
18
|
+
type: "boolean";
|
|
19
|
+
description: string;
|
|
20
|
+
default: false;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;EA6NtB,CAAA"}
|