@adonis-agora/agent 0.56.0 → 0.58.0
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/CHANGELOG.md +20 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +27 -1
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/ag-ui/adapter.d.ts.map +1 -1
- package/dist/src/ag-ui/adapter.js +1 -2
- package/dist/src/ag-ui/adapter.js.map +1 -1
- package/dist/src/ag-ui/encoder.d.ts +7 -92
- package/dist/src/ag-ui/encoder.d.ts.map +1 -1
- package/dist/src/ag-ui/encoder.js +14 -498
- package/dist/src/ag-ui/encoder.js.map +1 -1
- package/dist/src/ag-ui/frames.d.ts +17 -0
- package/dist/src/ag-ui/frames.d.ts.map +1 -0
- package/dist/src/ag-ui/frames.js +69 -0
- package/dist/src/ag-ui/frames.js.map +1 -0
- package/dist/src/ag-ui/index.d.ts +9 -6
- package/dist/src/ag-ui/index.d.ts.map +1 -1
- package/dist/src/ag-ui/index.js +9 -6
- package/dist/src/ag-ui/index.js.map +1 -1
- package/dist/src/ag-ui/stream.d.ts +7 -23
- package/dist/src/ag-ui/stream.d.ts.map +1 -1
- package/dist/src/ag-ui/stream.js +9 -64
- package/dist/src/ag-ui/stream.js.map +1 -1
- package/dist/src/agent-deps-factory.d.ts +4 -2
- package/dist/src/agent-deps-factory.d.ts.map +1 -1
- package/dist/src/agent-deps-factory.js +17 -7
- package/dist/src/agent-deps-factory.js.map +1 -1
- package/dist/src/agent-loop.d.ts +22 -0
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +59 -4
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +48 -1
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +78 -0
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/delegation.d.ts +72 -0
- package/dist/src/delegation.d.ts.map +1 -0
- package/dist/src/delegation.js +73 -0
- package/dist/src/delegation.js.map +1 -0
- package/dist/src/diagnostics.d.ts +2 -0
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/durable/agent-run-workflow.d.ts +3 -0
- package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
- package/dist/src/durable/agent-run-workflow.js +89 -5
- package/dist/src/durable/agent-run-workflow.js.map +1 -1
- package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
- package/dist/src/durable/durable-agent-runner.js +30 -4
- package/dist/src/durable/durable-agent-runner.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/media/media-attachment-staging.d.ts +9 -1
- package/dist/src/media/media-attachment-staging.d.ts.map +1 -1
- package/dist/src/media/media-attachment-staging.js +24 -0
- package/dist/src/media/media-attachment-staging.js.map +1 -1
- package/dist/src/runners/inline-agent-runner.d.ts +13 -0
- package/dist/src/runners/inline-agent-runner.d.ts.map +1 -1
- package/dist/src/runners/inline-agent-runner.js +130 -2
- package/dist/src/runners/inline-agent-runner.js.map +1 -1
- package/dist/src/spi/agent-store.d.ts +2 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/spi/attachment-staging.d.ts +48 -0
- package/dist/src/spi/attachment-staging.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +2 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +2 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +15 -2
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/testing/in-memory-attachment-staging.d.ts +14 -2
- package/dist/src/testing/in-memory-attachment-staging.d.ts.map +1 -1
- package/dist/src/testing/in-memory-attachment-staging.js +25 -1
- package/dist/src/testing/in-memory-attachment-staging.js.map +1 -1
- package/dist/src/testing/in-memory-store.d.ts +4 -2
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +9 -3
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/testing/index.d.ts +1 -1
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/types.d.ts +41 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/skills/agent-personas-agents/SKILL.md +11 -1
- package/dist/src/ag-ui/input.d.ts +0 -72
- package/dist/src/ag-ui/input.d.ts.map +0 -1
- package/dist/src/ag-ui/input.js +0 -216
- package/dist/src/ag-ui/input.js.map +0 -1
- package/dist/src/ag-ui/interrupt-id.d.ts +0 -27
- package/dist/src/ag-ui/interrupt-id.d.ts.map +0 -1
- package/dist/src/ag-ui/interrupt-id.js +0 -42
- package/dist/src/ag-ui/interrupt-id.js.map +0 -1
- package/dist/src/ag-ui/types.d.ts +0 -202
- package/dist/src/ag-ui/types.d.ts.map +0 -1
- package/dist/src/ag-ui/types.js +0 -33
- package/dist/src/ag-ui/types.js.map +0 -1
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AG-UI 1.0 (https://docs.ag-ui.com/spec/1.0), producer side: the
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* AG-UI 1.0 (https://docs.ag-ui.com/spec/1.0), producer side: the route adapter, and the pieces it is
|
|
3
|
+
* built from — for a host that mounts its own route instead of the provider's.
|
|
4
|
+
*
|
|
5
|
+
* The encoder, the input readers and the interrupt-id codec are `@dudousxd/nestjs-agent-core/ag-ui`
|
|
6
|
+
* (one implementation for both servers), re-exported here; `AgUiEncoder` and `agUiEvents` take this
|
|
7
|
+
* package's `StreamFrame`s. Install `@dudousxd/nestjs-agent-core` (an optional peer, 0.35 or later)
|
|
8
|
+
* to use this entry.
|
|
5
9
|
*/
|
|
10
|
+
export { AG_UI_CUSTOM, AG_UI_PROTOCOL_VERSION, type AgUiContentPart, type AgUiContext, type AgUiEvent, type AgUiInterrupt, type AgUiMessage, type AgUiMetadata, type AgUiPartSource, type AgUiResumeEntry, type AgUiRunInput, type AgUiRunOutcome, type AgUiSourceFrame, type AgUiTokenUsage, decodeInterruptId, encodeInterruptId, type ForwardedOptions, type InlineMedia, type InterruptAddress, parseRunInput, planResume, type ResumeDecision, type ResumePlan, readAnswersPayload, readApprovalPayload, readContext, readForwardedProps, readUserTurn, type UserTurn, } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
6
11
|
export { type AgUiAdapterOptions, agUiAdapter } from './adapter.js';
|
|
7
12
|
export { AgUiEncoder, type AgUiEncoderOptions } from './encoder.js';
|
|
8
|
-
export {
|
|
9
|
-
export { decodeInterruptId, encodeInterruptId, type InterruptAddress } from './interrupt-id.js';
|
|
13
|
+
export { agUiFrames, toAgUiFrame } from './frames.js';
|
|
10
14
|
export { type AgUiStreamOptions, agUiEvents, agUiSse } from './stream.js';
|
|
11
|
-
export * from './types.js';
|
|
12
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,aAAa,EACb,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,QAAQ,GACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/src/ag-ui/index.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* AG-UI 1.0 (https://docs.ag-ui.com/spec/1.0), producer side: the
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* AG-UI 1.0 (https://docs.ag-ui.com/spec/1.0), producer side: the route adapter, and the pieces it is
|
|
3
|
+
* built from — for a host that mounts its own route instead of the provider's.
|
|
4
|
+
*
|
|
5
|
+
* The encoder, the input readers and the interrupt-id codec are `@dudousxd/nestjs-agent-core/ag-ui`
|
|
6
|
+
* (one implementation for both servers), re-exported here; `AgUiEncoder` and `agUiEvents` take this
|
|
7
|
+
* package's `StreamFrame`s. Install `@dudousxd/nestjs-agent-core` (an optional peer, 0.35 or later)
|
|
8
|
+
* to use this entry.
|
|
5
9
|
*/
|
|
10
|
+
export { AG_UI_CUSTOM, AG_UI_PROTOCOL_VERSION, decodeInterruptId, encodeInterruptId, parseRunInput, planResume, readAnswersPayload, readApprovalPayload, readContext, readForwardedProps, readUserTurn, } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
6
11
|
export { agUiAdapter } from './adapter.js';
|
|
7
12
|
export { AgUiEncoder } from './encoder.js';
|
|
8
|
-
export {
|
|
9
|
-
export { decodeInterruptId, encodeInterruptId } from './interrupt-id.js';
|
|
13
|
+
export { agUiFrames, toAgUiFrame } from './frames.js';
|
|
10
14
|
export { agUiEvents, agUiSse } from './stream.js';
|
|
11
|
-
export * from './types.js';
|
|
12
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ag-ui/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ag-ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,sBAAsB,EAatB,iBAAiB,EACjB,iBAAiB,EAIjB,aAAa,EACb,UAAU,EAGV,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,YAAY,GAEb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAA2B,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAA0B,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,28 +1,12 @@
|
|
|
1
|
+
import { type AgUiEvent, type AgUiStreamOptions } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
1
2
|
import type { StreamFrame } from '../spi/token-stream-sink.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export interface AgUiStreamOptions extends AgUiEncoderOptions {
|
|
5
|
-
/**
|
|
6
|
-
* How long the library stream may stay silent, while the run waits on a person AND has other work
|
|
7
|
-
* announced, before the AG-UI run is reported interrupted. Default 750 ms.
|
|
8
|
-
*
|
|
9
|
-
* Only that mixed case needs a clock. A run whose every open tool call is waiting on someone is
|
|
10
|
-
* reported at once; a run waiting on no one is never cut short.
|
|
11
|
-
*/
|
|
12
|
-
quietMs?: number;
|
|
13
|
-
/** Events to write right after `RUN_STARTED` (warnings about input that was dropped). */
|
|
14
|
-
preamble?: AgUiEvent[];
|
|
15
|
-
}
|
|
3
|
+
export { agUiSse } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
4
|
+
export type { AgUiStreamOptions };
|
|
16
5
|
/**
|
|
17
|
-
* One AG-UI run over a library run's stream
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* answers. The library run underneath does wait (parked, durably when the runner is durable). So this
|
|
22
|
-
* stops reading when the run is waiting on someone and nothing else is moving, closes the AG-UI run
|
|
23
|
-
* with the interrupt outcome, and leaves the library run parked for the resume to pick up.
|
|
6
|
+
* One AG-UI run over a library run's stream — the shared driver
|
|
7
|
+
* (`@dudousxd/nestjs-agent-core/ag-ui`) over this package's frames. It stops reading when the run is
|
|
8
|
+
* waiting on someone and nothing else is moving, closes the AG-UI run with the interrupt outcome,
|
|
9
|
+
* and leaves the library run parked for the resume to pick up.
|
|
24
10
|
*/
|
|
25
11
|
export declare function agUiEvents(frames: AsyncIterable<StreamFrame>, options: AgUiStreamOptions): AsyncGenerator<AgUiEvent>;
|
|
26
|
-
/** One AG-UI event as an SSE frame: a single `data:` line, LF-terminated, as the binding pins. */
|
|
27
|
-
export declare function agUiSse(event: AgUiEvent): string;
|
|
28
12
|
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/ag-ui/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,iBAAiB,EAEvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,EAClC,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,SAAS,CAAC,CAE3B"}
|
package/dist/src/ag-ui/stream.js
CHANGED
|
@@ -1,68 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { agUiEvents as sharedAgUiEvents, } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
2
|
+
import { agUiFrames } from './frames.js';
|
|
3
|
+
export { agUiSse } from '@dudousxd/nestjs-agent-core/ag-ui';
|
|
4
4
|
/**
|
|
5
|
-
* One AG-UI run over a library run's stream
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* answers. The library run underneath does wait (parked, durably when the runner is durable). So this
|
|
10
|
-
* stops reading when the run is waiting on someone and nothing else is moving, closes the AG-UI run
|
|
11
|
-
* with the interrupt outcome, and leaves the library run parked for the resume to pick up.
|
|
5
|
+
* One AG-UI run over a library run's stream — the shared driver
|
|
6
|
+
* (`@dudousxd/nestjs-agent-core/ag-ui`) over this package's frames. It stops reading when the run is
|
|
7
|
+
* waiting on someone and nothing else is moving, closes the AG-UI run with the interrupt outcome,
|
|
8
|
+
* and leaves the library run parked for the resume to pick up.
|
|
12
9
|
*/
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
const quietMs = options.quietMs ?? DEFAULT_QUIET_MS;
|
|
16
|
-
yield* encoder.start();
|
|
17
|
-
yield* options.preamble ?? [];
|
|
18
|
-
const iterator = frames[Symbol.asyncIterator]();
|
|
19
|
-
let upcoming;
|
|
20
|
-
let ended = false;
|
|
21
|
-
try {
|
|
22
|
-
for (;;) {
|
|
23
|
-
upcoming ??= iterator.next();
|
|
24
|
-
// Frames buffered before this reader attached are replayed without a pause between them, so
|
|
25
|
-
// "is it waiting?" is only asked of a stream that has caught up with what it already holds.
|
|
26
|
-
const caughtUp = encoder.consumed >= (options.skip ?? 0);
|
|
27
|
-
let next;
|
|
28
|
-
if (caughtUp && encoder.waiting) {
|
|
29
|
-
// Nothing else in flight: only a frame already on its way (a sink that reads in batches)
|
|
30
|
-
// can still arrive, so a short grace is enough. Otherwise wait out the quiet window.
|
|
31
|
-
next = await raceQuiet(upcoming, encoder.busy ? quietMs : Math.min(quietMs, GRACE_MS));
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
next = await upcoming;
|
|
35
|
-
}
|
|
36
|
-
if (next === 'quiet')
|
|
37
|
-
break;
|
|
38
|
-
upcoming = undefined;
|
|
39
|
-
if (next.done === true) {
|
|
40
|
-
ended = true;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
yield* encoder.encode(next.value);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
// Stop following the library stream; the run it carries is left exactly as it is.
|
|
48
|
-
void iterator.return?.();
|
|
49
|
-
}
|
|
50
|
-
yield* encoder.finish(ended);
|
|
51
|
-
}
|
|
52
|
-
function raceQuiet(upcoming, ms) {
|
|
53
|
-
return new Promise((resolve, reject) => {
|
|
54
|
-
const timer = setTimeout(() => resolve('quiet'), ms);
|
|
55
|
-
upcoming.then((result) => {
|
|
56
|
-
clearTimeout(timer);
|
|
57
|
-
resolve(result);
|
|
58
|
-
}, (error) => {
|
|
59
|
-
clearTimeout(timer);
|
|
60
|
-
reject(error);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/** One AG-UI event as an SSE frame: a single `data:` line, LF-terminated, as the binding pins. */
|
|
65
|
-
export function agUiSse(event) {
|
|
66
|
-
return `data: ${JSON.stringify(event)}\n\n`;
|
|
10
|
+
export function agUiEvents(frames, options) {
|
|
11
|
+
return sharedAgUiEvents(agUiFrames(frames), options);
|
|
67
12
|
}
|
|
68
13
|
//# sourceMappingURL=stream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/ag-ui/stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/ag-ui/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,IAAI,gBAAgB,GAC/B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,MAAkC,EAClC,OAA0B;IAE1B,OAAO,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -15,8 +15,10 @@ import type { TokenStreamSink } from './spi/token-stream-sink.js';
|
|
|
15
15
|
import type { ToolRegistry } from './tool-registry.js';
|
|
16
16
|
import type { ToolTransientRetrySetting } from './tool-retry.js';
|
|
17
17
|
import type { Actor, AgentDefinition, DelegateEdge } from './types.js';
|
|
18
|
-
/** The synthesized `agent`-kind tool name an
|
|
19
|
-
export declare function delegateToolName(target: string
|
|
18
|
+
/** The synthesized `agent`-kind tool name for an edge to `target`: `ask_<target>`, or `start_<target>` for a detached one. */
|
|
19
|
+
export declare function delegateToolName(target: string, options?: {
|
|
20
|
+
detached?: boolean;
|
|
21
|
+
}): string;
|
|
20
22
|
/** Normalize a `delegatesTo` entry: a bare string is the edge with no authorization annotation. */
|
|
21
23
|
export declare function normalizeDelegateEdge(edge: string | DelegateEdge): DelegateEdge;
|
|
22
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-deps-factory.d.ts","sourceRoot":"","sources":["../../src/agent-deps-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAW,MAAM,YAAY,CAAC;AAEhF,
|
|
1
|
+
{"version":3,"file":"agent-deps-factory.d.ts","sourceRoot":"","sources":["../../src/agent-deps-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
/** The synthesized `agent`-kind tool name an
|
|
2
|
-
export function delegateToolName(target) {
|
|
3
|
-
|
|
1
|
+
/** The synthesized `agent`-kind tool name for an edge to `target`: `ask_<target>`, or `start_<target>` for a detached one. */
|
|
2
|
+
export function delegateToolName(target, options = {}) {
|
|
3
|
+
const slug = target.replace(/[^a-zA-Z0-9]+/g, '_');
|
|
4
|
+
return options.detached === true ? `start_${slug}` : `ask_${slug}`;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* The `{ task: string }` input a delegate (`agent`-kind) tool takes, as a zero-dependency Standard
|
|
@@ -75,8 +76,8 @@ export function registerDelegateTools(registry, agents) {
|
|
|
75
76
|
let count = 0;
|
|
76
77
|
for (const definition of agents.list()) {
|
|
77
78
|
for (const edge of definition.delegatesTo ?? []) {
|
|
78
|
-
const { agent: target, roles, ability } = normalizeDelegateEdge(edge);
|
|
79
|
-
const name = delegateToolName(target);
|
|
79
|
+
const { agent: target, roles, ability, detached } = normalizeDelegateEdge(edge);
|
|
80
|
+
const name = delegateToolName(target, { detached: detached === true });
|
|
80
81
|
if (registry.has(name))
|
|
81
82
|
continue;
|
|
82
83
|
const targetDefinition = agents.get(target);
|
|
@@ -88,7 +89,13 @@ export function registerDelegateTools(registry, agents) {
|
|
|
88
89
|
name,
|
|
89
90
|
kind: 'agent',
|
|
90
91
|
targetAgent: target,
|
|
91
|
-
|
|
92
|
+
// A detached edge's description is the model's only warning that this call hands back a
|
|
93
|
+
// receipt: a tool advertised as returning an answer, which then returns something else, is
|
|
94
|
+
// a model that reports an answer it was never given.
|
|
95
|
+
description: detached === true
|
|
96
|
+
? `Start the "${target}" agent working on a task in the BACKGROUND. Returns immediately with a receipt, NOT an answer — the answer is delivered to this conversation as a separate message later. Use it for work the user does not need to sit and wait for.${blurb}`
|
|
97
|
+
: `Delegate a task to the "${target}" agent and get its answer.${blurb}`,
|
|
98
|
+
...(detached === true ? { detached: true } : {}),
|
|
92
99
|
inputSchema: delegateInputSchema,
|
|
93
100
|
...(roles !== undefined ? { roles } : {}),
|
|
94
101
|
...(ability !== undefined ? { ability } : {}),
|
|
@@ -121,7 +128,10 @@ export class AgentDepsFactory {
|
|
|
121
128
|
if (definition === undefined) {
|
|
122
129
|
return undefined;
|
|
123
130
|
}
|
|
124
|
-
const delegated = (definition.delegatesTo ?? []).map((edge) =>
|
|
131
|
+
const delegated = (definition.delegatesTo ?? []).map((edge) => {
|
|
132
|
+
const { agent, detached } = normalizeDelegateEdge(edge);
|
|
133
|
+
return delegateToolName(agent, { detached: detached === true });
|
|
134
|
+
});
|
|
125
135
|
if (definition.tools === undefined && delegated.length === 0) {
|
|
126
136
|
return undefined; // no restriction
|
|
127
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-deps-factory.js","sourceRoot":"","sources":["../../src/agent-deps-factory.ts"],"names":[],"mappings":"AAmBA,
|
|
1
|
+
{"version":3,"file":"agent-deps-factory.js","sourceRoot":"","sources":["../../src/agent-deps-factory.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent-loop.d.ts
CHANGED
|
@@ -266,6 +266,28 @@ export interface AgentLoopHooks {
|
|
|
266
266
|
runAgent?(agentName: string, task: string): Promise<{
|
|
267
267
|
text: string;
|
|
268
268
|
}>;
|
|
269
|
+
/**
|
|
270
|
+
* Start another named agent and return its run id WITHOUT waiting for it, so the calling turn can
|
|
271
|
+
* finish while the delegate is still working. The durable runner maps this to `ctx.startChild` (a
|
|
272
|
+
* `spawn:<id>` position, no suspend — unlike the `ctx.child` behind {@link runAgent}); the inline
|
|
273
|
+
* runner to a nested loop nobody awaits.
|
|
274
|
+
*
|
|
275
|
+
* `toolCallId` is the delegation's own call, which the started run carries as its delivery address
|
|
276
|
+
* (`AgentRunInput.deliverTo`): it posts its answer back into the calling thread against that row.
|
|
277
|
+
*
|
|
278
|
+
* Called from the loop BODY, never from inside a {@link step}: it takes a position of its own.
|
|
279
|
+
*
|
|
280
|
+
* Absent → a delegation the journal declares detached is AWAITED instead. The loop writes the same
|
|
281
|
+
* checkpoint names either way, so a runner that cannot detach still answers the user; only the
|
|
282
|
+
* runner's own positions differ, and a given runner always makes the same choice for the same call.
|
|
283
|
+
*/
|
|
284
|
+
startAgent?(args: {
|
|
285
|
+
agentName: string;
|
|
286
|
+
task: string;
|
|
287
|
+
toolCallId: string;
|
|
288
|
+
}): Promise<{
|
|
289
|
+
runId: string;
|
|
290
|
+
}>;
|
|
269
291
|
/**
|
|
270
292
|
* Checkpoint wrapper. Inline = call fn directly; durable = ctx.step(name, fn).
|
|
271
293
|
* EVERY side-effect and control-flow read goes through this so durable replay returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/agent-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent-loop.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { danglingToolCallIds, settleDanglingToolCalls } from './dangling-tool-calls.js';
|
|
2
|
+
import { detachedDelivered, detachedStarted, } from './delegation.js';
|
|
2
3
|
import { publishAgentDelegated, publishAgentMessage, publishAgentRetrieved, publishAgentRunFinished, publishAgentRunStarted, publishAgentToolCall, publishAgentToolRetry, spannedAgent, } from './diagnostics.js';
|
|
3
4
|
import { ASK_TOOL_NAME, askInputSchema, askToolDefinition, DEFAULT_INTAKE_PREAMBLE, isHumanDecision, normalizeElicitationReply, settleElicitation, } from './elicitation.js';
|
|
4
5
|
import { buildMemoryBlock, offerMemories, REMEMBER_TOOL_NAME, rememberInputSchema, rememberToolDefinition, writeMemory, } from './memory.js';
|
|
@@ -200,7 +201,15 @@ async function resolveDelegation(deps, input, call, spec) {
|
|
|
200
201
|
if (refusal !== null) {
|
|
201
202
|
return { error: refusal };
|
|
202
203
|
}
|
|
203
|
-
|
|
204
|
+
// Settled HERE, inside the call's `persist:toolcall` checkpoint, so a replay reads the branch
|
|
205
|
+
// back instead of asking a registry that may have changed while the run was parked. Absent unless
|
|
206
|
+
// declared: a deployment with no detached edge writes the bytes this checkpoint always held, and
|
|
207
|
+
// a call journaled before the flag existed replays as the awaited delegation it was.
|
|
208
|
+
return {
|
|
209
|
+
targetAgent,
|
|
210
|
+
task: extractTask(validation.value),
|
|
211
|
+
...(spec.detached === true ? { detached: true } : {}),
|
|
212
|
+
};
|
|
204
213
|
}
|
|
205
214
|
catch (error) {
|
|
206
215
|
return { error: error instanceof Error ? error.message : String(error) };
|
|
@@ -871,14 +880,29 @@ async function delegateToolCall(turn, claimed) {
|
|
|
871
880
|
return { id: call.id, name: call.name, output: null, error: delegation.error };
|
|
872
881
|
}
|
|
873
882
|
const { targetAgent, task } = delegation;
|
|
883
|
+
// The journal decides (see `resolveDelegation`); the runner only says whether it CAN detach.
|
|
884
|
+
const start = delegation.detached === true ? hooks.startAgent : undefined;
|
|
874
885
|
publishAgentDelegated({
|
|
875
886
|
runId: hooks.runId,
|
|
876
887
|
toAgent: targetAgent,
|
|
877
888
|
...(input.agentName !== undefined ? { fromAgent: input.agentName } : {}),
|
|
889
|
+
...(start !== undefined ? { detached: true } : {}),
|
|
878
890
|
});
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
891
|
+
// Both branches write the same checkpoint, under the same name, at the same position — what differs
|
|
892
|
+
// is the RUNNER's own position before it (`spawn:` for a started child, `signal:child:` for an
|
|
893
|
+
// awaited one). Called from the loop body, never inside a step, so the start's position is the
|
|
894
|
+
// workflow's own and a replay asks for it in the same place.
|
|
895
|
+
let sub;
|
|
896
|
+
if (start !== undefined) {
|
|
897
|
+
const started = await start({ agentName: targetAgent, task, toolCallId: call.id });
|
|
898
|
+
sub = detachedStarted({ agent: targetAgent, runId: started.runId });
|
|
899
|
+
}
|
|
900
|
+
else if (hooks.runAgent) {
|
|
901
|
+
sub = await hooks.runAgent(targetAgent, task);
|
|
902
|
+
}
|
|
903
|
+
else {
|
|
904
|
+
sub = { text: `(no multi-agent support wired; cannot reach "${targetAgent}")` };
|
|
905
|
+
}
|
|
882
906
|
await hooks.step(`persist:toolexec:${call.id}`, () => deps.store.updateToolCall({ toolCallId: call.id, status: 'executed', output: sub }));
|
|
883
907
|
return { id: call.id, name: call.name, output: sub };
|
|
884
908
|
}
|
|
@@ -2146,6 +2170,37 @@ export async function runAgentLoop(boundDeps, input, hooks) {
|
|
|
2146
2170
|
await writer.write({ t: 'event', event: { kind: 'title', title } });
|
|
2147
2171
|
});
|
|
2148
2172
|
}
|
|
2173
|
+
const delivery = input.deliverTo;
|
|
2174
|
+
if (delivery !== undefined) {
|
|
2175
|
+
// A detached run's answer has nowhere to go but a message of its own: the turn that delegated it
|
|
2176
|
+
// ended without it, so there is no tool result left to fill and no live stream to write into.
|
|
2177
|
+
// Stamped with THIS run and agent, which is how a reader tells "the research agent finished" from
|
|
2178
|
+
// the assistant's next reply.
|
|
2179
|
+
//
|
|
2180
|
+
// The position exists only for a run carrying a delivery address, and only a detached
|
|
2181
|
+
// delegation's own child run carries one — so every other run's sequence is untouched, and no
|
|
2182
|
+
// run journaled before detached delegation existed can reach it.
|
|
2183
|
+
await hooks.step('deliver:detached', async () => {
|
|
2184
|
+
if ((await deps.store.getThread(delivery.threadId)) === null) {
|
|
2185
|
+
// The conversation was deleted while this ran. Delivering into it would resurrect nothing a
|
|
2186
|
+
// reader kept, and the tool-call row it would settle went with it.
|
|
2187
|
+
return;
|
|
2188
|
+
}
|
|
2189
|
+
const agent = input.agentName ?? 'default';
|
|
2190
|
+
await deps.store.appendMessage({
|
|
2191
|
+
threadId: delivery.threadId,
|
|
2192
|
+
role: 'assistant',
|
|
2193
|
+
content: lastText,
|
|
2194
|
+
agentName: agent,
|
|
2195
|
+
runId: hooks.runId,
|
|
2196
|
+
});
|
|
2197
|
+
await deps.store.updateToolCall({
|
|
2198
|
+
toolCallId: delivery.toolCallId,
|
|
2199
|
+
status: 'executed',
|
|
2200
|
+
output: detachedDelivered({ agent, runId: hooks.runId, text: lastText }),
|
|
2201
|
+
});
|
|
2202
|
+
});
|
|
2203
|
+
}
|
|
2149
2204
|
// Settle the run `completed` with its rollup. Normal completion only — the loop never records a
|
|
2150
2205
|
// failure (it doesn't catch its own crash; that's the runner's job). A checkpointed step so a
|
|
2151
2206
|
// resumed durable replay settles the ONE row exactly once, and `recordRunEnd` is first-terminal so
|