@namzu/sdk 0.4.2 → 0.4.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 (207) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/advisory/context.test.d.ts +16 -0
  3. package/dist/advisory/context.test.d.ts.map +1 -0
  4. package/dist/advisory/context.test.js +92 -0
  5. package/dist/advisory/context.test.js.map +1 -0
  6. package/dist/advisory/evaluator.test.d.ts +34 -0
  7. package/dist/advisory/evaluator.test.d.ts.map +1 -0
  8. package/dist/advisory/evaluator.test.js +172 -0
  9. package/dist/advisory/evaluator.test.js.map +1 -0
  10. package/dist/advisory/executor.test.d.ts +35 -0
  11. package/dist/advisory/executor.test.d.ts.map +1 -0
  12. package/dist/advisory/executor.test.js +233 -0
  13. package/dist/advisory/executor.test.js.map +1 -0
  14. package/dist/advisory/registry.test.d.ts +16 -0
  15. package/dist/advisory/registry.test.d.ts.map +1 -0
  16. package/dist/advisory/registry.test.js +62 -0
  17. package/dist/advisory/registry.test.js.map +1 -0
  18. package/dist/bridge/a2a/agent-card.test.d.ts +24 -0
  19. package/dist/bridge/a2a/agent-card.test.d.ts.map +1 -0
  20. package/dist/bridge/a2a/agent-card.test.js +118 -0
  21. package/dist/bridge/a2a/agent-card.test.js.map +1 -0
  22. package/dist/bridge/a2a/mapper.test.d.ts +29 -0
  23. package/dist/bridge/a2a/mapper.test.d.ts.map +1 -0
  24. package/dist/bridge/a2a/mapper.test.js +265 -0
  25. package/dist/bridge/a2a/mapper.test.js.map +1 -0
  26. package/dist/bridge/a2a/message.test.d.ts +20 -0
  27. package/dist/bridge/a2a/message.test.d.ts.map +1 -0
  28. package/dist/bridge/a2a/message.test.js +116 -0
  29. package/dist/bridge/a2a/message.test.js.map +1 -0
  30. package/dist/bridge/a2a/task.test.d.ts +29 -0
  31. package/dist/bridge/a2a/task.test.d.ts.map +1 -0
  32. package/dist/bridge/a2a/task.test.js +198 -0
  33. package/dist/bridge/a2a/task.test.js.map +1 -0
  34. package/dist/bridge/mcp/connector/adapter.test.d.ts +27 -0
  35. package/dist/bridge/mcp/connector/adapter.test.d.ts.map +1 -0
  36. package/dist/bridge/mcp/connector/adapter.test.js +203 -0
  37. package/dist/bridge/mcp/connector/adapter.test.js.map +1 -0
  38. package/dist/bridge/sse/mapper.test.d.ts +27 -0
  39. package/dist/bridge/sse/mapper.test.d.ts.map +1 -0
  40. package/dist/bridge/sse/mapper.test.js +271 -0
  41. package/dist/bridge/sse/mapper.test.js.map +1 -0
  42. package/dist/bridge/tools/connector/adapter.test.d.ts +28 -0
  43. package/dist/bridge/tools/connector/adapter.test.d.ts.map +1 -0
  44. package/dist/bridge/tools/connector/adapter.test.js +182 -0
  45. package/dist/bridge/tools/connector/adapter.test.js.map +1 -0
  46. package/dist/bridge/tools/connector/definitions.test.d.ts +23 -0
  47. package/dist/bridge/tools/connector/definitions.test.d.ts.map +1 -0
  48. package/dist/bridge/tools/connector/definitions.test.js +158 -0
  49. package/dist/bridge/tools/connector/definitions.test.js.map +1 -0
  50. package/dist/bridge/tools/connector/router.test.d.ts +21 -0
  51. package/dist/bridge/tools/connector/router.test.d.ts.map +1 -0
  52. package/dist/bridge/tools/connector/router.test.js +139 -0
  53. package/dist/bridge/tools/connector/router.test.js.map +1 -0
  54. package/dist/bus/breaker.test.d.ts +41 -0
  55. package/dist/bus/breaker.test.d.ts.map +1 -0
  56. package/dist/bus/breaker.test.js +242 -0
  57. package/dist/bus/breaker.test.js.map +1 -0
  58. package/dist/bus/index.test.d.ts +25 -0
  59. package/dist/bus/index.test.d.ts.map +1 -0
  60. package/dist/bus/index.test.js +151 -0
  61. package/dist/bus/index.test.js.map +1 -0
  62. package/dist/bus/lock.test.d.ts +44 -0
  63. package/dist/bus/lock.test.d.ts.map +1 -0
  64. package/dist/bus/lock.test.js +226 -0
  65. package/dist/bus/lock.test.js.map +1 -0
  66. package/dist/bus/ownership.test.d.ts +26 -0
  67. package/dist/bus/ownership.test.d.ts.map +1 -0
  68. package/dist/bus/ownership.test.js +205 -0
  69. package/dist/bus/ownership.test.js.map +1 -0
  70. package/dist/connector/BaseConnector.test.d.ts +21 -0
  71. package/dist/connector/BaseConnector.test.d.ts.map +1 -0
  72. package/dist/connector/BaseConnector.test.js +108 -0
  73. package/dist/connector/BaseConnector.test.js.map +1 -0
  74. package/dist/connector/builtins/http.test.d.ts +30 -0
  75. package/dist/connector/builtins/http.test.d.ts.map +1 -0
  76. package/dist/connector/builtins/http.test.js +232 -0
  77. package/dist/connector/builtins/http.test.js.map +1 -0
  78. package/dist/connector/builtins/webhook.test.d.ts +20 -0
  79. package/dist/connector/builtins/webhook.test.d.ts.map +1 -0
  80. package/dist/connector/builtins/webhook.test.js +113 -0
  81. package/dist/connector/builtins/webhook.test.js.map +1 -0
  82. package/dist/connector/execution/factory.test.d.ts +16 -0
  83. package/dist/connector/execution/factory.test.d.ts.map +1 -0
  84. package/dist/connector/execution/factory.test.js +64 -0
  85. package/dist/connector/execution/factory.test.js.map +1 -0
  86. package/dist/connector/execution/remote.test.d.ts +16 -0
  87. package/dist/connector/execution/remote.test.d.ts.map +1 -0
  88. package/dist/connector/execution/remote.test.js +53 -0
  89. package/dist/connector/execution/remote.test.js.map +1 -0
  90. package/dist/connector/mcp/adapter.test.d.ts +34 -0
  91. package/dist/connector/mcp/adapter.test.d.ts.map +1 -0
  92. package/dist/connector/mcp/adapter.test.js +199 -0
  93. package/dist/connector/mcp/adapter.test.js.map +1 -0
  94. package/dist/rag/chunking.test.d.ts +20 -0
  95. package/dist/rag/chunking.test.d.ts.map +1 -0
  96. package/dist/rag/chunking.test.js +92 -0
  97. package/dist/rag/chunking.test.js.map +1 -0
  98. package/dist/rag/context-assembler.test.d.ts +19 -0
  99. package/dist/rag/context-assembler.test.d.ts.map +1 -0
  100. package/dist/rag/context-assembler.test.js +98 -0
  101. package/dist/rag/context-assembler.test.js.map +1 -0
  102. package/dist/rag/embedding.test.d.ts +19 -0
  103. package/dist/rag/embedding.test.d.ts.map +1 -0
  104. package/dist/rag/embedding.test.js +115 -0
  105. package/dist/rag/embedding.test.js.map +1 -0
  106. package/dist/rag/ingestion.test.d.ts +22 -0
  107. package/dist/rag/ingestion.test.d.ts.map +1 -0
  108. package/dist/rag/ingestion.test.js +99 -0
  109. package/dist/rag/ingestion.test.js.map +1 -0
  110. package/dist/rag/knowledge-base.test.d.ts +17 -0
  111. package/dist/rag/knowledge-base.test.d.ts.map +1 -0
  112. package/dist/rag/knowledge-base.test.js +77 -0
  113. package/dist/rag/knowledge-base.test.js.map +1 -0
  114. package/dist/rag/rag-tool.test.d.ts +21 -0
  115. package/dist/rag/rag-tool.test.d.ts.map +1 -0
  116. package/dist/rag/rag-tool.test.js +149 -0
  117. package/dist/rag/rag-tool.test.js.map +1 -0
  118. package/dist/rag/retriever.test.d.ts +26 -0
  119. package/dist/rag/retriever.test.d.ts.map +1 -0
  120. package/dist/rag/retriever.test.js +180 -0
  121. package/dist/rag/retriever.test.js.map +1 -0
  122. package/dist/rag/vector-store.test.d.ts +38 -0
  123. package/dist/rag/vector-store.test.d.ts.map +1 -0
  124. package/dist/rag/vector-store.test.js +175 -0
  125. package/dist/rag/vector-store.test.js.map +1 -0
  126. package/dist/registry/ManagedRegistry.test.d.ts +21 -0
  127. package/dist/registry/ManagedRegistry.test.d.ts.map +1 -0
  128. package/dist/registry/ManagedRegistry.test.js +98 -0
  129. package/dist/registry/ManagedRegistry.test.js.map +1 -0
  130. package/dist/registry/Registry.test.d.ts +18 -0
  131. package/dist/registry/Registry.test.d.ts.map +1 -0
  132. package/dist/registry/Registry.test.js +79 -0
  133. package/dist/registry/Registry.test.js.map +1 -0
  134. package/dist/registry/agent/definitions.test.d.ts +15 -0
  135. package/dist/registry/agent/definitions.test.d.ts.map +1 -0
  136. package/dist/registry/agent/definitions.test.js +84 -0
  137. package/dist/registry/agent/definitions.test.js.map +1 -0
  138. package/dist/registry/connector/definitions.test.d.ts +13 -0
  139. package/dist/registry/connector/definitions.test.d.ts.map +1 -0
  140. package/dist/registry/connector/definitions.test.js +41 -0
  141. package/dist/registry/connector/definitions.test.js.map +1 -0
  142. package/dist/registry/connector/scoped.test.d.ts +21 -0
  143. package/dist/registry/connector/scoped.test.d.ts.map +1 -0
  144. package/dist/registry/connector/scoped.test.js +115 -0
  145. package/dist/registry/connector/scoped.test.js.map +1 -0
  146. package/dist/registry/plugin/index.test.d.ts +12 -0
  147. package/dist/registry/plugin/index.test.d.ts.map +1 -0
  148. package/dist/registry/plugin/index.test.js +69 -0
  149. package/dist/registry/plugin/index.test.js.map +1 -0
  150. package/dist/registry/tool/execute.test.d.ts +42 -0
  151. package/dist/registry/tool/execute.test.d.ts.map +1 -0
  152. package/dist/registry/tool/execute.test.js +281 -0
  153. package/dist/registry/tool/execute.test.js.map +1 -0
  154. package/dist/runtime/query/iteration/phases/advisory.test.d.ts +42 -0
  155. package/dist/runtime/query/iteration/phases/advisory.test.d.ts.map +1 -0
  156. package/dist/runtime/query/iteration/phases/advisory.test.js +334 -0
  157. package/dist/runtime/query/iteration/phases/advisory.test.js.map +1 -0
  158. package/dist/test-setup.d.ts +22 -0
  159. package/dist/test-setup.d.ts.map +1 -0
  160. package/dist/test-setup.js +23 -0
  161. package/dist/test-setup.js.map +1 -0
  162. package/dist/utils/logger.d.ts +1 -1
  163. package/dist/utils/logger.d.ts.map +1 -1
  164. package/dist/utils/logger.js +5 -0
  165. package/dist/utils/logger.js.map +1 -1
  166. package/package.json +4 -1
  167. package/src/advisory/context.test.ts +109 -0
  168. package/src/advisory/evaluator.test.ts +192 -0
  169. package/src/advisory/executor.test.ts +272 -0
  170. package/src/advisory/registry.test.ts +75 -0
  171. package/src/bridge/a2a/agent-card.test.ts +140 -0
  172. package/src/bridge/a2a/mapper.test.ts +293 -0
  173. package/src/bridge/a2a/message.test.ts +138 -0
  174. package/src/bridge/a2a/task.test.ts +235 -0
  175. package/src/bridge/mcp/connector/adapter.test.ts +230 -0
  176. package/src/bridge/sse/mapper.test.ts +422 -0
  177. package/src/bridge/tools/connector/adapter.test.ts +224 -0
  178. package/src/bridge/tools/connector/definitions.test.ts +183 -0
  179. package/src/bridge/tools/connector/router.test.ts +159 -0
  180. package/src/bus/breaker.test.ts +274 -0
  181. package/src/bus/index.test.ts +183 -0
  182. package/src/bus/lock.test.ts +265 -0
  183. package/src/bus/ownership.test.ts +243 -0
  184. package/src/connector/BaseConnector.test.ts +130 -0
  185. package/src/connector/builtins/http.test.ts +290 -0
  186. package/src/connector/builtins/webhook.test.ts +138 -0
  187. package/src/connector/execution/factory.test.ts +75 -0
  188. package/src/connector/execution/remote.test.ts +63 -0
  189. package/src/connector/mcp/adapter.test.ts +249 -0
  190. package/src/rag/chunking.test.ts +107 -0
  191. package/src/rag/context-assembler.test.ts +114 -0
  192. package/src/rag/embedding.test.ts +130 -0
  193. package/src/rag/ingestion.test.ts +114 -0
  194. package/src/rag/knowledge-base.test.ts +106 -0
  195. package/src/rag/rag-tool.test.ts +167 -0
  196. package/src/rag/retriever.test.ts +210 -0
  197. package/src/rag/vector-store.test.ts +196 -0
  198. package/src/registry/ManagedRegistry.test.ts +118 -0
  199. package/src/registry/Registry.test.ts +91 -0
  200. package/src/registry/agent/definitions.test.ts +100 -0
  201. package/src/registry/connector/definitions.test.ts +51 -0
  202. package/src/registry/connector/scoped.test.ts +129 -0
  203. package/src/registry/plugin/index.test.ts +85 -0
  204. package/src/registry/tool/execute.test.ts +330 -0
  205. package/src/runtime/query/iteration/phases/advisory.test.ts +412 -0
  206. package/src/test-setup.ts +24 -0
  207. package/src/utils/logger.ts +6 -1
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ManagedRegistry` extends `Registry` with a component-named
5
+ * logger + two optional id-extraction strategies: `idField` or
6
+ * `computeId`. `computeId` takes precedence when both are set.
7
+ * - `register(id, item)` (2-arg): throws when `item` is missing;
8
+ * warn-logs + overwrites on duplicate id (no typed error).
9
+ * - `register(item)` (1-arg): extracts id via computeId/idField;
10
+ * throws when neither is configured.
11
+ * - `register(items[])`: batch-registers (recursively calls the
12
+ * single-arg path for each). Any failure in a single register
13
+ * throws and aborts the batch (no partial-success semantics).
14
+ * - `getOrThrow(id)`: returns the item; throws
15
+ * `new Error("Not found: <id>. Available: <csv of known ids>")`
16
+ * — a plain `Error`, NOT a typed `XYZNotFoundError` (Codex #1).
17
+ * - No start / stop lifecycle exists (design §2.3 claim was
18
+ * fictional).
19
+ */
20
+ import { describe, expect, it, vi } from 'vitest';
21
+ import { ManagedRegistry } from './ManagedRegistry.js';
22
+ function makeLogger() {
23
+ const self = {
24
+ info: vi.fn(),
25
+ warn: vi.fn(),
26
+ error: vi.fn(),
27
+ debug: vi.fn(),
28
+ child: vi.fn(),
29
+ };
30
+ self.child = vi.fn(() => self);
31
+ return self;
32
+ }
33
+ describe('ManagedRegistry', () => {
34
+ describe('register (2-arg form)', () => {
35
+ it('throws when called with (id) only', () => {
36
+ const r = new ManagedRegistry({ componentName: 't' });
37
+ // biome-ignore lint/suspicious/noExplicitAny: exercises the no-item-arg path
38
+ expect(() => r.register('a')).toThrow(/requires an item argument/);
39
+ });
40
+ it('warn-logs then overwrites on duplicate id', () => {
41
+ const logger = makeLogger();
42
+ const r = new ManagedRegistry({ componentName: 't', logger });
43
+ const a = { id: 'a', info: { id: 'a' }, value: 1 };
44
+ const b = { id: 'a', info: { id: 'a' }, value: 2 };
45
+ r.register('a', a);
46
+ r.register('a', b);
47
+ expect(r.get('a')?.value).toBe(2);
48
+ expect(logger.warn).toHaveBeenCalledWith(expect.stringContaining('"a" already registered'));
49
+ });
50
+ });
51
+ describe('register (single-item form)', () => {
52
+ it('uses idField when computeId is not set', () => {
53
+ const r = new ManagedRegistry({ componentName: 't', idField: 'id' });
54
+ r.register({ id: 'a', info: { id: 'nested' }, value: 1 });
55
+ expect(r.get('a')).toBeDefined();
56
+ expect(r.get('nested')).toBeUndefined();
57
+ });
58
+ it('computeId takes precedence over idField when both are set', () => {
59
+ const r = new ManagedRegistry({
60
+ componentName: 't',
61
+ idField: 'id',
62
+ computeId: (item) => item.info.id,
63
+ });
64
+ r.register({ id: 'top', info: { id: 'nested' }, value: 1 });
65
+ expect(r.get('nested')).toBeDefined();
66
+ expect(r.get('top')).toBeUndefined();
67
+ });
68
+ it('throws when neither idField nor computeId is configured', () => {
69
+ const r = new ManagedRegistry({ componentName: 't' });
70
+ expect(() => r.register({ id: 'a', info: { id: 'a' }, value: 1 })).toThrow(/requires idField or computeId/);
71
+ });
72
+ });
73
+ describe('register (array form)', () => {
74
+ it('batch-registers via the single-item path', () => {
75
+ const r = new ManagedRegistry({ componentName: 't', idField: 'id' });
76
+ r.register([
77
+ { id: 'a', info: { id: 'a' }, value: 1 },
78
+ { id: 'b', info: { id: 'b' }, value: 2 },
79
+ ]);
80
+ expect(r.listIds()).toEqual(['a', 'b']);
81
+ });
82
+ });
83
+ describe('getOrThrow', () => {
84
+ it('returns the item when present', () => {
85
+ const r = new ManagedRegistry({ componentName: 't', idField: 'id' });
86
+ const a = { id: 'a', info: { id: 'a' }, value: 1 };
87
+ r.register(a);
88
+ expect(r.getOrThrow('a')).toBe(a);
89
+ });
90
+ it('throws a plain Error naming the missing id + available ids', () => {
91
+ const r = new ManagedRegistry({ componentName: 't', idField: 'id' });
92
+ r.register({ id: 'a', info: { id: 'a' }, value: 1 });
93
+ r.register({ id: 'b', info: { id: 'b' }, value: 2 });
94
+ expect(() => r.getOrThrow('missing')).toThrow(/Not found: "missing"\. Available: a, b/);
95
+ });
96
+ });
97
+ });
98
+ //# sourceMappingURL=ManagedRegistry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManagedRegistry.test.js","sourceRoot":"","sources":["../../src/registry/ManagedRegistry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `register(id, item)` silently overwrites an existing entry —
5
+ * NO duplicate-error is thrown (Codex #1 verified the design
6
+ * §2.3 "typed DuplicateRegistrationError" claim was fiction).
7
+ * - `get(id)` returns `undefined` for an unknown id (NOT a typed
8
+ * error). `getAll`, `listIds`, `has`, `size` reflect the current
9
+ * `Map` state; iteration order follows insertion order.
10
+ * - `unregister(id)` returns true if the entry existed (and was
11
+ * deleted), false otherwise.
12
+ * - `clear()` empties the map.
13
+ * - The generic `Registry<T>` has no component name, no logger, no
14
+ * lifecycle. All enrichment (logs, idField inference, lifecycle)
15
+ * happens in `ManagedRegistry`, not here.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=Registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.test.d.ts","sourceRoot":"","sources":["../../src/registry/Registry.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `register(id, item)` silently overwrites an existing entry —
5
+ * NO duplicate-error is thrown (Codex #1 verified the design
6
+ * §2.3 "typed DuplicateRegistrationError" claim was fiction).
7
+ * - `get(id)` returns `undefined` for an unknown id (NOT a typed
8
+ * error). `getAll`, `listIds`, `has`, `size` reflect the current
9
+ * `Map` state; iteration order follows insertion order.
10
+ * - `unregister(id)` returns true if the entry existed (and was
11
+ * deleted), false otherwise.
12
+ * - `clear()` empties the map.
13
+ * - The generic `Registry<T>` has no component name, no logger, no
14
+ * lifecycle. All enrichment (logs, idField inference, lifecycle)
15
+ * happens in `ManagedRegistry`, not here.
16
+ */
17
+ import { describe, expect, it } from 'vitest';
18
+ import { Registry } from './Registry.js';
19
+ describe('Registry', () => {
20
+ it('register + get + has roundtrip', () => {
21
+ const r = new Registry();
22
+ const a = { id: 'a', value: 1 };
23
+ r.register('a', a);
24
+ expect(r.get('a')).toBe(a);
25
+ expect(r.has('a')).toBe(true);
26
+ expect(r.get('b')).toBeUndefined();
27
+ expect(r.has('b')).toBe(false);
28
+ });
29
+ it('register silently overwrites an existing key', () => {
30
+ const r = new Registry();
31
+ r.register('a', { id: 'a', value: 1 });
32
+ r.register('a', { id: 'a', value: 2 });
33
+ expect(r.get('a')?.value).toBe(2);
34
+ expect(r.size()).toBe(1);
35
+ });
36
+ it('listIds reflects insertion order', () => {
37
+ const r = new Registry();
38
+ r.register('x', { id: 'x', value: 1 });
39
+ r.register('y', { id: 'y', value: 2 });
40
+ r.register('z', { id: 'z', value: 3 });
41
+ expect(r.listIds()).toEqual(['x', 'y', 'z']);
42
+ });
43
+ it('getAll returns every item in insertion order', () => {
44
+ const r = new Registry();
45
+ const items = [
46
+ { id: 'a', value: 1 },
47
+ { id: 'b', value: 2 },
48
+ ];
49
+ for (const item of items)
50
+ r.register(item.id, item);
51
+ expect(r.getAll()).toEqual(items);
52
+ });
53
+ it('unregister returns true iff the key existed', () => {
54
+ const r = new Registry();
55
+ r.register('a', { id: 'a', value: 1 });
56
+ expect(r.unregister('a')).toBe(true);
57
+ expect(r.unregister('a')).toBe(false);
58
+ expect(r.get('a')).toBeUndefined();
59
+ });
60
+ it('clear empties the map', () => {
61
+ const r = new Registry();
62
+ r.register('a', { id: 'a', value: 1 });
63
+ r.register('b', { id: 'b', value: 2 });
64
+ r.clear();
65
+ expect(r.size()).toBe(0);
66
+ expect(r.getAll()).toEqual([]);
67
+ });
68
+ it('size matches the map size', () => {
69
+ const r = new Registry();
70
+ expect(r.size()).toBe(0);
71
+ r.register('a', { id: 'a', value: 1 });
72
+ expect(r.size()).toBe(1);
73
+ r.register('a', { id: 'a', value: 2 }); // overwrite
74
+ expect(r.size()).toBe(1);
75
+ r.register('b', { id: 'b', value: 3 });
76
+ expect(r.size()).toBe(2);
77
+ });
78
+ });
79
+ //# sourceMappingURL=Registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.test.js","sourceRoot":"","sources":["../../src/registry/Registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `AgentRegistry` extends `ManagedRegistry<AgentDefinition>` and
5
+ * keys by `def.info.id` via `computeId` (NOT by the top-level id
6
+ * field — there isn't one on AgentDefinition).
7
+ * - `resolve(agentId)` returns `.typedAgent`; delegates to
8
+ * `getOrThrow` and therefore throws a plain `Error` when missing.
9
+ * - `listByType(type)` filters by `typedAgent.type`.
10
+ * - `search({category?, query?})` filters by info.category then by
11
+ * case-insensitive match against name OR description. An empty
12
+ * query matches all.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=definitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.d.ts","sourceRoot":"","sources":["../../../src/registry/agent/definitions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `AgentRegistry` extends `ManagedRegistry<AgentDefinition>` and
5
+ * keys by `def.info.id` via `computeId` (NOT by the top-level id
6
+ * field — there isn't one on AgentDefinition).
7
+ * - `resolve(agentId)` returns `.typedAgent`; delegates to
8
+ * `getOrThrow` and therefore throws a plain `Error` when missing.
9
+ * - `listByType(type)` filters by `typedAgent.type`.
10
+ * - `search({category?, query?})` filters by info.category then by
11
+ * case-insensitive match against name OR description. An empty
12
+ * query matches all.
13
+ */
14
+ import { describe, expect, it } from 'vitest';
15
+ import { AgentRegistry } from './definitions.js';
16
+ function makeDef(id, type, overrides = {}) {
17
+ const info = {
18
+ id,
19
+ name: `Agent ${id}`,
20
+ version: '1.0.0',
21
+ category: 'general',
22
+ description: `agent ${id} does stuff`,
23
+ tools: [],
24
+ defaults: { model: 'opus', tokenBudget: 1000 },
25
+ ...overrides,
26
+ };
27
+ const typedAgent = { type };
28
+ return { info, typedAgent };
29
+ }
30
+ describe('AgentRegistry', () => {
31
+ it('keys by info.id (computeId), not by a top-level id field', () => {
32
+ const r = new AgentRegistry();
33
+ r.register(makeDef('coder', 'reactive'));
34
+ expect(r.get('coder')).toBeDefined();
35
+ });
36
+ it('resolve returns typedAgent', () => {
37
+ const r = new AgentRegistry();
38
+ const def = makeDef('coder', 'reactive');
39
+ r.register(def);
40
+ expect(r.resolve('coder')).toBe(def.typedAgent);
41
+ });
42
+ it('resolve throws (plain Error) on unknown agentId', () => {
43
+ const r = new AgentRegistry();
44
+ expect(() => r.resolve('nope')).toThrow(/Not found/);
45
+ });
46
+ it('listByType filters by typedAgent.type', () => {
47
+ const r = new AgentRegistry();
48
+ r.register(makeDef('a', 'reactive'));
49
+ r.register(makeDef('b', 'pipeline'));
50
+ r.register(makeDef('c', 'reactive'));
51
+ expect(r.listByType('reactive').map((d) => d.info.id)).toEqual(['a', 'c']);
52
+ expect(r.listByType('pipeline').map((d) => d.info.id)).toEqual(['b']);
53
+ });
54
+ describe('search', () => {
55
+ it('empty query returns all', () => {
56
+ const r = new AgentRegistry();
57
+ r.register(makeDef('a', 'reactive'));
58
+ r.register(makeDef('b', 'pipeline'));
59
+ expect(r.search({})).toHaveLength(2);
60
+ });
61
+ it('category filter is strict-equal', () => {
62
+ const r = new AgentRegistry();
63
+ r.register(makeDef('coder', 'reactive', { category: 'coding' }));
64
+ r.register(makeDef('writer', 'reactive', { category: 'writing' }));
65
+ expect(r.search({ category: 'coding' }).map((d) => d.info.id)).toEqual(['coder']);
66
+ });
67
+ it('query matches name OR description case-insensitively', () => {
68
+ const r = new AgentRegistry();
69
+ r.register(makeDef('alpha', 'reactive', { name: 'CoderBot', description: 'writes code' }));
70
+ r.register(makeDef('beta', 'reactive', { name: 'Other', description: 'tests CODE' }));
71
+ r.register(makeDef('gamma', 'reactive', { name: 'Third', description: 'documentation' }));
72
+ const hits = r.search({ query: 'code' }).map((d) => d.info.id);
73
+ expect(hits).toEqual(['alpha', 'beta']);
74
+ });
75
+ it('combines category + query', () => {
76
+ const r = new AgentRegistry();
77
+ r.register(makeDef('alpha', 'reactive', { category: 'coding', name: 'CoderBot' }));
78
+ r.register(makeDef('beta', 'reactive', { category: 'writing', name: 'CoderWriter' }));
79
+ const hits = r.search({ category: 'coding', query: 'coder' }).map((d) => d.info.id);
80
+ expect(hits).toEqual(['alpha']);
81
+ });
82
+ });
83
+ });
84
+ //# sourceMappingURL=definitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.js","sourceRoot":"","sources":["../../../src/registry/agent/definitions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ConnectorRegistry` extends `ManagedRegistry<ConnectorDefinition>`
5
+ * with `idField: 'id'` — it keys by the top-level `id` field, NOT
6
+ * a nested path.
7
+ * - `listByType(connectionType)` filters by `connectionType`.
8
+ * - As a global (non-tenant-scoped) registry, ConnectorRegistry is
9
+ * shared across tenants; tenant isolation lives in
10
+ * `TenantConnectorManager` per Codex #5.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=definitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.d.ts","sourceRoot":"","sources":["../../../src/registry/connector/definitions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ConnectorRegistry` extends `ManagedRegistry<ConnectorDefinition>`
5
+ * with `idField: 'id'` — it keys by the top-level `id` field, NOT
6
+ * a nested path.
7
+ * - `listByType(connectionType)` filters by `connectionType`.
8
+ * - As a global (non-tenant-scoped) registry, ConnectorRegistry is
9
+ * shared across tenants; tenant isolation lives in
10
+ * `TenantConnectorManager` per Codex #5.
11
+ */
12
+ import { describe, expect, it } from 'vitest';
13
+ import { z } from 'zod';
14
+ import { ConnectorRegistry } from './definitions.js';
15
+ function makeDef(id, connectionType) {
16
+ return {
17
+ id: id,
18
+ name: id,
19
+ description: `${id} connector`,
20
+ connectionType,
21
+ configSchema: z.object({}),
22
+ methods: [],
23
+ };
24
+ }
25
+ describe('ConnectorRegistry', () => {
26
+ it('keys by top-level id', () => {
27
+ const r = new ConnectorRegistry();
28
+ r.register(makeDef('conn_a', 'http'));
29
+ expect(r.get('conn_a')).toBeDefined();
30
+ });
31
+ it('listByType filters by connectionType', () => {
32
+ const r = new ConnectorRegistry();
33
+ r.register(makeDef('conn_a', 'http'));
34
+ r.register(makeDef('conn_b', 'webhook'));
35
+ r.register(makeDef('conn_c', 'http'));
36
+ expect(r.listByType('http').map((d) => d.id)).toEqual(['conn_a', 'conn_c']);
37
+ expect(r.listByType('webhook').map((d) => d.id)).toEqual(['conn_b']);
38
+ expect(r.listByType('custom')).toEqual([]);
39
+ });
40
+ });
41
+ //# sourceMappingURL=definitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.test.js","sourceRoot":"","sources":["../../../src/registry/connector/definitions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,SAAS,OAAO,CACf,EAAU,EACV,cAAqD;IAErD,OAAO;QACN,EAAE,EAAE,EAAiB;QACrB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,GAAG,EAAE,YAAY;QAC9B,cAAc;QACd,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE;KACX,CAAA;AACF,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,IAAI,iBAAiB,EAAE,CAAA;QACjC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,IAAI,iBAAiB,EAAE,CAAA;QACjC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC3E,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QACpE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ScopedConnectorRegistry` stores per-scope config by a composite
5
+ * key `<scope>:<scopeId>:<connectorId>`. Multiple configs at
6
+ * different scopes for the same connector coexist.
7
+ * - `set`, `remove`, `getAt` round-trip through the same key.
8
+ * - `resolve(connectorId, chain)` iterates in `CONNECTOR_SCOPE_ORDER`
9
+ * (org → environment → team → project → agent) and merges layers
10
+ * — later scopes override earlier ones. Specifically:
11
+ * - `options` are shallow-merged across layers.
12
+ * - `auth` is last-wins (any layer with an explicit auth replaces).
13
+ * - `enabled` is last-wins (defaulting to true when no layer sets it).
14
+ * - The final `ConnectorConfig.name` falls back to `connectorId`
15
+ * when no layer sets a name.
16
+ * - `resolve` returns undefined when no layer matches the chain.
17
+ * - `listForConnector` returns every config for a connector across
18
+ * all scopes; `listAtScope` returns every connector at a given scope.
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=scoped.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped.test.d.ts","sourceRoot":"","sources":["../../../src/registry/connector/scoped.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `ScopedConnectorRegistry` stores per-scope config by a composite
5
+ * key `<scope>:<scopeId>:<connectorId>`. Multiple configs at
6
+ * different scopes for the same connector coexist.
7
+ * - `set`, `remove`, `getAt` round-trip through the same key.
8
+ * - `resolve(connectorId, chain)` iterates in `CONNECTOR_SCOPE_ORDER`
9
+ * (org → environment → team → project → agent) and merges layers
10
+ * — later scopes override earlier ones. Specifically:
11
+ * - `options` are shallow-merged across layers.
12
+ * - `auth` is last-wins (any layer with an explicit auth replaces).
13
+ * - `enabled` is last-wins (defaulting to true when no layer sets it).
14
+ * - The final `ConnectorConfig.name` falls back to `connectorId`
15
+ * when no layer sets a name.
16
+ * - `resolve` returns undefined when no layer matches the chain.
17
+ * - `listForConnector` returns every config for a connector across
18
+ * all scopes; `listAtScope` returns every connector at a given scope.
19
+ */
20
+ import { describe, expect, it } from 'vitest';
21
+ import { ScopedConnectorRegistry } from './scoped.js';
22
+ const CID = 'conn_http';
23
+ describe('ScopedConnectorRegistry', () => {
24
+ describe('set + getAt + remove', () => {
25
+ it('round-trips via the composite key', () => {
26
+ const r = new ScopedConnectorRegistry();
27
+ r.set({
28
+ scope: { scope: 'org', scopeId: 'org_1' },
29
+ connectorId: CID,
30
+ options: { k: 'v' },
31
+ });
32
+ expect(r.getAt({ scope: 'org', scopeId: 'org_1' }, CID)?.options).toEqual({ k: 'v' });
33
+ });
34
+ it('remove returns true iff an entry existed', () => {
35
+ const r = new ScopedConnectorRegistry();
36
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID });
37
+ expect(r.remove({ scope: 'org', scopeId: 'org_1' }, CID)).toBe(true);
38
+ expect(r.remove({ scope: 'org', scopeId: 'org_1' }, CID)).toBe(false);
39
+ });
40
+ it('different scopes coexist for the same connector', () => {
41
+ const r = new ScopedConnectorRegistry();
42
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID });
43
+ r.set({ scope: { scope: 'project', scopeId: 'proj_1' }, connectorId: CID });
44
+ expect(r.listForConnector(CID)).toHaveLength(2);
45
+ });
46
+ });
47
+ describe('resolve layering', () => {
48
+ it('merges options shallow; later scopes override', () => {
49
+ const r = new ScopedConnectorRegistry();
50
+ r.set({
51
+ scope: { scope: 'org', scopeId: 'org_1' },
52
+ connectorId: CID,
53
+ options: { host: 'api.org', timeout: 30 },
54
+ });
55
+ r.set({
56
+ scope: { scope: 'project', scopeId: 'proj_1' },
57
+ connectorId: CID,
58
+ options: { host: 'api.project' },
59
+ });
60
+ const resolved = r.resolve(CID, { org: 'org_1', project: 'proj_1' });
61
+ expect(resolved?.options).toEqual({ host: 'api.project', timeout: 30 });
62
+ });
63
+ it('auth is last-wins (CONNECTOR_SCOPE_ORDER)', () => {
64
+ const r = new ScopedConnectorRegistry();
65
+ r.set({
66
+ scope: { scope: 'org', scopeId: 'org_1' },
67
+ connectorId: CID,
68
+ auth: { type: 'none' },
69
+ });
70
+ r.set({
71
+ scope: { scope: 'project', scopeId: 'proj_1' },
72
+ connectorId: CID,
73
+ auth: { type: 'api_key', credentials: { apiKey: 'secret' } },
74
+ });
75
+ const resolved = r.resolve(CID, { org: 'org_1', project: 'proj_1' });
76
+ expect(resolved?.auth).toEqual({ type: 'api_key', credentials: { apiKey: 'secret' } });
77
+ });
78
+ it('enabled defaults to true and is last-wins', () => {
79
+ const r = new ScopedConnectorRegistry();
80
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID, enabled: false });
81
+ const resolved = r.resolve(CID, { org: 'org_1' });
82
+ expect(resolved?.enabled).toBe(false);
83
+ });
84
+ it('config.name falls back to connectorId when no layer sets a name', () => {
85
+ const r = new ScopedConnectorRegistry();
86
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID });
87
+ const resolved = r.resolve(CID, { org: 'org_1' });
88
+ expect(resolved?.config.name).toBe(CID);
89
+ });
90
+ it('resolvedFrom preserves layer order by CONNECTOR_SCOPE_ORDER', () => {
91
+ const r = new ScopedConnectorRegistry();
92
+ r.set({ scope: { scope: 'project', scopeId: 'proj_1' }, connectorId: CID });
93
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID });
94
+ const resolved = r.resolve(CID, { org: 'org_1', project: 'proj_1' });
95
+ expect(resolved?.resolvedFrom.map((s) => s.scope)).toEqual(['org', 'project']);
96
+ });
97
+ it('returns undefined when no layer matches the chain', () => {
98
+ const r = new ScopedConnectorRegistry();
99
+ expect(r.resolve(CID, { org: 'org_none' })).toBeUndefined();
100
+ });
101
+ });
102
+ describe('list operations', () => {
103
+ it('listAtScope filters by scope prefix', () => {
104
+ const r = new ScopedConnectorRegistry();
105
+ r.set({ scope: { scope: 'org', scopeId: 'org_1' }, connectorId: CID });
106
+ r.set({
107
+ scope: { scope: 'org', scopeId: 'org_1' },
108
+ connectorId: 'conn_other',
109
+ });
110
+ r.set({ scope: { scope: 'project', scopeId: 'proj_1' }, connectorId: CID });
111
+ expect(r.listAtScope({ scope: 'org', scopeId: 'org_1' })).toHaveLength(2);
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=scoped.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped.test.js","sourceRoot":"","sources":["../../../src/registry/connector/scoped.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 3):
3
+ *
4
+ * - `PluginRegistry` extends `ManagedRegistry<PluginDefinition>`
5
+ * with `idField: 'id'`.
6
+ * - `listByScope(scope)` filters by `def.scope`.
7
+ * - `listByStatus(status)` filters by `def.status`.
8
+ * - `findByName(name)` does a linear scan through `getAll()` and
9
+ * returns the first match by `manifest.name`, or undefined.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/registry/plugin/index.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}