experimental-ash 0.2.0-alpha.11 → 0.2.0-alpha.12
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/src/channel/channel-registry.d.ts +34 -0
- package/dist/src/channel/channel-registry.d.ts.map +1 -0
- package/dist/src/channel/channel-registry.js +63 -0
- package/dist/src/channel/channel-registry.js.map +1 -0
- package/dist/src/channel/http-channel.d.ts +19 -0
- package/dist/src/channel/http-channel.d.ts.map +1 -0
- package/dist/src/channel/http-channel.js +26 -0
- package/dist/src/channel/http-channel.js.map +1 -0
- package/dist/src/channel/schedule-channel.d.ts +18 -0
- package/dist/src/channel/schedule-channel.d.ts.map +1 -0
- package/dist/src/channel/schedule-channel.js +25 -0
- package/dist/src/channel/schedule-channel.js.map +1 -0
- package/dist/src/channel/schedule.d.ts +4 -6
- package/dist/src/channel/schedule.d.ts.map +1 -1
- package/dist/src/channel/schedule.js +6 -9
- package/dist/src/channel/schedule.js.map +1 -1
- package/dist/src/channel/{slack-emitter.d.ts → slack-channel.d.ts} +36 -15
- package/dist/src/channel/slack-channel.d.ts.map +1 -0
- package/dist/src/channel/{slack-emitter.js → slack-channel.js} +10 -10
- package/dist/src/channel/slack-channel.js.map +1 -0
- package/dist/src/channel/subagent-channel.d.ts +43 -0
- package/dist/src/channel/subagent-channel.d.ts.map +1 -0
- package/dist/src/channel/{subagent-emitter.js → subagent-channel.js} +14 -14
- package/dist/src/channel/subagent-channel.js.map +1 -0
- package/dist/src/channel/types.d.ts +101 -86
- package/dist/src/channel/types.d.ts.map +1 -1
- package/dist/src/compiler/manifest.d.ts +2 -2
- package/dist/src/compiler/normalize-channel.d.ts +1 -1
- package/dist/src/compiler/normalize-channel.js +3 -3
- package/dist/src/compiler/normalize-channel.js.map +1 -1
- package/dist/src/context/keys.d.ts +6 -6
- package/dist/src/context/keys.d.ts.map +1 -1
- package/dist/src/context/keys.js +12 -12
- package/dist/src/context/keys.js.map +1 -1
- package/dist/src/discover/grammar.d.ts +1 -1
- package/dist/src/discover/grammar.js +1 -1
- package/dist/src/execution/continuous-entry.d.ts +12 -2
- package/dist/src/execution/continuous-entry.d.ts.map +1 -1
- package/dist/src/execution/continuous-entry.js +37 -12
- package/dist/src/execution/continuous-entry.js.map +1 -1
- package/dist/src/execution/continuous-runtime.d.ts +1 -1
- package/dist/src/execution/continuous-runtime.d.ts.map +1 -1
- package/dist/src/execution/continuous-runtime.js +9 -8
- package/dist/src/execution/continuous-runtime.js.map +1 -1
- package/dist/src/execution/runtime-context.d.ts +3 -0
- package/dist/src/execution/runtime-context.d.ts.map +1 -1
- package/dist/src/execution/runtime-context.js +6 -3
- package/dist/src/execution/runtime-context.js.map +1 -1
- package/dist/src/execution/subagent-tool.d.ts +1 -1
- package/dist/src/execution/subagent-tool.js +3 -3
- package/dist/src/execution/subagent-tool.js.map +1 -1
- package/dist/src/execution/types.d.ts +1 -1
- package/dist/src/execution/types.d.ts.map +1 -1
- package/dist/src/execution/workflow-entry.d.ts.map +1 -1
- package/dist/src/execution/workflow-entry.js +5 -2
- package/dist/src/execution/workflow-entry.js.map +1 -1
- package/dist/src/execution/workflow-runtime.d.ts.map +1 -1
- package/dist/src/execution/workflow-runtime.js +5 -1
- package/dist/src/execution/workflow-runtime.js.map +1 -1
- package/dist/src/execution/workflow-steps.d.ts +9 -8
- package/dist/src/execution/workflow-steps.d.ts.map +1 -1
- package/dist/src/execution/workflow-steps.js +21 -13
- package/dist/src/execution/workflow-steps.js.map +1 -1
- package/dist/src/harness/emission.d.ts +10 -41
- package/dist/src/harness/emission.d.ts.map +1 -1
- package/dist/src/harness/emission.js +57 -238
- package/dist/src/harness/emission.js.map +1 -1
- package/dist/src/harness/step-hooks.d.ts +77 -0
- package/dist/src/harness/step-hooks.d.ts.map +1 -0
- package/dist/src/harness/step-hooks.js +192 -0
- package/dist/src/harness/step-hooks.js.map +1 -0
- package/dist/src/harness/tool-loop.d.ts +4 -2
- package/dist/src/harness/tool-loop.d.ts.map +1 -1
- package/dist/src/harness/tool-loop.js +107 -171
- package/dist/src/harness/tool-loop.js.map +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/channel.d.ts +3 -3
- package/dist/src/internal/authored-definition/channel.d.ts.map +1 -1
- package/dist/src/internal/authored-definition/channel.js +1 -1
- package/dist/src/internal/authored-definition/channel.js.map +1 -1
- package/dist/src/internal/nitro/host/configure-message-routes.js +1 -1
- package/dist/src/internal/nitro/host/configure-message-routes.js.map +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.d.ts +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +4 -4
- package/dist/src/internal/nitro/routes/channel-dispatch.js.map +1 -1
- package/dist/src/internal/nitro/routes/runtime-stack.d.ts +3 -3
- package/dist/src/internal/nitro/routes/runtime-stack.d.ts.map +1 -1
- package/dist/src/internal/nitro/routes/runtime-stack.js +3 -3
- package/dist/src/internal/nitro/routes/runtime-stack.js.map +1 -1
- package/dist/src/internal/nitro/routes/schedule-task.js +3 -3
- package/dist/src/internal/nitro/routes/schedule-task.js.map +1 -1
- package/dist/src/public/channels/auth.d.ts +32 -81
- package/dist/src/public/channels/auth.d.ts.map +1 -1
- package/dist/src/public/channels/auth.js +23 -86
- package/dist/src/public/channels/auth.js.map +1 -1
- package/dist/src/public/channels/http.d.ts +16 -16
- package/dist/src/public/channels/http.d.ts.map +1 -1
- package/dist/src/public/channels/http.js +38 -43
- package/dist/src/public/channels/http.js.map +1 -1
- package/dist/src/public/channels/index.d.ts +9 -9
- package/dist/src/public/channels/index.d.ts.map +1 -1
- package/dist/src/public/channels/index.js +8 -8
- package/dist/src/public/channels/index.js.map +1 -1
- package/dist/src/public/channels/slack/index.d.ts +25 -25
- package/dist/src/public/channels/slack/index.d.ts.map +1 -1
- package/dist/src/public/channels/slack/index.js +24 -27
- package/dist/src/public/channels/slack/index.js.map +1 -1
- package/dist/src/public/channels/slack/lowlevel.d.ts +5 -5
- package/dist/src/public/channels/slack/lowlevel.d.ts.map +1 -1
- package/dist/src/public/channels/slack/lowlevel.js +4 -4
- package/dist/src/public/channels/slack/lowlevel.js.map +1 -1
- package/dist/src/public/definitions/channel.d.ts +52 -52
- package/dist/src/public/definitions/channel.d.ts.map +1 -1
- package/dist/src/public/definitions/channel.js +24 -24
- package/dist/src/public/definitions/channel.js.map +1 -1
- package/dist/src/public/index.d.ts +6 -6
- package/dist/src/public/index.d.ts.map +1 -1
- package/dist/src/public/index.js +5 -5
- package/dist/src/public/index.js.map +1 -1
- package/dist/src/public/sandboxes/internal.d.ts +1 -1
- package/dist/src/public/sandboxes/internal.js +1 -1
- package/dist/src/public/tools/internal.d.ts +1 -1
- package/dist/src/public/tools/internal.js +1 -1
- package/dist/src/runtime/framework-channels/index.d.ts +3 -3
- package/dist/src/runtime/framework-channels/index.js +6 -6
- package/dist/src/runtime/framework-channels/index.js.map +1 -1
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent-graph.js.map +1 -1
- package/dist/src/runtime/types.d.ts +3 -3
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/docs/internals/channels.md +10 -7
- package/docs/internals/context.md +57 -3
- package/docs/internals/message-runtime.md +3 -3
- package/docs/public/auth-and-route-protection.md +11 -7
- package/docs/public/channels/README.md +12 -10
- package/docs/public/session-context.md +79 -1
- package/docs/public/typescript-api.md +6 -6
- package/package.json +11 -11
- package/dist/src/channel/emitter-registry.d.ts +0 -34
- package/dist/src/channel/emitter-registry.d.ts.map +0 -1
- package/dist/src/channel/emitter-registry.js +0 -63
- package/dist/src/channel/emitter-registry.js.map +0 -1
- package/dist/src/channel/http-emitter.d.ts +0 -18
- package/dist/src/channel/http-emitter.d.ts.map +0 -1
- package/dist/src/channel/http-emitter.js +0 -26
- package/dist/src/channel/http-emitter.js.map +0 -1
- package/dist/src/channel/schedule-emitter.d.ts +0 -17
- package/dist/src/channel/schedule-emitter.d.ts.map +0 -1
- package/dist/src/channel/schedule-emitter.js +0 -25
- package/dist/src/channel/schedule-emitter.js.map +0 -1
- package/dist/src/channel/slack-emitter.d.ts.map +0 -1
- package/dist/src/channel/slack-emitter.js.map +0 -1
- package/dist/src/channel/subagent-emitter.d.ts +0 -42
- package/dist/src/channel/subagent-emitter.d.ts.map +0 -1
- package/dist/src/channel/subagent-emitter.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ChannelClass } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Registers a {@link ChannelClass} so the framework can rebuild
|
|
4
|
+
* instances after a workflow step boundary. Call this once at module load
|
|
5
|
+
* time, alongside the class definition.
|
|
6
|
+
*
|
|
7
|
+
* Framework-shipped channels (Slack, subagent, schedule, http) call this at
|
|
8
|
+
* the bottom of their module file. User-authored channels do the same in
|
|
9
|
+
* their channel module so importing the channel file is enough to make the
|
|
10
|
+
* channel discoverable to the runtime codec.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* class MyChannel implements Channel {
|
|
15
|
+
* static readonly kind = "my-channel";
|
|
16
|
+
* readonly kind = "my-channel";
|
|
17
|
+
* // ...
|
|
18
|
+
* }
|
|
19
|
+
* registerChannel(MyChannel);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function registerChannel<E extends ChannelClass>(cls: E): void;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the registered {@link ChannelClass} for one `kind`, or
|
|
25
|
+
* `undefined` if no class has been registered. The codec throws a more
|
|
26
|
+
* descriptive error when `undefined` is returned at deserialization time.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getChannelClass(kind: string): ChannelClass | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the set of currently-registered channel kinds. Used by tests and
|
|
31
|
+
* by diagnostic tooling that wants to enumerate available channels.
|
|
32
|
+
*/
|
|
33
|
+
export declare function listRegisteredChannelKinds(): readonly string[];
|
|
34
|
+
//# sourceMappingURL=channel-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-registry.d.ts","sourceRoot":"","sources":["../../../src/channel/channel-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiB/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAkBpE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,SAAS,MAAM,EAAE,CAE9D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-global registry mapping a {@link ChannelClass.kind} to its
|
|
3
|
+
* class. Populated by side-effecting `registerChannel` calls at
|
|
4
|
+
* module load time.
|
|
5
|
+
*
|
|
6
|
+
* Used by the {@link ChannelKey} codec in `context/keys.ts` to
|
|
7
|
+
* deserialize channel state across workflow step boundaries — the codec
|
|
8
|
+
* has no compile-time knowledge of which channels exist, so it asks the
|
|
9
|
+
* registry by `kind` instead.
|
|
10
|
+
*
|
|
11
|
+
* The registry is keyed by string `kind`. Two distinct classes registering
|
|
12
|
+
* the same `kind` is a programming error and throws.
|
|
13
|
+
*/
|
|
14
|
+
const REGISTRY = new Map();
|
|
15
|
+
/**
|
|
16
|
+
* Registers a {@link ChannelClass} so the framework can rebuild
|
|
17
|
+
* instances after a workflow step boundary. Call this once at module load
|
|
18
|
+
* time, alongside the class definition.
|
|
19
|
+
*
|
|
20
|
+
* Framework-shipped channels (Slack, subagent, schedule, http) call this at
|
|
21
|
+
* the bottom of their module file. User-authored channels do the same in
|
|
22
|
+
* their channel module so importing the channel file is enough to make the
|
|
23
|
+
* channel discoverable to the runtime codec.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* class MyChannel implements Channel {
|
|
28
|
+
* static readonly kind = "my-channel";
|
|
29
|
+
* readonly kind = "my-channel";
|
|
30
|
+
* // ...
|
|
31
|
+
* }
|
|
32
|
+
* registerChannel(MyChannel);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function registerChannel(cls) {
|
|
36
|
+
if (typeof cls.kind !== "string" || cls.kind.length === 0) {
|
|
37
|
+
throw new TypeError("registerChannel: class must declare a non-empty static `kind` field.");
|
|
38
|
+
}
|
|
39
|
+
if (typeof cls.deserialize !== "function") {
|
|
40
|
+
throw new TypeError(`registerChannel: class for kind "${cls.kind}" must declare a static \`deserialize\` method.`);
|
|
41
|
+
}
|
|
42
|
+
const existing = REGISTRY.get(cls.kind);
|
|
43
|
+
if (existing !== undefined && existing !== cls) {
|
|
44
|
+
throw new Error(`registerChannel: duplicate registration for kind "${cls.kind}". A different class is already registered.`);
|
|
45
|
+
}
|
|
46
|
+
REGISTRY.set(cls.kind, cls);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the registered {@link ChannelClass} for one `kind`, or
|
|
50
|
+
* `undefined` if no class has been registered. The codec throws a more
|
|
51
|
+
* descriptive error when `undefined` is returned at deserialization time.
|
|
52
|
+
*/
|
|
53
|
+
export function getChannelClass(kind) {
|
|
54
|
+
return REGISTRY.get(kind);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns the set of currently-registered channel kinds. Used by tests and
|
|
58
|
+
* by diagnostic tooling that wants to enumerate available channels.
|
|
59
|
+
*/
|
|
60
|
+
export function listRegisteredChannelKinds() {
|
|
61
|
+
return [...REGISTRY.keys()];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=channel-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-registry.js","sourceRoot":"","sources":["../../../src/channel/channel-registry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAAyB,GAAM;IAC5D,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CACjB,oCAAoC,GAAG,CAAC,IAAI,iDAAiD,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,qDAAqD,GAAG,CAAC,IAAI,6CAA6C,CAC3G,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StepInput } from "../harness/types.js";
|
|
2
|
+
import type { HandleMessageStreamEvent } from "../protocol/message.js";
|
|
3
|
+
import type { Channel, ContextAccessor, DeliverPayload } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Stateless channel for HTTP routes.
|
|
6
|
+
*
|
|
7
|
+
* Events pass straight through to the stream (no side effects). Deliver
|
|
8
|
+
* payloads pass through untransformed — HTTP clients send structured
|
|
9
|
+
* {@link InputResponse} objects directly.
|
|
10
|
+
*/
|
|
11
|
+
export declare class HttpChannel implements Channel {
|
|
12
|
+
static readonly kind = "http";
|
|
13
|
+
readonly kind = "http";
|
|
14
|
+
onEvent(event: HandleMessageStreamEvent): Promise<HandleMessageStreamEvent>;
|
|
15
|
+
onDeliver(_ctx: ContextAccessor, payload: DeliverPayload): Promise<StepInput>;
|
|
16
|
+
serialize(): Record<string, unknown>;
|
|
17
|
+
static deserialize(_state: Record<string, unknown>): HttpChannel;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=http-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/http-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IAEjB,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAI3E,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAInF,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;CAGjE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { registerChannel } from "./channel-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Stateless channel for HTTP routes.
|
|
4
|
+
*
|
|
5
|
+
* Events pass straight through to the stream (no side effects). Deliver
|
|
6
|
+
* payloads pass through untransformed — HTTP clients send structured
|
|
7
|
+
* {@link InputResponse} objects directly.
|
|
8
|
+
*/
|
|
9
|
+
export class HttpChannel {
|
|
10
|
+
static kind = "http";
|
|
11
|
+
kind = "http";
|
|
12
|
+
async onEvent(event) {
|
|
13
|
+
return event;
|
|
14
|
+
}
|
|
15
|
+
async onDeliver(_ctx, payload) {
|
|
16
|
+
return payload;
|
|
17
|
+
}
|
|
18
|
+
serialize() {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
static deserialize(_state) {
|
|
22
|
+
return new HttpChannel();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
registerChannel(HttpChannel);
|
|
26
|
+
//# sourceMappingURL=http-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-channel.js","sourceRoot":"","sources":["../../../src/channel/http-channel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACtB,MAAM,CAAU,IAAI,GAAG,MAAM,CAAC;IACrB,IAAI,GAAG,MAAM,CAAC;IAEvB,KAAK,CAAC,OAAO,CAAC,KAA+B;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAqB,EAAE,OAAuB;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAA+B;QAChD,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;;AAGH,eAAe,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StepInput } from "../harness/types.js";
|
|
2
|
+
import type { HandleMessageStreamEvent } from "../protocol/message.js";
|
|
3
|
+
import type { Channel, ContextAccessor, DeliverPayload } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Stateless channel for scheduled runs.
|
|
6
|
+
*
|
|
7
|
+
* Events pass straight through to the stream (no side effects). Deliver
|
|
8
|
+
* payloads pass through untransformed.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ScheduleChannel implements Channel {
|
|
11
|
+
static readonly kind = "schedule";
|
|
12
|
+
readonly kind = "schedule";
|
|
13
|
+
onEvent(event: HandleMessageStreamEvent): Promise<HandleMessageStreamEvent>;
|
|
14
|
+
onDeliver(_ctx: ContextAccessor, payload: DeliverPayload): Promise<StepInput>;
|
|
15
|
+
serialize(): Record<string, unknown>;
|
|
16
|
+
static deserialize(_state: Record<string, unknown>): ScheduleChannel;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=schedule-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/schedule-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;IAClC,QAAQ,CAAC,IAAI,cAAc;IAErB,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAI3E,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAInF,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;CAGrE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { registerChannel } from "./channel-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* Stateless channel for scheduled runs.
|
|
4
|
+
*
|
|
5
|
+
* Events pass straight through to the stream (no side effects). Deliver
|
|
6
|
+
* payloads pass through untransformed.
|
|
7
|
+
*/
|
|
8
|
+
export class ScheduleChannel {
|
|
9
|
+
static kind = "schedule";
|
|
10
|
+
kind = "schedule";
|
|
11
|
+
async onEvent(event) {
|
|
12
|
+
return event;
|
|
13
|
+
}
|
|
14
|
+
async onDeliver(_ctx, payload) {
|
|
15
|
+
return payload;
|
|
16
|
+
}
|
|
17
|
+
serialize() {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
static deserialize(_state) {
|
|
21
|
+
return new ScheduleChannel();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
registerChannel(ScheduleChannel);
|
|
25
|
+
//# sourceMappingURL=schedule-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-channel.js","sourceRoot":"","sources":["../../../src/channel/schedule-channel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAU,IAAI,GAAG,UAAU,CAAC;IACzB,IAAI,GAAG,UAAU,CAAC;IAE3B,KAAK,CAAC,OAAO,CAAC,KAA+B;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAqB,EAAE,OAAuB;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAA+B;QAChD,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;;AAGH,eAAe,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { ScheduleChannelEmitter } from "./schedule-emitter.js";
|
|
2
1
|
import type { RunHandle, Runtime } from "./types.js";
|
|
3
|
-
export {
|
|
2
|
+
export { ScheduleChannel } from "./schedule-channel.js";
|
|
4
3
|
/**
|
|
5
4
|
* Input for triggering a one-shot schedule run.
|
|
6
5
|
*/
|
|
@@ -9,23 +8,22 @@ export interface ScheduleTriggerInput {
|
|
|
9
8
|
readonly scheduleId: string;
|
|
10
9
|
}
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
11
|
+
* Dispatcher for one-shot scheduled task execution.
|
|
13
12
|
*
|
|
14
13
|
* Each trigger generates a unique continuation token so every cron
|
|
15
14
|
* invocation starts a fresh session. Schedule runs always use task
|
|
16
15
|
* mode, so the runtime requires the harness to finish within the
|
|
17
16
|
* current invocation instead of parking for follow-up messages.
|
|
18
17
|
*
|
|
19
|
-
* The
|
|
18
|
+
* The dispatcher never touches the compiled bundle, the {@link AshContext},
|
|
20
19
|
* or any execution-layer machinery — it speaks to the runtime through
|
|
21
20
|
* `run` and `deliver` only.
|
|
22
21
|
*/
|
|
23
|
-
export declare class
|
|
22
|
+
export declare class ScheduleDispatcher {
|
|
24
23
|
private readonly runtime;
|
|
25
24
|
constructor(config: {
|
|
26
25
|
readonly runtime: Runtime;
|
|
27
26
|
});
|
|
28
|
-
createEmitter(): ScheduleChannelEmitter;
|
|
29
27
|
trigger(input: ScheduleTriggerInput): Promise<RunHandle>;
|
|
30
28
|
}
|
|
31
29
|
//# sourceMappingURL=schedule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../src/channel/schedule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../src/channel/schedule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAsB,MAAM,YAAY,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAI3C,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;CAW/D"}
|
|
@@ -1,30 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { ScheduleChannel } from "./schedule-channel.js";
|
|
2
|
+
export { ScheduleChannel } from "./schedule-channel.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Dispatcher for one-shot scheduled task execution.
|
|
5
5
|
*
|
|
6
6
|
* Each trigger generates a unique continuation token so every cron
|
|
7
7
|
* invocation starts a fresh session. Schedule runs always use task
|
|
8
8
|
* mode, so the runtime requires the harness to finish within the
|
|
9
9
|
* current invocation instead of parking for follow-up messages.
|
|
10
10
|
*
|
|
11
|
-
* The
|
|
11
|
+
* The dispatcher never touches the compiled bundle, the {@link AshContext},
|
|
12
12
|
* or any execution-layer machinery — it speaks to the runtime through
|
|
13
13
|
* `run` and `deliver` only.
|
|
14
14
|
*/
|
|
15
|
-
export class
|
|
15
|
+
export class ScheduleDispatcher {
|
|
16
16
|
runtime;
|
|
17
17
|
constructor(config) {
|
|
18
18
|
this.runtime = config.runtime;
|
|
19
19
|
}
|
|
20
|
-
createEmitter() {
|
|
21
|
-
return new ScheduleChannelEmitter();
|
|
22
|
-
}
|
|
23
20
|
async trigger(input) {
|
|
24
21
|
const continuationToken = `schedule:${input.scheduleId}:${crypto.randomUUID()}`;
|
|
25
22
|
return await this.runtime.run({
|
|
26
23
|
auth: createScheduleAuthContext(input.scheduleId),
|
|
27
|
-
|
|
24
|
+
channel: new ScheduleChannel(),
|
|
28
25
|
continuationToken,
|
|
29
26
|
input: { message: input.markdown },
|
|
30
27
|
mode: "task",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../../src/channel/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../../src/channel/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAUxD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IACZ,OAAO,CAAU;IAElC,YAAY,MAAqC;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA2B;QACvC,MAAM,iBAAiB,GAAG,YAAY,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;QAChF,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAC5B,IAAI,EAAE,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC;YACjD,OAAO,EAAE,IAAI,eAAe,EAAE;YAC9B,iBAAiB;YACjB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;YAClC,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,yBAAyB,CAAC,UAAkB;IACnD,OAAO;QACL,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE;QAC3C,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE,iBAAiB;QACzB,WAAW,EAAE,gBAAgB,UAAU,EAAE;QACzC,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,UAAU;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type { SerializedThread } from "chat";
|
|
1
|
+
import type { Actions, Button, Card, CardText, Select, SelectOption, SerializedThread } from "chat";
|
|
2
|
+
import type { StepInput } from "../harness/types.js";
|
|
2
3
|
import type { HandleMessageStreamEvent } from "../protocol/message.js";
|
|
3
4
|
import type { InputRequest } from "../runtime/input/types.js";
|
|
4
|
-
import type {
|
|
5
|
+
import type { Channel, ContextAccessor, DeliverPayload } from "./types.js";
|
|
5
6
|
/**
|
|
6
|
-
* Minimal serializable state for the Slack
|
|
7
|
+
* Minimal serializable state for the Slack channel.
|
|
7
8
|
*/
|
|
8
|
-
export interface
|
|
9
|
+
export interface SlackChannelState {
|
|
9
10
|
readonly botToken?: string;
|
|
10
11
|
readonly serializedThread: SerializedThread;
|
|
11
12
|
/**
|
|
@@ -15,8 +16,27 @@ export interface SlackChannelEmitterState {
|
|
|
15
16
|
*/
|
|
16
17
|
readonly pendingRequests?: readonly InputRequest[];
|
|
17
18
|
}
|
|
19
|
+
interface RehydratedThread {
|
|
20
|
+
post(message: string | {
|
|
21
|
+
readonly markdown: string;
|
|
22
|
+
} | unknown): Promise<unknown>;
|
|
23
|
+
startTyping(status?: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Dynamically imported Chat SDK card element constructors.
|
|
27
|
+
* Loaded lazily alongside the adapter to avoid bundling `chat`
|
|
28
|
+
* in workflow VMs.
|
|
29
|
+
*/
|
|
30
|
+
interface CardKit {
|
|
31
|
+
Actions: typeof Actions;
|
|
32
|
+
Button: typeof Button;
|
|
33
|
+
Card: typeof Card;
|
|
34
|
+
CardText: typeof CardText;
|
|
35
|
+
Select: typeof Select;
|
|
36
|
+
SelectOption: typeof SelectOption;
|
|
37
|
+
}
|
|
18
38
|
/**
|
|
19
|
-
*
|
|
39
|
+
* Channel that rehydrates a Chat SDK `Thread` from serialized state and
|
|
20
40
|
* uses `thread.startTyping()` to show typing status with tool names while
|
|
21
41
|
* the agent is working, then posts the final reply via `thread.post()`.
|
|
22
42
|
*
|
|
@@ -24,26 +44,26 @@ export interface SlackChannelEmitterState {
|
|
|
24
44
|
* (Block Kit buttons and select menus) and stores the pending requests
|
|
25
45
|
* in serializable state so `onDeliver` can resolve text replies.
|
|
26
46
|
*/
|
|
27
|
-
export declare class
|
|
47
|
+
export declare class SlackChannel implements Channel {
|
|
28
48
|
static readonly kind = "slack";
|
|
29
49
|
readonly kind = "slack";
|
|
30
50
|
private _state;
|
|
31
51
|
private _cardKit;
|
|
32
52
|
private _pendingToolCallMessage;
|
|
33
53
|
private _thread;
|
|
34
|
-
constructor(state:
|
|
54
|
+
constructor(state: SlackChannelState);
|
|
35
55
|
get botToken(): string | undefined;
|
|
36
56
|
get serializedThread(): SerializedThread;
|
|
37
57
|
serialize(): Record<string, unknown>;
|
|
38
|
-
static deserialize(state: Record<string, unknown>):
|
|
39
|
-
onDeliver(payload: DeliverPayload):
|
|
40
|
-
onEvent(event: HandleMessageStreamEvent
|
|
58
|
+
static deserialize(state: Record<string, unknown>): SlackChannel;
|
|
59
|
+
onDeliver(_ctx: ContextAccessor, payload: DeliverPayload): Promise<StepInput>;
|
|
60
|
+
onEvent(event: HandleMessageStreamEvent): Promise<HandleMessageStreamEvent>;
|
|
41
61
|
private consumePendingToolCallMessage;
|
|
42
62
|
private consumePendingToolCallStatus;
|
|
43
63
|
private clearPendingToolCallMessage;
|
|
44
64
|
private setPendingToolCallMessage;
|
|
45
|
-
|
|
46
|
-
|
|
65
|
+
protected post(text: string): Promise<void>;
|
|
66
|
+
protected startTyping(status: string): Promise<void>;
|
|
47
67
|
/**
|
|
48
68
|
* Renders each pending input request as a rich Card element with
|
|
49
69
|
* interactive buttons or select menus, posted to the Slack thread.
|
|
@@ -52,7 +72,7 @@ export declare class SlackChannelEmitter implements ChannelEmitter {
|
|
|
52
72
|
/**
|
|
53
73
|
* Lazily imports the Chat SDK card element constructors.
|
|
54
74
|
*/
|
|
55
|
-
|
|
75
|
+
protected getCardKit(): Promise<CardKit>;
|
|
56
76
|
/**
|
|
57
77
|
* Lazily rehydrates the Chat SDK Thread from serialized state.
|
|
58
78
|
*
|
|
@@ -62,6 +82,7 @@ export declare class SlackChannelEmitter implements ChannelEmitter {
|
|
|
62
82
|
* errors in the workflow VM). esbuild's final Vercel-function
|
|
63
83
|
* re-bundle resolves and inlines them with `platform: "node"`.
|
|
64
84
|
*/
|
|
65
|
-
|
|
85
|
+
protected getThread(): Promise<RehydratedThread>;
|
|
66
86
|
}
|
|
67
|
-
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=slack-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CACpD;AAED,UAAU,gBAAgB;IACxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED;;;;GAIG;AACH,UAAU,OAAO;IACf,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AAyCD;;;;;;;;GAQG;AACH,qBAAa,YAAa,YAAW,OAAO;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW;IAC/B,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,uBAAuB,CAAuB;IACtD,OAAO,CAAC,OAAO,CAAiC;gBAEpC,KAAK,EAAE,iBAAiB;IAIpC,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,gBAAgB,IAAI,gBAAgB,CAEvC;IAED,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQpC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAU1D,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAyB7E,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2CjF,OAAO,CAAC,6BAA6B;IAMrC,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,yBAAyB;cAKjB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAWjC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1D;;;OAGG;YACW,mBAAmB;IAcjC;;OAEG;cACa,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB9C;;;;;;;;OAQG;cACa,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAevD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { registerChannel } from "./channel-registry.js";
|
|
2
2
|
import { resolveTextToResponses } from "./resolve-text.js";
|
|
3
3
|
const SLACK_MAX_TYPING_STATUS_LENGTH = 50;
|
|
4
4
|
function labelForAction(action) {
|
|
@@ -29,10 +29,10 @@ function truncateTypingStatus(status) {
|
|
|
29
29
|
return `${normalized.slice(0, SLACK_MAX_TYPING_STATUS_LENGTH - 3).trimEnd()}...`;
|
|
30
30
|
}
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
|
-
//
|
|
32
|
+
// Channel
|
|
33
33
|
// ---------------------------------------------------------------------------
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Channel that rehydrates a Chat SDK `Thread` from serialized state and
|
|
36
36
|
* uses `thread.startTyping()` to show typing status with tool names while
|
|
37
37
|
* the agent is working, then posts the final reply via `thread.post()`.
|
|
38
38
|
*
|
|
@@ -40,7 +40,7 @@ function truncateTypingStatus(status) {
|
|
|
40
40
|
* (Block Kit buttons and select menus) and stores the pending requests
|
|
41
41
|
* in serializable state so `onDeliver` can resolve text replies.
|
|
42
42
|
*/
|
|
43
|
-
export class
|
|
43
|
+
export class SlackChannel {
|
|
44
44
|
static kind = "slack";
|
|
45
45
|
kind = "slack";
|
|
46
46
|
_state;
|
|
@@ -64,14 +64,14 @@ export class SlackChannelEmitter {
|
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
static deserialize(state) {
|
|
67
|
-
return new
|
|
67
|
+
return new SlackChannel({
|
|
68
68
|
botToken: state.botToken,
|
|
69
69
|
pendingRequests: state.pendingRequests,
|
|
70
70
|
serializedThread: state.serializedThread,
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
// ── Inbound: transform delivered input ─────────────────
|
|
74
|
-
onDeliver(payload) {
|
|
74
|
+
async onDeliver(_ctx, payload) {
|
|
75
75
|
// Structured responses (Slack button callback, HTTP client) —
|
|
76
76
|
// pass through untouched.
|
|
77
77
|
if (payload.inputResponses !== undefined && payload.inputResponses.length > 0) {
|
|
@@ -91,8 +91,7 @@ export class SlackChannelEmitter {
|
|
|
91
91
|
return { message: payload.message };
|
|
92
92
|
}
|
|
93
93
|
// ── Outbound: render events to Slack ───────────────────
|
|
94
|
-
async onEvent(event
|
|
95
|
-
await emit(event);
|
|
94
|
+
async onEvent(event) {
|
|
96
95
|
switch (event.type) {
|
|
97
96
|
case "turn.started":
|
|
98
97
|
this.clearPendingToolCallMessage();
|
|
@@ -130,6 +129,7 @@ export class SlackChannelEmitter {
|
|
|
130
129
|
await this.post("Something went wrong.");
|
|
131
130
|
break;
|
|
132
131
|
}
|
|
132
|
+
return event;
|
|
133
133
|
}
|
|
134
134
|
consumePendingToolCallMessage() {
|
|
135
135
|
const message = this._pendingToolCallMessage;
|
|
@@ -229,7 +229,7 @@ export class SlackChannelEmitter {
|
|
|
229
229
|
return thread;
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
|
|
232
|
+
registerChannel(SlackChannel);
|
|
233
233
|
const INPUT_OPTION_STYLE_TO_BUTTON_STYLE = {
|
|
234
234
|
danger: "danger",
|
|
235
235
|
default: undefined,
|
|
@@ -279,4 +279,4 @@ function buildInputRequestCard(kit, request) {
|
|
|
279
279
|
children: [kit.CardText(request.prompt)],
|
|
280
280
|
});
|
|
281
281
|
}
|
|
282
|
-
//# sourceMappingURL=slack-
|
|
282
|
+
//# sourceMappingURL=slack-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-channel.js","sourceRoot":"","sources":["../../../src/channel/slack-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { StepInput } from "../harness/types.js";
|
|
2
|
+
import { type HandleMessageStreamEvent } from "../protocol/message.js";
|
|
3
|
+
import type { Channel, ContextAccessor, DeliverPayload } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Serializable state for the subagent channel.
|
|
6
|
+
*
|
|
7
|
+
* All fields are constant for the lifetime of one child run and are
|
|
8
|
+
* round-tripped through the {@link ChannelKey} codec so the
|
|
9
|
+
* channel can be reconstructed at every workflow step boundary.
|
|
10
|
+
*/
|
|
11
|
+
export interface SubagentChannelState {
|
|
12
|
+
readonly callId: string;
|
|
13
|
+
readonly subagentName: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Channel attached to a delegated subagent child run.
|
|
17
|
+
*
|
|
18
|
+
* Wraps every event in a `subagent.event` envelope tagged with the
|
|
19
|
+
* child's call id and subagent name and writes the envelope to the
|
|
20
|
+
* child's event stream. The parent's subagent tool wrapper drains
|
|
21
|
+
* that stream and forwards each pre-wrapped envelope verbatim to its
|
|
22
|
+
* own emit function — no envelope-construction logic in the pump.
|
|
23
|
+
*
|
|
24
|
+
* Holding the wrapping responsibility inside the channel
|
|
25
|
+
* (rather than in the parent-side pump) keeps delivery policy in the
|
|
26
|
+
* channel layer (CLAUDE.md rule 17) and makes the subagent channel
|
|
27
|
+
* structurally and behaviorally parallel to other channels
|
|
28
|
+
* like {@link SlackChannel} that hold serializable state and
|
|
29
|
+
* do real work in `onEvent`.
|
|
30
|
+
*/
|
|
31
|
+
export declare class SubagentChannel implements Channel {
|
|
32
|
+
static readonly kind = "subagent";
|
|
33
|
+
readonly kind = "subagent";
|
|
34
|
+
private readonly _state;
|
|
35
|
+
constructor(state: SubagentChannelState);
|
|
36
|
+
get callId(): string;
|
|
37
|
+
get subagentName(): string;
|
|
38
|
+
onEvent(event: HandleMessageStreamEvent): Promise<HandleMessageStreamEvent>;
|
|
39
|
+
onDeliver(_ctx: ContextAccessor, payload: DeliverPayload): Promise<StepInput>;
|
|
40
|
+
serialize(): Record<string, unknown>;
|
|
41
|
+
static deserialize(state: Record<string, unknown>): SubagentChannel;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=subagent-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-channel.d.ts","sourceRoot":"","sources":["../../../src/channel/subagent-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,YAAW,OAAO;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;IAClC,QAAQ,CAAC,IAAI,cAAc;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,KAAK,EAAE,oBAAoB;IAIvC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAEK,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQ3E,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAInF,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOpC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;CAMpE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSubagentChildEventEvent, } from "../protocol/message.js";
|
|
2
|
-
import {
|
|
2
|
+
import { registerChannel } from "./channel-registry.js";
|
|
3
3
|
/**
|
|
4
|
-
* Channel
|
|
4
|
+
* Channel attached to a delegated subagent child run.
|
|
5
5
|
*
|
|
6
6
|
* Wraps every event in a `subagent.event` envelope tagged with the
|
|
7
7
|
* child's call id and subagent name and writes the envelope to the
|
|
@@ -9,14 +9,14 @@ import { registerChannelEmitter } from "./emitter-registry.js";
|
|
|
9
9
|
* that stream and forwards each pre-wrapped envelope verbatim to its
|
|
10
10
|
* own emit function — no envelope-construction logic in the pump.
|
|
11
11
|
*
|
|
12
|
-
* Holding the wrapping responsibility inside the channel
|
|
12
|
+
* Holding the wrapping responsibility inside the channel
|
|
13
13
|
* (rather than in the parent-side pump) keeps delivery policy in the
|
|
14
|
-
* channel layer (CLAUDE.md rule 17) and makes the subagent
|
|
15
|
-
* structurally and behaviorally parallel to other
|
|
16
|
-
* like {@link
|
|
14
|
+
* channel layer (CLAUDE.md rule 17) and makes the subagent channel
|
|
15
|
+
* structurally and behaviorally parallel to other channels
|
|
16
|
+
* like {@link SlackChannel} that hold serializable state and
|
|
17
17
|
* do real work in `onEvent`.
|
|
18
18
|
*/
|
|
19
|
-
export class
|
|
19
|
+
export class SubagentChannel {
|
|
20
20
|
static kind = "subagent";
|
|
21
21
|
kind = "subagent";
|
|
22
22
|
_state;
|
|
@@ -29,14 +29,14 @@ export class SubagentChannelEmitter {
|
|
|
29
29
|
get subagentName() {
|
|
30
30
|
return this._state.subagentName;
|
|
31
31
|
}
|
|
32
|
-
async onEvent(event
|
|
33
|
-
|
|
32
|
+
async onEvent(event) {
|
|
33
|
+
return createSubagentChildEventEvent({
|
|
34
34
|
callId: this._state.callId,
|
|
35
35
|
event,
|
|
36
36
|
subagentName: this._state.subagentName,
|
|
37
|
-
})
|
|
37
|
+
});
|
|
38
38
|
}
|
|
39
|
-
onDeliver(payload) {
|
|
39
|
+
async onDeliver(_ctx, payload) {
|
|
40
40
|
return payload;
|
|
41
41
|
}
|
|
42
42
|
serialize() {
|
|
@@ -46,11 +46,11 @@ export class SubagentChannelEmitter {
|
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
static deserialize(state) {
|
|
49
|
-
return new
|
|
49
|
+
return new SubagentChannel({
|
|
50
50
|
callId: state.callId,
|
|
51
51
|
subagentName: state.subagentName,
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=subagent-
|
|
55
|
+
registerChannel(SubagentChannel);
|
|
56
|
+
//# sourceMappingURL=subagent-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-channel.js","sourceRoot":"","sources":["../../../src/channel/subagent-channel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,GAE9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAexD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAU,IAAI,GAAG,UAAU,CAAC;IACzB,IAAI,GAAG,UAAU,CAAC;IAEV,MAAM,CAAuB;IAE9C,YAAY,KAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA+B;QAC3C,OAAO,6BAA6B,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,KAAK;YACL,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAqB,EAAE,OAAuB;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAA8B;QAC/C,OAAO,IAAI,eAAe,CAAC;YACzB,MAAM,EAAE,KAAK,CAAC,MAAgB;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAsB;SAC3C,CAAC,CAAC;IACL,CAAC;;AAGH,eAAe,CAAC,eAAe,CAAC,CAAC"}
|