@agentick/core 0.0.1 → 0.1.9

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 (160) hide show
  1. package/dist/.tsbuildinfo.build +1 -1
  2. package/package.json +8 -3
  3. package/dist/.tsbuildinfo +0 -1
  4. package/dist/agent.d.ts +0 -32
  5. package/dist/agent.d.ts.map +0 -1
  6. package/dist/agent.js +0 -26
  7. package/dist/agent.js.map +0 -1
  8. package/dist/aidk-instance.d.ts +0 -294
  9. package/dist/aidk-instance.d.ts.map +0 -1
  10. package/dist/aidk-instance.js +0 -340
  11. package/dist/aidk-instance.js.map +0 -1
  12. package/dist/compiler/content-block-registry.d.ts +0 -11
  13. package/dist/compiler/content-block-registry.d.ts.map +0 -1
  14. package/dist/compiler/content-block-registry.js +0 -312
  15. package/dist/compiler/content-block-registry.js.map +0 -1
  16. package/dist/compiler/extractors.d.ts +0 -68
  17. package/dist/compiler/extractors.d.ts.map +0 -1
  18. package/dist/compiler/extractors.js +0 -547
  19. package/dist/compiler/extractors.js.map +0 -1
  20. package/dist/compiler/fiber.d.ts +0 -61
  21. package/dist/compiler/fiber.d.ts.map +0 -1
  22. package/dist/compiler/fiber.js +0 -244
  23. package/dist/compiler/fiber.js.map +0 -1
  24. package/dist/component/tentickle-component.d.ts +0 -185
  25. package/dist/component/tentickle-component.d.ts.map +0 -1
  26. package/dist/component/tentickle-component.js +0 -182
  27. package/dist/component/tentickle-component.js.map +0 -1
  28. package/dist/core/channel-helpers.d.ts +0 -31
  29. package/dist/core/channel-helpers.d.ts.map +0 -1
  30. package/dist/core/channel-helpers.js +0 -62
  31. package/dist/core/channel-helpers.js.map +0 -1
  32. package/dist/core/channel.d.ts +0 -164
  33. package/dist/core/channel.d.ts.map +0 -1
  34. package/dist/core/channel.js +0 -199
  35. package/dist/core/channel.js.map +0 -1
  36. package/dist/core/context.d.ts +0 -412
  37. package/dist/core/context.d.ts.map +0 -1
  38. package/dist/core/context.js +0 -290
  39. package/dist/core/context.js.map +0 -1
  40. package/dist/core/event-buffer.d.ts +0 -212
  41. package/dist/core/event-buffer.d.ts.map +0 -1
  42. package/dist/core/event-buffer.js +0 -346
  43. package/dist/core/event-buffer.js.map +0 -1
  44. package/dist/core/execution-helpers.d.ts +0 -179
  45. package/dist/core/execution-helpers.d.ts.map +0 -1
  46. package/dist/core/execution-helpers.js +0 -212
  47. package/dist/core/execution-helpers.js.map +0 -1
  48. package/dist/core/execution-tracker.d.ts +0 -53
  49. package/dist/core/execution-tracker.d.ts.map +0 -1
  50. package/dist/core/execution-tracker.js +0 -309
  51. package/dist/core/execution-tracker.js.map +0 -1
  52. package/dist/core/index.d.ts +0 -58
  53. package/dist/core/index.d.ts.map +0 -1
  54. package/dist/core/index.js +0 -58
  55. package/dist/core/index.js.map +0 -1
  56. package/dist/core/logger.d.ts +0 -341
  57. package/dist/core/logger.d.ts.map +0 -1
  58. package/dist/core/logger.js +0 -346
  59. package/dist/core/logger.js.map +0 -1
  60. package/dist/core/metrics-helpers.d.ts +0 -40
  61. package/dist/core/metrics-helpers.d.ts.map +0 -1
  62. package/dist/core/metrics-helpers.js +0 -72
  63. package/dist/core/metrics-helpers.js.map +0 -1
  64. package/dist/core/otel-provider.d.ts +0 -54
  65. package/dist/core/otel-provider.d.ts.map +0 -1
  66. package/dist/core/otel-provider.js +0 -107
  67. package/dist/core/otel-provider.js.map +0 -1
  68. package/dist/core/procedure-graph.d.ts +0 -136
  69. package/dist/core/procedure-graph.d.ts.map +0 -1
  70. package/dist/core/procedure-graph.js +0 -272
  71. package/dist/core/procedure-graph.js.map +0 -1
  72. package/dist/core/procedure.d.ts +0 -755
  73. package/dist/core/procedure.d.ts.map +0 -1
  74. package/dist/core/procedure.js +0 -899
  75. package/dist/core/procedure.js.map +0 -1
  76. package/dist/core/stream.d.ts +0 -106
  77. package/dist/core/stream.d.ts.map +0 -1
  78. package/dist/core/stream.js +0 -186
  79. package/dist/core/stream.js.map +0 -1
  80. package/dist/core/telemetry.d.ts +0 -182
  81. package/dist/core/telemetry.d.ts.map +0 -1
  82. package/dist/core/telemetry.js +0 -124
  83. package/dist/core/telemetry.js.map +0 -1
  84. package/dist/engine/execution-graph.d.ts +0 -104
  85. package/dist/engine/execution-graph.d.ts.map +0 -1
  86. package/dist/engine/execution-graph.js +0 -257
  87. package/dist/engine/execution-graph.js.map +0 -1
  88. package/dist/hooks/policy-context.d.ts.map +0 -1
  89. package/dist/jsx/components/agent.d.ts +0 -64
  90. package/dist/jsx/components/agent.d.ts.map +0 -1
  91. package/dist/jsx/components/agent.js +0 -80
  92. package/dist/jsx/components/agent.js.map +0 -1
  93. package/dist/model/simple-adapter.d.ts +0 -176
  94. package/dist/model/simple-adapter.d.ts.map +0 -1
  95. package/dist/model/simple-adapter.js +0 -264
  96. package/dist/model/simple-adapter.js.map +0 -1
  97. package/dist/state/boundary.d.ts +0 -347
  98. package/dist/state/boundary.d.ts.map +0 -1
  99. package/dist/state/boundary.js +0 -341
  100. package/dist/state/boundary.js.map +0 -1
  101. package/dist/state/context.d.ts +0 -138
  102. package/dist/state/context.d.ts.map +0 -1
  103. package/dist/state/context.js +0 -139
  104. package/dist/state/context.js.map +0 -1
  105. package/dist/state/hooks.d.ts +0 -798
  106. package/dist/state/hooks.d.ts.map +0 -1
  107. package/dist/state/hooks.js +0 -1437
  108. package/dist/state/hooks.js.map +0 -1
  109. package/dist/state/index.d.ts +0 -72
  110. package/dist/state/index.d.ts.map +0 -1
  111. package/dist/state/index.js +0 -73
  112. package/dist/state/index.js.map +0 -1
  113. package/dist/state/signal.d.ts +0 -223
  114. package/dist/state/signal.d.ts.map +0 -1
  115. package/dist/state/signal.js +0 -699
  116. package/dist/state/signal.js.map +0 -1
  117. package/dist/state/use-state.d.ts +0 -210
  118. package/dist/state/use-state.d.ts.map +0 -1
  119. package/dist/state/use-state.js +0 -327
  120. package/dist/state/use-state.js.map +0 -1
  121. package/dist/tentickle-instance.d.ts +0 -285
  122. package/dist/tentickle-instance.d.ts.map +0 -1
  123. package/dist/tentickle-instance.js +0 -700
  124. package/dist/tentickle-instance.js.map +0 -1
  125. package/dist/testing/test-model.d.ts +0 -132
  126. package/dist/testing/test-model.d.ts.map +0 -1
  127. package/dist/testing/test-model.js +0 -260
  128. package/dist/testing/test-model.js.map +0 -1
  129. package/dist/v2/reconciler/host-config.d.ts +0 -31
  130. package/dist/v2/reconciler/host-config.d.ts.map +0 -1
  131. package/dist/v2/reconciler/host-config.js +0 -197
  132. package/dist/v2/reconciler/host-config.js.map +0 -1
  133. package/dist/v2/reconciler/index.d.ts +0 -7
  134. package/dist/v2/reconciler/index.d.ts.map +0 -1
  135. package/dist/v2/reconciler/index.js +0 -7
  136. package/dist/v2/reconciler/index.js.map +0 -1
  137. package/dist/v2/reconciler/reconciler.d.ts +0 -39
  138. package/dist/v2/reconciler/reconciler.d.ts.map +0 -1
  139. package/dist/v2/reconciler/reconciler.js +0 -54
  140. package/dist/v2/reconciler/reconciler.js.map +0 -1
  141. package/dist/v2/reconciler/types.d.ts +0 -64
  142. package/dist/v2/reconciler/types.d.ts.map +0 -1
  143. package/dist/v2/reconciler/types.js +0 -20
  144. package/dist/v2/reconciler/types.js.map +0 -1
  145. package/dist/v2/renderers/index.d.ts +0 -7
  146. package/dist/v2/renderers/index.d.ts.map +0 -1
  147. package/dist/v2/renderers/index.js +0 -7
  148. package/dist/v2/renderers/index.js.map +0 -1
  149. package/dist/v2/renderers/markdown.d.ts +0 -16
  150. package/dist/v2/renderers/markdown.d.ts.map +0 -1
  151. package/dist/v2/renderers/markdown.js +0 -65
  152. package/dist/v2/renderers/markdown.js.map +0 -1
  153. package/dist/v2/renderers/types.d.ts +0 -26
  154. package/dist/v2/renderers/types.d.ts.map +0 -1
  155. package/dist/v2/renderers/types.js +0 -6
  156. package/dist/v2/renderers/types.js.map +0 -1
  157. package/dist/v2/renderers/xml.d.ts +0 -17
  158. package/dist/v2/renderers/xml.d.ts.map +0 -1
  159. package/dist/v2/renderers/xml.js +0 -73
  160. package/dist/v2/renderers/xml.js.map +0 -1
