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.
Files changed (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/auden-paths.d.ts +8 -0
  4. package/dist/auden-paths.d.ts.map +1 -0
  5. package/dist/auden-paths.js +10 -0
  6. package/dist/auden-paths.js.map +1 -0
  7. package/dist/bin.d.ts +11 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +13 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/chunk.d.ts +3 -0
  12. package/dist/chunk.d.ts.map +1 -0
  13. package/dist/chunk.js +13 -0
  14. package/dist/chunk.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +13 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +125 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/eval/index.d.ts +2 -0
  20. package/dist/commands/eval/index.d.ts.map +1 -0
  21. package/dist/commands/eval/index.js +2 -0
  22. package/dist/commands/eval/index.js.map +1 -0
  23. package/dist/commands/eval/run.d.ts +38 -0
  24. package/dist/commands/eval/run.d.ts.map +1 -0
  25. package/dist/commands/eval/run.js +179 -0
  26. package/dist/commands/eval/run.js.map +1 -0
  27. package/dist/commands/guides/active.d.ts +2 -0
  28. package/dist/commands/guides/active.d.ts.map +1 -0
  29. package/dist/commands/guides/active.js +38 -0
  30. package/dist/commands/guides/active.js.map +1 -0
  31. package/dist/commands/guides/index.d.ts +2 -0
  32. package/dist/commands/guides/index.d.ts.map +1 -0
  33. package/dist/commands/guides/index.js +13 -0
  34. package/dist/commands/guides/index.js.map +1 -0
  35. package/dist/commands/guides/project.d.ts +13 -0
  36. package/dist/commands/guides/project.d.ts.map +1 -0
  37. package/dist/commands/guides/project.js +71 -0
  38. package/dist/commands/guides/project.js.map +1 -0
  39. package/dist/commands/guides/search.d.ts +8 -0
  40. package/dist/commands/guides/search.d.ts.map +1 -0
  41. package/dist/commands/guides/search.js +46 -0
  42. package/dist/commands/guides/search.js.map +1 -0
  43. package/dist/commands/init.d.ts +43 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +436 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/mcp.d.ts +23 -0
  48. package/dist/commands/mcp.d.ts.map +1 -0
  49. package/dist/commands/mcp.js +55 -0
  50. package/dist/commands/mcp.js.map +1 -0
  51. package/dist/commands/pull.d.ts +38 -0
  52. package/dist/commands/pull.d.ts.map +1 -0
  53. package/dist/commands/pull.js +127 -0
  54. package/dist/commands/pull.js.map +1 -0
  55. package/dist/commands/rules/export.d.ts +140 -0
  56. package/dist/commands/rules/export.d.ts.map +1 -0
  57. package/dist/commands/rules/export.js +635 -0
  58. package/dist/commands/rules/export.js.map +1 -0
  59. package/dist/commands/rules/import.d.ts +33 -0
  60. package/dist/commands/rules/import.d.ts.map +1 -0
  61. package/dist/commands/rules/import.js +122 -0
  62. package/dist/commands/rules/import.js.map +1 -0
  63. package/dist/commands/rules/index.d.ts +2 -0
  64. package/dist/commands/rules/index.d.ts.map +1 -0
  65. package/dist/commands/rules/index.js +13 -0
  66. package/dist/commands/rules/index.js.map +1 -0
  67. package/dist/commands/rules/watch.d.ts +43 -0
  68. package/dist/commands/rules/watch.d.ts.map +1 -0
  69. package/dist/commands/rules/watch.js +125 -0
  70. package/dist/commands/rules/watch.js.map +1 -0
  71. package/dist/commands/status.d.ts +2 -0
  72. package/dist/commands/status.d.ts.map +1 -0
  73. package/dist/commands/status.js +61 -0
  74. package/dist/commands/status.js.map +1 -0
  75. package/dist/commands/suggest.d.ts +8 -0
  76. package/dist/commands/suggest.d.ts.map +1 -0
  77. package/dist/commands/suggest.js +43 -0
  78. package/dist/commands/suggest.js.map +1 -0
  79. package/dist/commands/sync.d.ts +23 -0
  80. package/dist/commands/sync.d.ts.map +1 -0
  81. package/dist/commands/sync.js +193 -0
  82. package/dist/commands/sync.js.map +1 -0
  83. package/dist/commands/verdict/index.d.ts +2 -0
  84. package/dist/commands/verdict/index.d.ts.map +1 -0
  85. package/dist/commands/verdict/index.js +11 -0
  86. package/dist/commands/verdict/index.js.map +1 -0
  87. package/dist/commands/verdict/record.d.ts +18 -0
  88. package/dist/commands/verdict/record.d.ts.map +1 -0
  89. package/dist/commands/verdict/record.js +60 -0
  90. package/dist/commands/verdict/record.js.map +1 -0
  91. package/dist/config.d.ts +96 -0
  92. package/dist/config.d.ts.map +1 -0
  93. package/dist/config.js +246 -0
  94. package/dist/config.js.map +1 -0
  95. package/dist/context/pull.d.ts +40 -0
  96. package/dist/context/pull.d.ts.map +1 -0
  97. package/dist/context/pull.js +46 -0
  98. package/dist/context/pull.js.map +1 -0
  99. package/dist/dashboard-health.d.ts +20 -0
  100. package/dist/dashboard-health.d.ts.map +1 -0
  101. package/dist/dashboard-health.js +24 -0
  102. package/dist/dashboard-health.js.map +1 -0
  103. package/dist/eval-provider.d.ts +30 -0
  104. package/dist/eval-provider.d.ts.map +1 -0
  105. package/dist/eval-provider.js +359 -0
  106. package/dist/eval-provider.js.map +1 -0
  107. package/dist/eval-summary.d.ts +24 -0
  108. package/dist/eval-summary.d.ts.map +1 -0
  109. package/dist/eval-summary.js +30 -0
  110. package/dist/eval-summary.js.map +1 -0
  111. package/dist/feedback/extract.d.ts +6 -0
  112. package/dist/feedback/extract.d.ts.map +1 -0
  113. package/dist/feedback/extract.js +580 -0
  114. package/dist/feedback/extract.js.map +1 -0
  115. package/dist/http-retry.d.ts +23 -0
  116. package/dist/http-retry.d.ts.map +1 -0
  117. package/dist/http-retry.js +54 -0
  118. package/dist/http-retry.js.map +1 -0
  119. package/dist/index.d.ts +6 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +33 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/mcp/client.d.ts +70 -0
  124. package/dist/mcp/client.d.ts.map +1 -0
  125. package/dist/mcp/client.js +121 -0
  126. package/dist/mcp/client.js.map +1 -0
  127. package/dist/mcp/scope.d.ts +30 -0
  128. package/dist/mcp/scope.d.ts.map +1 -0
  129. package/dist/mcp/scope.js +64 -0
  130. package/dist/mcp/scope.js.map +1 -0
  131. package/dist/mcp/server.d.ts +57 -0
  132. package/dist/mcp/server.d.ts.map +1 -0
  133. package/dist/mcp/server.js +427 -0
  134. package/dist/mcp/server.js.map +1 -0
  135. package/dist/mcp/write-items.d.ts +34 -0
  136. package/dist/mcp/write-items.d.ts.map +1 -0
  137. package/dist/mcp/write-items.js +59 -0
  138. package/dist/mcp/write-items.js.map +1 -0
  139. package/dist/rules/deletions-client.d.ts +16 -0
  140. package/dist/rules/deletions-client.d.ts.map +1 -0
  141. package/dist/rules/deletions-client.js +40 -0
  142. package/dist/rules/deletions-client.js.map +1 -0
  143. package/dist/rules/diff.d.ts +19 -0
  144. package/dist/rules/diff.d.ts.map +1 -0
  145. package/dist/rules/diff.js +36 -0
  146. package/dist/rules/diff.js.map +1 -0
  147. package/dist/rules/discover.d.ts +81 -0
  148. package/dist/rules/discover.d.ts.map +1 -0
  149. package/dist/rules/discover.js +307 -0
  150. package/dist/rules/discover.js.map +1 -0
  151. package/dist/rules/file-origin.d.ts +16 -0
  152. package/dist/rules/file-origin.d.ts.map +1 -0
  153. package/dist/rules/file-origin.js +31 -0
  154. package/dist/rules/file-origin.js.map +1 -0
  155. package/dist/rules/global-flag.d.ts +12 -0
  156. package/dist/rules/global-flag.d.ts.map +1 -0
  157. package/dist/rules/global-flag.js +15 -0
  158. package/dist/rules/global-flag.js.map +1 -0
  159. package/dist/rules/import-client.d.ts +37 -0
  160. package/dist/rules/import-client.d.ts.map +1 -0
  161. package/dist/rules/import-client.js +98 -0
  162. package/dist/rules/import-client.js.map +1 -0
  163. package/dist/rules/init-pull.d.ts +34 -0
  164. package/dist/rules/init-pull.d.ts.map +1 -0
  165. package/dist/rules/init-pull.js +43 -0
  166. package/dist/rules/init-pull.js.map +1 -0
  167. package/dist/rules/member-files-client.d.ts +17 -0
  168. package/dist/rules/member-files-client.d.ts.map +1 -0
  169. package/dist/rules/member-files-client.js +29 -0
  170. package/dist/rules/member-files-client.js.map +1 -0
  171. package/dist/rules/path-contains.d.ts +9 -0
  172. package/dist/rules/path-contains.d.ts.map +1 -0
  173. package/dist/rules/path-contains.js +17 -0
  174. package/dist/rules/path-contains.js.map +1 -0
  175. package/dist/rules/payload.d.ts +13 -0
  176. package/dist/rules/payload.d.ts.map +1 -0
  177. package/dist/rules/payload.js +35 -0
  178. package/dist/rules/payload.js.map +1 -0
  179. package/dist/rules/pull-bundle.d.ts +13 -0
  180. package/dist/rules/pull-bundle.d.ts.map +1 -0
  181. package/dist/rules/pull-bundle.js +32 -0
  182. package/dist/rules/pull-bundle.js.map +1 -0
  183. package/dist/rules/watch.d.ts +121 -0
  184. package/dist/rules/watch.d.ts.map +1 -0
  185. package/dist/rules/watch.js +457 -0
  186. package/dist/rules/watch.js.map +1 -0
  187. package/dist/skill-template.d.ts +19 -0
  188. package/dist/skill-template.d.ts.map +1 -0
  189. package/dist/skill-template.js +174 -0
  190. package/dist/skill-template.js.map +1 -0
  191. package/dist/sync-batches.d.ts +37 -0
  192. package/dist/sync-batches.d.ts.map +1 -0
  193. package/dist/sync-batches.js +67 -0
  194. package/dist/sync-batches.js.map +1 -0
  195. package/dist/sync-client.d.ts +22 -0
  196. package/dist/sync-client.d.ts.map +1 -0
  197. package/dist/sync-client.js +38 -0
  198. package/dist/sync-client.js.map +1 -0
  199. package/dist/sync-response.d.ts +23 -0
  200. package/dist/sync-response.d.ts.map +1 -0
  201. package/dist/sync-response.js +22 -0
  202. package/dist/sync-response.js.map +1 -0
  203. package/dist/token-verify.d.ts +14 -0
  204. package/dist/token-verify.d.ts.map +1 -0
  205. package/dist/token-verify.js +30 -0
  206. package/dist/token-verify.js.map +1 -0
  207. package/dist/usage/extract.d.ts +31 -0
  208. package/dist/usage/extract.d.ts.map +1 -0
  209. package/dist/usage/extract.js +200 -0
  210. package/dist/usage/extract.js.map +1 -0
  211. package/dist/usage/providers.d.ts +8 -0
  212. package/dist/usage/providers.d.ts.map +1 -0
  213. package/dist/usage/providers.js +23 -0
  214. package/dist/usage/providers.js.map +1 -0
  215. package/dist/verdict-queue.d.ts +50 -0
  216. package/dist/verdict-queue.d.ts.map +1 -0
  217. package/dist/verdict-queue.js +131 -0
  218. package/dist/verdict-queue.js.map +1 -0
  219. 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,2 @@
1
+ export declare const rulesCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export declare const statusCommand: import("citty").CommandDef<{}>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -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,8 @@
1
+ export declare const suggestCommand: import("citty").CommandDef<{
2
+ 'transcripts-dir': {
3
+ type: "string";
4
+ description: string;
5
+ default: string;
6
+ };
7
+ }>;
8
+ //# sourceMappingURL=suggest.d.ts.map
@@ -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"}