instar 1.3.1339 → 1.3.1340
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +119 -13
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +15 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +14 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +6 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/types.d.ts +20 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/monitoring/A2ARedeliverySentinel.d.ts +145 -6
- package/dist/monitoring/A2ARedeliverySentinel.d.ts.map +1 -1
- package/dist/monitoring/A2ARedeliverySentinel.js +451 -11
- package/dist/monitoring/A2ARedeliverySentinel.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +4 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +65 -4
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +71 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/dist/threadline/A2ADeliveryTracker.d.ts +55 -1
- package/dist/threadline/A2ADeliveryTracker.d.ts.map +1 -1
- package/dist/threadline/A2ADeliveryTracker.js +97 -5
- package/dist/threadline/A2ADeliveryTracker.js.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.d.ts +15 -0
- package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.js +3 -0
- package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
- package/dist/threadline/client/ThreadlineClient.d.ts +47 -0
- package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
- package/dist/threadline/client/ThreadlineClient.js +93 -0
- package/dist/threadline/client/ThreadlineClient.js.map +1 -1
- package/dist/threadline/mcp-http-client.d.ts.map +1 -1
- package/dist/threadline/mcp-http-client.js +2 -0
- package/dist/threadline/mcp-http-client.js.map +1 -1
- package/dist/threadline/peerDark.d.ts +165 -0
- package/dist/threadline/peerDark.d.ts.map +1 -0
- package/dist/threadline/peerDark.js +204 -0
- package/dist/threadline/peerDark.js.map +1 -0
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +63 -63
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +4 -0
- package/upgrades/1.3.1340.md +32 -0
- package/upgrades/side-effects/a2a-peer-dark-reporting.md +149 -0
|
@@ -9,31 +9,85 @@
|
|
|
9
9
|
* backoff) or, once retries are exhausted, surfaces ONE aggregated, operator-
|
|
10
10
|
* visible escalation per peer — so a peer going dark is impossible to miss.
|
|
11
11
|
*
|
|
12
|
+
* REWORKED (docs/specs/a2a-single-agent-identity.md §3 — honest sender-side
|
|
13
|
+
* reporting of a send that stays queued). The per-MESSAGE escalation had no
|
|
14
|
+
* resolve, no cooldown and no per-peer state, and its item id carried an
|
|
15
|
+
* episode stamp. Under the `peerDark` gate the operator-facing trigger is now
|
|
16
|
+
* PER PEER: `dark && queuedCount > 0 && selfHealExhausted`, where `dark` for the
|
|
17
|
+
* RAISE is computed over the same pool-scope acks/inbounds the RESOLVE reads (a
|
|
18
|
+
* peer that answered on my other machine is not dark); the item id is the
|
|
19
|
+
* deterministic `a2a-peer-dark:<agent>:<peerFp>` (rows live on whichever machine
|
|
20
|
+
* carried the send, so a lease move must not strand an item); the item RESOLVES
|
|
21
|
+
* from pool-scope evidence newer than its raise time, naming the messages that
|
|
22
|
+
* expired unacknowledged; and each peer carries a 12 h cooldown. Before blaming
|
|
23
|
+
* the peer the sentinel heals its own side — ONLY on the awake machine (a
|
|
24
|
+
* standby's relay is disconnected by design): reconnect a dropped relay, refresh
|
|
25
|
+
* the presence map once, run the identity self-check; two passes 40 s apart.
|
|
26
|
+
* When MY relay is not connected, ONE aggregated item replaces per-peer items.
|
|
27
|
+
* Dry-run (the default) logs would-raise rows to logs/a2a-peer-dark.jsonl and
|
|
28
|
+
* raises nothing. The legacy redelivery loop is unchanged and keeps its own
|
|
29
|
+
* gate; its per-message escalation item is raised only when the peer-dark path
|
|
30
|
+
* is NOT on (today's behaviour is byte-identical with the new gate dark).
|
|
31
|
+
*
|
|
12
32
|
* Signal-vs-authority: this is a SIGNAL CONSUMER feeding existing surfaces
|
|
13
33
|
* (the relay client for redelivery, the Attention queue for escalation). It owns
|
|
14
34
|
* NO blocking authority — it never gates a send or a receive; it only re-attempts
|
|
15
|
-
* and reports.
|
|
16
|
-
* row out of `awaiting-ack`, so `findOverdue` never returns it again (no
|
|
17
|
-
* re-escalation, no cooldown log needed).
|
|
35
|
+
* and reports.
|
|
18
36
|
*
|
|
19
37
|
* Modeled on CollaborationRedriveEngine (the sibling redrive/escalate engine):
|
|
20
38
|
* injected deps for testability, per-tick caps, setInterval+unref lifecycle,
|
|
21
39
|
* disabled-by-default (it sends + escalates, so it ships dark and is opt-in).
|
|
22
40
|
*/
|
|
23
41
|
import type { A2ADeliveryTracker, A2ADeliveryEntry } from '../threadline/A2ADeliveryTracker.js';
|
|
42
|
+
import { type PeerDarkAuditRow, type PeerPresenceRead } from '../threadline/peerDark.js';
|
|
24
43
|
/** A redelivery attempt: re-send the message body to the peer. Returns whether
|
|
25
44
|
* the transport accepted it. Resolving false (or throwing) leaves the message
|
|
26
45
|
* awaiting-ack for the next sweep. */
|
|
27
46
|
export type A2ARedeliverFn = (entry: A2ADeliveryEntry) => Promise<boolean> | boolean;
|
|
28
|
-
/** Raise ONE aggregated attention item (P17 — never one per message).
|
|
47
|
+
/** Raise ONE aggregated attention item (P17 — never one per message). `id` is
|
|
48
|
+
* set on the per-peer / aggregate dark items (deterministic, §3.2 iii); the
|
|
49
|
+
* legacy per-message escalation leaves it unset. */
|
|
29
50
|
export type A2ARaiseAttentionFn = (item: {
|
|
51
|
+
id?: string;
|
|
30
52
|
title: string;
|
|
31
53
|
body: string;
|
|
32
54
|
priority?: 'low' | 'medium' | 'high';
|
|
33
55
|
source?: string;
|
|
34
56
|
}) => Promise<unknown> | unknown;
|
|
57
|
+
/** Resolve an item by id, delivering its resolve line. */
|
|
58
|
+
export type A2AResolveAttentionFn = (id: string, line: string) => Promise<unknown> | unknown;
|
|
59
|
+
/** Read an item's durable state (restart-safe cooldown / dedupe). */
|
|
60
|
+
export type A2AAttentionStateFn = (id: string) => {
|
|
61
|
+
status: string;
|
|
62
|
+
updatedAt: string;
|
|
63
|
+
createdAt?: string;
|
|
64
|
+
} | null | undefined;
|
|
65
|
+
/** My relay connection, as /threadline/health reports it. */
|
|
66
|
+
export type A2ARelayState = 'connected' | 'disconnected' | 'displaced' | 'not-configured';
|
|
67
|
+
/** One machine's view of a peer, from GET /threadline/peers/:fp/health (pool scope). */
|
|
68
|
+
export interface A2APoolPeerRow {
|
|
69
|
+
machineId: string;
|
|
70
|
+
lastAckedAt: string | null;
|
|
71
|
+
lastInboundAt: string | null;
|
|
72
|
+
lastDeliveredAt?: string | null;
|
|
73
|
+
}
|
|
74
|
+
export interface A2APeerDarkConfig {
|
|
75
|
+
/** The §3 gate (threadline.peerDarkNotice, dev-gated). Ships dark on the fleet. */
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
/** Default true: would-raise rows only. */
|
|
78
|
+
dryRun: boolean;
|
|
79
|
+
queuedDarkAfterMs: number;
|
|
80
|
+
/** Per-peer dark thresholds by full fingerprint (lowercased); wins over the default. */
|
|
81
|
+
perPeer?: Record<string, {
|
|
82
|
+
queuedDarkAfterMs: number;
|
|
83
|
+
}>;
|
|
84
|
+
cooldownMs: number;
|
|
85
|
+
/** Delay between the two self-heal passes (§3.3: 40 s inside the 120 s ceiling). */
|
|
86
|
+
healPassDelayMs: number;
|
|
87
|
+
}
|
|
88
|
+
export declare const DEFAULT_A2A_PEER_DARK_CONFIG: A2APeerDarkConfig;
|
|
35
89
|
export interface A2ARedeliveryConfig {
|
|
36
|
-
/** Master switch. Ships OFF (it re-sends + escalates). */
|
|
90
|
+
/** Master switch for the legacy redelivery loop. Ships OFF (it re-sends + escalates). */
|
|
37
91
|
enabled: boolean;
|
|
38
92
|
/** Sweep cadence. */
|
|
39
93
|
sweepIntervalMs: number;
|
|
@@ -45,6 +99,8 @@ export interface A2ARedeliveryConfig {
|
|
|
45
99
|
backoffBaseMs: number;
|
|
46
100
|
/** Cap redelivery sends per sweep (protect a degraded transport). */
|
|
47
101
|
maxRedrivesPerTick: number;
|
|
102
|
+
/** The §3 per-peer dark path. Constructed with EITHER gate on. */
|
|
103
|
+
peerDark?: Partial<A2APeerDarkConfig>;
|
|
48
104
|
}
|
|
49
105
|
export declare const DEFAULT_A2A_REDELIVERY_CONFIG: A2ARedeliveryConfig;
|
|
50
106
|
export interface A2ARedeliveryDeps {
|
|
@@ -53,6 +109,32 @@ export interface A2ARedeliveryDeps {
|
|
|
53
109
|
redeliver?: A2ARedeliverFn;
|
|
54
110
|
/** Raise the aggregated escalation. Omit and escalations are state-only. */
|
|
55
111
|
raiseAttention?: A2ARaiseAttentionFn;
|
|
112
|
+
/** Resolve a dark item (§3.2 iv). Omit and resolves are state-only. */
|
|
113
|
+
resolveAttention?: A2AResolveAttentionFn;
|
|
114
|
+
/** Durable item state, for restart-safe dedupe + cooldown. */
|
|
115
|
+
attentionState?: A2AAttentionStateFn;
|
|
116
|
+
/** This agent's id (item ids). Default 'agent'. */
|
|
117
|
+
agentId?: string;
|
|
118
|
+
/** My relay state. Omit ⇒ treated as `not-configured` (no aggregation, no reconnect). */
|
|
119
|
+
relayState?: () => A2ARelayState;
|
|
120
|
+
/** Awake (telegram-polling) machine? A standby runs no heal and raises nothing (§3.3). Default true. */
|
|
121
|
+
isAwake?: () => boolean;
|
|
122
|
+
/** §3.3 heal step 1: re-arm a dropped relay (idempotent). */
|
|
123
|
+
reconnectRelay?: () => Promise<unknown> | unknown;
|
|
124
|
+
/** §3.3 heal step 2: one discover; false when the call was rejected (no relay client). */
|
|
125
|
+
refreshPresence?: () => Promise<boolean> | boolean;
|
|
126
|
+
/** §3.2 presence read with its reason and age (never an inline discover). Preferred over `peerConnectedNow`. */
|
|
127
|
+
peerPresence?: (peerFp: string) => PeerPresenceRead;
|
|
128
|
+
/** §3.2 `connectedNow` from the presence map (never an inline discover). */
|
|
129
|
+
peerConnectedNow?: (peerFp: string) => boolean | null;
|
|
130
|
+
/** §3.3 heal step 3: the §2 identity self-check. 'split' supersedes a per-peer item. */
|
|
131
|
+
identitySelfCheck?: () => Promise<'ok' | 'split' | 'unknown'> | 'ok' | 'split' | 'unknown';
|
|
132
|
+
/** Pool-scope reads of a peer's health on my other machines (raise AND resolve). */
|
|
133
|
+
poolPeerHealth?: (peerFp: string) => Promise<A2APoolPeerRow[]>;
|
|
134
|
+
/** Audit rows → logs/a2a-peer-dark.jsonl. */
|
|
135
|
+
audit?: (row: PeerDarkAuditRow) => void;
|
|
136
|
+
/** Test seam for the inter-pass wait. */
|
|
137
|
+
sleep?: (ms: number) => Promise<void>;
|
|
56
138
|
now?: () => number;
|
|
57
139
|
log?: {
|
|
58
140
|
log: (m: string) => void;
|
|
@@ -66,17 +148,74 @@ export interface A2ARedeliveryTickResult {
|
|
|
66
148
|
escalated: number;
|
|
67
149
|
/** Peers that received an aggregated escalation this tick. */
|
|
68
150
|
escalatedPeers: string[];
|
|
151
|
+
/** §3: peers found dark pool-wide this tick (after the heal). */
|
|
152
|
+
darkPeers: string[];
|
|
153
|
+
/** §3: per-peer items raised (or, in dry-run, would-raised) this tick. */
|
|
154
|
+
darkRaised: string[];
|
|
155
|
+
/** §3: per-peer items resolved (or would-resolved) this tick. */
|
|
156
|
+
darkResolved: string[];
|
|
157
|
+
/** §3: the local-cause aggregate item was raised / would-raise this tick. */
|
|
158
|
+
aggregateRaised: boolean;
|
|
159
|
+
/** §3.3: why the heal did not run (`standby`), when it did not. */
|
|
160
|
+
healSkipped?: string;
|
|
69
161
|
}
|
|
70
162
|
export declare class A2ARedeliverySentinel {
|
|
71
163
|
private readonly cfg;
|
|
164
|
+
readonly peerDark: A2APeerDarkConfig;
|
|
72
165
|
private readonly deps;
|
|
73
166
|
private readonly now;
|
|
74
167
|
private readonly log;
|
|
75
168
|
private timer;
|
|
169
|
+
private ticking;
|
|
170
|
+
/** Open per-peer dark episodes (restart: rebuilt from `attentionState`). */
|
|
171
|
+
private readonly episodes;
|
|
172
|
+
/** Last raise per peer (ms) — the in-process half of the cooldown. */
|
|
173
|
+
private readonly lastRaiseAt;
|
|
174
|
+
private aggregateOpen;
|
|
76
175
|
constructor(deps: A2ARedeliveryDeps, cfg?: Partial<A2ARedeliveryConfig>);
|
|
176
|
+
/** The §3 path is LIVE: items and sentences are produced (enabled, not dry-run). */
|
|
177
|
+
get peerDarkLive(): boolean;
|
|
178
|
+
/** Either gate arms the sweep (§3.2 i). */
|
|
179
|
+
get armed(): boolean;
|
|
77
180
|
start(): void;
|
|
78
181
|
stop(): void;
|
|
79
|
-
/** One sweep:
|
|
182
|
+
/** One sweep: the legacy redelivery loop (its gate), then the §3 dark pass (its gate). */
|
|
80
183
|
tick(): Promise<A2ARedeliveryTickResult>;
|
|
184
|
+
private redeliveryPass;
|
|
185
|
+
private audit;
|
|
186
|
+
private get agentId();
|
|
187
|
+
private relayState;
|
|
188
|
+
private isAwake;
|
|
189
|
+
private localHealth;
|
|
190
|
+
/** Pool rows for a peer; a failing pool read answers [] (local evidence only — fail toward the local verdict). */
|
|
191
|
+
private poolRows;
|
|
192
|
+
/**
|
|
193
|
+
* Newest sign of life for a peer across local + pool rows (ms, -Infinity when
|
|
194
|
+
* none). An ack or an inbound only: a relay `delivered` verdict alone shows a
|
|
195
|
+
* connection took the message, not that the peer answered, so it never
|
|
196
|
+
* resolves a dark item.
|
|
197
|
+
*/
|
|
198
|
+
private static lifeAt;
|
|
199
|
+
/** Rebuild an episode after a restart from the durable item state. */
|
|
200
|
+
private episodeFor;
|
|
201
|
+
/** Cooldown (§3.2 iv): in-process last raise, else the durable item's last update. */
|
|
202
|
+
private inCooldown;
|
|
203
|
+
private resolveEpisode;
|
|
204
|
+
/** The presence read for an audit row; a missing or throwing reader is `relay-down` (my side). */
|
|
205
|
+
private presenceOf;
|
|
206
|
+
private raiseEpisode;
|
|
207
|
+
private darkPass;
|
|
208
|
+
/** §3.3 steps 2–3, then the inter-pass wait. */
|
|
209
|
+
private heal;
|
|
210
|
+
private raiseAggregate;
|
|
211
|
+
/** Durable state of the aggregate item (restart-safe). */
|
|
212
|
+
private aggregateItemOpen;
|
|
213
|
+
private resolveAggregate;
|
|
214
|
+
/** Test/observability read: open per-peer episodes. */
|
|
215
|
+
openEpisodes(): Array<{
|
|
216
|
+
peerFp: string;
|
|
217
|
+
itemId: string;
|
|
218
|
+
raisedAt: string;
|
|
219
|
+
}>;
|
|
81
220
|
}
|
|
82
221
|
//# sourceMappingURL=A2ARedeliverySentinel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"A2ARedeliverySentinel.d.ts","sourceRoot":"","sources":["../../src/monitoring/A2ARedeliverySentinel.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"A2ARedeliverySentinel.d.ts","sourceRoot":"","sources":["../../src/monitoring/A2ARedeliverySentinel.ts"],"names":[],"mappings":"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"}
|