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,193 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { unlink } from 'node:fs/promises';
|
|
3
|
+
import { defineCommand } from 'citty';
|
|
4
|
+
import { AUDEN_GUIDES_FILE, AUDEN_QUEUE_DIR } from '../auden-paths.js';
|
|
5
|
+
import { readConfigToken, resolveDashboardUrl, writeConfigToken } from '../config.js';
|
|
6
|
+
import { extractConversationalFeedback } from '../feedback/extract.js';
|
|
7
|
+
import { pullGuideBundle } from '../rules/pull-bundle.js';
|
|
8
|
+
import { buildSyncBatches } from '../sync-batches.js';
|
|
9
|
+
import { postSyncBatch } from '../sync-client.js';
|
|
10
|
+
import { extractRunUsage } from '../usage/extract.js';
|
|
11
|
+
import { readVerdictQueue } from '../verdict-queue.js';
|
|
12
|
+
function hashId(prefix, value) {
|
|
13
|
+
return `${prefix}-${createHash('sha1').update(value).digest('hex').slice(0, 12)}`;
|
|
14
|
+
}
|
|
15
|
+
export const syncCommand = defineCommand({
|
|
16
|
+
meta: {
|
|
17
|
+
name: 'sync',
|
|
18
|
+
description: 'Push guide/skill suggestions to the dashboard and pull the latest guide bundle',
|
|
19
|
+
},
|
|
20
|
+
args: {
|
|
21
|
+
token: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Auden API token — overrides the stored token and is remembered in ~/.auden/config.json after a successful sync',
|
|
24
|
+
default: '',
|
|
25
|
+
},
|
|
26
|
+
'dashboard-url': {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: 'Override the dashboard base URL for this call (default: ~/.auden/config.json then the baked-in default)',
|
|
29
|
+
default: '',
|
|
30
|
+
},
|
|
31
|
+
'transcripts-dir': {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Optional Claude Code transcript directory (JSONL files)',
|
|
34
|
+
default: '',
|
|
35
|
+
},
|
|
36
|
+
'dry-run': {
|
|
37
|
+
type: 'boolean',
|
|
38
|
+
description: 'Extract conversational feedback without sending it to the dashboard',
|
|
39
|
+
default: false,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
async run({ args }) {
|
|
43
|
+
const queue = await readVerdictQueue(AUDEN_QUEUE_DIR);
|
|
44
|
+
// Permanently-invalid queue files (bad JSON or failing schema) would
|
|
45
|
+
// otherwise be re-warned about on every sync and inflate the pending count
|
|
46
|
+
// forever. Remove them now that they've been identified. Skipped on
|
|
47
|
+
// --dry-run so the flag stays side-effect-free.
|
|
48
|
+
if (!args['dry-run'] && queue.invalidFilePaths.length > 0) {
|
|
49
|
+
const removals = await Promise.allSettled(queue.invalidFilePaths.map((p) => unlink(p)));
|
|
50
|
+
let removed = 0;
|
|
51
|
+
removals.forEach((result, i) => {
|
|
52
|
+
if (result.status === 'fulfilled') {
|
|
53
|
+
removed += 1;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const err = result.reason;
|
|
57
|
+
if (err?.code === 'ENOENT') {
|
|
58
|
+
removed += 1;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Left in place (e.g. a no-longer-writable queue dir) — surface it
|
|
62
|
+
// rather than retrying silently on every future sync.
|
|
63
|
+
console.warn(` warning: failed to delete invalid queue file ${queue.invalidFilePaths[i]}: ${err?.message}`);
|
|
64
|
+
});
|
|
65
|
+
if (removed > 0) {
|
|
66
|
+
console.warn(` warning: removed ${removed} invalid queue file(s).`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (queue.actions.length === 0) {
|
|
70
|
+
console.log(' No pending verdicts to sync.');
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(` ${queue.actions.length} verdict(s) queued.`);
|
|
74
|
+
}
|
|
75
|
+
const transcriptsDir = args['transcripts-dir'] || '';
|
|
76
|
+
const extracted = await extractConversationalFeedback(transcriptsDir ? { transcriptsDir } : undefined);
|
|
77
|
+
const usageExtracted = await extractRunUsage(transcriptsDir ? { transcriptsDir } : undefined);
|
|
78
|
+
console.log(` extracted ${extracted.guideSuggestions.length} guide draft(s) and ${extracted.skillSuggestions.length} skill suggestion(s).`);
|
|
79
|
+
if (usageExtracted.runUsage.length > 0) {
|
|
80
|
+
console.log(` extracted token usage for ${usageExtracted.runUsage.length} session(s).`);
|
|
81
|
+
}
|
|
82
|
+
if (usageExtracted.skillUsage.length > 0) {
|
|
83
|
+
console.log(` extracted skill-load usage for ${usageExtracted.skillUsage.length} session(s).`);
|
|
84
|
+
}
|
|
85
|
+
if (args['dry-run']) {
|
|
86
|
+
for (const suggestion of extracted.guideSuggestions) {
|
|
87
|
+
console.log(` guide: ${suggestion.content}`);
|
|
88
|
+
}
|
|
89
|
+
for (const suggestion of extracted.skillSuggestions) {
|
|
90
|
+
console.log(` skill: ${suggestion.signal}`);
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const storedToken = await readConfigToken();
|
|
95
|
+
const token = args.token.trim() || storedToken;
|
|
96
|
+
if (!token) {
|
|
97
|
+
console.log(' No dashboard token configured — get one from the dashboard (Settings → Developer → CLI Token), then run `auden sync --token <token>`. It is remembered after the first successful sync.');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const dashboardUrl = await resolveDashboardUrl(args['dashboard-url']);
|
|
101
|
+
const hasItemsToPush = queue.actions.length > 0 ||
|
|
102
|
+
extracted.guideSuggestions.length > 0 ||
|
|
103
|
+
extracted.skillSuggestions.length > 0 ||
|
|
104
|
+
usageExtracted.runUsage.length > 0 ||
|
|
105
|
+
usageExtracted.skillUsage.length > 0;
|
|
106
|
+
// Set once the server has accepted the token (push or pull) — gates
|
|
107
|
+
// persisting a --token flag so a typo'd token is never stored.
|
|
108
|
+
let serverAccepted = false;
|
|
109
|
+
if (!hasItemsToPush) {
|
|
110
|
+
console.log(' Nothing new to push.');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Chunked to stay under the server's per-request caps
|
|
114
|
+
// (MAX_SYNC_ACTIONS_BATCH / MAX_SYNC_AUX_BATCH) — a batch's queue files
|
|
115
|
+
// are deleted only once its own request succeeds, so a later batch's
|
|
116
|
+
// failure never loses an already-synced action on the next run.
|
|
117
|
+
const batches = buildSyncBatches({
|
|
118
|
+
actions: queue.actions,
|
|
119
|
+
filePaths: queue.filePaths,
|
|
120
|
+
guideSuggestions: extracted.guideSuggestions.map((suggestion) => ({
|
|
121
|
+
id: suggestion.id,
|
|
122
|
+
content: suggestion.content,
|
|
123
|
+
reasoning: `${suggestion.reasoning} Confidence ${Math.round(suggestion.confidence * 100)}%.`,
|
|
124
|
+
triggerType: suggestion.triggerType,
|
|
125
|
+
sourceActionIds: suggestion.citations,
|
|
126
|
+
status: 'pending',
|
|
127
|
+
})),
|
|
128
|
+
feedbackCandidates: extracted.skillSuggestions.map((suggestion) => ({
|
|
129
|
+
id: hashId('candidate', suggestion.id),
|
|
130
|
+
signal: suggestion.signal,
|
|
131
|
+
signalType: 'skill_suggestion',
|
|
132
|
+
confidence: suggestion.confidence,
|
|
133
|
+
occurrences: suggestion.occurrences,
|
|
134
|
+
status: 'inferred',
|
|
135
|
+
})),
|
|
136
|
+
runUsage: usageExtracted.runUsage,
|
|
137
|
+
skillUsage: usageExtracted.skillUsage,
|
|
138
|
+
});
|
|
139
|
+
let totalSynced = 0;
|
|
140
|
+
for (const batch of batches) {
|
|
141
|
+
const { synced } = await postSyncBatch({
|
|
142
|
+
dashboardUrl,
|
|
143
|
+
token,
|
|
144
|
+
payload: batch.payload,
|
|
145
|
+
retryOptions: {
|
|
146
|
+
onRetry: (attempt, delayMs, reason) => console.warn(` warning: sync attempt ${attempt} failed (${reason}) — retrying in ${Math.round(delayMs / 1000)}s…`),
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
serverAccepted = true;
|
|
150
|
+
totalSynced += synced;
|
|
151
|
+
// Remove this batch's processed queue files so they are not re-sent
|
|
152
|
+
// on the next sync.
|
|
153
|
+
const unlinkResults = await Promise.allSettled(batch.filePaths.map((p) => unlink(p)));
|
|
154
|
+
unlinkResults.forEach((result, j) => {
|
|
155
|
+
if (result.status === 'rejected') {
|
|
156
|
+
const err = result.reason;
|
|
157
|
+
if (err?.code !== 'ENOENT') {
|
|
158
|
+
console.warn(` warning: failed to delete queue file ${batch.filePaths[j]}: ${err?.message}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
console.log(` synced ${totalSynced} item(s) to the dashboard.`);
|
|
164
|
+
}
|
|
165
|
+
// Pull updated guide bundle and cache locally for offline eval — even when
|
|
166
|
+
// nothing was pushed, so a fresh `auden sync --token` connects and seeds
|
|
167
|
+
// ~/.auden/guides.json.
|
|
168
|
+
try {
|
|
169
|
+
const { bundle } = await pullGuideBundle({
|
|
170
|
+
dashboardUrl,
|
|
171
|
+
token,
|
|
172
|
+
bundlePath: AUDEN_GUIDES_FILE,
|
|
173
|
+
});
|
|
174
|
+
serverAccepted = true;
|
|
175
|
+
console.log(` pulled ${bundle.guides.length} active guide(s) → ~/.auden/guides.json`);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
179
|
+
console.warn(` warning: ${message} — skipping.`);
|
|
180
|
+
}
|
|
181
|
+
if (serverAccepted && args.token.trim() && args.token.trim() !== storedToken) {
|
|
182
|
+
try {
|
|
183
|
+
await writeConfigToken(args.token);
|
|
184
|
+
console.log(' token stored in ~/.auden/config.json — future syncs need no --token');
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
188
|
+
console.warn(` warning: could not store token — ${message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/verdict/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,qDAQzB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
export const verdictCommand = defineCommand({
|
|
3
|
+
meta: {
|
|
4
|
+
name: 'verdict',
|
|
5
|
+
description: 'Record and manage agent action verdicts',
|
|
6
|
+
},
|
|
7
|
+
subCommands: {
|
|
8
|
+
record: () => import('./record.js').then((m) => m.verdictRecordCommand),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/verdict/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yCAAyC;KACvD;IACD,WAAW,EAAE;QACX,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;KACxE;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const verdictRecordCommand: import("citty").CommandDef<{
|
|
2
|
+
verdict: {
|
|
3
|
+
type: "string";
|
|
4
|
+
description: string;
|
|
5
|
+
required: true;
|
|
6
|
+
};
|
|
7
|
+
summary: {
|
|
8
|
+
type: "string";
|
|
9
|
+
description: string;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
'session-id': {
|
|
13
|
+
type: "string";
|
|
14
|
+
description: string;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/commands/verdict/record.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;EAyD/B,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, rename, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { defineCommand } from 'citty';
|
|
5
|
+
import { AUDEN_QUEUE_DIR } from '../../auden-paths.js';
|
|
6
|
+
import { MAX_QUEUED_VERDICTS, enforceVerdictQueueCap } from '../../verdict-queue.js';
|
|
7
|
+
const VALID_VERDICTS = ['aligned', 'misaligned', 'unguided'];
|
|
8
|
+
export const verdictRecordCommand = defineCommand({
|
|
9
|
+
meta: {
|
|
10
|
+
name: 'record',
|
|
11
|
+
description: 'Record a verdict for a completed agent action',
|
|
12
|
+
},
|
|
13
|
+
args: {
|
|
14
|
+
verdict: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'Verdict outcome: aligned | misaligned | unguided',
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
summary: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Short description of the action that was evaluated',
|
|
22
|
+
default: '',
|
|
23
|
+
},
|
|
24
|
+
'session-id': {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Session ID (optional, defaults to "unknown")',
|
|
27
|
+
default: '',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
async run({ args }) {
|
|
31
|
+
if (!VALID_VERDICTS.includes(args.verdict)) {
|
|
32
|
+
console.error(` Error: --verdict must be one of: ${VALID_VERDICTS.join(', ')}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const entry = {
|
|
36
|
+
id: randomUUID(),
|
|
37
|
+
sessionId: args['session-id'] || 'unknown',
|
|
38
|
+
actionType: 'tool_use',
|
|
39
|
+
summary: args.summary || '(no summary)',
|
|
40
|
+
verdict: args.verdict,
|
|
41
|
+
timestamp: new Date().toISOString(),
|
|
42
|
+
};
|
|
43
|
+
await mkdir(AUDEN_QUEUE_DIR, { recursive: true });
|
|
44
|
+
// Write to a temp file and rename into place so a reader (auden sync) never
|
|
45
|
+
// observes a half-written file. readVerdictQueue only reads `.json`, so a
|
|
46
|
+
// stray `.tmp` left by a crash mid-write is ignored rather than mistaken
|
|
47
|
+
// for a corrupt queue entry.
|
|
48
|
+
const finalPath = join(AUDEN_QUEUE_DIR, `${entry.id}.json`);
|
|
49
|
+
const tmpPath = `${finalPath}.tmp`;
|
|
50
|
+
await writeFile(tmpPath, JSON.stringify(entry, null, 2) + '\n');
|
|
51
|
+
await rename(tmpPath, finalPath);
|
|
52
|
+
const { evicted } = await enforceVerdictQueueCap(AUDEN_QUEUE_DIR);
|
|
53
|
+
if (evicted > 0) {
|
|
54
|
+
console.warn(` warning: verdict queue exceeded ${MAX_QUEUED_VERDICTS} pending entries — evicted ${evicted} oldest verdict(s). Run \`auden sync\` more often, or check your dashboard connection with \`auden doctor\`.`);
|
|
55
|
+
}
|
|
56
|
+
console.log(` Verdict queued: ${entry.verdict} — "${entry.summary}"`);
|
|
57
|
+
console.log(` Saved to ~/.auden/queue/${entry.id}.json`);
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/verdict/record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEpF,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAU,CAAA;AAGrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAChD,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,+CAA+C;KAC7D;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,IAAI;SACf;QACD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oDAAoD;YACjE,OAAO,EAAE,EAAE;SACZ;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8CAA8C;YAC3D,OAAO,EAAE,EAAE;SACZ;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAuB,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,sCAAsC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS;YAC1C,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,cAAc;YACvC,OAAO,EAAE,IAAI,CAAC,OAAuB;YACrC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAA;QAED,MAAM,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,4EAA4E;QAC5E,0EAA0E;QAC1E,yEAAyE;QACzE,6BAA6B;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,GAAG,SAAS,MAAM,CAAA;QAClC,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAC/D,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,eAAe,CAAC,CAAA;QACjE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,qCAAqC,mBAAmB,8BAA8B,OAAO,8GAA8G,CAC5M,CAAA;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;QACtE,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;CACF,CAAC,CAAA"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Permission bits for `~/.auden/` and other auden-owned directories. */
|
|
2
|
+
export declare const AUDEN_DIR_MODE = 448;
|
|
3
|
+
/** Permission bits for `~/.auden/config.json` — it holds a bearer token. */
|
|
4
|
+
export declare const AUDEN_CONFIG_MODE = 384;
|
|
5
|
+
/**
|
|
6
|
+
* Create `dir` (and parents) with owner-only permissions, tightening an
|
|
7
|
+
* existing directory's mode too — `mkdir`'s `mode` option only applies to
|
|
8
|
+
* newly-created directories, so a pre-existing `~/.auden` from an older
|
|
9
|
+
* version (or a permissive umask) would otherwise stay world-readable.
|
|
10
|
+
*/
|
|
11
|
+
export declare function ensureAudenDir(dir: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Baked-in fallback when the config file has no `dashboardUrl`. Build-time
|
|
14
|
+
* constant so a stripped-down `auden` binary (no config, no flags) still
|
|
15
|
+
* talks to prod.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_DASHBOARD_URL = "https://app.auden.to";
|
|
18
|
+
/**
|
|
19
|
+
* Normalize a candidate dashboard URL to its origin (scheme + host + port).
|
|
20
|
+
* Returns '' when the input is empty, whitespace-only, unparseable, or has a
|
|
21
|
+
* non-http(s) protocol. Centralized here so reads, writes, the resolve
|
|
22
|
+
* helper, and the `auden init` flag-validation path all agree on what counts
|
|
23
|
+
* as a valid URL and what gets stripped (paths, queries, fragments, trailing
|
|
24
|
+
* whitespace).
|
|
25
|
+
*/
|
|
26
|
+
export declare function normalizeDashboardUrl(value: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Read the stored API token (persisted by `auden init --token` or the first
|
|
29
|
+
* successful `auden sync --token`). Returns '' if absent or unreadable.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readConfigToken(configPath?: string): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Persist the API token while preserving any other fields already in the
|
|
34
|
+
* config file. Same malformed-config guard as the other writers — refuses to
|
|
35
|
+
* overwrite a broken file. Throws on an empty/whitespace token so callers
|
|
36
|
+
* can't silently wipe a working credential.
|
|
37
|
+
*/
|
|
38
|
+
export declare function writeConfigToken(value: string, configPath?: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Read the `discoverGlobal` flag. When true, `auden rules import` extends its
|
|
41
|
+
* default scan to `~/.claude/CLAUDE.md`. Defaults to false on missing or
|
|
42
|
+
* malformed config.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readConfigDiscoverGlobal(configPath?: string): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Persist `discoverGlobal` while preserving any other fields already in the
|
|
47
|
+
* config file. Creates the parent directory if needed.
|
|
48
|
+
*
|
|
49
|
+
* Throws when the existing config file is present but malformed, rather than
|
|
50
|
+
* silently overwriting it — callers must surface the error so the user can
|
|
51
|
+
* fix or remove the file before retrying.
|
|
52
|
+
*/
|
|
53
|
+
export declare function writeConfigDiscoverGlobal(value: boolean, configPath?: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Read the MCP bundle allowlist. When set to a non-empty array of slugs,
|
|
56
|
+
* `auden mcp` only exposes those bundles; when absent, empty, or malformed it
|
|
57
|
+
* returns `null`, meaning "no restriction" (all of the caller's bundles are
|
|
58
|
+
* reachable). A `--bundles` flag overrides this per invocation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function readConfigMcpBundles(configPath?: string): Promise<string[] | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Read whether `auden mcp` may perform writes (push/update/archive). Defaults
|
|
63
|
+
* to `true` — writes are enabled unless the config explicitly sets
|
|
64
|
+
* `mcp.write: false` or the caller passes `--read-only`. Returns `true` on a
|
|
65
|
+
* missing or malformed config so a fresh install is fully functional.
|
|
66
|
+
*/
|
|
67
|
+
export declare function readConfigMcpWrite(configPath?: string): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Read the configured dashboard base URL. Returns '' when absent, malformed,
|
|
70
|
+
* not a string, or not a valid http(s) URL. Always normalized to origin so
|
|
71
|
+
* callers can concatenate `${url}/api/...` without thinking about paths,
|
|
72
|
+
* trailing slashes, or stray whitespace from hand-edited configs.
|
|
73
|
+
*/
|
|
74
|
+
export declare function readConfigDashboardUrl(configPath?: string): Promise<string>;
|
|
75
|
+
/**
|
|
76
|
+
* Persist the dashboard URL. Same malformed-config guard as
|
|
77
|
+
* writeConfigDiscoverGlobal — refuses to overwrite a broken file. Throws
|
|
78
|
+
* when the value isn't a valid http(s) URL so callers can't silently store
|
|
79
|
+
* garbage that fails later at fetch time.
|
|
80
|
+
*/
|
|
81
|
+
export declare function writeConfigDashboardUrl(value: string, configPath?: string): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Resolve which dashboard URL a command should hit. Precedence:
|
|
84
|
+
* 1. Explicit `--dashboard-url` flag (`flag` arg, when non-empty and valid)
|
|
85
|
+
* 2. `dashboardUrl` field in ~/.auden/config.json
|
|
86
|
+
* 3. DEFAULT_DASHBOARD_URL baked into the build
|
|
87
|
+
*
|
|
88
|
+
* Throws when the flag was supplied but isn't a valid http(s) URL — silent
|
|
89
|
+
* fallback would let `auden sync --dashboard-url htps://typo` hit prod
|
|
90
|
+
* instead of the intended override. Matches `auden init`'s strictness.
|
|
91
|
+
*
|
|
92
|
+
* The result is always a bare origin (no path, no trailing slash) so
|
|
93
|
+
* `${resolved}/api/sync` works.
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveDashboardUrl(flag?: string, configPath?: string): Promise<string>;
|
|
96
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,yEAAyE;AACzE,eAAO,MAAM,cAAc,MAAQ,CAAA;AACnC,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,MAAQ,CAAA;AAEtC;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AA0BD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,yBAAyB,CAAA;AAE3D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU3D;AA2CD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,UAAU,SAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,UAAU,SAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,SAAe,GACxB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,OAAO,EACd,UAAU,SAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,SAAe,GACxB,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAa1B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,SAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAKpF;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,SAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAKvF;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EACb,UAAU,SAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,SAAK,EACT,UAAU,SAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|