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.
Files changed (58) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +119 -13
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +15 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +14 -0
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  11. package/dist/core/devGatedFeatures.js +6 -0
  12. package/dist/core/devGatedFeatures.js.map +1 -1
  13. package/dist/core/types.d.ts +20 -0
  14. package/dist/core/types.d.ts.map +1 -1
  15. package/dist/core/types.js.map +1 -1
  16. package/dist/data/standards-guard-index.json +1 -1
  17. package/dist/data/standards-guard-index.meta.json +2 -2
  18. package/dist/data/standards-registry.meta.json +1 -1
  19. package/dist/monitoring/A2ARedeliverySentinel.d.ts +145 -6
  20. package/dist/monitoring/A2ARedeliverySentinel.d.ts.map +1 -1
  21. package/dist/monitoring/A2ARedeliverySentinel.js +451 -11
  22. package/dist/monitoring/A2ARedeliverySentinel.js.map +1 -1
  23. package/dist/scaffold/templates.d.ts.map +1 -1
  24. package/dist/scaffold/templates.js +4 -0
  25. package/dist/scaffold/templates.js.map +1 -1
  26. package/dist/server/routes.d.ts.map +1 -1
  27. package/dist/server/routes.js +65 -4
  28. package/dist/server/routes.js.map +1 -1
  29. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  30. package/dist/testing/selfActionRegistry.js +71 -0
  31. package/dist/testing/selfActionRegistry.js.map +1 -1
  32. package/dist/threadline/A2ADeliveryTracker.d.ts +55 -1
  33. package/dist/threadline/A2ADeliveryTracker.d.ts.map +1 -1
  34. package/dist/threadline/A2ADeliveryTracker.js +97 -5
  35. package/dist/threadline/A2ADeliveryTracker.js.map +1 -1
  36. package/dist/threadline/ThreadlineMCPServer.d.ts +15 -0
  37. package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
  38. package/dist/threadline/ThreadlineMCPServer.js +3 -0
  39. package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
  40. package/dist/threadline/client/ThreadlineClient.d.ts +47 -0
  41. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  42. package/dist/threadline/client/ThreadlineClient.js +93 -0
  43. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  44. package/dist/threadline/mcp-http-client.d.ts.map +1 -1
  45. package/dist/threadline/mcp-http-client.js +2 -0
  46. package/dist/threadline/mcp-http-client.js.map +1 -1
  47. package/dist/threadline/peerDark.d.ts +165 -0
  48. package/dist/threadline/peerDark.d.ts.map +1 -0
  49. package/dist/threadline/peerDark.js +204 -0
  50. package/dist/threadline/peerDark.js.map +1 -0
  51. package/package.json +1 -1
  52. package/src/data/builtin-manifest.json +63 -63
  53. package/src/data/standards-guard-index.json +1 -1
  54. package/src/data/standards-guard-index.meta.json +2 -2
  55. package/src/data/standards-registry.meta.json +1 -1
  56. package/src/scaffold/templates.ts +4 -0
  57. package/upgrades/1.3.1340.md +32 -0
  58. 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. The state machine guarantees escalate-once: `markEscalated` moves a
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: redeliver overdue messages under the attempt cap, escalate the rest. */
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;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGhG;;uCAEuC;AACvC,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAErF,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,6BAA6B,EAAE,mBAO3C,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,oEAAoE;IACpE,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0D;IAC9E,OAAO,CAAC,KAAK,CAA+B;gBAEhC,IAAI,EAAE,iBAAiB,EAAE,GAAG,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAU3E,KAAK,IAAI,IAAI;IAiBb,IAAI,IAAI,IAAI;IAIZ,sFAAsF;IAChF,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAsE/C"}
1
+ {"version":3,"file":"A2ARedeliverySentinel.d.ts","sourceRoot":"","sources":["../../src/monitoring/A2ARedeliverySentinel.ts"],"names":[],"mappings":"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"}