@encore-os/eos-spec 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/commands/build-embeddings.d.ts +1 -1
  2. package/dist/commands/build-embeddings.js +4 -4
  3. package/dist/commands/build-embeddings.js.map +1 -1
  4. package/dist/commands/create.d.ts +32 -0
  5. package/dist/commands/create.js +176 -16
  6. package/dist/commands/create.js.map +1 -1
  7. package/dist/commands/freshness.d.ts +1 -1
  8. package/dist/commands/freshness.js +4 -4
  9. package/dist/commands/freshness.js.map +1 -1
  10. package/dist/commands/index-spec.d.ts +22 -0
  11. package/dist/commands/index-spec.js +48 -0
  12. package/dist/commands/index-spec.js.map +1 -0
  13. package/dist/commands/promote.d.ts +46 -0
  14. package/dist/commands/promote.js +175 -0
  15. package/dist/commands/promote.js.map +1 -0
  16. package/dist/commands/verify-acs.d.ts +9 -1
  17. package/dist/commands/verify-acs.js +93 -31
  18. package/dist/commands/verify-acs.js.map +1 -1
  19. package/dist/index.d.ts +6 -1
  20. package/dist/index.js +20 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/config.d.ts +33 -1
  23. package/dist/lib/config.js +34 -2
  24. package/dist/lib/config.js.map +1 -1
  25. package/dist/lib/design-doc.d.ts +26 -0
  26. package/dist/lib/design-doc.js +42 -0
  27. package/dist/lib/design-doc.js.map +1 -0
  28. package/dist/lib/exec.d.ts +6 -1
  29. package/dist/lib/exec.js +5 -1
  30. package/dist/lib/exec.js.map +1 -1
  31. package/dist/lib/frontmatter.d.ts +15 -0
  32. package/dist/lib/frontmatter.js +34 -0
  33. package/dist/lib/frontmatter.js.map +1 -1
  34. package/dist/lib/git-ids.d.ts +11 -0
  35. package/dist/lib/git-ids.js +56 -0
  36. package/dist/lib/git-ids.js.map +1 -0
  37. package/dist/lib/handoff.d.ts +27 -0
  38. package/dist/lib/handoff.js +21 -0
  39. package/dist/lib/handoff.js.map +1 -0
  40. package/dist/lib/pipeline-config.d.ts +7 -5
  41. package/dist/lib/pipeline-config.js +17 -6
  42. package/dist/lib/pipeline-config.js.map +1 -1
  43. package/dist/lib/precedent-search.d.ts +31 -1
  44. package/dist/lib/precedent-search.js +13 -6
  45. package/dist/lib/precedent-search.js.map +1 -1
  46. package/dist/lib/seed-acs.d.ts +10 -0
  47. package/dist/lib/seed-acs.js +20 -0
  48. package/dist/lib/seed-acs.js.map +1 -0
  49. package/dist/lib/spec-id-guard.d.ts +19 -0
  50. package/dist/lib/spec-id-guard.js +34 -0
  51. package/dist/lib/spec-id-guard.js.map +1 -0
  52. package/dist/lib/spec-index.d.ts +20 -0
  53. package/dist/lib/spec-index.js +80 -0
  54. package/dist/lib/spec-index.js.map +1 -0
  55. package/dist/lib/version.d.ts +1 -1
  56. package/dist/lib/version.js +1 -1
  57. package/dist/pure.d.ts +2 -0
  58. package/dist/pure.js +7 -0
  59. package/dist/pure.js.map +1 -1
  60. package/package.json +1 -1
@@ -13,7 +13,7 @@ import type { Command } from 'commander';
13
13
  * (used in tests and custom callers). The data dir defaults to what is configured
14
14
  * in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
15
15
  *
16
- * Generate specs/spec-index.json first via your repo's spec-index step.
16
+ * Generate specs/spec-index.json first via `eos-spec index`.
17
17
  */
