pilotswarm-sdk 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-loader.d.ts +8 -6
- package/dist/agent-loader.d.ts.map +1 -1
- package/dist/agent-loader.js +5 -1
- package/dist/agent-loader.js.map +1 -1
- package/dist/facts-migrations.d.ts.map +1 -1
- package/dist/facts-migrations.js +176 -0
- package/dist/facts-migrations.js.map +1 -1
- package/dist/facts-store.d.ts +39 -12
- package/dist/facts-store.d.ts.map +1 -1
- package/dist/facts-store.js +76 -22
- package/dist/facts-store.js.map +1 -1
- package/dist/facts-tools.d.ts +4 -0
- package/dist/facts-tools.d.ts.map +1 -1
- package/dist/facts-tools.js +24 -16
- package/dist/facts-tools.js.map +1 -1
- package/dist/graph-tools.d.ts +8 -6
- package/dist/graph-tools.d.ts.map +1 -1
- package/dist/graph-tools.js +37 -26
- package/dist/graph-tools.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration/index.d.ts +2 -2
- package/dist/orchestration/index.js +1 -1
- package/dist/orchestration/lifecycle.d.ts.map +1 -1
- package/dist/orchestration/lifecycle.js +1 -0
- package/dist/orchestration/lifecycle.js.map +1 -1
- package/dist/orchestration/runtime.d.ts +1 -1
- package/dist/orchestration/runtime.d.ts.map +1 -1
- package/dist/orchestration/runtime.js +4 -0
- package/dist/orchestration/runtime.js.map +1 -1
- package/dist/orchestration-registry.d.ts.map +1 -1
- package/dist/orchestration-registry.js +4 -2
- package/dist/orchestration-registry.js.map +1 -1
- package/dist/orchestration-version.d.ts +1 -1
- package/dist/orchestration-version.js +1 -1
- package/dist/orchestration.d.ts +2 -2
- package/dist/orchestration.js +1 -1
- package/dist/orchestration_1_0_46.d.ts +1 -1
- package/dist/orchestration_1_0_47.d.ts +1 -1
- package/dist/orchestration_1_0_48.d.ts +1 -1
- package/dist/orchestration_1_0_49.d.ts +1 -1
- package/dist/orchestration_1_0_50.d.ts +1 -1
- package/dist/orchestration_1_0_53/agents.d.ts +41 -0
- package/dist/orchestration_1_0_53/agents.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/agents.js +758 -0
- package/dist/orchestration_1_0_53/agents.js.map +1 -0
- package/dist/orchestration_1_0_53/index.d.ts +24 -0
- package/dist/orchestration_1_0_53/index.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/index.js +13 -0
- package/dist/orchestration_1_0_53/index.js.map +1 -0
- package/dist/orchestration_1_0_53/lifecycle.d.ts +41 -0
- package/dist/orchestration_1_0_53/lifecycle.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/lifecycle.js +509 -0
- package/dist/orchestration_1_0_53/lifecycle.js.map +1 -0
- package/dist/orchestration_1_0_53/queue.d.ts +7 -0
- package/dist/orchestration_1_0_53/queue.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/queue.js +644 -0
- package/dist/orchestration_1_0_53/queue.js.map +1 -0
- package/dist/orchestration_1_0_53/runtime.d.ts +29 -0
- package/dist/orchestration_1_0_53/runtime.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/runtime.js +190 -0
- package/dist/orchestration_1_0_53/runtime.js.map +1 -0
- package/dist/orchestration_1_0_53/state.d.ts +125 -0
- package/dist/orchestration_1_0_53/state.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/state.js +105 -0
- package/dist/orchestration_1_0_53/state.js.map +1 -0
- package/dist/orchestration_1_0_53/turn.d.ts +6 -0
- package/dist/orchestration_1_0_53/turn.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/turn.js +864 -0
- package/dist/orchestration_1_0_53/turn.js.map +1 -0
- package/dist/orchestration_1_0_53/utils.d.ts +22 -0
- package/dist/orchestration_1_0_53/utils.d.ts.map +1 -0
- package/dist/orchestration_1_0_53/utils.js +226 -0
- package/dist/orchestration_1_0_53/utils.js.map +1 -0
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +3 -2
- package/dist/session-manager.js.map +1 -1
- package/dist/session-proxy.d.ts +22 -17
- package/dist/session-proxy.d.ts.map +1 -1
- package/dist/session-proxy.js +27 -23
- package/dist/session-proxy.js.map +1 -1
- package/dist/sweeper-tools.d.ts.map +1 -1
- package/dist/sweeper-tools.js +168 -52
- package/dist/sweeper-tools.js.map +1 -1
- package/dist/types.d.ts +10 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/worker.d.ts +8 -3
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +75 -5
- package/dist/worker.js.map +1 -1
- package/package.json +11 -1
- package/plugins/default-agents/agents/generic-crawler.agent.md +162 -0
- package/plugins/mgmt/agents/facts-manager.agent.md +2 -1
- package/plugins/mgmt/agents/sweeper.agent.md +6 -3
- package/plugins/mgmt/skills/sweeper/SKILL.md +4 -1
package/dist/session-proxy.d.ts
CHANGED
|
@@ -22,40 +22,44 @@ export declare function createSessionProxy(ctx: any, sessionId: string, affinity
|
|
|
22
22
|
};
|
|
23
23
|
export declare function buildRunTurnConfig(inputConfig: SerializableSessionConfig, hostname: string, fallbackAgentIdentity?: string): SerializableSessionConfig;
|
|
24
24
|
/**
|
|
25
|
-
* Derive the app-assigned
|
|
26
|
-
* (enhancedfactstore 07 §1.5 / P4 review BLOCKER#2).
|
|
25
|
+
* Derive the app-assigned CRAWLER role from the bound agent definition.
|
|
27
26
|
*
|
|
28
|
-
* The
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
27
|
+
* The crawler role is a property of the AGENT, not of a session: it is resolved
|
|
28
|
+
* from the worker's static, loaded agent definitions every turn by matching the
|
|
29
|
+
* session's resolved identity (agentIdentity / boundAgentName) against each
|
|
30
|
+
* agent's CANONICAL identifier (id / name). Because the agent list is static
|
|
31
|
+
* worker configuration, this is deterministic and replay-safe.
|
|
33
32
|
*
|
|
34
|
-
* Deriving it here (rather than trusting a persisted `
|
|
35
|
-
* role can NEVER be inherited from a parent session or
|
|
36
|
-
* serialized config — a child only becomes a
|
|
37
|
-
* declares `
|
|
38
|
-
*
|
|
33
|
+
* Deriving it here (rather than trusting a persisted `isCrawler` / legacy
|
|
34
|
+
* `isHarvester`) means the role can NEVER be inherited from a parent session or
|
|
35
|
+
* smuggled in via a stale serialized config — a child only becomes a crawler if
|
|
36
|
+
* its OWN bound agent declares `crawler: true` (or legacy `harvester: true`).
|
|
37
|
+
* System agents (e.g. facts-manager) that should be crawler-capable get the
|
|
38
|
+
* tools through the SessionManager gating, not here.
|
|
39
39
|
*
|
|
40
40
|
* SECURITY (P5 review BLOCKER#2): `title` is display metadata, NOT an
|
|
41
|
-
* authorization key — matching on it would let a non-
|
|
42
|
-
* normalizes to a
|
|
43
|
-
* (`facts_read_uncrawled` / `
|
|
41
|
+
* authorization key — matching on it would let a non-crawler whose title
|
|
42
|
+
* normalizes to a crawler's identity receive the privileged crawl queue
|
|
43
|
+
* (`facts_read_uncrawled` / `facts_set_crawled`, which read facts across ALL
|
|
44
44
|
* scopes). We match only `id` / `name`, and we FAIL CLOSED on ambiguity: when
|
|
45
45
|
* more than one loaded agent resolves to the same normalized identity, the
|
|
46
|
-
* privileged role is granted only if EVERY one
|
|
46
|
+
* privileged role is granted only if EVERY one declares the crawler role.
|
|
47
47
|
*/
|
|
48
|
-
export declare function
|
|
48
|
+
export declare function resolveCrawlerRole(identity: string | undefined, boundAgentName: string | undefined, userAgents?: Array<{
|
|
49
49
|
name?: string;
|
|
50
50
|
id?: string;
|
|
51
51
|
title?: string;
|
|
52
|
+
crawler?: boolean;
|
|
52
53
|
harvester?: boolean;
|
|
53
54
|
}>, systemAgents?: Array<{
|
|
54
55
|
name?: string;
|
|
55
56
|
id?: string;
|
|
56
57
|
title?: string;
|
|
58
|
+
crawler?: boolean;
|
|
57
59
|
harvester?: boolean;
|
|
58
60
|
}>): boolean;
|
|
61
|
+
/** @deprecated Use `resolveCrawlerRole`; retained for compatibility. */
|
|
62
|
+
export declare const resolveHarvesterRole: typeof resolveCrawlerRole;
|
|
59
63
|
export declare function createSessionManagerProxy(ctx: any): {
|
|
60
64
|
listModels(): any;
|
|
61
65
|
summarizeSession(sessionId: string): any;
|
|
@@ -130,6 +134,7 @@ userAgents?: Array<{
|
|
|
130
134
|
initialPrompt?: string;
|
|
131
135
|
splash?: string;
|
|
132
136
|
parent?: string;
|
|
137
|
+
crawler?: boolean;
|
|
133
138
|
harvester?: boolean;
|
|
134
139
|
promptLayerKind?: "app-agent" | "app-system-agent" | "pilotswarm-system-agent";
|
|
135
140
|
}>,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-proxy.d.ts","sourceRoot":"","sources":["../src/session-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAgC,KAAK,yBAAyB,EAA4C,MAAM,YAAY,CAAC;AACpI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUrD,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AA+Z1E,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,yBAAyB;oBAIjB,MAAM,cACF,OAAO,cACP,MAAM,aACP;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE;sBAsB3J,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;EAwCpE;AAED,wBAAgB,kBAAkB,CAC9B,WAAW,EAAE,yBAAyB,EACtC,QAAQ,EAAE,MAAM,EAChB,qBAAqB,CAAC,EAAE,MAAM,GAC/B,yBAAyB,CAc3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"session-proxy.d.ts","sourceRoot":"","sources":["../src/session-proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/session-proxy.js
CHANGED
|
@@ -429,30 +429,30 @@ export function buildRunTurnConfig(inputConfig, hostname, fallbackAgentIdentity)
|
|
|
429
429
|
return runConfig;
|
|
430
430
|
}
|
|
431
431
|
/**
|
|
432
|
-
* Derive the app-assigned
|
|
433
|
-
* (enhancedfactstore 07 §1.5 / P4 review BLOCKER#2).
|
|
432
|
+
* Derive the app-assigned CRAWLER role from the bound agent definition.
|
|
434
433
|
*
|
|
435
|
-
* The
|
|
436
|
-
*
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
434
|
+
* The crawler role is a property of the AGENT, not of a session: it is resolved
|
|
435
|
+
* from the worker's static, loaded agent definitions every turn by matching the
|
|
436
|
+
* session's resolved identity (agentIdentity / boundAgentName) against each
|
|
437
|
+
* agent's CANONICAL identifier (id / name). Because the agent list is static
|
|
438
|
+
* worker configuration, this is deterministic and replay-safe.
|
|
440
439
|
*
|
|
441
|
-
* Deriving it here (rather than trusting a persisted `
|
|
442
|
-
* role can NEVER be inherited from a parent session or
|
|
443
|
-
* serialized config — a child only becomes a
|
|
444
|
-
* declares `
|
|
445
|
-
*
|
|
440
|
+
* Deriving it here (rather than trusting a persisted `isCrawler` / legacy
|
|
441
|
+
* `isHarvester`) means the role can NEVER be inherited from a parent session or
|
|
442
|
+
* smuggled in via a stale serialized config — a child only becomes a crawler if
|
|
443
|
+
* its OWN bound agent declares `crawler: true` (or legacy `harvester: true`).
|
|
444
|
+
* System agents (e.g. facts-manager) that should be crawler-capable get the
|
|
445
|
+
* tools through the SessionManager gating, not here.
|
|
446
446
|
*
|
|
447
447
|
* SECURITY (P5 review BLOCKER#2): `title` is display metadata, NOT an
|
|
448
|
-
* authorization key — matching on it would let a non-
|
|
449
|
-
* normalizes to a
|
|
450
|
-
* (`facts_read_uncrawled` / `
|
|
448
|
+
* authorization key — matching on it would let a non-crawler whose title
|
|
449
|
+
* normalizes to a crawler's identity receive the privileged crawl queue
|
|
450
|
+
* (`facts_read_uncrawled` / `facts_set_crawled`, which read facts across ALL
|
|
451
451
|
* scopes). We match only `id` / `name`, and we FAIL CLOSED on ambiguity: when
|
|
452
452
|
* more than one loaded agent resolves to the same normalized identity, the
|
|
453
|
-
* privileged role is granted only if EVERY one
|
|
453
|
+
* privileged role is granted only if EVERY one declares the crawler role.
|
|
454
454
|
*/
|
|
455
|
-
export function
|
|
455
|
+
export function resolveCrawlerRole(identity, boundAgentName, userAgents, systemAgents) {
|
|
456
456
|
const norm = (v) => (v || "").toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
457
457
|
const target = norm(identity) || norm(boundAgentName);
|
|
458
458
|
if (!target)
|
|
@@ -465,10 +465,13 @@ export function resolveHarvesterRole(identity, boundAgentName, userAgents, syste
|
|
|
465
465
|
});
|
|
466
466
|
if (matches.length === 0)
|
|
467
467
|
return false;
|
|
468
|
+
const hasCrawlerRole = (agent) => agent.crawler === true || agent.harvester === true;
|
|
468
469
|
// Fail closed on a normalized-id/name collision: do not let an ambiguous
|
|
469
|
-
// match between a
|
|
470
|
-
return matches.every(
|
|
470
|
+
// match between a crawler and a non-crawler escalate to the role.
|
|
471
|
+
return matches.every(hasCrawlerRole);
|
|
471
472
|
}
|
|
473
|
+
/** @deprecated Use `resolveCrawlerRole`; retained for compatibility. */
|
|
474
|
+
export const resolveHarvesterRole = resolveCrawlerRole;
|
|
472
475
|
// ─── SessionManagerProxy ─────────────────────────────────────────
|
|
473
476
|
// The orchestration's view of the SessionManager singleton.
|
|
474
477
|
// Operations that don't require session affinity.
|
|
@@ -632,12 +635,13 @@ workerNodeId) {
|
|
|
632
635
|
fallbackAgentIdentity = row?.agentId ?? undefined;
|
|
633
636
|
}
|
|
634
637
|
const runConfig = buildRunTurnConfig(input.config, hostname, fallbackAgentIdentity);
|
|
635
|
-
// Derive the app-assigned
|
|
636
|
-
// agent definition EVERY turn
|
|
638
|
+
// Derive the app-assigned crawler role authoritatively from the bound
|
|
639
|
+
// agent definition EVERY turn.
|
|
637
640
|
// It is a property of the agent, resolved from static worker config, so
|
|
638
641
|
// it survives hydration, is replay-safe, and can never be inherited from
|
|
639
642
|
// a parent or trusted from a stale serialized config.
|
|
640
|
-
runConfig.
|
|
643
|
+
runConfig.isCrawler = resolveCrawlerRole(runConfig.agentIdentity, runConfig.boundAgentName, userAgents, systemAgents);
|
|
644
|
+
runConfig.isHarvester = runConfig.isCrawler;
|
|
641
645
|
const trace = activityTrace(activityCtx, "runTurn");
|
|
642
646
|
const failForMissingState = async (message) => {
|
|
643
647
|
if (catalog) {
|
|
@@ -881,7 +885,7 @@ workerNodeId) {
|
|
|
881
885
|
// still apply. The parent is responsible for closing
|
|
882
886
|
// each instance with complete_agent / cancel_agent /
|
|
883
887
|
// delete_agent when it no longer needs the child.
|
|
884
|
-
const { boundAgentName: _parentBoundAgentName, promptLayering: _parentPromptLayering, isHarvester: _parentIsHarvester, ...parentConfig } = input.config;
|
|
888
|
+
const { boundAgentName: _parentBoundAgentName, promptLayering: _parentPromptLayering, isCrawler: _parentIsCrawler, isHarvester: _parentIsHarvester, ...parentConfig } = input.config;
|
|
885
889
|
const childConfig = {
|
|
886
890
|
...parentConfig,
|
|
887
891
|
...(agentModel ? { model: agentModel } : {}),
|