kiokuko-dsh 0.1.16 → 0.1.18

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.
Files changed (54) hide show
  1. package/README.md +1 -1
  2. package/dist/dsh/composition.d.ts +12 -24
  3. package/dist/dsh/composition.d.ts.map +1 -1
  4. package/dist/dsh/composition.js +11 -17
  5. package/dist/dsh/composition.js.map +1 -1
  6. package/dist/dsh/host-adapter.d.ts +5 -0
  7. package/dist/dsh/host-adapter.d.ts.map +1 -1
  8. package/dist/dsh/host-adapter.js +128 -33
  9. package/dist/dsh/host-adapter.js.map +1 -1
  10. package/dist/dsh/index.d.ts +1 -0
  11. package/dist/dsh/index.d.ts.map +1 -1
  12. package/dist/dsh/index.js +1 -0
  13. package/dist/dsh/index.js.map +1 -1
  14. package/dist/dsh/intake-gate.d.ts +2 -0
  15. package/dist/dsh/intake-gate.d.ts.map +1 -1
  16. package/dist/dsh/intake-gate.js +4 -0
  17. package/dist/dsh/intake-gate.js.map +1 -1
  18. package/dist/dsh/intake-profile-resolver.d.ts.map +1 -1
  19. package/dist/dsh/intake-profile-resolver.js +15 -10
  20. package/dist/dsh/intake-profile-resolver.js.map +1 -1
  21. package/dist/dsh/run-intake-service.d.ts +7 -0
  22. package/dist/dsh/run-intake-service.d.ts.map +1 -1
  23. package/dist/dsh/run-intake-service.js +17 -10
  24. package/dist/dsh/run-intake-service.js.map +1 -1
  25. package/dist/dsh/session-bridge.d.ts +27 -115
  26. package/dist/dsh/session-bridge.d.ts.map +1 -1
  27. package/dist/dsh/session-bridge.js +63 -545
  28. package/dist/dsh/session-bridge.js.map +1 -1
  29. package/dist/dsh/session-memory-finalizer.d.ts +106 -0
  30. package/dist/dsh/session-memory-finalizer.d.ts.map +1 -0
  31. package/dist/dsh/session-memory-finalizer.js +787 -0
  32. package/dist/dsh/session-memory-finalizer.js.map +1 -0
  33. package/dist/dsh/task-intake.d.ts +4 -0
  34. package/dist/dsh/task-intake.d.ts.map +1 -1
  35. package/dist/dsh/task-intake.js +12 -1
  36. package/dist/dsh/task-intake.js.map +1 -1
  37. package/dist/dsh/user-interaction.d.ts.map +1 -1
  38. package/dist/dsh/user-interaction.js +7 -1
  39. package/dist/dsh/user-interaction.js.map +1 -1
  40. package/dist/enno-oduno/schemas.d.ts.map +1 -1
  41. package/dist/enno-oduno/schemas.js +9 -7
  42. package/dist/enno-oduno/schemas.js.map +1 -1
  43. package/dist/enno-oduno/validation-errors.js +1 -1
  44. package/dist/enno-oduno/validation-errors.js.map +1 -1
  45. package/dist/serialization/validate.d.ts +4 -0
  46. package/dist/serialization/validate.d.ts.map +1 -1
  47. package/dist/serialization/validate.js +10 -0
  48. package/dist/serialization/validate.js.map +1 -1
  49. package/docs/architecture.md +26 -5
  50. package/docs/dsh-plugin.md +16 -13
  51. package/docs/execution-ledger.md +17 -3
  52. package/dsh/cordis.patch.yml +1 -1
  53. package/migrations/002_dsh_memory_finalization.sql +119 -0
  54. package/package.json +4 -3
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Kiokuko DeepSeek Harness Plugin
1
+ # Kiokuko(記憶庫) DeepSeek Harness Plugin
2
2
 
