instar 1.3.386 → 1.3.388

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 CHANGED
@@ -136,7 +136,7 @@ An agent that forgets what you discussed yesterday, doesn't recognize someone it
136
136
  | **Multi-Machine** | Ed25519/X25519 crypto identity, encrypted sync, automatic failover | [→](https://instar.sh/features/multi-machine/) |
137
137
  | **Serendipity Protocol** | Sub-agents capture out-of-scope discoveries without breaking focus. HMAC-signed, secret-scanned | [→](https://instar.sh/features/serendipity/) |
138
138
  | **Threadline Protocol** | Agent-to-agent conversations with canonical identity, three-layer trust model, authorization policy, Ed25519 invitations, Sybil protection, MoltBridge network discovery, rich agent profiles (auto-compiled from agent data with human review gate), discovery waterfall, message security, tamper-proof audit logging, framework-agnostic interop, persistent listener daemon (always-on relay connection, pipe-mode sessions, sub-30s cross-machine failover), eleven MCP tools (seven core + four registry-conditional). 80 modules, roughly 3,800 test cases across 74 dedicated test files plus 125 cross-cutting | [→](https://instar.sh/features/threadline/) |
139
- | **A2A Delivery Health** | Durable agent-to-agent delivery tracking (`threadline/A2ADeliveryTracker`) so a message between agents never silently dies out — a reply on the thread is the acknowledgement, and `GET /threadline/peers/health` answers "is my channel to this peer alive?" as a lookup, not a guess. Recording-only; never gates a send | [→](https://instar.sh/features/a2a-delivery-health/) |
139
+ | **A2A Delivery Health** | Durable agent-to-agent delivery tracking (`threadline/A2ADeliveryTracker`) so a message between agents never silently dies out — a reply on the thread is the acknowledgement, and `GET /threadline/peers/health` answers "is my channel to this peer alive?" as a lookup, not a guess. The `monitoring/A2ARedeliverySentinel` adds active recovery: re-send unacknowledged messages with backoff, then one aggregated escalation per dark peer. Recording-only; never gates a send | [→](https://instar.sh/features/a2a-delivery-health/) |
140
140
  | **Self-Healing** | LLM-powered stall detection, session recovery, promise tracking | [→](https://instar.sh/features/self-healing/) |
141
141
  | **AutoUpdater** | Built-in update engine. Checks npm, auto-applies, self-restarts | [→](https://instar.sh/features/autoupdater/) |
142
142
  | **Build Pipeline** | `/build` skill with worktree isolation, 6-phase pipeline, quality gates, stop-hook enforcement | |
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6JtD,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAs4BD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,GAC/F,IAAI,CAyUN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6vTtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAuBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiG7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6JtD,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAs4BD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,GAC/F,IAAI,CAyUN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuzTtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
@@ -8819,6 +8819,63 @@ export async function startServer(options) {
8819
8819
  catch (err) {
8820
8820
  console.warn('[CollaborationRedrive] init failed:', err.message);
8821
8821
  }
8822
+ // ── A2ARedeliverySentinel ─────────────────────────────────────────
8823
+ // The active-recovery layer of "communications never just die out"
8824
+ // (A2A-DURABLE-DELIVERY-SPEC §4, #939, CMT-1143, PR2). Sweeps the delivery
8825
+ // tracker's overdue work-list: re-sends unacknowledged A2A messages with
8826
+ // backoff (body recovered from the canonical outbox), and after the attempt
8827
+ // cap raises ONE aggregated attention item per dark peer. Recording/sending
8828
+ // only — no blocking authority. Ships OFF (it re-sends + escalates).
8829
+ try {
8830
+ const a2aDelivCfg = config.monitoring?.a2aRedelivery ?? {};
8831
+ if (a2aDelivCfg.enabled && a2aDeliveryTracker) {
8832
+ const { A2ARedeliverySentinel, DEFAULT_A2A_REDELIVERY_CONFIG } = await import('../monitoring/A2ARedeliverySentinel.js');
8833
+ const a2aRedeliverySentinel = new A2ARedeliverySentinel({
8834
+ tracker: a2aDeliveryTracker,
8835
+ // Re-send: recover the body from the canonical outbox by messageId,
8836
+ // then re-emit via the relay. Body missing → return false (the
8837
+ // sentinel leaves it awaiting-ack and escalates at the cap, never
8838
+ // fabricating a send).
8839
+ redeliver: (threadlineRelayClient && listenerManager)
8840
+ ? (entry) => {
8841
+ const stored = listenerManager.readCanonicalOutboxEntry(entry.messageId);
8842
+ if (!stored)
8843
+ return false;
8844
+ threadlineRelayClient.sendAuto(entry.peerFp, stored.text, entry.threadId ?? stored.threadId);
8845
+ return true;
8846
+ }
8847
+ : undefined,
8848
+ raiseAttention: telegram
8849
+ ? async (item) => {
8850
+ const priorityMap = {
8851
+ high: 'HIGH', medium: 'NORMAL', low: 'LOW',
8852
+ };
8853
+ return telegram.createAttentionItem({
8854
+ id: `a2a-redelivery-${Date.now()}`,
8855
+ title: item.title,
8856
+ summary: item.body.slice(0, 160),
8857
+ description: item.body,
8858
+ category: 'a2a-redelivery',
8859
+ priority: priorityMap[item.priority ?? 'medium'] ?? 'NORMAL',
8860
+ sourceContext: item.source ?? 'a2a-redelivery',
8861
+ });
8862
+ }
8863
+ : undefined,
8864
+ }, { ...DEFAULT_A2A_REDELIVERY_CONFIG, ...a2aDelivCfg, enabled: true });
8865
+ a2aRedeliverySentinel.start();
8866
+ globalThis.__instarA2ARedeliverySentinel = a2aRedeliverySentinel;
8867
+ console.log(pc.green(' A2ARedeliverySentinel: armed (A2A redelivery + dark-peer escalation)'));
8868
+ }
8869
+ else {
8870
+ console.log(pc.dim(' A2ARedeliverySentinel: disabled (monitoring.a2aRedelivery.enabled=false; the ship-OFF default)'));
8871
+ }
8872
+ }
8873
+ catch (err) {
8874
+ // @silent-fallback-ok: cascade-isolation — a sentinel init failure must never
8875
+ // crash server boot (mirrors the CollaborationRedrive init block above). Logged;
8876
+ // the feature simply stays inert.
8877
+ console.warn('[A2ARedelivery] init failed:', err.message);
8878
+ }
8822
8879
  // Register feature-discovery probe for self-knowledge tree (Phase 4: Agent Integration)
8823
8880
  if (selfKnowledgeTree && featureRegistry) {
8824
8881
  selfKnowledgeTree.probes.register('feature-discovery', async () => {