18
18
  export declare function registerBuildEmbeddings(program: Command,
19
19
  /** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
@@ -18,14 +18,14 @@ import { getRepoRoot } from '../lib/repo.js';
18
18
  * (used in tests and custom callers). The data dir defaults to what is configured
19
19
  * in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
20
20
  *
21
- * Generate specs/spec-index.json first via your repo's spec-index step.
21
+ * Generate specs/spec-index.json first via `eos-spec index`.
22
22
  */
23
23
  export function registerBuildEmbeddings(program,
24
24
  /** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
25
25
  embed) {
26
26
  program
27
27
  .command('build-embeddings')
28
- .description('Build the committed semantic-precedent embedding index from specs/spec-index.json. Writes spec-embeddings.bin, spec-embeddings.manifest.json, and recall-query-vectors.json to the configured data dir. Requires Ollama unless --embed is injected. Generate specs/spec-index.json first.')
28
+ .description('Build the committed semantic-precedent embedding index from specs/spec-index.json. Writes spec-embeddings.bin, spec-embeddings.manifest.json, and recall-query-vectors.json to the configured data dir. Requires Ollama unless --embed is injected. Generate specs/spec-index.json first via `eos-spec index`.')
29
29
  .option('--data-dir <path>', 'Override the embeddings data dir (default: embeddings.data_dir from specs/config.yaml, or tools/eos-spec/data)')
30
30
  .action(async (options, cmd) => {
31
31
  const global = getGlobalOptions(cmd);
@@ -38,9 +38,9 @@ embed) {
38
38
  ok: false,
39
39
  error: {
40
40
  code: ErrorCode.IO_ERROR,
41
- message: `build-embeddings: spec-index.json not found at ${indexPath} — generate the spec index first`,
41
+ message: `build-embeddings: spec index not found at ${indexPath} — run \`eos-spec index\` first`,
42
42
  },
43
- text: `build-embeddings: spec-index.json not found at ${indexPath}.\nGenerate it first (your repo's spec-index step).`,
43
+ text: `build-embeddings: spec index not found at ${indexPath}.\nRun \`eos-spec index\` first.`,
44
44
  });
45
45
  }
46
46
  let raw;
@@ -1 +1 @@
1
- {"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/commands/build-embeddings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/commands/build-embeddings.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,38 @@
1
1
  import type { Command } from 'commander';
2
2
  export declare function registerCreate(program: Command): void;
3
+ /**
4
+ * Issue #54 (born-verified guard): force every scaffolded `acceptance_criteria`
5
+ * item's `status:` to `planned`, regardless of what the resolved template
6
+ * authored. Scoped to the `acceptance_criteria:` block of the YAML frontmatter
7
+ * only — never touches the document's own top-level `status:` field, nor any
8
+ * `status`-shaped text in the markdown body.
9
+ */
10
+ export declare function normalizeScaffoldedAcceptanceCriteria(template: string): string;
3
11
  export declare function specSubdirForId(id: string, specsPath: string): string;
4
12
  export declare function applyHeader(template: string, id: string, title?: string): string;
13
+ export declare function slugify(s: string): string;
5
14
  export declare function nextFreeId(repoRoot: string, core: string, kind: 'base' | 'ux'): string;
15
+ /**
16
+ * Scaffold a single spec file from the configured template — the reusable core of
17
+ * `create`'s spec-write step (issue #60 A5), extracted so the `promote` verb mints the
18
+ * SAME templated, AC-normalized file the CLI does. Resolves the template tier
19
+ * (`full`→full_spec, `lite`→lite_spec, `micro`→enhancement_single; default full_spec),
20
+ * applies the header, and writes only when `write && !exists`. Returns the target path
21
+ * and whether a file was actually written (false on dry-run or when the file already
22
+ * exists). The #54 born-AC normalization is applied so a scaffolded spec can never
23
+ * inherit a verified/complete AC from a consumer template.
24
+ */
25
+ export declare function scaffoldSpec(repoRoot: string, opts: {
26
+ id: string;
27
+ core: string;
28
+ slug: string;
29
+ title?: string;
30
+ template?: 'full' | 'lite' | 'micro';
31
+ write: boolean;
32
+ configOverride?: string;
33
+ }): {
34
+ path: string;
35
+ created: boolean;
36
+ content: string;
37
+ };
6
38
  export declare function humanizeName(slug: string): string;
@@ -1,10 +1,15 @@
1
1
  import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
2
+ import { basename, join } from 'node:path';
3
+ import { resolveClaimedBy } from './claim.js';
3
4
  import { loadConfig, resolveTemplatePath } from '../lib/config.js';
5
+ import { addClaim, DEFAULT_TTL_MINUTES } from '../lib/claims.js';
6
+ import { runScript } from '../lib/exec.js';
4
7
  import { logEvent, RUN_ID } from '../lib/events.js';
8
+ import { gitClaimedIdNumbers } from '../lib/git-ids.js';
5
9
  import { ErrorCode, emit, emitContinuing, getGlobalOptions } from '../lib/output.js';
6
10
  import { searchSpecs } from '../lib/precedent-search.js';
7
11
  import { getRepoRoot, isKnownCore } from '../lib/repo.js';
12
+ import { assertSafeSpecFilename } from '../lib/spec-id-guard.js';
8
13
  import { findSpecsById } from '../lib/specs.js';
9
14
  import { withEventLog } from '../lib/with-event-log.js';
10
15
  export function registerCreate(program) {
@@ -41,6 +46,21 @@ export function registerCreate(program) {
41
46
  id = nextFreeId(repoRoot, String(options.core).toLowerCase(), kind);
42
47
  if (!title)
43
48
  title = humanizeName(String(options.name));
49
+ // Auto-take the claim lease on the id we just allocated (design: create is
50
+ // the natural claim point for auto-allocated ids — two parallel worktrees
51
+ // both auto-allocating must not both land on the same fresh id). Fail-open:
52
+ // a repo with no writable claim store must never make create unusable.
53
+ try {
54
+ const claim = addClaim(repoRoot, id, {
55
+ by: resolveClaimedBy(undefined, repoRoot),
56
+ ttlMinutes: DEFAULT_TTL_MINUTES,
57
+ });
58
+ emitContinuing(global, `create: claimed ${claim.id} for this worktree (ttl ${claim.ttlMinutes}m)`);
59
+ }
60
+ catch {
61
+ // no claim store / non-writable dir → proceed without a claim, exactly
62
+ // today's (pre-auto-claim) behavior.
63
+ }
44
64
  }
45
65
  const upper = id.toUpperCase();
46
66
  const core = upper.split('-')[0]?.toLowerCase();
@@ -142,25 +162,29 @@ export function registerCreate(program) {
142
162
  const created = [];
143
163
  const skipped = [];
144
164
  const config = loadConfig(repoRoot, global.config);
145
- const specsDir = join(repoRoot, 'specs', core, specSubdirForId(upper, config.paths.specs));
146
165
  const plansDir = join(repoRoot, 'specs', core, config.paths.plans);
147
166
  const tasksDir = join(repoRoot, 'specs', core, config.paths.tasks);
148
- mkdirSync(specsDir, { recursive: true });
149
167
  if (options.withPlan)
150
168
  mkdirSync(plansDir, { recursive: true });
151
169
  if (options.withTasks)
152
170
  mkdirSync(tasksDir, { recursive: true });
153
- const tmplKey = options.enhancement ? 'enhancement_single' : options.lite ? 'lite_spec' : 'full_spec';
154
- const tmplPath = resolveTemplatePath(config, tmplKey);
155
- const tmplName = tmplPath
156
- ? tmplPath.split('/').pop()
157
- : options.enhancement
158
- ? 'SPEC_TEMPLATE_LITE.md'
159
- : options.lite
160
- ? 'SPEC_TEMPLATE_LITE.md'
161
- : 'SPEC_TEMPLATE.md';
162
- const specSource = readTemplate(repoRoot, tmplName);
163
171
  const slug = slugify(options.name ? String(options.name) : title || upper);
172
+ // Refuse a filename the id grammar would over-match or the loader would drop —
173
+ // at mint time, not post-merge (issue #60, AC-E3). scaffoldSpec (below) writes
174
+ // the templated, #54-AC-normalized spec the same way `create` always has.
175
+ try {
176
+ assertSafeSpecFilename(core, upper, slug);
177
+ }
178
+ catch (e) {
179
+ emit(global, {
180
+ ok: false,
181
+ error: { code: ErrorCode.INVALID_ARGUMENT, message: e.message },
182
+ data: { id: upper, slug },
183
+ text: e.message,
184
+ });
185
+ return; // emit() is `never` in prod; the explicit return keeps intent clear + matches promote
186
+ }
187
+ const template = options.enhancement ? 'micro' : options.lite ? 'lite' : 'full';
164
188
  // Tier-2 precedent auto-run (design §4.3): surface related existing specs on
165
189
  // every create. Warn-only — printed, telemetered, never blocking — and
166
190
  // fail-open so a broken search can never block scaffolding (design §7).
@@ -209,8 +233,16 @@ export function registerCreate(program) {
209
233
  // never throw from telemetry
210
234
  }
211
235
  }
212
- const specTarget = join(specsDir, `${upper}-${slug}.md`);
213
- writeIfMissing(specTarget, applyHeader(specSource, upper, title || upper), created, skipped);
236
+ const spec = scaffoldSpec(repoRoot, {
237
+ id: upper,
238
+ core,
239
+ slug,
240
+ title: title || upper,
241
+ template,
242
+ write: true,
243
+ configOverride: global.config,
244
+ });
245
+ (spec.created ? created : skipped).push(spec.path);
214
246
  if (options.withPlan) {
215
247
  const planTmpl = resolveTemplatePath(config, 'plan');
216
248
  const planName = planTmpl ? planTmpl.split('/').pop() : 'PLAN_TEMPLATE.md';
@@ -239,6 +271,51 @@ function readTemplate(repoRoot, name) {
239
271
  }
240
272
  return readFileSync(path, 'utf8');
241
273
  }
274
+ /** Matches a `status:` line inside a scaffolded AC list item, optionally quoted
275
+ * (single or double), whose value is one of the terminal statuses a fresh AC must
276
+ * never be born with. Requires the backreferenced closing quote to match the
277
+ * opening one so `status: 'verified'` and `status: "verified"` both normalize,
278
+ * without touching an unrelated line that merely mentions one of these words. */
279
+ const AC_BORN_VERIFIED_RE = /^(\s+status:\s*)(['"]?)(verified|hand_closed|complete)\b\2/gm;
280
+ /**
281
+ * Issue #54 (born-verified guard): force every scaffolded `acceptance_criteria`
282
+ * item's `status:` to `planned`, regardless of what the resolved template
283
+ * authored. Scoped to the `acceptance_criteria:` block of the YAML frontmatter
284
+ * only — never touches the document's own top-level `status:` field, nor any
285
+ * `status`-shaped text in the markdown body.
286
+ */
287
+ export function normalizeScaffoldedAcceptanceCriteria(template) {
288
+ const fmMatch = template.match(/^(---\r?\n)([\s\S]*?)(\r?\n---\r?\n)/);
289
+ if (!fmMatch || fmMatch.index === undefined)
290
+ return template;
291
+ const whole = fmMatch[0];
292
+ const open = fmMatch[1];
293
+ const body = fmMatch[2];
294
+ const close = fmMatch[3];
295
+ const acKeyMatch = body.match(/^acceptance_criteria:.*$/m);
296
+ if (!acKeyMatch || acKeyMatch.index === undefined)
297
+ return template;
298
+ const acStart = acKeyMatch.index;
299
+ const acKeyEnd = acStart + acKeyMatch[0].length;
300
+ // The AC block runs until the next top-level frontmatter KEY (a column-0 line
301
+ // matching YAML key syntax, optionally quoted), or the end of the frontmatter
302
+ // body if acceptance_criteria is the last key. Anchoring on key syntax — not
303
+ // merely any column-0 non-space character — matters: a bare column-0 comment
304
+ // (`# ...`) between two AC list items is legal in-block YAML and must not end
305
+ // the block, or the AC after it would escape normalization. Nested lines
306
+ // (given/when/then, etc.) are always indented, so they never end the block, and
307
+ // the closing `---` fence can't appear here (the frontmatter match above is
308
+ // non-greedy, so `body` ends before the first fence).
309
+ const rest = body.slice(acKeyEnd);
310
+ const nextKeyOffset = rest.search(/\n(?=(["']?)[A-Za-z_][\w-]*\1\s*:)/);
311
+ const acBlockEnd = nextKeyOffset === -1 ? body.length : acKeyEnd + nextKeyOffset + 1;
312
+ const acBlock = body.slice(acStart, acBlockEnd);
313
+ const normalizedAcBlock = acBlock.replace(AC_BORN_VERIFIED_RE, '$1$2planned$2');
314
+ if (normalizedAcBlock === acBlock)
315
+ return template;
316
+ const normalizedBody = body.slice(0, acStart) + normalizedAcBlock + body.slice(acBlockEnd);
317
+ return (template.slice(0, fmMatch.index) + open + normalizedBody + close + template.slice(fmMatch.index + whole.length));
318
+ }
242
319
  export function specSubdirForId(id, specsPath) {
243
320
  return /-UX-/i.test(id) ? 'ux' : specsPath;
244
321
  }
@@ -258,7 +335,7 @@ function writeIfMissing(target, content, created, skipped) {
258
335
  writeFileSync(target, content, 'utf8');
259
336
  created.push(target);
260
337
  }
261
- function slugify(s) {
338
+ export function slugify(s) {
262
339
  return s
263
340
  .toLowerCase()
264
341
  .replace(/[^a-z0-9]+/g, '-')
@@ -286,9 +363,92 @@ export function nextFreeId(repoRoot, core, kind) {
286
363
  max = Math.max(max, parseInt(m[1], 10));
287
364
  }
288
365
  }
366
+ max = Math.max(max, scanOriginRefsMaxId(repoRoot, core, re));
367
+ // Also fold ids burned only in git history or reserved in a sibling branch NAME —
368
+ // the gap the current-tree scans above can't see (issue #60, AC-E3). Base ids only:
369
+ // the helper keys on `<CORE>-<n>`, which never matches the `<CORE>-UX-<n>` sequence.
370
+ if (kind === 'base')
371
+ max = Math.max(max, ...gitClaimedIdNumbers(repoRoot, core));
289
372
  const n = String(max + 1).padStart(2, '0');
290
373
  return kind === 'ux' ? `${upper}-UX-${n}` : `${upper}-${n}`;
291
374
  }
375
+ /**
376
+ * Scaffold a single spec file from the configured template — the reusable core of
377
+ * `create`'s spec-write step (issue #60 A5), extracted so the `promote` verb mints the
378
+ * SAME templated, AC-normalized file the CLI does. Resolves the template tier
379
+ * (`full`→full_spec, `lite`→lite_spec, `micro`→enhancement_single; default full_spec),
380
+ * applies the header, and writes only when `write && !exists`. Returns the target path
381
+ * and whether a file was actually written (false on dry-run or when the file already
382
+ * exists). The #54 born-AC normalization is applied so a scaffolded spec can never
383
+ * inherit a verified/complete AC from a consumer template.
384
+ */
385
+ export function scaffoldSpec(repoRoot, opts) {
386
+ const upper = opts.id.toUpperCase();
387
+ const config = loadConfig(repoRoot, opts.configOverride);
388
+ const tmplKey = opts.template === 'micro' ? 'enhancement_single' : opts.template === 'lite' ? 'lite_spec' : 'full_spec';
389
+ const tmplPath = resolveTemplatePath(config, tmplKey);
390
+ const tmplName = tmplPath
391
+ ? tmplPath.split('/').pop()
392
+ : tmplKey === 'full_spec'
393
+ ? 'SPEC_TEMPLATE.md'
394
+ : 'SPEC_TEMPLATE_LITE.md';
395
+ const specSource = normalizeScaffoldedAcceptanceCriteria(readTemplate(repoRoot, tmplName));
396
+ const content = applyHeader(specSource, upper, opts.title || upper);
397
+ const specsDir = join(repoRoot, 'specs', opts.core, specSubdirForId(upper, config.paths.specs));
398
+ const path = join(specsDir, `${upper}-${opts.slug}.md`);
399
+ // `content` is returned regardless of `write` so a caller (the `promote` verb) can
400
+ // transform it — seed ACs, add the design_doc backlink — and control the final write
401
+ // itself, including a dry-run that renders without touching disk.
402
+ if (!opts.write || existsSync(path))
403
+ return { path, created: false, content };
404
+ mkdirSync(specsDir, { recursive: true });
405
+ writeFileSync(path, content, 'utf8');
406
+ return { path, created: true, content };
407
+ }
408
+ /** Bounds on the origin-refs scan below, so a repo with an unusually large number
409
+ * of fetched remote-tracking refs can't turn a `create` call into a hang: each git
410
+ * call is individually timeout-guarded, and the ref count is capped. */
411
+ const ORIGIN_SCAN_GIT_TIMEOUT_MS = 3000;
412
+ const ORIGIN_SCAN_MAX_REFS = 200;
413
+ /**
414
+ * Parallel-agent id collision guard: `nextFreeId`'s filesystem scan is blind to an
415
+ * id already claimed on a fetched-but-not-merged origin branch (a sibling worktree
416
+ * that ran `create` first). Scan `refs/remotes/origin` for the highest id under
417
+ * `specs/<core>` across those branches too. Fails open on any git error — a
418
+ * non-git directory, a repo with no `origin` remote, or a git binary that isn't on
419
+ * PATH all fall back to exactly today's fs-only behavior.
420
+ */
421
+ function scanOriginRefsMaxId(repoRoot, core, re) {
422
+ let max = 0;
423
+ try {
424
+ const refsResult = runScript(['git', 'for-each-ref', 'refs/remotes/origin', '--format=%(objectname)'], repoRoot, {
425
+ timeoutMs: ORIGIN_SCAN_GIT_TIMEOUT_MS,
426
+ });
427
+ if (refsResult.exitCode !== 0)
428
+ return 0;
429
+ const refs = refsResult.stdout
430
+ .split('\n')
431
+ .map((s) => s.trim())
432
+ .filter(Boolean)
433
+ .slice(0, ORIGIN_SCAN_MAX_REFS);
434
+ for (const sha of refs) {
435
+ const lsResult = runScript(['git', 'ls-tree', '-r', '--name-only', sha, '--', `specs/${core}`], repoRoot, {
436
+ timeoutMs: ORIGIN_SCAN_GIT_TIMEOUT_MS,
437
+ });
438
+ if (lsResult.exitCode !== 0)
439
+ continue;
440
+ for (const f of lsResult.stdout.split('\n')) {
441
+ const m = basename(f).match(re);
442
+ if (m)
443
+ max = Math.max(max, parseInt(m[1], 10));
444
+ }
445
+ }
446
+ }
447
+ catch {
448
+ return 0; // non-git dir / git missing → fs-only behavior, exactly today's
449
+ }
450
+ return max;
451
+ }
292
452
  export function humanizeName(slug) {
293
453
  return slug
294
454
  .replace(/[-_]+/g, ' ')
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,kGAAkG,CAAC;SAC/G,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,eAAe,EAAE,0CAA0C,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,8DAA8D,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,uDAAuD,EAAE,KAAK,CAAC;SAChF,MAAM,CAAC,eAAe,EAAE,qDAAqD,EAAE,KAAK,CAAC;SACrF,MAAM,CAAC,aAAa,EAAE,+CAA+C,EAAE,KAAK,CAAC;SAC7E,MAAM,CAAC,cAAc,EAAE,iDAAiD,EAAE,KAAK,CAAC;SAChF,MAAM,CACL,SAAS,EACT,2FAA2F,EAC3F,KAAK,CACN;SACA,MAAM,CAAC,CAAC,KAAyB,EAAE,UAAoB,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CACxE,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,EAAE,GAAG,KAAK,CAAC;QACf,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE;oBACX,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE;wBACL,IAAI,EAAE,SAAS,CAAC,gBAAgB;wBAChC,OAAO,EAAE,sEAAsE;qBAChF;oBACD,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,sEAAsE;iBAC7E,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACvD,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK;gBAAE,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAEvD,2EAA2E;YAC3E,0EAA0E;YAC1E,4EAA4E;YAC5E,uEAAuE;YACvE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE;oBACnC,EAAE,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;oBACzC,UAAU,EAAE,mBAAmB;iBAChC,CAAC,CAAC;gBACH,cAAc,CAAC,MAAM,EAAE,mBAAmB,KAAK,CAAC,EAAE,2BAA2B,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;YACrG,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;gBACvE,qCAAqC;YACvC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,gBAAgB;oBAChC,OAAO,EAAE,4BAA4B,EAAE,0CAA0C;iBAClF;gBACD,IAAI,EAAE,EAAE,EAAE,EAAE;gBACZ,IAAI,EAAE,4BAA4B,EAAE,0CAA0C;aAC/E,CAAC,CAAC;QACL,CAAC;QAED,2EAA2E;QAC3E,yEAAyE;QACzE,iDAAiD;QACjD,IAAI,UAAU,GAAe,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qEAAqE;YACrE,QAAQ,CACN;gBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,QAAQ,CACN;gBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,KAAK;aAClB,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;gBACvF,IAAI,EAAE;oBACJ,0BAA0B,KAAK,kBAAkB;oBACjD,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClE,2EAA2E,IAAI,kBAAkB;oBACjG,2DAA2D;iBAC5D,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,QAAQ,CACN;gBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,KAAK;aAClB,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;gBACjG,IAAI,EAAE;oBACJ,kBAAkB,KAAK,yCAAyC;oBAChE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpE,gHAAgH;oBAChH,2DAA2D;iBAC5D,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,QAAQ,CACN;gBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,IAAI;aACjB,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,QAAQ;YAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,SAAS;YAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAC3E,+EAA+E;QAC/E,+EAA+E;QAC/E,0EAA0E;QAC1E,IAAI,CAAC;YACH,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAG,CAAW,CAAC,OAAO,EAAE;gBAC1E,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;gBACzB,IAAI,EAAG,CAAW,CAAC,OAAO;aAC3B,CAAC,CAAC;YACH,OAAO,CAAC,sFAAsF;QAChG,CAAC;QACD,MAAM,QAAQ,GAA8B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3G,6EAA6E;QAC7E,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;YAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,cAAc,CAAC,MAAM,EAAE,uCAAuC,KAAK,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC9F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;YACD,6EAA6E;YAC7E,gFAAgF;YAChF,+EAA+E;YAC/E,4DAA4D;YAC5D,QAAQ,CACN;gBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,MAAM;gBACb,EAAE,EAAE,CAAC;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;aAC3C,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,gFAAgF;YAChF,IAAI,CAAC;gBACH,QAAQ,CACN;oBACE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC5B,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,MAAM;oBACb,EAAE,EAAE,CAAC;oBACL,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,KAAK;oBACb,IAAI;oBACJ,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,OAAO;iBACjB,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE;YAClC,EAAE,EAAE,KAAK;YACT,IAAI;YACJ,IAAI;YACJ,KAAK,EAAE,KAAK,IAAI,KAAK;YACrB,QAAQ;YACR,KAAK,EAAE,IAAI;YACX,cAAc,EAAE,MAAM,CAAC,MAAM;SAC9B,CAAC,CAAC;QACH,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC;YAC5E,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpD,cAAc,CACZ,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,UAAU,CAAC,EAClC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,EAC9C,OAAO,EACP,OAAO,CACR,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAChF,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtD,cAAc,CACZ,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,WAAW,CAAC,EACnC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,EAC/C,OAAO,EACP,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YACtB,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;YAC5C,IAAI,EACF,OAAO,CAAC,MAAM,KAAK,CAAC;gBAClB,CAAC,CAAC,wDAAwD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9E,CAAC,CAAC,WAAW,KAAK,2BAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;SACrM,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CACjB,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAY;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;;;kFAIkF;AAClF,MAAM,mBAAmB,GAAG,8DAA8D,CAAC;AAE3F;;;;;;GAMG;AACH,MAAM,UAAU,qCAAqC,CAAC,QAAgB;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhD,8EAA8E;IAC9E,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,yEAAyE;IACzE,gFAAgF;IAChF,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;IAErF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAChF,IAAI,iBAAiB,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAEnD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3F,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAChH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,SAAiB;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,EAAU,EAAE,KAAK,GAAG,EAAE;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnD,OAAO,QAAQ;SACZ,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;SAC9B,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAChC,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,OAAe,EAAE,OAAiB,EAAE,OAAiB;IAC3F,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,CAAC;SACL,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB,EAAE,CAAS;IAC1C,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAY,EAAE,IAAmB;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,0FAA0F;IAC1F,MAAM,IAAI,GAAG;QACX,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC;KACzC,CAAC;IACF,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC/G,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,CAAC;gBAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,kFAAkF;IAClF,oFAAoF;IACpF,qFAAqF;IACrF,IAAI,IAAI,KAAK,MAAM;QAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,IAQC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1G,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG;QAC5B,CAAC,CAAC,OAAO,KAAK,WAAW;YACvB,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,uBAAuB,CAAC;IAC9B,MAAM,UAAU,GAAG,qCAAqC,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IACxD,mFAAmF;IACnF,qFAAqF;IACrF,kEAAkE;IAClE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9E,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED;;yEAEyE;AACzE,MAAM,0BAA0B,GAAG,IAAI,CAAC;AACxC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAU;IACrE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,wBAAwB,CAAC,EAAE,QAAQ,EAAE;YAC/G,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;aAC3B,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE;gBACxG,SAAS,EAAE,0BAA0B;aACtC,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC;gBAAE,SAAS;YACtC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,CAAC,gEAAgE;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACxC,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -8,6 +8,6 @@ import type { Command } from 'commander';
8
8
  * vectors are stale and must be rebuilt. Exits non-zero on drift (or a missing
9
9
  * manifest/index) so CI / pre-commit can block, with an actionable rebuild hint.
10
10
  *
11
- * Generate the (gitignored) spec-index.json first via your repo's spec-index step.
11
+ * Generate the (gitignored) spec-index.json first via `eos-spec index`.
12
12
  */
13
13
  export declare function registerFreshness(program: Command): void;
@@ -12,12 +12,12 @@ const REBUILD_HINT = 'Rebuild the committed embedding vectors for the current co
12
12
  * vectors are stale and must be rebuilt. Exits non-zero on drift (or a missing
13
13
  * manifest/index) so CI / pre-commit can block, with an actionable rebuild hint.
14
14
  *
15
- * Generate the (gitignored) spec-index.json first via your repo's spec-index step.
15
+ * Generate the (gitignored) spec-index.json first via `eos-spec index`.
16
16
  */
17
17
  export function registerFreshness(program) {
18
18
  program
19
19
  .command('freshness')
20
- .description('Check the committed semantic-precedent embeddings against the current spec corpus. Exits non-zero when the corpus has drifted (rebuild needed) or the manifest/index is missing. Generate specs/spec-index.json first.')
20
+ .description('Check the committed semantic-precedent embeddings against the current spec corpus. Exits non-zero when the corpus has drifted (rebuild needed) or the manifest/index is missing. Generate specs/spec-index.json first via `eos-spec index`.')
21
21
  .action(withEventLog('freshness', async (_options, cmd) => {
22
22
  const global = getGlobalOptions(cmd);
23
23
  const repoRoot = getRepoRoot(global.repoRoot);
@@ -35,10 +35,10 @@ export function registerFreshness(program) {
35
35
  ok: false,
36
36
  error: {
37
37
  code: ErrorCode.IO_ERROR,
38
- message: 'freshness: specs/spec-index.json not found — generate the spec index first',
38
+ message: 'freshness: spec index not found — run `eos-spec index` first',
39
39
  },
40
40
  data: result,
41
- text: 'freshness: specs/spec-index.json not found — generate the spec index first.',
41
+ text: 'freshness: spec index not found — run `eos-spec index` first.',
42
42
  });
43
43
  }
44
44
  if (result.reason === 'manifest-missing') {
@@ -1 +1 @@
1
- {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/commands/freshness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,YAAY,GAChB,qGAAqG,CAAC;AAExG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,wNAAwN,CACzN;SACA,MAAM,CACL,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;QAEpF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,0EAA0E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;aACpH,CAAC,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,4EAA4E;iBACtF;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,6EAA6E;aACpF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,sDAAsD,YAAY,EAAE;iBAC9E;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,YAAY,EAAE;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS,CAAC,iBAAiB;gBACjC,OAAO,EAAE,yEAAyE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,YAAY,EAAE;aAClM;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,4EAA4E;gBAC5E,6BAA6B,MAAM,CAAC,WAAW,EAAE;gBACjD,6BAA6B,MAAM,CAAC,aAAa,EAAE;gBACnD,EAAE;gBACF,wFAAwF;gBACxF,YAAY;aACb,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/commands/freshness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,YAAY,GAChB,qGAAqG,CAAC;AAExG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,6OAA6O,CAC9O;SACA,MAAM,CACL,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;QAEpF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,0EAA0E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;aACpH,CAAC,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,8DAA8D;iBACxE;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,+DAA+D;aACtE,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,sDAAsD,YAAY,EAAE;iBAC9E;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,YAAY,EAAE;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS,CAAC,iBAAiB;gBACjC,OAAO,EAAE,yEAAyE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,YAAY,EAAE;aAClM;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,4EAA4E;gBAC5E,6BAA6B,MAAM,CAAC,WAAW,EAAE;gBACjD,6BAA6B,MAAM,CAAC,aAAa,EAAE;gBACnD,EAAE;gBACF,wFAAwF;gBACxF,YAAY;aACb,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Command } from 'commander';
2
+ export { buildSpecIndex, extractSummary } from '../lib/spec-index.js';
3
+ export type { SpecIndexEntry } from '../lib/precedent-search.js';
4
+ /**
5
+ * `eos-spec index` — generate specs/spec-index.json, the lexical corpus that
6
+ * `precedent --topic` searches and `build-embeddings` / `freshness` read.
7
+ *
8
+ * Before this command the package consumed the index but shipped NO generator
9
+ * (the remediation hint named a consumer-only `npm run spec:index` script, so
10
+ * the prior-art step was broken everywhere except repos that carried their own
11
+ * generator). The entry shape is the one `searchSpecs` ranks against — the same
12
+ * projection builder's scripts/specs/build-spec-index.mjs produces.
13
+ *
14
+ * The output is a derived, regenerable cache (conventionally gitignored),
15
+ * pretty-printed with stable file-path ordering for clean diffs. Lexical search
16
+ * no longer requires it (searchSpecs falls back to an in-memory build), but the
17
+ * on-disk file is faster for hot search paths and REQUIRED by
18
+ * `build-embeddings` and `freshness`. The write path honors
19
+ * `embeddings.spec_index_path` from specs/config.yaml (default
20
+ * specs/spec-index.json), matching where those two commands read.
21
+ */
22
+ export declare function registerIndex(program: Command): void;
@@ -0,0 +1,48 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { resolveEmbeddingsPaths } from '../lib/embeddings-source.js';
4
+ import { emit, getGlobalOptions } from '../lib/output.js';
5
+ import { getRepoRoot } from '../lib/repo.js';
6
+ import { buildSpecIndex } from '../lib/spec-index.js';
7
+ import { withEventLog } from '../lib/with-event-log.js';
8
+ // Re-exported here so command-level consumers (and the Phase 2a task contract)
9
+ // can import the generator alongside its command registration.
10
+ export { buildSpecIndex, extractSummary } from '../lib/spec-index.js';
11
+ /**
12
+ * `eos-spec index` — generate specs/spec-index.json, the lexical corpus that
13
+ * `precedent --topic` searches and `build-embeddings` / `freshness` read.
14
+ *
15
+ * Before this command the package consumed the index but shipped NO generator
16
+ * (the remediation hint named a consumer-only `npm run spec:index` script, so
17
+ * the prior-art step was broken everywhere except repos that carried their own
18
+ * generator). The entry shape is the one `searchSpecs` ranks against — the same
19
+ * projection builder's scripts/specs/build-spec-index.mjs produces.
20
+ *
21
+ * The output is a derived, regenerable cache (conventionally gitignored),
22
+ * pretty-printed with stable file-path ordering for clean diffs. Lexical search
23
+ * no longer requires it (searchSpecs falls back to an in-memory build), but the
24
+ * on-disk file is faster for hot search paths and REQUIRED by
25
+ * `build-embeddings` and `freshness`. The write path honors
26
+ * `embeddings.spec_index_path` from specs/config.yaml (default
27
+ * specs/spec-index.json), matching where those two commands read.
28
+ */
29
+ export function registerIndex(program) {
30
+ program
31
+ .command('index')
32
+ .description('Generate specs/spec-index.json — the lexical corpus precedent --topic searches and build-embeddings/freshness read. Derived + regenerable; honors embeddings.spec_index_path from specs/config.yaml.')
33
+ .action(withEventLog('index', async (_options, cmd) => {
34
+ const global = getGlobalOptions(cmd);
35
+ const repoRoot = getRepoRoot(global.repoRoot);
36
+ const { specIndexPath } = resolveEmbeddingsPaths(repoRoot, global.config);
37
+ const entries = buildSpecIndex(repoRoot);
38
+ const indexPath = join(repoRoot, specIndexPath);
39
+ mkdirSync(dirname(indexPath), { recursive: true });
40
+ writeFileSync(indexPath, `${JSON.stringify({ version: 1, specs: entries }, null, 2)}\n`, 'utf8');
41
+ emit(global, {
42
+ ok: true,
43
+ data: { count: entries.length, path: indexPath },
44
+ text: `index: wrote ${entries.length} spec(s) → ${indexPath}`,
45
+ });
46
+ }));
47
+ }
48
+ //# sourceMappingURL=index-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-spec.js","sourceRoot":"","sources":["../../src/commands/index-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,sMAAsM,CACvM;SACA,MAAM,CACL,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YAChD,IAAI,EAAE,gBAAgB,OAAO,CAAC,MAAM,cAAc,SAAS,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * The `promote` verb — the brainstorm→spec handoff, in one engine action (issue #60,
4
+ * P1 engine half). It lives at the command layer because it composes `create`'s
5
+ * scaffolding + id-allocation (the `lib` layer never imports `commands/`, and the
6
+ * scaffolding primitives are command-owned) with the pure lib writers; `promoteDesignDoc`
7
+ * is exported as a plain function (unit-testable, surfaced on the package main entry as
8
+ * the Spec-Studio seam) and `registerPromote` is its thin CLI adapter.
9
+ *
10
+ * `promoteDesignDoc` turns an approved design doc into a collision-safe, AC-bearing,
11
+ * back-linked, claimed spec: allocate a git-aware id → guard the filename → scaffold the
12
+ * template → seed present-but-`planned` placeholder ACs (never born AC-less) → stamp the
13
+ * `design_doc:` backlink → flip the design doc's lifecycle line to the configured shipped
14
+ * marker → take a claim lease. All writes are gated on `opts.write` (dry-run renders
15
+ * without touching disk), mirroring `closeout-core`'s read→transform→write-if-changed
16
+ * model. The protected-branch refusal lives in the command adapter, not here.
17
+ */
18
+ export type PromoteOptions = {
19
+ /** Path (repo-relative or absolute) to the approved design doc. */
20
+ designDoc: string;
21
+ core: string;
22
+ /** Spec name slug; defaults to the design-doc basename (date prefix + `-design` stripped). */
23
+ slug?: string;
24
+ title?: string;
25
+ template?: 'full' | 'lite' | 'micro';
26
+ /** When false, compute the full result but write nothing (dry-run). */
27
+ write: boolean;
28
+ /** Claim identity; defaults via resolveClaimedBy (env / worktree basename). */
29
+ by?: string;
30
+ ttlMinutes?: number;
31
+ /** Passthrough for the CLI `--config` override (handoff/config resolution). */
32
+ configOverride?: string;
33
+ };
34
+ export type PromoteResult = {
35
+ specId: string;
36
+ /** Absolute path to the (would-be) spec file. */
37
+ specPath: string;
38
+ /** Repo-relative design-doc path recorded as the backlink. */
39
+ designDoc: string;
40
+ acSeeded: number;
41
+ claimed: boolean;
42
+ specWritten: boolean;
43
+ designDocWritten: boolean;
44
+ };
45
+ export declare function promoteDesignDoc(repoRoot: string, opts: PromoteOptions): PromoteResult;
46
+ export declare function registerPromote(program: Command): void;