@sena-ai/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/__tests__/agent.test.d.ts +2 -0
  2. package/dist/__tests__/agent.test.d.ts.map +1 -0
  3. package/dist/__tests__/agent.test.js +25 -0
  4. package/dist/__tests__/agent.test.js.map +1 -0
  5. package/dist/__tests__/config.test.d.ts +2 -0
  6. package/dist/__tests__/config.test.d.ts.map +1 -0
  7. package/dist/__tests__/config.test.js +31 -0
  8. package/dist/__tests__/config.test.js.map +1 -0
  9. package/dist/__tests__/engine.test.d.ts +2 -0
  10. package/dist/__tests__/engine.test.d.ts.map +1 -0
  11. package/dist/__tests__/engine.test.js +208 -0
  12. package/dist/__tests__/engine.test.js.map +1 -0
  13. package/dist/__tests__/env.test.d.ts +2 -0
  14. package/dist/__tests__/env.test.d.ts.map +1 -0
  15. package/dist/__tests__/env.test.js +30 -0
  16. package/dist/__tests__/env.test.js.map +1 -0
  17. package/dist/__tests__/full-config.test.d.ts +2 -0
  18. package/dist/__tests__/full-config.test.d.ts.map +1 -0
  19. package/dist/__tests__/full-config.test.js +138 -0
  20. package/dist/__tests__/full-config.test.js.map +1 -0
  21. package/dist/__tests__/helpers.d.ts +16 -0
  22. package/dist/__tests__/helpers.d.ts.map +1 -0
  23. package/dist/__tests__/helpers.js +48 -0
  24. package/dist/__tests__/helpers.js.map +1 -0
  25. package/dist/__tests__/integration.test.d.ts +2 -0
  26. package/dist/__tests__/integration.test.d.ts.map +1 -0
  27. package/dist/__tests__/integration.test.js +57 -0
  28. package/dist/__tests__/integration.test.js.map +1 -0
  29. package/dist/__tests__/scheduler.test.d.ts +2 -0
  30. package/dist/__tests__/scheduler.test.d.ts.map +1 -0
  31. package/dist/__tests__/scheduler.test.js +143 -0
  32. package/dist/__tests__/scheduler.test.js.map +1 -0
  33. package/dist/__tests__/worker.test.d.ts +2 -0
  34. package/dist/__tests__/worker.test.d.ts.map +1 -0
  35. package/dist/__tests__/worker.test.js +154 -0
  36. package/dist/__tests__/worker.test.js.map +1 -0
  37. package/dist/agent.d.ts +9 -0
  38. package/dist/agent.d.ts.map +1 -0
  39. package/dist/agent.js +14 -0
  40. package/dist/agent.js.map +1 -0
  41. package/dist/config.d.ts +7 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +12 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/engine.d.ts +25 -0
  46. package/dist/engine.d.ts.map +1 -0
  47. package/dist/engine.js +167 -0
  48. package/dist/engine.js.map +1 -0
  49. package/dist/env.d.ts +4 -0
  50. package/dist/env.d.ts.map +1 -0
  51. package/dist/env.js +22 -0
  52. package/dist/env.js.map +1 -0
  53. package/dist/index.d.ts +13 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +9 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/orchestrator.d.ts +18 -0
  58. package/dist/orchestrator.d.ts.map +1 -0
  59. package/dist/orchestrator.js +106 -0
  60. package/dist/orchestrator.js.map +1 -0
  61. package/dist/scheduler.d.ts +15 -0
  62. package/dist/scheduler.d.ts.map +1 -0
  63. package/dist/scheduler.js +100 -0
  64. package/dist/scheduler.js.map +1 -0
  65. package/dist/types.d.ts +178 -0
  66. package/dist/types.d.ts.map +1 -0
  67. package/dist/types.js +3 -0
  68. package/dist/types.js.map +1 -0
  69. package/dist/worker.d.ts +16 -0
  70. package/dist/worker.d.ts.map +1 -0
  71. package/dist/worker.js +111 -0
  72. package/dist/worker.js.map +1 -0
  73. package/package.json +19 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/agent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createAgent } from '../agent.js';
