@encore-os/eos-spec 0.5.1 → 0.6.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.
@@ -0,0 +1,20 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * `eos-spec build-embeddings` — build the committed semantic-precedent embedding
4
+ * index from the current specs/spec-index.json.
5
+ *
6
+ * Reads the generated (gitignored) spec-index.json, embeds every non-archived spec,
7
+ * and writes:
8
+ * - `<dataDir>/spec-embeddings.bin` (row-major Float32 matrix)
9
+ * - `<dataDir>/spec-embeddings.manifest.json` (dims, model, instruction, count, surfaceHash)
10
+ * - `<dataDir>/recall-query-vectors.json` (recall benchmark query vectors)
11
+ *
12
+ * Requires a running Ollama instance unless an `embed` function is injected
13
+ * (used in tests and custom callers). The data dir defaults to what is configured
14
+ * in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
15
+ *
16
+ * Generate specs/spec-index.json first via your repo's spec-index step.
17
+ */
18
+ export declare function registerBuildEmbeddings(program: Command,
19
+ /** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
20
+ embed?: (texts: string[]) => Promise<number[][]>): void;
@@ -0,0 +1,69 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { buildSpecEmbeddings } from '../lib/build-embeddings.js';
4
+ import { resolveEmbeddingsPaths } from '../lib/embeddings-source.js';
5
+ import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
6
+ import { getRepoRoot } from '../lib/repo.js';
7
+ /**
8
+ * `eos-spec build-embeddings` — build the committed semantic-precedent embedding
9
+ * index from the current specs/spec-index.json.
10
+ *
11
+ * Reads the generated (gitignored) spec-index.json, embeds every non-archived spec,
12
+ * and writes:
13
+ * - `<dataDir>/spec-embeddings.bin` (row-major Float32 matrix)
14
+ * - `<dataDir>/spec-embeddings.manifest.json` (dims, model, instruction, count, surfaceHash)
15
+ * - `<dataDir>/recall-query-vectors.json` (recall benchmark query vectors)
16
+ *
17
+ * Requires a running Ollama instance unless an `embed` function is injected
18
+ * (used in tests and custom callers). The data dir defaults to what is configured
19
+ * in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
20
+ *
21
+ * Generate specs/spec-index.json first via your repo's spec-index step.
22
+ */
23
+ export function registerBuildEmbeddings(program,
24
+ /** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
25
+ embed) {
26
+ program
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.')
29
+ .option('--data-dir <path>', 'Override the embeddings data dir (default: embeddings.data_dir from specs/config.yaml, or tools/eos-spec/data)')
30
+ .action(async (options, cmd) => {
31
+ const global = getGlobalOptions(cmd);
32
+ const repoRoot = getRepoRoot(global.repoRoot);
33
+ const { specIndexPath, dataDir: configDataDir } = resolveEmbeddingsPaths(repoRoot, global.config);
34
+ const dataDir = options.dataDir ?? configDataDir;
35
+ const indexPath = join(repoRoot, specIndexPath);
36
+ if (!existsSync(indexPath)) {
37
+ emit(global, {
38
+ ok: false,
39
+ error: {
40
+ code: ErrorCode.IO_ERROR,
41
+ message: `build-embeddings: spec-index.json not found at ${indexPath} — generate the spec index first`,
42
+ },
43
+ text: `build-embeddings: spec-index.json not found at ${indexPath}.\nGenerate it first (your repo's spec-index step).`,
44
+ });
45
+ }
46
+ let raw;
47
+ try {
48
+ raw = JSON.parse(readFileSync(indexPath, 'utf8'));
49
+ }
50
+ catch (err) {
51
+ emit(global, {
52
+ ok: false,
53
+ error: {
54
+ code: ErrorCode.IO_ERROR,
55
+ message: `build-embeddings: failed to parse spec-index.json: ${err instanceof Error ? err.message : String(err)}`,
56
+ },
57
+ text: 'build-embeddings: failed to parse spec-index.json.',
58
+ });
59
+ }
60
+ const specs = Array.isArray(raw?.specs) ? raw.specs : [];
61
+ const result = await buildSpecEmbeddings({ repoRoot, specIndex: specs, dataDir, embed });
62
+ emit(global, {
63
+ ok: true,
64
+ data: { count: result.count, surfaceHash: result.surfaceHash, manifestPath: result.manifestPath },
65
+ text: `build-embeddings: built ${result.count} vectors — ${result.surfaceHash.slice(0, 12)}… → ${result.manifestPath}`,
66
+ });
67
+ });
68
+ }
69
+ //# sourceMappingURL=build-embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/commands/build-embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB;AAChB,yEAAyE;AACzE,KAAgD;IAEhD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CACV,2RAA2R,CAC5R;SACA,MAAM,CACL,mBAAmB,EACnB,gHAAgH,CACjH;SACA,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,GAAG,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC;QAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,kDAAkD,SAAS,kCAAkC;iBACvG;gBACD,IAAI,EAAE,kDAAkD,SAAS,qDAAqD;aACvH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,GAAoC,CAAC;QACzC,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAwB,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,sDAAsD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAClH;gBACD,IAAI,EAAE,oDAAoD;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAgB,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,KAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzF,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;YACjG,IAAI,EAAE,2BAA2B,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,YAAY,EAAE;SACvH,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@encore-os/eos-spec/embeddings` — the semantic/recall engine surface.
3
+ * Node/fs-bound (Ollama, vector files); NOT client-safe — keep it off `/pure`.
4
+ * Consumers (encoreos build-embeddings + recall ratchet + skill-coverage --suggest)
5
+ * import from here instead of vendoring the engine.
6
+ */
7
+ export * from './lib/embedding-store.js';
8
+ export * from './lib/ollama-embed.js';
9
+ export * from './lib/semantic-search.js';
10
+ export * from './lib/precedent-search.js';
11
+ export * from './lib/embeddings-source.js';
12
+ export * from './lib/recall-cases.js';
13
+ export * from './lib/build-embeddings.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `@encore-os/eos-spec/embeddings` — the semantic/recall engine surface.
3
+ * Node/fs-bound (Ollama, vector files); NOT client-safe — keep it off `/pure`.
4
+ * Consumers (encoreos build-embeddings + recall ratchet + skill-coverage --suggest)
5
+ * import from here instead of vendoring the engine.
6
+ */
7
+ export * from './lib/embedding-store.js';
8
+ export * from './lib/ollama-embed.js';
9
+ export * from './lib/semantic-search.js';
10
+ export * from './lib/precedent-search.js';
11
+ export * from './lib/embeddings-source.js';
12
+ export * from './lib/recall-cases.js';
13
+ export * from './lib/build-embeddings.js';
14
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export type { NextAction } from './lib/next-action.js';
9
9
  export { getRepoRoot, coresList } from './lib/repo.js';
10
10
  export { buildScorecardForCore } from './lib/scorecard-run.js';
11
11
  export { scanVerifies } from './lib/verifies-scan.js';
12
+ export { deriveCodeEvidence } from './lib/code-evidence.js';
12
13
  export { computeStage, PIPELINE, buildPipeline, stageApplies, isComplianceGated, isSupersededGate, SUPERSEDE_SOFT_GATES, rank, type ActorType, type Transition, } from './lib/pipeline-map.js';
13
14
  export { isCompleteStatus, collectSpecIds } from './lib/blockers.js';
14
15
  export { uiEvidenceGate } from './lib/completion-gate.js';
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { registerConformance } from './commands/conformance.js';
12
12
  import { registerCreate } from './commands/create.js';
13
13
  import { registerDeferred } from './commands/deferred.js';
14
14
  import { registerDelta } from './commands/delta.js';
15
+ import { registerBuildEmbeddings } from './commands/build-embeddings.js';
15
16
  import { registerFreshness } from './commands/freshness.js';
16
17
  import { registerFunnel } from './commands/funnel.js';
17
18
  import { registerGenTests } from './commands/gen-tests.js';
@@ -46,6 +47,7 @@ export { recommendAction } from './commands/next.js';
46
47
  export { getRepoRoot, coresList } from './lib/repo.js';
47
48
  export { buildScorecardForCore } from './lib/scorecard-run.js';
48
49
  export { scanVerifies } from './lib/verifies-scan.js';
50
+ export { deriveCodeEvidence } from './lib/code-evidence.js';
49
51
  // The deterministic pipeline engine. `computeStage`/`PIPELINE` are the everyday
50
52
  // leaves; the rest (`buildPipeline`, `stageApplies`, `isComplianceGated`,
51
53
  // `isSupersededGate`, `SUPERSEDE_SOFT_GATES`, `rank`, `Transition`) are the
@@ -94,6 +96,7 @@ registerComplete(program);
94
96
  registerArchive(program);
95
97
  registerDeferred(program);
96
98
  registerDelta(program);
99
+ registerBuildEmbeddings(program);
97
100
  registerFreshness(program);
98
101
  registerFunnel(program);
99
102
  registerScorecard(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAWpE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxG,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GAItB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAEpG,gFAAgF;AAChF,6EAA6E;AAC7E,kFAAkF;AAClF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,iFAAiF;AACjF,qEAAqE;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,gFAAgF;AAChF,0EAA0E;AAC1E,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,mFAAmF;AACnF,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,GAGL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,kFAAkF;AAClF,iFAAiF;AACjF,OAAO,EAAE,wBAAwB,EAA6B,MAAM,gCAAgC,CAAC;AAGrG;;qEAEqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CACV,yKAAyK,CAC1K;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,oBAAoB,EAAE,gEAAgE,CAAC;KAC9F,MAAM,CACL,iBAAiB,EACjB,+GAA+G,CAChH;KACA,MAAM,CAAC,QAAQ,EAAE,4CAA4C,EAAE,KAAK,CAAC;KACrE,MAAM,CAAC,SAAS,EAAE,+BAA+B,EAAE,KAAK,CAAC,CAAC;AAE7D,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAuB,CAAC;IACvD,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BD,CACA,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /** Minimal spec-index row consumed by the build function. */
2
+ export interface IndexSpec {
3
+ id: string;
4
+ title?: string | null;
5
+ file?: string | null;
6
+ status?: string | null;
7
+ summary?: string | null;
8
+ }
9
+ /**
10
+ * Build the committed semantic-precedent embedding index from an in-memory
11
+ * spec array. Writes:
12
+ * - `<dataDir>/spec-embeddings.bin` (row-major Float32 matrix)
13
+ * - `<dataDir>/spec-embeddings.manifest.json` (dims, model, instruction, entries, count, surfaceHash)
14
+ * - `<dataDir>/recall-query-vectors.json` (recall benchmark queries embedded WITH instruction)
15
+ *
16
+ * @param opts.repoRoot Absolute path to the repository root.
17
+ * @param opts.specIndex Full spec-index array (filter applied internally).
18
+ * @param opts.dataDir Override data dir (defaults to `resolveEmbeddingsPaths` result).
19
+ * @param opts.embed Injectable embedder — defaults to `ollamaEmbed`. Receives raw
20
+ * texts (no instruction prefix added internally for doc vectors;
21
+ * the instruction prefix IS prepended for recall query vectors).
22
+ * @param opts.batch Batch size for the embedder (default 64).
23
+ */
24
+ export declare function buildSpecEmbeddings(opts: {
25
+ repoRoot: string;
26
+ specIndex: IndexSpec[];
27
+ dataDir?: string;
28
+ embed?: (texts: string[]) => Promise<number[][]>;
29
+ batch?: number;
30
+ }): Promise<{
31
+ manifestPath: string;
32
+ matrixPath: string;
33
+ recallVectorsPath: string;
34
+ count: number;
35
+ surfaceHash: string;
36
+ }>;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Portable `buildSpecEmbeddings` primitive — ports the fork's
3
+ * `scripts/build-spec-embeddings.ts` main body into an injectable function so
4
+ * the package can build its own spec-embedding vectors without a fork-local
5
+ * script. The `embed` seam lets callers mock Ollama in tests; it defaults to
6
+ * the real `ollamaEmbed`. Dims are derived dynamically from `rows[0].length`
7
+ * (same as `serializeMatrix`) so no `EMBED_DIMS` constant is needed.
8
+ */
9
+ import { mkdirSync, writeFileSync } from 'node:fs';
10
+ import { dirname } from 'node:path';
11
+ import { MANIFEST_FILE, MATRIX_FILE, RECALL_VECTORS_FILE, computeSurfaceHash, dataPath, embedDocText, isEmbeddableSpec, normalize, serializeMatrix, } from './embedding-store.js';
12
+ import { EMBED_MODEL, QUERY_INSTRUCTION, ollamaEmbed } from './ollama-embed.js';
13
+ import { RECALL_CASES } from './recall-cases.js';
14
+ import { resolveEmbeddingsPaths } from './embeddings-source.js';
15
+ const DEFAULT_BATCH = 64;
16
+ /**
17
+ * Build the committed semantic-precedent embedding index from an in-memory
18
+ * spec array. Writes:
19
+ * - `<dataDir>/spec-embeddings.bin` (row-major Float32 matrix)
20
+ * - `<dataDir>/spec-embeddings.manifest.json` (dims, model, instruction, entries, count, surfaceHash)
21
+ * - `<dataDir>/recall-query-vectors.json` (recall benchmark queries embedded WITH instruction)
22
+ *
23
+ * @param opts.repoRoot Absolute path to the repository root.
24
+ * @param opts.specIndex Full spec-index array (filter applied internally).
25
+ * @param opts.dataDir Override data dir (defaults to `resolveEmbeddingsPaths` result).
26
+ * @param opts.embed Injectable embedder — defaults to `ollamaEmbed`. Receives raw
27
+ * texts (no instruction prefix added internally for doc vectors;
28
+ * the instruction prefix IS prepended for recall query vectors).
29
+ * @param opts.batch Batch size for the embedder (default 64).
30
+ */
31
+ export async function buildSpecEmbeddings(opts) {
32
+ const embedFn = opts.embed ?? ((texts) => ollamaEmbed(texts));
33
+ const batch = opts.batch ?? DEFAULT_BATCH;
34
+ const dataDir = opts.dataDir ?? resolveEmbeddingsPaths(opts.repoRoot).dataDir;
35
+ // Filter to embeddable specs (non-archived, has a file path)
36
+ const specs = opts.specIndex.filter((s) => isEmbeddableSpec(s));
37
+ // --- Document embeddings (NO instruction prefix) ---
38
+ const docTexts = specs.map(embedDocText);
39
+ const matrix = [];
40
+ for (let i = 0; i < docTexts.length; i += batch) {
41
+ const vecs = await embedFn(docTexts.slice(i, i + batch));
42
+ for (const v of vecs)
43
+ matrix.push(normalize(Float32Array.from(v)));
44
+ }
45
+ const entries = specs.map((s) => ({
46
+ id: s.id,
47
+ file: s.file,
48
+ title: s.title ?? '',
49
+ }));
50
+ // Surface hash computed over the full unfiltered index (mirrors the fork exactly
51
+ // so `eos-spec freshness` recomputes the same hash from spec-index.json).
52
+ const surfaceHash = computeSurfaceHash(opts.specIndex);
53
+ // dims derived dynamically from actual vector length (no EMBED_DIMS constant needed)
54
+ const dims = matrix.length > 0 ? matrix[0].length : 0;
55
+ const manifest = {
56
+ model: EMBED_MODEL,
57
+ dims,
58
+ instruction: QUERY_INSTRUCTION,
59
+ surfaceHash,
60
+ built: process.env.EMBED_BUILD_DATE ?? new Date().toISOString().slice(0, 10),
61
+ entries,
62
+ };
63
+ // Resolve output paths and ensure the directory exists
64
+ const manifestPath = dataPath(opts.repoRoot, MANIFEST_FILE, dataDir);
65
+ const matrixPath = dataPath(opts.repoRoot, MATRIX_FILE, dataDir);
66
+ const recallVectorsPath = dataPath(opts.repoRoot, RECALL_VECTORS_FILE, dataDir);
67
+ mkdirSync(dirname(manifestPath), { recursive: true });
68
+ writeFileSync(matrixPath, serializeMatrix(matrix));
69
+ // Include `count` in the on-disk JSON (same as `entries.length`) for quick inspection
70
+ writeFileSync(manifestPath, `${JSON.stringify({ ...manifest, count: specs.length }, null, 2)}\n`);
71
+ // --- Recall benchmark query vectors (WITH instruction prefix) ---
72
+ const queries = RECALL_CASES.flatMap((c) => [
73
+ { kind: 'exact', query: c.exact, targetFile: c.targetFile },
74
+ { kind: 'paraphrase', query: c.paraphrase, targetFile: c.targetFile },
75
+ ]);
76
+ const qVecs = [];
77
+ for (let i = 0; i < queries.length; i += batch) {
78
+ const vecs = await embedFn(queries.slice(i, i + batch).map((q) => `${QUERY_INSTRUCTION}${q.query}`));
79
+ for (const v of vecs)
80
+ qVecs.push(normalize(Float32Array.from(v)));
81
+ }
82
+ const recall = queries.map((q, i) => ({ ...q, vec: Array.from(qVecs[i]) }));
83
+ writeFileSync(recallVectorsPath, `${JSON.stringify({ model: EMBED_MODEL, instruction: QUERY_INSTRUCTION, queries: recall }, null, 2)}\n`);
84
+ return { manifestPath, matrixPath, recallVectorsPath, count: specs.length, surfaceHash };
85
+ }
86
+ //# sourceMappingURL=build-embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/lib/build-embeddings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@encore-os/eos-spec",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "description": "Portable, config-driven spec-pipeline engine + quality harness. One canonical engine consumed as a library (with a client-safe /pure subpath) by every Encore-OS repo.",
5
5
  "private": false,
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -23,6 +23,10 @@
23
23
  "./pure": {
24
24
  "types": "./dist/pure.d.ts",
25
25
  "import": "./dist/pure.js"
26
+ },
27
+ "./embeddings": {
28
+ "types": "./dist/embeddings.d.ts",
29
+ "import": "./dist/embeddings.js"
26
30
  }
27
31
  },
28
32
  "files": [