@@ -1,182 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * TentickleComponent - React.Component base class for Tentickle
4
- *
5
- * Extends React.Component to work seamlessly with the reconciler while providing
6
- * access to Tentickle-specific features like COM, TickState, and lifecycle hooks.
7
- *
8
- * @example
9
- * ```tsx
10
- * class MyAgent extends TentickleComponent {
11
- * onTickStart() {
12
- * console.log(`Tick ${this.tickState.tick} starting`);
13
- * }
14
- *
15
- * render() {
16
- * const history = this.tickState.previous?.timeline ?? [];
17
- * return (
18
- * <>
19
- * <Section id="system" audience="model">
20
- * You are a helpful assistant.
21
- * </Section>
22
- * {history.map((entry, i) => (
23
- * <Message key={i} {...entry.message} />
24
- * ))}
25
- * </>
26
- * );
27
- * }
28
- * }
29
- * ```
30
- */
31
- import React, {} from "react";
32
- import { COMContext, TickStateContext } from "../hooks/context-internal";
33
- /**
34
- * Internal wrapper that consumes contexts and passes them to the component.
35
- */
36
- function TentickleComponentWrapper({ componentClass: ComponentClass, props, }) {
37
- return (_jsx(COMContext.Consumer, { children: (com) => (_jsx(TickStateContext.Consumer, { children: (tickState) => {
38
- // Create instance with context values
39
- const instance = new ComponentClass(props);
40
- instance._setContextValues({ com, tickState });
41
- return instance._renderWithLifecycle();
42
- } })) }));
43
- }
44
- /**
45
- * Base class for class-based Tentickle components.
46
- *
47
- * Extends React.Component and provides:
48
- * - Access to COM via `this.com`
49
- * - Access to TickState via `this.tickState`
50
- * - Tentickle lifecycle methods (onMount, onTickStart, etc.)
51
- *
52
- * @example
53
- * ```tsx
54
- * class TaskAgent extends TentickleComponent<{ maxTasks?: number }> {
55
- * onMount() {
56
- * console.log('Agent mounted');
57
- * }
58
- *
59
- * onTickStart() {
60
- * console.log(`Starting tick ${this.tickState.tick}`);
61
- * }
62
- *
63
- * render() {
64
- * return (
65
- * <Section id="system" audience="model">
66
- * You can manage up to {this.props.maxTasks ?? 10} tasks.
67
- * </Section>
68
- * );
69
- * }
70
- * }
71
- *
72
- * // Usage
73
- * <TaskAgent maxTasks={5} />
74
- * ```
75
- */
76
- export class TentickleComponent extends React.Component {
77
- // Context values (set by wrapper)
78
- _com = null;
79
- _tickState = null;
80
- _mounted = false;
81
- _lastTick = -1;
82
- /**
83
- * Access the Context Object Model.
84
- * Provides access to timeline, sections, tools, state, and more.
85
- */
86
- get com() {
87
- if (!this._com) {
88
- throw new Error("COM not available. TentickleComponent must be used within a Tentickle execution context.");
89
- }
90
- return this._com;
91
- }
92
- /**
93
- * Access the current tick state.
94
- * Provides tick number, previous output, current output, and stop control.
95
- */
96
- get tickState() {
97
- if (!this._tickState) {
98
- throw new Error("TickState not available. TentickleComponent must be used within a Tentickle execution context.");
99
- }
100
- return this._tickState;
101
- }
102
- /**
103
- * Shortcut to get the previous timeline (conversation history).
104
- */
105
- get history() {
106
- return this.tickState.previous?.timeline ?? [];
107
- }
108
- /**
109
- * Shortcut to get the current tick number.
110
- */
111
- get tick() {
112
- return this.tickState.tick;
113
- }
114
- /**
115
- * Internal: Set context values from wrapper.
116
- */
117
- _setContextValues(values) {
118
- this._com = values.com;
119
- this._tickState = values.tickState;
120
- }
121
- /**
122
- * Internal: Render with lifecycle management.
123
- *
124
- * Note: onTickEnd is not called from class components directly.
125
- * Use useTickEnd hook or createTool for tick end callbacks.
126
- */
127
- _renderWithLifecycle() {
128
- // Handle mount
129
- if (!this._mounted) {
130
- this._mounted = true;
131
- this.onMount?.();
132
- }
133
- // Handle tick start (only once per tick)
134
- const currentTick = this._tickState?.tick ?? 0;
135
- if (currentTick !== this._lastTick) {
136
- this._lastTick = currentTick;
137
- if (this.onTickStart && this._com && this._tickState) {
138
- this.onTickStart(this._com, this._tickState);
139
- }
140
- }
141
- // Call render
142
- const result = this.render();
143
- return result;
144
- }
145
- // ============================================================================
146
- // React Lifecycle Integration
147
- // ============================================================================
148
- componentWillUnmount() {
149
- this.onUnmount?.();
150
- }
151
- }
152
- // ============================================================================
153
- // Factory Function
154
- // ============================================================================
155
- /**
156
- * Create a functional component from a TentickleComponent class.
157
- *
158
- * This is needed because React's reconciler needs a function component
159
- * to consume contexts and create the class instance.
160
- *
161
- * @example
162
- * ```tsx
163
- * class MyAgent extends TentickleComponent {
164
- * render() { return <Section id="system">Hello</Section>; }
165
- * }
166
- *
167
- * // Create the usable component
168
- * const MyAgentComponent = createClassComponent(MyAgent);
169
- *
170
- * // Use in JSX
171
- * <MyAgentComponent />
172
- * ```
173
- */
174
- export function createClassComponent(ComponentClass) {
175
- const WrappedComponent = (props) => {
176
- return _jsx(TentickleComponentWrapper, { componentClass: ComponentClass, props: props });
177
- };
178
- // Preserve the original class name for debugging
179
- WrappedComponent.displayName = ComponentClass.name || "TentickleComponent";
180
- return WrappedComponent;
181
- }
182
- //# sourceMappingURL=tentickle-component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tentickle-component.js","sourceRoot":"","sources":["../../src/component/tentickle-component.tsx"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { Channel, type ChannelEvent } from "./channel";
2
- /**
3
- * Helper functions for accessing channels from KernelContext.
4
- * These provide convenient access patterns for tools and components.
5
- */
6
- /**
7
- * Get a channel from the current context.
8
- * @throws Error if channels are not available in context
9
- */
10
- export declare function getChannel(channelName: string): Channel;
11
- /**
12
- * Publish an event to a channel using the current context.
13
- * @throws Error if channels are not available in context
14
- */
15
- export declare function publishChannel(channelName: string, event: Omit<ChannelEvent, "channel">): void;
16
- /**
17
- * Subscribe to events on a channel using the current context.
18
- * @returns Unsubscribe function
19
- * @throws Error if channels are not available in context
20
- */
21
- export declare function subscribeChannel(channelName: string, handler: (event: ChannelEvent) => void): () => void;
22
- /**
23
- * Wait for a response on a channel using the current context.
24
- * @throws Error if channels are not available in context
25
- */
26
- export declare function waitForChannelResponse(channelName: string, requestId: string, timeoutMs?: number): Promise<ChannelEvent>;
27
- /**
28
- * Try to get a channel from the current context (returns undefined if not available).
29
- */
30
- export declare function tryGetChannel(channelName: string): Channel | undefined;
31
- //# sourceMappingURL=channel-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-helpers.d.ts","sourceRoot":"","sources":["../../src/core/channel-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAGvD;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAQvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAQ9F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,MAAM,IAAI,CAQZ;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAQvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAMtE"}
@@ -1,62 +0,0 @@
1
- import { Channel } from "./channel";
2
- import { Context } from "./context";
3
- /**
4
- * Helper functions for accessing channels from KernelContext.
5
- * These provide convenient access patterns for tools and components.
6
- */
7
- /**
8
- * Get a channel from the current context.
9
- * @throws Error if channels are not available in context
10
- */
11
- export function getChannel(channelName) {
12
- const ctx = Context.get();
13
- if (!ctx.channels) {
14
- throw new Error("Channels are not available in the current context. Ensure channels are configured in EngineConfig.");
15
- }
16
- return ctx.channels.getChannel(ctx, channelName);
17
- }
18
- /**
19
- * Publish an event to a channel using the current context.
20
- * @throws Error if channels are not available in context
21
- */
22
- export function publishChannel(channelName, event) {
23
- const ctx = Context.get();
24
- if (!ctx.channels) {
25
- throw new Error("Channels are not available in the current context. Ensure channels are configured in EngineConfig.");
26
- }
27
- ctx.channels.publish(ctx, channelName, event);
28
- }
29
- /**
30
- * Subscribe to events on a channel using the current context.
31
- * @returns Unsubscribe function
32
- * @throws Error if channels are not available in context
33
- */
34
- export function subscribeChannel(channelName, handler) {
35
- const ctx = Context.get();
36
- if (!ctx.channels) {
37
- throw new Error("Channels are not available in the current context. Ensure channels are configured in EngineConfig.");
38
- }
39
- return ctx.channels.subscribe(ctx, channelName, handler);
40
- }
41
- /**
42
- * Wait for a response on a channel using the current context.
43
- * @throws Error if channels are not available in context
44
- */
45
- export function waitForChannelResponse(channelName, requestId, timeoutMs) {
46
- const ctx = Context.get();
47
- if (!ctx.channels) {
48
- throw new Error("Channels are not available in the current context. Ensure channels are configured in EngineConfig.");
49
- }
50
- return ctx.channels.waitForResponse(ctx, channelName, requestId, timeoutMs);
51
- }
52
- /**
53
- * Try to get a channel from the current context (returns undefined if not available).
54
- */
55
- export function tryGetChannel(channelName) {
56
- const ctx = Context.tryGet();
57
- if (!ctx?.channels) {
58
- return undefined;
59
- }
60
- return ctx.channels.getChannel(ctx, channelName);
61
- }
62
- //# sourceMappingURL=channel-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-helpers.js","sourceRoot":"","sources":["../../src/core/channel-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAqB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAoC;IACtF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,OAAsC;IAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,SAAiB,EACjB,SAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC"}
@@ -1,164 +0,0 @@
1
- import type { KernelContext } from "./context";
2
- /**
3
- * Target specification for event routing.
4
- * Used by transports to determine which connections receive the event.
5
- *
6
- * Inspired by Socket.io patterns:
7
- * - emit: send to target (may include sender)
8
- * - broadcast: send to target excluding sender
9
- */
10
- export interface ChannelTarget {
11
- /**
12
- * Send to specific connection by ID.
13
- */
14
- connectionId?: string;
15
- /**
16
- * Send to all connections in these rooms.
17
- * Rooms are arbitrary strings - application decides naming convention.
18
- * Examples: 'user:123', 'tenant:abc', 'thread:xyz'
19
- */
20
- rooms?: string[];
21
- /**
22
- * Broadcast mode: exclude the source connection from delivery.
23
- * Requires metadata.sourceConnectionId to be set.
24
- *
25
- * Mimics Socket.io's socket.broadcast.emit() pattern:
26
- * - false (default): emit to all targets including sender
27
- * - true: broadcast to all targets except sender
28
- */
29
- excludeSender?: boolean;
30
- }
31
- /**
32
- * Normalized channel event structure.
33
- * Loosely structured but normalized for consistency.
34
- */
35
- export interface ChannelEvent {
36
- /**
37
- * Event type (normalized patterns: 'request', 'response', 'progress', 'status', 'error')
38
- */
39
- type: string;
40
- /**
41
- * Request/response correlation ID (for bidirectional communication)
42
- */
43
- id?: string;
44
- /**
45
- * Channel name (e.g., 'ui:progress', 'ui:user-input', 'tool:status')
46
- */
47
- channel: string;
48
- /**
49
- * Flexible event payload
50
- */
51
- payload: any;
52
- /**
53
- * Optional metadata
54
- */
55
- metadata?: {
56
- timestamp?: number;
57
- source?: string;
58
- executionId?: string;
59
- tick?: number;
60
- sourceConnectionId?: string;
61
- [key: string]: unknown;
62
- };
63
- /**
64
- * Optional routing target.
65
- * If not specified, event is broadcast to all channel subscribers.
66
- * Used by transports for targeted delivery.
67
- */
68
- target?: ChannelTarget;
69
- }
70
- /**
71
- * Core Channel primitive.
72
- * Works standalone in any Node environment.
73
- * Uses EventEmitter internally for pub/sub.
74
- */
75
- export declare class Channel {
76
- readonly name: string;
77
- private emitter;
78
- private pendingRequests;
79
- private recentResponses;
80
- constructor(name: string);
81
- /**
82
- * Publish an event to the channel.
83
- */
84
- publish(event: ChannelEvent): void;
85
- /**
86
- * Subscribe to events on this channel.
87
- * @returns Unsubscribe function
88
- */
89
- subscribe(handler: (event: ChannelEvent) => void): () => void;
90
- /**
91
- * Wait for a response to a specific request.
92
- * Used by tools/components for bidirectional communication.
93
- *
94
- * @param requestId The request ID to wait for
95
- * @param timeoutMs Timeout in milliseconds (default: 30000)
96
- * @returns Promise that resolves when response is received
97
- */
98
- waitForResponse(requestId: string, timeoutMs?: number): Promise<ChannelEvent>;
99
- /**
100
- * Get the number of active subscribers.
101
- */
102
- getSubscriberCount(): number;
103
- /**
104
- * Cleanup: remove all subscribers and pending requests.
105
- */
106
- destroy(): void;
107
- }
108
- /**
109
- * Channel session manages a collection of channels.
110
- * Sessions persist across multiple engine executions.
111
- */
112
- export declare class ChannelSession {
113
- readonly id: string;
114
- readonly channels: Map<string, Channel>;
115
- readonly createdAt: number;
116
- lastActivity: number;
117
- constructor(id: string);
118
- /**
119
- * Get or create a channel within this session.
120
- */
121
- getChannel(name: string): Channel;
122
- /**
123
- * Remove a channel from the session.
124
- */
125
- removeChannel(name: string): void;
126
- /**
127
- * Default session ID generator.
128
- * Uses user context + conversation ID or trace ID.
129
- * Users can override this via ChannelService config.
130
- */
131
- static generateId(ctx: KernelContext): string;
132
- /**
133
- * Cleanup all channels in the session.
134
- */
135
- destroy(): void;
136
- }
137
- /**
138
- * Kernel-level interface for channel service access.
139
- * This allows KernelContext to reference channels without creating
140
- * a circular dependency between kernel and engine packages.
141
- *
142
- * Engine's ChannelService implements this interface.
143
- */
144
- export interface ChannelServiceInterface {
145
- /**
146
- * Get or create a channel within the current session.
147
- * Session is determined from the provided context.
148
- */
149
- getChannel(ctx: KernelContext, channelName: string): Channel;
150
- /**
151
- * Publish an event to a channel.
152
- */
153
- publish(ctx: KernelContext, channelName: string, event: Omit<ChannelEvent, "channel">): void;
154
- /**
155
- * Subscribe to events on a channel.
156
- * @returns Unsubscribe function
157
- */
158
- subscribe(ctx: KernelContext, channelName: string, handler: (event: ChannelEvent) => void): () => void;
159
- /**
160
- * Wait for a response on a channel (for bidirectional communication).
161
- */
162
- waitForResponse(ctx: KernelContext, channelName: string, requestId: string, timeoutMs?: number): Promise<ChannelEvent>;
163
- }
164
- //# sourceMappingURL=channel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/core/channel.ts"],"names":[],"mappings":"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"}
@@ -1,199 +0,0 @@
1
- import { EventEmitter } from "node:events";
2
- import { Context } from "./context";
3
- import { Telemetry } from "./telemetry";
4
- /**
5
- * Core Channel primitive.
6
- * Works standalone in any Node environment.
7
- * Uses EventEmitter internally for pub/sub.
8
- */
9
- export class Channel {
10
- name;
11
- emitter = new EventEmitter();
12
- pendingRequests = new Map();
13
- // Store recent responses to handle race conditions (response before wait)
14
- recentResponses = new Map();
15
- constructor(name) {
16
- this.name = name;
17
- }
18
- /**
19
- * Publish an event to the channel.
20
- */
21
- publish(event) {
22
- // Ensure channel name matches
23
- const normalizedEvent = {
24
- ...event,
25
- channel: this.name,
26
- metadata: {
27
- timestamp: Date.now(),
28
- ...event.metadata,
29
- },
30
- };
31
- // Track channel events as metrics
32
- const ctx = Context.tryGet();
33
- if (ctx?.procedureGraph && ctx.procedurePid) {
34
- const node = ctx.procedureGraph.get(ctx.procedurePid);
35
- if (node) {
36
- // Track as metric in node
37
- node.addMetric(`channel.${this.name}.events`, 1);
38
- // Also track in context metrics (for consistency)
39
- if (ctx.metrics) {
40
- ctx.metrics[`channel.${this.name}.events`] =
41
- (ctx.metrics[`channel.${this.name}.events`] || 0) + 1;
42
- }
43
- // Send to telemetry immediately
44
- Telemetry.getCounter(`channel.${this.name}.events`).add(1, {
45
- channel: this.name,
46
- event_type: normalizedEvent.type,
47
- procedure: node.name || "anonymous",
48
- procedure_pid: node.pid,
49
- });
50
- }
51
- }
52
- // Emit to all subscribers
53
- this.emitter.emit("event", normalizedEvent);
54
- // If this is a response, resolve any pending requests or store for later
55
- if (normalizedEvent.type === "response" && normalizedEvent.id) {
56
- const responseId = normalizedEvent.id; // Type guard
57
- const pending = this.pendingRequests.get(responseId);
58
- if (pending) {
59
- clearTimeout(pending.timeout);
60
- this.pendingRequests.delete(responseId);
61
- pending.resolve(normalizedEvent);
62
- }
63
- else {
64
- // Store response in case waitForResponse is called later (race condition)
65
- this.recentResponses.set(responseId, normalizedEvent);
66
- // Clean up after 5 seconds
67
- setTimeout(() => {
68
- this.recentResponses.delete(responseId);
69
- }, 5000);
70
- }
71
- }
72
- }
73
- /**
74
- * Subscribe to events on this channel.
75
- * @returns Unsubscribe function
76
- */
77
- subscribe(handler) {
78
- this.emitter.on("event", handler);
79
- return () => {
80
- this.emitter.off("event", handler);
81
- };
82
- }
83
- /**
84
- * Wait for a response to a specific request.
85
- * Used by tools/components for bidirectional communication.
86
- *
87
- * @param requestId The request ID to wait for
88
- * @param timeoutMs Timeout in milliseconds (default: 30000)
89
- * @returns Promise that resolves when response is received
90
- */
91
- waitForResponse(requestId, timeoutMs = 30000) {
92
- return new Promise((resolve, reject) => {
93
- // Check if response was already received (race condition: response before wait)
94
- const cachedResponse = this.recentResponses.get(requestId);
95
- if (cachedResponse) {
96
- this.recentResponses.delete(requestId);
97
- resolve(cachedResponse);
98
- return;
99
- }
100
- const timeout = setTimeout(() => {
101
- this.pendingRequests.delete(requestId);
102
- reject(new Error(`Channel "${this.name}": Request "${requestId}" timed out after ${timeoutMs}ms`));
103
- }, timeoutMs);
104
- this.pendingRequests.set(requestId, {
105
- resolve,
106
- reject,
107
- timeout,
108
- });
109
- // Subscribe to catch responses that arrive after we set up the pending request
110
- const unsubscribe = this.subscribe((event) => {
111
- if (event.type === "response" && event.id === requestId) {
112
- unsubscribe();
113
- clearTimeout(timeout);
114
- this.pendingRequests.delete(requestId);
115
- resolve(event);
116
- }
117
- });
118
- });
119
- }
120
- /**
121
- * Get the number of active subscribers.
122
- */
123
- getSubscriberCount() {
124
- return this.emitter.listenerCount("event");
125
- }
126
- /**
127
- * Cleanup: remove all subscribers and pending requests.
128
- */
129
- destroy() {
130
- // Reject all pending requests
131
- for (const [requestId, pending] of this.pendingRequests.entries()) {
132
- clearTimeout(pending.timeout);
133
- pending.reject(new Error(`Channel "${this.name}" destroyed while waiting for request "${requestId}"`));
134
- }
135
- this.pendingRequests.clear();
136
- // Clear cached responses
137
- this.recentResponses.clear();
138
- // Remove all listeners
139
- this.emitter.removeAllListeners();
140
- }
141
- }
142
- /**
143
- * Channel session manages a collection of channels.
144
- * Sessions persist across multiple engine executions.
145
- */
146
- export class ChannelSession {
147
- id;
148
- channels = new Map();
149
- createdAt;
150
- lastActivity;
151
- constructor(id) {
152
- this.id = id;
153
- this.createdAt = Date.now();
154
- this.lastActivity = Date.now();
155
- }
156
- /**
157
- * Get or create a channel within this session.
158
- */
159
- getChannel(name) {
160
- if (!this.channels.has(name)) {
161
- this.channels.set(name, new Channel(name));
162
- }
163
- this.lastActivity = Date.now();
164
- return this.channels.get(name);
165
- }
166
- /**
167
- * Remove a channel from the session.
168
- */
169
- removeChannel(name) {
170
- const channel = this.channels.get(name);
171
- if (channel) {
172
- channel.destroy();
173
- this.channels.delete(name);
174
- }
175
- }
176
- /**
177
- * Default session ID generator.
178
- * Uses user context + conversation ID or trace ID.
179
- * Users can override this via ChannelService config.
180
- */
181
- static generateId(ctx) {
182
- const userId = ctx.user?.id || "anonymous";
183
- // Use conversationId if present and not 'na', otherwise fall back to traceId
184
- const conversationId = ctx.metadata["conversationId"] && ctx.metadata["conversationId"] !== "na"
185
- ? ctx.metadata["conversationId"]
186
- : ctx.traceId;
187
- return `${userId}-${conversationId}`;
188
- }
189
- /**
190
- * Cleanup all channels in the session.
191
- */
192
- destroy() {
193
- for (const channel of this.channels.values()) {
194
- channel.destroy();
195
- }
196
- this.channels.clear();
197
- }
198
- }
199
- //# sourceMappingURL=channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/core/channel.ts"],"names":[],"mappings":"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"}