instar 1.3.747 → 1.3.749

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 (85) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +136 -2
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/HttpLeaseTransport.d.ts +22 -0
  5. package/dist/core/HttpLeaseTransport.d.ts.map +1 -1
  6. package/dist/core/HttpLeaseTransport.js +37 -3
  7. package/dist/core/HttpLeaseTransport.js.map +1 -1
  8. package/dist/core/LeaseCoordinator.d.ts +22 -0
  9. package/dist/core/LeaseCoordinator.d.ts.map +1 -1
  10. package/dist/core/LeaseCoordinator.js +11 -0
  11. package/dist/core/LeaseCoordinator.js.map +1 -1
  12. package/dist/core/MachinePoolRegistry.d.ts +11 -0
  13. package/dist/core/MachinePoolRegistry.d.ts.map +1 -1
  14. package/dist/core/MachinePoolRegistry.js +29 -1
  15. package/dist/core/MachinePoolRegistry.js.map +1 -1
  16. package/dist/core/PeerPresencePuller.d.ts +26 -1
  17. package/dist/core/PeerPresencePuller.d.ts.map +1 -1
  18. package/dist/core/PeerPresencePuller.js +15 -1
  19. package/dist/core/PeerPresencePuller.js.map +1 -1
  20. package/dist/core/PostUpdateMigrator.d.ts +16 -0
  21. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  22. package/dist/core/PostUpdateMigrator.js +80 -5
  23. package/dist/core/PostUpdateMigrator.js.map +1 -1
  24. package/dist/core/SessionManager.d.ts.map +1 -1
  25. package/dist/core/SessionManager.js +16 -0
  26. package/dist/core/SessionManager.js.map +1 -1
  27. package/dist/core/conversationBindGate.d.ts +62 -0
  28. package/dist/core/conversationBindGate.d.ts.map +1 -0
  29. package/dist/core/conversationBindGate.js +83 -0
  30. package/dist/core/conversationBindGate.js.map +1 -0
  31. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  32. package/dist/core/devGatedFeatures.js +12 -0
  33. package/dist/core/devGatedFeatures.js.map +1 -1
  34. package/dist/core/machineCoherenceAdvert.d.ts +108 -0
  35. package/dist/core/machineCoherenceAdvert.d.ts.map +1 -0
  36. package/dist/core/machineCoherenceAdvert.js +160 -0
  37. package/dist/core/machineCoherenceAdvert.js.map +1 -0
  38. package/dist/core/machineCoherenceManifest.d.ts +133 -0
  39. package/dist/core/machineCoherenceManifest.d.ts.map +1 -0
  40. package/dist/core/machineCoherenceManifest.js +293 -0
  41. package/dist/core/machineCoherenceManifest.js.map +1 -0
  42. package/dist/core/types.d.ts +21 -0
  43. package/dist/core/types.d.ts.map +1 -1
  44. package/dist/core/types.js.map +1 -1
  45. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  46. package/dist/monitoring/CommitmentTracker.js +4 -1
  47. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  48. package/dist/monitoring/MachineCoherenceSentinel.d.ts +240 -0
  49. package/dist/monitoring/MachineCoherenceSentinel.d.ts.map +1 -0
  50. package/dist/monitoring/MachineCoherenceSentinel.js +336 -0
  51. package/dist/monitoring/MachineCoherenceSentinel.js.map +1 -0
  52. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  53. package/dist/monitoring/guardManifest.js +25 -0
  54. package/dist/monitoring/guardManifest.js.map +1 -1
  55. package/dist/monitoring/machineCoherenceEpisode.d.ts +152 -0
  56. package/dist/monitoring/machineCoherenceEpisode.d.ts.map +1 -0
  57. package/dist/monitoring/machineCoherenceEpisode.js +92 -0
  58. package/dist/monitoring/machineCoherenceEpisode.js.map +1 -0
  59. package/dist/monitoring/machineCoherenceEpisodeManager.d.ts +210 -0
  60. package/dist/monitoring/machineCoherenceEpisodeManager.d.ts.map +1 -0
  61. package/dist/monitoring/machineCoherenceEpisodeManager.js +724 -0
  62. package/dist/monitoring/machineCoherenceEpisodeManager.js.map +1 -0
  63. package/dist/monitoring/machineCoherenceEvaluate.d.ts +129 -0
  64. package/dist/monitoring/machineCoherenceEvaluate.d.ts.map +1 -0
  65. package/dist/monitoring/machineCoherenceEvaluate.js +183 -0
  66. package/dist/monitoring/machineCoherenceEvaluate.js.map +1 -0
  67. package/dist/scaffold/templates.d.ts.map +1 -1
  68. package/dist/scaffold/templates.js +7 -1
  69. package/dist/scaffold/templates.js.map +1 -1
  70. package/dist/server/AgentServer.d.ts +1 -0
  71. package/dist/server/AgentServer.d.ts.map +1 -1
  72. package/dist/server/AgentServer.js +1 -0
  73. package/dist/server/AgentServer.js.map +1 -1
  74. package/dist/server/routes.d.ts +2 -1
  75. package/dist/server/routes.d.ts.map +1 -1
  76. package/dist/server/routes.js +141 -88
  77. package/dist/server/routes.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/data/builtin-manifest.json +65 -65
  80. package/src/scaffold/templates.ts +7 -1
  81. package/upgrades/{1.3.747.md → 1.3.748.md} +16 -0
  82. package/upgrades/1.3.749.md +35 -0
  83. package/upgrades/side-effects/action-claim-dryrun-audit-mkdir-fix.md +45 -0
  84. package/upgrades/side-effects/machine-coherence-guard.md +229 -0
  85. package/upgrades/side-effects/slack-followthrough-generalization.md +49 -0
