kiokuko-dsh 0.1.25 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dsh/context-injection.d.ts +4 -0
- package/dist/dsh/context-injection.d.ts.map +1 -1
- package/dist/dsh/context-injection.js +23 -4
- package/dist/dsh/context-injection.js.map +1 -1
- package/dist/dsh/context-projection.d.ts +18 -0
- package/dist/dsh/context-projection.d.ts.map +1 -0
- package/dist/dsh/context-projection.js +68 -0
- package/dist/dsh/context-projection.js.map +1 -0
- package/dist/dsh/host-adapter.d.ts.map +1 -1
- package/dist/dsh/host-adapter.js +11 -30
- package/dist/dsh/host-adapter.js.map +1 -1
- package/dist/dsh/message-sources.d.ts +2 -0
- package/dist/dsh/message-sources.d.ts.map +1 -1
- package/dist/dsh/message-sources.js +4 -3
- package/dist/dsh/message-sources.js.map +1 -1
- package/dist/enno-oduno/repository-state.d.ts +2 -0
- package/dist/enno-oduno/repository-state.d.ts.map +1 -1
- package/dist/enno-oduno/repository-state.js +8 -1
- package/dist/enno-oduno/repository-state.js.map +1 -1
- package/dist/enno-oduno/service.d.ts.map +1 -1
- package/dist/enno-oduno/service.js +20 -15
- package/dist/enno-oduno/service.js.map +1 -1
- package/dist/enno-oduno/store.d.ts.map +1 -1
- package/dist/enno-oduno/store.js +2 -1
- package/dist/enno-oduno/store.js.map +1 -1
- package/dist/enno-oduno/verifier.d.ts +6 -0
- package/dist/enno-oduno/verifier.d.ts.map +1 -1
- package/dist/enno-oduno/verifier.js +51 -23
- package/dist/enno-oduno/verifier.js.map +1 -1
- package/docs/dsh-plugin.md +14 -0
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ export interface DshModelMessage {
|
|
|
6
6
|
readonly role: 'user';
|
|
7
7
|
readonly content: string;
|
|
8
8
|
readonly source: DshMessageSource['kind'];
|
|
9
|
+
readonly name: string;
|
|
9
10
|
}
|
|
10
11
|
export interface DshDirectiveSourceSelection {
|
|
11
12
|
readonly routeSkillNames: readonly string[];
|
|
@@ -22,5 +23,8 @@ export declare function injectDshContext(input: {
|
|
|
22
23
|
readonly advisoryEvidence?: DshMessageSourceInput['advisoryEvidence'];
|
|
23
24
|
readonly directive?: DshMessageSourceInput['directive'];
|
|
24
25
|
readonly runtime?: Pick<DshRuntime, 'withDatabase'>;
|
|
26
|
+
readonly soulInSystemPrompt?: boolean;
|
|
27
|
+
/** Native DSH already carries the human message; emit only additional intake facts. */
|
|
28
|
+
readonly userTaskInConversation?: boolean;
|
|
25
29
|
}): Promise<readonly DshModelMessage[]>;
|
|
26
30
|
//# sourceMappingURL=context-injection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-injection.d.ts","sourceRoot":"","sources":["../../src/dsh/context-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAQ3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"context-injection.d.ts","sourceRoot":"","sources":["../../src/dsh/context-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEvG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAQ3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAA;CACnD;AAOD,sFAAsF;AACtF,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,UAAU,CAAC,GAAG,2BAA2B,CAWpI;AAiCD,4EAA4E;AAC5E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACnD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IACnD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IACrC,uFAAuF;IACvF,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAC1C,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAuBtC"}
|
|
@@ -20,15 +20,32 @@ export function selectDshDirectiveSources(directive) {
|
|
|
20
20
|
expertRefs: Object.freeze(expertRefs),
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
function sourceInput(prepared, fallbackTask, routeSkillNames, expertRefs, directive) {
|
|
23
|
+
function sourceInput(prepared, fallbackTask, routeSkillNames, expertRefs, directive, userTaskInConversation) {
|
|
24
24
|
if (prepared.intake.status !== 'ready' && prepared.intake.status !== 'exhausted')
|
|
25
25
|
throw new Error('Cannot inject context before intake is finalized');
|
|
26
26
|
if (prepared.nextAction !== 'proceed')
|
|
27
27
|
throw new Error('Cannot inject context when the host gate did not permit proceeding');
|
|
28
28
|
const profile = prepared.intake.profile;
|
|
29
|
-
const
|
|
29
|
+
const fields = [profile.target, profile.expected, profile.constraints].filter((value) => value !== null && value.length > 0);
|
|
30
|
+
// Native DSH owns the original human message, including its attachments.
|
|
31
|
+
// Only additional intake facts belong in the plugin's context snapshot.
|
|
32
|
+
const original = fallbackTask.trim();
|
|
33
|
+
const additional = userTaskInConversation ? [...new Set(fields.map(value => {
|
|
34
|
+
const text = value.trim();
|
|
35
|
+
if (original.length === 0)
|
|
36
|
+
return text;
|
|
37
|
+
if (text === original)
|
|
38
|
+
return '';
|
|
39
|
+
if (text.startsWith(`${original}\n`) || text.startsWith(`${original}\r\n`))
|
|
40
|
+
return text.slice(original.length).trimStart();
|
|
41
|
+
return text;
|
|
42
|
+
}).filter(Boolean))] : fields;
|
|
43
|
+
const finalized = additional.join('\n');
|
|
44
|
+
const task = userTaskInConversation
|
|
45
|
+
? (finalized.length === 0 ? '' : `Finalized intake:\n${finalized}`)
|
|
46
|
+
: (finalized.length === 0 || finalized === fallbackTask ? fallbackTask : `${fallbackTask}\n\nFinalized intake:\n${finalized}`);
|
|
30
47
|
return {
|
|
31
|
-
task
|
|
48
|
+
task,
|
|
32
49
|
intakeStatus: prepared.intake.status,
|
|
33
50
|
nextAction: 'proceed',
|
|
34
51
|
memoryPolicy: prepared.memoryPolicy,
|
|
@@ -51,7 +68,8 @@ export async function injectDshContext(input) {
|
|
|
51
68
|
});
|
|
52
69
|
};
|
|
53
70
|
const sources = await buildDshMessageSources({
|
|
54
|
-
...sourceInput(input.prepared, input.task, input.routeSkillNames ?? [], input.expertRefs ?? [], input.directive),
|
|
71
|
+
...sourceInput(input.prepared, input.task, input.routeSkillNames ?? [], input.expertRefs ?? [], input.directive, input.userTaskInConversation === true),
|
|
72
|
+
...(input.soulInSystemPrompt === undefined ? {} : { soulInSystemPrompt: input.soulInSystemPrompt }),
|
|
55
73
|
...(input.advisoryEvidence === undefined ? {} : { advisoryEvidence: input.advisoryEvidence }),
|
|
56
74
|
...(assertMemoryCurrent === undefined ? {} : { assertMemoryCurrent }),
|
|
57
75
|
});
|
|
@@ -59,6 +77,7 @@ export async function injectDshContext(input) {
|
|
|
59
77
|
role: 'user',
|
|
60
78
|
content: source.text,
|
|
61
79
|
source: source.kind,
|
|
80
|
+
name: source.name,
|
|
62
81
|
})));
|
|
63
82
|
}
|
|
64
83
|
//# sourceMappingURL=context-injection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-injection.js","sourceRoot":"","sources":["../../src/dsh/context-injection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAGlE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"context-injection.js","sourceRoot":"","sources":["../../src/dsh/context-injection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DshModelMessage } from './context-injection.js';
|
|
2
|
+
import type { DshLogEvent } from './session-memory-finalizer.js';
|
|
3
|
+
interface ContextSession {
|
|
4
|
+
readonly surface?: {
|
|
5
|
+
readonly nodes: readonly number[];
|
|
6
|
+
};
|
|
7
|
+
readonly eventAt?: (seq: number) => DshLogEvent | undefined;
|
|
8
|
+
readonly snapshotEvents?: () => readonly DshLogEvent[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Emit only changed named fragments. Delivery is proven by the native surface
|
|
12
|
+
* or the current claimed/queued batch, never by an earlier projection attempt.
|
|
13
|
+
* Rebuilding from the surface also restores needed fragments after compaction,
|
|
14
|
+
* resume, or plugin reload without a second persistence/cache owner.
|
|
15
|
+
*/
|
|
16
|
+
export declare function projectDshContext(messages: readonly DshModelMessage[], session: ContextSession, pending?: readonly unknown[]): readonly unknown[];
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=context-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-projection.d.ts","sourceRoot":"","sources":["../../src/dsh/context-projection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAA;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,SAAS,WAAW,EAAE,CAAA;CACvD;AA6BD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,SAAS,OAAO,EAAO,GAC/B,SAAS,OAAO,EAAE,CA4BpB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
function record(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
4
|
+
? value : undefined;
|
|
5
|
+
}
|
|
6
|
+
/** Read retained messages, excluding chunk history and compacted-away instructions. */
|
|
7
|
+
function retainedEvents(session) {
|
|
8
|
+
if (session.surface !== undefined && session.eventAt !== undefined) {
|
|
9
|
+
return session.surface.nodes.flatMap(seq => {
|
|
10
|
+
const event = session.eventAt(seq);
|
|
11
|
+
return event === undefined ? [] : [event];
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const nodes = [];
|
|
15
|
+
for (const event of session.snapshotEvents?.() ?? []) {
|
|
16
|
+
if (event.surfaceOp === 'append')
|
|
17
|
+
nodes.push(event);
|
|
18
|
+
else if (event.surfaceOp !== undefined) {
|
|
19
|
+
const replacement = event.surfaceOp;
|
|
20
|
+
const start = nodes.findIndex(node => node.seq === replacement.start);
|
|
21
|
+
const end = nodes.findIndex(node => node.seq === replacement.end);
|
|
22
|
+
if (start < 0 || end < start)
|
|
23
|
+
throw new Error('Kiokuko context projection encountered an invalid session replacement');
|
|
24
|
+
nodes.splice(start, end - start + 1, event);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return nodes;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Emit only changed named fragments. Delivery is proven by the native surface
|
|
31
|
+
* or the current claimed/queued batch, never by an earlier projection attempt.
|
|
32
|
+
* Rebuilding from the surface also restores needed fragments after compaction,
|
|
33
|
+
* resume, or plugin reload without a second persistence/cache owner.
|
|
34
|
+
*/
|
|
35
|
+
export function projectDshContext(messages, session, pending = []) {
|
|
36
|
+
const latest = new Map();
|
|
37
|
+
for (const value of [
|
|
38
|
+
...retainedEvents(session).filter(event => event.type === 'user/message').map(event => event.data),
|
|
39
|
+
...pending,
|
|
40
|
+
]) {
|
|
41
|
+
const message = record(value);
|
|
42
|
+
const source = record(message?.source);
|
|
43
|
+
if (message?.role !== 'user' || source?.kind !== 'plugin' || source.plugin !== 'kiokuko-dsh'
|
|
44
|
+
|| source.form !== 'snapshot' || !Array.isArray(source.sections) || source.sections.length !== 1)
|
|
45
|
+
continue;
|
|
46
|
+
const section = record(source.sections[0]);
|
|
47
|
+
const content = message.content;
|
|
48
|
+
if (typeof section?.name !== 'string' || typeof section.text !== 'string'
|
|
49
|
+
|| !Array.isArray(content) || content.length !== 1)
|
|
50
|
+
continue;
|
|
51
|
+
const block = record(content[0]);
|
|
52
|
+
if (block?.type === 'text' && block.text === section.text)
|
|
53
|
+
latest.set(section.name, section.text);
|
|
54
|
+
}
|
|
55
|
+
return messages.flatMap(message => {
|
|
56
|
+
const name = `${message.source}:${message.name}`;
|
|
57
|
+
if (latest.get(name) === message.content)
|
|
58
|
+
return [];
|
|
59
|
+
latest.set(name, message.content);
|
|
60
|
+
return [{
|
|
61
|
+
id: randomUUID(),
|
|
62
|
+
role: message.role,
|
|
63
|
+
content: [{ type: 'text', text: message.content }],
|
|
64
|
+
source: { kind: 'plugin', plugin: 'kiokuko-dsh', form: 'snapshot', sections: [{ name, text: message.content }] },
|
|
65
|
+
}];
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=context-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-projection.js","sourceRoot":"","sources":["../../src/dsh/context-projection.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;AAkBzB,OAAO,EAA0C,KAAK,MAAM,EAAgD,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEvK,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,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,EAAgD,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEvK,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAoG3G,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,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,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;AAmOD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA8xDtG;AAsBD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
|
package/dist/dsh/host-adapter.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url';
|
|
2
2
|
import { realpathSync } from 'node:fs';
|
|
3
|
-
import { randomUUID } from 'node:crypto';
|
|
4
3
|
import { KIOKUKO_DSH_HOST_SERVICE, } from './composition.js';
|
|
5
4
|
import { DshRuntime } from './runtime.js';
|
|
6
5
|
import { withImmediateTransaction } from '../db/transaction.js';
|
|
@@ -22,6 +21,7 @@ import { STANDARD_SKILL_MANIFESTS } from './standard-skills.js';
|
|
|
22
21
|
import { canonicalContentHash, compareCanonicalStrings } from '../serialization/validate.js';
|
|
23
22
|
import { KiokukoError } from '../errors.js';
|
|
24
23
|
import { injectDshContext, selectDshDirectiveSources } from './context-injection.js';
|
|
24
|
+
import { projectDshContext } from './context-projection.js';
|
|
25
25
|
import { projectDshDirective } from './directive-projection.js';
|
|
26
26
|
import { submitOdunoIdeal, submitEnnoPlan, submitEnnoAdvice, readPendingEnnoAdvice, reportEnnoWork, finishEnno, submitOdunoMeditation, answerEnno, prepareEnnoVerification, stateForSnapshot, inapplicableEnnoState } from '../enno-oduno/service.js';
|
|
27
27
|
import { claimExecutionLeaseInTransaction, readEnnoSnapshot, terminalizeLedgerRunInTransaction } from '../enno-oduno/store.js';
|
|
@@ -758,7 +758,7 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
758
758
|
return { kind: 'reject' };
|
|
759
759
|
}
|
|
760
760
|
}
|
|
761
|
-
const messages = await contextMessages(event,
|
|
761
|
+
const messages = await contextMessages(event, nativeDecision.messages);
|
|
762
762
|
return { ...nativeDecision, messages: [...executionSupport.projectMessages(event.sessionId, nativeDecision.messages), ...messages] };
|
|
763
763
|
}
|
|
764
764
|
catch {
|
|
@@ -788,16 +788,6 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
788
788
|
const item = currentSession(sessionId);
|
|
789
789
|
return item?.agentId === agentId && (turn === undefined || item.turn === turn) && matchesNativeIdentity(item) ? item : undefined;
|
|
790
790
|
};
|
|
791
|
-
const contextInjectionKey = (item, turn, state, selection) => canonicalContentHash({
|
|
792
|
-
sessionId: item.sessionId,
|
|
793
|
-
turn,
|
|
794
|
-
routeSkillNames: selection.routeSkillNames,
|
|
795
|
-
expertRefs: selection.expertRefs,
|
|
796
|
-
contractRevision: state.contractRevision,
|
|
797
|
-
nextAction: state.nextAction,
|
|
798
|
-
directiveDigest: state.directive === null ? null : canonicalContentHash(state.directive),
|
|
799
|
-
advisoryRoundDigest: state.advisoryPhaseState.state === 'aggregated' ? state.advisoryPhaseState.inputDigest : null,
|
|
800
|
-
});
|
|
801
791
|
const advisoryEvidenceFor = async (item, state) => {
|
|
802
792
|
const advisoryState = state.advisoryPhaseState;
|
|
803
793
|
const contractRevision = state.contractRevision;
|
|
@@ -973,7 +963,7 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
973
963
|
signal: payload.signal,
|
|
974
964
|
};
|
|
975
965
|
};
|
|
976
|
-
const contextMessages = async (event,
|
|
966
|
+
const contextMessages = async (event, pending) => {
|
|
977
967
|
const item = currentForAgentEvent(event.agent.id, event.sessionId, event.turn, event.nativeSession, event.nativeAgent);
|
|
978
968
|
if (item === undefined || item.sessionId !== event.sessionId)
|
|
979
969
|
throw new Error('kiokuko-dsh turn identity is not bound');
|
|
@@ -986,9 +976,6 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
986
976
|
const prepared = item.prepared;
|
|
987
977
|
const directive = projectDshDirective(prepared.ennoOduno);
|
|
988
978
|
const selection = directive === null ? { routeSkillNames: [], expertRefs: [] } : selectDshDirectiveSources(directive);
|
|
989
|
-
const contextKey = contextInjectionKey(item, event.turn, prepared.ennoOduno, selection);
|
|
990
|
-
if (item.contextInjectionKey === contextKey)
|
|
991
|
-
return [];
|
|
992
979
|
const advisoryEvidence = await advisoryEvidenceFor(item, prepared.ennoOduno);
|
|
993
980
|
const messages = await injectDshContext({
|
|
994
981
|
prepared,
|
|
@@ -998,15 +985,10 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
998
985
|
...(directive === null ? {} : { directive }),
|
|
999
986
|
...(advisoryEvidence === undefined ? {} : { advisoryEvidence }),
|
|
1000
987
|
runtime,
|
|
988
|
+
soulInSystemPrompt: ctx.get('systemPrompt', false) !== undefined,
|
|
989
|
+
userTaskInConversation: true,
|
|
1001
990
|
});
|
|
1002
|
-
|
|
1003
|
-
id: randomUUID(),
|
|
1004
|
-
role: message.role,
|
|
1005
|
-
content: [{ type: 'text', text: message.content }],
|
|
1006
|
-
source: { kind: 'plugin', plugin: 'kiokuko-dsh', form: 'instructions' },
|
|
1007
|
-
}));
|
|
1008
|
-
item.contextInjectionKey = contextKey;
|
|
1009
|
-
return Object.freeze(nativeMessages);
|
|
991
|
+
return projectDshContext(messages, sessionEventSource(event.nativeSession), pending);
|
|
1010
992
|
};
|
|
1011
993
|
const toolHost = {
|
|
1012
994
|
bind: (execution) => {
|
|
@@ -1368,9 +1350,6 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
1368
1350
|
const agent = exactNativeAgent === undefined ? agents?.get(item.agentId) : exactNativeAgent;
|
|
1369
1351
|
if (agent?.inject === undefined)
|
|
1370
1352
|
throw new Error('kiokuko-dsh native agent injection is unavailable');
|
|
1371
|
-
const contextKey = contextInjectionKey(item, item.turn, state, selection);
|
|
1372
|
-
if (item.contextInjectionKey === contextKey)
|
|
1373
|
-
return;
|
|
1374
1353
|
const projectedDirective = projectDshDirective({ nextAction: state.nextAction, directive: state.directive });
|
|
1375
1354
|
const advisoryEvidence = await advisoryEvidenceFor(item, state);
|
|
1376
1355
|
const messages = await injectDshContext({
|
|
@@ -1381,12 +1360,14 @@ export function createDshHostAdapter(ctx, options = {}) {
|
|
|
1381
1360
|
...(projectedDirective === null ? {} : { directive: projectedDirective }),
|
|
1382
1361
|
...(advisoryEvidence === undefined ? {} : { advisoryEvidence }),
|
|
1383
1362
|
runtime,
|
|
1363
|
+
soulInSystemPrompt: ctx.get('systemPrompt', false) !== undefined,
|
|
1364
|
+
userTaskInConversation: true,
|
|
1384
1365
|
});
|
|
1385
1366
|
event.signal.throwIfAborted();
|
|
1386
|
-
|
|
1387
|
-
|
|
1367
|
+
const pending = agent.inbox?.nextStep ?? [];
|
|
1368
|
+
for (const message of projectDshContext(messages, sessionEventSource(item.nativeSession), pending)) {
|
|
1369
|
+
agent.inject(message);
|
|
1388
1370
|
}
|
|
1389
|
-
item.contextInjectionKey = contextKey;
|
|
1390
1371
|
};
|
|
1391
1372
|
const runFinalVerificationBoundary = async (item) => {
|
|
1392
1373
|
await assertTurnBoundary(boundaryEvent(item));
|