@element47/ag 4.5.1 → 4.5.3

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 (77) hide show
  1. package/README.md +184 -8
  2. package/dist/cli/__tests__/repl-rawmode.test.d.ts +2 -0
  3. package/dist/cli/__tests__/repl-rawmode.test.d.ts.map +1 -0
  4. package/dist/cli/__tests__/repl-rawmode.test.js +46 -0
  5. package/dist/cli/__tests__/repl-rawmode.test.js.map +1 -0
  6. package/dist/cli/repl.d.ts +7 -2
  7. package/dist/cli/repl.d.ts.map +1 -1
  8. package/dist/cli/repl.js +203 -25
  9. package/dist/cli/repl.js.map +1 -1
  10. package/dist/cli.js +10 -8
  11. package/dist/cli.js.map +1 -1
  12. package/dist/core/__tests__/agent.test.js +42 -1
  13. package/dist/core/__tests__/agent.test.js.map +1 -1
  14. package/dist/core/__tests__/context.test.js +81 -0
  15. package/dist/core/__tests__/context.test.js.map +1 -1
  16. package/dist/core/__tests__/events.test.d.ts +2 -0
  17. package/dist/core/__tests__/events.test.d.ts.map +1 -0
  18. package/dist/core/__tests__/events.test.js +131 -0
  19. package/dist/core/__tests__/events.test.js.map +1 -0
  20. package/dist/core/__tests__/extensions.test.d.ts +2 -0
  21. package/dist/core/__tests__/extensions.test.d.ts.map +1 -0
  22. package/dist/core/__tests__/extensions.test.js +59 -0
  23. package/dist/core/__tests__/extensions.test.js.map +1 -0
  24. package/dist/core/__tests__/guardrails.test.d.ts +2 -0
  25. package/dist/core/__tests__/guardrails.test.d.ts.map +1 -0
  26. package/dist/core/__tests__/guardrails.test.js +418 -0
  27. package/dist/core/__tests__/guardrails.test.js.map +1 -0
  28. package/dist/core/__tests__/permission-manager.test.d.ts +2 -0
  29. package/dist/core/__tests__/permission-manager.test.d.ts.map +1 -0
  30. package/dist/core/__tests__/permission-manager.test.js +246 -0
  31. package/dist/core/__tests__/permission-manager.test.js.map +1 -0
  32. package/dist/core/__tests__/streaming.test.js +8 -1
  33. package/dist/core/__tests__/streaming.test.js.map +1 -1
  34. package/dist/core/agent.d.ts +27 -0
  35. package/dist/core/agent.d.ts.map +1 -1
  36. package/dist/core/agent.js +263 -121
  37. package/dist/core/agent.js.map +1 -1
  38. package/dist/core/context.d.ts.map +1 -1
  39. package/dist/core/context.js +14 -6
  40. package/dist/core/context.js.map +1 -1
  41. package/dist/core/events.d.ts +62 -0
  42. package/dist/core/events.d.ts.map +1 -0
  43. package/dist/core/events.js +23 -0
  44. package/dist/core/events.js.map +1 -0
  45. package/dist/core/extensions.d.ts +10 -0
  46. package/dist/core/extensions.d.ts.map +1 -0
  47. package/dist/core/extensions.js +66 -0
  48. package/dist/core/extensions.js.map +1 -0
  49. package/dist/core/guardrails.d.ts +32 -0
  50. package/dist/core/guardrails.d.ts.map +1 -0
  51. package/dist/core/guardrails.js +149 -0
  52. package/dist/core/guardrails.js.map +1 -0
  53. package/dist/core/loader.d.ts +6 -2
  54. package/dist/core/loader.d.ts.map +1 -1
  55. package/dist/core/loader.js +23 -9
  56. package/dist/core/loader.js.map +1 -1
  57. package/dist/core/permissions.d.ts +60 -0
  58. package/dist/core/permissions.d.ts.map +1 -0
  59. package/dist/core/permissions.js +252 -0
  60. package/dist/core/permissions.js.map +1 -0
  61. package/dist/core/registry.d.ts.map +1 -1
  62. package/dist/core/registry.js +16 -0
  63. package/dist/core/registry.js.map +1 -1
  64. package/dist/core/skills.d.ts.map +1 -1
  65. package/dist/core/skills.js +26 -3
  66. package/dist/core/skills.js.map +1 -1
  67. package/dist/core/types.d.ts +15 -1
  68. package/dist/core/types.d.ts.map +1 -1
  69. package/dist/memory/__tests__/memory.test.js +28 -0
  70. package/dist/memory/__tests__/memory.test.js.map +1 -1
  71. package/dist/memory/memory.js +1 -1
  72. package/dist/memory/memory.js.map +1 -1
  73. package/dist/tools/__tests__/bash.test.js +4 -0
  74. package/dist/tools/__tests__/bash.test.js.map +1 -1
  75. package/dist/tools/__tests__/file.test.js +7 -1
  76. package/dist/tools/__tests__/file.test.js.map +1 -1
  77. package/package.json +1 -4
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { truncateToolResult } from '../agent.js';
2
+ import { truncateToolResult, raceAll } from '../agent.js';
3
3
  describe('truncateToolResult', () => {
4
4
  it('returns short results unchanged', () => {
5
5
  const result = 'hello world';
@@ -50,4 +50,45 @@ describe('truncateToolResult', () => {
50
50
  expect(truncateToolResult('single line')).toBe('single line');
51
51
  });
52
52
  });
53
+ describe('raceAll', () => {
54
+ it('yields all results', async () => {
55
+ const promises = [
56
+ Promise.resolve('a'),
57
+ Promise.resolve('b'),
58
+ Promise.resolve('c'),
59
+ ];
60
+ const results = [];
61
+ for await (const v of raceAll(promises)) {
62
+ results.push(v);
63
+ }
64
+ expect(results.sort()).toEqual(['a', 'b', 'c']);
65
+ });
66
+ it('yields in resolution order not creation order', async () => {
67
+ const delay = (ms, val) => new Promise(r => setTimeout(() => r(val), ms));
68
+ const promises = [
69
+ delay(30, 'slow'),
70
+ delay(10, 'fast'),
71
+ delay(20, 'mid'),
72
+ ];
73
+ const results = [];
74
+ for await (const v of raceAll(promises)) {
75
+ results.push(v);
76
+ }
77
+ expect(results).toEqual(['fast', 'mid', 'slow']);
78
+ });
79
+ it('handles empty array', async () => {
80
+ const results = [];
81
+ for await (const v of raceAll([])) {
82
+ results.push(v);
83
+ }
84
+ expect(results).toEqual([]);
85
+ });
86
+ it('handles single promise', async () => {
87
+ const results = [];
88
+ for await (const v of raceAll([Promise.resolve(42)])) {
89
+ results.push(v);
90
+ }
91
+ expect(results).toEqual([42]);
92
+ });
93
+ });
53
94
  //# sourceMappingURL=agent.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/agent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,kEAAkE;QAClE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE7C,2BAA2B;QAC3B,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,0BAA0B;QAC1B,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,uBAAuB;QACvB,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5C,wDAAwD;QACxD,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/agent.test.ts"],"names":[],"mappings":"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"}
@@ -115,6 +115,87 @@ describe('ContextTracker', () => {
115
115
  const t = new ContextTracker('unknown/model');
116
116
  expect(t.formatDetailed()).toContain('unknown');
117
117
  });
118
+ it('shows cache hit rate when cached_tokens present', () => {
119
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
120
+ t.update({
121
+ prompt_tokens: 10000, completion_tokens: 200, total_tokens: 10200,
122
+ prompt_tokens_details: { cached_tokens: 9000 },
123
+ });
124
+ const output = t.formatDetailed();
125
+ expect(output).toContain('Cached');
126
+ expect(output).toContain('90%');
127
+ });
128
+ it('shows cache write info on first request', () => {
129
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
130
+ t.update({
131
+ prompt_tokens: 5000, completion_tokens: 200, total_tokens: 5200,
132
+ prompt_tokens_details: { cache_write_tokens: 3000 },
133
+ });
134
+ const output = t.formatDetailed();
135
+ expect(output).toContain('Cache write');
136
+ });
137
+ });
138
+ describe('format with cache', () => {
139
+ it('shows cached tokens in context bar', () => {
140
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
141
+ t.update({
142
+ prompt_tokens: 10000, completion_tokens: 200, total_tokens: 10200,
143
+ prompt_tokens_details: { cached_tokens: 8000 },
144
+ });
145
+ const output = t.format();
146
+ expect(output).toContain('cached');
147
+ expect(output).toContain('80%');
148
+ });
149
+ it('does not show cache info when no cached tokens', () => {
150
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
151
+ t.update({ prompt_tokens: 10000, completion_tokens: 200, total_tokens: 10200 });
152
+ const output = t.format();
153
+ expect(output).not.toContain('cached');
154
+ });
155
+ it('shows 99% instead of 100% when nearly all tokens are cached', () => {
156
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
157
+ t.update({
158
+ prompt_tokens: 28000, completion_tokens: 200, total_tokens: 28200,
159
+ prompt_tokens_details: { cached_tokens: 27995 },
160
+ });
161
+ const output = t.format();
162
+ expect(output).toContain('99%');
163
+ expect(output).not.toContain('100%');
164
+ expect(output).toContain('+5');
165
+ expect(output).toContain('new');
166
+ });
167
+ it('shows 100% only when all prompt tokens are cached', () => {
168
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
169
+ t.update({
170
+ prompt_tokens: 28000, completion_tokens: 200, total_tokens: 28200,
171
+ prompt_tokens_details: { cached_tokens: 28000 },
172
+ });
173
+ const output = t.format();
174
+ expect(output).toContain('100%');
175
+ });
176
+ });
177
+ describe('formatDetailed cache rounding', () => {
178
+ it('shows 99% hit rate when nearly all tokens are cached', () => {
179
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
180
+ t.update({
181
+ prompt_tokens: 28000, completion_tokens: 200, total_tokens: 28200,
182
+ prompt_tokens_details: { cached_tokens: 27995 },
183
+ });
184
+ const output = t.formatDetailed();
185
+ expect(output).toContain('99%');
186
+ expect(output).not.toContain('100%');
187
+ expect(output).toContain('uncached');
188
+ });
189
+ it('shows both cached and written when both present', () => {
190
+ const t = new ContextTracker('anthropic/claude-sonnet-4.6');
191
+ t.update({
192
+ prompt_tokens: 10000, completion_tokens: 200, total_tokens: 10200,
193
+ prompt_tokens_details: { cached_tokens: 8000, cache_write_tokens: 1500 },
194
+ });
195
+ const output = t.formatDetailed();
196
+ expect(output).toContain('Cached');
197
+ expect(output).toContain('Cache write');
198
+ });
118
199
  });