@@ -114,6 +114,22 @@ export declare function migrateConfigPlaywrightRegistryDevGate(config: Record<st
114
114
  * Idempotent — a second run finds nothing to strip.
115
115
  */
116
116
  export declare function migrateConfigConversationFollowThroughDevGate(config: Record<string, unknown>): boolean;
117
+ /**
118
+ * slack-followthrough-generalization §8.5: `messaging.actionClaim.slack.enabled`
119
+ * is a developmentAgent dark feature — `enabled` must be OMITTED so
120
+ * resolveDevAgentGate resolves it (live-on-dev, dark fleet). Strip a default-shaped
121
+ * literal `false` (the #1001 mechanism — it would force-dark even a dev agent); an
122
+ * explicit `true` (operator fleet-flip) is preserved.
123
+ *
124
+ * NOTE — no `dryRun:true` write: on real installs `messaging` is an ARRAY of adapter
125
+ * configs, so `messaging.actionClaim.slack.enabled` resolves `undefined` (which is
126
+ * exactly what the dev-gate wants) and the observe route defaults `dryRun` to `true`
127
+ * when absent. Correct dev-gated-dryRun-first behavior is delivered WITHOUT any config
128
+ * write; writing a dotted key INTO an array would corrupt it. This strip only acts on
129
+ * an OBJECT-shaped `messaging.actionClaim.slack` carrying a literal `false` (array
130
+ * shape → safe no-op). Idempotent + existence-checked.
131
+ */
132
+ export declare function migrateConfigActionClaimSlackDevGate(config: Record<string, unknown>): boolean;
117
133
  /**
118
134
  * "Self-Unblock Before Escalating" (docs/specs/self-unblock-before-escalating.md):
119
135
  * the two nested blockerLedger sub-features — selfUnblockChecklist + durableVaultSession
@@ -1 +1 @@
1
- {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
@@ -291,6 +291,40 @@ export function migrateConfigConversationFollowThroughDevGate(config) {
291
291
  delete ft.enabled;
292
292
  return true;
293
293
  }
294
+ /**
295
+ * slack-followthrough-generalization §8.5: `messaging.actionClaim.slack.enabled`
296
+ * is a developmentAgent dark feature — `enabled` must be OMITTED so
297
+ * resolveDevAgentGate resolves it (live-on-dev, dark fleet). Strip a default-shaped
298
+ * literal `false` (the #1001 mechanism — it would force-dark even a dev agent); an
299
+ * explicit `true` (operator fleet-flip) is preserved.
300
+ *
301
+ * NOTE — no `dryRun:true` write: on real installs `messaging` is an ARRAY of adapter
302
+ * configs, so `messaging.actionClaim.slack.enabled` resolves `undefined` (which is
303
+ * exactly what the dev-gate wants) and the observe route defaults `dryRun` to `true`
304
+ * when absent. Correct dev-gated-dryRun-first behavior is delivered WITHOUT any config
305
+ * write; writing a dotted key INTO an array would corrupt it. This strip only acts on
306
+ * an OBJECT-shaped `messaging.actionClaim.slack` carrying a literal `false` (array
307
+ * shape → safe no-op). Idempotent + existence-checked.
308
+ */
309
+ export function migrateConfigActionClaimSlackDevGate(config) {
310
+ const messaging = config.messaging;
311
+ // Real installs use an ARRAY of adapter configs — this feature's config path is
312
+ // object-shaped; a safe no-op on the array shape.
313
+ if (!messaging || typeof messaging !== 'object' || Array.isArray(messaging))
314
+ return false;
315
+ const ac = messaging.actionClaim;
316
+ if (!ac || typeof ac !== 'object')
317
+ return false;
318
+ const slack = ac.slack;
319
+ if (!slack || typeof slack !== 'object')
320
+ return false;
321
+ if (!Object.prototype.hasOwnProperty.call(slack, 'enabled'))
322
+ return false;
323
+ if (slack.enabled !== false)
324
+ return false;
325
+ delete slack.enabled;
326
+ return true;
327
+ }
294
328
  /**
295
329
  * "Self-Unblock Before Escalating" (docs/specs/self-unblock-before-escalating.md):
296
330
  * the two nested blockerLedger sub-features — selfUnblockChecklist + durableVaultSession
@@ -4360,7 +4394,7 @@ setTimeout(() => process.exit(0), 2000);
4360
4394
  // Agent Awareness: an agent that doesn't know this exists will be confused when a
4361
4395
  // commitment appears after it says "I'll restart X". Content-sniffed; idempotent.
4362
4396
  if (!content.includes('Action-Claim Follow-Through Sentinel')) {
4363
- content += `\n- **Action-Claim Follow-Through Sentinel (signal-only, dark by default).** A backstop for the word≠action gap (you say "relaunching now" / "I'll push the change" and then don't). A thin Stop hook posts each finished conversational turn to \`POST /action-claim/observe\`, which classifies a CONCRETE future-action claim (restart/relaunch/push/merge/deploy/fix/…) and opens an idempotent follow-through commitment for the topic — so the existing PromiseBeacon + the revival path make sure it actually happens. High-precision (vague "I'll take a look" never triggers it), de-duplicated by \`externalKey\` (a restated claim updates one commitment, not many), auto-expiring, per-topic capped. It NEVER blocks a message. Off by default; enable with \`messaging.actionClaim.enabled\` (dev-first soak before fleet). Proactive: user asks "why did a commitment appear when I said I'd restart something?" → that's this sentinel tracking your stated action so it isn't silently dropped.\n`;
4397
+ content += `\n- **Action-Claim Follow-Through Sentinel (signal-only, dark by default).** A backstop for the word≠action gap (you say "relaunching now" / "I'll push the change" and then don't). A thin Stop hook posts each finished conversational turn to \`POST /action-claim/observe\`, which classifies a CONCRETE future-action claim (restart/relaunch/push/merge/deploy/fix/…) and opens an idempotent follow-through commitment for the topic — so the existing PromiseBeacon + the revival path make sure it actually happens. High-precision (vague "I'll take a look" never triggers it), de-duplicated by \`externalKey\` (a restated claim updates one commitment, not many), auto-expiring, per-topic capped. It NEVER blocks a message. Off by default; enable with \`messaging.actionClaim.enabled\` (dev-first soak before fleet). It now covers **Slack** conversations too (a promise born in a Slack thread registers a durable commitment bound to the conversation's minted id, delivered back into that exact thread across restarts — dev-gated dark behind \`messaging.actionClaim.slack\`, dryRun-first) and **time-boxed conversational promises** ("I'll post that in about 5 minutes / by EOD / I'll check in"), not just dev-ops verbs. Proactive: user asks "why did a commitment appear when I said I'd restart something / promised to post in 5 min?" → that's this sentinel tracking your stated action so it isn't silently dropped.\n`;
4364
4398
  patched = true;
4365
4399
  result.upgraded.push('CLAUDE.md: added Action-Claim Follow-Through Sentinel section');
4366
4400
  }
@@ -5190,6 +5224,22 @@ When narrating a ship, an update I just applied, or a restart I just completed (
5190
5224
  patched = true;
5191
5225
  result.upgraded.push('CLAUDE.md: added Autonomous Liveness Reconciler awareness section');
5192
5226
  }
5227
+ // Machine-Coherence Guard awareness (Agent Awareness Standard). Existing
5228
+ // agents need to know the GET /pool/machine-coherence read surface + the
5229
+ // proactive trigger ("why did I get a machine-coherence alarm?") exist, even
5230
+ // if initialized before this capability shipped. Dev-gated dark; content-sniffed.
5231
+ if (!content.includes('Machine-Coherence Guard')) {
5232
+ const mcSection = `
5233
+ ### Machine-Coherence Guard — "are my machines running as the same me?" (⚗️ dev-gated dark)
5234
+
5235
+ When I run on more than one machine, this guard compares — across my OWN online machines, riding the existing 30s presence-pull — the coherence-critical dimensions (instar version, resolved safety-flags, mesh protocol, manifest generation). When the pool DIVERGES on something that halves a cross-machine guarantee (e.g. the conversation-move pair live on one machine, dark on the other), exactly ONE elected machine raises ONE HIGH, episode-scoped attention item — impact-first, with a fix I perform on your approval (reply **fix it**) or hold open without nagging (reply **leave it**). Signal-only: it never blocks, equalizes, or restarts anything on its own. Dev-gated dark on the fleet (\`monitoring.machineCoherence.enabled\` OMITTED → the dev-agent gate decides), **dry-run FIRST** even on dev (raises no item until a deliberate \`dryRun:false\`), single-machine is a strict no-op.
5236
+ - Status (Registry First — read it, never guess): \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/pool/machine-coherence\` → \`{ enabled, dryRun, machinesRegisteredOnline, machinesCompared, peerClassifications, raiser, openEpisode, counters }\` (503 when the guard is dark on this agent — say so honestly, don't guess).
5237
+ - **When to use** (PROACTIVE — this is the trigger): user asks "are my machines in sync / running the same version+settings?" or "why did I get a machine-coherence alarm?" → read \`/pool/machine-coherence\` and the open episode (its \`pendingFix\` names the proposed fix + target machine); the transition log is \`logs/machine-coherence.jsonl\`. A version-skew row usually just means a rolling update in flight (grace-gated, won't cry wolf).
5238
+ `;
5239
+ content += '\n' + mcSection;
5240
+ patched = true;
5241
+ result.upgraded.push('CLAUDE.md: added Machine-Coherence Guard awareness section');
5242
+ }
5193
5243
  // Framework-Onboarding Mentor System — issue-ledger observability (Agent
5194
5244
  // Awareness Standard). Existing agents need to know the read-only
5195
5245
  // /framework-issues + playbook routes exist, even if initialized before this
@@ -8374,6 +8424,17 @@ Two layers keep my machine-to-machine \"ropes\" (Tailscale / LAN / Cloudflare) h
8374
8424
  else {
8375
8425
  result.skipped.push('config.json: conversationIdentity.followThrough.enabled dev-gate already correct (omitted or operator-set)');
8376
8426
  }
8427
+ // slack-followthrough-generalization §8.5: messaging.actionClaim.slack.enabled is a
8428
+ // dev-gated dark feature — strip a default-shaped literal `false` so the gate resolves
8429
+ // it (live-on-dev, dark fleet). Array-shaped messaging → safe no-op (no config write;
8430
+ // the route defaults dryRun:true and the dev-gate resolves undefined enabled).
8431
+ if (migrateConfigActionClaimSlackDevGate(config)) {
8432
+ patched = true;
8433
+ result.upgraded.push('config.json: stripped default-shaped messaging.actionClaim.slack.enabled=false so the developmentAgent gate resolves it (live-on-dev, dark fleet)');
8434
+ }
8435
+ else {
8436
+ result.skipped.push('config.json: messaging.actionClaim.slack.enabled dev-gate already correct (omitted or operator-set)');
8437
+ }
8377
8438
  // "Self-Unblock Before Escalating" (CMT-1519): the two nested blockerLedger
8378
8439
  // dev-gated sub-features (selfUnblockChecklist + durableVaultSession) OMIT
8379
8440
  // `enabled`. Strip a default-shaped `false` so the developmentAgent gate resolves
@@ -11470,17 +11531,31 @@ process.stdin.on('end', async () => {
11470
11531
  if (!enabled) process.exit(0);
11471
11532
 
11472
11533
  const input = JSON.parse(data);
11473
- const message = input.last_assistant_message || '';
11474
- const topicRaw = process.env.INSTAR_TELEGRAM_TOPIC;
11475
- if (!message || message.length < 20 || !topicRaw) process.exit(0);
11534
+ const rawMessage = input.last_assistant_message || '';
11535
+ // slack-followthrough-generalization §4.4: key the conversation from
11536
+ // INSTAR_CONVERSATION_ID ONLY NO INSTAR_TELEGRAM_TOPIC fallback (the fallback
11537
+ // re-introduces the lifeline cross-channel mis-delivery; a shared/lifeline
11538
+ // session never carries this env, so it registers nothing — a safe miss).
11539
+ // Number.isFinite admits a negative (minted Slack) id.
11540
+ const topicRaw = process.env.INSTAR_CONVERSATION_ID;
11541
+ if (!rawMessage || !topicRaw) process.exit(0);
11476
11542
  const topicId = parseInt(topicRaw, 10);
11477
11543
  if (!Number.isFinite(topicId)) process.exit(0);
11544
+ // Clamp the payload (§4.4): a pathological multi-MB reply would exceed the
11545
+ // server body-parser limit → a silent non-registration; the classifiers only
11546
+ // need the first 16KB. NO length floor — the high-precision classifiers are the
11547
+ // semantic filter, so terse promises ("I'll fix it") must not be dropped.
11548
+ const message = rawMessage.slice(0, 16384);
11549
+ const bindToken = process.env.INSTAR_BIND_TOKEN;
11478
11550
  const controller = new AbortController();
11479
11551
  const timeout = setTimeout(() => controller.abort(), 5000);
11480
11552
  try {
11481
11553
  await fetch('http://127.0.0.1:' + serverPort + '/action-claim/observe', {
11482
11554
  method: 'POST',
11483
- headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + authToken },
11555
+ headers: Object.assign(
11556
+ { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + authToken },
11557
+ bindToken ? { 'X-Instar-Bind-Token': bindToken } : {},
11558
+ ),
11484
11559
  body: JSON.stringify({ message, topicId }),
11485
11560
  signal: controller.signal,
11486
11561
  });