@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.
- package/dist/.tsbuildinfo.build +1 -1
- package/package.json +8 -3
- package/dist/.tsbuildinfo +0 -1
- package/dist/agent.d.ts +0 -32
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -26
- package/dist/agent.js.map +0 -1
- package/dist/aidk-instance.d.ts +0 -294
- package/dist/aidk-instance.d.ts.map +0 -1
- package/dist/aidk-instance.js +0 -340
- package/dist/aidk-instance.js.map +0 -1
- package/dist/compiler/content-block-registry.d.ts +0 -11
- package/dist/compiler/content-block-registry.d.ts.map +0 -1
- package/dist/compiler/content-block-registry.js +0 -312
- package/dist/compiler/content-block-registry.js.map +0 -1
- package/dist/compiler/extractors.d.ts +0 -68
- package/dist/compiler/extractors.d.ts.map +0 -1
- package/dist/compiler/extractors.js +0 -547
- package/dist/compiler/extractors.js.map +0 -1
- package/dist/compiler/fiber.d.ts +0 -61
- package/dist/compiler/fiber.d.ts.map +0 -1
- package/dist/compiler/fiber.js +0 -244
- package/dist/compiler/fiber.js.map +0 -1
- package/dist/component/tentickle-component.d.ts +0 -185
- package/dist/component/tentickle-component.d.ts.map +0 -1
- package/dist/component/tentickle-component.js +0 -182
- package/dist/component/tentickle-component.js.map +0 -1
- package/dist/core/channel-helpers.d.ts +0 -31
- package/dist/core/channel-helpers.d.ts.map +0 -1
- package/dist/core/channel-helpers.js +0 -62
- package/dist/core/channel-helpers.js.map +0 -1
- package/dist/core/channel.d.ts +0 -164
- package/dist/core/channel.d.ts.map +0 -1
- package/dist/core/channel.js +0 -199
- package/dist/core/channel.js.map +0 -1
- package/dist/core/context.d.ts +0 -412
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -290
- package/dist/core/context.js.map +0 -1
- package/dist/core/event-buffer.d.ts +0 -212
- package/dist/core/event-buffer.d.ts.map +0 -1
- package/dist/core/event-buffer.js +0 -346
- package/dist/core/event-buffer.js.map +0 -1
- package/dist/core/execution-helpers.d.ts +0 -179
- package/dist/core/execution-helpers.d.ts.map +0 -1
- package/dist/core/execution-helpers.js +0 -212
- package/dist/core/execution-helpers.js.map +0 -1
- package/dist/core/execution-tracker.d.ts +0 -53
- package/dist/core/execution-tracker.d.ts.map +0 -1
- package/dist/core/execution-tracker.js +0 -309
- package/dist/core/execution-tracker.js.map +0 -1
- package/dist/core/index.d.ts +0 -58
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -58
- package/dist/core/index.js.map +0 -1
- package/dist/core/logger.d.ts +0 -341
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js +0 -346
- package/dist/core/logger.js.map +0 -1
- package/dist/core/metrics-helpers.d.ts +0 -40
- package/dist/core/metrics-helpers.d.ts.map +0 -1
- package/dist/core/metrics-helpers.js +0 -72
- package/dist/core/metrics-helpers.js.map +0 -1
- package/dist/core/otel-provider.d.ts +0 -54
- package/dist/core/otel-provider.d.ts.map +0 -1
- package/dist/core/otel-provider.js +0 -107
- package/dist/core/otel-provider.js.map +0 -1
- package/dist/core/procedure-graph.d.ts +0 -136
- package/dist/core/procedure-graph.d.ts.map +0 -1
- package/dist/core/procedure-graph.js +0 -272
- package/dist/core/procedure-graph.js.map +0 -1
- package/dist/core/procedure.d.ts +0 -755
- package/dist/core/procedure.d.ts.map +0 -1
- package/dist/core/procedure.js +0 -899
- package/dist/core/procedure.js.map +0 -1
- package/dist/core/stream.d.ts +0 -106
- package/dist/core/stream.d.ts.map +0 -1
- package/dist/core/stream.js +0 -186
- package/dist/core/stream.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -182
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -124
- package/dist/core/telemetry.js.map +0 -1
- package/dist/engine/execution-graph.d.ts +0 -104
- package/dist/engine/execution-graph.d.ts.map +0 -1
- package/dist/engine/execution-graph.js +0 -257
- package/dist/engine/execution-graph.js.map +0 -1
- package/dist/hooks/policy-context.d.ts.map +0 -1
- package/dist/jsx/components/agent.d.ts +0 -64
- package/dist/jsx/components/agent.d.ts.map +0 -1
- package/dist/jsx/components/agent.js +0 -80
- package/dist/jsx/components/agent.js.map +0 -1
- package/dist/model/simple-adapter.d.ts +0 -176
- package/dist/model/simple-adapter.d.ts.map +0 -1
- package/dist/model/simple-adapter.js +0 -264
- package/dist/model/simple-adapter.js.map +0 -1
- package/dist/state/boundary.d.ts +0 -347
- package/dist/state/boundary.d.ts.map +0 -1
- package/dist/state/boundary.js +0 -341
- package/dist/state/boundary.js.map +0 -1
- package/dist/state/context.d.ts +0 -138
- package/dist/state/context.d.ts.map +0 -1
- package/dist/state/context.js +0 -139
- package/dist/state/context.js.map +0 -1
- package/dist/state/hooks.d.ts +0 -798
- package/dist/state/hooks.d.ts.map +0 -1
- package/dist/state/hooks.js +0 -1437
- package/dist/state/hooks.js.map +0 -1
- package/dist/state/index.d.ts +0 -72
- package/dist/state/index.d.ts.map +0 -1
- package/dist/state/index.js +0 -73
- package/dist/state/index.js.map +0 -1
- package/dist/state/signal.d.ts +0 -223
- package/dist/state/signal.d.ts.map +0 -1
- package/dist/state/signal.js +0 -699
- package/dist/state/signal.js.map +0 -1
- package/dist/state/use-state.d.ts +0 -210
- package/dist/state/use-state.d.ts.map +0 -1
- package/dist/state/use-state.js +0 -327
- package/dist/state/use-state.js.map +0 -1
- package/dist/tentickle-instance.d.ts +0 -285
- package/dist/tentickle-instance.d.ts.map +0 -1
- package/dist/tentickle-instance.js +0 -700
- package/dist/tentickle-instance.js.map +0 -1
- package/dist/testing/test-model.d.ts +0 -132
- package/dist/testing/test-model.d.ts.map +0 -1
- package/dist/testing/test-model.js +0 -260
- package/dist/testing/test-model.js.map +0 -1
- package/dist/v2/reconciler/host-config.d.ts +0 -31
- package/dist/v2/reconciler/host-config.d.ts.map +0 -1
- package/dist/v2/reconciler/host-config.js +0 -197
- package/dist/v2/reconciler/host-config.js.map +0 -1
- package/dist/v2/reconciler/index.d.ts +0 -7
- package/dist/v2/reconciler/index.d.ts.map +0 -1
- package/dist/v2/reconciler/index.js +0 -7
- package/dist/v2/reconciler/index.js.map +0 -1
- package/dist/v2/reconciler/reconciler.d.ts +0 -39
- package/dist/v2/reconciler/reconciler.d.ts.map +0 -1
- package/dist/v2/reconciler/reconciler.js +0 -54
- package/dist/v2/reconciler/reconciler.js.map +0 -1
- package/dist/v2/reconciler/types.d.ts +0 -64
- package/dist/v2/reconciler/types.d.ts.map +0 -1
- package/dist/v2/reconciler/types.js +0 -20
- package/dist/v2/reconciler/types.js.map +0 -1
- package/dist/v2/renderers/index.d.ts +0 -7
- package/dist/v2/renderers/index.d.ts.map +0 -1
- package/dist/v2/renderers/index.js +0 -7
- package/dist/v2/renderers/index.js.map +0 -1
- package/dist/v2/renderers/markdown.d.ts +0 -16
- package/dist/v2/renderers/markdown.d.ts.map +0 -1
- package/dist/v2/renderers/markdown.js +0 -65
- package/dist/v2/renderers/markdown.js.map +0 -1
- package/dist/v2/renderers/types.d.ts +0 -26
- package/dist/v2/renderers/types.d.ts.map +0 -1
- package/dist/v2/renderers/types.js +0 -6
- package/dist/v2/renderers/types.js.map +0 -1
- package/dist/v2/renderers/xml.d.ts +0 -17
- package/dist/v2/renderers/xml.d.ts.map +0 -1
- package/dist/v2/renderers/xml.js +0 -73
- 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"}
|
package/dist/core/channel.d.ts
DELETED
|
@@ -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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"}
|
package/dist/core/channel.js
DELETED
|
@@ -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
|
package/dist/core/channel.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/core/channel.ts"],"names":[],"mappings":"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"}
|