@dsh-enhanced/assistant-delivery 0.1.65 → 0.1.67
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/README.md +128 -4
- package/lib/agent-runtime.d.ts +6 -2
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +60 -14
- package/lib/agent-runtime.js.map +1 -1
- package/lib/attention-audit-store.d.ts +54 -0
- package/lib/attention-audit-store.d.ts.map +1 -0
- package/lib/attention-audit-store.js +213 -0
- package/lib/attention-audit-store.js.map +1 -0
- package/lib/attention-enforcement.d.ts +75 -0
- package/lib/attention-enforcement.d.ts.map +1 -0
- package/lib/attention-enforcement.js +84 -0
- package/lib/attention-enforcement.js.map +1 -0
- package/lib/attention.d.ts +203 -0
- package/lib/attention.d.ts.map +1 -0
- package/lib/attention.js +288 -0
- package/lib/attention.js.map +1 -0
- package/lib/coordinator.d.ts.map +1 -1
- package/lib/coordinator.js +6 -0
- package/lib/coordinator.js.map +1 -1
- package/lib/feedback-command.d.ts +23 -0
- package/lib/feedback-command.d.ts.map +1 -1
- package/lib/feedback-command.js +176 -0
- package/lib/feedback-command.js.map +1 -1
- package/lib/foreground-observation.d.ts +21 -0
- package/lib/foreground-observation.d.ts.map +1 -1
- package/lib/foreground-observation.js.map +1 -1
- package/lib/foreground-termination.d.ts +31 -0
- package/lib/foreground-termination.d.ts.map +1 -0
- package/lib/foreground-termination.js +42 -0
- package/lib/foreground-termination.js.map +1 -0
- package/lib/in-process-reload-runtime.d.ts +87 -0
- package/lib/in-process-reload-runtime.d.ts.map +1 -0
- package/lib/in-process-reload-runtime.js +319 -0
- package/lib/in-process-reload-runtime.js.map +1 -0
- package/lib/index.d.ts +20 -6
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -3
- package/lib/index.js.map +1 -1
- package/lib/native-termination.d.ts +12 -0
- package/lib/native-termination.d.ts.map +1 -0
- package/lib/native-termination.js +57 -0
- package/lib/native-termination.js.map +1 -0
- package/lib/native-web-owner.d.ts +7 -0
- package/lib/native-web-owner.d.ts.map +1 -1
- package/lib/native-web-owner.js +40 -10
- package/lib/native-web-owner.js.map +1 -1
- package/lib/operator-snapshot.d.ts +31 -3
- package/lib/operator-snapshot.d.ts.map +1 -1
- package/lib/operator-snapshot.js +120 -47
- package/lib/operator-snapshot.js.map +1 -1
- package/lib/progress-attention.d.ts +55 -0
- package/lib/progress-attention.d.ts.map +1 -0
- package/lib/progress-attention.js +128 -0
- package/lib/progress-attention.js.map +1 -0
- package/lib/service.d.ts +515 -4
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +2183 -130
- package/lib/service.js.map +1 -1
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +102 -2
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +113 -2
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +450 -39
- package/lib/store.js.map +1 -1
- package/lib/types.d.ts +175 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/work-item-engineering-context.d.ts +127 -0
- package/lib/work-item-engineering-context.d.ts.map +1 -0
- package/lib/work-item-engineering-context.js +151 -0
- package/lib/work-item-engineering-context.js.map +1 -0
- package/lib/work-item-feedback-schema.d.ts +2 -0
- package/lib/work-item-feedback-schema.d.ts.map +1 -0
- package/lib/work-item-feedback-schema.js +29 -0
- package/lib/work-item-feedback-schema.js.map +1 -0
- package/lib/work-item-feedback-store.d.ts +29 -0
- package/lib/work-item-feedback-store.d.ts.map +1 -0
- package/lib/work-item-feedback-store.js +111 -0
- package/lib/work-item-feedback-store.js.map +1 -0
- package/lib/work-item-feedback.d.ts +157 -0
- package/lib/work-item-feedback.d.ts.map +1 -0
- package/lib/work-item-feedback.js +2 -0
- package/lib/work-item-feedback.js.map +1 -0
- package/lib/work-item-replies-schema.d.ts +3 -0
- package/lib/work-item-replies-schema.d.ts.map +1 -0
- package/lib/work-item-replies-schema.js +45 -0
- package/lib/work-item-replies-schema.js.map +1 -0
- package/lib/work-item-replies-store.d.ts +43 -0
- package/lib/work-item-replies-store.d.ts.map +1 -0
- package/lib/work-item-replies-store.js +203 -0
- package/lib/work-item-replies-store.js.map +1 -0
- package/lib/work-item-replies.d.ts +93 -0
- package/lib/work-item-replies.d.ts.map +1 -0
- package/lib/work-item-replies.js +15 -0
- package/lib/work-item-replies.js.map +1 -0
- package/package.json +24 -24
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import type { ConversationBinding, DeliveryPrincipal, InboxRecord, OutboxRecord } from './types.js';
|
|
3
|
+
import { type WorkItemReportTarget, type WorkItemReplySource, type WorkItemReplyReadInput } from './work-item-replies.js';
|
|
4
|
+
export interface StoredWorkItemReport {
|
|
5
|
+
target: WorkItemReportTarget;
|
|
6
|
+
binding: WorkItemReplySource['binding'];
|
|
7
|
+
intentHash: string;
|
|
8
|
+
outbox: OutboxRecord;
|
|
9
|
+
}
|
|
10
|
+
export declare class WorkItemRepliesStore {
|
|
11
|
+
private readonly database;
|
|
12
|
+
private readonly transaction;
|
|
13
|
+
private readonly getInbox;
|
|
14
|
+
private readonly getBinding;
|
|
15
|
+
private readonly getOutbox;
|
|
16
|
+
private readonly getOwner;
|
|
17
|
+
constructor(database: DatabaseSync, transaction: <T>(fn: () => T) => T, getInbox: (id: string) => InboxRecord | undefined, getBinding: (id: string) => ConversationBinding | undefined, getOutbox: (id: string) => OutboxRecord | undefined, getOwner: (binding: ConversationBinding) => DeliveryPrincipal | undefined);
|
|
18
|
+
enqueueReport(target: WorkItemReportTarget, binding: ConversationBinding, enqueue: () => OutboxRecord): OutboxRecord;
|
|
19
|
+
report(outboxId: string): StoredWorkItemReport | undefined;
|
|
20
|
+
replyReport(channel: string, account: string, providerMessageId: string): StoredWorkItemReport | undefined;
|
|
21
|
+
admit(inboxId: string, binding: ConversationBinding, report: StoredWorkItemReport): WorkItemReplySource;
|
|
22
|
+
/**
|
|
23
|
+
* Insert the continuation source. By default this owns the Inbox handoff;
|
|
24
|
+
* `handoff: false` reuses the processed Inbox of an already-admitted result
|
|
25
|
+
* inside the same outer transaction (mixed result+continuation admission).
|
|
26
|
+
*/
|
|
27
|
+
admitInTransaction(inboxId: string, binding: ConversationBinding, report: StoredWorkItemReport, options?: Readonly<{
|
|
28
|
+
handoff?: boolean;
|
|
29
|
+
}>): WorkItemReplySource;
|
|
30
|
+
private row;
|
|
31
|
+
read(input: WorkItemReplyReadInput): WorkItemReplySource;
|
|
32
|
+
/** Historical engineering evidence only; never restores a cancelled route or execution permission. */
|
|
33
|
+
inspectHistoricalSource(input: WorkItemReplyReadInput): WorkItemReplySource | undefined;
|
|
34
|
+
pending(input: import('./work-item-replies.js').WorkItemReplyListInput): WorkItemReplySource[];
|
|
35
|
+
select(input: WorkItemReplyReadInput, validate: (source: WorkItemReplySource) => void): WorkItemReplySource;
|
|
36
|
+
acknowledge(input: WorkItemReplyReadInput & {
|
|
37
|
+
childItemId: string;
|
|
38
|
+
childPlanDigest: string;
|
|
39
|
+
}, validate: (source: WorkItemReplySource) => void): WorkItemReplySource;
|
|
40
|
+
/** Called inside the command's durable cancellation transaction. Notify peers only after commit. */
|
|
41
|
+
cancelBefore(bindingId: string, sequence: number): string[];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=work-item-replies-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-replies-store.d.ts","sourceRoot":"","sources":["../src/work-item-replies-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEnG,OAAO,EACL,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAKlH,MAAM,WAAW,oBAAoB;IAAG,MAAM,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE;AAGzJ,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAgB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAJE,QAAQ,EAAE,YAAY,EAAmB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EACrF,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,EACjD,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,mBAAmB,GAAG,SAAS,EAC3D,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,EACnD,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,iBAAiB,GAAG,SAAS;IAE5F,aAAa,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,YAAY,GAAG,YAAY;IAepH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAS1D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAK1G,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,GAAG,mBAAmB;IAGvG;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,EAC5F,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,mBAAmB;IAqCjE,OAAO,CAAC,GAAG;IAGX,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,mBAAmB;IAUxD,sGAAsG;IACtG,uBAAuB,CAAC,KAAK,EAAC,sBAAsB,GAAE,mBAAmB,GAAC,SAAS;IAyBnF,OAAO,CAAC,KAAK,EAAE,OAAO,wBAAwB,EAAE,sBAAsB,GAAG,mBAAmB,EAAE;IAS9F,MAAM,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,mBAAmB;IAY3G,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,mBAAmB;IAcnK,oGAAoG;IACpG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAM5D"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { externalPrincipalId } from './canonical.js';
|
|
3
|
+
import { WorkItemReplyCancelledError, workItemReplyCanonical, workItemReplyDigest } from './work-item-replies.js';
|
|
4
|
+
const same = (a, b) => workItemReplyCanonical(a) === workItemReplyCanonical(b);
|
|
5
|
+
function fail() { throw new Error('work item reply authority or sequence changed'); }
|
|
6
|
+
export class WorkItemRepliesStore {
|
|
7
|
+
database;
|
|
8
|
+
transaction;
|
|
9
|
+
getInbox;
|
|
10
|
+
getBinding;
|
|
11
|
+
getOutbox;
|
|
12
|
+
getOwner;
|
|
13
|
+
constructor(database, transaction, getInbox, getBinding, getOutbox, getOwner) {
|
|
14
|
+
this.database = database;
|
|
15
|
+
this.transaction = transaction;
|
|
16
|
+
this.getInbox = getInbox;
|
|
17
|
+
this.getBinding = getBinding;
|
|
18
|
+
this.getOutbox = getOutbox;
|
|
19
|
+
this.getOwner = getOwner;
|
|
20
|
+
}
|
|
21
|
+
enqueueReport(target, binding, enqueue) {
|
|
22
|
+
return this.transaction(() => {
|
|
23
|
+
const current = this.getBinding(binding.id), owner = current === undefined ? undefined : this.getOwner(current);
|
|
24
|
+
if (!current || !same(current, binding) || current.status !== 'active' || owner?.status !== 'active' || owner.role !== 'owner'
|
|
25
|
+
|| owner.id !== target.owner.principalRecordId || owner.version !== target.owner.principalVersion)
|
|
26
|
+
fail();
|
|
27
|
+
const outbox = enqueue();
|
|
28
|
+
const bindingSnapshot = { id: binding.id, version: binding.version, generation: binding.generation };
|
|
29
|
+
const expected = { intent_hash: outbox.intentHash, target_json: workItemReplyCanonical(target), binding_json: workItemReplyCanonical(bindingSnapshot) };
|
|
30
|
+
const old = this.database.prepare('SELECT intent_hash,target_json,binding_json FROM delivery_work_item_reports WHERE outbox_id=?').get(outbox.id);
|
|
31
|
+
if (old && !same(old, expected))
|
|
32
|
+
fail();
|
|
33
|
+
if (!old)
|
|
34
|
+
this.database.prepare('INSERT INTO delivery_work_item_reports(outbox_id,intent_hash,target_json,binding_json) VALUES(?,?,?,?)')
|
|
35
|
+
.run(outbox.id, expected.intent_hash, expected.target_json, expected.binding_json);
|
|
36
|
+
return outbox;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
report(outboxId) {
|
|
40
|
+
const row = this.database.prepare('SELECT intent_hash,target_json,binding_json FROM delivery_work_item_reports WHERE outbox_id=?').get(outboxId);
|
|
41
|
+
if (!row)
|
|
42
|
+
return undefined;
|
|
43
|
+
const outbox = this.getOutbox(outboxId);
|
|
44
|
+
if (!outbox || outbox.intentHash !== row.intent_hash)
|
|
45
|
+
fail();
|
|
46
|
+
return { outbox, intentHash: row.intent_hash, target: JSON.parse(row.target_json),
|
|
47
|
+
binding: JSON.parse(row.binding_json) };
|
|
48
|
+
}
|
|
49
|
+
replyReport(channel, account, providerMessageId) {
|
|
50
|
+
const rows = this.database.prepare('SELECT id FROM outbox_messages WHERE channel=? AND account=? AND provider_message_id=? LIMIT 2')
|
|
51
|
+
.all(channel, account, providerMessageId);
|
|
52
|
+
return rows.length === 1 ? this.report(rows[0].id) : undefined;
|
|
53
|
+
}
|
|
54
|
+
admit(inboxId, binding, report) {
|
|
55
|
+
return this.transaction(() => this.admitInTransaction(inboxId, binding, report));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Insert the continuation source. By default this owns the Inbox handoff;
|
|
59
|
+
* `handoff: false` reuses the processed Inbox of an already-admitted result
|
|
60
|
+
* inside the same outer transaction (mixed result+continuation admission).
|
|
61
|
+
*/
|
|
62
|
+
admitInTransaction(inboxId, binding, report, options) {
|
|
63
|
+
const handoff = options?.handoff !== false;
|
|
64
|
+
const inbox = this.getInbox(inboxId);
|
|
65
|
+
const current = this.getBinding(binding.id);
|
|
66
|
+
const observed = this.report(report.outbox.id);
|
|
67
|
+
const owner = current === undefined ? undefined : this.getOwner(current);
|
|
68
|
+
if (owner?.status !== 'active' || owner.role !== 'owner' || owner.id !== report.target.owner.principalRecordId || owner.version !== report.target.owner.principalVersion)
|
|
69
|
+
fail();
|
|
70
|
+
if (!inbox || !current || !same(current, binding) || !same(observed, report)
|
|
71
|
+
|| !(handoff ? ['received', 'authorized'] : ['processed']).includes(inbox.status) || current.status !== 'active'
|
|
72
|
+
|| (!handoff && inbox.bindingId !== binding.id)
|
|
73
|
+
|| !['accepted', 'delivered', 'read'].includes(report.outbox.status) || !report.outbox.providerMessageId
|
|
74
|
+
|| inbox.envelope.metadata?.replyToProviderMessageId !== report.outbox.providerMessageId
|
|
75
|
+
|| !same(report.outbox.intent.target.conversation, inbox.envelope.conversation)
|
|
76
|
+
|| !same(inbox.envelope.conversation, binding.conversation) || !same(inbox.envelope.principal, binding.principal)
|
|
77
|
+
|| report.target.scope.workspace !== binding.workspace || report.target.scope.preset !== binding.agentPreset)
|
|
78
|
+
fail();
|
|
79
|
+
const text = inbox.envelope.text;
|
|
80
|
+
if (inbox.envelope.kind !== 'text' || text.trim().startsWith('/') || (inbox.envelope.attachments?.length ?? 0) > 0
|
|
81
|
+
|| Buffer.from(text, 'utf8').toString('utf8') !== text || Buffer.byteLength(text, 'utf8') > 262144)
|
|
82
|
+
fail();
|
|
83
|
+
const source = { protocol: 'assistant-delivery/work-item-reply/v1', id: inbox.id,
|
|
84
|
+
admissionCursor: inbox.admissionCursor, inputText: text, inputSha256: createHash('sha256').update(text).digest('hex'), inputBytes: Buffer.byteLength(text),
|
|
85
|
+
scope: report.target.scope, principalId: externalPrincipalId(binding.principal), owner: report.target.owner,
|
|
86
|
+
binding: { id: binding.id, version: binding.version, generation: binding.generation }, target: { outboxId: report.outbox.id, providerMessageId: report.outbox.providerMessageId,
|
|
87
|
+
itemId: report.target.itemId, reportRevision: report.target.reportRevision, reportDigest: report.target.reportDigest, streamId: report.target.streamId } };
|
|
88
|
+
const streamKey = workItemReplyDigest({ conversation: binding.conversation, owner: source.owner, scope: source.scope,
|
|
89
|
+
streamId: source.target.streamId, producer: report.target.sourceId });
|
|
90
|
+
const sourceDigest = workItemReplyDigest(source);
|
|
91
|
+
this.database.prepare('INSERT INTO delivery_work_item_reply_streams(stream_key,head_item_id,revision) VALUES(?,?,0) ON CONFLICT DO NOTHING')
|
|
92
|
+
.run(streamKey, source.target.streamId);
|
|
93
|
+
this.database.prepare(`INSERT INTO delivery_work_item_replies(inbox_id,stream_key,admission_sequence,source_digest,source_json,state) VALUES(?,?,?,?,?,'pending')`)
|
|
94
|
+
.run(inbox.id, streamKey, inbox.admissionCursor.sequence, sourceDigest, workItemReplyCanonical(source));
|
|
95
|
+
if (handoff) {
|
|
96
|
+
const result = this.database.prepare(`UPDATE inbox_messages SET status='processed',binding_id=?,failure_code=NULL,updated_at=? WHERE id=? AND status IN ('received','authorized')`)
|
|
97
|
+
.run(binding.id, inbox.updatedAt, inbox.id);
|
|
98
|
+
if (result.changes !== 1)
|
|
99
|
+
fail();
|
|
100
|
+
}
|
|
101
|
+
return this.read({ id: inbox.id, expectedSourceDigest: sourceDigest });
|
|
102
|
+
}
|
|
103
|
+
row(id) {
|
|
104
|
+
return this.database.prepare('SELECT * FROM delivery_work_item_replies WHERE inbox_id=?').get(id);
|
|
105
|
+
}
|
|
106
|
+
read(input) {
|
|
107
|
+
const row = this.row(input.id);
|
|
108
|
+
if (!row || row.source_digest !== input.expectedSourceDigest)
|
|
109
|
+
fail();
|
|
110
|
+
const source = JSON.parse(row.source_json);
|
|
111
|
+
if (workItemReplyDigest(source) !== row.source_digest || source.id !== row.inbox_id || source.admissionCursor.sequence !== row.admission_sequence)
|
|
112
|
+
fail();
|
|
113
|
+
if (row.state === 'cancelled')
|
|
114
|
+
throw new WorkItemReplyCancelledError();
|
|
115
|
+
return Object.freeze({ ...source, sourceDigest: row.source_digest, state: row.state,
|
|
116
|
+
...(row.execution_parent_item_id === null ? {} : { executionParentItemId: row.execution_parent_item_id }),
|
|
117
|
+
...(row.child_item_id === null ? {} : { child: Object.freeze({ itemId: row.child_item_id, planDigest: row.child_plan_digest }) }) });
|
|
118
|
+
}
|
|
119
|
+
/** Historical engineering evidence only; never restores a cancelled route or execution permission. */
|
|
120
|
+
inspectHistoricalSource(input) {
|
|
121
|
+
const row = this.row(input.id);
|
|
122
|
+
if (!row || row.source_digest !== input.expectedSourceDigest || !row.execution_parent_item_id || !row.child_item_id || !row.child_plan_digest
|
|
123
|
+
|| !['routed', 'cancelled'].includes(row.state))
|
|
124
|
+
return undefined;
|
|
125
|
+
const raw = this.database.prepare('SELECT CAST(source_json AS BLOB) AS bytes FROM delivery_work_item_replies WHERE inbox_id=?').get(input.id);
|
|
126
|
+
if (!raw || !(raw.bytes instanceof Uint8Array))
|
|
127
|
+
fail();
|
|
128
|
+
const text = new TextDecoder('utf-8', { fatal: true }).decode(raw.bytes);
|
|
129
|
+
if (!Buffer.from(text).equals(raw.bytes))
|
|
130
|
+
fail();
|
|
131
|
+
const source = JSON.parse(text);
|
|
132
|
+
const fields = ['protocol', 'id', 'admissionCursor', 'inputText', 'inputSha256', 'inputBytes', 'scope', 'principalId', 'owner', 'binding', 'target'];
|
|
133
|
+
if (!source || Object.keys(source).sort().join() !== fields.sort().join() || source.protocol !== 'assistant-delivery/work-item-reply/v1'
|
|
134
|
+
|| workItemReplyCanonical(source) !== text || workItemReplyDigest(source) !== row.source_digest || source.id !== row.inbox_id
|
|
135
|
+
|| source.admissionCursor?.sequence !== row.admission_sequence || typeof source.inputText !== 'string'
|
|
136
|
+
|| Buffer.from(source.inputText).toString('utf8') !== source.inputText || Buffer.byteLength(source.inputText) !== source.inputBytes
|
|
137
|
+
|| createHash('sha256').update(source.inputText).digest('hex') !== source.inputSha256 || !/^[a-f0-9]{64}$/u.test(row.child_plan_digest))
|
|
138
|
+
fail();
|
|
139
|
+
const inbox = this.getInbox(source.id);
|
|
140
|
+
const envelope = this.database.prepare('SELECT CAST(envelope_json AS BLOB) AS bytes FROM inbox_messages WHERE id=?').get(source.id);
|
|
141
|
+
if (!inbox || !envelope || !(envelope.bytes instanceof Uint8Array))
|
|
142
|
+
fail();
|
|
143
|
+
const envelopeText = new TextDecoder('utf-8', { fatal: true }).decode(envelope.bytes);
|
|
144
|
+
if (!Buffer.from(envelopeText).equals(envelope.bytes) || JSON.stringify(inbox.envelope) !== envelopeText
|
|
145
|
+
|| createHash('sha256').update(envelopeText).digest('hex') !== inbox.envelopeHash || !same(inbox.admissionCursor, source.admissionCursor)
|
|
146
|
+
|| inbox.bindingId !== source.binding.id || inbox.envelope.text !== source.inputText)
|
|
147
|
+
fail();
|
|
148
|
+
return Object.freeze({ ...source, sourceDigest: row.source_digest, state: row.state, executionParentItemId: row.execution_parent_item_id,
|
|
149
|
+
child: Object.freeze({ itemId: row.child_item_id, planDigest: row.child_plan_digest }) });
|
|
150
|
+
}
|
|
151
|
+
pending(input) {
|
|
152
|
+
return this.database.prepare(`SELECT r.inbox_id,r.source_digest FROM delivery_work_item_replies r
|
|
153
|
+
WHERE r.state='pending' AND r.admission_sequence>?
|
|
154
|
+
AND json_extract(r.source_json,'$.scope.workspace')=? AND json_extract(r.source_json,'$.scope.preset')=?
|
|
155
|
+
AND json_extract(r.source_json,'$.owner.principalRecordId')=? AND json_extract(r.source_json,'$.owner.principalVersion')=? AND NOT EXISTS (
|
|
156
|
+
SELECT 1 FROM delivery_work_item_replies earlier WHERE earlier.stream_key=r.stream_key AND earlier.state='pending'
|
|
157
|
+
AND earlier.admission_sequence<r.admission_sequence) ORDER BY r.admission_sequence LIMIT ?`).all(input.afterSequence ?? 0, input.scope.workspace, input.scope.preset, input.owner.principalRecordId, input.owner.principalVersion, input.limit + 1).map(row => this.read({ id: row.inbox_id, expectedSourceDigest: row.source_digest }));
|
|
158
|
+
}
|
|
159
|
+
select(input, validate) {
|
|
160
|
+
return this.transaction(() => {
|
|
161
|
+
const source = this.read(input);
|
|
162
|
+
validate(source);
|
|
163
|
+
const row = this.row(input.id);
|
|
164
|
+
if (source.executionParentItemId !== undefined)
|
|
165
|
+
return source;
|
|
166
|
+
const older = this.database.prepare("SELECT 1 FROM delivery_work_item_replies WHERE stream_key=? AND state='pending' AND admission_sequence<?").get(row.stream_key, row.admission_sequence);
|
|
167
|
+
if (source.state !== 'pending' || older)
|
|
168
|
+
fail();
|
|
169
|
+
const head = this.database.prepare('SELECT head_item_id FROM delivery_work_item_reply_streams WHERE stream_key=?').get(row.stream_key);
|
|
170
|
+
this.database.prepare('UPDATE delivery_work_item_replies SET execution_parent_item_id=? WHERE inbox_id=? AND execution_parent_item_id IS NULL').run(head.head_item_id, input.id);
|
|
171
|
+
return this.read(input);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
acknowledge(input, validate) {
|
|
175
|
+
return this.transaction(() => {
|
|
176
|
+
const source = this.read(input);
|
|
177
|
+
validate(source);
|
|
178
|
+
if (!source.executionParentItemId || !input.childItemId || !/^[a-f0-9]{64}$/u.test(input.childPlanDigest))
|
|
179
|
+
fail();
|
|
180
|
+
if (source.child) {
|
|
181
|
+
if (source.child.itemId !== input.childItemId || source.child.planDigest !== input.childPlanDigest)
|
|
182
|
+
fail();
|
|
183
|
+
return source;
|
|
184
|
+
}
|
|
185
|
+
const row = this.row(input.id);
|
|
186
|
+
const advanced = this.database.prepare('UPDATE delivery_work_item_reply_streams SET head_item_id=?,revision=revision+1 WHERE stream_key=? AND head_item_id=?')
|
|
187
|
+
.run(input.childItemId, row.stream_key, source.executionParentItemId);
|
|
188
|
+
if (advanced.changes !== 1 || source.state !== 'pending')
|
|
189
|
+
fail();
|
|
190
|
+
this.database.prepare("UPDATE delivery_work_item_replies SET child_item_id=?,child_plan_digest=?,state='routed' WHERE inbox_id=? AND state='pending'")
|
|
191
|
+
.run(input.childItemId, input.childPlanDigest, input.id);
|
|
192
|
+
return this.read(input);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/** Called inside the command's durable cancellation transaction. Notify peers only after commit. */
|
|
196
|
+
cancelBefore(bindingId, sequence) {
|
|
197
|
+
const rows = this.database.prepare(`SELECT child_item_id FROM delivery_work_item_replies WHERE json_extract(source_json,'$.binding.id')=? AND admission_sequence<? AND state!='cancelled'`)
|
|
198
|
+
.all(bindingId, sequence);
|
|
199
|
+
this.database.prepare(`UPDATE delivery_work_item_replies SET state='cancelled' WHERE json_extract(source_json,'$.binding.id')=? AND admission_sequence<? AND state!='cancelled'`).run(bindingId, sequence);
|
|
200
|
+
return rows.flatMap(row => row.child_item_id === null ? [] : [row.child_item_id]);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=work-item-replies-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-replies-store.js","sourceRoot":"","sources":["../src/work-item-replies-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { DeliveryAdmissionCursor, DeliveryOwnerLineage } from './types.js';
|
|
2
|
+
export interface WorkItemReportTarget {
|
|
3
|
+
readonly protocol: 'assistant-delivery/work-item-report/v1';
|
|
4
|
+
readonly itemId: string;
|
|
5
|
+
readonly reportRevision: number;
|
|
6
|
+
readonly streamId: string;
|
|
7
|
+
readonly reportDigest: string;
|
|
8
|
+
readonly sourceId: string;
|
|
9
|
+
readonly scope: Readonly<{
|
|
10
|
+
workspace: string;
|
|
11
|
+
preset: string;
|
|
12
|
+
}>;
|
|
13
|
+
readonly owner: Readonly<DeliveryOwnerLineage>;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkItemReplySource {
|
|
16
|
+
readonly protocol: 'assistant-delivery/work-item-reply/v1';
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly sourceDigest: string;
|
|
19
|
+
readonly admissionCursor: Readonly<DeliveryAdmissionCursor>;
|
|
20
|
+
readonly inputText: string;
|
|
21
|
+
readonly inputSha256: string;
|
|
22
|
+
readonly inputBytes: number;
|
|
23
|
+
readonly scope: Readonly<{
|
|
24
|
+
workspace: string;
|
|
25
|
+
preset: string;
|
|
26
|
+
}>;
|
|
27
|
+
readonly principalId: string;
|
|
28
|
+
readonly owner: Readonly<DeliveryOwnerLineage>;
|
|
29
|
+
readonly binding: Readonly<{
|
|
30
|
+
id: string;
|
|
31
|
+
version: number;
|
|
32
|
+
generation: number;
|
|
33
|
+
}>;
|
|
34
|
+
readonly target: Readonly<{
|
|
35
|
+
outboxId: string;
|
|
36
|
+
providerMessageId: string;
|
|
37
|
+
itemId: string;
|
|
38
|
+
reportRevision: number;
|
|
39
|
+
reportDigest: string;
|
|
40
|
+
streamId: string;
|
|
41
|
+
}>;
|
|
42
|
+
readonly executionParentItemId?: string;
|
|
43
|
+
readonly child?: Readonly<{
|
|
44
|
+
itemId: string;
|
|
45
|
+
planDigest: string;
|
|
46
|
+
}>;
|
|
47
|
+
readonly state: 'pending' | 'routed' | 'cancelled';
|
|
48
|
+
}
|
|
49
|
+
export interface WorkItemReplyConsumerRegistration {
|
|
50
|
+
readonly protocol: 1;
|
|
51
|
+
readonly sourceId: string;
|
|
52
|
+
readonly continuationAutomationId: string;
|
|
53
|
+
readonly continuationEnabled?: boolean;
|
|
54
|
+
readonly feedbackEnabled?: boolean;
|
|
55
|
+
readonly inspectReport: (input: {
|
|
56
|
+
itemId: string;
|
|
57
|
+
reportRevision: number;
|
|
58
|
+
bindingId: string;
|
|
59
|
+
idempotencyKey: string;
|
|
60
|
+
text: string;
|
|
61
|
+
format: 'plain' | 'markdown';
|
|
62
|
+
}) => WorkItemReportTarget | undefined;
|
|
63
|
+
readonly canContinueReport?: (input: Parameters<WorkItemReplyConsumerRegistration['inspectReport']>[0]) => boolean;
|
|
64
|
+
readonly inspectChild: (input: {
|
|
65
|
+
replyId: string;
|
|
66
|
+
sourceDigest: string;
|
|
67
|
+
parentItemId: string;
|
|
68
|
+
childItemId: string;
|
|
69
|
+
childPlanDigest: string;
|
|
70
|
+
}) => boolean;
|
|
71
|
+
readonly onPending: () => void;
|
|
72
|
+
readonly onCancelled: (childItemIds: readonly string[]) => void;
|
|
73
|
+
}
|
|
74
|
+
export interface WorkItemReplyReadInput {
|
|
75
|
+
readonly id: string;
|
|
76
|
+
readonly expectedSourceDigest: string;
|
|
77
|
+
}
|
|
78
|
+
export interface WorkItemReplyListInput {
|
|
79
|
+
readonly scope: Readonly<{
|
|
80
|
+
workspace: string;
|
|
81
|
+
preset: string;
|
|
82
|
+
}>;
|
|
83
|
+
readonly owner: Readonly<DeliveryOwnerLineage>;
|
|
84
|
+
readonly afterSequence?: number;
|
|
85
|
+
readonly limit: number;
|
|
86
|
+
}
|
|
87
|
+
export declare function workItemReplyCanonical(value: unknown): string;
|
|
88
|
+
export declare const workItemReplyDigest: (value: unknown) => string;
|
|
89
|
+
export declare class WorkItemReplyCancelledError extends Error {
|
|
90
|
+
readonly code: "work-item-reply-cancelled";
|
|
91
|
+
constructor();
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=work-item-replies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-replies.d.ts","sourceRoot":"","sources":["../src/work-item-replies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export function workItemReplyCanonical(value) {
|
|
3
|
+
if (value === null || typeof value !== 'object')
|
|
4
|
+
return JSON.stringify(value);
|
|
5
|
+
if (Array.isArray(value))
|
|
6
|
+
return `[${value.map(workItemReplyCanonical).join(',')}]`;
|
|
7
|
+
const record = value;
|
|
8
|
+
return `{${Object.keys(record).sort().map(key => `${JSON.stringify(key)}:${workItemReplyCanonical(record[key])}`).join(',')}}`;
|
|
9
|
+
}
|
|
10
|
+
export const workItemReplyDigest = (value) => createHash('sha256').update(workItemReplyCanonical(value)).digest('hex');
|
|
11
|
+
export class WorkItemReplyCancelledError extends Error {
|
|
12
|
+
code = 'work-item-reply-cancelled';
|
|
13
|
+
constructor() { super('work item reply was durably cancelled'); this.name = 'WorkItemReplyCancelledError'; }
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=work-item-replies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-replies.js","sourceRoot":"","sources":["../src/work-item-replies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAiDxC,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACnF,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;AAChI,CAAC;AACD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAEvI,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,GAAG,2BAAoC,CAAA;IACpD,gBAAgB,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAA,CAAC,CAAC;CAC5G"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-enhanced/assistant-delivery",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.67",
|
|
4
4
|
"description": "A durable, policy-gated inbound/outbound message core for DeepSeek Harness.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -48,31 +48,31 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@deepseek-ai/schemastery": "3.18.5",
|
|
51
|
-
"@dsh-enhanced/assistant-growth-contract": "0.1.
|
|
52
|
-
"@dsh-enhanced/
|
|
53
|
-
"@dsh-enhanced/
|
|
51
|
+
"@dsh-enhanced/assistant-growth-contract": "0.1.67",
|
|
52
|
+
"@dsh-enhanced/task-acceptance-contract": "0.1.67",
|
|
53
|
+
"@dsh-enhanced/llm-route-capabilities": "0.1.67"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
57
|
-
"@deepseek-ai/dsh-agent": "0.2.1-rc.2",
|
|
58
|
-
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.2",
|
|
59
|
-
"@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
|
|
60
|
-
"@deepseek-ai/dsh-commands": "0.2.1-rc.2",
|
|
61
|
-
"@deepseek-ai/dsh-goal": "0.2.1-rc.2",
|
|
62
|
-
"@deepseek-ai/dsh-llm": "0.2.1-rc.2",
|
|
63
|
-
"@deepseek-ai/dsh-permission-presets": "0.2.1-rc.2",
|
|
64
|
-
"@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.2",
|
|
65
|
-
"@deepseek-ai/dsh-session": "0.2.1-rc.2",
|
|
66
|
-
"@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
|
|
67
|
-
"@deepseek-ai/dsh-tools": "0.2.1-rc.2",
|
|
68
|
-
"@deepseek-ai/dsh-user-approval": "0.2.1-rc.2",
|
|
69
|
-
"@deepseek-ai/dsh-user-questions": "0.2.1-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-agent": ">=0.2.1-rc.2 <0.3.0",
|
|
58
|
+
"@deepseek-ai/dsh-agent-preset-registry": ">=0.2.1-rc.2 <0.3.0",
|
|
59
|
+
"@deepseek-ai/dsh-attachment": ">=0.2.1-rc.2 <0.3.0",
|
|
60
|
+
"@deepseek-ai/dsh-commands": ">=0.2.1-rc.2 <0.3.0",
|
|
61
|
+
"@deepseek-ai/dsh-goal": ">=0.2.1-rc.2 <0.3.0",
|
|
62
|
+
"@deepseek-ai/dsh-llm": ">=0.2.1-rc.2 <0.3.0",
|
|
63
|
+
"@deepseek-ai/dsh-permission-presets": ">=0.2.1-rc.2 <0.3.0",
|
|
64
|
+
"@deepseek-ai/dsh-sandbox-policy": ">=0.2.1-rc.2 <0.3.0",
|
|
65
|
+
"@deepseek-ai/dsh-session": ">=0.2.1-rc.2 <0.3.0",
|
|
66
|
+
"@deepseek-ai/dsh-system-prompt": ">=0.2.1-rc.2 <0.3.0",
|
|
67
|
+
"@deepseek-ai/dsh-tools": ">=0.2.1-rc.2 <0.3.0",
|
|
68
|
+
"@deepseek-ai/dsh-user-approval": ">=0.2.1-rc.2 <0.3.0",
|
|
69
|
+
"@deepseek-ai/dsh-user-questions": ">=0.2.1-rc.2 <0.3.0",
|
|
70
70
|
"@dsh-enhanced/assistant-automations": ">0.1.7 <0.2.0",
|
|
71
71
|
"@dsh-enhanced/assistant-evaluation": ">0.1.24 <0.2.0",
|
|
72
72
|
"@dsh-enhanced/assistant-evolution": ">0.1.7 <0.2.0",
|
|
73
73
|
"@dsh-enhanced/assistant-goals": ">0.1.24 <0.2.0",
|
|
74
74
|
"@dsh-enhanced/assistant-policy": ">=0.1.43 <0.2.0",
|
|
75
|
-
"@deepseek-ai/dsh-session-persistence": "0.2.1-rc.2"
|
|
75
|
+
"@deepseek-ai/dsh-session-persistence": ">=0.2.1-rc.2 <0.3.0"
|
|
76
76
|
},
|
|
77
77
|
"peerDependenciesMeta": {
|
|
78
78
|
"@deepseek-ai/cordis": {
|
|
@@ -163,12 +163,12 @@
|
|
|
163
163
|
"typescript": "6.0.3",
|
|
164
164
|
"vitest": "4.1.8",
|
|
165
165
|
"@deepseek-ai/dsh-session-persistence": "0.2.1-rc.2",
|
|
166
|
-
"@dsh-enhanced/assistant-
|
|
167
|
-
"@dsh-enhanced/assistant-
|
|
168
|
-
"@dsh-enhanced/assistant-
|
|
169
|
-
"@dsh-enhanced/assistant-verifier": "0.1.
|
|
170
|
-
"@dsh-enhanced/assistant-
|
|
171
|
-
"@dsh-enhanced/assistant-
|
|
166
|
+
"@dsh-enhanced/assistant-automations": "0.1.67",
|
|
167
|
+
"@dsh-enhanced/assistant-evolution": "0.1.67",
|
|
168
|
+
"@dsh-enhanced/assistant-goals": "0.1.67",
|
|
169
|
+
"@dsh-enhanced/assistant-verifier": "0.1.67",
|
|
170
|
+
"@dsh-enhanced/assistant-evaluation": "0.1.67",
|
|
171
|
+
"@dsh-enhanced/assistant-policy": "0.1.67"
|
|
172
172
|
},
|
|
173
173
|
"scripts": {
|
|
174
174
|
"build": "tsc -p tsconfig.build.json",
|