@cadenya/cadenya 0.96.0 → 0.98.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 +17 -0
- package/README.md +18 -0
- package/client.d.mts +2 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +2 -2
- package/client.d.ts.map +1 -1
- package/core/streaming.d.mts +33 -0
- package/core/streaming.d.mts.map +1 -0
- package/core/streaming.d.ts +33 -0
- package/core/streaming.d.ts.map +1 -0
- package/core/streaming.js +263 -0
- package/core/streaming.js.map +1 -0
- package/core/streaming.mjs +258 -0
- package/core/streaming.mjs.map +1 -0
- package/internal/decoders/line.d.mts +17 -0
- package/internal/decoders/line.d.mts.map +1 -0
- package/internal/decoders/line.d.ts +17 -0
- package/internal/decoders/line.d.ts.map +1 -0
- package/internal/decoders/line.js +113 -0
- package/internal/decoders/line.js.map +1 -0
- package/internal/decoders/line.mjs +108 -0
- package/internal/decoders/line.mjs.map +1 -0
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js +10 -0
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +10 -0
- package/internal/parse.mjs.map +1 -1
- package/internal/request-options.d.mts +2 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +2 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/tslib.js +17 -17
- package/package.json +11 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/objectives/index.d.mts +1 -1
- package/resources/objectives/index.d.mts.map +1 -1
- package/resources/objectives/index.d.ts +1 -1
- package/resources/objectives/index.d.ts.map +1 -1
- package/resources/objectives/objectives.d.mts +23 -37
- package/resources/objectives/objectives.d.mts.map +1 -1
- package/resources/objectives/objectives.d.ts +23 -37
- package/resources/objectives/objectives.d.ts.map +1 -1
- package/resources/objectives/objectives.js +12 -0
- package/resources/objectives/objectives.js.map +1 -1
- package/resources/objectives/objectives.mjs +12 -0
- package/resources/objectives/objectives.mjs.map +1 -1
- package/resources/webhooks.d.mts +2 -26
- package/resources/webhooks.d.mts.map +1 -1
- package/resources/webhooks.d.ts +2 -26
- package/resources/webhooks.d.ts.map +1 -1
- package/src/client.ts +6 -6
- package/src/core/streaming.ts +315 -0
- package/src/internal/decoders/line.ts +135 -0
- package/src/internal/parse.ts +14 -0
- package/src/internal/request-options.ts +2 -0
- package/src/resources/index.ts +3 -3
- package/src/resources/objectives/index.ts +3 -3
- package/src/resources/objectives/objectives.ts +44 -52
- package/src/resources/webhooks.ts +2 -34
- package/src/streaming.ts +2 -0
- package/src/version.ts +1 -1
- package/streaming.d.mts +3 -0
- package/streaming.d.mts.map +1 -0
- package/streaming.d.ts +3 -0
- package/streaming.d.ts.map +1 -0
- package/streaming.js +6 -0
- package/streaming.js.map +1 -0
- package/streaming.mjs +3 -0
- package/streaming.mjs.map +1 -0
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -13,6 +13,7 @@ const tool_calls_1 = require("./tool-calls.js");
|
|
|
13
13
|
const ToolsAPI = tslib_1.__importStar(require("./tools.js"));
|
|
14
14
|
const tools_1 = require("./tools.js");
|
|
15
15
|
const pagination_1 = require("../../core/pagination.js");
|
|
16
|
+
const headers_1 = require("../../internal/headers.js");
|
|
16
17
|
const path_1 = require("../../internal/utils/path.js");
|
|
17
18
|
class Objectives extends resource_1.APIResource {
|
|
18
19
|
constructor() {
|
|
@@ -88,6 +89,17 @@ class Objectives extends resource_1.APIResource {
|
|
|
88
89
|
const { workspaceId, ...query } = params;
|
|
89
90
|
return this._client.getAPIList((0, path_1.path) `/v1/workspaces/${workspaceId}/objectives/${objectiveID}/events`, (pagination_1.CursorPagination), { query, ...options });
|
|
90
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Streams events for an objective in real-time using server-sent events (SSE)
|
|
94
|
+
*/
|
|
95
|
+
streamEvents(objectiveID, params, options) {
|
|
96
|
+
const { workspaceId } = params;
|
|
97
|
+
return this._client.get((0, path_1.path) `/v1/workspaces/${workspaceId}/objectives/${objectiveID}/events:stream`, {
|
|
98
|
+
...options,
|
|
99
|
+
headers: (0, headers_1.buildHeaders)([{ Accept: 'text/event-stream' }, options?.headers]),
|
|
100
|
+
stream: true,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
91
103
|
}
|
|
92
104
|
exports.Objectives = Objectives;
|
|
93
105
|
Objectives.Tools = tools_1.Tools;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectives.js","sourceRoot":"","sources":["../../src/resources/objectives/objectives.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,qDAAkD;AAOlD,mEAA0C;AAC1C,4CAQoB;AACpB,6DAAoC;AACpC,sCAOiB;AACjB,sEAA6C;AAC7C,gDAiBsB;AACtB,6DAAoC;AACpC,sCAA+F;AAE/F,yDAAmG;AAEnG,uDAAiD;AAEjD,MAAa,UAAW,SAAQ,sBAAW;IAA3C;;QACE,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA+
|
|
1
|
+
{"version":3,"file":"objectives.js","sourceRoot":"","sources":["../../src/resources/objectives/objectives.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { ToolCalls, } from "./tool-calls.mjs";
|
|
|
9
9
|
import * as ToolsAPI from "./tools.mjs";
|
|
10
10
|
import { Tools } from "./tools.mjs";
|
|
11
11
|
import { CursorPagination } from "../../core/pagination.mjs";
|
|
12
|
+
import { buildHeaders } from "../../internal/headers.mjs";
|
|
12
13
|
import { path } from "../../internal/utils/path.mjs";
|
|
13
14
|
export class Objectives extends APIResource {
|
|
14
15
|
constructor() {
|
|
@@ -84,6 +85,17 @@ export class Objectives extends APIResource {
|
|
|
84
85
|
const { workspaceId, ...query } = params;
|
|
85
86
|
return this._client.getAPIList(path `/v1/workspaces/${workspaceId}/objectives/${objectiveID}/events`, (CursorPagination), { query, ...options });
|
|
86
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Streams events for an objective in real-time using server-sent events (SSE)
|
|
90
|
+
*/
|
|
91
|
+
streamEvents(objectiveID, params, options) {
|
|
92
|
+
const { workspaceId } = params;
|
|
93
|
+
return this._client.get(path `/v1/workspaces/${workspaceId}/objectives/${objectiveID}/events:stream`, {
|
|
94
|
+
...options,
|
|
95
|
+
headers: buildHeaders([{ Accept: 'text/event-stream' }, options?.headers]),
|
|
96
|
+
stream: true,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
87
99
|
}
|
|
88
100
|
Objectives.Tools = Tools;
|
|
89
101
|
Objectives.ToolCalls = ToolCalls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectives.mjs","sourceRoot":"","sources":["../../src/resources/objectives/objectives.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,WAAW,EAAE,gCAA4B;AAOlD,OAAO,KAAK,WAAW,uBAAmB;AAC1C,OAAO,EACL,QAAQ,GAOT,uBAAmB;AACpB,OAAO,KAAK,QAAQ,oBAAgB;AACpC,OAAO,EAML,KAAK,GACN,oBAAgB;AACjB,OAAO,KAAK,YAAY,yBAAqB;AAC7C,OAAO,EAgBL,SAAS,GACV,yBAAqB;AACtB,OAAO,KAAK,QAAQ,oBAAgB;AACpC,OAAO,EAAiE,KAAK,EAAE,oBAAgB;AAE/F,OAAO,EAAE,gBAAgB,EAA4C,kCAA8B;AAEnG,OAAO,EAAE,IAAI,EAAE,sCAAkC;AAEjD,MAAM,OAAO,UAAW,SAAQ,WAAW;IAA3C;;QACE,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IA+
|
|
1
|
+
{"version":3,"file":"objectives.mjs","sourceRoot":"","sources":["../../src/resources/objectives/objectives.ts"],"names":[],"mappings":"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"}
|
package/resources/webhooks.d.mts
CHANGED
|
@@ -44,19 +44,7 @@ export declare namespace UnsafeUnwrapWebhookEvent {
|
|
|
44
44
|
* runs)
|
|
45
45
|
*/
|
|
46
46
|
objective: Shared.OperationMetadata;
|
|
47
|
-
objectiveEvent:
|
|
48
|
-
}
|
|
49
|
-
namespace Data {
|
|
50
|
-
interface ObjectiveEvent {
|
|
51
|
-
data: ObjectivesAPI.ObjectiveEventData;
|
|
52
|
-
/**
|
|
53
|
-
* Metadata for ephemeral operations and activities (e.g., objectives, executions,
|
|
54
|
-
* runs)
|
|
55
|
-
*/
|
|
56
|
-
metadata: Shared.OperationMetadata;
|
|
57
|
-
contextWindowId?: string;
|
|
58
|
-
info?: ObjectivesAPI.ObjectiveEventInfo;
|
|
59
|
-
}
|
|
47
|
+
objectiveEvent: ObjectivesAPI.ObjectiveEvent;
|
|
60
48
|
}
|
|
61
49
|
}
|
|
62
50
|
/**
|
|
@@ -95,19 +83,7 @@ export declare namespace UnwrapWebhookEvent {
|
|
|
95
83
|
* runs)
|
|
96
84
|
*/
|
|
97
85
|
objective: Shared.OperationMetadata;
|
|
98
|
-
objectiveEvent:
|
|
99
|
-
}
|
|
100
|
-
namespace Data {
|
|
101
|
-
interface ObjectiveEvent {
|
|
102
|
-
data: ObjectivesAPI.ObjectiveEventData;
|
|
103
|
-
/**
|
|
104
|
-
* Metadata for ephemeral operations and activities (e.g., objectives, executions,
|
|
105
|
-
* runs)
|
|
106
|
-
*/
|
|
107
|
-
metadata: Shared.OperationMetadata;
|
|
108
|
-
contextWindowId?: string;
|
|
109
|
-
info?: ObjectivesAPI.ObjectiveEventInfo;
|
|
110
|
-
}
|
|
86
|
+
objectiveEvent: ObjectivesAPI.ObjectiveEvent;
|
|
111
87
|
}
|
|
112
88
|
}
|
|
113
89
|
export declare namespace Webhooks {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.mts","sourceRoot":"","sources":["../src/resources/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,6BAAyB;AAC/C,OAAO,KAAK,MAAM,qBAAiB;AACnC,OAAO,KAAK,aAAa,oCAAgC;AAGzD,qBAAa,QAAS,SAAQ,WAAW;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAIpD,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,kBAAkB;CAStB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,wBAAwB,CAAC;IACxC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"webhooks.d.mts","sourceRoot":"","sources":["../src/resources/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,6BAAyB;AAC/C,OAAO,KAAK,MAAM,qBAAiB;AACnC,OAAO,KAAK,aAAa,oCAAgC;AAGzD,qBAAa,QAAS,SAAQ,WAAW;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAIpD,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,kBAAkB;CAStB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,wBAAwB,CAAC;IACxC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC;KAC9C;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;IAE9B,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,kBAAkB,CAAC;IAClC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC;KAC9C;CACF;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,OAAO,EACL,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,kBAAkB,IAAI,kBAAkB,GAC9C,CAAC;CACH"}
|
package/resources/webhooks.d.ts
CHANGED
|
@@ -44,19 +44,7 @@ export declare namespace UnsafeUnwrapWebhookEvent {
|
|
|
44
44
|
* runs)
|
|
45
45
|
*/
|
|
46
46
|
objective: Shared.OperationMetadata;
|
|
47
|
-
objectiveEvent:
|
|
48
|
-
}
|
|
49
|
-
namespace Data {
|
|
50
|
-
interface ObjectiveEvent {
|
|
51
|
-
data: ObjectivesAPI.ObjectiveEventData;
|
|
52
|
-
/**
|
|
53
|
-
* Metadata for ephemeral operations and activities (e.g., objectives, executions,
|
|
54
|
-
* runs)
|
|
55
|
-
*/
|
|
56
|
-
metadata: Shared.OperationMetadata;
|
|
57
|
-
contextWindowId?: string;
|
|
58
|
-
info?: ObjectivesAPI.ObjectiveEventInfo;
|
|
59
|
-
}
|
|
47
|
+
objectiveEvent: ObjectivesAPI.ObjectiveEvent;
|
|
60
48
|
}
|
|
61
49
|
}
|
|
62
50
|
/**
|
|
@@ -95,19 +83,7 @@ export declare namespace UnwrapWebhookEvent {
|
|
|
95
83
|
* runs)
|
|
96
84
|
*/
|
|
97
85
|
objective: Shared.OperationMetadata;
|
|
98
|
-
objectiveEvent:
|
|
99
|
-
}
|
|
100
|
-
namespace Data {
|
|
101
|
-
interface ObjectiveEvent {
|
|
102
|
-
data: ObjectivesAPI.ObjectiveEventData;
|
|
103
|
-
/**
|
|
104
|
-
* Metadata for ephemeral operations and activities (e.g., objectives, executions,
|
|
105
|
-
* runs)
|
|
106
|
-
*/
|
|
107
|
-
metadata: Shared.OperationMetadata;
|
|
108
|
-
contextWindowId?: string;
|
|
109
|
-
info?: ObjectivesAPI.ObjectiveEventInfo;
|
|
110
|
-
}
|
|
86
|
+
objectiveEvent: ObjectivesAPI.ObjectiveEvent;
|
|
111
87
|
}
|
|
112
88
|
}
|
|
113
89
|
export declare namespace Webhooks {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/resources/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,4BAAyB;AAC/C,OAAO,KAAK,MAAM,oBAAiB;AACnC,OAAO,KAAK,aAAa,mCAAgC;AAGzD,qBAAa,QAAS,SAAQ,WAAW;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAIpD,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,kBAAkB;CAStB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,wBAAwB,CAAC;IACxC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/resources/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,4BAAyB;AAC/C,OAAO,KAAK,MAAM,oBAAiB;AACnC,OAAO,KAAK,aAAa,mCAAgC;AAGzD,qBAAa,QAAS,SAAQ,WAAW;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAIpD,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAClE,kBAAkB;CAStB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,wBAAwB,CAAC;IACxC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC;KAC9C;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;IAE9B,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yBAAiB,kBAAkB,CAAC;IAClC;;;OAGG;IACH,UAAiB,IAAI;QACnB;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAE/B;;WAEG;QACH,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAExC;;;WAGG;QACH,SAAS,EAAE,MAAM,CAAC,iBAAiB,CAAC;QAEpC,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC;KAC9C;CACF;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,OAAO,EACL,KAAK,wBAAwB,IAAI,wBAAwB,EACzD,KAAK,kBAAkB,IAAI,kBAAkB,GAC9C,CAAC;CACH"}
|
package/src/client.ts
CHANGED
|
@@ -141,20 +141,20 @@ import {
|
|
|
141
141
|
ObjectiveContextWindowData,
|
|
142
142
|
ObjectiveContextWindowsCursorPagination,
|
|
143
143
|
ObjectiveContinueParams,
|
|
144
|
-
ObjectiveContinueResponse,
|
|
145
144
|
ObjectiveCreateParams,
|
|
146
145
|
ObjectiveError,
|
|
146
|
+
ObjectiveEvent,
|
|
147
147
|
ObjectiveEventData,
|
|
148
148
|
ObjectiveEventInfo,
|
|
149
149
|
ObjectiveEventWebhookData,
|
|
150
|
+
ObjectiveEventsCursorPagination,
|
|
150
151
|
ObjectiveInfo,
|
|
151
152
|
ObjectiveListContextWindowsParams,
|
|
152
153
|
ObjectiveListEventsParams,
|
|
153
|
-
ObjectiveListEventsResponse,
|
|
154
|
-
ObjectiveListEventsResponsesCursorPagination,
|
|
155
154
|
ObjectiveListParams,
|
|
156
155
|
ObjectiveRetrieveParams,
|
|
157
156
|
ObjectiveSecret,
|
|
157
|
+
ObjectiveStreamEventsParams,
|
|
158
158
|
Objectives,
|
|
159
159
|
ObjectivesCursorPagination,
|
|
160
160
|
SubAgentSpawned,
|
|
@@ -1108,6 +1108,7 @@ export declare namespace Cadenya {
|
|
|
1108
1108
|
type ObjectiveContextWindow as ObjectiveContextWindow,
|
|
1109
1109
|
type ObjectiveContextWindowData as ObjectiveContextWindowData,
|
|
1110
1110
|
type ObjectiveError as ObjectiveError,
|
|
1111
|
+
type ObjectiveEvent as ObjectiveEvent,
|
|
1111
1112
|
type ObjectiveEventData as ObjectiveEventData,
|
|
1112
1113
|
type ObjectiveEventInfo as ObjectiveEventInfo,
|
|
1113
1114
|
type ObjectiveEventWebhookData as ObjectiveEventWebhookData,
|
|
@@ -1123,11 +1124,9 @@ export declare namespace Cadenya {
|
|
|
1123
1124
|
type ToolResult as ToolResult,
|
|
1124
1125
|
type UserMessage as UserMessage,
|
|
1125
1126
|
type ObjectiveCompactResponse as ObjectiveCompactResponse,
|
|
1126
|
-
type ObjectiveContinueResponse as ObjectiveContinueResponse,
|
|
1127
|
-
type ObjectiveListEventsResponse as ObjectiveListEventsResponse,
|
|
1128
1127
|
type ObjectivesCursorPagination as ObjectivesCursorPagination,
|
|
1129
1128
|
type ObjectiveContextWindowsCursorPagination as ObjectiveContextWindowsCursorPagination,
|
|
1130
|
-
type
|
|
1129
|
+
type ObjectiveEventsCursorPagination as ObjectiveEventsCursorPagination,
|
|
1131
1130
|
type ObjectiveCreateParams as ObjectiveCreateParams,
|
|
1132
1131
|
type ObjectiveRetrieveParams as ObjectiveRetrieveParams,
|
|
1133
1132
|
type ObjectiveListParams as ObjectiveListParams,
|
|
@@ -1136,6 +1135,7 @@ export declare namespace Cadenya {
|
|
|
1136
1135
|
type ObjectiveContinueParams as ObjectiveContinueParams,
|
|
1137
1136
|
type ObjectiveListContextWindowsParams as ObjectiveListContextWindowsParams,
|
|
1138
1137
|
type ObjectiveListEventsParams as ObjectiveListEventsParams,
|
|
1138
|
+
type ObjectiveStreamEventsParams as ObjectiveStreamEventsParams,
|
|
1139
1139
|
};
|
|
1140
1140
|
|
|
1141
1141
|
export {
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { CadenyaError } from './error';
|
|
2
|
+
import { type ReadableStream } from '../internal/shim-types';
|
|
3
|
+
import { makeReadableStream } from '../internal/shims';
|
|
4
|
+
import { findDoubleNewlineIndex, LineDecoder } from '../internal/decoders/line';
|
|
5
|
+
import { ReadableStreamToAsyncIterable } from '../internal/shims';
|
|
6
|
+
import { isAbortError } from '../internal/errors';
|
|
7
|
+
import { encodeUTF8 } from '../internal/utils/bytes';
|
|
8
|
+
import { loggerFor } from '../internal/utils/log';
|
|
9
|
+
import type { Cadenya } from '../client';
|
|
10
|
+
|
|
11
|
+
type Bytes = string | ArrayBuffer | Uint8Array | null | undefined;
|
|
12
|
+
|
|
13
|
+
export type ServerSentEvent = {
|
|
14
|
+
event: string | null;
|
|
15
|
+
data: string;
|
|
16
|
+
raw: string[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export class Stream<Item> implements AsyncIterable<Item> {
|
|
20
|
+
controller: AbortController;
|
|
21
|
+
#client: Cadenya | undefined;
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
private iterator: () => AsyncIterator<Item>,
|
|
25
|
+
controller: AbortController,
|
|
26
|
+
client?: Cadenya,
|
|
27
|
+
) {
|
|
28
|
+
this.controller = controller;
|
|
29
|
+
this.#client = client;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static fromSSEResponse<Item>(
|
|
33
|
+
response: Response,
|
|
34
|
+
controller: AbortController,
|
|
35
|
+
client?: Cadenya,
|
|
36
|
+
): Stream<Item> {
|
|
37
|
+
let consumed = false;
|
|
38
|
+
const logger = client ? loggerFor(client) : console;
|
|
39
|
+
|
|
40
|
+
async function* iterator(): AsyncIterator<Item, any, undefined> {
|
|
41
|
+
if (consumed) {
|
|
42
|
+
throw new CadenyaError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');
|
|
43
|
+
}
|
|
44
|
+
consumed = true;
|
|
45
|
+
let done = false;
|
|
46
|
+
try {
|
|
47
|
+
for await (const sse of _iterSSEMessages(response, controller)) {
|
|
48
|
+
try {
|
|
49
|
+
yield JSON.parse(sse.data) as Item;
|
|
50
|
+
} catch (e) {
|
|
51
|
+
logger.error(`Could not parse message into JSON:`, sse.data);
|
|
52
|
+
logger.error(`From chunk:`, sse.raw);
|
|
53
|
+
throw e;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
done = true;
|
|
57
|
+
} catch (e) {
|
|
58
|
+
// If the user calls `stream.controller.abort()`, we should exit without throwing.
|
|
59
|
+
if (isAbortError(e)) return;
|
|
60
|
+
throw e;
|
|
61
|
+
} finally {
|
|
62
|
+
// If the user `break`s, abort the ongoing request.
|
|
63
|
+
if (!done) controller.abort();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return new Stream(iterator, controller, client);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Generates a Stream from a newline-separated ReadableStream
|
|
72
|
+
* where each item is a JSON value.
|
|
73
|
+
*/
|
|
74
|
+
static fromReadableStream<Item>(
|
|
75
|
+
readableStream: ReadableStream,
|
|
76
|
+
controller: AbortController,
|
|
77
|
+
client?: Cadenya,
|
|
78
|
+
): Stream<Item> {
|
|
79
|
+
let consumed = false;
|
|
80
|
+
|
|
81
|
+
async function* iterLines(): AsyncGenerator<string, void, unknown> {
|
|
82
|
+
const lineDecoder = new LineDecoder();
|
|
83
|
+
|
|
84
|
+
const iter = ReadableStreamToAsyncIterable<Bytes>(readableStream);
|
|
85
|
+
for await (const chunk of iter) {
|
|
86
|
+
for (const line of lineDecoder.decode(chunk)) {
|
|
87
|
+
yield line;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
for (const line of lineDecoder.flush()) {
|
|
92
|
+
yield line;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async function* iterator(): AsyncIterator<Item, any, undefined> {
|
|
97
|
+
if (consumed) {
|
|
98
|
+
throw new CadenyaError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');
|
|
99
|
+
}
|
|
100
|
+
consumed = true;
|
|
101
|
+
let done = false;
|
|
102
|
+
try {
|
|
103
|
+
for await (const line of iterLines()) {
|
|
104
|
+
if (done) continue;
|
|
105
|
+
if (line) yield JSON.parse(line) as Item;
|
|
106
|
+
}
|
|
107
|
+
done = true;
|
|
108
|
+
} catch (e) {
|
|
109
|
+
// If the user calls `stream.controller.abort()`, we should exit without throwing.
|
|
110
|
+
if (isAbortError(e)) return;
|
|
111
|
+
throw e;
|
|
112
|
+
} finally {
|
|
113
|
+
// If the user `break`s, abort the ongoing request.
|
|
114
|
+
if (!done) controller.abort();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return new Stream(iterator, controller, client);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
[Symbol.asyncIterator](): AsyncIterator<Item> {
|
|
122
|
+
return this.iterator();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Splits the stream into two streams which can be
|
|
127
|
+
* independently read from at different speeds.
|
|
128
|
+
*/
|
|
129
|
+
tee(): [Stream<Item>, Stream<Item>] {
|
|
130
|
+
const left: Array<Promise<IteratorResult<Item>>> = [];
|
|
131
|
+
const right: Array<Promise<IteratorResult<Item>>> = [];
|
|
132
|
+
const iterator = this.iterator();
|
|
133
|
+
|
|
134
|
+
const teeIterator = (queue: Array<Promise<IteratorResult<Item>>>): AsyncIterator<Item> => {
|
|
135
|
+
return {
|
|
136
|
+
next: () => {
|
|
137
|
+
if (queue.length === 0) {
|
|
138
|
+
const result = iterator.next();
|
|
139
|
+
left.push(result);
|
|
140
|
+
right.push(result);
|
|
141
|
+
}
|
|
142
|
+
return queue.shift()!;
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return [
|
|
148
|
+
new Stream(() => teeIterator(left), this.controller, this.#client),
|
|
149
|
+
new Stream(() => teeIterator(right), this.controller, this.#client),
|
|
150
|
+
];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Converts this stream to a newline-separated ReadableStream of
|
|
155
|
+
* JSON stringified values in the stream
|
|
156
|
+
* which can be turned back into a Stream with `Stream.fromReadableStream()`.
|
|
157
|
+
*/
|
|
158
|
+
toReadableStream(): ReadableStream {
|
|
159
|
+
const self = this;
|
|
160
|
+
let iter: AsyncIterator<Item>;
|
|
161
|
+
|
|
162
|
+
return makeReadableStream({
|
|
163
|
+
async start() {
|
|
164
|
+
iter = self[Symbol.asyncIterator]();
|
|
165
|
+
},
|
|
166
|
+
async pull(ctrl: any) {
|
|
167
|
+
try {
|
|
168
|
+
const { value, done } = await iter.next();
|
|
169
|
+
if (done) return ctrl.close();
|
|
170
|
+
|
|
171
|
+
const bytes = encodeUTF8(JSON.stringify(value) + '\n');
|
|
172
|
+
|
|
173
|
+
ctrl.enqueue(bytes);
|
|
174
|
+
} catch (err) {
|
|
175
|
+
ctrl.error(err);
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
async cancel() {
|
|
179
|
+
await iter.return?.();
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export async function* _iterSSEMessages(
|
|
186
|
+
response: Response,
|
|
187
|
+
controller: AbortController,
|
|
188
|
+
): AsyncGenerator<ServerSentEvent, void, unknown> {
|
|
189
|
+
if (!response.body) {
|
|
190
|
+
controller.abort();
|
|
191
|
+
if (
|
|
192
|
+
typeof (globalThis as any).navigator !== 'undefined' &&
|
|
193
|
+
(globalThis as any).navigator.product === 'ReactNative'
|
|
194
|
+
) {
|
|
195
|
+
throw new CadenyaError(
|
|
196
|
+
`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`,
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
throw new CadenyaError(`Attempted to iterate over a response with no body`);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const sseDecoder = new SSEDecoder();
|
|
203
|
+
const lineDecoder = new LineDecoder();
|
|
204
|
+
|
|
205
|
+
const iter = ReadableStreamToAsyncIterable<Bytes>(response.body);
|
|
206
|
+
for await (const sseChunk of iterSSEChunks(iter)) {
|
|
207
|
+
for (const line of lineDecoder.decode(sseChunk)) {
|
|
208
|
+
const sse = sseDecoder.decode(line);
|
|
209
|
+
if (sse) yield sse;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
for (const line of lineDecoder.flush()) {
|
|
214
|
+
const sse = sseDecoder.decode(line);
|
|
215
|
+
if (sse) yield sse;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Given an async iterable iterator, iterates over it and yields full
|
|
221
|
+
* SSE chunks, i.e. yields when a double new-line is encountered.
|
|
222
|
+
*/
|
|
223
|
+
async function* iterSSEChunks(iterator: AsyncIterableIterator<Bytes>): AsyncGenerator<Uint8Array> {
|
|
224
|
+
let data = new Uint8Array();
|
|
225
|
+
|
|
226
|
+
for await (const chunk of iterator) {
|
|
227
|
+
if (chunk == null) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const binaryChunk =
|
|
232
|
+
chunk instanceof ArrayBuffer ? new Uint8Array(chunk)
|
|
233
|
+
: typeof chunk === 'string' ? encodeUTF8(chunk)
|
|
234
|
+
: chunk;
|
|
235
|
+
|
|
236
|
+
let newData = new Uint8Array(data.length + binaryChunk.length);
|
|
237
|
+
newData.set(data);
|
|
238
|
+
newData.set(binaryChunk, data.length);
|
|
239
|
+
data = newData;
|
|
240
|
+
|
|
241
|
+
let patternIndex;
|
|
242
|
+
while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {
|
|
243
|
+
yield data.slice(0, patternIndex);
|
|
244
|
+
data = data.slice(patternIndex);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (data.length > 0) {
|
|
249
|
+
yield data;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
class SSEDecoder {
|
|
254
|
+
private data: string[];
|
|
255
|
+
private event: string | null;
|
|
256
|
+
private chunks: string[];
|
|
257
|
+
|
|
258
|
+
constructor() {
|
|
259
|
+
this.event = null;
|
|
260
|
+
this.data = [];
|
|
261
|
+
this.chunks = [];
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
decode(line: string) {
|
|
265
|
+
if (line.endsWith('\r')) {
|
|
266
|
+
line = line.substring(0, line.length - 1);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (!line) {
|
|
270
|
+
// empty line and we didn't previously encounter any messages
|
|
271
|
+
if (!this.event && !this.data.length) return null;
|
|
272
|
+
|
|
273
|
+
const sse: ServerSentEvent = {
|
|
274
|
+
event: this.event,
|
|
275
|
+
data: this.data.join('\n'),
|
|
276
|
+
raw: this.chunks,
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
this.event = null;
|
|
280
|
+
this.data = [];
|
|
281
|
+
this.chunks = [];
|
|
282
|
+
|
|
283
|
+
return sse;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
this.chunks.push(line);
|
|
287
|
+
|
|
288
|
+
if (line.startsWith(':')) {
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
let [fieldname, _, value] = partition(line, ':');
|
|
293
|
+
|
|
294
|
+
if (value.startsWith(' ')) {
|
|
295
|
+
value = value.substring(1);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (fieldname === 'event') {
|
|
299
|
+
this.event = value;
|
|
300
|
+
} else if (fieldname === 'data') {
|
|
301
|
+
this.data.push(value);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function partition(str: string, delimiter: string): [string, string, string] {
|
|
309
|
+
const index = str.indexOf(delimiter);
|
|
310
|
+
if (index !== -1) {
|
|
311
|
+
return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return [str, '', ''];
|
|
315
|
+
}
|