@eggjs/agent-runtime 0.0.0 → 3.73.0-beta.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.
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OSSObjectStorageClient = void 0;
4
+ function isOSSError(err, code) {
5
+ return err != null && typeof err === 'object' && 'code' in err && err.code === code;
6
+ }
7
+ /**
8
+ * ObjectStorageClient backed by Alibaba Cloud OSS (via oss-client).
9
+ *
10
+ * Supports both `put`/`get` for normal objects and `append` for
11
+ * OSS Appendable Objects. The append path uses a local position cache
12
+ * to avoid extra HEAD requests; on position mismatch it falls back to
13
+ * HEAD + retry automatically.
14
+ *
15
+ * The OSSObject instance should be constructed and injected by the caller,
16
+ * following the IoC/DI principle.
17
+ */
18
+ class OSSObjectStorageClient {
19
+ constructor(client) {
20
+ /**
21
+ * In-memory cache of next-append positions.
22
+ *
23
+ * After each successful `append()`, OSS returns `nextAppendPosition`.
24
+ * We cache it here so the next append can skip a HEAD round-trip.
25
+ * If the cached position is stale (e.g., process restarted or another
26
+ * writer appended), the append will fail with PositionNotEqualToLength
27
+ * and we fall back to HEAD + retry.
28
+ */
29
+ this.appendPositions = new Map();
30
+ this.client = client;
31
+ }
32
+ async put(key, value) {
33
+ await this.client.put(key, Buffer.from(value, 'utf-8'));
34
+ }
35
+ async get(key) {
36
+ try {
37
+ const result = await this.client.get(key);
38
+ if (result.content) {
39
+ return Buffer.isBuffer(result.content) ? result.content.toString('utf-8') : String(result.content);
40
+ }
41
+ return null;
42
+ }
43
+ catch (err) {
44
+ if (isOSSError(err, 'NoSuchKey')) {
45
+ return null;
46
+ }
47
+ throw err;
48
+ }
49
+ }
50
+ /**
51
+ * Append data to an OSS Appendable Object.
52
+ *
53
+ * OSS AppendObject requires a `position` parameter that must equal the
54
+ * current object size. We use a three-step strategy:
55
+ *
56
+ * 1. Use the cached position (0 for new objects, or the value from the
57
+ * last successful append).
58
+ * 2. If OSS returns PositionNotEqualToLength (cache is stale), issue a
59
+ * HEAD request to learn the current object size, then retry once.
60
+ * 3. Update the cache with `nextAppendPosition` from the response.
61
+ *
62
+ * This gives us single-round-trip performance in the common case (single
63
+ * writer, no restarts) while still being self-healing when the cache is
64
+ * stale.
65
+ */
66
+ async append(key, value) {
67
+ var _a, _b;
68
+ const buf = Buffer.from(value, 'utf-8');
69
+ const position = (_a = this.appendPositions.get(key)) !== null && _a !== void 0 ? _a : 0;
70
+ try {
71
+ const result = await this.client.append(key, buf, { position });
72
+ this.appendPositions.set(key, Number(result.nextAppendPosition));
73
+ }
74
+ catch (err) {
75
+ // Position mismatch — the object grew since our last cached position.
76
+ // Fall back to HEAD to learn the actual size, then retry.
77
+ if (isOSSError(err, 'PositionNotEqualToLength')) {
78
+ const head = await this.client.head(key);
79
+ const currentPos = Number((_b = head.res.headers['content-length']) !== null && _b !== void 0 ? _b : 0);
80
+ const result = await this.client.append(key, buf, { position: currentPos });
81
+ this.appendPositions.set(key, Number(result.nextAppendPosition));
82
+ }
83
+ else {
84
+ throw err;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ exports.OSSObjectStorageClient = OSSObjectStorageClient;
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT1NTT2JqZWN0U3RvcmFnZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9PU1NPYmplY3RTdG9yYWdlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLFNBQVMsVUFBVSxDQUFDLEdBQVksRUFBRSxJQUFZO0lBQzVDLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSyxHQUF5QixDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7QUFDN0csQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLHNCQUFzQjtJQWNqQyxZQUFZLE1BQWlCO1FBWDdCOzs7Ozs7OztXQVFHO1FBQ2Msb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUczRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNsQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVcsRUFBRSxLQUFhOztRQUNyQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQ0FBSSxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7WUFDdEIsc0VBQXNFO1lBQ3RFLDBEQUEwRDtZQUMxRCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXpFRCx3REF5RUMifQ==
@@ -0,0 +1,43 @@
1
+ import type { MessageObject, RunObject, RunRecord } from '@eggjs/tegg-types/agent-runtime';
2
+ /** Accumulated token usage — same shape as non-null RunRecord['usage']. */
3
+ export type RunUsage = NonNullable<RunRecord['usage']>;
4
+ /**
5
+ * Encapsulates run state transitions.
6
+ *
7
+ * Mutation methods (`start`, `complete`, `fail`, `cancel`) update internal
8
+ * state and return `Partial<RunRecord>` for the store.
9
+ *
10
+ * `snapshot()` produces a `RunObject` suitable for API responses and SSE events.
11
+ */
12
+ export declare class RunBuilder {
13
+ private readonly id;
14
+ private readonly threadId;
15
+ private readonly createdAt;
16
+ private readonly metadata?;
17
+ private readonly config?;
18
+ private status;
19
+ private startedAt?;
20
+ private completedAt?;
21
+ private cancelledAt?;
22
+ private failedAt?;
23
+ private lastError?;
24
+ private usage?;
25
+ private output?;
26
+ private constructor();
27
+ /** Create a RunBuilder from a store RunRecord, using its own threadId. */
28
+ static fromRecord(run: RunRecord): RunBuilder;
29
+ /** Create a RunBuilder from a store RunRecord, restoring all mutable state. */
30
+ static create(run: RunRecord, threadId: string): RunBuilder;
31
+ /** queued -> in_progress. Returns store update. */
32
+ start(): Partial<RunRecord>;
33
+ /** in_progress -> completed. Returns store update. */
34
+ complete(output: MessageObject[], usage?: RunUsage): Partial<RunRecord>;
35
+ /** queued/in_progress -> failed. Returns store update. */
36
+ fail(error: Error): Partial<RunRecord>;
37
+ /** in_progress/queued -> cancelling (idempotent if already cancelling). Returns store update. */
38
+ cancelling(): Partial<RunRecord>;
39
+ /** cancelling -> cancelled. Returns store update. */
40
+ cancel(): Partial<RunRecord>;
41
+ /** Produce a RunObject snapshot for API / SSE. */
42
+ snapshot(): RunObject;
43
+ }
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunBuilder = void 0;
4
+ const agent_runtime_1 = require("@eggjs/tegg-types/agent-runtime");
5
+ const AgentStoreUtils_1 = require("./AgentStoreUtils");
6
+ /**
7
+ * Encapsulates run state transitions.
8
+ *
9
+ * Mutation methods (`start`, `complete`, `fail`, `cancel`) update internal
10
+ * state and return `Partial<RunRecord>` for the store.
11
+ *
12
+ * `snapshot()` produces a `RunObject` suitable for API responses and SSE events.
13
+ */
14
+ class RunBuilder {
15
+ constructor(id, threadId, createdAt, status, metadata, config) {
16
+ this.id = id;
17
+ this.threadId = threadId;
18
+ this.createdAt = createdAt;
19
+ this.status = status;
20
+ this.metadata = metadata;
21
+ this.config = config;
22
+ }
23
+ /** Create a RunBuilder from a store RunRecord, using its own threadId. */
24
+ static fromRecord(run) {
25
+ var _a;
26
+ return RunBuilder.create(run, (_a = run.threadId) !== null && _a !== void 0 ? _a : '');
27
+ }
28
+ /** Create a RunBuilder from a store RunRecord, restoring all mutable state. */
29
+ static create(run, threadId) {
30
+ var _a, _b, _c, _d, _e;
31
+ const rb = new RunBuilder(run.id, threadId, run.createdAt, run.status, run.metadata, run.config);
32
+ rb.startedAt = (_a = run.startedAt) !== null && _a !== void 0 ? _a : undefined;
33
+ rb.completedAt = (_b = run.completedAt) !== null && _b !== void 0 ? _b : undefined;
34
+ rb.cancelledAt = (_c = run.cancelledAt) !== null && _c !== void 0 ? _c : undefined;
35
+ rb.failedAt = (_d = run.failedAt) !== null && _d !== void 0 ? _d : undefined;
36
+ rb.lastError = (_e = run.lastError) !== null && _e !== void 0 ? _e : undefined;
37
+ rb.output = run.output;
38
+ if (run.usage) {
39
+ rb.usage = { ...run.usage };
40
+ }
41
+ return rb;
42
+ }
43
+ /** queued -> in_progress. Returns store update. */
44
+ start() {
45
+ if (this.status !== agent_runtime_1.RunStatus.Queued) {
46
+ throw new agent_runtime_1.InvalidRunStateTransitionError(this.status, agent_runtime_1.RunStatus.InProgress);
47
+ }
48
+ this.status = agent_runtime_1.RunStatus.InProgress;
49
+ this.startedAt = (0, AgentStoreUtils_1.nowUnix)();
50
+ return { status: this.status, startedAt: this.startedAt };
51
+ }
52
+ /** in_progress -> completed. Returns store update. */
53
+ complete(output, usage) {
54
+ if (this.status !== agent_runtime_1.RunStatus.InProgress) {
55
+ throw new agent_runtime_1.InvalidRunStateTransitionError(this.status, agent_runtime_1.RunStatus.Completed);
56
+ }
57
+ this.status = agent_runtime_1.RunStatus.Completed;
58
+ this.completedAt = (0, AgentStoreUtils_1.nowUnix)();
59
+ this.output = output;
60
+ this.usage = usage;
61
+ return {
62
+ status: this.status,
63
+ output,
64
+ usage,
65
+ completedAt: this.completedAt,
66
+ };
67
+ }
68
+ /** queued/in_progress -> failed. Returns store update. */
69
+ fail(error) {
70
+ if (this.status !== agent_runtime_1.RunStatus.InProgress && this.status !== agent_runtime_1.RunStatus.Queued) {
71
+ throw new agent_runtime_1.InvalidRunStateTransitionError(this.status, agent_runtime_1.RunStatus.Failed);
72
+ }
73
+ this.status = agent_runtime_1.RunStatus.Failed;
74
+ this.failedAt = (0, AgentStoreUtils_1.nowUnix)();
75
+ this.lastError = { code: agent_runtime_1.AgentErrorCode.ExecError, message: error.message };
76
+ return {
77
+ status: this.status,
78
+ lastError: this.lastError,
79
+ failedAt: this.failedAt,
80
+ };
81
+ }
82
+ /** in_progress/queued -> cancelling (idempotent if already cancelling). Returns store update. */
83
+ cancelling() {
84
+ if (this.status === agent_runtime_1.RunStatus.Cancelling) {
85
+ return { status: this.status };
86
+ }
87
+ if (this.status !== agent_runtime_1.RunStatus.InProgress && this.status !== agent_runtime_1.RunStatus.Queued) {
88
+ throw new agent_runtime_1.InvalidRunStateTransitionError(this.status, agent_runtime_1.RunStatus.Cancelling);
89
+ }
90
+ this.status = agent_runtime_1.RunStatus.Cancelling;
91
+ return { status: this.status };
92
+ }
93
+ /** cancelling -> cancelled. Returns store update. */
94
+ cancel() {
95
+ if (this.status !== agent_runtime_1.RunStatus.Cancelling) {
96
+ throw new agent_runtime_1.InvalidRunStateTransitionError(this.status, agent_runtime_1.RunStatus.Cancelled);
97
+ }
98
+ this.status = agent_runtime_1.RunStatus.Cancelled;
99
+ this.cancelledAt = (0, AgentStoreUtils_1.nowUnix)();
100
+ return {
101
+ status: this.status,
102
+ cancelledAt: this.cancelledAt,
103
+ };
104
+ }
105
+ /** Produce a RunObject snapshot for API / SSE. */
106
+ snapshot() {
107
+ var _a, _b, _c, _d, _e;
108
+ return {
109
+ id: this.id,
110
+ object: agent_runtime_1.AgentObjectType.ThreadRun,
111
+ createdAt: this.createdAt,
112
+ threadId: this.threadId,
113
+ status: this.status,
114
+ lastError: this.lastError,
115
+ startedAt: (_a = this.startedAt) !== null && _a !== void 0 ? _a : null,
116
+ completedAt: (_b = this.completedAt) !== null && _b !== void 0 ? _b : null,
117
+ cancelledAt: (_c = this.cancelledAt) !== null && _c !== void 0 ? _c : null,
118
+ failedAt: (_d = this.failedAt) !== null && _d !== void 0 ? _d : null,
119
+ usage: (_e = this.usage) !== null && _e !== void 0 ? _e : null,
120
+ metadata: this.metadata,
121
+ output: this.output,
122
+ config: this.config,
123
+ };
124
+ }
125
+ }
126
+ exports.RunBuilder = RunBuilder;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9SdW5CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1FQUE2SDtBQUU3SCx1REFBNEM7QUFLNUM7Ozs7Ozs7R0FPRztBQUNILE1BQWEsVUFBVTtJQWdCckIsWUFDRSxFQUFVLEVBQ1YsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsTUFBaUIsRUFDakIsUUFBa0MsRUFDbEMsTUFBdUI7UUFFdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBYzs7UUFDOUIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFBLEdBQUcsQ0FBQyxRQUFRLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFjLEVBQUUsUUFBZ0I7O1FBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRyxFQUFFLENBQUMsU0FBUyxHQUFHLE1BQUEsR0FBRyxDQUFDLFNBQVMsbUNBQUksU0FBUyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxXQUFX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
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Abstract interface for writing SSE events.
3
+ * Decouples AgentRuntime from HTTP transport details.
4
+ */
5
+ export interface SSEWriter {
6
+ /** Write an SSE event with the given name and JSON-serializable data. */
7
+ writeEvent(event: string, data: unknown): void;
8
+ /** Whether the underlying connection has been closed. */
9
+ readonly closed: boolean;
10
+ /** End the SSE stream. */
11
+ end(): void;
12
+ /** Register a callback for when the client disconnects. */
13
+ onClose(callback: () => void): void;
14
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1NFV3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NTRVdyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1 @@
1
+ export declare const AGENT_DEFAULT_FACTORIES: Record<string, () => Function>;