kiokuko-dsh 0.1.5 → 0.1.7

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.
@@ -18,6 +18,13 @@ export interface DshNativeCommandDefinition {
18
18
  export interface DshNativeCommandInvocation {
19
19
  readonly rawInput: string;
20
20
  readonly signal: AbortSignal;
21
+ readonly agent?: {
22
+ readonly id: string;
23
+ readonly session?: {
24
+ readonly id: string;
25
+ };
26
+ readonly sessionId?: string;
27
+ };
21
28
  }
22
29
  export type DshNativeCommandResult = {
23
30
  readonly kind: 'success';
@@ -29,14 +36,16 @@ export type DshNativeCommandResult = {
29
36
  /** Own request-local Ponytail state; it never changes global configuration. */
30
37
  export declare class DshPonytailModes {
31
38
  #private;
32
- begin(requestId: string): void;
39
+ begin(requestId: string, owner?: string): void;
33
40
  isActive(requestId: string): boolean;
34
41
  set(requestId: string, mode: PonytailMode): PonytailMode;
35
- execute(args: readonly string[]): string;
42
+ execute(args: readonly string[], owner?: string): string;
36
43
  mode(requestId: string): PonytailMode | undefined;
37
44
  end(requestId: string): boolean;
38
45
  dispose(): void;
39
46
  }
47
+ /** Stable owner key shared by turn admission and native command dispatch. */
48
+ export declare function dshPonytailOwnerKey(agentId: string, sessionId: string): string;
40
49
  export declare function mountDshPonytailCommand(ctx: DshPonytailCommandContext, modes: DshPonytailModes): () => void;
41
50
  /** Bind the command handler to one active request without leaking that request identity into the command text. */
42
51
  export declare function executeDshPonytailCommand(modes: DshPonytailModes, requestId: string, args: readonly string[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/dsh/commands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,oCAAqC,CAAA;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE;QACR,6EAA6E;QAC7E,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC,GAClF,CAAC,CAAC,UAAU,EAAE,0BAA0B,KAAK,MAAM,IAAI,CAAC,CAAA;KAC7D,CAAA;CACF;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACvH;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AASrD,+EAA+E;AAC/E,qBAAa,gBAAgB;;IAI3B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY;IAOxD,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM;IAMxC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAO/B,OAAO,IAAI,IAAI;CAIhB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAsB3G;AAED,kHAAkH;AAClH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAGrH"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/dsh/commands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,oCAAqC,CAAA;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE;QACR,6EAA6E;QAC7E,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,KAAK,MAAM,IAAI,CAAC,GAClF,CAAC,CAAC,UAAU,EAAE,0BAA0B,KAAK,MAAM,IAAI,CAAC,CAAA;KAC7D,CAAA;CACF;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACvH;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAA;QAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAC5B,CAAA;CACF;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AASrD,+EAA+E;AAC/E,qBAAa,gBAAgB;;IAI3B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAU9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY;IAOxD,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBxD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAS/B,OAAO,IAAI,IAAI;CAIhB;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,gBAAgB,GAAG,MAAM,IAAI,CA0B3G;AAED,kHAAkH;AAClH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAGrH"}
@@ -8,48 +8,68 @@ function parseMode(args) {
8
8
  }
9
9
  /** Own request-local Ponytail state; it never changes global configuration. */
10
10
  export class DshPonytailModes {
11
- #activeRequestId;
12
- #mode;
13
- begin(requestId) {
11
+ #modes = new Map();
12
+ #requestByOwner = new Map();
13
+ begin(requestId, owner) {
14
14
  if (requestId.length === 0 || requestId.length > 256 || /[\p{Cc}]/u.test(requestId))
15
15
  throw new KiokukoError('VALIDATION_ERROR', 'requestId is invalid');
16
- if (this.#activeRequestId !== undefined && this.#activeRequestId !== requestId)
17
- throw new KiokukoError('CONFLICT', 'another logical request is already active');
18
- this.#activeRequestId = requestId;
19
- this.#mode = undefined;
16
+ if (!this.#modes.has(requestId))
17
+ this.#modes.set(requestId, undefined);
18
+ if (owner !== undefined) {
19
+ const previous = this.#requestByOwner.get(owner);
20
+ if (previous !== undefined && previous !== requestId)
21
+ this.end(previous);
22
+ this.#requestByOwner.set(owner, requestId);
23
+ }
20
24
  }
21
25
  isActive(requestId) {
22
- return this.#activeRequestId === requestId;
26
+ return this.#modes.has(requestId);
23
27
  }
24
28
  set(requestId, mode) {
25
- if (this.#activeRequestId !== requestId)
29
+ if (!this.#modes.has(requestId))
26
30
  throw new KiokukoError('CONFLICT', 'ponytail is available only for the active logical request');
27
31
  if (!PONYTAIL_MODES.includes(mode))
28
32
  throw new KiokukoError('VALIDATION_ERROR', 'Unknown ponytail mode');
29
- this.#mode = mode;
33
+ this.#modes.set(requestId, mode);
30
34
  return mode;
31
35
  }
32
- execute(args) {
33
- if (this.#activeRequestId === undefined)
34
- throw new KiokukoError('CONFLICT', 'ponytail is available only for the active logical request');
35
- const mode = this.set(this.#activeRequestId, parseMode(args));
36
+ execute(args, owner) {
37
+ const requestId = owner === undefined
38
+ ? this.#modes.size === 1 ? this.#modes.keys().next().value : undefined
39
+ : this.#requestByOwner.get(owner);
40
+ if (requestId === undefined) {
41
+ const message = this.#modes.size === 0
42
+ ? 'ponytail is available only for an active logical request'
43
+ : owner === undefined && this.#modes.size > 1
44
+ ? 'ponytail requires the current request scope when multiple requests are active'
45
+ : 'ponytail is not active for the current request';
46
+ throw new KiokukoError('CONFLICT', message);
47
+ }
48
+ const mode = this.set(requestId, parseMode(args));
36
49
  return `Ponytail mode set to ${mode} for the active request.`;
37
50
  }
38
51
  mode(requestId) {
39
- return this.#activeRequestId === requestId ? this.#mode : undefined;
52
+ return this.#modes.get(requestId);
40
53
  }
41
54
  end(requestId) {
42
- if (this.#activeRequestId !== requestId)
55
+ const deleted = this.#modes.delete(requestId);
56
+ if (!deleted)
43
57
  return false;
44
- this.#activeRequestId = undefined;
45
- this.#mode = undefined;
46
- return true;
58
+ for (const [owner, activeRequestId] of this.#requestByOwner) {
59
+ if (activeRequestId === requestId)
60
+ this.#requestByOwner.delete(owner);
61
+ }
62
+ return deleted;
47
63
  }
48
64
  dispose() {
49
- this.#activeRequestId = undefined;
50
- this.#mode = undefined;
65
+ this.#modes.clear();
66
+ this.#requestByOwner.clear();
51
67
  }
52
68
  }
69
+ /** Stable owner key shared by turn admission and native command dispatch. */
70
+ export function dshPonytailOwnerKey(agentId, sessionId) {
71
+ return `${agentId}\u0000${sessionId}`;
72
+ }
53
73
  export function mountDshPonytailCommand(ctx, modes) {
54
74
  // Cordis test doubles and early dsh adapters used the two-argument helper;
55
75
  // dsh-commands uses one immutable definition object. Supporting both keeps
@@ -66,7 +86,11 @@ export function mountDshPonytailCommand(ctx, modes) {
66
86
  handler: (invocation) => {
67
87
  try {
68
88
  const args = invocation.rawInput.trim().length === 0 ? [] : invocation.rawInput.trim().split(/\s+/u);
69
- return { kind: 'success', text: modes.execute(args) };
89
+ const sessionId = invocation.agent?.session?.id ?? invocation.agent?.sessionId;
90
+ const owner = invocation.agent === undefined || sessionId === undefined
91
+ ? undefined
92
+ : dshPonytailOwnerKey(invocation.agent.id, sessionId);
93
+ return { kind: 'success', text: modes.execute(args, owner) };
70
94
  }
71
95
  catch (error) {
72
96
  return { kind: 'error', text: error instanceof Error ? error.message : 'Invalid Ponytail command.' };
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/dsh/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/dsh/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAiChE,SAAS,SAAS,CAAC,IAAuB;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAiB,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,0DAA0D,CAAC,CAAA;IACxG,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAiB,CAAA;AAChC,CAAC;AAED,+EAA+E;AAC/E,MAAM,OAAO,gBAAgB;IAClB,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAA;IACpD,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEpD,KAAK,CAAC,SAAiB,EAAE,KAAc;QACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAA;QACvJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACtE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAChD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACxE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,GAAG,CAAC,SAAiB,EAAE,IAAkB;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,2DAA2D,CAAC,CAAA;QAChI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAA;QACvG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,IAAuB,EAAE,KAAc;QAC7C,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS;YACnC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,SAAS;YAChF,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;gBACpC,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;oBAC3C,CAAC,CAAC,+EAA+E;oBACjF,CAAC,CAAC,gDAAgD,CAAA;YACtD,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QACjD,OAAO,wBAAwB,IAAI,0BAA0B,CAAA;IAC/D,CAAC;IAED,IAAI,CAAC,SAAiB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5D,IAAI,eAAe,KAAK,SAAS;gBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACvE,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;CACF;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,SAAiB;IACpE,OAAO,GAAG,OAAO,SAAS,SAAS,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAA8B,EAAE,KAAuB;IAC7F,2EAA2E;IAC3E,2EAA2E;IAC3E,4EAA4E;IAC5E,4DAA4D;IAC5D,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtC,OAAQ,GAAG,CAAC,QAAQ,CAAC,QAAuF,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACzJ,CAAC;IACD,OAAQ,GAAG,CAAC,QAAQ,CAAC,QAAmE,CAAC;QACvF,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,4DAA4D;QACzE,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE;QACtC,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACpG,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,SAAS,CAAA;gBAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;oBACrE,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;gBACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAA;YACtG,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,yBAAyB,CAAC,KAAuB,EAAE,SAAiB,EAAE,IAAuB;IAC3G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,2DAA2D,CAAC,CAAA;IAC/H,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
@@ -68,6 +68,13 @@ export interface DshCompositionHost {
68
68
  readonly runId: string;
69
69
  readonly status: 'completed' | 'failed' | 'cancelled';
70
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;
71
78
  }
72
79
  type DshToolHostRegistration = DshToolRegistrationContext['tools']['register'];
73
80
  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 } from './session-bridge.js';
2
+ import { mountDshDurabilityBarriers, mountDshIdleLifecycle, mountDshSessionBridge, 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';
@@ -165,6 +165,9 @@ export async function mountDshComposition(ctx, host) {
165
165
  if (host.resolveIdleClose === undefined)
166
166
  throw new Error('kiokuko-dsh idle lifecycle requires a close resolver');
167
167
  ingressDisposers.push(mountDshIdleLifecycle(ctx, host.lifecycle, host.resolveIdleClose));
168
+ if (host.resolveSessionClose !== undefined) {
169
+ ingressDisposers.push(mountDshSessionLifecycle(ctx, host.lifecycle, host.resolveSessionClose));
170
+ }
168
171
  }
169
172
  }
170
173
  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 +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;AAazB,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAkC3G,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;AAoHD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA+ctG;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;AAczB,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAmC3G,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;AAoID,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA8jBtG;AAkBD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
@@ -4,16 +4,18 @@ import { randomUUID } from 'node:crypto';
4
4
  import { KIOKUKO_DSH_HOST_SERVICE, } from './composition.js';
5
5
  import { DshRuntime } from './runtime.js';
6
6
  import { DshIntakeGate } from './intake-gate.js';
7
+ import { resolveGroundedIntakeProfile } from './intake-profile-resolver.js';
7
8
  import { DshToolPolicy } from './tool-policy.js';
8
9
  import { DSH_MODEL_FACING_OPERATIONS, } from './tools.js';
9
10
  import { DshSessionBridge, DshRunLifecycle } from './session-bridge.js';
10
11
  import { DshEnnoController } from './enno-controller.js';
11
12
  import { DshAdvisoryRunner } from './advisory-runner.js';
12
- import { DshPonytailModes } from './commands.js';
13
+ import { DshPonytailModes, dshPonytailOwnerKey } from './commands.js';
13
14
  import { createDshIntakeAnswerer, createDshConfirmationAnswerer } from './user-interaction.js';
14
15
  import { createDshCapabilityCatalog } from './capability-catalog.js';
15
16
  import { STANDARD_SKILL_MANIFESTS } from '../setup/standard-skills.js';
16
17
  import { canonicalContentHash, compareCanonicalStrings } from '../serialization/validate.js';
18
+ import { KiokukoError } from '../errors.js';
17
19
  import { injectDshContext, selectDshDirectiveSources } from './context-injection.js';
18
20
  import { projectDshDirective } from './directive-projection.js';
19
21
  import { submitOdunoIdeal, submitEnnoPlan, submitEnnoAdvice, reportEnnoWork, finishEnno, submitOdunoMeditation, answerEnno, prepareEnnoVerification, stateForSnapshot } from '../enno-oduno/service.js';
@@ -23,13 +25,23 @@ import { curateMemoryCandidates } from '../memory/curator.js';
23
25
  import { checkpointScopedMemoryWithProvenance } from '../memory/scoped-memory.js';
24
26
  import { LedgerStore } from '../ledger/store.js';
25
27
  function textFromMessages(messages) {
26
- const texts = [];
28
+ const userTexts = [];
29
+ const legacyTexts = [];
27
30
  for (const value of messages) {
28
31
  if (typeof value !== 'object' || value === null || Array.isArray(value))
29
32
  continue;
30
33
  const message = value;
31
34
  if (message.role !== undefined && message.role !== 'user')
32
35
  continue;
36
+ const source = message.source;
37
+ const sourceKind = typeof source === 'object' && source !== null && !Array.isArray(source)
38
+ ? source.kind
39
+ : undefined;
40
+ // File/session context and other host instructions may intentionally use
41
+ // the user role so the model sees them. They are still not the human's
42
+ // request and must not influence intake classification or task identity.
43
+ if (sourceKind !== undefined && sourceKind !== 'user')
44
+ continue;
33
45
  const content = message.content;
34
46
  if (!Array.isArray(content))
35
47
  continue;
@@ -37,10 +49,18 @@ function textFromMessages(messages) {
37
49
  if (typeof block !== 'object' || block === null || Array.isArray(block))
38
50
  continue;
39
51
  const text = block.text;
40
- if (typeof text === 'string' && text.length > 0)
41
- texts.push(text);
52
+ if (typeof text !== 'string' || text.length === 0)
53
+ continue;
54
+ if (sourceKind === 'user')
55
+ userTexts.push(text);
56
+ else
57
+ legacyTexts.push(text);
42
58
  }
43
59
  }
60
+ // Current DSH messages carry provenance. Keep the legacy fallback only for
61
+ // older host doubles/adapters, and never merge it with authenticated user
62
+ // text when both are present.
63
+ const texts = userTexts.length > 0 ? userTexts : legacyTexts;
44
64
  const task = texts.join('\n').trim();
45
65
  if (task.length === 0)
46
66
  throw new Error('dsh pre-step did not contain a user task');
@@ -156,7 +176,9 @@ export function createDshHostAdapter(ctx, options = {}) {
156
176
  const modes = new DshPonytailModes();
157
177
  const confirmation = userQuestions === undefined ? undefined : createDshConfirmationAnswerer(userQuestions);
158
178
  let prepareGeneration = 0;
159
- const identityKey = (agentId, sessionId) => `${agentId}\u0000${sessionId}`;
179
+ const continuedTurns = new Map();
180
+ let retireSupersededRun;
181
+ const identityKey = (agentId, sessionId) => dshPonytailOwnerKey(agentId, sessionId);
160
182
  const turnKey = (agentId, sessionId, turn) => `${identityKey(agentId, sessionId)}\u0000${turn}`;
161
183
  const record = (event, result, generation) => {
162
184
  const run = result.prepared.run.runId;
@@ -189,6 +211,7 @@ export function createDshHostAdapter(ctx, options = {}) {
189
211
  task: event.task,
190
212
  turn: event.turn,
191
213
  prepared: result.prepared,
214
+ catalog: result.catalog,
192
215
  prepareGeneration: generation,
193
216
  failed: false,
194
217
  closed: false,
@@ -210,6 +233,7 @@ export function createDshHostAdapter(ctx, options = {}) {
210
233
  }
211
234
  item.prepareGeneration = generation;
212
235
  item.task = event.task;
236
+ item.catalog = result.catalog;
213
237
  turns.set(key, item);
214
238
  latestBySession.set(event.sessionId, item);
215
239
  const modeRequest = `dsh:${event.agent.id}:${event.sessionId}:${event.turn}`;
@@ -218,7 +242,7 @@ export function createDshHostAdapter(ctx, options = {}) {
218
242
  if (activeModeRequest !== modeRequest) {
219
243
  if (activeModeRequest !== undefined)
220
244
  modes.end(activeModeRequest);
221
- modes.begin(modeRequest);
245
+ modes.begin(modeRequest, modeKey);
222
246
  activeModeRequests.set(modeKey, modeRequest);
223
247
  }
224
248
  const existingState = states.get(item.runId);
@@ -244,6 +268,60 @@ export function createDshHostAdapter(ctx, options = {}) {
244
268
  // context deliveries that finish out of order.
245
269
  const generation = ++prepareGeneration;
246
270
  await runtime.withDatabase((database) => resolveProjectWorkspaceReadOnly(database, event.cwd));
271
+ const cacheKey = `${event.sessionId}\u0000${event.turn}`;
272
+ const fingerprint = canonicalContentHash({
273
+ sessionId: event.sessionId,
274
+ agentId: event.agent.id,
275
+ turn: event.turn,
276
+ task: event.task,
277
+ cwd: event.cwd,
278
+ profileHints: event.profileHints ?? null,
279
+ evidence: event.evidence ?? null,
280
+ skillDiscoveryMode: event.skillDiscoveryMode ?? null,
281
+ catalogDigest: event.capabilities.digest,
282
+ });
283
+ const cached = continuedTurns.get(cacheKey);
284
+ if (cached !== undefined) {
285
+ if (cached.fingerprint !== fingerprint
286
+ || cached.nativeAgent !== event.nativeAgent
287
+ || cached.nativeSession !== event.nativeSession) {
288
+ throw new KiokukoError('CONFLICT', 'dsh continued turn was reused with different bound input');
289
+ }
290
+ this.assertCatalog(cached.result.catalog, event.capabilities);
291
+ return event.signal.aborted ? { ...cached.result, admitted: false } : cached.result;
292
+ }
293
+ const previous = currentForAgentEvent(event.agent.id, event.sessionId, undefined, event.nativeSession, event.nativeAgent);
294
+ if (previous !== undefined && previous.turn < event.turn) {
295
+ if (event.signal.aborted)
296
+ return { admitted: false, prepared: previous.prepared, catalog: event.capabilities };
297
+ const previousState = await runtime.withDatabase((database) => stateForRun(database, previous));
298
+ const previousWasChat = previous.prepared.intake.profile.taskType === 'chat';
299
+ const continuePrevious = previousWasChat
300
+ ? event.profileHints?.taskType === 'chat'
301
+ : previousState.status !== 'completed'
302
+ && previousState.status !== 'blocked'
303
+ && previousState.status !== 'cancelled'
304
+ && previousState.nextAction !== 'complete';
305
+ if (continuePrevious) {
306
+ this.assertCatalog(previous.catalog, event.capabilities);
307
+ const continued = { admitted: !event.signal.aborted, prepared: previous.prepared, catalog: event.capabilities };
308
+ if (continued.admitted) {
309
+ continuedTurns.set(cacheKey, {
310
+ fingerprint,
311
+ result: continued,
312
+ ...(event.nativeAgent === undefined ? {} : { nativeAgent: event.nativeAgent }),
313
+ ...(event.nativeSession === undefined ? {} : { nativeSession: event.nativeSession }),
314
+ });
315
+ record(event, continued, generation);
316
+ }
317
+ return continued;
318
+ }
319
+ if (event.signal.aborted)
320
+ return { admitted: false, prepared: previous.prepared, catalog: event.capabilities };
321
+ if (retireSupersededRun === undefined)
322
+ throw new Error('kiokuko-dsh run lifecycle is unavailable');
323
+ await retireSupersededRun(previous, previousState.status === 'cancelled' ? 'cancelled' : previousState.status === 'blocked' ? 'failed' : 'completed');
324
+ }
247
325
  const prepared = await super.prepare(event);
248
326
  if (prepared.admitted)
249
327
  record(event, prepared, generation);
@@ -259,6 +337,10 @@ export function createDshHostAdapter(ctx, options = {}) {
259
337
  const messages = await contextMessages(event, result);
260
338
  return { ...decision, messages: [...decision.messages, ...messages] };
261
339
  }
340
+ clearTurn(sessionId, turn) {
341
+ super.clearTurn(sessionId, turn);
342
+ continuedTurns.delete(`${sessionId}\u0000${turn}`);
343
+ }
262
344
  }
263
345
  const gate = new CapturingGate(runtime, userQuestions === undefined ? undefined : createDshIntakeAnswerer(userQuestions), (context) => capabilityCatalog(skills, tools, context));
264
346
  const currentSession = (sessionId) => latestBySession.get(sessionId);
@@ -306,6 +388,9 @@ export function createDshHostAdapter(ctx, options = {}) {
306
388
  signal: payload.signal,
307
389
  });
308
390
  const bound = currentForAgentEvent(payload.agent.id, sessionId, payload.turn, boundSession, payload.agent);
391
+ const previous = bound === undefined
392
+ ? currentForAgentEvent(payload.agent.id, sessionId, undefined, boundSession, payload.agent)
393
+ : undefined;
309
394
  // DSH supplies only the messages claimed for this particular step. After
310
395
  // the first step that batch may contain steering/injected context rather
311
396
  // than the original user task, so the established logical-turn record is
@@ -320,6 +405,21 @@ export function createDshHostAdapter(ctx, options = {}) {
320
405
  step: payload.step,
321
406
  task,
322
407
  cwd,
408
+ ...(() => {
409
+ if (bound !== undefined) {
410
+ return continuedTurns.has(`${sessionId}\u0000${payload.turn}`)
411
+ ? { profileHints: { taskType: bound.prepared.intake.profile.taskType } }
412
+ : {};
413
+ }
414
+ if (previous === undefined)
415
+ return {};
416
+ const inferred = resolveGroundedIntakeProfile({ task, cwd }).profileHints.taskType;
417
+ const previousType = previous.prepared.intake.profile.taskType;
418
+ if (inferred === null || previousType === 'chat' && inferred === 'chat') {
419
+ return { profileHints: { taskType: previousType } };
420
+ }
421
+ return {};
422
+ })(),
323
423
  capabilities: catalog,
324
424
  signal: payload.signal,
325
425
  };
@@ -548,12 +648,35 @@ export function createDshHostAdapter(ctx, options = {}) {
548
648
  return { runId: item.runId, status: 'failed' };
549
649
  if (state.status === 'cancelled')
550
650
  return { runId: item.runId, status: 'cancelled' };
651
+ if (state.status === 'blocked' || state.nextAction === 'report_blocker')
652
+ return { runId: item.runId, status: 'failed' };
653
+ // A chat run spans the quiet time between user messages. Enno's
654
+ // inapplicable `complete` means that no orchestration is required for this
655
+ // turn; it does not mean that the persistent conversation has ended.
656
+ if (item.prepared.intake.profile.taskType === 'chat')
657
+ return undefined;
551
658
  if (state.status === 'completed' || state.nextAction === 'complete')
552
659
  return { runId: item.runId, status: 'completed' };
553
660
  // Idle means the driver has no active work, not that Enno reached a
554
- // terminal state. Keep active, blocked, and verification states open.
661
+ // terminal state. Keep only genuinely resumable active states open.
555
662
  return undefined;
556
663
  };
664
+ const resolveSessionClose = async (sessionId, nativeSession) => {
665
+ const item = currentSession(sessionId);
666
+ if (item === undefined || item.closed || item.nativeSession !== nativeSession)
667
+ return undefined;
668
+ if (item.failed)
669
+ return { runId: item.runId, status: 'failed' };
670
+ const state = await runtime.withDatabase((database) => stateForRun(database, item));
671
+ if (state.status === 'cancelled')
672
+ return { runId: item.runId, status: 'cancelled' };
673
+ if (state.status === 'blocked' || state.nextAction === 'report_blocker')
674
+ return { runId: item.runId, status: 'failed' };
675
+ if (item.prepared.intake.profile.taskType === 'chat' || state.status === 'completed' || state.nextAction === 'complete') {
676
+ return { runId: item.runId, status: 'completed' };
677
+ }
678
+ return { runId: item.runId, status: 'cancelled' };
679
+ };
557
680
  const closeRun = async (input) => {
558
681
  await lifecycleClose(runtime)(input);
559
682
  const items = [...turns.values()].filter((candidate) => candidate.runId === input.runId);
@@ -587,6 +710,7 @@ export function createDshHostAdapter(ctx, options = {}) {
587
710
  item.failed = true;
588
711
  });
589
712
  const bridgeLifecycle = new DshRunLifecycle({ bridge, closeRun });
713
+ retireSupersededRun = (item, status) => bridgeLifecycle.closeTurn({ runId: item.runId, status });
590
714
  const host = {
591
715
  ...(skills === undefined ? {} : { skills: skills }),
592
716
  ...(systemPrompt === undefined ? {} : { systemPrompt }),
@@ -607,6 +731,7 @@ export function createDshHostAdapter(ctx, options = {}) {
607
731
  ennoController,
608
732
  lifecycle: bridgeLifecycle,
609
733
  resolveIdleClose,
734
+ resolveSessionClose,
610
735
  };
611
736
  return {
612
737
  host,
@@ -636,6 +761,17 @@ export function createDshHostAdapter(ctx, options = {}) {
636
761
  catch (error) {
637
762
  failures.push(error);
638
763
  }
764
+ const remainingChats = [...new Map([...turns.values()]
765
+ .filter((item) => !item.closed && item.prepared.intake.profile.taskType === 'chat')
766
+ .map((item) => [item.runId, item])).values()];
767
+ for (const item of remainingChats) {
768
+ try {
769
+ await bridgeLifecycle.closeTurn({ runId: item.runId, status: item.failed ? 'failed' : 'completed' });
770
+ }
771
+ catch (error) {
772
+ failures.push(error);
773
+ }
774
+ }
639
775
  try {
640
776
  await bridgeLifecycle.dispose();
641
777
  }