@yielded/agent-storage-memory 0.1.0-beta.167 → 0.1.0-beta.169
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/MemoryMessageDeliveryStore.d.mts +7 -3
- package/dist/MemoryMessageDeliveryStore.mjs +427 -64
- package/dist/MemoryMessageDeliveryStore.mjs.map +1 -1
- package/dist/MemoryScheduleStore.mjs +8 -8
- package/dist/MemoryScheduleStore.mjs.map +1 -1
- package/dist/MemorySemanticIndex.mjs +7 -9
- package/dist/MemorySemanticIndex.mjs.map +1 -1
- package/dist/MemorySubmissionLedger.d.mts +7 -4
- package/dist/MemorySubmissionLedger.mjs +761 -377
- package/dist/MemorySubmissionLedger.mjs.map +1 -1
- package/dist/MemorySubscriptionStore.mjs +23 -23
- package/dist/MemorySubscriptionStore.mjs.map +1 -1
- package/dist/MemoryThreadStore.d.mts +8 -4
- package/dist/MemoryThreadStore.mjs +1325 -277
- package/dist/MemoryThreadStore.mjs.map +1 -1
- package/dist/MemoryThreadStoreKernel-DYNDjlhO.d.mts +85 -0
- package/dist/WorkSelection-CmqTuws3.mjs +31 -0
- package/dist/WorkSelection-CmqTuws3.mjs.map +1 -0
- package/package.json +1 -1
- package/src/MemoryMessageDeliveryStore.ts +766 -230
- package/src/MemoryScheduleStore.ts +190 -200
- package/src/MemorySemanticIndex.ts +94 -95
- package/src/MemorySubmissionLedger.ts +1955 -1245
- package/src/MemorySubscriptionStore.ts +1122 -1117
- package/src/MemoryThreadStore.ts +2609 -628
- package/src/internal/MemoryThreadStoreKernel.ts +156 -0
- package/src/internal/WorkSelection.ts +29 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/internal/MemoryThreadStoreKernel.ts
|
|
3
|
+
/** One journal's private mutation boundary, shared with its paired ledger and delivery store. */
|
|
4
|
+
var MemoryThreadStoreKernel = class extends Context.Service()("@effect-agent/storage-memory/internal/MemoryThreadStoreKernel") {};
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region src/internal/WorkSelection.ts
|
|
7
|
+
/** Keep only the lowest distinct metadata keys after a cursor while scanning resident indexes. */
|
|
8
|
+
const boundedWorkSelection = (limit, key, after) => {
|
|
9
|
+
const values = [];
|
|
10
|
+
return {
|
|
11
|
+
values,
|
|
12
|
+
add: (value) => {
|
|
13
|
+
const candidate = key(value);
|
|
14
|
+
if (after !== void 0 && candidate <= after) return;
|
|
15
|
+
let low = 0;
|
|
16
|
+
let high = values.length;
|
|
17
|
+
while (low < high) {
|
|
18
|
+
const middle = Math.floor((low + high) / 2);
|
|
19
|
+
if (key(values[middle]) < candidate) low = middle + 1;
|
|
20
|
+
else high = middle;
|
|
21
|
+
}
|
|
22
|
+
if (low >= limit || low < values.length && key(values[low]) === candidate) return;
|
|
23
|
+
if (values.length === limit) values.pop();
|
|
24
|
+
values.splice(low, 0, value);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { MemoryThreadStoreKernel as n, boundedWorkSelection as t };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=WorkSelection-CmqTuws3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkSelection-CmqTuws3.mjs","names":[],"sources":["../src/internal/MemoryThreadStoreKernel.ts","../src/internal/WorkSelection.ts"],"sourcesContent":["import type { RunId, SubmissionId, ThreadId, ToolCallId } from \"@yielded/agent/identifiers\";\nimport type { IdempotencyKey } from \"@yielded/agent/receipt\";\nimport type { RecordEnvelope, RecordId } from \"@yielded/agent/records\";\nimport type { StorageOwner } from \"@yielded/agent/run-storage\";\nimport type { SubmissionSnapshot, WorkerLedgerState } from \"@yielded/agent/submission-ledger\";\nimport type {\n PreparedImportPage,\n ThreadImportReader,\n ThreadDeliveryImportReader,\n ThreadImportRejected,\n} from \"@yielded/agent/thread-import\";\nimport type {\n AppendResult,\n AppendRequest,\n ThreadStoreFailure,\n ThreadTail,\n ThreadAdmission,\n ThreadStoreError,\n ThreadExportSnapshot,\n} from \"@yielded/agent/thread-store\";\nimport type { TransferFacts, TransferSection } from \"@yielded/agent/thread-transfer\";\nimport type {\n ThreadWorkEntry,\n WorkThreadsRequest,\n WorkThreadsPage,\n} from \"@yielded/agent/thread-work\";\nimport { Context, type Effect, type Stream } from \"effect\";\n\nexport interface PreparedMemoryAppend {\n readonly request: AppendRequest;\n readonly batchJson: string;\n}\n\n/** Private storage, not a whole-Thread preparation value. Publication callbacks never yield. */\nexport interface MemoryLedgerImport {\n readonly reader: Pick<ThreadImportReader[\"Service\"], \"admission\" | \"runOwner\" | \"commands\">;\n readonly stage: (\n page: PreparedImportPage,\n ) => Effect.Effect<void, ThreadImportRejected | ThreadStoreError>;\n readonly prepareCommit: (\n workerSeal?: Pick<WorkerLedgerState, \"terminal\">,\n ) => Effect.Effect<() => void, ThreadImportRejected | ThreadStoreError, ThreadImportReader>;\n}\n\nexport interface MemoryLedgerTransfer {\n readonly snapshot: (threadId: ThreadId) => Effect.Effect<\n Omit<typeof ThreadExportSnapshot.Type, \"deliveries\"> & {\n readonly idle: boolean;\n readonly workerSeal?: Pick<WorkerLedgerState, \"terminal\">;\n },\n ThreadStoreError\n >;\n readonly facts: (\n threadId: ThreadId,\n section: Exclude<TransferSection, \"deliveries\">,\n after: string | undefined,\n ) => Effect.Effect<{ readonly facts: TransferFacts; readonly after: string }, ThreadStoreError>;\n readonly startImport: (\n threadId: ThreadId,\n ) => Effect.Effect<MemoryLedgerImport, ThreadImportRejected | ThreadStoreError>;\n readonly submissions: (threadId: ThreadId) => Stream.Stream<SubmissionSnapshot, ThreadStoreError>;\n readonly admission: (\n threadId: ThreadId,\n submissionId: SubmissionId,\n ) => Effect.Effect<ThreadAdmission | undefined, ThreadStoreError>;\n readonly commands: ThreadImportReader[\"Service\"][\"commands\"];\n}\n\nexport interface MemoryDeliveryImport {\n readonly record: ThreadImportReader[\"Service\"][\"delivery\"];\n readonly stage: (\n page: PreparedImportPage,\n ) => Effect.Effect<void, ThreadImportRejected | ThreadStoreError>;\n readonly has: (messageId: IdempotencyKey) => boolean;\n readonly prepareCommit: () => Effect.Effect<\n () => void,\n ThreadImportRejected | ThreadStoreError,\n ThreadDeliveryImportReader\n >;\n}\n\nexport interface MemoryDeliveryTransfer {\n readonly record: (\n threadId: ThreadId,\n messageId: IdempotencyKey,\n ) => ReturnType<ThreadImportReader[\"Service\"][\"delivery\"]>;\n readonly snapshot: (threadId: ThreadId) => {\n readonly idle: boolean;\n readonly deliveries: number;\n };\n readonly facts: (\n threadId: ThreadId,\n after: string | undefined,\n ) => Effect.Effect<{ readonly facts: TransferFacts; readonly after: string }, ThreadStoreError>;\n readonly startImport: (\n threadId: ThreadId,\n ) => Effect.Effect<MemoryDeliveryImport, ThreadImportRejected | ThreadStoreError>;\n readonly pendingPeerCount: (threadId: ThreadId, limit: number) => number;\n}\n\n/** Native control metadata only; callers already hold the journal's shared gate. */\nexport interface MemoryWorkOwner {\n readonly page: (\n threadId: ThreadId,\n after: string | undefined,\n limit: number,\n ) => Effect.Effect<\n {\n readonly entries: ReadonlyArray<ThreadWorkEntry>;\n readonly after?: string;\n },\n ThreadStoreError\n >;\n readonly threads: (\n request: WorkThreadsRequest,\n ) => Effect.Effect<WorkThreadsPage, ThreadStoreError>;\n}\n\n/** One journal's private mutation boundary, shared with its paired ledger and delivery store. */\nexport class MemoryThreadStoreKernel extends Context.Service<\n MemoryThreadStoreKernel,\n {\n readonly owner: StorageOwner[\"Service\"];\n readonly withMutation: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;\n readonly registerWorkOwner: (\n kind: \"admissions\" | \"deliveries\",\n owner: MemoryWorkOwner,\n ) => Effect.Effect<void>;\n readonly registerDeliveryLookup: (\n exists: (threadId: ThreadId, messageId: IdempotencyKey) => boolean,\n ) => Effect.Effect<void>;\n /** Synchronous publication with the authoritative retained row, including replay membership. */\n readonly checkThreadCapacity: (threadId: ThreadId) => Effect.Effect<void, ThreadStoreError>;\n readonly initializeWork: (threadId: ThreadId) => void;\n readonly retainDelivery: (threadId: ThreadId, messageId: IdempotencyKey) => void;\n readonly registerLedgerTransfer: (transfer: MemoryLedgerTransfer) => Effect.Effect<void>;\n readonly registerDeliveryTransfer: (transfer: MemoryDeliveryTransfer) => Effect.Effect<void>;\n readonly prepareAppend: (\n request: AppendRequest,\n ) => Effect.Effect<PreparedMemoryAppend, ThreadStoreFailure>;\n readonly appendPrepared: (\n prepared: PreparedMemoryAppend,\n ) => Effect.Effect<AppendResult, ThreadStoreFailure>;\n readonly record: (\n threadId: ThreadId,\n recordId: RecordId,\n ) => Effect.Effect<RecordEnvelope | undefined>;\n /** Bounded canonical outcomes for one call; caller holds the shared mutation gate. */\n readonly toolCallResults: (\n threadId: ThreadId,\n runId: RunId,\n toolCallId: ToolCallId,\n ) => Effect.Effect<ReadonlyArray<RecordEnvelope>>;\n readonly tail: (threadId: ThreadId) => Effect.Effect<ThreadTail, ThreadStoreFailure>;\n }\n>()(\"@effect-agent/storage-memory/internal/MemoryThreadStoreKernel\") {}\n","/** Keep only the lowest distinct metadata keys after a cursor while scanning resident indexes. */\nexport const boundedWorkSelection = <A>(\n limit: number,\n key: (value: A) => string,\n after?: string,\n) => {\n const values: Array<A> = [];\n\n return {\n values,\n add: (value: A) => {\n const candidate = key(value);\n\n if (after !== undefined && candidate <= after) return;\n let low = 0;\n let high = values.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n\n if (key(values[middle]) < candidate) low = middle + 1;\n else high = middle;\n }\n if (low >= limit || (low < values.length && key(values[low]) === candidate)) return;\n if (values.length === limit) values.pop();\n values.splice(low, 0, value);\n },\n };\n};\n"],"mappings":";;;AAuHA,IAAa,0BAAb,cAA6C,QAAQ,QAoCnD,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC;;;;AC1JtE,MAAa,wBACX,OACA,KACA,UACG;CACH,MAAM,SAAmB,CAAC;CAE1B,OAAO;EACL;EACA,MAAM,UAAa;GACjB,MAAM,YAAY,IAAI,KAAK;GAE3B,IAAI,UAAU,KAAA,KAAa,aAAa,OAAO;GAC/C,IAAI,MAAM;GACV,IAAI,OAAO,OAAO;GAElB,OAAO,MAAM,MAAM;IACjB,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,CAAC;IAE1C,IAAI,IAAI,OAAO,OAAO,IAAI,WAAW,MAAM,SAAS;SAC/C,OAAO;GACd;GACA,IAAI,OAAO,SAAU,MAAM,OAAO,UAAU,IAAI,OAAO,IAAI,MAAM,WAAY;GAC7E,IAAI,OAAO,WAAW,OAAO,OAAO,IAAI;GACxC,OAAO,OAAO,KAAK,GAAG,KAAK;EAC7B;CACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@yielded/agent-storage-memory","version":"0.1.0-beta.
|
|
1
|
+
{"name":"@yielded/agent-storage-memory","version":"0.1.0-beta.169","dependencies":{"@yielded/agent":"0.1.0-beta.169"},"devDependencies":{"@effect/platform-node":"4.0.3","@effect/vitest":"4.0.3","effect":"4.0.3","typescript":"7.0.2","vite":"npm:@voidzero-dev/vite-plus-core@1.1.0","vite-plus":"1.1.0","vitest":"5.0.3"},"peerDependencies":{"effect":"^4.0.3"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./memory-message-delivery-store":{"types":"./dist/MemoryMessageDeliveryStore.d.mts","default":"./dist/MemoryMessageDeliveryStore.mjs"},"./memory-schedule-store":{"types":"./dist/MemoryScheduleStore.d.mts","default":"./dist/MemoryScheduleStore.mjs"},"./memory-semantic-index":{"types":"./dist/MemorySemanticIndex.d.mts","default":"./dist/MemorySemanticIndex.mjs"},"./memory-submission-ledger":{"types":"./dist/MemorySubmissionLedger.d.mts","default":"./dist/MemorySubmissionLedger.mjs"},"./memory-subscription-store":{"types":"./dist/MemorySubscriptionStore.d.mts","default":"./dist/MemorySubscriptionStore.mjs"},"./memory-thread-store":{"types":"./dist/MemoryThreadStore.d.mts","default":"./dist/MemoryThreadStore.mjs"}},"description":"In-memory Thread store and submission ledger reference adapters for Effect Agent tests and conformance suites.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/yielded-dev/agent.git","directory":"packages/storage-memory"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests"}}
|