pilotswarm-sdk 0.1.28 → 0.1.30
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 +12 -0
- package/dist/agent-loader.d.ts.map +1 -1
- package/dist/agent-loader.js +20 -0
- package/dist/agent-loader.js.map +1 -1
- package/dist/child-notifications.d.ts +76 -0
- package/dist/child-notifications.d.ts.map +1 -0
- package/dist/child-notifications.js +181 -0
- package/dist/child-notifications.js.map +1 -0
- package/dist/client.d.ts +4 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +42 -8
- package/dist/client.js.map +1 -1
- package/dist/cms-migrations.d.ts.map +1 -1
- package/dist/cms-migrations.js +1333 -0
- package/dist/cms-migrations.js.map +1 -1
- package/dist/cms.d.ts +210 -3
- package/dist/cms.d.ts.map +1 -1
- package/dist/cms.js +232 -14
- package/dist/cms.js.map +1 -1
- package/dist/cron-at.d.ts +100 -0
- package/dist/cron-at.d.ts.map +1 -0
- package/dist/cron-at.js +414 -0
- package/dist/cron-at.js.map +1 -0
- package/dist/duroxide-provider-factory.d.ts +23 -0
- package/dist/duroxide-provider-factory.d.ts.map +1 -0
- package/dist/duroxide-provider-factory.js +38 -0
- package/dist/duroxide-provider-factory.js.map +1 -0
- package/dist/facts-tools.d.ts +6 -0
- package/dist/facts-tools.d.ts.map +1 -1
- package/dist/facts-tools.js +31 -3
- package/dist/facts-tools.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/managed-session.d.ts.map +1 -1
- package/dist/managed-session.js +425 -28
- package/dist/managed-session.js.map +1 -1
- package/dist/management-client.d.ts +75 -4
- package/dist/management-client.d.ts.map +1 -1
- package/dist/management-client.js +348 -34
- package/dist/management-client.js.map +1 -1
- package/dist/orchestration/agents.d.ts.map +1 -1
- package/dist/orchestration/agents.js +16 -4
- package/dist/orchestration/agents.js.map +1 -1
- package/dist/orchestration/lifecycle.d.ts +5 -1
- package/dist/orchestration/lifecycle.d.ts.map +1 -1
- package/dist/orchestration/lifecycle.js +62 -7
- package/dist/orchestration/lifecycle.js.map +1 -1
- package/dist/orchestration/queue.d.ts.map +1 -1
- package/dist/orchestration/queue.js +64 -2
- package/dist/orchestration/queue.js.map +1 -1
- package/dist/orchestration/runtime.js.map +1 -1
- package/dist/orchestration/state.d.ts +3 -1
- package/dist/orchestration/state.d.ts.map +1 -1
- package/dist/orchestration/state.js +1 -0
- package/dist/orchestration/state.js.map +1 -1
- package/dist/orchestration/turn.d.ts.map +1 -1
- package/dist/orchestration/turn.js +152 -15
- package/dist/orchestration/turn.js.map +1 -1
- package/dist/orchestration.js +1 -1
- package/dist/pg-pool-factory.d.ts +48 -9
- package/dist/pg-pool-factory.d.ts.map +1 -1
- package/dist/pg-pool-factory.js +50 -22
- package/dist/pg-pool-factory.js.map +1 -1
- package/dist/prompt-layering.d.ts +3 -0
- package/dist/prompt-layering.d.ts.map +1 -1
- package/dist/prompt-layering.js +17 -1
- package/dist/prompt-layering.js.map +1 -1
- package/dist/prompt-layers.d.ts +45 -0
- package/dist/prompt-layers.d.ts.map +1 -0
- package/dist/prompt-layers.js +44 -0
- package/dist/prompt-layers.js.map +1 -0
- package/dist/session-manager.d.ts +5 -0
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +57 -5
- package/dist/session-manager.js.map +1 -1
- package/dist/session-messages.d.ts +32 -0
- package/dist/session-messages.d.ts.map +1 -0
- package/dist/session-messages.js +121 -0
- package/dist/session-messages.js.map +1 -0
- package/dist/session-proxy.d.ts +3 -0
- package/dist/session-proxy.d.ts.map +1 -1
- package/dist/session-proxy.js +401 -7
- package/dist/session-proxy.js.map +1 -1
- package/dist/system-agents.d.ts +45 -0
- package/dist/system-agents.d.ts.map +1 -0
- package/dist/system-agents.js +212 -0
- package/dist/system-agents.js.map +1 -0
- package/dist/types.d.ts +168 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/worker.d.ts +17 -10
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +73 -131
- package/dist/worker.js.map +1 -1
- package/package.json +6 -5
- package/plugins/mgmt/agents/agent-tuner.agent.md +6 -7
- package/plugins/mgmt/agents/facts-manager.agent.md +10 -7
- package/plugins/mgmt/agents/pilotswarm.agent.md +6 -10
- package/plugins/mgmt/agents/resourcemgr.agent.md +8 -8
- package/plugins/mgmt/agents/sweeper.agent.md +5 -3
- package/plugins/mgmt/skills/orchestration-session-lifecycle/SKILL.md +8 -8
- package/plugins/mgmt/skills/resourcemgr/SKILL.md +3 -3
- package/plugins/mgmt/skills/sweeper/SKILL.md +2 -2
- package/plugins/system/agents/default.agent.md +27 -7
- package/plugins/system/skills/durable-timers/SKILL.md +16 -3
- package/plugins/system/skills/sub-agents/SKILL.md +23 -3
package/dist/agent-loader.d.ts
CHANGED
|
@@ -50,6 +50,18 @@ export interface AgentConfig {
|
|
|
50
50
|
namespace?: string;
|
|
51
51
|
/** Internal: identifies which prompt layering path this agent should use. */
|
|
52
52
|
promptLayerKind?: "app-agent" | "app-system-agent" | "pilotswarm-system-agent";
|
|
53
|
+
/**
|
|
54
|
+
* Frontmatter schema version. Defaults to 1 when the file omits it. Higher integers
|
|
55
|
+
* indicate forward-incompatible frontmatter shapes the loader may reject in the future.
|
|
56
|
+
*/
|
|
57
|
+
schemaVersion?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Author-supplied version label for this agent definition. PilotSwarm-authored system
|
|
60
|
+
* agents use SemVer; app authors may use any meaningful non-empty string.
|
|
61
|
+
*/
|
|
62
|
+
version?: string;
|
|
63
|
+
/** Absolute path the agent was loaded from, when known. Used for diagnostics. */
|
|
64
|
+
sourcePath?: string;
|
|
53
65
|
}
|
|
54
66
|
/**
|
|
55
67
|
* Load all .agent.md files from a directory and convert to CustomAgentConfig[].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../src/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYpD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAclF;AAID,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qGAAqG;IACrG,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qHAAqH;IACrH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,WAAW,GAAG,kBAAkB,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../src/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYpD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAclF;AAID,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qGAAqG;IACrG,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qHAAqH;IACrH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,WAAW,GAAG,kBAAkB,GAAG,yBAAyB,CAAC;IAC/E;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAoHD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CA6D/D"}
|
package/dist/agent-loader.js
CHANGED
|
@@ -137,6 +137,13 @@ function parseAgentFrontmatter(content) {
|
|
|
137
137
|
meta.title = value;
|
|
138
138
|
else if (key === "parent")
|
|
139
139
|
meta.parent = value;
|
|
140
|
+
else if (key === "schemaVersion") {
|
|
141
|
+
const n = Number(value);
|
|
142
|
+
if (Number.isFinite(n) && n > 0)
|
|
143
|
+
meta.schemaVersion = Math.floor(n);
|
|
144
|
+
}
|
|
145
|
+
else if (key === "version")
|
|
146
|
+
meta.version = value;
|
|
140
147
|
else if (key === "tools" && value) {
|
|
141
148
|
// Inline array: tools: [view, grep]
|
|
142
149
|
meta.tools = value.replace(/[\[\]]/g, "").split(",").map(s => s.trim()).filter(Boolean);
|
|
@@ -190,6 +197,10 @@ export function loadAgentFiles(agentsDir) {
|
|
|
190
197
|
console.warn(`[agent-loader] Skipping ${entry.name}: empty prompt body`);
|
|
191
198
|
continue;
|
|
192
199
|
}
|
|
200
|
+
if (meta.schemaVersion !== undefined && meta.schemaVersion !== 1) {
|
|
201
|
+
console.warn(`[agent-loader] Skipping ${entry.name}: unsupported schemaVersion ${meta.schemaVersion}; expected schemaVersion: 1`);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
193
204
|
agents.push({
|
|
194
205
|
name: meta.name,
|
|
195
206
|
description: meta.description,
|
|
@@ -201,7 +212,16 @@ export function loadAgentFiles(agentsDir) {
|
|
|
201
212
|
parent: meta.parent,
|
|
202
213
|
splash: meta.splash,
|
|
203
214
|
initialPrompt: meta.initialPrompt,
|
|
215
|
+
schemaVersion: meta.schemaVersion,
|
|
216
|
+
version: meta.version,
|
|
217
|
+
sourcePath: filePath,
|
|
204
218
|
});
|
|
219
|
+
if (meta.schemaVersion === undefined) {
|
|
220
|
+
console.warn(`[agent-loader] ${entry.name}: missing frontmatter 'schemaVersion'. Defaulting to 1; add 'schemaVersion: 1' to silence this warning.`);
|
|
221
|
+
}
|
|
222
|
+
if (!meta.version) {
|
|
223
|
+
console.warn(`[agent-loader] ${entry.name}: missing frontmatter 'version'. Add 'version: x.y.z' (or any non-empty label) to track agent prompt changes.`);
|
|
224
|
+
}
|
|
205
225
|
}
|
|
206
226
|
catch (err) {
|
|
207
227
|
console.warn(`[agent-loader] Failed to parse ${entry.name}: ${err.message}`);
|
package/dist/agent-loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../src/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,0BAA0B,CAAC;SAClC,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;KACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB,EAAE,IAAY;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,gCAAgC,CAAC;SACxC,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;KACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loader.js","sourceRoot":"","sources":["../src/agent-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Child notification policy helpers.
|
|
3
|
+
*
|
|
4
|
+
* Implements the decision logic described in the
|
|
5
|
+
* "Child Contract Notification Policy" proposal:
|
|
6
|
+
*
|
|
7
|
+
* - `wakeOn: "any"` - wake parent for any child update
|
|
8
|
+
* - `wakeOn: "material_change"` - wake parent for material changes only
|
|
9
|
+
* (default; suppresses clear heartbeats)
|
|
10
|
+
* - `wakeOn: "completion"` - wake parent only on terminal/blocked/error
|
|
11
|
+
*
|
|
12
|
+
* `wakeOn` only controls AUTONOMOUS parent wakeups. Explicit parent tools such
|
|
13
|
+
* as `check_agents` and `wait_for_agents` always reveal child state regardless
|
|
14
|
+
* of policy.
|
|
15
|
+
*
|
|
16
|
+
* This module is intentionally pure and side-effect-free so it is easy to
|
|
17
|
+
* unit test and safe to call from orchestration helpers.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import type { ChildSessionResult, ChildSessionContract } from "./types.js";
|
|
22
|
+
export type ChildWakePolicy = "any" | "material_change" | "completion";
|
|
23
|
+
export type ChildUpdateClassification = "heartbeat" | "material" | "completion" | "error" | "unknown";
|
|
24
|
+
/** Compact representation of a child update suitable for wake-decision logic. */
|
|
25
|
+
export interface ChildUpdateSnapshot {
|
|
26
|
+
/** Kind of orchestration update being delivered to the parent. */
|
|
27
|
+
kind: "completed" | "wait" | "progress" | "error" | "cancelled";
|
|
28
|
+
/** Last assistant content / summary text emitted by the child. */
|
|
29
|
+
summary?: string;
|
|
30
|
+
/** Structured child result if available (final or interim). */
|
|
31
|
+
result?: Partial<ChildSessionResult>;
|
|
32
|
+
/** Optional explicit material flag from the child (overrides classifier). */
|
|
33
|
+
material?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Default policy when a contract is missing or unset. */
|
|
36
|
+
export declare const DEFAULT_CHILD_WAKE_POLICY: ChildWakePolicy;
|
|
37
|
+
/** Normalize an arbitrary input value to a valid `ChildWakePolicy`. */
|
|
38
|
+
export declare function normalizeWakeOn(value: unknown): ChildWakePolicy;
|
|
39
|
+
/** Read `wakeOn` off a contract (or a contract-shaped record) safely. */
|
|
40
|
+
export declare function readWakeOn(contract: Partial<ChildSessionContract> | Record<string, unknown> | null | undefined): ChildWakePolicy;
|
|
41
|
+
/**
|
|
42
|
+
* Conservative no-op classifier.
|
|
43
|
+
*
|
|
44
|
+
* Returns true only for clear heartbeat/no-op text. Unknown / arbitrary
|
|
45
|
+
* natural-language summaries default to material under `material_change`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isHeartbeatText(text: string | undefined): boolean;
|
|
48
|
+
/** Classify a child update for wake-decision purposes. */
|
|
49
|
+
export declare function classifyChildUpdate(update: ChildUpdateSnapshot): ChildUpdateClassification;
|
|
50
|
+
export interface ParentWakeDecisionInput {
|
|
51
|
+
update: ChildUpdateSnapshot;
|
|
52
|
+
contract?: Partial<ChildSessionContract> | Record<string, unknown> | null;
|
|
53
|
+
}
|
|
54
|
+
export interface ParentWakeDecision {
|
|
55
|
+
wake: boolean;
|
|
56
|
+
policy: ChildWakePolicy;
|
|
57
|
+
classification: ChildUpdateClassification;
|
|
58
|
+
reason: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Decide whether the parent session should be woken for the given child update.
|
|
62
|
+
*
|
|
63
|
+
* The conservative rule: when the helper cannot confidently classify an
|
|
64
|
+
* update as a heartbeat under `material_change`, it wakes the parent
|
|
65
|
+
* rather than risk silently swallowing important work.
|
|
66
|
+
*/
|
|
67
|
+
export declare function shouldWakeParentForChildUpdate(input: ParentWakeDecisionInput): ParentWakeDecision;
|
|
68
|
+
/**
|
|
69
|
+
* Evaluate a batch of pending child updates against the parent's active wait.
|
|
70
|
+
*
|
|
71
|
+
* Used as the digest-defense guard described in the proposal: a heartbeat-only
|
|
72
|
+
* batch should not interrupt an active parent cron wait; a mixed batch with
|
|
73
|
+
* any material update wakes the parent.
|
|
74
|
+
*/
|
|
75
|
+
export declare function shouldWakeParentForChildDigest(updates: Array<ParentWakeDecisionInput>): ParentWakeDecision;
|
|
76
|
+
//# sourceMappingURL=child-notifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-notifications.d.ts","sourceRoot":"","sources":["../src/child-notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAuB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhG,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAEvE,MAAM,MAAM,yBAAyB,GAC/B,WAAW,GACX,UAAU,GACV,YAAY,GACZ,OAAO,GACP,SAAS,CAAC;AAEhB,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAChC,kEAAkE;IAClE,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;IAChE,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB,EAAE,eAAmC,CAAC;AAI5E,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAS/D;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe,CAGhI;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAiCjE;AAWD,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,CAgC1F;AAED,MAAM,WAAW,uBAAuB;IACpC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7E;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,yBAAyB,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAoBjG;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,KAAK,CAAC,uBAAuB,CAAC,GAAG,kBAAkB,CAW1G"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Child notification policy helpers.
|
|
3
|
+
*
|
|
4
|
+
* Implements the decision logic described in the
|
|
5
|
+
* "Child Contract Notification Policy" proposal:
|
|
6
|
+
*
|
|
7
|
+
* - `wakeOn: "any"` - wake parent for any child update
|
|
8
|
+
* - `wakeOn: "material_change"` - wake parent for material changes only
|
|
9
|
+
* (default; suppresses clear heartbeats)
|
|
10
|
+
* - `wakeOn: "completion"` - wake parent only on terminal/blocked/error
|
|
11
|
+
*
|
|
12
|
+
* `wakeOn` only controls AUTONOMOUS parent wakeups. Explicit parent tools such
|
|
13
|
+
* as `check_agents` and `wait_for_agents` always reveal child state regardless
|
|
14
|
+
* of policy.
|
|
15
|
+
*
|
|
16
|
+
* This module is intentionally pure and side-effect-free so it is easy to
|
|
17
|
+
* unit test and safe to call from orchestration helpers.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
/** Default policy when a contract is missing or unset. */
|
|
22
|
+
export const DEFAULT_CHILD_WAKE_POLICY = "material_change";
|
|
23
|
+
const ALL_POLICIES = new Set(["any", "material_change", "completion"]);
|
|
24
|
+
/** Normalize an arbitrary input value to a valid `ChildWakePolicy`. */
|
|
25
|
+
export function normalizeWakeOn(value) {
|
|
26
|
+
if (typeof value !== "string")
|
|
27
|
+
return DEFAULT_CHILD_WAKE_POLICY;
|
|
28
|
+
const lower = value.trim().toLowerCase();
|
|
29
|
+
if (ALL_POLICIES.has(lower))
|
|
30
|
+
return lower;
|
|
31
|
+
// tolerant aliases
|
|
32
|
+
if (lower === "always" || lower === "all")
|
|
33
|
+
return "any";
|
|
34
|
+
if (lower === "material" || lower === "change")
|
|
35
|
+
return "material_change";
|
|
36
|
+
if (lower === "done" || lower === "finished")
|
|
37
|
+
return "completion";
|
|
38
|
+
return DEFAULT_CHILD_WAKE_POLICY;
|
|
39
|
+
}
|
|
40
|
+
/** Read `wakeOn` off a contract (or a contract-shaped record) safely. */
|
|
41
|
+
export function readWakeOn(contract) {
|
|
42
|
+
if (!contract || typeof contract !== "object")
|
|
43
|
+
return DEFAULT_CHILD_WAKE_POLICY;
|
|
44
|
+
return normalizeWakeOn(contract["wakeOn"]);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Conservative no-op classifier.
|
|
48
|
+
*
|
|
49
|
+
* Returns true only for clear heartbeat/no-op text. Unknown / arbitrary
|
|
50
|
+
* natural-language summaries default to material under `material_change`.
|
|
51
|
+
*/
|
|
52
|
+
export function isHeartbeatText(text) {
|
|
53
|
+
if (!text)
|
|
54
|
+
return false;
|
|
55
|
+
const trimmed = text.trim().toLowerCase();
|
|
56
|
+
if (!trimmed)
|
|
57
|
+
return true;
|
|
58
|
+
// Common short heartbeat phrases.
|
|
59
|
+
const heartbeats = [
|
|
60
|
+
"no change",
|
|
61
|
+
"no changes",
|
|
62
|
+
"no drift",
|
|
63
|
+
"no new change",
|
|
64
|
+
"no new changes",
|
|
65
|
+
"no new reportable change",
|
|
66
|
+
"no new reportable changes",
|
|
67
|
+
"no update",
|
|
68
|
+
"no updates",
|
|
69
|
+
"nothing to report",
|
|
70
|
+
"nothing new",
|
|
71
|
+
"cycle quiet",
|
|
72
|
+
"quiet cycle",
|
|
73
|
+
"still watching",
|
|
74
|
+
"still monitoring",
|
|
75
|
+
"no material change",
|
|
76
|
+
"no material changes",
|
|
77
|
+
"heartbeat",
|
|
78
|
+
"unchanged",
|
|
79
|
+
"no_change",
|
|
80
|
+
];
|
|
81
|
+
if (heartbeats.includes(trimmed))
|
|
82
|
+
return true;
|
|
83
|
+
// Allow short statements that start with a heartbeat phrase + trailing punctuation.
|
|
84
|
+
for (const h of heartbeats) {
|
|
85
|
+
if (trimmed === h + "." || trimmed === h + "!")
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const TERMINAL_VERDICTS = new Set([
|
|
91
|
+
"success",
|
|
92
|
+
"partial",
|
|
93
|
+
"blocked",
|
|
94
|
+
"failed",
|
|
95
|
+
"cancelled",
|
|
96
|
+
"timed_out",
|
|
97
|
+
]);
|
|
98
|
+
/** Classify a child update for wake-decision purposes. */
|
|
99
|
+
export function classifyChildUpdate(update) {
|
|
100
|
+
if (update.kind === "error")
|
|
101
|
+
return "error";
|
|
102
|
+
// Treat cancelled as completion for routing purposes (parent should know).
|
|
103
|
+
if (update.kind === "cancelled")
|
|
104
|
+
return "completion";
|
|
105
|
+
// Completed turn with a recognized terminal verdict.
|
|
106
|
+
if (update.kind === "completed") {
|
|
107
|
+
const verdict = update.result?.verdict;
|
|
108
|
+
if (verdict && TERMINAL_VERDICTS.has(verdict)) {
|
|
109
|
+
if (verdict === "blocked" || verdict === "failed" || verdict === "timed_out")
|
|
110
|
+
return "completion";
|
|
111
|
+
return "completion";
|
|
112
|
+
}
|
|
113
|
+
// Completed turn without a verdict — treat as material so parent sees the summary.
|
|
114
|
+
return update.material === false && isHeartbeatText(update.summary) ? "heartbeat" : "material";
|
|
115
|
+
}
|
|
116
|
+
// Explicit material flag from the child wins.
|
|
117
|
+
if (update.material === true)
|
|
118
|
+
return "material";
|
|
119
|
+
if (update.material === false)
|
|
120
|
+
return "heartbeat";
|
|
121
|
+
// Structured verdict hints during a wait/progress turn.
|
|
122
|
+
const verdictHint = update.result?.verdict;
|
|
123
|
+
if (typeof verdictHint === "string") {
|
|
124
|
+
const v = verdictHint.toLowerCase();
|
|
125
|
+
if (v === "heartbeat" || v === "unchanged" || v === "no_change")
|
|
126
|
+
return "heartbeat";
|
|
127
|
+
}
|
|
128
|
+
// Fall back to text classification.
|
|
129
|
+
if (isHeartbeatText(update.summary))
|
|
130
|
+
return "heartbeat";
|
|
131
|
+
if (!update.summary)
|
|
132
|
+
return "unknown";
|
|
133
|
+
return "material";
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Decide whether the parent session should be woken for the given child update.
|
|
137
|
+
*
|
|
138
|
+
* The conservative rule: when the helper cannot confidently classify an
|
|
139
|
+
* update as a heartbeat under `material_change`, it wakes the parent
|
|
140
|
+
* rather than risk silently swallowing important work.
|
|
141
|
+
*/
|
|
142
|
+
export function shouldWakeParentForChildUpdate(input) {
|
|
143
|
+
const policy = readWakeOn(input.contract ?? null);
|
|
144
|
+
const classification = classifyChildUpdate(input.update);
|
|
145
|
+
if (policy === "any") {
|
|
146
|
+
return { wake: true, policy, classification, reason: "policy=any" };
|
|
147
|
+
}
|
|
148
|
+
if (policy === "completion") {
|
|
149
|
+
if (classification === "completion" || classification === "error") {
|
|
150
|
+
return { wake: true, policy, classification, reason: `policy=completion classification=${classification}` };
|
|
151
|
+
}
|
|
152
|
+
return { wake: false, policy, classification, reason: `policy=completion classification=${classification}` };
|
|
153
|
+
}
|
|
154
|
+
// material_change (default)
|
|
155
|
+
if (classification === "heartbeat") {
|
|
156
|
+
return { wake: false, policy, classification, reason: "policy=material_change classification=heartbeat" };
|
|
157
|
+
}
|
|
158
|
+
return { wake: true, policy, classification, reason: `policy=material_change classification=${classification}` };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Evaluate a batch of pending child updates against the parent's active wait.
|
|
162
|
+
*
|
|
163
|
+
* Used as the digest-defense guard described in the proposal: a heartbeat-only
|
|
164
|
+
* batch should not interrupt an active parent cron wait; a mixed batch with
|
|
165
|
+
* any material update wakes the parent.
|
|
166
|
+
*/
|
|
167
|
+
export function shouldWakeParentForChildDigest(updates) {
|
|
168
|
+
if (updates.length === 0) {
|
|
169
|
+
return { wake: false, policy: DEFAULT_CHILD_WAKE_POLICY, classification: "unknown", reason: "empty digest" };
|
|
170
|
+
}
|
|
171
|
+
let firstHeartbeat;
|
|
172
|
+
for (const u of updates) {
|
|
173
|
+
const d = shouldWakeParentForChildUpdate(u);
|
|
174
|
+
if (d.wake)
|
|
175
|
+
return d;
|
|
176
|
+
if (!firstHeartbeat)
|
|
177
|
+
firstHeartbeat = d;
|
|
178
|
+
}
|
|
179
|
+
return firstHeartbeat;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=child-notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-notifications.js","sourceRoot":"","sources":["../src/child-notifications.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -49,6 +49,8 @@ export declare class PilotSwarmClient {
|
|
|
49
49
|
agentId?: string;
|
|
50
50
|
/** Authenticated owner to associate with the new session. */
|
|
51
51
|
owner?: SessionOwnerInfo | null;
|
|
52
|
+
/** Optional visual session group assignment. */
|
|
53
|
+
groupId?: string | null;
|
|
52
54
|
}): Promise<PilotSwarmSession>;
|
|
53
55
|
/**
|
|
54
56
|
* Create a session bound to a named agent.
|
|
@@ -68,6 +70,7 @@ export declare class PilotSwarmClient {
|
|
|
68
70
|
splash?: string;
|
|
69
71
|
initialPrompt?: string;
|
|
70
72
|
owner?: SessionOwnerInfo | null;
|
|
73
|
+
groupId?: string | null;
|
|
71
74
|
}): Promise<PilotSwarmSession>;
|
|
72
75
|
/**
|
|
73
76
|
* Create a system session (e.g. Sweeper Agent).
|
|
@@ -183,7 +186,7 @@ export declare class PilotSwarmSession {
|
|
|
183
186
|
cancelPendingMessage(clientMessageIds: string[]): Promise<void>;
|
|
184
187
|
abort(): Promise<void>;
|
|
185
188
|
destroy(): Promise<void>;
|
|
186
|
-
/** Get
|
|
189
|
+
/** Get a provider-capped latest page of persisted events from CMS. Use event paging to drain complete history. */
|
|
187
190
|
getMessages(limit?: number): Promise<SessionEvent[]>;
|
|
188
191
|
getInfo(): Promise<PilotSwarmSessionInfo>;
|
|
189
192
|
private _startPolling;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,uBAAuB,EACvB,oBAAoB,EAGpB,qBAAqB,EAErB,gBAAgB,EAIhB,gBAAgB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -2,6 +2,7 @@ import { RESPONSE_LATEST_KEY, } from "./types.js";
|
|
|
2
2
|
import { DURABLE_SESSION_LATEST_VERSION, DURABLE_SESSION_ORCHESTRATION_NAME, } from "./orchestration-registry.js";
|
|
3
3
|
import { PgSessionCatalogProvider } from "./cms.js";
|
|
4
4
|
import { createFactStoreForUrl } from "./facts-store.js";
|
|
5
|
+
import { createDuroxidePostgresProvider } from "./duroxide-provider-factory.js";
|
|
5
6
|
import { deriveStatusFromCmsAndRuntime, shouldSyncCompletedStatus, shouldSyncFailedStatus } from "./session-status.js";
|
|
6
7
|
// duroxide is CommonJS — use createRequire for ESM compatibility
|
|
7
8
|
import { createRequire } from "node:module";
|
|
@@ -108,6 +109,7 @@ export class PilotSwarmClient {
|
|
|
108
109
|
reasoningEffort: config?.reasoningEffort,
|
|
109
110
|
parentSessionId: config?.parentSessionId,
|
|
110
111
|
owner: config?.owner ?? null,
|
|
112
|
+
groupId: config?.groupId ?? null,
|
|
111
113
|
});
|
|
112
114
|
// Track parentSessionId for sub-agent orchestration input
|
|
113
115
|
if (config?.parentSessionId) {
|
|
@@ -147,6 +149,7 @@ export class PilotSwarmClient {
|
|
|
147
149
|
boundAgentName: agentName,
|
|
148
150
|
promptLayering: { kind: "app-agent" },
|
|
149
151
|
owner: opts?.owner ?? null,
|
|
152
|
+
groupId: opts?.groupId ?? null,
|
|
150
153
|
});
|
|
151
154
|
// Set agent metadata in CMS (agentId + prefixed title)
|
|
152
155
|
const shortId = session.sessionId.slice(0, 8);
|
|
@@ -258,6 +261,10 @@ export class PilotSwarmClient {
|
|
|
258
261
|
isSystem: row.isSystem || undefined,
|
|
259
262
|
agentId: row.agentId ?? undefined,
|
|
260
263
|
splash: row.splash ?? undefined,
|
|
264
|
+
groupId: row.groupId ?? undefined,
|
|
265
|
+
shortSummary: row.shortSummary ?? undefined,
|
|
266
|
+
summaryState: row.summaryState ?? undefined,
|
|
267
|
+
summaryUpdatedAt: row.summaryUpdatedAt ?? undefined,
|
|
261
268
|
}));
|
|
262
269
|
}
|
|
263
270
|
async deleteSession(sessionId) {
|
|
@@ -311,10 +318,13 @@ export class PilotSwarmClient {
|
|
|
311
318
|
const _trace = this.config.traceWriter ?? (() => { });
|
|
312
319
|
const startedAt = Date.now();
|
|
313
320
|
const trace = (message) => _trace(`[+${Date.now() - startedAt}ms] ${message}`);
|
|
314
|
-
// CMS + facts may use a
|
|
315
|
-
//
|
|
316
|
-
//
|
|
317
|
-
//
|
|
321
|
+
// CMS + facts may use a separate URL when running with AAD/MI
|
|
322
|
+
// (passwordless URL whose `user@` segment is the federated UAMI's
|
|
323
|
+
// display name). Defaults to `store` for the legacy
|
|
324
|
+
// connection-string path. The duroxide orchestration store
|
|
325
|
+
// honours the same MI switch via duroxide-node's native Entra
|
|
326
|
+
// path; CMS/facts go through the pg-pool factory using
|
|
327
|
+
// `DefaultAzureCredential`.
|
|
318
328
|
const cmsFactsUrl = this.config.cmsFactsDatabaseUrl ?? store;
|
|
319
329
|
const useMi = this.config.useManagedIdentity ?? false;
|
|
320
330
|
const aadUser = this.config.aadDbUser;
|
|
@@ -325,9 +335,9 @@ export class PilotSwarmClient {
|
|
|
325
335
|
else if (store.startsWith("sqlite://"))
|
|
326
336
|
provider = SqliteProvider.open(store);
|
|
327
337
|
else if (store.startsWith("postgres://") || store.startsWith("postgresql://")) {
|
|
328
|
-
trace("[client]
|
|
329
|
-
provider = await PostgresProvider
|
|
330
|
-
trace("[client]
|
|
338
|
+
trace("[client] duroxide provider connect start...");
|
|
339
|
+
provider = await createDuroxidePostgresProvider(PostgresProvider, store, this.config.duroxideSchema ?? DEFAULT_DUROXIDE_SCHEMA, { useManagedIdentity: useMi, aadUser });
|
|
340
|
+
trace("[client] duroxide provider connect done");
|
|
331
341
|
}
|
|
332
342
|
else {
|
|
333
343
|
throw new Error(`Unsupported store URL: ${store}`);
|
|
@@ -545,6 +555,21 @@ export class PilotSwarmClient {
|
|
|
545
555
|
: null;
|
|
546
556
|
const cronActive = customStatus.cronActive === true;
|
|
547
557
|
const cronInterval = typeof customStatus.cronInterval === "number" ? customStatus.cronInterval : undefined;
|
|
558
|
+
const cronKind = cronActive && (customStatus.cronKind === "wall-clock" || customStatus.cronKind === "interval")
|
|
559
|
+
? customStatus.cronKind
|
|
560
|
+
: undefined;
|
|
561
|
+
const cronNextFireAt = cronActive && typeof customStatus.cronNextFireAt === "number"
|
|
562
|
+
? customStatus.cronNextFireAt
|
|
563
|
+
: undefined;
|
|
564
|
+
const cronTimezone = cronActive && typeof customStatus.cronTimezone === "string"
|
|
565
|
+
? customStatus.cronTimezone
|
|
566
|
+
: undefined;
|
|
567
|
+
const cronMaxFires = cronActive && typeof customStatus.cronMaxFires === "number"
|
|
568
|
+
? customStatus.cronMaxFires
|
|
569
|
+
: undefined;
|
|
570
|
+
const cronFiresCompleted = cronActive && typeof customStatus.cronFiresCompleted === "number"
|
|
571
|
+
? customStatus.cronFiresCompleted
|
|
572
|
+
: undefined;
|
|
548
573
|
const status = deriveStatusFromCmsAndRuntime({
|
|
549
574
|
row: cmsRow,
|
|
550
575
|
customStatus,
|
|
@@ -607,6 +632,10 @@ export class PilotSwarmClient {
|
|
|
607
632
|
title: cmsRow?.title ?? undefined,
|
|
608
633
|
agentId: cmsRow?.agentId ?? undefined,
|
|
609
634
|
owner: cmsRow?.owner ?? undefined,
|
|
635
|
+
groupId: cmsRow?.groupId ?? undefined,
|
|
636
|
+
shortSummary: cmsRow?.shortSummary ?? undefined,
|
|
637
|
+
summaryState: cmsRow?.summaryState ?? undefined,
|
|
638
|
+
summaryUpdatedAt: cmsRow?.summaryUpdatedAt ?? undefined,
|
|
610
639
|
createdAt: cmsRow?.createdAt ?? new Date(),
|
|
611
640
|
updatedAt: cmsRow?.updatedAt ?? new Date(),
|
|
612
641
|
iterations: customStatus.iteration ?? cmsRow?.currentIteration ?? 0,
|
|
@@ -625,6 +654,11 @@ export class PilotSwarmClient {
|
|
|
625
654
|
waitReason: customStatus.waitReason,
|
|
626
655
|
cronActive,
|
|
627
656
|
cronInterval,
|
|
657
|
+
cronKind,
|
|
658
|
+
cronNextFireAt,
|
|
659
|
+
cronTimezone,
|
|
660
|
+
cronMaxFires,
|
|
661
|
+
cronFiresCompleted,
|
|
628
662
|
cronReason: typeof customStatus.cronReason === "string" ? customStatus.cronReason : undefined,
|
|
629
663
|
contextUsage: customStatus?.contextUsage && typeof customStatus.contextUsage === "object"
|
|
630
664
|
? customStatus.contextUsage
|
|
@@ -876,7 +910,7 @@ export class PilotSwarmSession {
|
|
|
876
910
|
this._stopPolling();
|
|
877
911
|
await this.client.deleteSession(this.sessionId);
|
|
878
912
|
}
|
|
879
|
-
/** Get
|
|
913
|
+
/** Get a provider-capped latest page of persisted events from CMS. Use event paging to drain complete history. */
|
|
880
914
|
async getMessages(limit) {
|
|
881
915
|
const catalog = this.client._getCatalog();
|
|
882
916
|
return catalog.getSessionEvents(this.sessionId, undefined, limit);
|