119
200
  });
120
201
  //# sourceMappingURL=context.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/context.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,kCAAkC,CAAC,CAAC;YACjE,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC1B,yCAAyC;YACzC,+BAA+B;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,aAAa;YACvD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,YAAY;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/context.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,kCAAkC,CAAC,CAAC;YACjE,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC1B,yCAAyC;YACzC,+BAA+B;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,aAAa;YACvD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,YAAY;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;aAC/C,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI;gBAC/D,qBAAqB,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;aACpD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;aAC/C,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;aAChD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;aAChD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;aAChD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC;gBACP,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK;gBACjE,qBAAqB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE;aACzE,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/events.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { AgentEventEmitter } from '../events.js';
3
+ describe('AgentEventEmitter', () => {
4
+ it('on() registers handler and returns unsubscribe function', async () => {
5
+ const emitter = new AgentEventEmitter();
6
+ const handler = vi.fn();
7
+ const unsub = emitter.on('turn_start', handler);
8
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
9
+ expect(handler).toHaveBeenCalledOnce();
10
+ unsub();
11
+ await emitter.emit('turn_start', { iteration: 1, maxIterations: 25, messageCount: 2 });
12
+ expect(handler).toHaveBeenCalledOnce(); // still 1 — unsubscribed
13
+ });
14
+ it('emit() calls handlers sequentially in registration order', async () => {
15
+ const emitter = new AgentEventEmitter();
16
+ const order = [];
17
+ emitter.on('turn_start', async () => { order.push(1); });
18
+ emitter.on('turn_start', async () => { order.push(2); });
19
+ emitter.on('turn_start', async () => { order.push(3); });
20
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
21
+ expect(order).toEqual([1, 2, 3]);
22
+ });
23
+ it('handlers can mutate event data and subsequent handlers see mutations', async () => {
24
+ const emitter = new AgentEventEmitter();
25
+ emitter.on('input', (event) => {
26
+ event.content = event.content.toUpperCase();
27
+ });
28
+ emitter.on('input', (event) => {
29
+ event.content += '!';
30
+ });
31
+ const data = { content: 'hello' };
32
+ await emitter.emit('input', data);
33
+ expect(data.content).toBe('HELLO!');
34
+ });
35
+ it('async handlers are awaited before next handler runs', async () => {
36
+ const emitter = new AgentEventEmitter();
37
+ const order = [];
38
+ emitter.on('turn_start', async () => {
39
+ await new Promise(r => setTimeout(r, 10));
40
+ order.push('slow');
41
+ });
42
+ emitter.on('turn_start', () => {
43
+ order.push('fast');
44
+ });
45
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
46
+ expect(order).toEqual(['slow', 'fast']); // slow finishes before fast starts
47
+ });
48
+ it('unsubscribe removes only that handler', async () => {
49
+ const emitter = new AgentEventEmitter();
50
+ const h1 = vi.fn();
51
+ const h2 = vi.fn();
52
+ emitter.on('turn_start', h1);
53
+ const unsub2 = emitter.on('turn_start', h2);
54
+ unsub2();
55
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
56
+ expect(h1).toHaveBeenCalledOnce();
57
+ expect(h2).not.toHaveBeenCalled();
58
+ });
59
+ it('emitting event with no handlers is a no-op', async () => {
60
+ const emitter = new AgentEventEmitter();
61
+ // Should not throw
62
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
63
+ });
64
+ it('multiple events do not interfere with each other', async () => {
65
+ const emitter = new AgentEventEmitter();
66
+ const turnHandler = vi.fn();
67
+ const inputHandler = vi.fn();
68
+ emitter.on('turn_start', turnHandler);
69
+ emitter.on('input', inputHandler);
70
+ await emitter.emit('turn_start', { iteration: 0, maxIterations: 25, messageCount: 1 });
71
+ expect(turnHandler).toHaveBeenCalledOnce();
72
+ expect(inputHandler).not.toHaveBeenCalled();
73
+ await emitter.emit('input', { content: 'test' });
74
+ expect(turnHandler).toHaveBeenCalledOnce();
75
+ expect(inputHandler).toHaveBeenCalledOnce();
76
+ });
77
+ it('tool_call block flag prevents execution when set', async () => {
78
+ const emitter = new AgentEventEmitter();
79
+ emitter.on('tool_call', (event) => {
80
+ if (event.toolName === 'bash' && String(event.args.command).includes('rm -rf')) {
81
+ event.block = true;
82
+ event.blockReason = 'Dangerous command blocked';
83
+ }
84
+ });
85
+ const safeEvent = { toolName: 'bash', toolCallId: '1', args: { command: 'ls' } };
86
+ await emitter.emit('tool_call', safeEvent);
87
+ expect(safeEvent.block).toBeUndefined();
88
+ const dangerEvent = { toolName: 'bash', toolCallId: '2', args: { command: 'rm -rf /' } };
89
+ await emitter.emit('tool_call', dangerEvent);
90
+ expect(dangerEvent.block).toBe(true);
91
+ expect(dangerEvent.blockReason).toBe('Dangerous command blocked');
92
+ });
93
+ it('tool_result content can be mutated', async () => {
94
+ const emitter = new AgentEventEmitter();
95
+ emitter.on('tool_result', (event) => {
96
+ event.content = event.content.replace(/secret/g, '[REDACTED]');
97
+ });
98
+ const data = { toolName: 'file', toolCallId: '1', args: {}, content: 'found secret key', isError: false };
99
+ await emitter.emit('tool_result', data);
100
+ expect(data.content).toBe('found [REDACTED] key');
101
+ });
102
+ it('before_compact cancel prevents compaction', async () => {
103
+ const emitter = new AgentEventEmitter();
104
+ emitter.on('before_compact', (event) => {
105
+ event.cancel = true;
106
+ });
107
+ const data = { messageCount: 100, cancel: false, customSummary: undefined };
108
+ await emitter.emit('before_compact', data);
109
+ expect(data.cancel).toBe(true);
110
+ });
111
+ it('before_request messages can be filtered by handler', async () => {
112
+ const emitter = new AgentEventEmitter();
113
+ emitter.on('before_request', (event) => {
114
+ event.messages = event.messages.filter(m => m.role !== 'tool');
115
+ });
116
+ const data = {
117
+ messages: [
118
+ { role: 'user', content: 'hi' },
119
+ { role: 'tool', content: 'result', tool_call_id: '1' },
120
+ { role: 'assistant', content: 'hello' },
121
+ ],
122
+ systemPrompt: 'test',
123
+ model: 'test',
124
+ stream: false,
125
+ };
126
+ await emitter.emit('before_request', data);
127
+ expect(data.messages).toHaveLength(2);
128
+ expect(data.messages.every(m => m.role !== 'tool')).toBe(true);
129
+ });
130
+ });
131
+ //# sourceMappingURL=events.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/events.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extensions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/extensions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, writeFileSync, rmSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+ import { discoverExtensions } from '../extensions.js';
6
+ const TEST_DIR = join(tmpdir(), `ag-ext-test-${Date.now()}`);
7
+ beforeEach(() => {
8
+ mkdirSync(TEST_DIR, { recursive: true });
9
+ });
10
+ afterEach(() => {
11
+ if (existsSync(TEST_DIR))
12
+ rmSync(TEST_DIR, { recursive: true, force: true });
13
+ });
14
+ describe('discoverExtensions', () => {
15
+ it('discovers .ts files in .ag/extensions/', () => {
16
+ const extDir = join(TEST_DIR, '.ag', 'extensions');
17
+ mkdirSync(extDir, { recursive: true });
18
+ writeFileSync(join(extDir, 'my-ext.ts'), 'export default function() {}');
19
+ writeFileSync(join(extDir, 'another.mjs'), 'export default function() {}');
20
+ const found = discoverExtensions(TEST_DIR, join(TEST_DIR, 'nonexistent-global'));
21
+ expect(found).toHaveLength(2);
22
+ expect(found.some(f => f.endsWith('my-ext.ts'))).toBe(true);
23
+ expect(found.some(f => f.endsWith('another.mjs'))).toBe(true);
24
+ });
25
+ it('discovers directory extensions with index.ts', () => {
26
+ const extDir = join(TEST_DIR, '.ag', 'extensions', 'my-plugin');
27
+ mkdirSync(extDir, { recursive: true });
28
+ writeFileSync(join(extDir, 'index.ts'), 'export default function() {}');
29
+ const found = discoverExtensions(TEST_DIR, join(TEST_DIR, 'nonexistent-global'));
30
+ expect(found).toHaveLength(1);
31
+ expect(found[0]).toContain('my-plugin');
32
+ expect(found[0]).toContain('index.ts');
33
+ });
34
+ it('returns empty array when no extensions directory exists', () => {
35
+ const found = discoverExtensions(TEST_DIR, join(TEST_DIR, 'nonexistent-global'));
36
+ expect(found).toEqual([]);
37
+ });
38
+ it('ignores non-extension files', () => {
39
+ const extDir = join(TEST_DIR, '.ag', 'extensions');
40
+ mkdirSync(extDir, { recursive: true });
41
+ writeFileSync(join(extDir, 'readme.md'), '# Not an extension');
42
+ writeFileSync(join(extDir, 'data.json'), '{}');
43
+ writeFileSync(join(extDir, 'valid.ts'), 'export default function() {}');
44
+ const found = discoverExtensions(TEST_DIR, join(TEST_DIR, 'nonexistent-global'));
45
+ expect(found).toHaveLength(1);
46
+ expect(found[0]).toContain('valid.ts');
47
+ });
48
+ it('discovers from both project and global directories', () => {
49
+ const projectExtDir = join(TEST_DIR, '.ag', 'extensions');
50
+ const globalExtDir = join(TEST_DIR, 'global', 'extensions');
51
+ mkdirSync(projectExtDir, { recursive: true });
52
+ mkdirSync(globalExtDir, { recursive: true });
53
+ writeFileSync(join(projectExtDir, 'proj.ts'), 'export default function() {}');
54
+ writeFileSync(join(globalExtDir, 'global.ts'), 'export default function() {}');
55
+ const found = discoverExtensions(TEST_DIR, join(TEST_DIR, 'global'));
56
+ expect(found).toHaveLength(2);
57
+ });
58
+ });
59
+ //# sourceMappingURL=extensions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/extensions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=guardrails.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/guardrails.test.ts"],"names":[],"mappings":""}