@agentproto/corpus 0.1.0-alpha.4 → 0.1.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.
- package/dist/{chunk-UPX26MYH.mjs → chunk-WF5KGEL6.mjs} +7 -2
- package/dist/chunk-WF5KGEL6.mjs.map +1 -0
- package/dist/index.mjs +34 -4
- package/dist/index.mjs.map +1 -1
- package/dist/sidecar-WZTZS2I6.mjs +3 -0
- package/dist/{sidecar-TTWQD5R3.mjs.map → sidecar-WZTZS2I6.mjs.map} +1 -1
- package/package.json +4 -4
- package/dist/chunk-UPX26MYH.mjs.map +0 -1
- package/dist/sidecar-TTWQD5R3.mjs +0 -3
|
@@ -9,6 +9,7 @@ var CandidatesSidecar = class {
|
|
|
9
9
|
constructor(opts) {
|
|
10
10
|
this.opts = opts;
|
|
11
11
|
}
|
|
12
|
+
opts;
|
|
12
13
|
/**
|
|
13
14
|
* Load every row from disk. Returns an empty list if the file
|
|
14
15
|
* doesn't exist (a fresh corpus has no candidates yet).
|
|
@@ -89,6 +90,8 @@ var SidecarDuplicateError = class extends Error {
|
|
|
89
90
|
this.id = id;
|
|
90
91
|
this.name = "SidecarDuplicateError";
|
|
91
92
|
}
|
|
93
|
+
path;
|
|
94
|
+
id;
|
|
92
95
|
};
|
|
93
96
|
var SidecarNotFoundError = class extends Error {
|
|
94
97
|
constructor(path, id) {
|
|
@@ -97,8 +100,10 @@ var SidecarNotFoundError = class extends Error {
|
|
|
97
100
|
this.id = id;
|
|
98
101
|
this.name = "SidecarNotFoundError";
|
|
99
102
|
}
|
|
103
|
+
path;
|
|
104
|
+
id;
|
|
100
105
|
};
|
|
101
106
|
|
|
102
107
|
export { CandidatesSidecar, SidecarDuplicateError, SidecarNotFoundError };
|
|
103
|
-
//# sourceMappingURL=chunk-
|
|
104
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-WF5KGEL6.mjs.map
|
|
109
|
+
//# sourceMappingURL=chunk-WF5KGEL6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workspace/sidecar.ts"],"names":["yamlParse","yamlStringify"],"mappings":"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","file":"chunk-WF5KGEL6.mjs","sourcesContent":["/**\n * CandidatesSidecar — accessor for `collections/<name>/_candidates.yaml`.\n *\n * The plan calls out lazy materialization (so-so #6): the\n * \"discovered\" state has high volume and short lifespan; AIP-18 ITEM\n * files only materialize when a candidate transitions to `analyzed`.\n * Until then, candidates live in a YAML sidecar keyed by id.\n *\n * Sidecar shape:\n * candidates:\n * - id: <slug>\n * status: discovered # may also be transitioning (rare)\n * sourceUrl: ... # collection-specific fields are free-form\n * contentHash: ...\n * discoveredAt: ISO\n * discoveredBy: ws://operators/<slug>\n *\n * The accessor enforces:\n * - id uniqueness within the file\n * - atomic full-file writes (no partial sidecar)\n * - status transition discipline (a row stays here only while\n * `status === \"discovered\"`; transitions out remove the row and\n * return the data so the caller can materialize ITEM.md)\n */\n\nimport { parse as yamlParse, stringify as yamlStringify } from \"yaml\"\nimport type { FsPort } from \"../ports/fs.port.js\"\n\nexport interface CandidateRow {\n readonly id: string\n readonly status: \"discovered\" | string\n /** Open-ended — collection schema's `fields` defines what's allowed. */\n readonly [key: string]: unknown\n}\n\ninterface SidecarShape {\n readonly candidates: readonly CandidateRow[]\n}\n\nexport interface CandidatesSidecarOptions {\n readonly fs: FsPort\n /** Workspace-relative path of the sidecar file. */\n readonly path: string\n}\n\nexport class CandidatesSidecar {\n constructor(private readonly opts: CandidatesSidecarOptions) {}\n\n /**\n * Load every row from disk. Returns an empty list if the file\n * doesn't exist (a fresh corpus has no candidates yet).\n */\n async load(): Promise<readonly CandidateRow[]> {\n if (!(await this.opts.fs.exists(this.opts.path))) return []\n const content = await this.opts.fs.readFile(this.opts.path)\n if (!content.trim()) return []\n const parsed = yamlParse(content) as Partial<SidecarShape> | null\n if (!parsed || !Array.isArray(parsed.candidates)) return []\n return parsed.candidates as readonly CandidateRow[]\n }\n\n /**\n * Append a new candidate. Refuses if `id` already exists — sidecar\n * keys are unique. Returns the full updated list.\n */\n async append(row: CandidateRow): Promise<readonly CandidateRow[]> {\n const existing = await this.load()\n if (existing.some((r) => r.id === row.id)) {\n throw new SidecarDuplicateError(this.opts.path, row.id)\n }\n const next = [...existing, row]\n await this.write(next)\n return next\n }\n\n /**\n * Mutate one row in-place. Throws if not found.\n */\n async update(\n id: string,\n patch: Readonly<Record<string, unknown>>\n ): Promise<CandidateRow> {\n const existing = await this.load()\n let updated: CandidateRow | null = null\n const next = existing.map((r) => {\n if (r.id !== id) return r\n updated = { ...r, ...patch, id: r.id } as CandidateRow\n return updated\n })\n if (!updated) throw new SidecarNotFoundError(this.opts.path, id)\n await this.write(next)\n return updated\n }\n\n /**\n * Remove a row by id. Returns the removed row so the caller can\n * materialize an ITEM.md from its fields. Throws if not found.\n *\n * Use this when a candidate transitions out of `discovered`: pull\n * it from the sidecar, write the ITEM.md, append an event.\n */\n async take(id: string): Promise<CandidateRow> {\n const existing = await this.load()\n const idx = existing.findIndex((r) => r.id === id)\n if (idx === -1) throw new SidecarNotFoundError(this.opts.path, id)\n const removed = existing[idx]!\n const next = [...existing.slice(0, idx), ...existing.slice(idx + 1)]\n await this.write(next)\n return removed\n }\n\n /**\n * Whole-file replace. Used in tests and by the indexer for\n * bulk migrations. Prefer append/update/take for normal flow.\n */\n async write(candidates: readonly CandidateRow[]): Promise<void> {\n const shape: SidecarShape = { candidates }\n const content = yamlStringify(shape, {\n // Stable output: sort keys alphabetically across rows for\n // greppable diffs. Each row's id key is preserved by the\n // stringifier; the rest is dictionary order.\n sortMapEntries: false,\n })\n await this.opts.fs.writeFile(this.opts.path, content)\n }\n}\n\nexport class SidecarDuplicateError extends Error {\n constructor(\n readonly path: string,\n readonly id: string\n ) {\n super(\n `SidecarDuplicateError: candidate id \"${id}\" already exists in ${path}`\n )\n this.name = \"SidecarDuplicateError\"\n }\n}\n\nexport class SidecarNotFoundError extends Error {\n constructor(\n readonly path: string,\n readonly id: string\n ) {\n super(`SidecarNotFoundError: candidate id \"${id}\" not in ${path}`)\n this.name = \"SidecarNotFoundError\"\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { systemClock } from './chunk-KYX2DTEH.mjs';
|
|
2
2
|
import { REFINED_KIND_SCHEMA, resolveKnowledge } from './chunk-JV6VRZ6U.mjs';
|
|
3
3
|
export { REFINED_KIND_SCHEMA, isRefinedKind, resolveKnowledge } from './chunk-JV6VRZ6U.mjs';
|
|
4
|
-
import { CandidatesSidecar } from './chunk-
|
|
5
|
-
export { CandidatesSidecar, SidecarDuplicateError, SidecarNotFoundError } from './chunk-
|
|
4
|
+
import { CandidatesSidecar } from './chunk-WF5KGEL6.mjs';
|
|
5
|
+
export { CandidatesSidecar, SidecarDuplicateError, SidecarNotFoundError } from './chunk-WF5KGEL6.mjs';
|
|
6
6
|
import matter6 from 'gray-matter';
|
|
7
7
|
import { createHash } from 'crypto';
|
|
8
8
|
import { z } from 'zod';
|
|
@@ -320,6 +320,7 @@ var CorpusEventEmitter = class {
|
|
|
320
320
|
constructor(opts) {
|
|
321
321
|
this.opts = opts;
|
|
322
322
|
}
|
|
323
|
+
opts;
|
|
323
324
|
/**
|
|
324
325
|
* Emit one event. Returns the event as written (including the
|
|
325
326
|
* ISO timestamp and actor resolved at emit time). The .md log file
|
|
@@ -357,6 +358,7 @@ var CorpusWorkspaceReader = class {
|
|
|
357
358
|
constructor(opts) {
|
|
358
359
|
this.opts = opts;
|
|
359
360
|
}
|
|
361
|
+
opts;
|
|
360
362
|
/**
|
|
361
363
|
* Scan the workspace rooted at `root` and return a typed snapshot.
|
|
362
364
|
* `root` is workspace-relative (the host resolves to a backing
|
|
@@ -466,11 +468,15 @@ var CorpusVersionConflictError = class extends Error {
|
|
|
466
468
|
this.actual = actual;
|
|
467
469
|
this.name = "CorpusVersionConflictError";
|
|
468
470
|
}
|
|
471
|
+
path;
|
|
472
|
+
expected;
|
|
473
|
+
actual;
|
|
469
474
|
};
|
|
470
475
|
var CorpusWorkspaceWriter = class _CorpusWorkspaceWriter {
|
|
471
476
|
constructor(opts) {
|
|
472
477
|
this.opts = opts;
|
|
473
478
|
}
|
|
479
|
+
opts;
|
|
474
480
|
/**
|
|
475
481
|
* Compute the versionToken for raw file content. Exposed so the
|
|
476
482
|
* caller can stage a write and pass the same hash function used
|
|
@@ -544,6 +550,7 @@ var ImporterRunner = class {
|
|
|
544
550
|
constructor(opts) {
|
|
545
551
|
this.opts = opts;
|
|
546
552
|
}
|
|
553
|
+
opts;
|
|
547
554
|
/**
|
|
548
555
|
* Run a single importer batch end-to-end.
|
|
549
556
|
*
|
|
@@ -686,6 +693,7 @@ var LocalFilesImporter = class {
|
|
|
686
693
|
constructor(opts) {
|
|
687
694
|
this.opts = opts;
|
|
688
695
|
}
|
|
696
|
+
opts;
|
|
689
697
|
id = "local-files";
|
|
690
698
|
label = "Local Files";
|
|
691
699
|
async *enumerate(target) {
|
|
@@ -820,6 +828,7 @@ var WebImporter = class {
|
|
|
820
828
|
constructor(opts) {
|
|
821
829
|
this.opts = opts;
|
|
822
830
|
}
|
|
831
|
+
opts;
|
|
823
832
|
id = "web";
|
|
824
833
|
label = "Web (URLs)";
|
|
825
834
|
async *enumerate(target) {
|
|
@@ -886,6 +895,7 @@ var ConversationImporter = class {
|
|
|
886
895
|
constructor(opts) {
|
|
887
896
|
this.opts = opts;
|
|
888
897
|
}
|
|
898
|
+
opts;
|
|
889
899
|
id = "conversation";
|
|
890
900
|
label = "Conversation";
|
|
891
901
|
async *enumerate(target) {
|
|
@@ -991,6 +1001,7 @@ var DistillRunner = class {
|
|
|
991
1001
|
constructor(opts) {
|
|
992
1002
|
this.opts = opts;
|
|
993
1003
|
}
|
|
1004
|
+
opts;
|
|
994
1005
|
async run(source) {
|
|
995
1006
|
const items = await this.opts.distiller.distill({
|
|
996
1007
|
title: source.title,
|
|
@@ -1471,7 +1482,7 @@ function serializeSynthesis(body, lens, atoms, clock) {
|
|
|
1471
1482
|
}
|
|
1472
1483
|
};
|
|
1473
1484
|
const trimmed = body.trim();
|
|
1474
|
-
return matter6.stringify(
|
|
1485
|
+
return matter6.stringify("\n" + trimmed, fm);
|
|
1475
1486
|
}
|
|
1476
1487
|
function buildSynthesisPrompt(input) {
|
|
1477
1488
|
const atomBlock = input.atoms.map((a, i) => `### Atom ${i + 1}: ${a.title}
|
|
@@ -1707,6 +1718,7 @@ var ReadOnlyFs = class {
|
|
|
1707
1718
|
constructor(inner) {
|
|
1708
1719
|
this.inner = inner;
|
|
1709
1720
|
}
|
|
1721
|
+
inner;
|
|
1710
1722
|
exists(path) {
|
|
1711
1723
|
return this.inner.exists(path);
|
|
1712
1724
|
}
|
|
@@ -1791,6 +1803,7 @@ var StackResolver = class {
|
|
|
1791
1803
|
constructor(registry) {
|
|
1792
1804
|
this.registry = registry;
|
|
1793
1805
|
}
|
|
1806
|
+
registry;
|
|
1794
1807
|
async resolve(ctx) {
|
|
1795
1808
|
const providers = [...this.registry.list()].sort((a, b) => a.band - b.band);
|
|
1796
1809
|
const entries = [];
|
|
@@ -1881,6 +1894,7 @@ var SyncRunner = class {
|
|
|
1881
1894
|
constructor(opts) {
|
|
1882
1895
|
this.opts = opts;
|
|
1883
1896
|
}
|
|
1897
|
+
opts;
|
|
1884
1898
|
async run() {
|
|
1885
1899
|
const scheme = this.opts.uriScheme ?? "corpus";
|
|
1886
1900
|
const throttle = this.opts.throttleMs ?? 0;
|
|
@@ -1985,6 +1999,7 @@ var ReviewerTrackRecord = class {
|
|
|
1985
1999
|
this.opts = opts;
|
|
1986
2000
|
this.path = opts.path ?? DEFAULT_PATH;
|
|
1987
2001
|
}
|
|
2002
|
+
opts;
|
|
1988
2003
|
path;
|
|
1989
2004
|
/** Load the full record. Empty when the file doesn't exist yet. */
|
|
1990
2005
|
async load() {
|
|
@@ -2223,6 +2238,7 @@ var CorpusLinter = class {
|
|
|
2223
2238
|
constructor(opts) {
|
|
2224
2239
|
this.opts = opts;
|
|
2225
2240
|
}
|
|
2241
|
+
opts;
|
|
2226
2242
|
lint(snapshot) {
|
|
2227
2243
|
const decls = extractLintDeclarations(snapshot);
|
|
2228
2244
|
const issues = [];
|
|
@@ -2474,6 +2490,9 @@ var IllegalTransitionError = class extends Error {
|
|
|
2474
2490
|
this.reason = reason;
|
|
2475
2491
|
this.name = "IllegalTransitionError";
|
|
2476
2492
|
}
|
|
2493
|
+
from;
|
|
2494
|
+
to;
|
|
2495
|
+
reason;
|
|
2477
2496
|
};
|
|
2478
2497
|
function assertTransition(from, to, graph) {
|
|
2479
2498
|
const check = canTransition(from, to, graph);
|
|
@@ -2601,11 +2620,14 @@ var PromoteRejectedError = class extends Error {
|
|
|
2601
2620
|
this.failures = failures;
|
|
2602
2621
|
this.name = "PromoteRejectedError";
|
|
2603
2622
|
}
|
|
2623
|
+
entrySlug;
|
|
2624
|
+
failures;
|
|
2604
2625
|
};
|
|
2605
2626
|
var CorpusPromoter = class {
|
|
2606
2627
|
constructor(ctx) {
|
|
2607
2628
|
this.ctx = ctx;
|
|
2608
2629
|
}
|
|
2630
|
+
ctx;
|
|
2609
2631
|
async promote(opts) {
|
|
2610
2632
|
const reader = new CorpusWorkspaceReader({ fs: this.ctx.fs });
|
|
2611
2633
|
const writer = new CorpusWorkspaceWriter({ fs: this.ctx.fs });
|
|
@@ -2674,7 +2696,7 @@ var CorpusPromoter = class {
|
|
|
2674
2696
|
clock: this.ctx.clock
|
|
2675
2697
|
});
|
|
2676
2698
|
if (opts.candidateId && opts.candidateSidecarPath) {
|
|
2677
|
-
const { CandidatesSidecar: CandidatesSidecar2 } = await import('./sidecar-
|
|
2699
|
+
const { CandidatesSidecar: CandidatesSidecar2 } = await import('./sidecar-WZTZS2I6.mjs');
|
|
2678
2700
|
const sidecar = new CandidatesSidecar2({
|
|
2679
2701
|
fs: this.ctx.fs,
|
|
2680
2702
|
path: joinPath3(opts.workspacePath, opts.candidateSidecarPath)
|
|
@@ -2791,6 +2813,7 @@ var CorpusIndexer = class {
|
|
|
2791
2813
|
constructor(opts) {
|
|
2792
2814
|
this.opts = opts;
|
|
2793
2815
|
}
|
|
2816
|
+
opts;
|
|
2794
2817
|
/**
|
|
2795
2818
|
* Re-sync every active entry. Used at boot (cold-install) and by
|
|
2796
2819
|
* the admin `corpus reindex` command for drift recovery.
|
|
@@ -3216,6 +3239,7 @@ var OperatorOverlayResolver = class {
|
|
|
3216
3239
|
constructor(registry) {
|
|
3217
3240
|
this.registry = registry;
|
|
3218
3241
|
}
|
|
3242
|
+
registry;
|
|
3219
3243
|
resolve(ctx) {
|
|
3220
3244
|
const slugs = ctx.roleSlug ? [ctx.operatorSlug, ctx.roleSlug] : [ctx.operatorSlug];
|
|
3221
3245
|
const candidates = this.registry.listBy({
|
|
@@ -3261,6 +3285,7 @@ var PlaybookNotFoundError = class extends Error {
|
|
|
3261
3285
|
this.slug = slug;
|
|
3262
3286
|
this.name = "PlaybookNotFoundError";
|
|
3263
3287
|
}
|
|
3288
|
+
slug;
|
|
3264
3289
|
};
|
|
3265
3290
|
var IllegalPlaybookTransitionError = class extends Error {
|
|
3266
3291
|
constructor(slug, from, to) {
|
|
@@ -3272,11 +3297,15 @@ var IllegalPlaybookTransitionError = class extends Error {
|
|
|
3272
3297
|
this.to = to;
|
|
3273
3298
|
this.name = "IllegalPlaybookTransitionError";
|
|
3274
3299
|
}
|
|
3300
|
+
slug;
|
|
3301
|
+
from;
|
|
3302
|
+
to;
|
|
3275
3303
|
};
|
|
3276
3304
|
var PlaybookLifecycle = class {
|
|
3277
3305
|
constructor(opts) {
|
|
3278
3306
|
this.opts = opts;
|
|
3279
3307
|
}
|
|
3308
|
+
opts;
|
|
3280
3309
|
/**
|
|
3281
3310
|
* Transition `slug` from shadow → active. Cascades through
|
|
3282
3311
|
* `supersedes[]`: any currently-active playbook listed there is
|
|
@@ -3457,6 +3486,7 @@ var PlaybookEvaluator = class {
|
|
|
3457
3486
|
constructor(opts) {
|
|
3458
3487
|
this.opts = opts;
|
|
3459
3488
|
}
|
|
3489
|
+
opts;
|
|
3460
3490
|
/**
|
|
3461
3491
|
* Run an eval batch against a single playbook. For each case:
|
|
3462
3492
|
* 1. Score shadow.response against rubric → shadowScore
|