auden 0.1.0-alpha.4 → 0.1.0-alpha.5

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.
@@ -2,13 +2,19 @@ export declare const pullCommand: import("citty").CommandDef<{
2
2
  bundle: {
3
3
  type: "positional";
4
4
  description: string;
5
- required: true;
5
+ required: false;
6
+ default: string;
6
7
  };
7
8
  out: {
8
9
  type: "string";
9
10
  description: string;
10
11
  default: string;
11
12
  };
13
+ once: {
14
+ type: "boolean";
15
+ description: string;
16
+ default: false;
17
+ };
12
18
  types: {
13
19
  type: "string";
14
20
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyHtB,CAAA"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4MtB,CAAA"}
@@ -1,6 +1,8 @@
1
+ import { createInterface } from 'node:readline/promises';
1
2
  import { defineCommand } from 'citty';
2
3
  import { resolveDashboardUrl, resolveToken } from '../config.js';
3
4
  import { defaultPullDir, pullBundleToDir } from '../context/pull.js';
5
+ import { parseSelectionInput, subscribeBundles, } from '../docs/subscribe.js';
4
6
  import { createContextClient } from '../mcp/client.js';
5
7
  // Mirror the REST endpoint's (and MCP server's) MAX_LIMIT so an over-large
6
8
  // `--limit` fails client-side with a clear message instead of being rejected or
@@ -22,19 +24,25 @@ function parseTypesFlag(raw) {
22
24
  export const pullCommand = defineCommand({
23
25
  meta: {
24
26
  name: 'pull',
25
- description: 'Pull a context bundle’s canonical items into a local directory as Markdown',
27
+ description: 'Pull a context bundle into this repo and subscribe so `auden sync` keeps it fresh',
26
28
  },
27
29
  args: {
28
30
  bundle: {
29
31
  type: 'positional',
30
- description: 'Bundle slug to pull from (see "auden mcp" / the dashboard)',
31
- required: true,
32
+ description: 'Bundle slug to pull (omit for an interactive picker of your bundles)',
33
+ required: false,
34
+ default: '',
32
35
  },
33
36
  out: {
34
37
  type: 'string',
35
- description: 'Directory to write items into (default: .auden/context/<bundle>/)',
38
+ description: 'Directory to write items into (default: .auden/context/<bundle>/). Implies --once.',
36
39
  default: '',
37
40
  },
41
+ once: {
42
+ type: 'boolean',
43
+ description: 'Pull without subscribing — a one-off, not kept fresh by `auden sync`',
44
+ default: false,
45
+ },
38
46
  types: {
39
47
  type: 'string',
40
48
  description: 'Comma-separated item types to include (guide,document,reference,asset)',
@@ -62,12 +70,9 @@ export const pullCommand = defineCommand({
62
70
  },
63
71
  },
64
72
  async run({ args }) {
65
- const bundle = args.bundle.trim();
66
- if (!bundle) {
67
- console.error('A non-empty bundle slug is required: `auden pull <bundle>`.');
68
- process.exitCode = 1;
69
- return;
70
- }
73
+ // resolveToken honours the --token flag, then $AUDEN_TOKEN, then the stored
74
+ // config token (env-var credentials, PR #351). No positional-bundle guard
75
+ // here a bare `auden pull` opens the interactive picker below.
71
76
  const token = await resolveToken(args.token);
72
77
  if (!token) {
73
78
  console.error('No Auden token configured. Get one from the dashboard (Settings → Developer → CLI Token), then run `auden init --token <token>` or pass `auden pull <bundle> --token <token>`.');
@@ -93,35 +98,124 @@ export const pullCommand = defineCommand({
93
98
  process.exitCode = 1;
94
99
  return;
95
100
  }
96
- const dir = args.out.trim() || defaultPullDir(bundle, process.cwd());
97
- const types = parseTypesFlag(args.types);
98
- const query = args.query.trim();
99
101
  const client = createContextClient({ dashboardUrl, token });
100
- let result;
101
- try {
102
- result = await pullBundleToDir(client, {
103
- bundle,
104
- query: query || undefined,
105
- types: types.length > 0 ? types : undefined,
106
- limit,
107
- }, dir);
102
+ const cwd = process.cwd();
103
+ // Resolve which bundles to pull: an explicit positional, or an interactive
104
+ // picker when none is given (restores the discoverability the old
105
+ // `docs enable` picker provided).
106
+ const explicit = args.bundle.trim();
107
+ // --out targets a single directory, so it only makes sense with an explicit
108
+ // single bundle — reject it with the multi-select picker rather than
109
+ // silently ignoring it and writing to the default dirs.
110
+ if (args.out.trim() && !explicit) {
111
+ console.error('--out requires an explicit bundle: `auden pull <bundle> --out <dir>` (it cannot be combined with the interactive picker).');
112
+ process.exitCode = 1;
113
+ return;
108
114
  }
109
- catch (err) {
110
- console.error(err instanceof Error ? err.message : String(err));
115
+ let bundles;
116
+ if (explicit) {
117
+ bundles = [explicit];
118
+ }
119
+ else if (process.stdin.isTTY) {
120
+ try {
121
+ bundles = await pickBundles(client);
122
+ }
123
+ catch (err) {
124
+ console.error(err instanceof Error ? err.message : String(err));
125
+ process.exitCode = 1;
126
+ return;
127
+ }
128
+ if (bundles.length === 0) {
129
+ console.log('No bundles selected.');
130
+ return;
131
+ }
132
+ }
133
+ else {
134
+ console.error('A bundle slug is required: `auden pull <bundle>` (or run in an interactive terminal to pick).');
111
135
  process.exitCode = 1;
112
136
  return;
113
137
  }
114
- const skipped = result.items.length - result.written.length;
115
- console.log(`Pulled ${result.written.length} item(s) from "${bundle}" into ${dir}` +
116
- (skipped > 0
117
- ? ` (${skipped} item(s) without text content skipped, e.g. assets)`
118
- : ''));
119
- for (const path of result.written) {
120
- console.log(` ${path}`);
138
+ // A custom --out is inherently a one-off to a chosen location; subscribing
139
+ // there would be inconsistent (sync refreshes the default dir), so --out
140
+ // implies --once. A picker selection can target several bundles, so --out
141
+ // (single directory) doesn't apply to it.
142
+ const customOut = args.out.trim();
143
+ const subscribe = !args.once && !customOut;
144
+ const types = parseTypesFlag(args.types);
145
+ const query = args.query.trim();
146
+ let anyFailed = false;
147
+ const pulled = [];
148
+ for (const bundle of bundles) {
149
+ const dir = explicit && customOut ? customOut : defaultPullDir(bundle, cwd);
150
+ try {
151
+ const result = await pullBundleToDir(client, {
152
+ bundle,
153
+ query: query || undefined,
154
+ types: types.length > 0 ? types : undefined,
155
+ limit,
156
+ }, dir);
157
+ const skipped = result.items.length - result.written.length;
158
+ console.log(`Pulled ${result.written.length} item(s) from "${bundle}" into ${dir}` +
159
+ (skipped > 0
160
+ ? ` (${skipped} item(s) without text content skipped, e.g. assets)`
161
+ : ''));
162
+ for (const path of result.written) {
163
+ console.log(` ${path}`);
164
+ }
165
+ if (result.items.length === 0) {
166
+ console.log(' (bundle is empty or no items matched the filters)');
167
+ }
168
+ pulled.push(bundle);
169
+ }
170
+ catch (err) {
171
+ anyFailed = true;
172
+ console.error(`Failed to pull "${bundle}": ${err instanceof Error ? err.message : String(err)}`);
173
+ }
121
174
  }
122
- if (result.items.length === 0) {
123
- console.log(' (bundle is empty or no items matched the filters)');
175
+ // Subscribe the bundles that actually pulled, so `auden sync` keeps them
176
+ // fresh. Never blocks or fails the pull the content is already on disk.
177
+ if (subscribe && pulled.length > 0) {
178
+ const result = await subscribeBundles(cwd, pulled);
179
+ if (!result.ok) {
180
+ const detail = result.reason === 'malformed-config'
181
+ ? '.auden/config.json is malformed — fix or remove it'
182
+ : result.reason === 'home-collision'
183
+ ? 'run from inside a repository, not your home directory (where it would collide with ~/.auden/config.json)'
184
+ : `could not write .auden/config.json${result.message ? ` (${result.message})` : ''}`;
185
+ console.warn(` warning: pulled, but did not subscribe — ${detail}. Pass --once to silence.`);
186
+ }
187
+ else {
188
+ if (result.removedToken) {
189
+ console.warn(' warning: removed a `token` field from .auden/config.json — this file is committed, so rotate that token from the dashboard if it may have been pushed.');
190
+ }
191
+ if (result.added.length > 0) {
192
+ console.log(`Subscribed to ${result.added.join(', ')} — \`auden sync\` will keep ${result.added.length > 1 ? 'them' : 'it'} fresh. Pass --once next time to pull without subscribing.`);
193
+ }
194
+ }
124
195
  }
196
+ if (anyFailed)
197
+ process.exitCode = 1;
125
198
  },
126
199
  });
200
+ /** List the caller's bundles and read one selection line from stdin. */
201
+ async function pickBundles(client) {
202
+ const { bundles } = await client.listBundles();
203
+ const choices = bundles.map((b) => ({ slug: b.slug, name: b.name }));
204
+ if (choices.length === 0) {
205
+ console.log('You have no bundles yet. Create one in the dashboard (or capture context to the inbox), then re-run `auden pull`.');
206
+ return [];
207
+ }
208
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
209
+ try {
210
+ console.log('Your bundles:');
211
+ choices.forEach((choice, i) => {
212
+ console.log(` ${i + 1}. ${choice.slug}${choice.name ? ` (${choice.name})` : ''}`);
213
+ });
214
+ const answer = await rl.question('Pull which? (numbers or slugs, comma-separated; blank to cancel): ');
215
+ return parseSelectionInput(answer, choices);
216
+ }
217
+ finally {
218
+ rl.close();
219
+ }
220
+ }
127
221
  //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAA;AAE1E,2EAA2E;AAC3E,gFAAgF;AAChF,gCAAgC;AAChC,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB;;;;;GAKG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,GAAG;SACA,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAC3B,CAAA;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EACT,mFAAmF;KACtF;IACD,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,EAAE;SACZ;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,oFAAoF;YACtF,OAAO,EAAE,EAAE;SACZ;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,sEAAsE;YACnF,OAAO,EAAE,KAAK;SACf;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,wEAAwE;YAC1E,OAAO,EAAE,EAAE;SACZ;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,EAAE;SACZ;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uDAAuD;YACpE,OAAO,EAAE,EAAE;SACZ;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sEAAsE;YACnF,OAAO,EAAE,EAAE;SACZ;QACD,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,EAAE;SACZ;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,4EAA4E;QAC5E,0EAA0E;QAC1E,iEAAiE;QACjE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CACX,gLAAgL,CACjL,CAAA;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,IAAI,KAAyB,CAAA;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBAClE,OAAO,CAAC,KAAK,CACX,4CAA4C,SAAS,UAAU,IAAI,CAAC,KAAK,EAAE,CAC5E,CAAA;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YACD,KAAK,GAAG,MAAM,CAAA;QAChB,CAAC;QAED,IAAI,YAAoB,CAAA;QACxB,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAEzB,2EAA2E;QAC3E,kEAAkE;QAClE,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAEnC,4EAA4E;QAC5E,qEAAqE;QACrE,wDAAwD;QACxD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CACX,2HAA2H,CAC5H,CAAA;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,IAAI,OAAiB,CAAA;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtB,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;gBACnC,OAAM;YACR,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,+FAA+F,CAChG,CAAA;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,0EAA0E;QAC1E,0CAA0C;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAA;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QAE/B,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAC3E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,MAAM,EACN;oBACE,MAAM;oBACN,KAAK,EAAE,KAAK,IAAI,SAAS;oBACzB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBAC3C,KAAK;iBACN,EACD,GAAG,CACJ,CAAA;gBACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;gBAC3D,OAAO,CAAC,GAAG,CACT,UAAU,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB,MAAM,UAAU,GAAG,EAAE;oBACpE,CAAC,OAAO,GAAG,CAAC;wBACV,CAAC,CAAC,KAAK,OAAO,qDAAqD;wBACnE,CAAC,CAAC,EAAE,CAAC,CACV,CAAA;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;gBAC1B,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,IAAI,CAAA;gBAChB,OAAO,CAAC,KAAK,CACX,mBAAmB,MAAM,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClF,CAAA;YACH,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,kBAAkB;oBAClC,CAAC,CAAC,oDAAoD;oBACtD,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,gBAAgB;wBAClC,CAAC,CAAC,0GAA0G;wBAC5G,CAAC,CAAC,qCAAqC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;gBAC3F,OAAO,CAAC,IAAI,CACV,8CAA8C,MAAM,2BAA2B,CAChF,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CACV,0JAA0J,CAC3J,CAAA;gBACH,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CACT,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,4DAA4D,CAC3K,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACrC,CAAC;CACF,CAAC,CAAA;AAEF,wEAAwE;AACxE,KAAK,UAAU,WAAW,CAAC,MAAqB;IAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,OAAO,GAAmB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,mHAAmH,CACpH,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC5B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACpF,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC9B,oEAAoE,CACrE,CAAA;QACD,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,gCA0DxB,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,aAAa,gCAyFxB,CAAA"}
@@ -1,6 +1,8 @@
1
- import { readFile } from 'node:fs/promises';
1
+ import { readdir, readFile } from 'node:fs/promises';
2
2
  import { defineCommand } from 'citty';
3
3
  import { AUDEN_CONFIG, AUDEN_GUIDES_FILE, AUDEN_QUEUE_DIR } from '../auden-paths.js';
4
+ import { readRepoDocsConfig } from '../docs/repo-config.js';
5
+ import { computeDocsStatus } from '../docs/status.js';
4
6
  import { notifyUpdateIfDue } from '../update/notice.js';
5
7
  import { readVerdictQueue } from '../verdict-queue.js';
6
8
  export const statusCommand = defineCommand({
@@ -48,6 +50,26 @@ export const statusCommand = defineCommand({
48
50
  const queue = await readVerdictQueue(AUDEN_QUEUE_DIR);
49
51
  const pendingCount = queue.actions.length;
50
52
  const invalidCount = queue.invalidFilePaths.length;
53
+ // Doc-bundle subscriptions for the current repo (cross-repo-docs). Read from
54
+ // the repo-level .auden/config.json (cwd), distinct from the home config
55
+ // above; `auden sync` keeps these bundles' content fresh under
56
+ // .auden/context/<bundle>/.
57
+ const cwd = process.cwd();
58
+ const repoDocs = await readRepoDocsConfig(cwd);
59
+ const docRows = repoDocs.malformed
60
+ ? []
61
+ : await computeDocsStatus(cwd, repoDocs.bundles, {
62
+ listDir: async (dir) => {
63
+ try {
64
+ return await readdir(dir);
65
+ }
66
+ catch (err) {
67
+ if (err.code === 'ENOENT')
68
+ return null;
69
+ throw err;
70
+ }
71
+ },
72
+ });
51
73
  console.log('Auden status:');
52
74
  if (projectName)
53
75
  console.log(` project: ${projectName}`);
@@ -57,6 +79,18 @@ export const statusCommand = defineCommand({
57
79
  if (invalidCount > 0) {
58
80
  console.log(` invalid: ${invalidCount} unreadable queue file(s) (cleaned on next sync)`);
59
81
  }
82
+ if (repoDocs.malformed) {
83
+ console.log(' docs: .auden/config.json is malformed — fix or remove it');
84
+ }
85
+ else if (docRows.length > 0) {
86
+ console.log(` docs: ${docRows.length} subscribed bundle(s)`);
87
+ for (const row of docRows) {
88
+ const state = row.exists
89
+ ? `${row.materialized} file(s)`
90
+ : 'not yet pulled — run auden sync';
91
+ console.log(` ${row.bundle} — ${state}`);
92
+ }
93
+ }
60
94
  // After the status output, never before it — the notice must not push the
61
95
  // thing the user asked for out of view. Self-suppressing off a TTY.
62
96
  await notifyUpdateIfDue();
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,15 @@ export declare const syncCommand: import("citty").CommandDef<{
19
19
  description: string;
20
20
  default: false;
21
21
  };
22
+ docs: {
23
+ type: "boolean";
24
+ description: string;
25
+ default: false;
26
+ };
27
+ 'no-docs': {
28
+ type: "boolean";
29
+ description: string;
30
+ default: false;
31
+ };
22
32
  }>;
23
33
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;EAoOtB,CAAA"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6QtB,CAAA"}
@@ -3,7 +3,10 @@ import { unlink } from 'node:fs/promises';
3
3
  import { defineCommand } from 'citty';
4
4
  import { AUDEN_GUIDES_FILE, AUDEN_QUEUE_DIR } from '../auden-paths.js';
5
5
  import { readConfigToken, resolveDashboardUrl, resolveToken, writeConfigToken, } from '../config.js';
6
+ import { readRepoDocsConfig } from '../docs/repo-config.js';
7
+ import { formatDocsSyncLine, syncSubscribedDocs } from '../docs/sync-docs.js';
6
8
  import { extractConversationalFeedback } from '../feedback/extract.js';
9
+ import { createContextClient } from '../mcp/client.js';
7
10
  import { pullGuideBundle } from '../rules/pull-bundle.js';
8
11
  import { buildSyncBatches } from '../sync-batches.js';
9
12
  import { postSyncBatch } from '../sync-client.js';
@@ -39,6 +42,16 @@ export const syncCommand = defineCommand({
39
42
  description: 'Extract conversational feedback without sending it to the dashboard',
40
43
  default: false,
41
44
  },
45
+ docs: {
46
+ type: 'boolean',
47
+ description: 'Force the docs phase (pull subscribed bundles) even if this run would otherwise skip it',
48
+ default: false,
49
+ },
50
+ 'no-docs': {
51
+ type: 'boolean',
52
+ description: 'Skip the docs phase (pulling subscribed bundles) for this run',
53
+ default: false,
54
+ },
42
55
  },
43
56
  async run({ args }) {
44
57
  const queue = await readVerdictQueue(AUDEN_QUEUE_DIR);
@@ -182,6 +195,34 @@ export const syncCommand = defineCommand({
182
195
  const message = err instanceof Error ? err.message : String(err);
183
196
  console.warn(` warning: ${message} — skipping.`);
184
197
  }
198
+ // Docs phase (cross-repo-docs Slice 1a): when this repo subscribes to doc
199
+ // bundles, pull each into .auden/context/<bundle>/ so subscribed repos stay
200
+ // fresh on the same heartbeat. Pull-only; --no-docs skips, --docs forces the
201
+ // hint even when nothing is subscribed. Never aborts the sync — a bundle's
202
+ // failure is reported and the others still run.
203
+ if (!args['no-docs']) {
204
+ const { bundles, malformed } = await readRepoDocsConfig(process.cwd());
205
+ if (malformed) {
206
+ console.warn(' warning: .auden/config.json is malformed — skipping docs. Fix or remove the file.');
207
+ }
208
+ else if (bundles.length === 0) {
209
+ if (args.docs) {
210
+ console.log(' No doc bundles subscribed in this repo — run `auden pull <bundle>` to subscribe.');
211
+ }
212
+ }
213
+ else {
214
+ const docsClient = createContextClient({ dashboardUrl, token });
215
+ const { results } = await syncSubscribedDocs(docsClient, bundles, process.cwd());
216
+ // A docs pull reaching the server also proves the token — mark
217
+ // acceptance so a --token flag is still stored even if the guide-bundle
218
+ // pull above failed transiently.
219
+ if (results.some((r) => r.error === undefined))
220
+ serverAccepted = true;
221
+ for (const result of results) {
222
+ console.log(formatDocsSyncLine(result));
223
+ }
224
+ }
225
+ }
185
226
  if (serverAccepted && args.token.trim() && args.token.trim() !== storedToken) {
186
227
  try {
187
228
  await writeConfigToken(args.token);
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Repo-level docs subscription config: `<repo>/.auden/config.json`.
3
+ *
4
+ * This is a DIFFERENT file from the machine-level `~/.auden/config.json` that
5
+ * `src/config.ts` owns. That one lives in the home directory, is chmod `0600`,
6
+ * and holds the bearer **token**. This one is repo-relative, meant to be
7
+ * committed to git, and holds only a repo's doc-bundle subscription
8
+ * (`docs.bundles`). They share a basename by design-doc convention
9
+ * (cross-repo-docs-plan.md) but never the same path — this reader is built so a
10
+ * token can never be read from, or written into, the committed repo file:
11
+ * it only ever touches the `docs` key, and is never routed through
12
+ * `writeConfigToken`/the home-config writers.
13
+ *
14
+ * Kept free of citty/console so it unit-tests directly against a temp dir.
15
+ */
16
+ /** Repo-relative path of the docs subscription config. */
17
+ export declare const REPO_CONFIG_RELATIVE_PATH = ".auden/config.json";
18
+ /** Absolute path of a repo's `.auden/config.json`, rooted at `cwd`. */
19
+ export declare function repoConfigPath(cwd: string): string;
20
+ /**
21
+ * True when `cwd`'s repo config path resolves to the *same file* as the
22
+ * machine-level `~/.auden/config.json` token store — i.e. `cwd` is the home
23
+ * directory. Reading/writing there would treat the token file as a repo config
24
+ * and (on write) strip the bearer token, breaking future authenticated
25
+ * commands. Callers must refuse the repo-config path in that case.
26
+ */
27
+ export declare function collidesWithHomeConfig(cwd: string): boolean;
28
+ export type RepoDocsConfigResult = {
29
+ /** Subscribed bundle slugs (trimmed, de-duplicated, empties dropped). */
30
+ bundles: string[];
31
+ /** True when the file did not exist on disk. */
32
+ missing: boolean;
33
+ /** True when the file existed but was not a JSON object. */
34
+ malformed: boolean;
35
+ /** True when a stray top-level `token` key is present (must be stripped on write). */
36
+ hasToken: boolean;
37
+ };
38
+ /**
39
+ * Normalize an arbitrary value into a clean list of bundle slugs: keep strings
40
+ * only, trim each, drop empties, de-duplicate while preserving first-seen
41
+ * order. Shared by the reader and the merge/write path so a hand-edited config
42
+ * and a `--bundle` flag are cleaned identically.
43
+ */
44
+ export declare function normalizeBundleSlugs(value: unknown): string[];
45
+ /**
46
+ * Read a repo's docs-bundle subscription. Returns an empty list on a missing or
47
+ * malformed config so callers can treat "not subscribed" uniformly; `missing`
48
+ * / `malformed` distinguish the two for messaging.
49
+ */
50
+ export declare function readRepoDocsConfig(cwd: string): Promise<RepoDocsConfigResult>;
51
+ export type WriteRepoDocsResult = {
52
+ /**
53
+ * True when a `token` key was found in the existing file and stripped before
54
+ * writing. The committed repo config must never carry a bearer token; if one
55
+ * was there (e.g. the file was copied from `~/.auden/config.json` — the exact
56
+ * basename-collision this slice guards against), we remove it rather than
57
+ * re-serialize it back into a file the user commits. The caller should warn
58
+ * so the user can rotate a token that may already be in git history.
59
+ */
60
+ removedToken: boolean;
61
+ };
62
+ /**
63
+ * Persist a repo's docs-bundle subscription, preserving every other key already
64
+ * in the file (a future `project` identity field, hand-added keys) — but never a
65
+ * `token`, which is stripped defensively so this committed file can't leak a
66
+ * credential. Refuses to overwrite a file that exists but is malformed, rather
67
+ * than silently discarding it.
68
+ */
69
+ export declare function writeRepoDocsBundles(cwd: string, bundles: string[]): Promise<WriteRepoDocsResult>;
70
+ /**
71
+ * Union an existing subscription with newly-selected slugs, cleaned and
72
+ * de-duplicated. `docs enable` is additive: re-running it to add one bundle
73
+ * must never drop the others already subscribed.
74
+ */
75
+ export declare function mergeBundleSubscriptions(existing: string[], added: string[]): string[];
76
+ //# sourceMappingURL=repo-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-config.d.ts","sourceRoot":"","sources":["../../src/docs/repo-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB,uBAAuB,CAAA;AAE7D,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAA;IAChB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAA;IAClB,sFAAsF;IACtF,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAY7D;AA+BD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAanF;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;;OAOG;IACH,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,mBAAmB,CAAC,CA+B9B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEtF"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Repo-level docs subscription config: `<repo>/.auden/config.json`.
3
+ *
4
+ * This is a DIFFERENT file from the machine-level `~/.auden/config.json` that
5
+ * `src/config.ts` owns. That one lives in the home directory, is chmod `0600`,
6
+ * and holds the bearer **token**. This one is repo-relative, meant to be
7
+ * committed to git, and holds only a repo's doc-bundle subscription
8
+ * (`docs.bundles`). They share a basename by design-doc convention
9
+ * (cross-repo-docs-plan.md) but never the same path — this reader is built so a
10
+ * token can never be read from, or written into, the committed repo file:
11
+ * it only ever touches the `docs` key, and is never routed through
12
+ * `writeConfigToken`/the home-config writers.
13
+ *
14
+ * Kept free of citty/console so it unit-tests directly against a temp dir.
15
+ */
16
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
17
+ import { dirname, join, resolve } from 'node:path';
18
+ import { AUDEN_CONFIG } from '../auden-paths.js';
19
+ /** Repo-relative path of the docs subscription config. */
20
+ export const REPO_CONFIG_RELATIVE_PATH = '.auden/config.json';
21
+ /** Absolute path of a repo's `.auden/config.json`, rooted at `cwd`. */
22
+ export function repoConfigPath(cwd) {
23
+ return join(cwd, REPO_CONFIG_RELATIVE_PATH);
24
+ }
25
+ /**
26
+ * True when `cwd`'s repo config path resolves to the *same file* as the
27
+ * machine-level `~/.auden/config.json` token store — i.e. `cwd` is the home
28
+ * directory. Reading/writing there would treat the token file as a repo config
29
+ * and (on write) strip the bearer token, breaking future authenticated
30
+ * commands. Callers must refuse the repo-config path in that case.
31
+ */
32
+ export function collidesWithHomeConfig(cwd) {
33
+ return resolve(repoConfigPath(cwd)) === resolve(AUDEN_CONFIG);
34
+ }
35
+ /**
36
+ * Normalize an arbitrary value into a clean list of bundle slugs: keep strings
37
+ * only, trim each, drop empties, de-duplicate while preserving first-seen
38
+ * order. Shared by the reader and the merge/write path so a hand-edited config
39
+ * and a `--bundle` flag are cleaned identically.
40
+ */
41
+ export function normalizeBundleSlugs(value) {
42
+ if (!Array.isArray(value))
43
+ return [];
44
+ const seen = new Set();
45
+ const out = [];
46
+ for (const entry of value) {
47
+ if (typeof entry !== 'string')
48
+ continue;
49
+ const slug = entry.trim();
50
+ if (slug === '' || seen.has(slug))
51
+ continue;
52
+ seen.add(slug);
53
+ out.push(slug);
54
+ }
55
+ return out;
56
+ }
57
+ async function readParsedRepoConfig(cwd) {
58
+ let raw;
59
+ try {
60
+ raw = await readFile(repoConfigPath(cwd), 'utf8');
61
+ }
62
+ catch (err) {
63
+ if (err.code === 'ENOENT') {
64
+ return { parsed: {}, missing: true, malformed: false };
65
+ }
66
+ // Other read errors (permissions, etc.) — treat as malformed so a writer
67
+ // is forced to handle it explicitly rather than clobbering the file.
68
+ return { parsed: {}, missing: false, malformed: true };
69
+ }
70
+ try {
71
+ const parsed = JSON.parse(raw);
72
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
73
+ return {
74
+ parsed: parsed,
75
+ missing: false,
76
+ malformed: false,
77
+ };
78
+ }
79
+ return { parsed: {}, missing: false, malformed: true };
80
+ }
81
+ catch {
82
+ return { parsed: {}, missing: false, malformed: true };
83
+ }
84
+ }
85
+ /**
86
+ * Read a repo's docs-bundle subscription. Returns an empty list on a missing or
87
+ * malformed config so callers can treat "not subscribed" uniformly; `missing`
88
+ * / `malformed` distinguish the two for messaging.
89
+ */
90
+ export async function readRepoDocsConfig(cwd) {
91
+ // In the home directory the "repo config" path IS the token store — never
92
+ // read it as a subscription config (see collidesWithHomeConfig).
93
+ if (collidesWithHomeConfig(cwd)) {
94
+ return { bundles: [], missing: true, malformed: false, hasToken: false };
95
+ }
96
+ const { parsed, missing, malformed } = await readParsedRepoConfig(cwd);
97
+ const docs = parsed['docs'];
98
+ const bundles = docs && typeof docs === 'object' && !Array.isArray(docs)
99
+ ? normalizeBundleSlugs(docs['bundles'])
100
+ : [];
101
+ return { bundles, missing, malformed, hasToken: 'token' in parsed };
102
+ }
103
+ /**
104
+ * Persist a repo's docs-bundle subscription, preserving every other key already
105
+ * in the file (a future `project` identity field, hand-added keys) — but never a
106
+ * `token`, which is stripped defensively so this committed file can't leak a
107
+ * credential. Refuses to overwrite a file that exists but is malformed, rather
108
+ * than silently discarding it.
109
+ */
110
+ export async function writeRepoDocsBundles(cwd, bundles) {
111
+ // Never write to the home token store (cwd === home) — that would strip the
112
+ // bearer token and rewrite it as a repo config.
113
+ if (collidesWithHomeConfig(cwd)) {
114
+ throw new Error(`Refusing to write a repo docs config at ${repoConfigPath(cwd)} — it is the ` +
115
+ 'home token store (~/.auden/config.json). Run `auden pull` from inside a repository.');
116
+ }
117
+ const { parsed, malformed } = await readParsedRepoConfig(cwd);
118
+ if (malformed) {
119
+ throw new Error(`Refusing to overwrite malformed repo config at ${repoConfigPath(cwd)}. ` +
120
+ 'Fix or remove the file before re-running.');
121
+ }
122
+ // Strip any bearer token before it can be written back into the committed
123
+ // file — the whole point of a separate repo config is that it never holds one.
124
+ const removedToken = 'token' in parsed;
125
+ delete parsed['token'];
126
+ const existingDocs = parsed['docs'] && typeof parsed['docs'] === 'object' && !Array.isArray(parsed['docs'])
127
+ ? parsed['docs']
128
+ : {};
129
+ parsed['docs'] = { ...existingDocs, bundles: normalizeBundleSlugs(bundles) };
130
+ const path = repoConfigPath(cwd);
131
+ await mkdir(dirname(path), { recursive: true });
132
+ await writeFile(path, JSON.stringify(parsed, null, 2) + '\n');
133
+ return { removedToken };
134
+ }
135
+ /**
136
+ * Union an existing subscription with newly-selected slugs, cleaned and
137
+ * de-duplicated. `docs enable` is additive: re-running it to add one bundle
138
+ * must never drop the others already subscribed.
139
+ */
140
+ export function mergeBundleSubscriptions(existing, added) {
141
+ return normalizeBundleSlugs([...existing, ...added]);
142
+ }
143
+ //# sourceMappingURL=repo-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-config.js","sourceRoot":"","sources":["../../src/docs/repo-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAA;AAE7D,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAC/D,CAAC;AAaD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAQ;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACzB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,GAAW;IAEX,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QACxD,CAAC;QACD,yEAAyE;QACzE,qEAAqE;QACrE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IACxD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAA;QACzC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO;gBACL,MAAM,EAAE,MAAiC;gBACzC,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;aACjB,CAAA;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IACxD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC1E,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,OAAO,GACX,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,oBAAoB,CAAE,IAAgC,CAAC,SAAS,CAAC,CAAC;QACpE,CAAC,CAAC,EAAE,CAAA;IACR,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA;AACrE,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAW,EACX,OAAiB;IAEjB,4EAA4E;IAC5E,gDAAgD;IAChD,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,2CAA2C,cAAc,CAAC,GAAG,CAAC,eAAe;YAC3E,qFAAqF,CACxF,CAAA;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC7D,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,kDAAkD,cAAc,CAAC,GAAG,CAAC,IAAI;YACvE,2CAA2C,CAC9C,CAAA;IACH,CAAC;IACD,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,YAAY,GAAG,OAAO,IAAI,MAAM,CAAA;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;IAEtB,MAAM,YAAY,GAChB,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpF,CAAC,CAAE,MAAM,CAAC,MAAM,CAA6B;QAC7C,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAA;IAE5E,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC7D,OAAO,EAAE,YAAY,EAAE,CAAA;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAkB,EAAE,KAAe;IAC1E,OAAO,oBAAoB,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAA;AACtD,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Core logic for `auden docs status`: show which bundles the current repo
3
+ * subscribes to and whether each has been materialized locally yet. Slice 1a is
4
+ * pull-only with no per-file sidecar, so "state" is deliberately coarse —
5
+ * subscribed, and materialized (N files) or not-yet-pulled. The richer
6
+ * three-point in-sync/ahead/behind state arrives with the link sidecar (Slice 2).
7
+ *
8
+ * Kept free of citty/console — the command injects the filesystem read.
9
+ */
10
+ export type DocsStatusRow = {
11
+ bundle: string;
12
+ /** Local directory the bundle materializes into. */
13
+ dir: string;
14
+ /** True when that directory exists on disk. */
15
+ exists: boolean;
16
+ /** Count of `.md` files present in the directory (0 when missing). */
17
+ materialized: number;
18
+ };
19
+ export type DocsStatusDeps = {
20
+ /**
21
+ * List a directory's entries, or return `null` when it does not exist. Any
22
+ * other read error should propagate so a genuine fault isn't reported as
23
+ * "not yet pulled".
24
+ */
25
+ listDir: (dir: string) => Promise<string[] | null>;
26
+ };
27
+ /** Build a status row per subscribed bundle. */
28
+ export declare function computeDocsStatus(cwd: string, bundles: string[], deps: DocsStatusDeps): Promise<DocsStatusRow[]>;
29
+ /**
30
+ * Render the status as plain lines. Returns a guidance message when the repo
31
+ * has no subscription yet, so the command prints something actionable either
32
+ * way.
33
+ */
34
+ export declare function formatDocsStatus(rows: DocsStatusRow[]): string;
35
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/docs/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAA;IACf,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;CACnD,CAAA;AAED,gDAAgD;AAChD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,EAAE,CAAC,CAiB1B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAY9D"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Core logic for `auden docs status`: show which bundles the current repo
3
+ * subscribes to and whether each has been materialized locally yet. Slice 1a is
4
+ * pull-only with no per-file sidecar, so "state" is deliberately coarse —
5
+ * subscribed, and materialized (N files) or not-yet-pulled. The richer
6
+ * three-point in-sync/ahead/behind state arrives with the link sidecar (Slice 2).
7
+ *
8
+ * Kept free of citty/console — the command injects the filesystem read.
9
+ */
10
+ import { defaultPullDir } from '../context/pull.js';
11
+ /** Build a status row per subscribed bundle. */
12
+ export async function computeDocsStatus(cwd, bundles, deps) {
13
+ const rows = [];
14
+ for (const bundle of bundles) {
15
+ const dir = defaultPullDir(bundle, cwd);
16
+ const entries = await deps.listDir(dir);
17
+ rows.push({
18
+ bundle,
19
+ dir,
20
+ exists: entries !== null,
21
+ // Case-insensitive: writeItemsToDir preserves a name that already ends in
22
+ // .MD/.Md (its own extension check is case-insensitive), so those count too.
23
+ materialized: entries
24
+ ? entries.filter((e) => e.toLowerCase().endsWith('.md')).length
25
+ : 0,
26
+ });
27
+ }
28
+ return rows;
29
+ }
30
+ /**
31
+ * Render the status as plain lines. Returns a guidance message when the repo
32
+ * has no subscription yet, so the command prints something actionable either
33
+ * way.
34
+ */
35
+ export function formatDocsStatus(rows) {
36
+ if (rows.length === 0) {
37
+ return 'This repo is not subscribed to any doc bundles. Run `auden pull <bundle>` to subscribe.';
38
+ }
39
+ const lines = ['Subscribed doc bundles:'];
40
+ for (const row of rows) {
41
+ const state = row.exists
42
+ ? `${row.materialized} file(s) in ${row.dir}`
43
+ : 'not yet pulled — run `auden sync`';
44
+ lines.push(` ${row.bundle} — ${state}`);
45
+ }
46
+ return lines.join('\n');
47
+ }
48
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/docs/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAqBnD,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,OAAiB,EACjB,IAAoB;IAEpB,MAAM,IAAI,GAAoB,EAAE,CAAA;IAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC;YACR,MAAM;YACN,GAAG;YACH,MAAM,EAAE,OAAO,KAAK,IAAI;YACxB,0EAA0E;YAC1E,6EAA6E;YAC7E,YAAY,EAAE,OAAO;gBACnB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;gBAC/D,CAAC,CAAC,CAAC;SACN,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,yFAAyF,CAAA;IAClG,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,yBAAyB,CAAC,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM;YACtB,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,eAAe,GAAG,CAAC,GAAG,EAAE;YAC7C,CAAC,CAAC,mCAAmC,CAAA;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Subscription helpers shared by `auden pull` (subscribe-on-pull) and any other
3
+ * caller that records a repo's doc-bundle subscription. The subscription itself
4
+ * is just `docs.bundles` in the repo `.auden/config.json` (see repo-config.ts);
5
+ * `auden sync`'s docs phase reads it and keeps those bundles fresh.
6
+ *
7
+ * Kept free of citty/console so it unit-tests directly against a temp dir.
8
+ */
9
+ export type BundleChoice = {
10
+ slug: string;
11
+ name: string;
12
+ };
13
+ /**
14
+ * Parse an interactive selection line into slugs. Tokens are split on commas
15
+ * and whitespace; a token that is a 1-based index into `choices` resolves to
16
+ * that bundle's slug, anything else is treated as a literal slug. De-duplicated,
17
+ * order preserved.
18
+ */
19
+ export declare function parseSelectionInput(input: string, choices: BundleChoice[]): string[];
20
+ export type SubscribeResult = {
21
+ ok: true;
22
+ /** Full resulting subscription (existing ∪ added). */
23
+ subscribed: string[];
24
+ /** Slugs newly added this call (not already subscribed). */
25
+ added: string[];
26
+ /** True when a stray `token` key was stripped from the repo config on write. */
27
+ removedToken: boolean;
28
+ } | {
29
+ ok: false;
30
+ reason: 'malformed-config' | 'home-collision' | 'write-failed';
31
+ message?: string;
32
+ };
33
+ /**
34
+ * Record a repo's subscription to `bundles`, additively — existing
35
+ * subscriptions are never dropped. Writes when the set actually grows, or when a
36
+ * stray `token` must be stripped from the committed config; otherwise the file
37
+ * is left byte-for-byte untouched (no spurious git diff). Never throws — every
38
+ * failure becomes an `ok:false` reason so the caller can warn without aborting
39
+ * the surrounding command (a pull still succeeds even if the subscription can't
40
+ * be recorded):
41
+ * - `malformed-config` — the config exists but isn't valid JSON.
42
+ * - `home-collision` — `cwd` is the home dir, where the repo config would be
43
+ * the token store; we refuse rather than clobber the bearer token.
44
+ * - `write-failed` — a filesystem error (read-only repo, race, etc.).
45
+ */
46
+ export declare function subscribeBundles(cwd: string, bundles: string[]): Promise<SubscribeResult>;
47
+ //# sourceMappingURL=subscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/docs/subscribe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAsBpF;AAED,MAAM,MAAM,eAAe,GACvB;IACE,EAAE,EAAE,IAAI,CAAA;IACR,sDAAsD;IACtD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,gFAAgF;IAChF,YAAY,EAAE,OAAO,CAAA;CACtB,GACD;IACE,EAAE,EAAE,KAAK,CAAA;IACT,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAA;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAEL;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,eAAe,CAAC,CA2B1B"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Subscription helpers shared by `auden pull` (subscribe-on-pull) and any other
3
+ * caller that records a repo's doc-bundle subscription. The subscription itself
4
+ * is just `docs.bundles` in the repo `.auden/config.json` (see repo-config.ts);
5
+ * `auden sync`'s docs phase reads it and keeps those bundles fresh.
6
+ *
7
+ * Kept free of citty/console so it unit-tests directly against a temp dir.
8
+ */
9
+ import { collidesWithHomeConfig, mergeBundleSubscriptions, readRepoDocsConfig, writeRepoDocsBundles, } from './repo-config.js';
10
+ /**
11
+ * Parse an interactive selection line into slugs. Tokens are split on commas
12
+ * and whitespace; a token that is a 1-based index into `choices` resolves to
13
+ * that bundle's slug, anything else is treated as a literal slug. De-duplicated,
14
+ * order preserved.
15
+ */
16
+ export function parseSelectionInput(input, choices) {
17
+ const slugs = new Set(choices.map((c) => c.slug));
18
+ const seen = new Set();
19
+ const out = [];
20
+ for (const token of input.split(/[\s,]+/)) {
21
+ const t = token.trim();
22
+ if (t === '')
23
+ continue;
24
+ let slug = t;
25
+ // Exact slug match wins over index parsing, so a numeric-only slug (e.g. a
26
+ // bundle literally named "2026") selects that bundle instead of being read
27
+ // as the 2026th choice.
28
+ if (!slugs.has(t) && /^\d+$/.test(t)) {
29
+ const idx = Number.parseInt(t, 10) - 1;
30
+ if (idx < 0 || idx >= choices.length)
31
+ continue; // out-of-range number: ignore
32
+ slug = choices[idx].slug;
33
+ }
34
+ if (!seen.has(slug)) {
35
+ seen.add(slug);
36
+ out.push(slug);
37
+ }
38
+ }
39
+ return out;
40
+ }
41
+ /**
42
+ * Record a repo's subscription to `bundles`, additively — existing
43
+ * subscriptions are never dropped. Writes when the set actually grows, or when a
44
+ * stray `token` must be stripped from the committed config; otherwise the file
45
+ * is left byte-for-byte untouched (no spurious git diff). Never throws — every
46
+ * failure becomes an `ok:false` reason so the caller can warn without aborting
47
+ * the surrounding command (a pull still succeeds even if the subscription can't
48
+ * be recorded):
49
+ * - `malformed-config` — the config exists but isn't valid JSON.
50
+ * - `home-collision` — `cwd` is the home dir, where the repo config would be
51
+ * the token store; we refuse rather than clobber the bearer token.
52
+ * - `write-failed` — a filesystem error (read-only repo, race, etc.).
53
+ */
54
+ export async function subscribeBundles(cwd, bundles) {
55
+ if (collidesWithHomeConfig(cwd)) {
56
+ return { ok: false, reason: 'home-collision' };
57
+ }
58
+ const existing = await readRepoDocsConfig(cwd);
59
+ if (existing.malformed) {
60
+ return { ok: false, reason: 'malformed-config' };
61
+ }
62
+ const existingSet = new Set(existing.bundles);
63
+ const added = bundles.filter((slug) => !existingSet.has(slug));
64
+ const subscribed = mergeBundleSubscriptions(existing.bundles, bundles);
65
+ // Skip the write only when nothing changed AND there's no stray token to
66
+ // strip — otherwise a token copied into an already-subscribed repo config
67
+ // would never be removed (writeRepoDocsBundles is the only path that strips it).
68
+ if (added.length === 0 && !existing.hasToken) {
69
+ return { ok: true, subscribed, added, removedToken: false };
70
+ }
71
+ try {
72
+ const { removedToken } = await writeRepoDocsBundles(cwd, subscribed);
73
+ return { ok: true, subscribed, added, removedToken };
74
+ }
75
+ catch (err) {
76
+ return {
77
+ ok: false,
78
+ reason: 'write-failed',
79
+ message: err instanceof Error ? err.message : String(err),
80
+ };
81
+ }
82
+ }
83
+ //# sourceMappingURL=subscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/docs/subscribe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The docs phase of `auden sync`: for each bundle a repo subscribes to, pull
3
+ * its canonical items into `.auden/context/<bundle>/` and keep them fresh.
4
+ * Pull-only (Slice 1a) — this is the "repos stay fresh" heartbeat; local edits
5
+ * pushing back is a later slice.
6
+ *
7
+ * Reuses the shipped `pullBundleToDir`/`defaultPullDir` (the `auden pull`
8
+ * engine) so a subscribed sync and a manual `auden pull` write identically.
9
+ * Each bundle is pulled independently: one bundle's failure is captured and
10
+ * reported, never aborting the others — mirroring the per-batch resilience of
11
+ * the push loop and the guide-bundle pull's own try/catch.
12
+ *
13
+ * Kept free of citty/console so it unit-tests against a mocked client.
14
+ */
15
+ import type { ContextClient } from '../mcp/client.js';
16
+ import type { WriteItemsDeps } from '../mcp/write-items.js';
17
+ /**
18
+ * Server-side maximum items a single pull returns (`MAX_LIMIT` in the items
19
+ * endpoint). Without an explicit limit the endpoint defaults to 100, so a
20
+ * subscribed bundle with more than 100 docs would silently materialize only the
21
+ * newest 100. Request the max, and flag when a bundle hits the ceiling — the
22
+ * endpoint has no cursor pagination, so beyond this we surface the truncation
23
+ * rather than pretend the bundle is fully synced (no silent caps).
24
+ */
25
+ export declare const MAX_BUNDLE_PULL = 500;
26
+ export type DocsSyncBundleResult = {
27
+ bundle: string;
28
+ /** Directory the bundle materialized into. */
29
+ dir: string;
30
+ /** Number of items the bundle returned (including skipped null-content ones). */
31
+ items: number;
32
+ /** Number of files actually written to disk. */
33
+ written: number;
34
+ /** True when the bundle returned the server cap — more docs may exist unpulled. */
35
+ truncated: boolean;
36
+ /** Present when this bundle failed to pull; the others still ran. */
37
+ error?: string;
38
+ };
39
+ export type DocsSyncResult = {
40
+ results: DocsSyncBundleResult[];
41
+ /** True when at least one bundle failed to pull. */
42
+ hadError: boolean;
43
+ };
44
+ /**
45
+ * Pull every subscribed bundle into its default local directory under `cwd`.
46
+ * `deps` injects the filesystem for tests.
47
+ */
48
+ export declare function syncSubscribedDocs(client: ContextClient, bundles: string[], cwd: string, deps?: WriteItemsDeps): Promise<DocsSyncResult>;
49
+ /**
50
+ * One legible line per bundle for the sync output (Planning Principle 9 — what
51
+ * moved is never ambiguous). Failures read as warnings; a successful pull says
52
+ * how many files landed where.
53
+ */
54
+ export declare function formatDocsSyncLine(result: DocsSyncBundleResult): string;
55
+ //# sourceMappingURL=sync-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-docs.d.ts","sourceRoot":"","sources":["../../src/docs/sync-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAA;IACX,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAA;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAWvE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The docs phase of `auden sync`: for each bundle a repo subscribes to, pull
3
+ * its canonical items into `.auden/context/<bundle>/` and keep them fresh.
4
+ * Pull-only (Slice 1a) — this is the "repos stay fresh" heartbeat; local edits
5
+ * pushing back is a later slice.
6
+ *
7
+ * Reuses the shipped `pullBundleToDir`/`defaultPullDir` (the `auden pull`
8
+ * engine) so a subscribed sync and a manual `auden pull` write identically.
9
+ * Each bundle is pulled independently: one bundle's failure is captured and
10
+ * reported, never aborting the others — mirroring the per-batch resilience of
11
+ * the push loop and the guide-bundle pull's own try/catch.
12
+ *
13
+ * Kept free of citty/console so it unit-tests against a mocked client.
14
+ */
15
+ import { defaultPullDir, pullBundleToDir } from '../context/pull.js';
16
+ /**
17
+ * Server-side maximum items a single pull returns (`MAX_LIMIT` in the items
18
+ * endpoint). Without an explicit limit the endpoint defaults to 100, so a
19
+ * subscribed bundle with more than 100 docs would silently materialize only the
20
+ * newest 100. Request the max, and flag when a bundle hits the ceiling — the
21
+ * endpoint has no cursor pagination, so beyond this we surface the truncation
22
+ * rather than pretend the bundle is fully synced (no silent caps).
23
+ */
24
+ export const MAX_BUNDLE_PULL = 500;
25
+ /**
26
+ * Pull every subscribed bundle into its default local directory under `cwd`.
27
+ * `deps` injects the filesystem for tests.
28
+ */
29
+ export async function syncSubscribedDocs(client, bundles, cwd, deps = {}) {
30
+ const results = [];
31
+ for (const bundle of bundles) {
32
+ const dir = defaultPullDir(bundle, cwd);
33
+ try {
34
+ const { items, written } = await pullBundleToDir(client, { bundle, limit: MAX_BUNDLE_PULL }, dir, deps);
35
+ results.push({
36
+ bundle,
37
+ dir,
38
+ items: items.length,
39
+ written: written.length,
40
+ truncated: items.length >= MAX_BUNDLE_PULL,
41
+ });
42
+ }
43
+ catch (err) {
44
+ results.push({
45
+ bundle,
46
+ dir,
47
+ items: 0,
48
+ written: 0,
49
+ truncated: false,
50
+ error: err instanceof Error ? err.message : String(err),
51
+ });
52
+ }
53
+ }
54
+ return { results, hadError: results.some((r) => r.error !== undefined) };
55
+ }
56
+ /**
57
+ * One legible line per bundle for the sync output (Planning Principle 9 — what
58
+ * moved is never ambiguous). Failures read as warnings; a successful pull says
59
+ * how many files landed where.
60
+ */
61
+ export function formatDocsSyncLine(result) {
62
+ if (result.error) {
63
+ return ` warning: docs "${result.bundle}" — ${result.error} — skipping.`;
64
+ }
65
+ const skipped = result.items - result.written;
66
+ const skippedNote = skipped > 0 ? ` (${skipped} item(s) without text content skipped, e.g. assets)` : '';
67
+ const truncatedNote = result.truncated
68
+ ? ` — note: hit the ${MAX_BUNDLE_PULL}-item limit, older docs may be unpulled`
69
+ : '';
70
+ return ` pulled ${result.written} doc(s) from "${result.bundle}" → ${result.dir}${skippedNote}${truncatedNote}`;
71
+ }
72
+ //# sourceMappingURL=sync-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-docs.js","sourceRoot":"","sources":["../../src/docs/sync-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAKpE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;AAsBlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,OAAiB,EACjB,GAAW,EACX,OAAuB,EAAE;IAEzB,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,CAC9C,MAAM,EACN,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,EAClC,GAAG,EACH,IAAI,CACL,CAAA;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM;gBACN,GAAG;gBACH,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,SAAS,EAAE,KAAK,CAAC,MAAM,IAAI,eAAe;aAC3C,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM;gBACN,GAAG;gBACH,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA4B;IAC7D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,oBAAoB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,KAAK,cAAc,CAAA;IAC3E,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;IAC7C,MAAM,WAAW,GACf,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,qDAAqD,CAAC,CAAC,CAAC,EAAE,CAAA;IACtF,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS;QACpC,CAAC,CAAC,oBAAoB,eAAe,yCAAyC;QAC9E,CAAC,CAAC,EAAE,CAAA;IACN,OAAO,YAAY,MAAM,CAAC,OAAO,iBAAiB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,GAAG,GAAG,WAAW,GAAG,aAAa,EAAE,CAAA;AAClH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auden",
3
- "version": "0.1.0-alpha.4",
3
+ "version": "0.1.0-alpha.5",
4
4
  "private": false,
5
5
  "description": "Local-first CLI for Auden — evaluates AI coding agent actions against your guides on-device and syncs verdicts to your dashboard.",
6
6
  "license": "MIT",
@@ -55,9 +55,9 @@
55
55
  "test": "vitest run"
56
56
  },
57
57
  "dependencies": {
58
- "@auden.to/eval-core": "0.1.0-alpha.4",
59
- "@auden.to/projections": "0.1.0-alpha.4",
60
- "@auden.to/protocol": "0.1.0-alpha.4",
58
+ "@auden.to/eval-core": "0.1.0-alpha.5",
59
+ "@auden.to/projections": "0.1.0-alpha.5",
60
+ "@auden.to/protocol": "0.1.0-alpha.5",
61
61
  "@modelcontextprotocol/sdk": "^1.29.0",
62
62
  "citty": "^0.1.6",
63
63
  "diff": "^9.0.0"