@sena-ai/core 1.5.1 → 1.6.0
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/__tests__/agent.test.js +2 -4
- package/dist/__tests__/agent.test.js.map +1 -1
- package/dist/__tests__/engine.test.js +135 -21
- package/dist/__tests__/engine.test.js.map +1 -1
- package/dist/__tests__/full-config.test.js +2 -2
- package/dist/__tests__/full-config.test.js.map +1 -1
- package/dist/__tests__/helpers.d.ts +1 -13
- package/dist/__tests__/helpers.d.ts.map +1 -1
- package/dist/__tests__/helpers.js +0 -28
- package/dist/__tests__/helpers.js.map +1 -1
- package/dist/__tests__/integration.test.js +1 -4
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/__tests__/runtime-hooks.test.js +8 -8
- package/dist/__tests__/runtime-hooks.test.js.map +1 -1
- package/dist/__tests__/worker-fork.test.d.ts +2 -0
- package/dist/__tests__/worker-fork.test.d.ts.map +1 -0
- package/dist/__tests__/worker-fork.test.js +79 -0
- package/dist/__tests__/worker-fork.test.js.map +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +46 -8
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime-hooks.d.ts +15 -29
- package/dist/runtime-hooks.d.ts.map +1 -1
- package/dist/runtime-hooks.js +1 -47
- package/dist/runtime-hooks.js.map +1 -1
- package/dist/types.d.ts +6 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +105 -7
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { createTurnEngine } from '../engine.js';
|
|
3
|
+
function createMockRuntime(response = 'mock response') {
|
|
4
|
+
return {
|
|
5
|
+
name: 'mock',
|
|
6
|
+
async *createStream(_options) {
|
|
7
|
+
yield { type: 'session.init', sessionId: `sess-${Math.random().toString(36).slice(2, 8)}` };
|
|
8
|
+
yield { type: 'result', text: response };
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
describe('Engine + Worker fork integration', () => {
|
|
13
|
+
it('blocking followUp (no fork) produces a TurnFollowUp with fork=false', async () => {
|
|
14
|
+
const hooks = {
|
|
15
|
+
onTurnEnd: [async () => ({ followUp: 'continue in same session' })],
|
|
16
|
+
};
|
|
17
|
+
const engine = createTurnEngine({
|
|
18
|
+
name: 'test', cwd: '/tmp',
|
|
19
|
+
runtime: createMockRuntime('first'), hooks, tools: [],
|
|
20
|
+
});
|
|
21
|
+
const trace = await engine.processTurn({ input: 'start' });
|
|
22
|
+
expect(trace.followUps).toBeDefined();
|
|
23
|
+
expect(trace.followUps).toHaveLength(1);
|
|
24
|
+
expect(trace.followUps[0]).toEqual({
|
|
25
|
+
prompt: 'continue in same session',
|
|
26
|
+
fork: false,
|
|
27
|
+
detached: false,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
it('fork followUp produces a TurnFollowUp with fork=true', async () => {
|
|
31
|
+
const hooks = {
|
|
32
|
+
onTurnEnd: [async () => ({ fork: true, followUp: 'fork task' })],
|
|
33
|
+
};
|
|
34
|
+
const engine = createTurnEngine({
|
|
35
|
+
name: 'test', cwd: '/tmp',
|
|
36
|
+
runtime: createMockRuntime('original'), hooks, tools: [],
|
|
37
|
+
});
|
|
38
|
+
const trace = await engine.processTurn({ input: 'go' });
|
|
39
|
+
expect(trace.followUps).toHaveLength(1);
|
|
40
|
+
expect(trace.followUps[0]).toEqual({
|
|
41
|
+
prompt: 'fork task',
|
|
42
|
+
fork: true,
|
|
43
|
+
detached: false,
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it('fork+detached followUp produces correct TurnFollowUp', async () => {
|
|
47
|
+
const hooks = {
|
|
48
|
+
onTurnEnd: [async () => ({ fork: true, detached: true, followUp: 'silent task' })],
|
|
49
|
+
};
|
|
50
|
+
const engine = createTurnEngine({
|
|
51
|
+
name: 'test', cwd: '/tmp',
|
|
52
|
+
runtime: createMockRuntime('original'), hooks, tools: [],
|
|
53
|
+
});
|
|
54
|
+
const trace = await engine.processTurn({ input: 'go' });
|
|
55
|
+
expect(trace.followUps).toHaveLength(1);
|
|
56
|
+
expect(trace.followUps[0]).toEqual({
|
|
57
|
+
prompt: 'silent task',
|
|
58
|
+
fork: true,
|
|
59
|
+
detached: true,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
it('forked turn (metadata.forkedFrom set) downgrades fork to blocking', async () => {
|
|
63
|
+
const hooks = {
|
|
64
|
+
onTurnEnd: [async () => ({ fork: true, followUp: 'try nested fork' })],
|
|
65
|
+
};
|
|
66
|
+
const engine = createTurnEngine({
|
|
67
|
+
name: 'test', cwd: '/tmp',
|
|
68
|
+
runtime: createMockRuntime('forked response'), hooks, tools: [],
|
|
69
|
+
});
|
|
70
|
+
const trace = await engine.processTurn({
|
|
71
|
+
input: 'from fork',
|
|
72
|
+
metadata: { forkedFrom: 'parent-turn-123' },
|
|
73
|
+
});
|
|
74
|
+
expect(trace.followUps).toHaveLength(1);
|
|
75
|
+
expect(trace.followUps[0].fork).toBe(false);
|
|
76
|
+
expect(trace.followUps[0].detached).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=worker-fork.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-fork.test.js","sourceRoot":"","sources":["../../src/__tests__/worker-fork.test.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EAEX,SAAS,EAGT,YAAY,EACZ,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EAEX,SAAS,EAGT,YAAY,EACZ,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,YAAY,EAA4C,MAAM,oBAAoB,CAAA;AAGhG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,CAAA;IACnD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB;2BAGnB,kBAAkB,KAAG,OAAO,CAAC,SAAS,CAAC;EAqL5E"}
|
package/dist/engine.js
CHANGED
|
@@ -48,9 +48,37 @@ export function createTurnEngine(config) {
|
|
|
48
48
|
}
|
|
49
49
|
allFragments.push({ source: 'connector-meta', role: 'append', content: contextContent });
|
|
50
50
|
}
|
|
51
|
-
// === onTurnStart hooks
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
// === onTurnStart hooks ===
|
|
52
|
+
for (const callback of hooks?.onTurnStart ?? []) {
|
|
53
|
+
try {
|
|
54
|
+
const turnStartInput = {
|
|
55
|
+
hookEventName: 'turnStart',
|
|
56
|
+
prompt: options.input,
|
|
57
|
+
turnContext: context,
|
|
58
|
+
};
|
|
59
|
+
const decision = await callback(turnStartInput);
|
|
60
|
+
if (decision.decision === 'block') {
|
|
61
|
+
console.log(`[engine] turn ${turnId.slice(0, 8)} blocked by onTurnStart hook: ${decision.reason}`);
|
|
62
|
+
return {
|
|
63
|
+
turnId,
|
|
64
|
+
timestamp,
|
|
65
|
+
agentName: name,
|
|
66
|
+
trigger,
|
|
67
|
+
input: options.input,
|
|
68
|
+
hooks: hookTraces,
|
|
69
|
+
assembledContext: '',
|
|
70
|
+
result: null,
|
|
71
|
+
error: `Blocked by onTurnStart hook: ${decision.reason}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if ('fragments' in decision && decision.fragments) {
|
|
75
|
+
allFragments.push(...decision.fragments);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (hookErr) {
|
|
79
|
+
console.error(`[engine] onTurnStart hook threw:`, hookErr);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
54
82
|
// === Assemble context ===
|
|
55
83
|
const assembledContext = assembleContext(allFragments);
|
|
56
84
|
// === Run runtime ===
|
|
@@ -74,7 +102,7 @@ export function createTurnEngine(config) {
|
|
|
74
102
|
onEvent: options.onEvent,
|
|
75
103
|
pendingMessages: options.pendingMessages,
|
|
76
104
|
disabledTools,
|
|
77
|
-
hooks,
|
|
105
|
+
hooks: hooks ? { ...hooks, onTurnStart: undefined } : undefined,
|
|
78
106
|
});
|
|
79
107
|
result = {
|
|
80
108
|
text: runtimeResult.text,
|
|
@@ -93,9 +121,9 @@ export function createTurnEngine(config) {
|
|
|
93
121
|
error: err instanceof Error ? err : new Error(String(err)),
|
|
94
122
|
turnContext: context,
|
|
95
123
|
};
|
|
96
|
-
for (const
|
|
124
|
+
for (const callback of hooks?.onError ?? []) {
|
|
97
125
|
try {
|
|
98
|
-
await
|
|
126
|
+
await callback(errorInput);
|
|
99
127
|
}
|
|
100
128
|
catch (hookErr) {
|
|
101
129
|
console.error(`[engine] hooks.onError threw:`, hookErr);
|
|
@@ -110,9 +138,19 @@ export function createTurnEngine(config) {
|
|
|
110
138
|
result,
|
|
111
139
|
turnContext: context,
|
|
112
140
|
};
|
|
113
|
-
|
|
141
|
+
const isForkedTurn = context.metadata.forkedFrom != null;
|
|
142
|
+
for (const callback of hooks?.onTurnEnd ?? []) {
|
|
114
143
|
try {
|
|
115
|
-
await
|
|
144
|
+
const hookResult = await callback(turnEndInput);
|
|
145
|
+
if (hookResult && typeof hookResult === 'object' && hookResult.followUp) {
|
|
146
|
+
// Ignore fork from forked turns (1-level depth limit)
|
|
147
|
+
const fork = isForkedTurn ? false : (hookResult.fork ?? false);
|
|
148
|
+
followUps.push({
|
|
149
|
+
prompt: hookResult.followUp,
|
|
150
|
+
fork,
|
|
151
|
+
detached: fork ? (hookResult.detached ?? false) : false,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
116
154
|
}
|
|
117
155
|
catch (hookErr) {
|
|
118
156
|
console.error(`[engine] hooks.onTurnEnd threw:`, hookErr);
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAyBxC,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;IAEnD,KAAK,UAAU,WAAW,CAAC,OAA2B;QACpD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAA;QACjD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAEnC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,oBAAoB,OAAO,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;QAEpH,MAAM,OAAO,GAAgB;YAC3B,MAAM;YACN,SAAS,EAAE,IAAI;YACf,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;SACjC,CAAA;QAED,MAAM,UAAU,GAAgB,EAAE,CAAA;QAClC,MAAM,YAAY,GAAsB,EAAE,CAAA;QAE1C,wCAAwC;QACxC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAA;YAC3B,gEAAgE;YAChE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1D,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC7B,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;YACjC,MAAM,KAAK,GAAG;gBACZ,cAAc,CAAC,CAAC,IAAI,EAAE;gBACtB,cAAc,SAAS,EAAE;gBACzB,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;gBACzC,WAAW,CAAC,CAAC,MAAM,EAAE;gBACrB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;aACzE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5B,IAAI,cAAc,GAAG,6BAA6B,KAAK,EAAE,CAAA;YACzD,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAChC,IAAI,CAAC,CAAC,SAAS;wBAAE,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,EAAE,CAAA;oBACpE,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAA;gBAChD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;gBAC/C,MAAM,IAAI,GAAG,QAAQ;oBACnB,CAAC,CAAC,uDAAuD;oBACzD,CAAC,CAAC,8EAA8E,CAAA;gBAClF,cAAc,IAAI,sBAAsB,SAAS,MAAM,IAAI,EAAE,CAAA;YAC/D,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1F,CAAC;QAED,4BAA4B;QAC5B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,cAAc,GAAmB;oBACrC,aAAa,EAAE,WAAW;oBAC1B,MAAM,EAAE,OAAO,CAAC,KAAK;oBACrB,WAAW,EAAE,OAAO;iBACrB,CAAA;gBACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAA;gBAC/C,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,iCAAiC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;oBAClG,OAAO;wBACL,MAAM;wBACN,SAAS;wBACT,SAAS,EAAE,IAAI;wBACf,OAAO;wBACP,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,KAAK,EAAE,UAAU;wBACjB,gBAAgB,EAAE,EAAE;wBACpB,MAAM,EAAE,IAAI;wBACZ,KAAK,EAAE,gCAAgC,QAAQ,CAAC,MAAM,EAAE;qBACzD,CAAA;gBACH,CAAC;gBACD,IAAI,WAAW,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAClD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;QAEtD,sBAAsB;QACtB,IAAI,MAAM,GAAsB,IAAI,CAAA;QACpC,IAAI,KAAK,GAAkB,IAAI,CAAA;QAE/B,IAAI,CAAC;YACH,yEAAyE;YACzE,yEAAyE;YACzE,mEAAmE;YACnE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;YAC3C,MAAM,cAAc,GAAG,aAAa,EAAE,MAAM;gBAC1C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACpD,CAAC,CAAC,KAAK,CAAA;YAET,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;gBAClD,gBAAgB,EAAE,YAAY;gBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,cAAc;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACpC,GAAG;gBACH,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,aAAa;gBACb,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;aAChE,CAAC,CAAA;YACF,MAAM,GAAG;gBACP,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,SAAS,EAAE,aAAa,CAAC,SAAS;gBAClC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACrD,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CAAA;YACD,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxD,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAElE,+BAA+B;YAC/B,MAAM,UAAU,GAAe;gBAC7B,aAAa,EAAE,OAAO;gBACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1D,WAAW,EAAE,OAAO;aACrB,CAAA;YACD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAC5B,CAAC;gBAAC,OAAO,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAwC,EAAE,CAAA;QACzD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAiB;gBACjC,aAAa,EAAE,SAAS;gBACxB,MAAM;gBACN,WAAW,EAAE,OAAO;aACrB,CAAA;YACD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAA;YACxD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAA;oBAC/C,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACxE,sDAAsD;wBACtD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,CAAA;wBAC9D,SAAS,CAAC,IAAI,CAAC;4BACb,MAAM,EAAE,UAAU,CAAC,QAAQ;4BAC3B,IAAI;4BACJ,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;yBACxD,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBAAC,OAAO,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAA;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,QAAQ,cAAc,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,WAAW,KAAK,IAAI,MAAM,EAAE,CAAC,CAAA;QAExJ,OAAO;YACL,MAAM;YACN,SAAS;YACT,SAAS,EAAE,IAAI;YACf,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,UAAU;YACjB,gBAAgB;YAChB,MAAM;YACN,KAAK;YACL,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACxD,CAAA;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC;AAED,2BAA2B;AAE3B,SAAS,eAAe,CAAC,SAA4B;IACnD,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;IAClE,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACpE,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;IAElE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAQD,KAAK,UAAU,cAAc,CAC3B,OAAgB,EAChB,OAWC;IAED,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAE/H,KAAK,SAAS,CAAC,CAAC,cAAc;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,EAAE;QACT,gBAAgB;QAChB,MAAM,EAAE,cAAc,EAAE;QACxB,KAAK;QACL,SAAS;QACT,GAAG;QACH,GAAG,EAAE,EAAE;QACP,WAAW,EAAE,WAAW,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM;QACxD,eAAe;QACf,aAAa;QACb,KAAK;KACN,CAAC,CAAA;IAEF,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,IAAI,YAAY,GAAG,EAAE,CAAA,CAAC,mDAAmD;IACzE,IAAI,eAAe,GAAkB,SAAS,CAAA;IAC9C,MAAM,SAAS,GAAiE,EAAE,CAAA;IAClF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,cAAc;gBACjB,eAAe,GAAG,KAAK,CAAC,SAAS,CAAA;gBACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;gBACzD,MAAK;YACP,KAAK,UAAU;gBACb,YAAY,GAAG,KAAK,CAAC,IAAI,CAAA,CAAC,yBAAyB;gBACnD,MAAK;YACP,KAAK,gBAAgB;gBACnB,YAAY,IAAI,KAAK,CAAC,IAAI,CAAA,CAAC,oBAAoB;gBAC/C,MAAK;YACP,KAAK,QAAQ;gBACX,UAAU,GAAG,KAAK,CAAC,IAAI,CAAA;gBACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;gBACvD,MAAK;YACP,KAAK,YAAY;gBACf,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAA;gBACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACtD,MAAK;YACP,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAClE,SAAS,CAAC,IAAI,CAAC;oBACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,QAAQ,IAAI,QAAQ,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACpG,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,SAAS,GAAG,UAAU,IAAI,YAAY,CAAA;IAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,CAAA;AACnE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
|
-
export {
|
|
3
|
-
export type { PreToolUseInput, PostToolUseInput, TurnStartInput, TurnEndInput, StopInput, SessionStartInput, ErrorInput, HookInput, PreToolUseDecision, PostToolUseResult, TurnStartDecision, TurnEndResult, StopDecision, SessionStartResult, ErrorResult, PreToolUseCallback, PostToolUseCallback, TurnStartCallback, TurnEndCallback, StopCallback, SessionStartCallback, ErrorCallback, ToolHookMatcher, SimpleHookMatcher, RuntimeHooks, } from './runtime-hooks.js';
|
|
2
|
+
export type { PreToolUseInput, PostToolUseInput, TurnStartInput, TurnEndInput, StopInput, SessionStartInput, ErrorInput, HookInput, PreToolUseDecision, PostToolUseResult, TurnStartDecision, TurnEndResult, StopDecision, SessionStartResult, ErrorResult, PreToolUseCallback, PostToolUseCallback, TurnStartCallback, TurnEndCallback, StopCallback, SessionStartCallback, ErrorCallback, ToolHookMatcher, RuntimeHooks, } from './runtime-hooks.js';
|
|
4
3
|
export { env, validateEnv } from './env.js';
|
|
5
4
|
export { defineConfig } from './config.js';
|
|
6
5
|
export type { ResolvedSenaConfig } from './config.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC3F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxD,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AA2B1B,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE3F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/runtime-hooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TurnContext, TurnResult,
|
|
1
|
+
import type { TurnContext, TurnResult, ContextFragment } from './types.js';
|
|
2
2
|
export type PreToolUseInput = {
|
|
3
3
|
hookEventName: 'preToolUse';
|
|
4
4
|
toolName: string;
|
|
@@ -57,19 +57,19 @@ export type TurnStartDecision = {
|
|
|
57
57
|
decision: 'allow';
|
|
58
58
|
} | {
|
|
59
59
|
decision: 'allow';
|
|
60
|
-
|
|
60
|
+
fragments: ContextFragment[];
|
|
61
61
|
} | {
|
|
62
62
|
decision: 'block';
|
|
63
63
|
reason: string;
|
|
64
|
-
} | {
|
|
65
|
-
decision: 'modifiedPrompt';
|
|
66
|
-
prompt: string;
|
|
67
|
-
} | {
|
|
68
|
-
decision: 'modifiedPrompt';
|
|
69
|
-
prompt: string;
|
|
70
|
-
additionalContext: string;
|
|
71
64
|
};
|
|
72
|
-
export type TurnEndResult = void
|
|
65
|
+
export type TurnEndResult = void | {
|
|
66
|
+
/** Execute a follow-up prompt after this turn */
|
|
67
|
+
followUp?: string;
|
|
68
|
+
/** Fork into a new session (inherits current session context via resume). Requires followUp. */
|
|
69
|
+
fork?: boolean;
|
|
70
|
+
/** Suppress connector output for the forked turn. Only effective when fork is true. */
|
|
71
|
+
detached?: boolean;
|
|
72
|
+
};
|
|
73
73
|
export type StopDecision = void | {
|
|
74
74
|
continueWith: string;
|
|
75
75
|
};
|
|
@@ -89,27 +89,13 @@ export type ToolHookMatcher<T> = {
|
|
|
89
89
|
toolName?: RegExp;
|
|
90
90
|
callback: T;
|
|
91
91
|
};
|
|
92
|
-
export type SimpleHookMatcher<T> = {
|
|
93
|
-
callback: T;
|
|
94
|
-
};
|
|
95
92
|
export type RuntimeHooks = {
|
|
96
93
|
onPreToolUse?: ToolHookMatcher<PreToolUseCallback>[];
|
|
97
94
|
onPostToolUse?: ToolHookMatcher<PostToolUseCallback>[];
|
|
98
|
-
onTurnStart?:
|
|
99
|
-
onTurnEnd?:
|
|
100
|
-
onStop?:
|
|
101
|
-
onSessionStart?:
|
|
102
|
-
onError?:
|
|
95
|
+
onTurnStart?: TurnStartCallback[];
|
|
96
|
+
onTurnEnd?: TurnEndCallback[];
|
|
97
|
+
onStop?: StopCallback[];
|
|
98
|
+
onSessionStart?: SessionStartCallback[];
|
|
99
|
+
onError?: ErrorCallback[];
|
|
103
100
|
};
|
|
104
|
-
/**
|
|
105
|
-
* Converts legacy TurnStartHook / TurnEndHook / ErrorHook arrays
|
|
106
|
-
* into the new RuntimeHooks format, merging with any existing RuntimeHooks.
|
|
107
|
-
*
|
|
108
|
-
* @deprecated Legacy hooks will be removed in a future version.
|
|
109
|
-
*/
|
|
110
|
-
export declare function adaptLegacyHooks(legacy: {
|
|
111
|
-
onTurnStart?: TurnStartHook[];
|
|
112
|
-
onTurnEnd?: TurnEndHook[];
|
|
113
|
-
onError?: ErrorHook[];
|
|
114
|
-
}, existing?: RuntimeHooks): RuntimeHooks;
|
|
115
101
|
//# sourceMappingURL=runtime-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-hooks.d.ts","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"runtime-hooks.d.ts","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-hooks.js
CHANGED
|
@@ -1,48 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
function fragmentsToContext(fragments) {
|
|
3
|
-
return fragments.map((f) => f.content).join('\n');
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Converts legacy TurnStartHook / TurnEndHook / ErrorHook arrays
|
|
7
|
-
* into the new RuntimeHooks format, merging with any existing RuntimeHooks.
|
|
8
|
-
*
|
|
9
|
-
* @deprecated Legacy hooks will be removed in a future version.
|
|
10
|
-
*/
|
|
11
|
-
export function adaptLegacyHooks(legacy, existing) {
|
|
12
|
-
const hooks = {
|
|
13
|
-
...existing,
|
|
14
|
-
};
|
|
15
|
-
if (legacy.onTurnStart?.length) {
|
|
16
|
-
console.warn('[sena] onTurnStart hooks are deprecated. Use hooks.onTurnStart instead.');
|
|
17
|
-
const adapted = legacy.onTurnStart.map((h) => ({
|
|
18
|
-
callback: async (input) => {
|
|
19
|
-
const fragments = await h.execute(input.turnContext);
|
|
20
|
-
if (fragments.length === 0) {
|
|
21
|
-
return { decision: 'allow' };
|
|
22
|
-
}
|
|
23
|
-
return { decision: 'allow', additionalContext: fragmentsToContext(fragments) };
|
|
24
|
-
},
|
|
25
|
-
}));
|
|
26
|
-
hooks.onTurnStart = [...adapted, ...(existing?.onTurnStart ?? [])];
|
|
27
|
-
}
|
|
28
|
-
if (legacy.onTurnEnd?.length) {
|
|
29
|
-
console.warn('[sena] onTurnEnd hooks are deprecated. Use hooks.onTurnEnd instead.');
|
|
30
|
-
const adapted = legacy.onTurnEnd.map((h) => ({
|
|
31
|
-
callback: async (input) => {
|
|
32
|
-
await h.execute(input.turnContext, input.result);
|
|
33
|
-
},
|
|
34
|
-
}));
|
|
35
|
-
hooks.onTurnEnd = [...adapted, ...(existing?.onTurnEnd ?? [])];
|
|
36
|
-
}
|
|
37
|
-
if (legacy.onError?.length) {
|
|
38
|
-
console.warn('[sena] onError hooks are deprecated. Use hooks.onError instead.');
|
|
39
|
-
const adapted = legacy.onError.map((h) => ({
|
|
40
|
-
callback: async (input) => {
|
|
41
|
-
await h.execute(input.turnContext, input.error);
|
|
42
|
-
},
|
|
43
|
-
}));
|
|
44
|
-
hooks.onError = [...adapted, ...(existing?.onError ?? [])];
|
|
45
|
-
}
|
|
46
|
-
return hooks;
|
|
47
|
-
}
|
|
1
|
+
export {};
|
|
48
2
|
//# sourceMappingURL=runtime-hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-hooks.js","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-hooks.js","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,22 +3,6 @@ export type ContextFragment = {
|
|
|
3
3
|
role: 'system' | 'prepend' | 'append';
|
|
4
4
|
content: string;
|
|
5
5
|
};
|
|
6
|
-
export type TurnStartHook = {
|
|
7
|
-
name: string;
|
|
8
|
-
execute(context: TurnContext): Promise<ContextFragment[]>;
|
|
9
|
-
};
|
|
10
|
-
export type TurnEndHook = {
|
|
11
|
-
name: string;
|
|
12
|
-
/**
|
|
13
|
-
* Called after a successful turn. Return a string to trigger a follow-up turn
|
|
14
|
-
* with that string as the prompt. Return void to do nothing.
|
|
15
|
-
*/
|
|
16
|
-
execute(context: TurnContext, result: TurnResult): Promise<string | void>;
|
|
17
|
-
};
|
|
18
|
-
export type ErrorHook = {
|
|
19
|
-
name: string;
|
|
20
|
-
execute(context: TurnContext, error: Error): Promise<void>;
|
|
21
|
-
};
|
|
22
6
|
export type FileAttachment = {
|
|
23
7
|
id: string;
|
|
24
8
|
name: string;
|
|
@@ -63,6 +47,11 @@ export type HookTrace = {
|
|
|
63
47
|
durationMs: number;
|
|
64
48
|
fragments: ContextFragment[];
|
|
65
49
|
};
|
|
50
|
+
export type TurnFollowUp = {
|
|
51
|
+
prompt: string;
|
|
52
|
+
fork: boolean;
|
|
53
|
+
detached: boolean;
|
|
54
|
+
};
|
|
66
55
|
export type TurnTrace = {
|
|
67
56
|
turnId: string;
|
|
68
57
|
timestamp: string;
|
|
@@ -74,7 +63,7 @@ export type TurnTrace = {
|
|
|
74
63
|
result: TurnResult | null;
|
|
75
64
|
error: string | null;
|
|
76
65
|
/** Follow-up prompts from onTurnEnd hooks. Worker will process these as continuation turns. */
|
|
77
|
-
followUps?:
|
|
66
|
+
followUps?: TurnFollowUp[];
|
|
78
67
|
};
|
|
79
68
|
export type UserMessage = {
|
|
80
69
|
text: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAyD,YAAY,EAAc,MAAM,YAAY,CAAA;AAKjH;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B3F;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAwBrE;AAYD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa;iBAoYzB,OAAO,CAAC,IAAI,CAAC;gBA0Ed,OAAO,CAAC,IAAI,CAAC;;;;;EAkErC"}
|
package/dist/worker.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
2
3
|
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
3
4
|
import { resolve, dirname } from 'node:path';
|
|
4
5
|
import { createTurnEngine } from './engine.js';
|
|
@@ -220,10 +221,17 @@ export function createWorker(options) {
|
|
|
220
221
|
console.error(`[worker] turn error in ${event.conversationId}, will process remaining pending messages (${pendingEvents.length} left):`, err);
|
|
221
222
|
lastError = err;
|
|
222
223
|
}
|
|
223
|
-
//
|
|
224
|
-
for (const
|
|
225
|
-
|
|
226
|
-
|
|
224
|
+
// Process followUps from onTurnEnd hooks
|
|
225
|
+
for (const followUp of followUps) {
|
|
226
|
+
if (!followUp.fork) {
|
|
227
|
+
// Blocking followUp: enqueue as pending event (same session)
|
|
228
|
+
pendingEvents.push({ ...event, text: followUp.prompt });
|
|
229
|
+
console.log(`[worker] enqueued blocking follow-up from onTurnEnd hook`);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Fork followUp: spawn in background (fire-and-forget)
|
|
233
|
+
spawnForkedTurn(event, followUp);
|
|
234
|
+
}
|
|
227
235
|
}
|
|
228
236
|
if (pendingEvents.length === 0)
|
|
229
237
|
break;
|
|
@@ -339,6 +347,92 @@ export function createWorker(options) {
|
|
|
339
347
|
await output.dispose();
|
|
340
348
|
}
|
|
341
349
|
}
|
|
350
|
+
/** Active fork promises — tracked for graceful shutdown */
|
|
351
|
+
const activeForks = new Set();
|
|
352
|
+
/**
|
|
353
|
+
* Spawns a forked turn in the background (fire-and-forget).
|
|
354
|
+
* The forked turn inherits the original session via sessionId resume.
|
|
355
|
+
*/
|
|
356
|
+
function spawnForkedTurn(originalEvent, followUp) {
|
|
357
|
+
const forkId = randomUUID().slice(0, 8);
|
|
358
|
+
const forkConversationId = `fork-${originalEvent.conversationId}-${forkId}`;
|
|
359
|
+
console.log(`[worker] spawning forked turn ${forkId} (detached:${followUp.detached}) for ${originalEvent.conversationId}`);
|
|
360
|
+
const forkPromise = (async () => {
|
|
361
|
+
try {
|
|
362
|
+
// Look up original session to resume from
|
|
363
|
+
const originalSessionId = await sessionStore.get(originalEvent.conversationId);
|
|
364
|
+
// Create output: NullOutput for detached, or real connector output
|
|
365
|
+
const connector = connectorMap.get(originalEvent.connector);
|
|
366
|
+
const output = followUp.detached || !connector
|
|
367
|
+
? { showProgress: async () => { }, sendResult: async () => { }, sendError: async () => { }, dispose: async () => { } }
|
|
368
|
+
: connector.createOutput({
|
|
369
|
+
conversationId: originalEvent.conversationId,
|
|
370
|
+
connector: originalEvent.connector,
|
|
371
|
+
metadata: originalEvent.raw,
|
|
372
|
+
});
|
|
373
|
+
try {
|
|
374
|
+
const trace = await engine.processTurn({
|
|
375
|
+
input: followUp.prompt,
|
|
376
|
+
trigger: 'connector',
|
|
377
|
+
sessionId: originalSessionId,
|
|
378
|
+
connector: {
|
|
379
|
+
name: originalEvent.connector,
|
|
380
|
+
conversationId: originalEvent.conversationId,
|
|
381
|
+
userId: originalEvent.userId,
|
|
382
|
+
userName: originalEvent.userName,
|
|
383
|
+
raw: originalEvent.raw,
|
|
384
|
+
},
|
|
385
|
+
metadata: { forkedFrom: originalEvent.conversationId },
|
|
386
|
+
});
|
|
387
|
+
// Save forked session under its own key (don't pollute original)
|
|
388
|
+
if (trace.result?.sessionId) {
|
|
389
|
+
await sessionStore.set(forkConversationId, trace.result.sessionId);
|
|
390
|
+
}
|
|
391
|
+
// Send result if not detached
|
|
392
|
+
if (trace.result) {
|
|
393
|
+
await output.sendResult(trace.result.text);
|
|
394
|
+
}
|
|
395
|
+
else if (trace.error && !followUp.detached) {
|
|
396
|
+
await output.sendError(trace.error);
|
|
397
|
+
}
|
|
398
|
+
// Process blocking followUps from the forked turn (fork is downgraded by engine)
|
|
399
|
+
for (const childFollowUp of trace.followUps ?? []) {
|
|
400
|
+
if (!childFollowUp.fork) {
|
|
401
|
+
// Execute blocking followUp in the forked context
|
|
402
|
+
const childTrace = await engine.processTurn({
|
|
403
|
+
input: childFollowUp.prompt,
|
|
404
|
+
trigger: 'connector',
|
|
405
|
+
sessionId: trace.result?.sessionId ?? originalSessionId,
|
|
406
|
+
connector: {
|
|
407
|
+
name: originalEvent.connector,
|
|
408
|
+
conversationId: originalEvent.conversationId,
|
|
409
|
+
userId: originalEvent.userId,
|
|
410
|
+
userName: originalEvent.userName,
|
|
411
|
+
raw: originalEvent.raw,
|
|
412
|
+
},
|
|
413
|
+
metadata: { forkedFrom: originalEvent.conversationId },
|
|
414
|
+
});
|
|
415
|
+
if (childTrace.result?.sessionId) {
|
|
416
|
+
await sessionStore.set(forkConversationId, childTrace.result.sessionId);
|
|
417
|
+
}
|
|
418
|
+
if (childTrace.result && !followUp.detached) {
|
|
419
|
+
await output.sendResult(childTrace.result.text);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// fork followUps from forked turns are already downgraded by engine, but ignore any that slip through
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
finally {
|
|
426
|
+
await output.dispose();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
catch (err) {
|
|
430
|
+
console.error(`[worker] forked turn ${forkId} error:`, err);
|
|
431
|
+
}
|
|
432
|
+
})();
|
|
433
|
+
activeForks.add(forkPromise);
|
|
434
|
+
forkPromise.finally(() => activeForks.delete(forkPromise));
|
|
435
|
+
}
|
|
342
436
|
// Simple HTTP server adapter
|
|
343
437
|
const routes = [];
|
|
344
438
|
const httpServer = {
|
|
@@ -439,11 +533,15 @@ export function createWorker(options) {
|
|
|
439
533
|
if (activeConversations.size > 0) {
|
|
440
534
|
console.log(`[worker] draining: waiting for ${activeConversations.size} active turn(s) to finish`);
|
|
441
535
|
await Promise.allSettled([...activeConversations.values()].map(s => s.activeTurnPromise));
|
|
442
|
-
console.log('[worker] all active turns finished
|
|
536
|
+
console.log('[worker] all active turns finished');
|
|
443
537
|
}
|
|
444
|
-
|
|
445
|
-
|
|
538
|
+
// Wait for any forked turns still running
|
|
539
|
+
if (activeForks.size > 0) {
|
|
540
|
+
console.log(`[worker] draining: waiting for ${activeForks.size} forked turn(s) to finish`);
|
|
541
|
+
await Promise.allSettled([...activeForks]);
|
|
542
|
+
console.log('[worker] all forked turns finished');
|
|
446
543
|
}
|
|
544
|
+
console.log('[worker] exiting');
|
|
447
545
|
process.exit(0);
|
|
448
546
|
}
|
|
449
547
|
// Safety-net timeout — only for truly stuck processes (e.g. hung API call).
|