3
3
  [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [한국어](README.ko.md)
4
4
 
@@ -1,7 +1,7 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import { DshEnnoController } from './enno-controller.js';
3
3
  import { DshIntakeGate, type DshPreStepEvent } from './intake-gate.js';
4
- import { type DshRunLifecycle, type DshSessionBridge, type DshSessionRunResolver } from './session-bridge.js';
4
+ import { type DshCloseIntent, type DshNativeSession, type DshRunLifecycle } from './session-bridge.js';
5
5
  import { type DshToolPolicy } from './tool-policy.js';
6
6
  import { type DshToolHost, type DshToolRegistrationContext } from './tools.js';
7
7
  import { DshPonytailModes, type DshPonytailCommandContext } from './commands.js';
@@ -9,17 +9,13 @@ import { type DshSkillContext } from './standard-skill-provider.js';
9
9
  import { mountSoulPrompt } from './prompt-policy.js';
10
10
  import type { DshUserQuestions } from './user-interaction.js';
11
11
  import type { DshRuntime } from './runtime.js';
12
+ import type { DshMemoryFinalizer } from './session-memory-finalizer.js';
12
13
  /** The optional, explicit host adapter supplied by a dsh profile. */
13
14
  export declare const KIOKUKO_DSH_HOST_SERVICE = "kiokukoDsh";
14
15
  export interface DshNativePreStepPayload {
15
16
  readonly agent: {
16
17
  readonly id: string;
17
- readonly session?: {
18
- readonly id: string;
19
- readonly header?: {
20
- readonly cwd?: string;
21
- };
22
- };
18
+ readonly session?: DshNativeSession;
23
19
  readonly sessionId?: string;
24
20
  };
25
21
  readonly messages: readonly unknown[];
@@ -56,25 +52,17 @@ export interface DshCompositionHost {
56
52
  readonly toolPolicy?: DshToolPolicy;
57
53
  readonly intakeGate?: DshIntakeGate;
58
54
  readonly mapPreStep?: (payload: DshNativePreStepPayload) => DshPreStepEvent | PromiseLike<DshPreStepEvent>;
59
- readonly bridge?: DshSessionBridge;
60
- readonly bridgeOwner?: 'composition' | 'host';
61
- readonly resolveSessionRunId?: DshSessionRunResolver;
55
+ /** Read-only exact active run binding; never used to mirror session events. */
56
+ readonly resolveSessionRunId?: (session: {
57
+ readonly id: string;
58
+ }) => string | undefined;
59
+ readonly memoryFinalizer?: Pick<DshMemoryFinalizer, 'start' | 'dispose' | 'whenIdle'>;
60
+ readonly memoryFinalizerOwner?: 'composition' | 'host';
62
61
  readonly ennoController?: DshEnnoController;
63
62
  readonly lifecycle?: DshRunLifecycle;
64
- readonly resolveIdleClose?: (agentId: string, sessionId?: string, nativeSession?: object, nativeAgent?: object) => {
65
- readonly runId: string;
66
- readonly status: 'completed' | 'failed' | 'cancelled';
67
- } | PromiseLike<{
68
- readonly runId: string;
69
- readonly status: 'completed' | 'failed' | 'cancelled';
70
- } | undefined> | undefined;
71
- readonly resolveSessionClose?: (sessionId: string, nativeSession: object) => {
72
- readonly runId: string;
73
- readonly status: 'completed' | 'failed' | 'cancelled';
74
- } | PromiseLike<{
75
- readonly runId: string;
76
- readonly status: 'completed' | 'failed' | 'cancelled';
77
- } | undefined> | undefined;
63
+ readonly lifecycleOwner?: 'composition' | 'host';
64
+ readonly resolveIdleClose?: (agentId: string, sessionId?: string, nativeSession?: object, nativeAgent?: object) => DshCloseIntent | PromiseLike<DshCloseIntent | undefined> | undefined;
65
+ readonly resolveSessionClose?: (sessionId: string, nativeSession: object) => DshCloseIntent | PromiseLike<DshCloseIntent | undefined> | undefined;
78
66
  }
79
67
  type DshToolHostRegistration = DshToolRegistrationContext['tools']['register'];
80
68
  export interface DshCompositionHandle {
@@ -1 +1 @@
1
- {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { mountDshDurabilityBarriers, mountDshIdleLifecycle, mountDshSessionBridge, mountDshSessionLifecycle } from './session-bridge.js';
2
+ import { mountDshIdleLifecycle, mountDshSessionLifecycle } from './session-bridge.js';
3
3
  import { mountDshToolPolicy } from './tool-policy.js';
4
4
  import { mountDshModelTools } from './tools.js';
5
5
  import { DshPonytailModes, mountDshPonytailCommand } from './commands.js';
@@ -104,6 +104,13 @@ export async function mountDshComposition(ctx, host) {
104
104
  if (host.runtimeOwner !== 'host')
105
105
  cleanupDisposers.push(disposer);
106
106
  }
107
+ if (host.memoryFinalizer !== undefined) {
108
+ await host.memoryFinalizer.start();
109
+ const closeFinalizer = async () => host.memoryFinalizer.dispose();
110
+ setupResourceDisposers.push(closeFinalizer);
111
+ if (host.memoryFinalizerOwner !== 'host')
112
+ cleanupDisposers.push(closeFinalizer);
113
+ }
107
114
  if (host.skills !== undefined) {
108
115
  const disposer = mountStandardSkillProvider({ skills: host.skills });
109
116
  setupResourceDisposers.push(disposer);
@@ -144,21 +151,6 @@ export async function mountDshComposition(ctx, host) {
144
151
  throw new Error('kiokuko-dsh intake gate requires a native task projection');
145
152
  ingressDisposers.push(mountNativeIntakeGate(ctx, host.intakeGate, host.mapPreStep));
146
153
  }
147
- if (host.bridge !== undefined) {
148
- if (host.resolveSessionRunId === undefined)
149
- throw new Error('kiokuko-dsh session bridge requires a run resolver');
150
- ingressDisposers.push(mountDshSessionBridge(ctx, host.bridge, host.resolveSessionRunId));
151
- ingressDisposers.push(mountDshDurabilityBarriers(ctx, host.bridge));
152
- const closeBridge = async () => {
153
- if (host.lifecycle !== undefined)
154
- await host.lifecycle.dispose();
155
- else
156
- await host.bridge.close();
157
- };
158
- setupResourceDisposers.push(closeBridge);
159
- if (host.bridgeOwner !== 'host')
160
- cleanupDisposers.push(closeBridge);
161
- }
162
154
  if (host.ennoController !== undefined)
163
155
  ingressDisposers.push(mountNativeEnnoController(ctx, host.ennoController));
164
156
  if (host.lifecycle !== undefined) {
@@ -169,8 +161,10 @@ export async function mountDshComposition(ctx, host) {
169
161
  throw new Error('kiokuko-dsh lifecycle requires the native DSH session flush service');
170
162
  ingressDisposers.push(mountDshIdleLifecycle(ctx, host.lifecycle, host.resolveIdleClose, async (session) => { await nativeSessions.flush(session); }));
171
163
  if (host.resolveSessionClose !== undefined) {
172
- ingressDisposers.push(mountDshSessionLifecycle(ctx, host.lifecycle, host.resolveSessionClose));
164
+ ingressDisposers.push(mountDshSessionLifecycle(ctx, host.lifecycle, host.resolveSessionClose, async (session) => { await nativeSessions.flush(session); }));
173
165
  }
166
+ if (host.lifecycleOwner !== 'host')
167
+ cleanupDisposers.push(() => host.lifecycle.dispose());
174
168
  }
175
169
  }
176
170
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Context } from '@deepseek-ai/cordis';
2
2
  import { KIOKUKO_DSH_HOST_SERVICE, type DshCompositionHost } from './composition.js';
3
+ import { type DshLlm, type DshSessionQuery } from './session-memory-finalizer.js';
3
4
  import { type DshAdvisoryCall } from './advisory-runner.js';
4
5
  export interface DshAdvisoryHost {
5
6
  readonly verifyReadOnly: (call: DshAdvisoryCall) => boolean | PromiseLike<boolean>;
@@ -10,6 +11,10 @@ export interface DshHostAdapterOptions {
10
11
  readonly migrationsDirectory?: string;
11
12
  readonly repositoryRoot?: string;
12
13
  readonly now?: () => string;
14
+ /** Test/custom host override; the normal DSH bundle injects sessionQuery. */
15
+ readonly sessionQuery?: DshSessionQuery;
16
+ /** Test/custom host override; the normal DSH bundle injects llm. */
17
+ readonly llm?: DshLlm;
13
18
  /** Optional host-owned isolated, read-only advisory execution surface. */
14
19
  readonly advisory?: DshAdvisoryHost;
15
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"host-adapter.d.ts","sourceRoot":"","sources":["../../src/dsh/host-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAmBzB,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAuC3G,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAMD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAqJD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA+2BtG;AAkBD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
1
+ {"version":3,"file":"host-adapter.d.ts","sourceRoot":"","sources":["../../src/dsh/host-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAkBzB,OAAO,EAA0C,KAAK,MAAM,EAA8B,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAErJ,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AA+C3G,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAMD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAA;IACvC,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAqJD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAq8BtG;AAWD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
@@ -11,7 +11,8 @@ import { resolveCapabilities } from '../akinator/capabilities.js';
11
11
  import { readAkinatorSession, readRunIntakeLink } from '../akinator/store.js';
12
12
  import { DshToolPolicy } from './tool-policy.js';
13
13
  import { DSH_MODEL_FACING_OPERATIONS, } from './tools.js';
14
- import { DshSessionBridge, DshRunLifecycle } from './session-bridge.js';
14
+ import { DshRunLifecycle } from './session-bridge.js';
15
+ import { DshMemoryFinalizer, dshTurnBoundarySeq } from './session-memory-finalizer.js';
15
16
  import { DshConfirmationController, DshEnnoController } from './enno-controller.js';
16
17
  import { DshAdvisoryRunner } from './advisory-runner.js';
17
18
  import { DshPonytailModes, dshPonytailOwnerKey } from './commands.js';
@@ -30,6 +31,13 @@ import { curateMemoryCandidates } from '../memory/curator.js';
30
31
  import { checkpointDshMemory } from '../memory/scoped-memory.js';
31
32
  import { LedgerStore } from '../ledger/store.js';
32
33
  import { ENNO_APPLICABLE_TASK_TYPES } from '../enno-oduno/types.js';
34
+ function sessionEventSource(value) {
35
+ const source = value;
36
+ if (typeof source?.snapshotEvents !== 'function') {
37
+ throw new KiokukoError('INTEGRITY_ERROR', 'The exact native DSH session event source is unavailable');
38
+ }
39
+ return source;
40
+ }
33
41
  function textFromMessages(messages, fallback) {
34
42
  const userTexts = [];
35
43
  for (const value of messages) {
@@ -173,6 +181,8 @@ export function createDshHostAdapter(ctx, options = {}) {
173
181
  const userQuestions = native.get('userQuestions', false);
174
182
  const sessions = native.get('sessions', false);
175
183
  const agents = native.get('agents', false);
184
+ const sessionQuery = options.sessionQuery ?? native.get('sessionQuery', false);
185
+ const llm = options.llm ?? native.get('llm', false);
176
186
  const advisory = options.advisory ?? native.get('dshAdvisory', false);
177
187
  const root = realpathSync(options.repositoryRoot ?? process.cwd());
178
188
  const runtime = new DshRuntime({
@@ -190,7 +200,12 @@ export function createDshHostAdapter(ctx, options = {}) {
190
200
  const advisoryRounds = new Map();
191
201
  const resumedLeases = new Map();
192
202
  const policy = new DshToolPolicy({ phase: 'intake', runId: 'pending', workspace: 'pending', orchestrationId: 'pending', revision: 1, routeEpoch: 0 });
193
- const bridge = new DshSessionBridge({ runtime });
203
+ const memoryFinalizer = new DshMemoryFinalizer({
204
+ runtime,
205
+ ...(sessionQuery === undefined ? {} : { sessionQuery }),
206
+ ...(llm === undefined ? {} : { llm }),
207
+ ...(options.now === undefined ? {} : { now: options.now }),
208
+ });
194
209
  const modes = new DshPonytailModes();
195
210
  const confirmationAnswerer = userQuestions === undefined ? undefined : createDshConfirmationAnswerer(userQuestions);
196
211
  let prepareGeneration = 0;
@@ -289,6 +304,18 @@ export function createDshHostAdapter(ctx, options = {}) {
289
304
  policy.setState(next);
290
305
  }
291
306
  };
307
+ const bindAndRecord = async (event, result, generation) => {
308
+ const sourceStartSeq = event.sourceStartSeq
309
+ ?? dshTurnBoundarySeq(sessionEventSource(event.nativeSession), event.turn, 'start');
310
+ await memoryFinalizer.bindRunStart({
311
+ runId: result.prepared.run.runId,
312
+ workspace: result.prepared.project.workspace,
313
+ dshSessionId: event.sessionId,
314
+ sourceStartSeq,
315
+ sourceStartTurn: event.turn,
316
+ });
317
+ record(event, result, generation);
318
+ };
292
319
  const refreshContinuedWorkLease = async (item, expected) => {
293
320
  const expectedWorkUnitId = expected.nextAction === 'execute_work_unit'
294
321
  ? expected.directive?.workUnit?.id
@@ -331,6 +358,7 @@ export function createDshHostAdapter(ctx, options = {}) {
331
358
  sessionId: event.sessionId,
332
359
  agentId: event.agent.id,
333
360
  turn: event.turn,
361
+ sourceStartSeq: event.sourceStartSeq ?? null,
334
362
  task: event.task,
335
363
  cwd: event.cwd,
336
364
  profileHints: event.profileHints ?? null,
@@ -409,7 +437,7 @@ export function createDshHostAdapter(ctx, options = {}) {
409
437
  ...(event.nativeAgent === undefined ? {} : { nativeAgent: event.nativeAgent }),
410
438
  ...(event.nativeSession === undefined ? {} : { nativeSession: event.nativeSession }),
411
439
  });
412
- record(event, continued, generation);
440
+ await bindAndRecord(event, continued, generation);
413
441
  }
414
442
  return continued;
415
443
  }
@@ -427,12 +455,12 @@ export function createDshHostAdapter(ctx, options = {}) {
427
455
  ...(event.nativeAgent === undefined ? {} : { nativeAgent: event.nativeAgent }),
428
456
  ...(event.nativeSession === undefined ? {} : { nativeSession: event.nativeSession }),
429
457
  });
430
- record(event, resumed, generation);
458
+ await bindAndRecord(event, resumed, generation);
431
459
  return resumed;
432
460
  }
433
461
  const prepared = await super.prepare(event);
434
462
  if (prepared.admitted)
435
- record(event, prepared, generation);
463
+ await bindAndRecord(event, prepared, generation);
436
464
  return prepared;
437
465
  }
438
466
  async preStep(event, next) {
@@ -598,6 +626,7 @@ export function createDshHostAdapter(ctx, options = {}) {
598
626
  const cwd = boundSession?.header?.cwd;
599
627
  if (typeof cwd !== 'string' || cwd.length === 0)
600
628
  throw new Error('kiokuko-dsh native session cwd is unavailable');
629
+ const sourceStartSeq = dshTurnBoundarySeq(sessionEventSource(boundSession), payload.turn, 'start');
601
630
  const catalog = await capabilityCatalog(skills, tools, {
602
631
  agent: { id: payload.agent.id },
603
632
  nativeAgent: payload.agent,
@@ -625,6 +654,7 @@ export function createDshHostAdapter(ctx, options = {}) {
625
654
  sessionId,
626
655
  ...(boundSession === undefined ? {} : { nativeSession: boundSession }),
627
656
  turn: payload.turn,
657
+ sourceStartSeq,
628
658
  step: payload.step,
629
659
  task,
630
660
  cwd,
@@ -931,12 +961,6 @@ export function createDshHostAdapter(ctx, options = {}) {
931
961
  advisoryRunner,
932
962
  submitAdvisory,
933
963
  });
934
- const resolveSessionRunId = (session) => {
935
- const item = currentSession(session.id);
936
- if (item?.nativeSession !== undefined && item.nativeSession !== session)
937
- return undefined;
938
- return item?.closed === true ? undefined : item?.runId;
939
- };
940
964
  const resolveIdleClose = async (agentId, sessionId, nativeSession, nativeAgent) => {
941
965
  const item = currentForAgentEvent(agentId, sessionId, undefined, nativeSession, nativeAgent);
942
966
  if (item === undefined || item.closed)
@@ -952,12 +976,20 @@ export function createDshHostAdapter(ctx, options = {}) {
952
976
  if (item.prepared.intake.profile.taskType === 'chat')
953
977
  return undefined;
954
978
  if (state.status === 'completed' || state.nextAction === 'complete') {
955
- return { runId: item.runId, status: item.failed ? 'failed' : 'completed' };
979
+ return item.failed
980
+ ? { runId: item.runId, status: 'failed' }
981
+ : { runId: item.runId, status: 'completed', terminalTurn: item.turn };
956
982
  }
957
983
  // Idle means the driver has no active work, not that Enno reached a
958
984
  // terminal state. Keep only genuinely resumable active states open.
959
985
  return undefined;
960
986
  };
987
+ const resolveSessionRunId = (session) => {
988
+ const item = currentSession(session.id);
989
+ if (item?.nativeSession !== undefined && item.nativeSession !== session)
990
+ return undefined;
991
+ return item?.closed === true ? undefined : item?.runId;
992
+ };
961
993
  const resolveSessionClose = async (sessionId, nativeSession) => {
962
994
  const item = currentSession(sessionId);
963
995
  if (item === undefined || item.closed || item.nativeSession !== nativeSession)
@@ -970,12 +1002,38 @@ export function createDshHostAdapter(ctx, options = {}) {
970
1002
  if (state.status === 'blocked' || state.nextAction === 'report_blocker')
971
1003
  return { runId: item.runId, status: 'failed' };
972
1004
  if (item.prepared.intake.profile.taskType === 'chat' || state.status === 'completed' || state.nextAction === 'complete') {
973
- return { runId: item.runId, status: 'completed' };
1005
+ return { runId: item.runId, status: 'completed', terminalTurn: item.turn };
974
1006
  }
975
1007
  return { runId: item.runId, status: 'cancelled' };
976
1008
  };
977
1009
  const closeRun = async (input) => {
978
- await lifecycleClose(runtime)(input);
1010
+ let scheduled = false;
1011
+ await runtime.withDatabase((database) => withImmediateTransaction(database, () => {
1012
+ const store = new LedgerStore(database);
1013
+ const before = store.readRun(input.runId);
1014
+ if (before === undefined)
1015
+ throw new KiokukoError('INTEGRITY_ERROR', 'Run close target does not exist');
1016
+ if (before.status === 'intake' || before.status === 'active') {
1017
+ terminalizeLedgerRunInTransaction(database, input.runId, input.status);
1018
+ }
1019
+ else if (before.status !== input.status) {
1020
+ throw new KiokukoError('CONFLICT', 'Run close status is immutable');
1021
+ }
1022
+ if (input.status === 'completed') {
1023
+ if (input.sourceEndSeq === undefined) {
1024
+ throw new KiokukoError('INTEGRITY_ERROR', 'Completed DSH run has no checkpointed log end');
1025
+ }
1026
+ memoryFinalizer.scheduleInTransaction(database, {
1027
+ runId: before.runId,
1028
+ workspace: before.workspace,
1029
+ dshSessionId: before.dshSessionId,
1030
+ sourceEndSeq: input.sourceEndSeq,
1031
+ });
1032
+ scheduled = true;
1033
+ }
1034
+ }));
1035
+ if (scheduled)
1036
+ memoryFinalizer.kick();
979
1037
  const items = [...turns.values()].filter((candidate) => candidate.runId === input.runId);
980
1038
  for (const item of items) {
981
1039
  ennoController.retire({
@@ -1008,8 +1066,22 @@ export function createDshHostAdapter(ctx, options = {}) {
1008
1066
  if (item !== undefined)
1009
1067
  item.failed = true;
1010
1068
  });
1011
- const bridgeLifecycle = new DshRunLifecycle({ bridge, closeRun });
1012
- retireSupersededRun = (item, status) => bridgeLifecycle.closeTurn({ runId: item.runId, status });
1069
+ const runLifecycle = new DshRunLifecycle({ closeRun });
1070
+ retireSupersededRun = async (item, status) => {
1071
+ if (status !== 'completed') {
1072
+ await runLifecycle.closeTurn({ runId: item.runId, status });
1073
+ return;
1074
+ }
1075
+ if (item.nativeSession === undefined || sessions?.flush === undefined) {
1076
+ throw new KiokukoError('CONFLICT', 'Completed DSH run requires its exact native session checkpoint');
1077
+ }
1078
+ await sessions.flush(item.nativeSession);
1079
+ await runLifecycle.closeTurn({
1080
+ runId: item.runId,
1081
+ status,
1082
+ sourceEndSeq: dshTurnBoundarySeq(sessionEventSource(item.nativeSession), item.turn, 'end'),
1083
+ });
1084
+ };
1013
1085
  const host = {
1014
1086
  ...(skills === undefined ? {} : { skills: skills }),
1015
1087
  ...(systemPrompt === undefined ? {} : { systemPrompt }),
@@ -1024,11 +1096,12 @@ export function createDshHostAdapter(ctx, options = {}) {
1024
1096
  toolPolicy: policy,
1025
1097
  }),
1026
1098
  ...(tools === undefined ? {} : { intakeGate: gate, mapPreStep }),
1027
- bridge,
1028
- bridgeOwner: 'host',
1099
+ memoryFinalizer,
1100
+ memoryFinalizerOwner: 'host',
1029
1101
  resolveSessionRunId,
1030
1102
  ennoController,
1031
- lifecycle: bridgeLifecycle,
1103
+ lifecycle: runLifecycle,
1104
+ lifecycleOwner: 'host',
1032
1105
  resolveIdleClose,
1033
1106
  resolveSessionClose,
1034
1107
  };
@@ -1060,25 +1133,54 @@ export function createDshHostAdapter(ctx, options = {}) {
1060
1133
  catch (error) {
1061
1134
  failures.push(error);
1062
1135
  }
1063
- const remainingChats = [...new Map([...turns.values()]
1064
- .filter((item) => !item.closed && item.prepared.intake.profile.taskType === 'chat')
1136
+ const remainingRuns = [...new Map([...turns.values()]
1137
+ .filter((item) => !item.closed)
1065
1138
  .map((item) => [item.runId, item])).values()];
1066
- for (const item of remainingChats) {
1139
+ for (const item of remainingRuns) {
1067
1140
  try {
1068
- await bridgeLifecycle.closeTurn({ runId: item.runId, status: item.failed ? 'failed' : 'completed' });
1141
+ let status;
1142
+ if (item.failed)
1143
+ status = 'failed';
1144
+ else if (item.prepared.intake.profile.taskType === 'chat')
1145
+ status = 'cancelled';
1146
+ else {
1147
+ const state = await runtime.withDatabase((database) => stateForRun(database, item));
1148
+ status = state.status === 'completed' || state.nextAction === 'complete'
1149
+ ? 'completed'
1150
+ : state.status === 'blocked' || state.nextAction === 'report_blocker'
1151
+ ? 'failed'
1152
+ : 'cancelled';
1153
+ }
1154
+ if (status === 'completed') {
1155
+ if (item.nativeSession === undefined || sessions?.flush === undefined) {
1156
+ throw new KiokukoError('CONFLICT', 'Completed DSH run requires its exact native session checkpoint');
1157
+ }
1158
+ await sessions.flush(item.nativeSession);
1159
+ }
1160
+ await runLifecycle.closeTurn({
1161
+ runId: item.runId,
1162
+ status,
1163
+ ...(status !== 'completed' ? {} : {
1164
+ sourceEndSeq: dshTurnBoundarySeq(sessionEventSource(item.nativeSession), item.turn, 'end'),
1165
+ }),
1166
+ });
1069
1167
  }
1070
1168
  catch (error) {
1071
1169
  failures.push(error);
1072
1170
  }
1073
1171
  }
1074
1172
  try {
1075
- await bridgeLifecycle.dispose();
1173
+ await runLifecycle.dispose();
1174
+ }
1175
+ catch (error) {
1176
+ failures.push(error);
1177
+ }
1178
+ try {
1179
+ await memoryFinalizer.dispose();
1076
1180
  }
1077
1181
  catch (error) {
1078
1182
  failures.push(error);
1079
1183
  }
1080
- // Observer failures are deliberately fail-closed, but must not prevent
1081
- // the database/runtime from being closed and releasing its resources.
1082
1184
  try {
1083
1185
  await runtime.close();
1084
1186
  }
@@ -1099,13 +1201,6 @@ export function createDshHostAdapter(ctx, options = {}) {
1099
1201
  },
1100
1202
  };
1101
1203
  }
1102
- function lifecycleClose(runtime) {
1103
- return ({ runId, status }) => runtime.withDatabase((database) => {
1104
- const row = new LedgerStore(database).readRun(runId);
1105
- if (row !== undefined && (row.status === 'intake' || row.status === 'active'))
1106
- terminalizeLedgerRunInTransaction(database, runId, status);
1107
- });
1108
- }
1109
1204
  function isEnnoResponse(value) {
1110
1205
  return typeof value === 'object' && value !== null && 'ennoOduno' in value && typeof value.ennoOduno === 'object';
1111
1206
  }