3
+ import { defineConfig } from '../config.js';
4
+ import { createMockRuntime, createMockHook } from './helpers.js';
5
+ describe('createAgent()', () => {
6
+ it('creates an agent that can process turns', async () => {
7
+ const config = defineConfig({
8
+ name: 'test-bot',
9
+ runtime: createMockRuntime('I am test-bot'),
10
+ hooks: {
11
+ onTurnStart: [
12
+ createMockHook('greeting', [
13
+ { source: 'test:greeting', role: 'system', content: 'You are test-bot' },
14
+ ]),
15
+ ],
16
+ },
17
+ });
18
+ const agent = createAgent(config);
19
+ const trace = await agent.processTurn({ input: 'hello' });
20
+ expect(trace.agentName).toBe('test-bot');
21
+ expect(trace.result?.text).toBe('I am test-bot');
22
+ expect(trace.assembledContext).toContain('You are test-bot');
23
+ });
24
+ });
25
+ //# sourceMappingURL=agent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../src/__tests__/agent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEhE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE;gBACL,WAAW,EAAE;oBACX,cAAc,CAAC,UAAU,EAAE;wBACzB,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;qBACzE,CAAC;iBACH;aACF;SACF,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QAEzD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { defineConfig } from '../config.js';
3
+ const mockRuntime = {
4
+ name: 'mock',
5
+ async *createStream() {
6
+ yield { type: 'result', text: 'hello' };
7
+ },
8
+ };
9
+ describe('defineConfig()', () => {
10
+ it('returns config as-is with defaults applied', () => {
11
+ const config = defineConfig({
12
+ name: 'test-agent',
13
+ runtime: mockRuntime,
14
+ });
15
+ expect(config.name).toBe('test-agent');
16
+ expect(config.runtime.name).toBe('mock');
17
+ expect(config.connectors).toEqual([]);
18
+ expect(config.tools).toEqual([]);
19
+ expect(config.hooks).toEqual({});
20
+ expect(config.schedules).toEqual([]);
21
+ });
22
+ it('preserves user-provided values', () => {
23
+ const config = defineConfig({
24
+ name: 'agent',
25
+ runtime: mockRuntime,
26
+ orchestrator: { port: 4000 },
27
+ });
28
+ expect(config.orchestrator?.port).toBe(4000);
29
+ });
30
+ });
31
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,GAAY;IAC3B,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,CAAC,YAAY;QACjB,MAAM,EAAE,IAAI,EAAE,QAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAClD,CAAC;CACF,CAAA;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,WAAW;SACrB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC7B,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,208 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createTurnEngine } from '../engine.js';
3
+ import { createMockRuntime, createMockHook, createSpyEndHook, createStreamingMockRuntime, createSpyErrorHook } from './helpers.js';
4
+ describe('TurnEngine', () => {
5
+ it('executes a basic turn and returns a TurnTrace', async () => {
6
+ const engine = createTurnEngine({
7
+ name: 'test',
8
+ runtime: createMockRuntime('hello world'),
9
+ hooks: {},
10
+ tools: [],
11
+ });
12
+ const trace = await engine.processTurn({ input: 'hi' });
13
+ expect(trace.agentName).toBe('test');
14
+ expect(trace.trigger).toBe('programmatic');
15
+ expect(trace.input).toBe('hi');
16
+ expect(trace.result?.text).toBe('hello world');
17
+ expect(trace.result?.sessionId).toBe('sess-1');
18
+ expect(trace.error).toBeNull();
19
+ });
20
+ it('runs onTurnStart hooks and collects fragments', async () => {
21
+ const fragments = [
22
+ { source: 'test:soul', role: 'system', content: 'You are a test agent' },
23
+ ];
24
+ const engine = createTurnEngine({
25
+ name: 'test',
26
+ runtime: createMockRuntime(),
27
+ hooks: {
28
+ onTurnStart: [createMockHook('soul-loader', fragments)],
29
+ },
30
+ tools: [],
31
+ });
32
+ const trace = await engine.processTurn({ input: 'hello' });
33
+ expect(trace.hooks).toHaveLength(1);
34
+ expect(trace.hooks[0].name).toBe('soul-loader');
35
+ expect(trace.hooks[0].fragments).toEqual(fragments);
36
+ expect(trace.assembledContext).toContain('You are a test agent');
37
+ });
38
+ it('runs multiple onTurnStart hooks in order', async () => {
39
+ const engine = createTurnEngine({
40
+ name: 'test',
41
+ runtime: createMockRuntime(),
42
+ hooks: {
43
+ onTurnStart: [
44
+ createMockHook('hook-a', [{ source: 'a', role: 'system', content: 'AAA' }]),
45
+ createMockHook('hook-b', [{ source: 'b', role: 'context', content: 'BBB' }]),
46
+ ],
47
+ },
48
+ tools: [],
49
+ });
50
+ const trace = await engine.processTurn({ input: 'test' });
51
+ expect(trace.hooks).toHaveLength(2);
52
+ expect(trace.hooks[0].name).toBe('hook-a');
53
+ expect(trace.hooks[1].name).toBe('hook-b');
54
+ expect(trace.assembledContext).toMatch(/AAA[\s\S]*BBB/);
55
+ });
56
+ it('runs onTurnEnd hooks with result', async () => {
57
+ const endHook = createSpyEndHook('logger');
58
+ const engine = createTurnEngine({
59
+ name: 'test',
60
+ runtime: createMockRuntime('done'),
61
+ hooks: { onTurnEnd: [endHook] },
62
+ tools: [],
63
+ });
64
+ await engine.processTurn({ input: 'go' });
65
+ expect(endHook.calls).toHaveLength(1);
66
+ expect(endHook.calls[0].result.text).toBe('done');
67
+ });
68
+ it('records error in trace when runtime fails', async () => {
69
+ const failRuntime = {
70
+ name: 'fail',
71
+ async *createStream() {
72
+ throw new Error('runtime exploded');
73
+ },
74
+ };
75
+ const engine = createTurnEngine({
76
+ name: 'test',
77
+ runtime: failRuntime,
78
+ hooks: {},
79
+ tools: [],
80
+ });
81
+ const trace = await engine.processTurn({ input: 'boom' });
82
+ expect(trace.error).toBe('runtime exploded');
83
+ expect(trace.result).toBeNull();
84
+ });
85
+ it('tracks tool calls from tool.start/tool.end events', async () => {
86
+ const events = [
87
+ { type: 'session.init', sessionId: 'sess-tools' },
88
+ { type: 'tool.start', toolName: 'shell:ls' },
89
+ { type: 'tool.end', toolName: 'shell:ls', isError: false },
90
+ { type: 'result', text: 'done' },
91
+ ];
92
+ const engine = createTurnEngine({
93
+ name: 'test',
94
+ runtime: createStreamingMockRuntime(events),
95
+ hooks: {},
96
+ tools: [],
97
+ });
98
+ const trace = await engine.processTurn({ input: 'list files' });
99
+ expect(trace.result).not.toBeNull();
100
+ expect(trace.result.toolCalls).toHaveLength(1);
101
+ expect(trace.result.toolCalls[0].toolName).toBe('shell:ls');
102
+ expect(trace.result.toolCalls[0].isError).toBe(false);
103
+ });
104
+ it('accumulates progress.delta as result fallback when result is empty', async () => {
105
+ const events = [
106
+ { type: 'session.init', sessionId: 'sess-delta' },
107
+ { type: 'progress.delta', text: 'hel' },
108
+ { type: 'progress.delta', text: 'lo' },
109
+ { type: 'result', text: '' },
110
+ ];
111
+ const engine = createTurnEngine({
112
+ name: 'test',
113
+ runtime: createStreamingMockRuntime(events),
114
+ hooks: {},
115
+ tools: [],
116
+ });
117
+ const trace = await engine.processTurn({ input: 'stream' });
118
+ expect(trace.result).not.toBeNull();
119
+ expect(trace.result.text).toBe('hello');
120
+ });
121
+ it('progress event replaces previous progress (not accumulates)', async () => {
122
+ const events = [
123
+ { type: 'session.init', sessionId: 'sess-progress' },
124
+ { type: 'progress', text: 'first' },
125
+ { type: 'progress', text: 'second' },
126
+ { type: 'result', text: '' },
127
+ ];
128
+ const engine = createTurnEngine({
129
+ name: 'test',
130
+ runtime: createStreamingMockRuntime(events),
131
+ hooks: {},
132
+ tools: [],
133
+ });
134
+ const trace = await engine.processTurn({ input: 'progress' });
135
+ expect(trace.result).not.toBeNull();
136
+ expect(trace.result.text).toBe('second');
137
+ });
138
+ it('onError hooks execute when runtime fails', async () => {
139
+ const failRuntime = {
140
+ name: 'fail',
141
+ async *createStream() {
142
+ throw new Error('kaboom');
143
+ },
144
+ };
145
+ const errorHook = createSpyErrorHook('error-logger');
146
+ const engine = createTurnEngine({
147
+ name: 'test',
148
+ runtime: failRuntime,
149
+ hooks: { onError: [errorHook] },
150
+ tools: [],
151
+ });
152
+ const trace = await engine.processTurn({ input: 'fail' });
153
+ expect(trace.error).toBe('kaboom');
154
+ expect(errorHook.calls).toHaveLength(1);
155
+ expect(errorHook.calls[0].error.message).toBe('kaboom');
156
+ });
157
+ it('onEvent callback receives all events', async () => {
158
+ const events = [
159
+ { type: 'session.init', sessionId: 'sess-spy' },
160
+ { type: 'progress', text: 'working...' },
161
+ { type: 'tool.start', toolName: 'search' },
162
+ { type: 'tool.end', toolName: 'search', isError: false },
163
+ { type: 'result', text: 'found it' },
164
+ ];
165
+ const receivedEvents = [];
166
+ const onEvent = (event) => {
167
+ receivedEvents.push(event);
168
+ };
169
+ const engine = createTurnEngine({
170
+ name: 'test',
171
+ runtime: createStreamingMockRuntime(events),
172
+ hooks: {},
173
+ tools: [],
174
+ });
175
+ await engine.processTurn({ input: 'search', onEvent });
176
+ expect(receivedEvents).toHaveLength(5);
177
+ const types = receivedEvents.map(e => e.type);
178
+ expect(types).toEqual(['session.init', 'progress', 'tool.start', 'tool.end', 'result']);
179
+ });
180
+ it('abort signal stops turn', async () => {
181
+ const delayedRuntime = {
182
+ name: 'delayed',
183
+ async *createStream(options) {
184
+ if (options.abortSignal.aborted) {
185
+ throw new Error('Aborted');
186
+ }
187
+ yield { type: 'session.init', sessionId: 'sess-abort' };
188
+ // Check abort before yielding result
189
+ if (options.abortSignal.aborted) {
190
+ throw new Error('Aborted');
191
+ }
192
+ yield { type: 'result', text: 'should not reach' };
193
+ },
194
+ };
195
+ const controller = new AbortController();
196
+ controller.abort();
197
+ const engine = createTurnEngine({
198
+ name: 'test',
199
+ runtime: delayedRuntime,
200
+ hooks: {},
201
+ tools: [],
202
+ });
203
+ const trace = await engine.processTurn({ input: 'stop', abortSignal: controller.signal });
204
+ expect(trace.error).toBe('Aborted');
205
+ expect(trace.result).toBeNull();
206
+ });
207
+ });
208
+ //# sourceMappingURL=engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/env.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { env, validateEnv, resetEnvCollector } from '../env.js';
3
+ describe('env()', () => {
4
+ beforeEach(() => {
5
+ resetEnvCollector();
6
+ });
7
+ it('returns env value when set', () => {
8
+ process.env.TEST_KEY = 'hello';
9
+ expect(env('TEST_KEY')).toBe('hello');
10
+ delete process.env.TEST_KEY;
11
+ });
12
+ it('returns default value when env is missing', () => {
13
+ delete process.env.MISSING_KEY;
14
+ expect(env('MISSING_KEY', 'fallback')).toBe('fallback');
15
+ });
16
+ it('collects missing required env vars', () => {
17
+ delete process.env.REQUIRED_A;
18
+ delete process.env.REQUIRED_B;
19
+ env('REQUIRED_A');
20
+ env('REQUIRED_B');
21
+ expect(() => validateEnv()).toThrow(/REQUIRED_A.*REQUIRED_B/s);
22
+ });
23
+ it('does not throw when all required vars are present', () => {
24
+ process.env.PRESENT = 'yes';
25
+ env('PRESENT');
26
+ expect(() => validateEnv()).not.toThrow();
27
+ delete process.env.PRESENT;
28
+ });
29
+ });
30
+ //# sourceMappingURL=env.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.test.js","sourceRoot":"","sources":["../../src/__tests__/env.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE/D,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,UAAU,CAAC,GAAG,EAAE;QACd,iBAAiB,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAA;QAC9B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;QAC9B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QAC7B,GAAG,CAAC,YAAY,CAAC,CAAA;QACjB,GAAG,CAAC,YAAY,CAAC,CAAA;QACjB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAA;QAC3B,GAAG,CAAC,SAAS,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=full-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/full-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { defineConfig, createAgent, env, createScheduler } from '../index.js';
3
+ import { createMockRuntime, createMockHook, createSpyEndHook } from './helpers.js';
4
+ // Simulate what a real sena.config.ts would look like
5
+ describe('Full sena.config.ts pattern', () => {
6
+ it('works with the spec example pattern', async () => {
7
+ // This mirrors the spec Part 2 example, but with mock runtime
8
+ const config = defineConfig({
9
+ name: '테스트-에이전트',
10
+ runtime: createMockRuntime('안녕하세요, 저는 테스트 에이전트입니다.'),
11
+ connectors: [], // No real connectors in test
12
+ tools: [], // No real tools in test
13
+ hooks: {
14
+ onTurnStart: [
15
+ createMockHook('system-prompt', [
16
+ { source: 'file:system.md', role: 'system', content: '당신은 유능한 비서입니다.' },
17
+ ]),
18
+ createMockHook('soul', [
19
+ { source: 'file:soul.md', role: 'system', content: '따뜻하고 친절한 성격입니다.' },
20
+ ]),
21
+ createMockHook('memory', [
22
+ { source: 'file:memory/today.md', role: 'context', content: '오늘 할 일: 테스트 작성' },
23
+ ]),
24
+ ],
25
+ onTurnEnd: [
26
+ createSpyEndHook('trace-logger'),
27
+ ],
28
+ },
29
+ schedules: [
30
+ { name: '정각 알림', type: 'cron', expression: '0 * * * *', prompt: '정각 체크' },
31
+ { name: 'heartbeat', type: 'heartbeat', expression: '15m', prompt: '하트비트 체크' },
32
+ ],
33
+ orchestrator: { port: 3100 },
34
+ });
35
+ // Verify config resolution
36
+ expect(config.name).toBe('테스트-에이전트');
37
+ expect(config.connectors).toEqual([]);
38
+ expect(config.tools).toEqual([]);
39
+ expect(config.hooks.onTurnStart).toHaveLength(3);
40
+ expect(config.hooks.onTurnEnd).toHaveLength(1);
41
+ expect(config.schedules).toHaveLength(2);
42
+ expect(config.orchestrator?.port).toBe(3100);
43
+ // Create agent and process turn
44
+ const agent = createAgent(config);
45
+ const trace = await agent.processTurn({ input: '안녕하세요' });
46
+ // Verify full pipeline
47
+ expect(trace.agentName).toBe('테스트-에이전트');
48
+ expect(trace.trigger).toBe('programmatic');
49
+ expect(trace.input).toBe('안녕하세요');
50
+ // Verify context assembly order: system fragments first, then context
51
+ expect(trace.assembledContext).toContain('유능한 비서');
52
+ expect(trace.assembledContext).toContain('따뜻하고 친절한');
53
+ expect(trace.assembledContext).toContain('오늘 할 일');
54
+ const sysIdx = trace.assembledContext.indexOf('비서');
55
+ const ctxIdx = trace.assembledContext.indexOf('오늘 할 일');
56
+ expect(sysIdx).toBeLessThan(ctxIdx); // system before context
57
+ // Verify hook traces
58
+ expect(trace.hooks).toHaveLength(4); // 3 onTurnStart + 1 onTurnEnd
59
+ expect(trace.hooks[0].phase).toBe('onTurnStart');
60
+ expect(trace.hooks[3].phase).toBe('onTurnEnd');
61
+ // Verify result
62
+ expect(trace.result?.text).toBe('안녕하세요, 저는 테스트 에이전트입니다.');
63
+ expect(trace.result?.sessionId).toBe('sess-1');
64
+ expect(trace.error).toBeNull();
65
+ // Verify onTurnEnd hook was called
66
+ const endHook = config.hooks.onTurnEnd[0];
67
+ expect(endHook.calls).toHaveLength(1);
68
+ expect(endHook.calls[0].result.text).toBe('안녕하세요, 저는 테스트 에이전트입니다.');
69
+ });
70
+ it('works with schedule trigger', async () => {
71
+ const config = defineConfig({
72
+ name: 'scheduler-test',
73
+ runtime: createMockRuntime('heartbeat ok'),
74
+ });
75
+ const agent = createAgent(config);
76
+ const trace = await agent.processTurn({
77
+ input: 'heartbeat check',
78
+ trigger: 'schedule',
79
+ schedule: { name: 'test-heartbeat', type: 'heartbeat' },
80
+ });
81
+ expect(trace.trigger).toBe('schedule');
82
+ expect(trace.result?.text).toBe('heartbeat ok');
83
+ });
84
+ it('handles runtime errors gracefully', async () => {
85
+ const failRuntime = {
86
+ name: 'fail',
87
+ async *createStream() {
88
+ throw new Error('API key expired');
89
+ },
90
+ };
91
+ const errorHook = {
92
+ name: 'error-reporter',
93
+ calls: [],
94
+ async execute(ctx, err) {
95
+ errorHook.calls.push({ ctx, err });
96
+ },
97
+ };
98
+ const config = defineConfig({
99
+ name: 'error-test',
100
+ runtime: failRuntime,
101
+ hooks: { onError: [errorHook] },
102
+ });
103
+ const agent = createAgent(config);
104
+ const trace = await agent.processTurn({ input: 'test' });
105
+ expect(trace.error).toBe('API key expired');
106
+ expect(trace.result).toBeNull();
107
+ expect(errorHook.calls).toHaveLength(1);
108
+ expect(errorHook.calls[0].err.message).toBe('API key expired');
109
+ });
110
+ });
111
+ describe('Scheduler integration', () => {
112
+ beforeEach(() => { vi.useFakeTimers(); });
113
+ afterEach(() => { vi.useRealTimers(); });
114
+ it('scheduler triggers turns on the agent', async () => {
115
+ const turns = [];
116
+ const scheduler = createScheduler({
117
+ schedules: [
118
+ { name: 'fast', type: 'heartbeat', expression: '1s', prompt: 'heartbeat check' },
119
+ ],
120
+ onTurn: async (options) => {
121
+ turns.push(options.input);
122
+ return {
123
+ turnId: 'turn-1', timestamp: new Date().toISOString(),
124
+ agentName: 'test', trigger: 'schedule', input: options.input,
125
+ hooks: [], assembledContext: '',
126
+ result: { text: 'ok', sessionId: null, durationMs: 0, toolCalls: [] },
127
+ error: null,
128
+ };
129
+ },
130
+ });
131
+ scheduler.start();
132
+ await vi.advanceTimersByTimeAsync(3000);
133
+ scheduler.stop();
134
+ expect(turns.length).toBeGreaterThanOrEqual(2);
135
+ expect(turns[0]).toBe('heartbeat check');
136
+ });
137
+ });
138
+ //# sourceMappingURL=full-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-config.test.js","sourceRoot":"","sources":["../../src/__tests__/full-config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Runtime, RuntimeEvent, TurnStartHook, TurnEndHook, ErrorHook, TurnContext, ContextFragment, TurnResult } from '../types.js';
2
+ export declare function createMockRuntime(response?: string): Runtime;
3
+ export declare function createMockHook(name: string, fragments: ContextFragment[]): TurnStartHook;
4
+ export declare function createSpyEndHook(name: string): TurnEndHook & {
5
+ calls: {
6
+ context: TurnContext;
7
+ result: TurnResult;
8
+ }[];
9
+ };
10
+ export declare function createStreamingMockRuntime(events: RuntimeEvent[]): Runtime;
11
+ export declare function createSpyErrorHook(name: string): ErrorHook & {
12
+ calls: {
13
+ error: Error;
14
+ }[];
15
+ };
16
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/__tests__/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEzI,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAwB,GAAG,OAAO,CAQ7E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,CAOxF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,EAAE,CAAA;CAAE,CAStH;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAS1E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,CAAA;CAAE,CAS1F"}
@@ -0,0 +1,48 @@
1
+ export function createMockRuntime(response = 'mock response') {
2
+ return {
3
+ name: 'mock',
4
+ async *createStream() {
5
+ yield { type: 'session.init', sessionId: 'sess-1' };
6
+ yield { type: 'result', text: response };
7
+ },
8
+ };
9
+ }
10
+ export function createMockHook(name, fragments) {
11
+ return {
12
+ name,
13
+ async execute(_ctx) {
14
+ return fragments;
15
+ },
16
+ };
17
+ }
18
+ export function createSpyEndHook(name) {
19
+ const hook = {
20
+ name,
21
+ calls: [],
22
+ async execute(context, result) {
23
+ hook.calls.push({ context, result });
24
+ },
25
+ };
26
+ return hook;
27
+ }
28
+ export function createStreamingMockRuntime(events) {
29
+ return {
30
+ name: 'mock-streaming',
31
+ async *createStream() {
32
+ for (const event of events) {
33
+ yield event;
34
+ }
35
+ },
36
+ };
37
+ }
38
+ export function createSpyErrorHook(name) {
39
+ const hook = {
40
+ name,
41
+ calls: [],
42
+ async execute(_ctx, error) {
43
+ hook.calls.push({ error });
44
+ },
45
+ };
46
+ return hook;
47
+ }
48
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/__tests__/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,WAAmB,eAAe;IAClE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,CAAC,CAAC,YAAY;YACjB,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;YACnD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,SAA4B;IACvE,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,OAAO,CAAC,IAAiB;YAC7B,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,KAAK,EAAE,EAAoD;QAC3D,KAAK,CAAC,OAAO,CAAC,OAAoB,EAAE,MAAkB;YACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAsB;IAC/D,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,KAAK,CAAC,CAAC,YAAY;YACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,KAAK,EAAE,EAAwB;QAC/B,KAAK,CAAC,OAAO,CAAC,IAAiB,EAAE,KAAY;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC5B,CAAC;KACF,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":""}