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,359 @@
1
+ import { parseEvalProviderConfig, parseEvalProviderSettings } from '@auden.to/protocol';
2
+ import { AUDEN_CONFIG } from './auden-paths.js';
3
+ export const DEFAULT_EVAL_PROVIDER = 'openrouter';
4
+ export const DEFAULT_OPENROUTER_MODEL = 'anthropic/claude-sonnet-4.6';
5
+ const DEFAULT_SITE_NAME = 'Auden CLI';
6
+ const DEFAULT_SITE_URL = 'https://github.com/auden-to/auden';
7
+ const DEFAULT_MODELS = {
8
+ openrouter: DEFAULT_OPENROUTER_MODEL,
9
+ anthropic: 'claude-sonnet-4-6',
10
+ 'openai-compatible': 'gpt-5.5',
11
+ google: 'gemini-3.1-pro',
12
+ ollama: 'llama4',
13
+ };
14
+ const DEFAULT_BASE_URLS = {
15
+ openrouter: 'https://openrouter.ai/api/v1',
16
+ anthropic: 'https://api.anthropic.com',
17
+ 'openai-compatible': 'https://api.openai.com/v1',
18
+ google: 'https://generativelanguage.googleapis.com/v1beta/models',
19
+ ollama: 'http://127.0.0.1:11434/v1',
20
+ };
21
+ const EVAL_PROVIDERS = [
22
+ 'openrouter',
23
+ 'anthropic',
24
+ 'openai-compatible',
25
+ 'google',
26
+ 'ollama',
27
+ ];
28
+ function trimOrUndefined(value) {
29
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
30
+ }
31
+ function normalizeBaseUrl(baseUrl) {
32
+ return baseUrl.replace(/\/+$/, '');
33
+ }
34
+ function normalizeProviderBaseUrl(provider, baseUrl) {
35
+ const normalizedBaseUrl = normalizeBaseUrl(baseUrl);
36
+ if (provider === 'ollama' && !normalizedBaseUrl.endsWith('/v1')) {
37
+ return `${normalizedBaseUrl}/v1`;
38
+ }
39
+ return normalizedBaseUrl;
40
+ }
41
+ function isRecord(value) {
42
+ return !!value && typeof value === 'object';
43
+ }
44
+ function isEvalProviderKind(value) {
45
+ return EVAL_PROVIDERS.includes(value);
46
+ }
47
+ function getProviderApiKeyEnvVar(provider) {
48
+ switch (provider) {
49
+ case 'openrouter':
50
+ return 'OPENROUTER_API_KEY';
51
+ case 'anthropic':
52
+ return 'ANTHROPIC_API_KEY';
53
+ case 'openai-compatible':
54
+ return 'OPENAI_API_KEY';
55
+ case 'google':
56
+ return 'GOOGLE_API_KEY';
57
+ case 'ollama':
58
+ return 'OLLAMA_API_KEY';
59
+ }
60
+ }
61
+ function getProviderBaseUrlEnvVar(provider) {
62
+ switch (provider) {
63
+ case 'openrouter':
64
+ return 'OPENROUTER_BASE_URL';
65
+ case 'anthropic':
66
+ return 'ANTHROPIC_BASE_URL';
67
+ case 'openai-compatible':
68
+ return 'OPENAI_BASE_URL';
69
+ case 'google':
70
+ return 'GOOGLE_BASE_URL';
71
+ case 'ollama':
72
+ return 'OLLAMA_BASE_URL';
73
+ }
74
+ }
75
+ function requireApiKey(config) {
76
+ if (config.apiKey) {
77
+ return config.apiKey;
78
+ }
79
+ const envVar = getProviderApiKeyEnvVar(config.provider);
80
+ if (!envVar) {
81
+ throw new Error(`Provider ${config.provider} does not require an API key.`);
82
+ }
83
+ throw new Error(` Error: ${envVar} environment variable is not set.\n` +
84
+ ` Export it before running, or add eval.apiKey to ${AUDEN_CONFIG}.`);
85
+ }
86
+ export function readStoredEvalProviderSettings(rawConfig) {
87
+ if (!isRecord(rawConfig) || !('eval' in rawConfig) || rawConfig['eval'] == null) {
88
+ return {};
89
+ }
90
+ return parseEvalProviderSettings(rawConfig['eval']);
91
+ }
92
+ export function resolveEvalProviderConfig(rawConfig, env, overrides = {}) {
93
+ const stored = readStoredEvalProviderSettings(rawConfig);
94
+ const providerValue = trimOrUndefined(overrides.provider) ??
95
+ trimOrUndefined(env['AUDEN_EVAL_PROVIDER']) ??
96
+ stored.provider ??
97
+ DEFAULT_EVAL_PROVIDER;
98
+ if (!isEvalProviderKind(providerValue)) {
99
+ throw new Error(`Unsupported eval provider "${providerValue}". Supported providers: ${EVAL_PROVIDERS.join(', ')}`);
100
+ }
101
+ const provider = providerValue;
102
+ const providerApiKeyEnvVar = getProviderApiKeyEnvVar(provider);
103
+ const providerBaseUrlEnvVar = getProviderBaseUrlEnvVar(provider);
104
+ const model = trimOrUndefined(overrides.model) ??
105
+ trimOrUndefined(env['AUDEN_EVAL_MODEL']) ??
106
+ stored.model ??
107
+ DEFAULT_MODELS[provider];
108
+ const apiKey = trimOrUndefined(overrides.apiKey) ??
109
+ trimOrUndefined(env['AUDEN_EVAL_API_KEY']) ??
110
+ trimOrUndefined(env[providerApiKeyEnvVar]) ??
111
+ stored.apiKey;
112
+ const baseUrl = trimOrUndefined(overrides.baseUrl) ??
113
+ trimOrUndefined(env['AUDEN_EVAL_BASE_URL']) ??
114
+ trimOrUndefined(env[providerBaseUrlEnvVar]) ??
115
+ (provider === 'ollama' ? trimOrUndefined(env['OLLAMA_HOST']) : undefined) ??
116
+ stored.baseUrl ??
117
+ DEFAULT_BASE_URLS[provider];
118
+ const siteUrl = trimOrUndefined(env['AUDEN_OPENROUTER_SITE_URL']) ??
119
+ stored.siteUrl ??
120
+ DEFAULT_SITE_URL;
121
+ const siteName = trimOrUndefined(env['AUDEN_OPENROUTER_SITE_NAME']) ??
122
+ stored.siteName ??
123
+ DEFAULT_SITE_NAME;
124
+ return parseEvalProviderConfig({
125
+ provider,
126
+ model,
127
+ apiKey,
128
+ baseUrl: normalizeProviderBaseUrl(provider, baseUrl),
129
+ siteUrl: provider === 'openrouter' ? siteUrl : undefined,
130
+ siteName: provider === 'openrouter' ? siteName : undefined,
131
+ });
132
+ }
133
+ /**
134
+ * Default per-request timeout for eval provider calls. Generous because LLM
135
+ * completions can legitimately take tens of seconds; the guard is against a
136
+ * hung connection blocking the CLI (and the Claude Code Stop hook) forever.
137
+ * Override with `AUDEN_EVAL_TIMEOUT_MS`.
138
+ */
139
+ export const DEFAULT_EVAL_FETCH_TIMEOUT_MS = 120_000;
140
+ export function evalFetchTimeoutMs(env = process.env) {
141
+ const raw = env['AUDEN_EVAL_TIMEOUT_MS'];
142
+ const parsed = raw ? Number(raw) : Number.NaN;
143
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_EVAL_FETCH_TIMEOUT_MS;
144
+ }
145
+ /**
146
+ * `fetch` with an abort-on-timeout signal. A timeout surfaces as a clear,
147
+ * provider-tagged error rather than a raw `TimeoutError`.
148
+ */
149
+ async function fetchWithTimeout(provider, url, init) {
150
+ const timeoutMs = evalFetchTimeoutMs();
151
+ try {
152
+ return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });
153
+ }
154
+ catch (err) {
155
+ if (err instanceof Error &&
156
+ (err.name === 'TimeoutError' || err.name === 'AbortError')) {
157
+ throw new Error(`${provider} API request timed out after ${timeoutMs}ms`);
158
+ }
159
+ throw err;
160
+ }
161
+ }
162
+ async function readErrorBody(response) {
163
+ return response.text().catch(() => response.statusText);
164
+ }
165
+ function extractMessageText(content) {
166
+ if (typeof content === 'string') {
167
+ return content;
168
+ }
169
+ if (!Array.isArray(content)) {
170
+ return '';
171
+ }
172
+ return content
173
+ .map((part) => {
174
+ if (typeof part === 'string') {
175
+ return part;
176
+ }
177
+ if (isRecord(part) && typeof part['text'] === 'string') {
178
+ return part['text'];
179
+ }
180
+ return '';
181
+ })
182
+ .join('');
183
+ }
184
+ function extractChatCompletionText(data) {
185
+ if (!isRecord(data) || !Array.isArray(data['choices'])) {
186
+ return '';
187
+ }
188
+ const firstChoice = data['choices'][0];
189
+ if (!isRecord(firstChoice) || !isRecord(firstChoice['message'])) {
190
+ return '';
191
+ }
192
+ return extractMessageText(firstChoice['message']['content']);
193
+ }
194
+ function extractAnthropicText(data) {
195
+ if (!isRecord(data) || !Array.isArray(data['content'])) {
196
+ return '';
197
+ }
198
+ return data['content']
199
+ .map((block) => {
200
+ if (isRecord(block) && typeof block['text'] === 'string') {
201
+ return block['text'];
202
+ }
203
+ return '';
204
+ })
205
+ .join('');
206
+ }
207
+ function extractGoogleText(data) {
208
+ if (!isRecord(data) || !Array.isArray(data['candidates'])) {
209
+ return '';
210
+ }
211
+ const firstCandidate = data['candidates'][0];
212
+ if (!isRecord(firstCandidate) || !isRecord(firstCandidate['content'])) {
213
+ return '';
214
+ }
215
+ const parts = firstCandidate['content']['parts'];
216
+ if (!Array.isArray(parts)) {
217
+ return '';
218
+ }
219
+ return parts
220
+ .map((part) => {
221
+ if (isRecord(part) && typeof part['text'] === 'string') {
222
+ return part['text'];
223
+ }
224
+ return '';
225
+ })
226
+ .join('');
227
+ }
228
+ function createOpenAiCompatibleAdapter(config, extraHeaders = {}) {
229
+ const apiKey = requireApiKey(config);
230
+ return {
231
+ async complete(system, user) {
232
+ const response = await fetchWithTimeout(config.provider, `${config.baseUrl}/chat/completions`, {
233
+ method: 'POST',
234
+ headers: {
235
+ 'content-type': 'application/json',
236
+ authorization: `Bearer ${apiKey}`,
237
+ ...extraHeaders,
238
+ },
239
+ body: JSON.stringify({
240
+ model: config.model,
241
+ messages: [
242
+ { role: 'system', content: system },
243
+ { role: 'user', content: user },
244
+ ],
245
+ temperature: 0,
246
+ response_format: { type: 'json_object' },
247
+ }),
248
+ });
249
+ if (!response.ok) {
250
+ throw new Error(`${config.provider} API error ${response.status}: ${await readErrorBody(response)}`);
251
+ }
252
+ return extractChatCompletionText(await response.json());
253
+ },
254
+ };
255
+ }
256
+ function createAnthropicAdapter(config) {
257
+ const apiKey = requireApiKey(config);
258
+ return {
259
+ async complete(system, user) {
260
+ const response = await fetchWithTimeout(config.provider, `${config.baseUrl}/v1/messages`, {
261
+ method: 'POST',
262
+ headers: {
263
+ 'x-api-key': apiKey,
264
+ 'anthropic-version': '2023-06-01',
265
+ 'content-type': 'application/json',
266
+ },
267
+ body: JSON.stringify({
268
+ model: config.model,
269
+ max_tokens: 4096,
270
+ system,
271
+ messages: [{ role: 'user', content: user }],
272
+ }),
273
+ });
274
+ if (!response.ok) {
275
+ throw new Error(`Anthropic API error ${response.status}: ${await readErrorBody(response)}`);
276
+ }
277
+ return extractAnthropicText(await response.json());
278
+ },
279
+ };
280
+ }
281
+ function createGoogleAdapter(config) {
282
+ const apiKey = requireApiKey(config);
283
+ return {
284
+ async complete(system, user) {
285
+ const response = await fetchWithTimeout(config.provider, `${config.baseUrl}/${encodeURIComponent(config.model)}:generateContent?key=${encodeURIComponent(apiKey)}`, {
286
+ method: 'POST',
287
+ headers: {
288
+ 'content-type': 'application/json',
289
+ },
290
+ body: JSON.stringify({
291
+ systemInstruction: {
292
+ parts: [{ text: system }],
293
+ },
294
+ contents: [
295
+ {
296
+ role: 'user',
297
+ parts: [{ text: user }],
298
+ },
299
+ ],
300
+ generationConfig: {
301
+ temperature: 0,
302
+ responseMimeType: 'application/json',
303
+ },
304
+ }),
305
+ });
306
+ if (!response.ok) {
307
+ throw new Error(`Google API error ${response.status}: ${await readErrorBody(response)}`);
308
+ }
309
+ return extractGoogleText(await response.json());
310
+ },
311
+ };
312
+ }
313
+ function createOllamaAdapter(config) {
314
+ return {
315
+ async complete(system, user) {
316
+ const headers = {
317
+ 'content-type': 'application/json',
318
+ };
319
+ if (config.apiKey) {
320
+ headers['authorization'] = `Bearer ${config.apiKey}`;
321
+ }
322
+ const response = await fetchWithTimeout(config.provider, `${config.baseUrl}/chat/completions`, {
323
+ method: 'POST',
324
+ headers,
325
+ body: JSON.stringify({
326
+ model: config.model,
327
+ messages: [
328
+ { role: 'system', content: system },
329
+ { role: 'user', content: user },
330
+ ],
331
+ temperature: 0,
332
+ response_format: { type: 'json_object' },
333
+ }),
334
+ });
335
+ if (!response.ok) {
336
+ throw new Error(`Ollama API error ${response.status}: ${await readErrorBody(response)}`);
337
+ }
338
+ return extractChatCompletionText(await response.json());
339
+ },
340
+ };
341
+ }
342
+ export function createEvalAdapter(config) {
343
+ switch (config.provider) {
344
+ case 'openrouter':
345
+ return createOpenAiCompatibleAdapter(config, {
346
+ 'HTTP-Referer': config.siteUrl ?? DEFAULT_SITE_URL,
347
+ 'X-Title': config.siteName ?? DEFAULT_SITE_NAME,
348
+ });
349
+ case 'anthropic':
350
+ return createAnthropicAdapter(config);
351
+ case 'openai-compatible':
352
+ return createOpenAiCompatibleAdapter(config);
353
+ case 'google':
354
+ return createGoogleAdapter(config);
355
+ case 'ollama':
356
+ return createOllamaAdapter(config);
357
+ }
358
+ }
359
+ //# sourceMappingURL=eval-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-provider.js","sourceRoot":"","sources":["../src/eval-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { RunEvalResult } from '@auden.to/protocol';
2
+ export interface SessionSummaryOptions {
3
+ /**
4
+ * Dashboard origin to point the user at for a deeper review. When provided
5
+ * (and there are violations to review), it's appended as a "Review: <url>"
6
+ * suffix so the terminal becomes the headline and the dashboard is where you
7
+ * go deeper.
8
+ */
9
+ dashboardUrl?: string;
10
+ /**
11
+ * Cap on how many violated rule names are named inline before collapsing the
12
+ * rest into "(+N more)". Defaults to 3 to keep the line terminal-friendly.
13
+ */
14
+ maxNamedRules?: number;
15
+ }
16
+ /**
17
+ * Format a run evaluation into a single concise, one-paragraph summary suitable
18
+ * for printing at session end (the Claude Code Stop hook runs `auden eval`).
19
+ *
20
+ * Pure — no I/O. Counts only `aligned`/`misaligned` verdicts as applicable;
21
+ * `not_applicable` rules are ignored, matching how `score` is computed.
22
+ */
23
+ export declare function formatSessionSummary(result: RunEvalResult, options?: SessionSummaryOptions): string;
24
+ //# sourceMappingURL=eval-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-summary.d.ts","sourceRoot":"","sources":["../src/eval-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CA+BR"}
@@ -0,0 +1,30 @@
1
+ function pluralize(n, singular, plural = `${singular}s`) {
2
+ return n === 1 ? singular : plural;
3
+ }
4
+ /**
5
+ * Format a run evaluation into a single concise, one-paragraph summary suitable
6
+ * for printing at session end (the Claude Code Stop hook runs `auden eval`).
7
+ *
8
+ * Pure — no I/O. Counts only `aligned`/`misaligned` verdicts as applicable;
9
+ * `not_applicable` rules are ignored, matching how `score` is computed.
10
+ */
11
+ export function formatSessionSummary(result, options = {}) {
12
+ const maxNamed = options.maxNamedRules ?? 3;
13
+ const dashboardUrl = options.dashboardUrl?.trim() ?? '';
14
+ const misaligned = result.verdicts.filter((v) => v.verdict === 'misaligned');
15
+ const aligned = result.verdicts.filter((v) => v.verdict === 'aligned');
16
+ const applicable = aligned.length + misaligned.length;
17
+ if (applicable === 0) {
18
+ return 'Auden — no applicable rules evaluated this session.';
19
+ }
20
+ const pct = Math.round(result.score * 100);
21
+ if (misaligned.length === 0) {
22
+ return `Auden — ${pct}% aligned. All ${applicable} ${pluralize(applicable, 'rule')} followed this session. ✓`;
23
+ }
24
+ const named = misaligned.slice(0, maxNamed).map((v) => `"${v.rule}"`);
25
+ const overflow = misaligned.length - named.length;
26
+ const namesText = overflow > 0 ? `${named.join(', ')} (+${overflow} more)` : named.join(', ');
27
+ const reviewSuffix = dashboardUrl ? ` Review: ${dashboardUrl}` : '';
28
+ return `Auden — ${pct}% aligned. ${misaligned.length} of ${applicable} ${pluralize(applicable, 'rule')} violated this session: ${namesText}.${reviewSuffix}`;
29
+ }
30
+ //# sourceMappingURL=eval-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-summary.js","sourceRoot":"","sources":["../src/eval-summary.ts"],"names":[],"mappings":"AAiBA,SAAS,SAAS,CAAC,CAAS,EAAE,QAAgB,EAAE,MAAM,GAAG,GAAG,QAAQ,GAAG;IACrE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAqB,EACrB,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAEvD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,CAAA;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;IAErD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,qDAAqD,CAAA;IAC9D,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAA;IAE1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,GAAG,kBAAkB,UAAU,IAAI,SAAS,CAC5D,UAAU,EACV,MAAM,CACP,2BAA2B,CAAA;IAC9B,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IACjD,MAAM,SAAS,GACb,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7E,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnE,OAAO,WAAW,GAAG,cAAc,UAAU,CAAC,MAAM,OAAO,UAAU,IAAI,SAAS,CAChF,UAAU,EACV,MAAM,CACP,2BAA2B,SAAS,IAAI,YAAY,EAAE,CAAA;AACzD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ExtractedFeedbackBatch } from '@auden.to/protocol';
2
+ export declare function extractConversationalFeedback(options?: {
3
+ transcriptsDir?: string;
4
+ runsDir?: string;
5
+ }): Promise<ExtractedFeedbackBatch>;
6
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/feedback/extract.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,sBAAsB,EAKvB,MAAM,oBAAoB,CAAA;AAyuB3B,wBAAsB,6BAA6B,CAAC,OAAO,CAAC,EAAE;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAWlC"}