@loopingai/core 0.3.0 → 0.4.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/README.md +83 -28
- package/dist/a2a/caller.d.ts +24 -0
- package/dist/a2a/caller.d.ts.map +1 -0
- package/dist/a2a/caller.js +34 -0
- package/dist/a2a/caller.js.map +1 -0
- package/dist/a2a/card.d.ts +7 -2
- package/dist/a2a/card.d.ts.map +1 -1
- package/dist/a2a/card.js +16 -7
- package/dist/a2a/card.js.map +1 -1
- package/dist/a2a/index.d.ts +15 -0
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +15 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/notify.d.ts +27 -5
- package/dist/a2a/notify.d.ts.map +1 -1
- package/dist/a2a/notify.js +18 -8
- package/dist/a2a/notify.js.map +1 -1
- package/dist/a2a/push.d.ts +71 -0
- package/dist/a2a/push.d.ts.map +1 -0
- package/dist/a2a/push.js +54 -0
- package/dist/a2a/push.js.map +1 -0
- package/dist/a2a/verify.d.ts +28 -36
- package/dist/a2a/verify.d.ts.map +1 -1
- package/dist/a2a/verify.js +20 -25
- package/dist/a2a/verify.js.map +1 -1
- package/dist/agent/index.d.ts +16 -5
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +16 -5
- package/dist/agent/index.js.map +1 -1
- package/dist/config.d.ts +49 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -3
- package/dist/config.js.map +1 -1
- package/dist/db/models/tasks.d.ts +19 -5
- package/dist/db/models/tasks.d.ts.map +1 -1
- package/dist/db/models/tasks.js +38 -8
- package/dist/db/models/tasks.js.map +1 -1
- package/dist/host/agent.d.ts +217 -0
- package/dist/host/agent.d.ts.map +1 -0
- package/dist/host/agent.js +306 -0
- package/dist/host/agent.js.map +1 -0
- package/dist/host/index.d.ts +21 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +20 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/plugin-host.d.ts +47 -0
- package/dist/host/plugin-host.d.ts.map +1 -0
- package/dist/host/plugin-host.js +2 -0
- package/dist/host/plugin-host.js.map +1 -0
- package/dist/round/agent.d.ts +267 -0
- package/dist/round/agent.d.ts.map +1 -0
- package/dist/round/agent.js +691 -0
- package/dist/round/agent.js.map +1 -0
- package/dist/round/index.d.ts +25 -0
- package/dist/round/index.d.ts.map +1 -0
- package/dist/round/index.js +24 -0
- package/dist/round/index.js.map +1 -0
- package/dist/round/policy.d.ts +99 -0
- package/dist/round/policy.d.ts.map +1 -0
- package/dist/round/policy.js +2 -0
- package/dist/round/policy.js.map +1 -0
- package/dist/round/subagent.d.ts +67 -0
- package/dist/round/subagent.d.ts.map +1 -0
- package/dist/round/subagent.js +91 -0
- package/dist/round/subagent.js.map +1 -0
- package/dist/round/turn.d.ts +231 -0
- package/dist/round/turn.d.ts.map +1 -0
- package/dist/round/turn.js +497 -0
- package/dist/round/turn.js.map +1 -0
- package/dist/round/workflow.d.ts +109 -0
- package/dist/round/workflow.d.ts.map +1 -0
- package/dist/round/workflow.js +316 -0
- package/dist/round/workflow.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/testing/auth.d.ts.map +1 -1
- package/dist/testing/auth.js +10 -7
- package/dist/testing/auth.js.map +1 -1
- package/dist/testing/fixtures.d.ts +17 -0
- package/dist/testing/fixtures.d.ts.map +1 -1
- package/dist/testing/fixtures.js +17 -0
- package/dist/testing/fixtures.js.map +1 -1
- package/dist/testing/harness.d.ts +98 -0
- package/dist/testing/harness.d.ts.map +1 -0
- package/dist/testing/harness.js +139 -0
- package/dist/testing/harness.js.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/vcr-store.d.ts +14 -18
- package/dist/testing/vcr-store.d.ts.map +1 -1
- package/dist/testing/vcr-store.js +30 -30
- package/dist/testing/vcr-store.js.map +1 -1
- package/dist/worker/define-agent.d.ts +124 -0
- package/dist/worker/define-agent.d.ts.map +1 -0
- package/dist/worker/define-agent.js +21 -0
- package/dist/worker/define-agent.js.map +1 -0
- package/dist/worker/index.d.ts +29 -4
- package/dist/worker/index.d.ts.map +1 -1
- package/dist/worker/index.js +70 -12
- package/dist/worker/index.js.map +1 -1
- package/package.json +20 -6
package/dist/worker/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AGENT_CARD_PATH, SendMessageRequest } from "@a2a-js/sdk";
|
|
2
2
|
import { DefaultRequestHandler, JsonRpcTransportHandler, validateVersion } from "@a2a-js/sdk/server";
|
|
3
3
|
import { RequestMalformedError, toJsonRpcError } from "@a2a-js/sdk/errors";
|
|
4
|
+
import { JWKS_PATH, endpointUrl } from "@loopingai/a2a-protocol";
|
|
4
5
|
import { A2A_RPC_PATH, buildBaseCard, parsePrivateJwk, publicCardJwks, signCard, signCardInPlace } from "../a2a/card.js";
|
|
5
6
|
import { buildCallContext, extensionHeaders } from "../a2a/context.js";
|
|
6
7
|
import { GatewayAuthError, bearerToken, verifyGatewayToken } from "../a2a/verify.js";
|
|
@@ -58,8 +59,17 @@ import { parseGatewayOrigins } from "../env.js";
|
|
|
58
59
|
* agent on it*. The second is what makes `tenant` more than an unauthenticated
|
|
59
60
|
* routing hint in the request body.
|
|
60
61
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
export { defineAgent } from "./define-agent.js";
|
|
63
|
+
/**
|
|
64
|
+
* Default path serving the card-signing public JWKS (the card's `jku`).
|
|
65
|
+
*
|
|
66
|
+
* From `@loopingai/a2a-protocol`, because the gateway serves its own JWKS at
|
|
67
|
+
* the same path and fetches ours from whatever `jku` says — see
|
|
68
|
+
* {@link file://../a2a/verify.ts} for why the two sides share a package rather
|
|
69
|
+
* than a comment. Re-exported so this stays importable from
|
|
70
|
+
* `@loopingai/core/worker`, where it has always lived.
|
|
71
|
+
*/
|
|
72
|
+
export { JWKS_PATH } from "@loopingai/a2a-protocol";
|
|
63
73
|
/** The JSON-RPC method carrying a turn (v1.0 renamed v0.3's `message/send`). */
|
|
64
74
|
const SEND_MESSAGE_METHOD = "SendMessage";
|
|
65
75
|
function unauthorized(reason) {
|
|
@@ -124,14 +134,45 @@ function pushConfigError(rpcBody) {
|
|
|
124
134
|
return undefined;
|
|
125
135
|
}
|
|
126
136
|
export function createA2AWorker(options) {
|
|
127
|
-
|
|
128
|
-
|
|
137
|
+
// Normalized once, here, because each of these is used for two things that
|
|
138
|
+
// must agree: routing compares it against `url.pathname`, and `endpointUrl`
|
|
139
|
+
// composes it into the card's interface URL and the expected audience. A
|
|
140
|
+
// configured path written without its leading slash used to satisfy neither —
|
|
141
|
+
// `url.pathname` always has one, so the route simply never matched, and the
|
|
142
|
+
// audience came out as `https://hostpath`. Normalizing at the split keeps the
|
|
143
|
+
// two derivations from disagreeing whichever way it is written.
|
|
144
|
+
const withSlash = (path) => path.startsWith("/") ? path : `/${path}`;
|
|
145
|
+
const jwksPath = withSlash(options.jwksPath ?? JWKS_PATH);
|
|
146
|
+
const rpcPath = withSlash(options.rpcPath ?? A2A_RPC_PATH);
|
|
129
147
|
const requirePushConfig = options.requirePushConfig ?? true;
|
|
148
|
+
const declared = options.tenants ?? {};
|
|
149
|
+
const defined = options.agents ?? [];
|
|
150
|
+
// A tenant declared both ways is ambiguous, and silently letting one win is how
|
|
151
|
+
// a deployment serves an agent nobody meant to mount. Caught at startup.
|
|
152
|
+
const duplicate = defined.find((a) => Object.hasOwn(declared, a.tenant));
|
|
153
|
+
if (duplicate) {
|
|
154
|
+
throw new Error(`createA2AWorker got tenant '${duplicate.tenant}' from both \`agents\` and ` +
|
|
155
|
+
"`tenants` — declare each agent once");
|
|
156
|
+
}
|
|
157
|
+
// …and the same ambiguity within `agents` alone, which the check above cannot
|
|
158
|
+
// see. `definedByTenant` below is a `Map`, so a repeated id silently keeps the
|
|
159
|
+
// *last* entry: two `defineAgent` calls sharing a tenant would mount one and
|
|
160
|
+
// discard the other with no signal anywhere. That is the identical failure the
|
|
161
|
+
// cross-check exists to prevent, reached by copy-pasting a declaration rather
|
|
162
|
+
// than by mixing the two forms — which is the likelier mistake of the two.
|
|
163
|
+
const seen = new Set();
|
|
164
|
+
for (const agent of defined) {
|
|
165
|
+
if (seen.has(agent.tenant)) {
|
|
166
|
+
throw new Error(`createA2AWorker got tenant '${agent.tenant}' twice in \`agents\` — ` +
|
|
167
|
+
"declare each agent once");
|
|
168
|
+
}
|
|
169
|
+
seen.add(agent.tenant);
|
|
170
|
+
}
|
|
130
171
|
// Nothing can be served without at least one agent, and a deployment that
|
|
131
172
|
// configured none is a startup mistake rather than a per-request one.
|
|
132
|
-
const tenantIds = Object.keys(
|
|
173
|
+
const tenantIds = [...Object.keys(declared), ...defined.map((a) => a.tenant)];
|
|
133
174
|
if (tenantIds.length === 0) {
|
|
134
|
-
throw new Error("createA2AWorker requires at least one
|
|
175
|
+
throw new Error("createA2AWorker requires at least one agent — pass `agents` or `tenants`");
|
|
135
176
|
}
|
|
136
177
|
// …and one registered under `""` is the same mistake wearing a disguise. A
|
|
137
178
|
// request must name a tenant, and the empty string is how "named none" is
|
|
@@ -143,13 +184,30 @@ export function createA2AWorker(options) {
|
|
|
143
184
|
throw new Error("createA2AWorker requires every tenant id to be non-empty: a request " +
|
|
144
185
|
"names its tenant, so an agent registered under '' can never be reached");
|
|
145
186
|
}
|
|
187
|
+
const definedByTenant = new Map(defined.map((a) => [a.tenant, a]));
|
|
146
188
|
// The tenant id is caller-controlled, so the lookup is by *own* property.
|
|
147
189
|
// Plain indexing reaches `Object.prototype`, and every inherited name —
|
|
148
190
|
// `toString`, `constructor`, `__proto__` — comes back truthy, so a tenant
|
|
149
191
|
// called one of those slips past an `if (!agent)` guard and only fails later
|
|
150
192
|
// when a function is read off it. That is a 500 where the whole point of the
|
|
151
|
-
// guard is a 400 naming the unknown tenant.
|
|
152
|
-
|
|
193
|
+
// guard is a 400 naming the unknown tenant. (A `Map` has no such inheritance,
|
|
194
|
+
// so the `agents` half needs no equivalent guard.)
|
|
195
|
+
//
|
|
196
|
+
// Takes `env` because a `defineAgent` entry resolves its bindings from it —
|
|
197
|
+
// there is no `env` at module scope on Workers, so the closure is built per
|
|
198
|
+
// request rather than at construction.
|
|
199
|
+
const tenantAgent = (env, id) => {
|
|
200
|
+
if (Object.hasOwn(declared, id))
|
|
201
|
+
return declared[id];
|
|
202
|
+
const agent = definedByTenant.get(id);
|
|
203
|
+
if (!agent)
|
|
204
|
+
return undefined;
|
|
205
|
+
return {
|
|
206
|
+
manifest: agent.manifest,
|
|
207
|
+
resolveAgent: (identity) => agent.resolveAgent(env, identity),
|
|
208
|
+
startTurn: (turn) => agent.startTurn(env, turn)
|
|
209
|
+
};
|
|
210
|
+
};
|
|
153
211
|
// Only reachable through the first overload, which has already established
|
|
154
212
|
// that `TEnv` carries the two documented names.
|
|
155
213
|
const readSecrets = options.secrets ??
|
|
@@ -166,9 +224,9 @@ export function createA2AWorker(options) {
|
|
|
166
224
|
// value checked here are the same string by construction.
|
|
167
225
|
const audience = typeof options.audience === "function"
|
|
168
226
|
? options.audience(url)
|
|
169
|
-
: (options.audience ??
|
|
227
|
+
: (options.audience ?? endpointUrl(origin, rpcPath));
|
|
170
228
|
const privateJwk = parsePrivateJwk(secrets.signingKey);
|
|
171
|
-
const signing = { privateJwk, jku:
|
|
229
|
+
const signing = { privateJwk, jku: endpointUrl(origin, jwksPath) };
|
|
172
230
|
const cardFor = (manifest, tenant) => buildBaseCard(manifest, {
|
|
173
231
|
origin,
|
|
174
232
|
rpcPath: options.rpcPath,
|
|
@@ -252,7 +310,7 @@ export function createA2AWorker(options) {
|
|
|
252
310
|
return unauthorized(`gateway token authorizes tenant '${authorizedTenant || "<none>"}', ` +
|
|
253
311
|
`but the request addressed '${requestedTenant}'`);
|
|
254
312
|
}
|
|
255
|
-
const agent = tenantAgent(requestedTenant);
|
|
313
|
+
const agent = tenantAgent(env, requestedTenant);
|
|
256
314
|
if (!agent) {
|
|
257
315
|
return jsonRpcErrorResponse(body, toJsonRpcError(new RequestMalformedError(`unknown tenant '${requestedTenant}'`)));
|
|
258
316
|
}
|
|
@@ -297,7 +355,7 @@ export function createA2AWorker(options) {
|
|
|
297
355
|
// already authorized and routed on.
|
|
298
356
|
async (ctx) => {
|
|
299
357
|
const requested = ctx.tenant ?? "";
|
|
300
|
-
const target = tenantAgent(requested);
|
|
358
|
+
const target = tenantAgent(env, requested);
|
|
301
359
|
if (!target) {
|
|
302
360
|
throw new RequestMalformedError(`unknown tenant '${requested}'`);
|
|
303
361
|
}
|
package/dist/worker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,QAAQ,EACR,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAoB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,QAAQ,EACR,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAoB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,WAAW,CAAC;AAGpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EACL,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,aAAa,CAAC;AA4I1C,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,QAAQ,CAAC,iBAAiB,MAAM,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,kBAAkB,EAAE,8BAA8B,EAAE;KAChE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,oBAAoB,CAC3B,IAAa,EACb,KAAwC;IAExC,MAAM,EAAE,GAAI,IAA+C,EAAE,EAAE,IAAI,IAAI,CAAC;IACxE,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,OAGxB;IACC,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAE7D,2EAA2E;IAC3E,0EAA0E;IAC1E,qEAAqE;IACrE,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,8CAA+C,GAAa,CAAC,OAAO,EAAE,CAAC;IAChF,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;IACpE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;QACrB,OAAO,CACL,uEAAuE;YACvE,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CACL,0EAA0E;YAC1E,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,oEAAoE,UAAU,CAAC,GAAG,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AA+BD,MAAM,UAAU,eAAe,CAC7B,OAA+B;IAE/B,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,IAAI,YAAY,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACrC,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,+BAA+B,SAAS,CAAC,MAAM,6BAA6B;YAC1E,qCAAqC,CACxC,CAAC;IACJ,CAAC;IACD,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,CAAC,MAAM,0BAA0B;gBACnE,yBAAyB,CAC5B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,oCAAoC;IACpC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,sEAAsE;YACpE,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,mDAAmD;IACnD,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,uCAAuC;IACvC,MAAM,WAAW,GAAG,CAAC,GAAS,EAAE,EAAU,EAA2B,EAAE;QACrE,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YAAE,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;YAC7D,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;SAChD,CAAC;IACJ,CAAC,CAAC;IACF,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,WAAW,GACf,OAAO,CAAC,OAAO;QACf,CAAC,CAAC,GAAS,EAAc,EAAE,CAAC,CAAC;YAC3B,UAAU,EAAG,GAAqB,CAAC,eAAe;YAClD,cAAc,EAAG,GAAqB,CAAC,eAAe;SACvD,CAAC,CAAC,CAAC;IAEN,OAAO,KAAK,UAAU,KAAK,CAAC,OAAgB,EAAE,GAAS;QACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,4EAA4E;QAC5E,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,QAAQ,GACZ,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;YACpC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,CAAC,QAAuB,EAAE,MAAe,EAAE,EAAE,CAC3D,aAAa,CAAC,QAAQ,EAAE;YACtB,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,MAAM;SACP,CAAC,CAAC;QAEL,qEAAqE;QACrE,6DAA6D;QAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBAC/C,OAAO,EAAE,EAAE,eAAe,EAAE,sBAAsB,EAAE;aACrD,CAAC,CAAC;QACL,CAAC;QAED,oEAAoE;QACpE,wEAAwE;QACxE,uDAAuD;QACvD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,6EAA6E;QAC7E,EAAE;QACF,2EAA2E;QAC3E,6EAA6E;QAC7E,uEAAuE;QACvE,4EAA4E;QAC5E,4BAA4B;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO,YAAY,CAAC,8BAA8B,CAAC,CAAC;YAEhE,IAAI,QAAyB,CAAC;YAC9B,IAAI,gBAAwB,CAAC;YAC7B,IAAI,CAAC;gBACH,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAkB,CAChE,KAAK,EACL;oBACE,cAAc,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC3D,QAAQ;oBACR,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC,CACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GACX,GAAG,YAAY,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;gBACxE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,0EAA0E;YAC1E,qEAAqE;YACrE,wDAAwD;YACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAClB,OAAO,IAAI,QAAQ,CAAC,2CAA2C,EAAE;oBAC/D,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAoC,CAAC;YACpE,2EAA2E;YAC3E,wEAAwE;YACxE,mEAAmE;YACnE,wEAAwE;YACxE,MAAM,OAAO,GAAG,CACd,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACb,CAAC;YAE3C,uEAAuE;YACvE,sEAAsE;YACtE,yEAAyE;YACzE,wEAAwE;YACxE,eAAe;YACf,MAAM,eAAe,GAClB,OAAO,CAAC,MAA2C,EAAE,MAAM,IAAI,EAAE,CAAC;YACrE,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC5D,OAAO,oBAAoB,CACzB,IAAI,EACJ,cAAc,CACZ,IAAI,qBAAqB,CACvB,iEAAiE;oBAC/D,0DAA0D;oBAC1D,sDAAsD;oBACtD,kDAAkD,CACrD,CACF,CACF,CAAC;YACJ,CAAC;YAED,wEAAwE;YACxE,2CAA2C;YAC3C,EAAE;YACF,wEAAwE;YACxE,oEAAoE;YACpE,uEAAuE;YACvE,wEAAwE;YACxE,sEAAsE;YACtE,8CAA8C;YAC9C,IAAI,gBAAgB,KAAK,eAAe,EAAE,CAAC;gBACzC,OAAO,YAAY,CACjB,oCAAoC,gBAAgB,IAAI,QAAQ,KAAK;oBACnE,8BAA8B,eAAe,GAAG,CACnD,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,oBAAoB,CACzB,IAAI,EACJ,cAAc,CACZ,IAAI,qBAAqB,CAAC,mBAAmB,eAAe,GAAG,CAAC,CACjE,CACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAErE,yEAAyE;YACzE,uEAAuE;YACvE,yEAAyE;YACzE,yEAAyE;YACzE,uEAAuE;YACvE,cAAc;YACd,IAAI,CAAC;gBACH,eAAe,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wEAAwE;gBACxE,OAAO,oBAAoB,CACzB,IAAI,EACJ,uBAAuB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAC/C,CAAC;YACJ,CAAC;YAED,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,aAAa,EAAE,CAAC;oBAClB,kEAAkE;oBAClE,OAAO,oBAAoB,CACzB,IAAI,EACJ,cAAc,CAAC,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC,CACzD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,qBAAqB,CACvC,IAAI,EACJ,IAAI,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,EAClD,IAAI,WAAW,CAAC;gBACd,QAAQ;gBACR,GAAG,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;gBAC3B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,EACF,SAAS,EACT,SAAS,EACT,SAAS;YACT,sEAAsE;YACtE,wDAAwD;YACxD,EAAE;YACF,sEAAsE;YACtE,mEAAmE;YACnE,uEAAuE;YACvE,iEAAiE;YACjE,EAAE;YACF,oEAAoE;YACpE,kEAAkE;YAClE,oCAAoC;YACpC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACZ,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,qBAAqB,CAAC,mBAAmB,SAAS,GAAG,CAAC,CAAC;gBACnE,CAAC;gBACD,OAAO,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,CAAC,CACF,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE/C,iEAAiE;YACjE,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;gBACnC,OAAO,IAAI,QAAQ,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopingai/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Shared, mandatory foundation for Looping agents on Cloudflare Workers: zero-trust A2A, durable task lifecycle, delegation and subagent runtime, test harness.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"a2a",
|
|
@@ -53,6 +53,14 @@
|
|
|
53
53
|
"types": "./dist/agent/index.d.ts",
|
|
54
54
|
"import": "./dist/agent/index.js"
|
|
55
55
|
},
|
|
56
|
+
"./host": {
|
|
57
|
+
"types": "./dist/host/index.d.ts",
|
|
58
|
+
"import": "./dist/host/index.js"
|
|
59
|
+
},
|
|
60
|
+
"./round": {
|
|
61
|
+
"types": "./dist/round/index.d.ts",
|
|
62
|
+
"import": "./dist/round/index.js"
|
|
63
|
+
},
|
|
56
64
|
"./subtasks": {
|
|
57
65
|
"types": "./dist/subtasks/index.d.ts",
|
|
58
66
|
"import": "./dist/subtasks/index.js"
|
|
@@ -100,15 +108,16 @@
|
|
|
100
108
|
},
|
|
101
109
|
"dependencies": {
|
|
102
110
|
"@a2a-js/sdk": "^1.0.0",
|
|
103
|
-
"@cloudflare/workers-types": "^5.
|
|
111
|
+
"@cloudflare/workers-types": "^5.20260804.1",
|
|
112
|
+
"@loopingai/a2a-protocol": "^0.2.0",
|
|
104
113
|
"drizzle-orm": "^0.45.2",
|
|
105
|
-
"jose": "^6.2.
|
|
114
|
+
"jose": "^6.2.8",
|
|
106
115
|
"zod": "^4.4.3"
|
|
107
116
|
},
|
|
108
117
|
"peerDependencies": {
|
|
109
118
|
"@cloudflare/vitest-pool-workers": ">=0.18",
|
|
110
119
|
"agents": "^0.20.0",
|
|
111
|
-
"ai": "^7.0.
|
|
120
|
+
"ai": "^7.0.52",
|
|
112
121
|
"vitest": ">=4",
|
|
113
122
|
"workers-ai-provider": "^4.0.0"
|
|
114
123
|
},
|
|
@@ -124,12 +133,12 @@
|
|
|
124
133
|
"@cloudflare/vitest-pool-workers": "^0.20.1",
|
|
125
134
|
"@types/node": "^26.1.1",
|
|
126
135
|
"agents": "^0.20.0",
|
|
127
|
-
"ai": "^7.0.
|
|
136
|
+
"ai": "^7.0.52",
|
|
128
137
|
"drizzle-kit": "^0.31.10",
|
|
129
138
|
"eslint": "^10.8.0",
|
|
130
139
|
"prettier": "^3.9.6",
|
|
131
140
|
"typescript": "^6.0.3",
|
|
132
|
-
"typescript-eslint": "^8.
|
|
141
|
+
"typescript-eslint": "^8.66.0",
|
|
133
142
|
"vitest": "^4.1.10",
|
|
134
143
|
"workers-ai-provider": "^4.0.0",
|
|
135
144
|
"wrangler": "^4.118.0"
|
|
@@ -140,6 +149,11 @@
|
|
|
140
149
|
"publishConfig": {
|
|
141
150
|
"access": "public"
|
|
142
151
|
},
|
|
152
|
+
"overrides": {
|
|
153
|
+
"@esbuild-kit/core-utils": {
|
|
154
|
+
"esbuild": "^0.25.0"
|
|
155
|
+
}
|
|
156
|
+
},
|
|
143
157
|
"allowScripts": {
|
|
144
158
|
"esbuild": false,
|
|
145
159
|
"fsevents": false,
|