@komnet/core
Advanced tools
| /** | ||
| * Does this path exist? | ||
| * | ||
| * Lives here rather than in `network.ts` because every extracted network domain | ||
| * needs it, and a copy per module is how two of them end up disagreeing about | ||
| * what a missing worktree means. | ||
| */ | ||
| export declare function exists(path: string): Promise<boolean>; | ||
| //# sourceMappingURL=fs.d.ts.map |
| {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D"} |
+18
| import { access } from "node:fs/promises"; | ||
| /** | ||
| * Does this path exist? | ||
| * | ||
| * Lives here rather than in `network.ts` because every extracted network domain | ||
| * needs it, and a copy per module is how two of them end up disagreeing about | ||
| * what a missing worktree means. | ||
| */ | ||
| export async function exists(path) { | ||
| try { | ||
| await access(path); | ||
| return true; | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| //# sourceMappingURL=fs.js.map |
| {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"} |
| /** | ||
| * Which identity this machine commits and signs with. | ||
| * | ||
| * Grouped under "sealing" in `network.ts` purely by position: these four are | ||
| * read by `publishAgentCard`, by `send` when the network signs, and by the sync | ||
| * verification path — sealing never touches them. | ||
| * | ||
| * The verification itself is pure and lives in `../authenticity.ts`; this is the | ||
| * part that has to ask git and the filesystem. | ||
| */ | ||
| import { type AuthenticityMode, type NetManifest } from "../net.ts"; | ||
| import type { GitRunner } from "../git/runner.ts"; | ||
| /** What identity resolution needs from the network, and nothing more. */ | ||
| export interface AuthenticityContext { | ||
| readonly runner: GitRunner; | ||
| /** The `main` checkout, which is where git config and the manifest are read from. */ | ||
| readonly recordWorktree: string; | ||
| } | ||
| /** | ||
| * The git identity this machine commits with. | ||
| * | ||
| * Published on the agent card so `authenticity: git` has something to check | ||
| * `from` against — otherwise the mode can only ever report "no binding". | ||
| */ | ||
| export declare function gitIdentity(ctx: AuthenticityContext): Promise<{ | ||
| name: string; | ||
| email: string; | ||
| } | null>; | ||
| /** SSH key used for `authenticity: signed`, or null when none is configured. */ | ||
| export declare function signingKeyPath(ctx: AuthenticityContext): Promise<string | null>; | ||
| /** The network manifest from `main`, which carries the authenticity mode. */ | ||
| export declare function readManifest(ctx: AuthenticityContext): Promise<NetManifest | null>; | ||
| export declare function authenticityMode(ctx: AuthenticityContext): Promise<AuthenticityMode>; | ||
| //# sourceMappingURL=authenticity.d.ts.map |
| {"version":3,"file":"authenticity.d.ts","sourceRoot":"","sources":["../../src/network/authenticity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAYjD;AAED,gFAAgF;AAChF,wBAAsB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWrF;AAED,6EAA6E;AAC7E,wBAAsB,YAAY,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAQxF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG1F"} |
| /** | ||
| * Which identity this machine commits and signs with. | ||
| * | ||
| * Grouped under "sealing" in `network.ts` purely by position: these four are | ||
| * read by `publishAgentCard`, by `send` when the network signs, and by the sync | ||
| * verification path — sealing never touches them. | ||
| * | ||
| * The verification itself is pure and lives in `../authenticity.ts`; this is the | ||
| * part that has to ask git and the filesystem. | ||
| */ | ||
| import { readFile } from "node:fs/promises"; | ||
| import { join } from "node:path"; | ||
| import { exists } from "../fs.js"; | ||
| import { parseNetManifest } from "../net.js"; | ||
| /** | ||
| * The git identity this machine commits with. | ||
| * | ||
| * Published on the agent card so `authenticity: git` has something to check | ||
| * `from` against — otherwise the mode can only ever report "no binding". | ||
| */ | ||
| export async function gitIdentity(ctx) { | ||
| // `git var GIT_AUTHOR_IDENT`, not `git config user.email`: the environment | ||
| // (GIT_AUTHOR_EMAIL) overrides config when git actually authors a commit. | ||
| // Recording the config value would publish one identity while committing | ||
| // under another, and every legitimate message would fail verification. | ||
| const ident = await ctx.runner.tryText(["var", "GIT_AUTHOR_IDENT"], { | ||
| cwd: ctx.recordWorktree, | ||
| }); | ||
| if (ident === null) | ||
| return null; | ||
| const match = /^(.*?)\s*<([^>]+)>/.exec(ident); | ||
| if (match === null) | ||
| return null; | ||
| return { name: match[1] ?? "", email: match[2] ?? "" }; | ||
| } | ||
| /** SSH key used for `authenticity: signed`, or null when none is configured. */ | ||
| export async function signingKeyPath(ctx) { | ||
| const configured = await ctx.runner.tryText(["config", "user.signingkey"], { | ||
| cwd: ctx.recordWorktree, | ||
| }); | ||
| if (configured !== null && configured !== "" && (await exists(configured))) | ||
| return configured; | ||
| const { homedir } = await import("node:os"); | ||
| for (const name of ["id_ed25519", "id_ecdsa", "id_rsa"]) { | ||
| const candidate = join(homedir(), ".ssh", name); | ||
| if (await exists(candidate)) | ||
| return candidate; | ||
| } | ||
| return null; | ||
| } | ||
| /** The network manifest from `main`, which carries the authenticity mode. */ | ||
| export async function readManifest(ctx) { | ||
| const path = join(ctx.recordWorktree, ".komnet/net.yaml"); | ||
| if (!(await exists(path))) | ||
| return null; | ||
| try { | ||
| return parseNetManifest(await readFile(path, "utf8")); | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| } | ||
| export async function authenticityMode(ctx) { | ||
| // Absent or unreadable manifest → the documented default, not "none". | ||
| return (await readManifest(ctx))?.authenticity ?? "git"; | ||
| } | ||
| //# sourceMappingURL=authenticity.js.map |
| {"version":3,"file":"authenticity.js","sourceRoot":"","sources":["../../src/network/authenticity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAA2C,MAAM,WAAW,CAAC;AAUtF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAwB;IAExB,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE;QAClE,GAAG,EAAE,GAAG,CAAC,cAAc;KACxB,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAwB;IAC3D,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE;QACzE,GAAG,EAAE,GAAG,CAAC,cAAc;KACxB,CAAC,CAAC;IACH,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAwB;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAwB;IAC7D,sEAAsE;IACtE,OAAO,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,IAAI,KAAK,CAAC;AAC1D,CAAC"} |
| /** | ||
| * Advisory resource leases, as the network performs them. | ||
| * | ||
| * The reduction lives in `../room/claims.ts` and is pure; this is the half that | ||
| * has to touch the transport — look before writing, write, then look again. | ||
| */ | ||
| import { type Message } from "@komnet/protocol"; | ||
| import { type ClaimStatus } from "../room/claims.ts"; | ||
| import type { SendInput } from "../network.ts"; | ||
| /** | ||
| * What claiming needs from the network, and nothing more. | ||
| * | ||
| * Spelled out rather than taking `Network` whole: this is the list a reader has | ||
| * to hold in their head to follow the code below, and keeping it explicit means | ||
| * a new dependency has to be added on purpose instead of appearing through | ||
| * `this`. | ||
| */ | ||
| export interface ClaimsContext { | ||
| readonly agentId: string; | ||
| assertSubscribed(roomId: string, verb: string): void; | ||
| sync(): Promise<unknown>; | ||
| send(roomId: string, input: SendInput): Promise<Message>; | ||
| read(roomId: string): Promise<Message[]>; | ||
| } | ||
| /** | ||
| * Current holder of every claimed resource in a room, expiry included. | ||
| * | ||
| * Syncs first, unlike every other read. The others tolerate a stale cache and | ||
| * now say so; a lock cannot, because the dangerous direction is reporting a | ||
| * resource FREE while a peer holds it — which is exactly how two agents end up | ||
| * running the same build. Correctness is worth the round trip here. | ||
| */ | ||
| export declare function listClaims(ctx: ClaimsContext, roomId: string, options?: { | ||
| sync?: boolean; | ||
| }): Promise<ClaimStatus[]>; | ||
| export declare function claimResource(ctx: ClaimsContext, roomId: string, resource: string, options?: { | ||
| ttlSeconds?: number; | ||
| note?: string; | ||
| }): Promise<{ | ||
| granted: boolean; | ||
| status: ClaimStatus | null; | ||
| }>; | ||
| /** Release a resource this agent holds. Releasing something you do not hold is a no-op. */ | ||
| export declare function releaseResource(ctx: ClaimsContext, roomId: string, resource: string, note?: string): Promise<boolean>; | ||
| //# sourceMappingURL=claims.d.ts.map |
| {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/network/claims.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAqC,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAA+B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,CAIxB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAiC3D;AAED,2FAA2F;AAC3F,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAoBlB"} |
| /** | ||
| * Advisory resource leases, as the network performs them. | ||
| * | ||
| * The reduction lives in `../room/claims.ts` and is pure; this is the half that | ||
| * has to touch the transport — look before writing, write, then look again. | ||
| */ | ||
| import { createClaim, isResourceName, ulid } from "@komnet/protocol"; | ||
| import { currentHolder, reduceClaims } from "../room/claims.js"; | ||
| /** | ||
| * Current holder of every claimed resource in a room, expiry included. | ||
| * | ||
| * Syncs first, unlike every other read. The others tolerate a stale cache and | ||
| * now say so; a lock cannot, because the dangerous direction is reporting a | ||
| * resource FREE while a peer holds it — which is exactly how two agents end up | ||
| * running the same build. Correctness is worth the round trip here. | ||
| */ | ||
| export async function listClaims(ctx, roomId, options = {}) { | ||
| ctx.assertSubscribed(roomId, "list claims in"); | ||
| if (options.sync !== false) | ||
| await ctx.sync().catch(() => undefined); | ||
| return reduceClaims(await ctx.read(roomId)); | ||
| } | ||
| export async function claimResource(ctx, roomId, resource, options = {}) { | ||
| ctx.assertSubscribed(roomId, "claim a resource in"); | ||
| if (!isResourceName(resource)) { | ||
| throw new TypeError(`not a usable resource name: ${JSON.stringify(resource)} — use [a-z0-9._:/-], e.g. core/social/graph`); | ||
| } | ||
| // Look before leaping: if someone already holds it, do not write at all. | ||
| await ctx.sync().catch(() => undefined); | ||
| const before = currentHolder(await listClaims(ctx, roomId, { sync: false }), resource); | ||
| if (before !== null && before.holder !== ctx.agentId) { | ||
| return { granted: false, status: before }; | ||
| } | ||
| const claim = createClaim({ | ||
| id: ulid(), | ||
| resource, | ||
| holder: ctx.agentId, | ||
| ...(options.ttlSeconds === undefined ? {} : { ttlSeconds: options.ttlSeconds }), | ||
| }); | ||
| await ctx.send(roomId, { | ||
| body: options.note ?? `holding ${resource}`, | ||
| kind: "status", | ||
| needs: "none", | ||
| tags: ["claim", `claim:${resource}`], | ||
| claim, | ||
| }); | ||
| // Re-read AFTER writing: a peer may have claimed in the same window. | ||
| await ctx.sync().catch(() => undefined); | ||
| const after = currentHolder(await listClaims(ctx, roomId, { sync: false }), resource); | ||
| return { granted: after !== null && after.holder === ctx.agentId, status: after }; | ||
| } | ||
| /** Release a resource this agent holds. Releasing something you do not hold is a no-op. */ | ||
| export async function releaseResource(ctx, roomId, resource, note) { | ||
| ctx.assertSubscribed(roomId, "release a resource in"); | ||
| const held = currentHolder(await listClaims(ctx, roomId, { sync: false }), resource); | ||
| if (held === null || held.holder !== ctx.agentId) | ||
| return false; | ||
| await ctx.send(roomId, { | ||
| body: note ?? `released ${resource}`, | ||
| kind: "status", | ||
| needs: "none", | ||
| tags: ["claim", `claim:${resource}`], | ||
| // A release carries the default TTL because the field is required on the | ||
| // wire; the reducer ignores it for `released` events. | ||
| claim: createClaim({ | ||
| id: ulid(), | ||
| resource, | ||
| holder: ctx.agentId, | ||
| action: "released", | ||
| }), | ||
| }); | ||
| return true; | ||
| } | ||
| //# sourceMappingURL=claims.js.map |
| {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/network/claims.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * The local inbox: what was addressed to this agent, and what it has looked at. | ||
| * | ||
| * Shares a section with the outbox in `network.ts` and shares nothing else with | ||
| * it — this touches the state database and no git at all. | ||
| */ | ||
| import type { InboxItem, InboxQuery, StateDb } from "../state.ts"; | ||
| /** What the inbox needs from the network, and nothing more. */ | ||
| export interface InboxContext { | ||
| readonly state: StateDb; | ||
| assertSubscribed(roomId: string, verb: string): void; | ||
| } | ||
| /** | ||
| * Remember what this agent has actually looked at, per room. | ||
| * | ||
| * Read receipts used to be derived from *drained* items, which made "read" mean | ||
| * "processed and finished with" — so a peer asking "did they see it?" got "no" | ||
| * about a message the agent had read and was still working on. Being returned | ||
| * from the inbox is the moment it was read; completing it is a different fact, | ||
| * and `processedAt` still carries that one. | ||
| * | ||
| * A high-water mark in `meta` rather than a column: ULIDs sort, so one string | ||
| * per room answers it, and no schema bump discards anyone's history. | ||
| */ | ||
| export declare function recordSeen(ctx: InboxContext, items: readonly InboxItem[]): void; | ||
| export declare function inbox(ctx: InboxContext, query?: InboxQuery): InboxItem[]; | ||
| /** | ||
| * Mark items processed. `needs: human` items are refused — only an answer | ||
| * recorded through the human-relay path clears those. | ||
| */ | ||
| export declare function drainInbox(ctx: InboxContext, ids: readonly string[]): { | ||
| drained: number; | ||
| refused: string[]; | ||
| }; | ||
| //# sourceMappingURL=inbox.d.ts.map |
| {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/network/inbox.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAElE,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAW/E;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,GAAE,UAAe,GAAG,SAAS,EAAE,CAK5E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAMxC"} |
| /** | ||
| * The local inbox: what was addressed to this agent, and what it has looked at. | ||
| * | ||
| * Shares a section with the outbox in `network.ts` and shares nothing else with | ||
| * it — this touches the state database and no git at all. | ||
| */ | ||
| /** | ||
| * Remember what this agent has actually looked at, per room. | ||
| * | ||
| * Read receipts used to be derived from *drained* items, which made "read" mean | ||
| * "processed and finished with" — so a peer asking "did they see it?" got "no" | ||
| * about a message the agent had read and was still working on. Being returned | ||
| * from the inbox is the moment it was read; completing it is a different fact, | ||
| * and `processedAt` still carries that one. | ||
| * | ||
| * A high-water mark in `meta` rather than a column: ULIDs sort, so one string | ||
| * per room answers it, and no schema bump discards anyone's history. | ||
| */ | ||
| export function recordSeen(ctx, items) { | ||
| const highest = new Map(); | ||
| for (const item of items) { | ||
| const current = highest.get(item.room); | ||
| if (current === undefined || item.id > current) | ||
| highest.set(item.room, item.id); | ||
| } | ||
| for (const [room, id] of highest) { | ||
| const key = `seenThrough:${room}`; | ||
| const previous = ctx.state.getMeta(key); | ||
| if (previous === null || id > previous) | ||
| ctx.state.setMeta(key, id); | ||
| } | ||
| } | ||
| export function inbox(ctx, query = {}) { | ||
| if (query.room !== undefined) | ||
| ctx.assertSubscribed(query.room, "read the inbox for"); | ||
| const items = ctx.state.listInbox(query); | ||
| recordSeen(ctx, items); | ||
| return items; | ||
| } | ||
| /** | ||
| * Mark items processed. `needs: human` items are refused — only an answer | ||
| * recorded through the human-relay path clears those. | ||
| */ | ||
| export function drainInbox(ctx, ids) { | ||
| const items = ctx.state.listInbox({ includeProcessed: true }); | ||
| const byId = new Map(items.map((i) => [i.id, i])); | ||
| const refused = ids.filter((id) => byId.get(id)?.needs === "human"); | ||
| const drained = ctx.state.markProcessed(ids.filter((id) => !refused.includes(id))); | ||
| return { drained, refused }; | ||
| } | ||
| //# sourceMappingURL=inbox.js.map |
| {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/network/inbox.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,GAAiB,EAAE,KAA2B;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,GAAG,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,eAAe,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,IAAI,IAAI,EAAE,GAAG,QAAQ;YAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAiB,EAAE,KAAK,GAAe,EAAE;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,GAAiB,EACjB,GAAsB;IAEtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC"} |
| /** | ||
| * What this machine has committed but not yet pushed. | ||
| * | ||
| * Derived from git rather than a queue file: a committed message is already | ||
| * durable, so git IS the outbox and cannot drift out of sync with itself. | ||
| * | ||
| * Notably this context calls nothing back into the network — it is git, the | ||
| * layout and the state database, which is why it extracts cleanly. | ||
| */ | ||
| import type { Layout } from "../layout.ts"; | ||
| import type { OutboxEntry } from "../network.ts"; | ||
| import type { Repo } from "../git/repo.ts"; | ||
| import type { StateDb } from "../state.ts"; | ||
| /** What the outbox needs from the network, and nothing more. */ | ||
| export interface OutboxContext { | ||
| readonly networkId: string; | ||
| readonly layout: Layout; | ||
| readonly repo: Repo; | ||
| readonly state: StateDb; | ||
| /** Read live: a long-lived process picks up joins and leaves. */ | ||
| readonly subscriptions: readonly string[]; | ||
| readonly remote: string; | ||
| readonly recordWorktree: string; | ||
| } | ||
| /** Rooms holding local commits the remote has not seen. */ | ||
| export declare function outbox(ctx: OutboxContext): Promise<OutboxEntry[]>; | ||
| /** | ||
| * Push anything queued while offline. Ordering is preserved automatically — | ||
| * they are consecutive commits on the room branch. | ||
| */ | ||
| export declare function drainOutbox(ctx: OutboxContext): Promise<{ | ||
| roomId: string; | ||
| pushed: number; | ||
| }[]>; | ||
| /** | ||
| * Agent-card, profile, and room-policy commits can also be left local by an | ||
| * outage or a contended `main` push. Keep that record branch convergent just | ||
| * like room outboxes, without pretending an advisory presence write is a | ||
| * message. | ||
| */ | ||
| export declare function drainRecordOutbox(ctx: OutboxContext): Promise<void>; | ||
| //# sourceMappingURL=outbox.d.ts.map |
| {"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../src/network/outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,2DAA2D;AAC3D,wBAAsB,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBvE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAsB/C;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzE"} |
| /** | ||
| * What this machine has committed but not yet pushed. | ||
| * | ||
| * Derived from git rather than a queue file: a committed message is already | ||
| * durable, so git IS the outbox and cannot drift out of sync with itself. | ||
| * | ||
| * Notably this context calls nothing back into the network — it is git, the | ||
| * layout and the state database, which is why it extracts cleanly. | ||
| */ | ||
| import { MAIN_REF, roomRef } from "@komnet/protocol"; | ||
| import { exists } from "../fs.js"; | ||
| const REMOTE = "origin"; | ||
| /** Rooms holding local commits the remote has not seen. */ | ||
| export async function outbox(ctx) { | ||
| const pending = []; | ||
| const meta = (key) => { | ||
| const value = ctx.state.getMeta(key); | ||
| return value === null || value === "" ? null : value; | ||
| }; | ||
| for (const roomId of ctx.subscriptions) { | ||
| const worktree = ctx.layout.roomWorktree(ctx.networkId, roomId); | ||
| if (!(await exists(worktree))) | ||
| continue; | ||
| const ahead = await ctx.repo.aheadCount(worktree, `refs/remotes/${REMOTE}/${roomRef(roomId)}`); | ||
| if (ahead > 0) { | ||
| pending.push({ | ||
| roomId, | ||
| ahead, | ||
| since: meta(`queuedSince:${roomId}`), | ||
| // Why it is still here, in the terms the user's own git printed — | ||
| // without the flag soup komnet passed to get there. | ||
| reason: meta(`queuedReason:${roomId}`), | ||
| }); | ||
| } | ||
| } | ||
| return pending; | ||
| } | ||
| /** | ||
| * Push anything queued while offline. Ordering is preserved automatically — | ||
| * they are consecutive commits on the room branch. | ||
| */ | ||
| export async function drainOutbox(ctx) { | ||
| const drained = []; | ||
| for (const { roomId, ahead } of await outbox(ctx)) { | ||
| const worktree = ctx.layout.roomWorktree(ctx.networkId, roomId); | ||
| try { | ||
| await ctx.repo.pushWithRetry(worktree, roomRef(roomId), { remote: REMOTE }); | ||
| // Refresh the remote-tracking ref. `ahead` is measured against it, and an | ||
| // explicit `push <branch>:<branch>` does not reliably move it — so | ||
| // without this the same commits look queued forever and get re-pushed on | ||
| // every sync. | ||
| await ctx.repo | ||
| .fetch(ctx.remote, [ | ||
| `+refs/heads/${roomRef(roomId)}:refs/remotes/${REMOTE}/${roomRef(roomId)}`, | ||
| ]) | ||
| .catch(() => undefined); | ||
| ctx.state.setMeta(`queuedSince:${roomId}`, ""); | ||
| drained.push({ roomId, pushed: ahead }); | ||
| } | ||
| catch { | ||
| // Still unreachable. Leave it queued; the next sync tries again. | ||
| } | ||
| } | ||
| return drained; | ||
| } | ||
| /** | ||
| * Agent-card, profile, and room-policy commits can also be left local by an | ||
| * outage or a contended `main` push. Keep that record branch convergent just | ||
| * like room outboxes, without pretending an advisory presence write is a | ||
| * message. | ||
| */ | ||
| export async function drainRecordOutbox(ctx) { | ||
| const trackedMain = `refs/remotes/${REMOTE}/${MAIN_REF}`; | ||
| const ahead = await ctx.repo.aheadCount(ctx.recordWorktree, trackedMain); | ||
| if (ahead === 0) | ||
| return; | ||
| try { | ||
| await ctx.repo.pushWithRetry(ctx.recordWorktree, MAIN_REF, { | ||
| remote: REMOTE, | ||
| maxAttempts: 3, | ||
| backoffBaseMs: 100, | ||
| backoffCapMs: 1_000, | ||
| }); | ||
| await ctx.repo.fetch(ctx.remote, [`+refs/heads/${MAIN_REF}:${trackedMain}`]); | ||
| } | ||
| catch { | ||
| // Still unreachable or contended. The commits remain durable and the next | ||
| // adaptive sync retries; room delivery can continue independently. | ||
| } | ||
| } | ||
| //# sourceMappingURL=outbox.js.map |
| {"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/network/outbox.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Reading a room: the live window, the history behind it, and search across both. | ||
| * | ||
| * The three differ in what they are allowed to cost. `read` touches a | ||
| * materialised worktree, `history` walks git, and `search` deliberately refuses | ||
| * to walk git at all — the reasoning is on each function. | ||
| */ | ||
| import { type Message } from "@komnet/protocol"; | ||
| import type { Layout } from "../layout.ts"; | ||
| import type { Repo } from "../git/repo.ts"; | ||
| /** What reading needs from the network, and nothing more. */ | ||
| export interface ReadingContext { | ||
| readonly networkId: string; | ||
| readonly layout: Layout; | ||
| readonly repo: Repo; | ||
| /** Read live, not snapshotted: a long-lived process picks up joins and leaves. */ | ||
| readonly subscriptions: readonly string[]; | ||
| assertSubscribed(roomId: string, verb: string): void; | ||
| ensureRoomWorktree(roomId: string): Promise<string>; | ||
| } | ||
| export declare function read(ctx: ReadingContext, roomId: string, options?: { | ||
| limit?: number; | ||
| thread?: string; | ||
| }): Promise<Message[]>; | ||
| /** | ||
| * Read past the live window, via git history. | ||
| * | ||
| * Sealing removes old messages from the tree but never from history, so this is | ||
| * what makes "pruning is not data loss" true in practice rather than only in | ||
| * principle (docs/design/06-retention-and-sealing.md §1). | ||
| */ | ||
| export declare function history(ctx: ReadingContext, roomId: string, options?: { | ||
| since?: string; | ||
| limit?: number; | ||
| }): Promise<Message[]>; | ||
| /** | ||
| * Substring search across the live window of subscribed rooms. | ||
| * | ||
| * Deliberately scoped to the tree, not history: an all-time search means | ||
| * fetching every blob, which under a partial clone is exactly the expensive | ||
| * operation the design avoids. `history` is the explicit way to go deeper. | ||
| */ | ||
| export declare function search(ctx: ReadingContext, query: string, options?: { | ||
| room?: string; | ||
| limit?: number; | ||
| }): Promise<{ | ||
| room: string; | ||
| message: Message; | ||
| }[]>; | ||
| //# sourceMappingURL=reading.d.ts.map |
| {"version":3,"file":"reading.d.ts","sourceRoot":"","sources":["../../src/network/reading.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAqD,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAInG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,kFAAkF;IAClF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrD;AAED,wBAAsB,IAAI,CACxB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,OAAO,EAAE,CAAC,CAapB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC,OAAO,EAAE,CAAC,CAyBpB;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,CAgB/C"} |
| /** | ||
| * Reading a room: the live window, the history behind it, and search across both. | ||
| * | ||
| * The three differ in what they are allowed to cost. `read` touches a | ||
| * materialised worktree, `history` walks git, and `search` deliberately refuses | ||
| * to walk git at all — the reasoning is on each function. | ||
| */ | ||
| import { isMessagePath, parseMessage, roomRef, threadOrder } from "@komnet/protocol"; | ||
| import { exists } from "../fs.js"; | ||
| import { RoomStore } from "../room/store.js"; | ||
| export async function read(ctx, roomId, options = {}) { | ||
| ctx.assertSubscribed(roomId, "read"); | ||
| const worktree = await ctx.ensureRoomWorktree(roomId); | ||
| const store = new RoomStore(worktree, roomId); | ||
| let messages = await store.readAll(() => undefined); | ||
| if (options.thread !== undefined) { | ||
| messages = messages.filter((m) => m.header.thread === options.thread); | ||
| } | ||
| messages = threadOrder(messages); | ||
| if (options.limit !== undefined && messages.length > options.limit) { | ||
| messages = messages.slice(-options.limit); | ||
| } | ||
| return messages; | ||
| } | ||
| /** | ||
| * Read past the live window, via git history. | ||
| * | ||
| * Sealing removes old messages from the tree but never from history, so this is | ||
| * what makes "pruning is not data loss" true in practice rather than only in | ||
| * principle (docs/design/06-retention-and-sealing.md §1). | ||
| */ | ||
| export async function history(ctx, roomId, options = {}) { | ||
| ctx.assertSubscribed(roomId, "read the history of"); | ||
| await ctx.ensureRoomWorktree(roomId); | ||
| const ref = `refs/heads/${roomRef(roomId)}`; | ||
| const entries = await ctx.repo.logAddedPaths(ref, `rooms/${roomId}/msg/`, options.since === undefined ? {} : { since: options.since }); | ||
| const messages = []; | ||
| const seen = new Set(); | ||
| for (const { commit, path } of entries) { | ||
| if (!isMessagePath(path) || seen.has(path)) | ||
| continue; | ||
| seen.add(path); | ||
| const raw = await ctx.repo.readFile(commit, path); | ||
| if (raw === null) | ||
| continue; | ||
| try { | ||
| messages.push(parseMessage(raw, path)); | ||
| } | ||
| catch { | ||
| // One unreadable historical message must not sink the whole query. | ||
| } | ||
| } | ||
| const ordered = threadOrder(messages); | ||
| return options.limit === undefined ? ordered : ordered.slice(-options.limit); | ||
| } | ||
| /** | ||
| * Substring search across the live window of subscribed rooms. | ||
| * | ||
| * Deliberately scoped to the tree, not history: an all-time search means | ||
| * fetching every blob, which under a partial clone is exactly the expensive | ||
| * operation the design avoids. `history` is the explicit way to go deeper. | ||
| */ | ||
| export async function search(ctx, query, options = {}) { | ||
| if (options.room !== undefined) | ||
| ctx.assertSubscribed(options.room, "search"); | ||
| const needle = query.toLowerCase(); | ||
| const rooms = options.room === undefined ? ctx.subscriptions : [options.room]; | ||
| const hits = []; | ||
| for (const roomId of rooms) { | ||
| const worktree = ctx.layout.roomWorktree(ctx.networkId, roomId); | ||
| if (!(await exists(worktree))) | ||
| continue; | ||
| const messages = await new RoomStore(worktree, roomId).readAll(() => undefined); | ||
| for (const message of messages) { | ||
| if (message.body.toLowerCase().includes(needle)) | ||
| hits.push({ room: roomId, message }); | ||
| } | ||
| } | ||
| hits.sort((a, b) => (a.message.header.id < b.message.header.id ? 1 : -1)); | ||
| return options.limit === undefined ? hits : hits.slice(0, options.limit); | ||
| } | ||
| //# sourceMappingURL=reading.js.map |
| {"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/network/reading.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Delegated repository reviews, as the network performs them. | ||
| * | ||
| * The lifecycle rules are in `@komnet/protocol` and the reduction in | ||
| * `../review/tasks.ts`; this is the part that reads a room, decides who to | ||
| * address, and writes the transition. | ||
| */ | ||
| import { type Message } from "@komnet/protocol"; | ||
| import { type ReviewTaskStatus } from "../review/tasks.ts"; | ||
| import type { ApprovalKind } from "../approvals.ts"; | ||
| import type { ReviewRequestInput, ReviewUpdateInput, SendInput } from "../network.ts"; | ||
| /** What review orchestration needs from the network, and nothing more. */ | ||
| export interface ReviewsContext { | ||
| readonly agentId: string; | ||
| send(roomId: string, input: SendInput): Promise<Message>; | ||
| read(roomId: string): Promise<Message[]>; | ||
| requireApproval(kind: ApprovalKind, roomId: string, id: string, requester: string): Promise<void>; | ||
| } | ||
| /** Create a targeted agent-to-agent repository review task. */ | ||
| export declare function requestReview(ctx: ReviewsContext, roomId: string, input: ReviewRequestInput): Promise<Message>; | ||
| /** Current valid state of every review task in a room. */ | ||
| export declare function listReviewTasks(ctx: ReviewsContext, roomId: string): Promise<ReviewTaskStatus[]>; | ||
| /** Append one guarded state transition to an existing review task. */ | ||
| export declare function updateReview(ctx: ReviewsContext, roomId: string, reviewId: string, input: ReviewUpdateInput): Promise<Message>; | ||
| //# sourceMappingURL=reviews.d.ts.map |
| {"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/network/reviews.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAIL,KAAK,OAAO,EAIb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtF,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnG;AAqCD,+DAA+D;AAC/D,wBAAsB,aAAa,CACjC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,0DAA0D;AAC1D,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE7B;AAED,sEAAsE;AACtE,wBAAsB,YAAY,CAChC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,OAAO,CAAC,CAyBlB"} |
| /** | ||
| * Delegated repository reviews, as the network performs them. | ||
| * | ||
| * The lifecycle rules are in `@komnet/protocol` and the reduction in | ||
| * `../review/tasks.ts`; this is the part that reads a room, decides who to | ||
| * address, and writes the transition. | ||
| */ | ||
| import { assertReviewTransition, createReviewTask, ulid, } from "@komnet/protocol"; | ||
| import { reduceReviewTasks } from "../review/tasks.js"; | ||
| /** Who must act next, derived from the state rather than declared by the author. */ | ||
| function reviewNeeds(state) { | ||
| if (state === "needs_human") | ||
| return "human"; | ||
| if (state === "requested" || | ||
| state === "reported" || | ||
| state === "discussing" || | ||
| state === "blocked") | ||
| return "agent"; | ||
| return "none"; | ||
| } | ||
| /** Who a transition should address, given who wrote it. */ | ||
| function reviewMentions(review, author) { | ||
| switch (review.state) { | ||
| case "requested": | ||
| return [review.reviewer]; | ||
| case "discussing": | ||
| return [author === review.requester ? review.reviewer : review.requester]; | ||
| case "reported": | ||
| case "blocked": | ||
| case "needs_human": | ||
| return [review.requester]; | ||
| case "cancelled": | ||
| case "expired": | ||
| return [review.reviewer]; | ||
| case "claimed": | ||
| case "reviewing": | ||
| return []; | ||
| case "completed": | ||
| return [review.reviewer]; | ||
| } | ||
| } | ||
| /** Create a targeted agent-to-agent repository review task. */ | ||
| export async function requestReview(ctx, roomId, input) { | ||
| const review = createReviewTask({ | ||
| id: ulid(), | ||
| requester: ctx.agentId, | ||
| reviewer: input.reviewer, | ||
| repo: input.repo, | ||
| baseRev: input.baseRev, | ||
| headRev: input.headRev, | ||
| ...(input.scope === undefined ? {} : { scope: input.scope }), | ||
| ...(input.deadline === undefined ? {} : { deadline: input.deadline }), | ||
| }); | ||
| return await ctx.send(roomId, { | ||
| body: input.summary, | ||
| kind: "question", | ||
| needs: "agent", | ||
| mentions: [input.reviewer], | ||
| tags: ["review-task"], | ||
| review, | ||
| }); | ||
| } | ||
| /** Current valid state of every review task in a room. */ | ||
| export async function listReviewTasks(ctx, roomId) { | ||
| return reduceReviewTasks(await ctx.read(roomId)); | ||
| } | ||
| /** Append one guarded state transition to an existing review task. */ | ||
| export async function updateReview(ctx, roomId, reviewId, input) { | ||
| const status = (await listReviewTasks(ctx, roomId)).find((candidate) => candidate.review.id === reviewId); | ||
| if (status === undefined) | ||
| throw new Error(`no review task ${reviewId} in room ${roomId}`); | ||
| if (input.state === "claimed") { | ||
| await ctx.requireApproval("review", roomId, reviewId, status.review.requester); | ||
| } | ||
| const review = { ...status.review, state: input.state }; | ||
| assertReviewTransition(status.review, review, ctx.agentId); | ||
| const mentions = reviewMentions(review, ctx.agentId); | ||
| return await ctx.send(roomId, { | ||
| body: input.body, | ||
| ...(input.refs === undefined ? {} : { refs: input.refs }), | ||
| kind: "status", | ||
| needs: reviewNeeds(review.state), | ||
| ...(mentions.length === 0 ? {} : { mentions }), | ||
| tags: ["review-task", `review-state:${review.state}`], | ||
| inReplyTo: status.currentMessageId, | ||
| thread: status.thread, | ||
| review, | ||
| }); | ||
| } | ||
| //# sourceMappingURL=reviews.js.map |
| {"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../src/network/reviews.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,IAAI,GAKL,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAyB,MAAM,oBAAoB,CAAC;AAY9E,oFAAoF;AACpF,SAAS,WAAW,CAAC,KAAsB;IACzC,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,OAAO,CAAC;IAC5C,IACE,KAAK,KAAK,WAAW;QACrB,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,YAAY;QACtB,KAAK,KAAK,SAAS;QAEnB,OAAO,OAAO,CAAC;IACjB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2DAA2D;AAC3D,SAAS,cAAc,CAAC,MAAkB,EAAE,MAAc;IACxD,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5E,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,aAAa;YAChB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5B,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,EAAE,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAmB,EACnB,MAAc,EACd,KAAyB;IAEzB,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,EAAE,EAAE,IAAI,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;KACtE,CAAC,CAAC;IACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1B,IAAI,EAAE,CAAC,aAAa,CAAC;QACrB,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,MAAc;IAEd,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,KAAwB;IAExB,MAAM,MAAM,GAAG,CAAC,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CACtD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAChD,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,YAAY,MAAM,EAAE,CAAC,CAAC;IAE1F,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACpE,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC9C,IAAI,EAAE,CAAC,aAAa,EAAE,gBAAgB,MAAM,CAAC,KAAK,EAAE,CAAC;QACrD,SAAS,EAAE,MAAM,CAAC,gBAAgB;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM;KACP,CAAC,CAAC;AACL,CAAC"} |
| /** | ||
| * Compaction, as the network performs it. | ||
| * | ||
| * The transaction itself is `../seal/sealer.ts`; this decides whether a room is | ||
| * due, holds the lock while it runs, and repairs the local cursor afterwards. | ||
| */ | ||
| import { type SealDecision, type SealResult } from "../seal/sealer.ts"; | ||
| import type { Layout } from "../layout.ts"; | ||
| import type { Repo } from "../git/repo.ts"; | ||
| import type { RoomConfig } from "../room/config.ts"; | ||
| import type { StateDb } from "../state.ts"; | ||
| /** | ||
| * What sealing needs from the network. | ||
| * | ||
| * Wider than the domains extracted before it, but almost all of it is data the | ||
| * `Sealer` is constructed from. The number worth watching is the behavioural | ||
| * dependency — here exactly one, `readRoomConfig` — because that is what | ||
| * couples a domain to the rest of the object rather than to its own inputs. | ||
| */ | ||
| export interface SealingContext { | ||
| readonly networkId: string; | ||
| readonly agentId: string; | ||
| readonly remote: string; | ||
| /** Read live: a long-lived process picks up joins and leaves. */ | ||
| readonly subscriptions: readonly string[]; | ||
| readonly layout: Layout; | ||
| readonly repo: Repo; | ||
| readonly state: StateDb; | ||
| readonly lockPath: string; | ||
| readRoomConfig(roomId: string): Promise<RoomConfig | null>; | ||
| } | ||
| /** What sealing this room would do, without touching anything. */ | ||
| export declare function sealDecision(ctx: SealingContext, roomId: string): Promise<SealDecision>; | ||
| /** | ||
| * Compact a room: merge its live branch into `main`, write a digest, promote | ||
| * decisions, then prune the sealed messages out of both trees. | ||
| */ | ||
| export declare function seal(ctx: SealingContext, roomId: string): Promise<SealResult>; | ||
| /** Rooms whose live window has outgrown their retention policy. */ | ||
| export declare function roomsNeedingSeal(ctx: SealingContext): Promise<SealDecision[]>; | ||
| //# sourceMappingURL=sealing.d.ts.map |
| {"version":3,"file":"sealing.d.ts","sourceRoot":"","sources":["../../src/network/sealing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC5D;AAwBD,kEAAkE;AAClE,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAE7F;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBnF;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBnF"} |
| /** | ||
| * Compaction, as the network performs it. | ||
| * | ||
| * The transaction itself is `../seal/sealer.ts`; this decides whether a room is | ||
| * due, holds the lock while it runs, and repairs the local cursor afterwards. | ||
| */ | ||
| import { roomRef } from "@komnet/protocol"; | ||
| import { FileLock } from "../lock.js"; | ||
| import { DEFAULT_SEAL_POLICY, Sealer, } from "../seal/sealer.js"; | ||
| function sealer(ctx) { | ||
| return new Sealer({ | ||
| repo: ctx.repo, | ||
| layout: ctx.layout, | ||
| networkId: ctx.networkId, | ||
| agentId: ctx.agentId, | ||
| remote: ctx.remote, | ||
| }); | ||
| } | ||
| /** Retention policy for a room, from its config, falling back to the default. */ | ||
| async function sealPolicy(ctx, roomId) { | ||
| const room = await ctx.readRoomConfig(roomId); | ||
| if (room === null) | ||
| return DEFAULT_SEAL_POLICY; | ||
| return { | ||
| ...DEFAULT_SEAL_POLICY, | ||
| windowDays: room.retention.windowDays, | ||
| windowMessages: room.retention.windowMessages, | ||
| minIntervalHours: room.retention.sealMinIntervalHours, | ||
| }; | ||
| } | ||
| /** What sealing this room would do, without touching anything. */ | ||
| export async function sealDecision(ctx, roomId) { | ||
| return await sealer(ctx).decide(roomId, await sealPolicy(ctx, roomId)); | ||
| } | ||
| /** | ||
| * Compact a room: merge its live branch into `main`, write a digest, promote | ||
| * decisions, then prune the sealed messages out of both trees. | ||
| */ | ||
| export async function seal(ctx, roomId) { | ||
| const policy = await sealPolicy(ctx, roomId); | ||
| return await FileLock.withLock(ctx.lockPath, async () => { | ||
| const result = await sealer(ctx).seal(roomId, policy); | ||
| if (result.sealed > 0) { | ||
| // The room worktree just lost files; the local cursor must not claim to | ||
| // have processed a head that no longer exists. | ||
| const head = await ctx.repo.resolveRef(`refs/heads/${roomRef(roomId)}`); | ||
| if (head !== null) | ||
| ctx.state.setHead(roomId, head); | ||
| ctx.state.setMeta(`lastSealAt:${roomId}`, new Date().toISOString()); | ||
| } | ||
| return result; | ||
| }, | ||
| // Sealing pushes several times; the default lock timeout is too short. | ||
| { timeoutMs: 10 * 60_000 }); | ||
| } | ||
| /** Rooms whose live window has outgrown their retention policy. */ | ||
| export async function roomsNeedingSeal(ctx) { | ||
| const due = []; | ||
| for (const roomId of ctx.subscriptions) { | ||
| const policy = await sealPolicy(ctx, roomId); | ||
| const pending = await sealer(ctx).hasPendingTransaction(roomId); | ||
| const last = ctx.state.getMeta(`lastSealAt:${roomId}`); | ||
| if (!pending && | ||
| last !== null && | ||
| Date.now() - Date.parse(last) < policy.minIntervalHours * 3_600_000) { | ||
| continue; | ||
| } | ||
| const decision = await sealer(ctx).decide(roomId, policy); | ||
| if (decision.shouldSeal) | ||
| due.push(decision); | ||
| } | ||
| return due; | ||
| } | ||
| //# sourceMappingURL=sealing.js.map |
| {"version":3,"file":"sealing.js","sourceRoot":"","sources":["../../src/network/sealing.ts"],"names":[],"mappings":"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"} |
+25
-62
@@ -13,3 +13,3 @@ import { type AuthorKind, type Claim, type Message, type MessageKind, type Needs, type Priority, type ReviewTask, type ReviewTaskState, type Task, type TaskUpdateAction } from "@komnet/protocol"; | ||
| import { type RoomConfig } from "./room/config.ts"; | ||
| import { type ReviewTaskStatus } from "./review/tasks.ts"; | ||
| import type { ReviewTaskStatus } from "./review/tasks.ts"; | ||
| import { type Agenda, type AgendaCounts, type AgendaOptions } from "./task/agenda.ts"; | ||
@@ -19,4 +19,4 @@ import { type TaskDetail, type TaskHealth, type TaskStatus } from "./task/tasks.ts"; | ||
| import { type SecretRule } from "./scanner/secrets.ts"; | ||
| import { type AuthenticityMode, type NetManifest } from "./net.ts"; | ||
| import { type SealDecision, type SealResult } from "./seal/sealer.ts"; | ||
| import type { AuthenticityMode, NetManifest } from "./net.ts"; | ||
| import type { SealDecision, SealResult } from "./seal/sealer.ts"; | ||
| import { StateDb, type InboxItem, type InboxQuery } from "./state.ts"; | ||
@@ -564,2 +564,3 @@ import { type Anomaly, type RoomChange } from "./sync/detector.ts"; | ||
| forecastDelivery(roomId: string, agents: readonly string[]): Promise<DeliveryForecast[]>; | ||
| private get reviewsContext(); | ||
| /** Create a targeted agent-to-agent repository review task. */ | ||
@@ -584,2 +585,10 @@ requestReview(roomId: string, input: ReviewRequestInput): Promise<Message>; | ||
| */ | ||
| /** | ||
| * Everything resource claiming is allowed to reach. | ||
| * | ||
| * Built here rather than handing over `this`, so the domain's dependencies | ||
| * are a list you can read instead of whatever it happens to call through | ||
| * `this` — and so the private guards stay private. | ||
| */ | ||
| private get claimsContext(); | ||
| claimResource(roomId: string, resource: string, options?: { | ||
@@ -595,10 +604,2 @@ ttlSeconds?: number; | ||
| /** Current holder of every claimed resource in a room, expiry included. */ | ||
| /** | ||
| * Current holder of every claimed resource in a room, expiry included. | ||
| * | ||
| * Syncs first, unlike every other read. The others tolerate a stale cache and | ||
| * now say so; a lock cannot, because the dangerous direction is reporting a | ||
| * resource FREE while a peer holds it — which is exactly how two agents end | ||
| * up running the same build. Correctness is worth the round trip here. | ||
| */ | ||
| listClaims(roomId: string, options?: { | ||
@@ -802,2 +803,3 @@ sync?: boolean; | ||
| waitForInbox(options?: WaitForInboxOptions): Promise<WaitForInboxResult>; | ||
| private get readingContext(); | ||
| read(roomId: string, options?: { | ||
@@ -807,9 +809,3 @@ limit?: number; | ||
| }): Promise<Message[]>; | ||
| /** | ||
| * Read past the live window, via git history. | ||
| * | ||
| * Sealing removes old messages from the tree but never from history, so this | ||
| * is what makes "pruning is not data loss" true in practice rather than only | ||
| * in principle (docs/design/06-retention-and-sealing.md §1). | ||
| */ | ||
| /** Read past the live window, via git history. */ | ||
| history(roomId: string, options?: { | ||
@@ -819,9 +815,3 @@ since?: string; | ||
| }): Promise<Message[]>; | ||
| /** | ||
| * Substring search across the live window of subscribed rooms. | ||
| * | ||
| * Deliberately scoped to the tree, not history: an all-time search means | ||
| * fetching every blob, which under a partial clone is exactly the expensive | ||
| * operation the design avoids. `history` is the explicit way to go deeper. | ||
| */ | ||
| /** Substring search across the live window of subscribed rooms. */ | ||
| search(query: string, options?: { | ||
@@ -834,9 +824,6 @@ room?: string; | ||
| }[]>; | ||
| private sealer; | ||
| /** | ||
| * The git identity this machine commits with. | ||
| * | ||
| * Published on the agent card so `authenticity: git` has something to check | ||
| * `from` against — otherwise the mode can only ever report "no binding". | ||
| */ | ||
| private get sealingContext(); | ||
| /** Only git config and the manifest — deliberately not the sealing context. */ | ||
| private get authenticityContext(); | ||
| /** The git identity this machine commits with. */ | ||
| gitIdentity(): Promise<{ | ||
@@ -851,4 +838,2 @@ name: string; | ||
| authenticityMode(): Promise<AuthenticityMode>; | ||
| /** Retention policy for a room, from its config, falling back to the default. */ | ||
| private sealPolicy; | ||
| /** What sealing this room would do, without touching anything. */ | ||
@@ -863,17 +848,7 @@ sealDecision(roomId: string): Promise<SealDecision>; | ||
| roomsNeedingSeal(): Promise<SealDecision[]>; | ||
| private get inboxContext(); | ||
| /** Nothing in common with the inbox but a section heading: git, not the state db. */ | ||
| private get outboxContext(); | ||
| inbox(query?: InboxQuery): InboxItem[]; | ||
| /** | ||
| * Remember what this agent has actually looked at, per room. | ||
| * | ||
| * Read receipts used to be derived from *drained* items, which made "read" | ||
| * mean "processed and finished with" — so a peer asking "did they see it?" | ||
| * got "no" about a message the agent had read and was still working on. Being | ||
| * returned from the inbox is the moment it was read; completing it is a | ||
| * different fact, and `processedAt` still carries that one. | ||
| * | ||
| * A high-water mark in `meta` rather than a column: ULIDs sort, so one string | ||
| * per room answers it, and no schema bump discards anyone's history. | ||
| */ | ||
| private recordSeen; | ||
| /** | ||
| * Mark items processed. `needs: human` items are refused — only an answer | ||
@@ -886,13 +861,5 @@ * recorded through the human-relay path clears those. | ||
| }; | ||
| /** | ||
| * Rooms holding local commits the remote has not seen. | ||
| * | ||
| * Derived from git rather than a queue file: a committed message is already | ||
| * durable, so git IS the outbox and cannot drift out of sync with itself. | ||
| */ | ||
| /** Rooms holding local commits the remote has not seen. */ | ||
| outbox(): Promise<OutboxEntry[]>; | ||
| /** | ||
| * Push anything queued while offline. Ordering is preserved automatically — | ||
| * they are consecutive commits on the room branch. | ||
| */ | ||
| /** Push anything queued while offline. */ | ||
| drainOutbox(): Promise<{ | ||
@@ -902,7 +869,3 @@ roomId: string; | ||
| }[]>; | ||
| /** | ||
| * Agent-card, profile, and room-policy commits can also be left local by an outage or | ||
| * a contended `main` push. Keep that record branch convergent just like room | ||
| * outboxes, without pretending an advisory presence write is a message. | ||
| */ | ||
| /** Keep the record branch convergent, like the room outboxes. */ | ||
| private drainRecordOutbox; | ||
@@ -909,0 +872,0 @@ /** |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "@komnet/core", | ||
| "version": "0.7.2", | ||
| "version": "0.7.3", | ||
| "description": "komnet engine: git transport, room store, collaborative tasks, change detection, outbox, and the secret scanner.", | ||
@@ -23,3 +23,3 @@ "license": "MIT", | ||
| "yaml": "^2.9.0", | ||
| "@komnet/protocol": "0.7.2" | ||
| "@komnet/protocol": "0.7.3" | ||
| }, | ||
@@ -26,0 +26,0 @@ "author": "Andrey Tabakov", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
781567
4.53%163
24.43%10422
4.8%22
15.79%+ Added
- Removed
Updated