instar 1.3.585 → 1.3.587

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 (34) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +85 -32
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/IntelligenceRouter.d.ts +10 -0
  5. package/dist/core/IntelligenceRouter.d.ts.map +1 -1
  6. package/dist/core/IntelligenceRouter.js +37 -3
  7. package/dist/core/IntelligenceRouter.js.map +1 -1
  8. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  9. package/dist/core/PostUpdateMigrator.js +17 -0
  10. package/dist/core/PostUpdateMigrator.js.map +1 -1
  11. package/dist/core/internalFrameworkDefault.d.ts +50 -0
  12. package/dist/core/internalFrameworkDefault.d.ts.map +1 -0
  13. package/dist/core/internalFrameworkDefault.js +72 -0
  14. package/dist/core/internalFrameworkDefault.js.map +1 -0
  15. package/dist/core/types.d.ts +18 -0
  16. package/dist/core/types.d.ts.map +1 -1
  17. package/dist/core/types.js.map +1 -1
  18. package/dist/scaffold/templates.js +4 -4
  19. package/dist/server/routes.d.ts.map +1 -1
  20. package/dist/server/routes.js +41 -3
  21. package/dist/server/routes.js.map +1 -1
  22. package/dist/server/stopGate.d.ts +37 -0
  23. package/dist/server/stopGate.d.ts.map +1 -1
  24. package/dist/server/stopGate.js +85 -8
  25. package/dist/server/stopGate.js.map +1 -1
  26. package/package.json +1 -1
  27. package/scripts/safe-merge.mjs +68 -5
  28. package/src/data/builtin-manifest.json +63 -63
  29. package/src/scaffold/templates.ts +4 -4
  30. package/upgrades/1.3.586.md +76 -0
  31. package/upgrades/1.3.587.md +28 -0
  32. package/upgrades/side-effects/autonomous-run-registration-guarantee.md +40 -0
  33. package/upgrades/side-effects/provider-fallback-default-policy.md +52 -0
  34. package/upgrades/side-effects/safe-merge-native-auto-merge.md +92 -0
@@ -123,6 +123,43 @@ export interface HotPathInputs {
123
123
  autonomousStateFile?: string;
124
124
  recoveryScriptPath?: string;
125
125
  now?: number;
126
+ /**
127
+ * GAP-B (autonomous-run-registration-guarantee D2): the topic this
128
+ * session serves, resolved SERVER-SIDE by inverting
129
+ * `.instar/topic-session-registry.json`'s `topicToSession` map on the
130
+ * session's tmux name (the same inversion the bash stop hook uses). When
131
+ * present, readAutonomousActive checks the CANONICAL per-topic
132
+ * registration `.instar/autonomous/<topicId>.local.md` FIRST.
133
+ *
134
+ * Unresolved (a registry-lookup miss) → undefined. The read then falls
135
+ * back to BOTH legacy single-file paths — NEVER a silent
136
+ * autonomousActive:false (no-silent-fallbacks ratchet).
137
+ */
138
+ topicId?: string | number;
139
+ /**
140
+ * Agent home root the relative autonomous-state paths resolve against.
141
+ * Defaults to process.cwd() (the agent home the server runs in). Tests
142
+ * inject a tmp dir. The per-topic file lives at
143
+ * `<stateRoot>/.instar/autonomous/<topicId>.local.md`; the two legacy
144
+ * single-files at `<stateRoot>/.instar/autonomous-state.local.md` and
145
+ * `<stateRoot>/.claude/autonomous-state.local.md`.
146
+ */
147
+ stateRoot?: string;
126
148
  }
149
+ /**
150
+ * GAP-B D2 — resolve the topic a session serves SERVER-SIDE, mirroring the
151
+ * bash stop hook's inversion of `topic-session-registry.json`'s
152
+ * `topicToSession` (topic→tmux) map keyed on the session's tmux name.
153
+ *
154
+ * The stop-gate hot-path receives the Claude session UUID, not the tmux
155
+ * name, so the caller resolves UUID→tmux first (via the session manager's
156
+ * claudeSessionId record) and passes the tmux name here. Pure + fail-open:
157
+ * any read/parse error → null (the read then uses the legacy fallbacks; a
158
+ * null is the explicit unresolved-topic case, never a silent false).
159
+ *
160
+ * @param registryPath absolute path to topic-session-registry.json
161
+ * @param tmuxSession the session's tmux name (the registry value to invert on)
162
+ */
163
+ export declare function resolveTopicForTmux(registryPath: string, tmuxSession: string | null | undefined, readFile?: (p: string) => string): string | null;
127
164
  export declare function getHotPathState(opts?: HotPathInputs): HotPathState;
128
165
  //# sourceMappingURL=stopGate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stopGate.d.ts","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stopGate.d.ts","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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"}
@@ -241,21 +241,98 @@ export function resolveBranchFromCwd(cwd, readFile, exists) {
241
241
  }
242
242
  }
243
243
  /**
244
- * Heuristic for autonomousActive: existence of `.claude/autonomous-state
245
- * .local.md` is the existing convention agents use to signal autonomous
246
- * intent. Tests may override.
244
+ * GAP-B D1 — fixed read precedence for autonomousActive. An autonomous run
245
+ * registered per-topic at `.instar/autonomous/<topicId>.local.md` (the
246
+ * canonical path the reaper/revival machinery reads) was previously
247
+ * INVISIBLE to the stop gate, which only ever checked the oldest legacy
248
+ * path. The precedence, applied with the SAME existence check the original
249
+ * function used (consistently across all three):
250
+ *
251
+ * 1. `.instar/autonomous/<topicId>.local.md` (per-topic — canonical;
252
+ * only when a topicId is resolved)
253
+ * 2. `.instar/autonomous-state.local.md` (legacy single-file)
254
+ * 3. `.claude/autonomous-state.local.md` (oldest legacy)
255
+ *
256
+ * autonomousActive:true if ANY exists. The legacy paths are ALWAYS checked
257
+ * as fallbacks — even on an unresolved topic — so a registry-lookup miss
258
+ * can never silently return false (no-silent-fallbacks ratchet, D2).
259
+ *
260
+ * `autonomousStateFile` (the historical test/override seam) still wins:
261
+ * when supplied it is the sole path read, preserving back-compat for
262
+ * existing callers/tests that point at one explicit file.
263
+ *
264
+ * E2E-PAIRING: EXEMPT — a read-path correction to an existing internal
265
+ * gate route (/internal/stop-gate/*); it adds no new route or feature
266
+ * surface that could 503 in prod, so the "feature is alive" E2E does not
267
+ * apply. The full HTTP hot-path (UUID to tmux to topic to per-topic file)
268
+ * is covered by tests/integration/stop-gate-autonomous-topic-resolution.test.ts;
269
+ * the incident-level boot E2E belongs to the registration-guard increment.
247
270
  */
248
271
  function readAutonomousActive(opts) {
249
272
  if (typeof opts.autonomousActiveOverride === 'boolean') {
250
273
  return opts.autonomousActiveOverride;
251
274
  }
252
- const file = opts.autonomousStateFile
253
- ?? path.resolve(process.cwd(), '.claude/autonomous-state.local.md');
275
+ const existsSafe = (file) => {
276
+ try {
277
+ return fs.existsSync(file);
278
+ }
279
+ catch { /* @silent-fallback-ok: GAP-B — a per-PATH stat error is not a registry miss; the precedence chain continues to the next path, never short-circuiting the whole read. */
280
+ return false;
281
+ }
282
+ };
283
+ // Back-compat: an explicit single-file override is the sole path read.
284
+ if (opts.autonomousStateFile) {
285
+ return existsSafe(opts.autonomousStateFile);
286
+ }
287
+ const root = opts.stateRoot ?? process.cwd();
288
+ // 1. Per-topic canonical path — ONLY when a topic was resolved. A topicId
289
+ // of undefined/'' means the registry inversion missed (or no session);
290
+ // we fall through to the legacy paths below (the explicit, recorded
291
+ // no-silent-fallback handling for the unresolved-topic case).
292
+ const topicIdStr = opts.topicId === undefined || opts.topicId === null ? '' : String(opts.topicId).trim();
293
+ if (topicIdStr) {
294
+ const perTopic = path.resolve(root, '.instar/autonomous', `${topicIdStr}.local.md`);
295
+ if (existsSafe(perTopic))
296
+ return true;
297
+ }
298
+ // 2 + 3. Legacy single-file fallbacks (ALWAYS checked — including on an
299
+ // unresolved topic). Precedence: .instar then .claude.
300
+ const legacyInstar = path.resolve(root, '.instar/autonomous-state.local.md');
301
+ if (existsSafe(legacyInstar))
302
+ return true;
303
+ const legacyClaude = path.resolve(root, '.claude/autonomous-state.local.md');
304
+ if (existsSafe(legacyClaude))
305
+ return true;
306
+ return false;
307
+ }
308
+ /**
309
+ * GAP-B D2 — resolve the topic a session serves SERVER-SIDE, mirroring the
310
+ * bash stop hook's inversion of `topic-session-registry.json`'s
311
+ * `topicToSession` (topic→tmux) map keyed on the session's tmux name.
312
+ *
313
+ * The stop-gate hot-path receives the Claude session UUID, not the tmux
314
+ * name, so the caller resolves UUID→tmux first (via the session manager's
315
+ * claudeSessionId record) and passes the tmux name here. Pure + fail-open:
316
+ * any read/parse error → null (the read then uses the legacy fallbacks; a
317
+ * null is the explicit unresolved-topic case, never a silent false).
318
+ *
319
+ * @param registryPath absolute path to topic-session-registry.json
320
+ * @param tmuxSession the session's tmux name (the registry value to invert on)
321
+ */
322
+ export function resolveTopicForTmux(registryPath, tmuxSession, readFile = (p) => fs.readFileSync(p, 'utf-8')) {
323
+ if (!tmuxSession)
324
+ return null;
254
325
  try {
255
- return fs.existsSync(file);
326
+ const reg = JSON.parse(readFile(registryPath));
327
+ const t2s = reg.topicToSession ?? {};
328
+ for (const [topicId, sess] of Object.entries(t2s)) {
329
+ if (sess === tmuxSession)
330
+ return topicId;
331
+ }
332
+ return null;
256
333
  }
257
- catch {
258
- return false;
334
+ catch { /* @silent-fallback-ok: GAP-B — a missing/corrupt registry yields null (unresolved topic), which the read handles EXPLICITLY by checking both legacy paths; it is never coerced to autonomousActive:false. */
335
+ return null;
259
336
  }
260
337
  }
261
338
  export function getHotPathState(opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"stopGate.js","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stopGate.js","sourceRoot":"","sources":["../../src/server/stopGate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.585",
3
+ "version": "1.3.587",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -25,8 +25,17 @@
25
25
  * - `--delete-branch` pass-through; `--deadline-ms` so the caller's timeout
26
26
  * and the internal wait can never invert (B24)
27
27
  *
28
- * Usage: node scripts/safe-merge.mjs <PR#> [--admin] [--squash|--merge|--rebase]
28
+ * Usage: node scripts/safe-merge.mjs <PR#> [--auto|--admin] [--squash|--merge|--rebase]
29
29
  * [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>]
30
+ *
31
+ * --auto PREFERRED. Arms GitHub native auto-merge and returns immediately —
32
+ * GitHub merges the instant every required check passes, enforcing
33
+ * branch protection itself (no --admin bypass) and never timing out.
34
+ * Requires "Allow auto-merge" enabled on the repo. Exit 5 = armed,
35
+ * exit 0 = merged immediately (checks were already green).
36
+ * --admin Legacy synchronous path: polls for green, re-imposes the required
37
+ * contexts that --admin would bypass, then merges. Use only when the
38
+ * repo has auto-merge disabled.
30
39
  * [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]
31
40
  * node scripts/safe-merge.mjs --capabilities
32
41
  *
@@ -62,7 +71,7 @@ export const REQUIRED_CONTEXTS_FLOOR = [
62
71
  ];
63
72
 
64
73
  const ALLOWED_FLAGS = new Set([
65
- '--admin', '--squash', '--merge', '--rebase', '--delete-branch', '--capabilities',
74
+ '--admin', '--auto', '--squash', '--merge', '--rebase', '--delete-branch', '--capabilities',
66
75
  ]);
67
76
  const ALLOWED_VALUE_FLAGS = new Set([
68
77
  '--repo', '--deadline-ms', '--match-head-commit', '--extra-floor',
@@ -72,7 +81,7 @@ const ALLOWED_VALUE_FLAGS = new Set([
72
81
  * confused caller must fail loudly, not have its intent silently ignored). */
73
82
  export function parseArgs(argv) {
74
83
  const out = {
75
- pr: null, repo: DEFAULT_REPO, method: '--merge', admin: false,
84
+ pr: null, repo: DEFAULT_REPO, method: '--merge', admin: false, auto: false,
76
85
  deleteBranch: false, deadlineMs: DEFAULT_DEADLINE_MS,
77
86
  matchHeadCommit: null, extraFloor: [], capabilities: false,
78
87
  };
@@ -103,6 +112,7 @@ export function parseArgs(argv) {
103
112
  }
104
113
  if (ALLOWED_FLAGS.has(a)) {
105
114
  if (a === '--admin') out.admin = true;
115
+ else if (a === '--auto') out.auto = true;
106
116
  else if (a === '--delete-branch') out.deleteBranch = true;
107
117
  else if (a === '--capabilities') out.capabilities = true;
108
118
  else out.method = a; // --squash | --merge | --rebase
@@ -111,6 +121,10 @@ export function parseArgs(argv) {
111
121
  throw new UsageError(`unknown flag: ${a} (strict argv — see --capabilities for the contract)`);
112
122
  }
113
123
  if (!out.capabilities && out.pr === null) throw new UsageError('a PR number is required');
124
+ // --auto (native GitHub auto-merge: GitHub enforces every required check
125
+ // before merging) and --admin (bypass-then-re-impose) are contradictory
126
+ // strategies — refuse the incoherent combo rather than silently pick one.
127
+ if (out.auto && out.admin) throw new UsageError('--auto and --admin are mutually exclusive: --auto relies on GitHub native required-check enforcement, --admin bypasses it');
114
128
  return out;
115
129
  }
116
130
 
@@ -123,8 +137,9 @@ export function capabilities() {
123
137
  'strict-argv', 'repo-param', 'json-checks', 'head-pinning',
124
138
  'required-contexts-cross-check', 'producer-binding', 'floor',
125
139
  'reviews-required-refusal', 'classified-exits', 'delete-branch', 'deadline-ms',
140
+ 'native-auto-merge',
126
141
  ],
127
- exitCodes: { merged: 0, refused: 1, usageOrError: 2, alreadyMerged: 3, closed: 4 },
142
+ exitCodes: { merged: 0, refused: 1, usageOrError: 2, alreadyMerged: 3, closed: 4, autoMergeArmed: 5 },
128
143
  };
129
144
  }
130
145
 
@@ -328,7 +343,7 @@ async function main() {
328
343
  } catch (e) {
329
344
  if (e instanceof UsageError) {
330
345
  console.error(`safe-merge: ${e.message}`);
331
- console.error('usage: node scripts/safe-merge.mjs <PR#> [--admin] [--squash|--merge|--rebase] [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>] [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]');
346
+ console.error('usage: node scripts/safe-merge.mjs <PR#> [--auto|--admin] [--squash|--merge|--rebase] [--repo <owner/name>] [--delete-branch] [--deadline-ms <n>] [--match-head-commit <sha>] [--extra-floor <ctx,ctx>]');
332
347
  result({ result: 'error:usage', detail: e.message });
333
348
  process.exit(2);
334
349
  }
@@ -370,6 +385,54 @@ async function main() {
370
385
  process.exit(1);
371
386
  }
372
387
 
388
+ // --- Native auto-merge path (--auto): arm-and-return, no polling ----------
389
+ // GitHub's native auto-merge merges the PR the instant every REQUIRED check
390
+ // passes and the branch is mergeable — and it NEVER bypasses a check (unlike
391
+ // --admin). So the required-context re-imposition this script does manually
392
+ // for the --admin path is enforced by GitHub itself here. We only run the
393
+ // cheap pre-flight above (open, not draft, head not moved), arm auto-merge,
394
+ // confirm it's armed, and exit. No deadline, so it can't time out the way a
395
+ // foreground/background poller does (the failure mode that wedged hot-branch
396
+ // merges: the watcher is killed before slow CI finishes).
397
+ if (args.auto) {
398
+ const autoArgs = ['pr', 'merge', pr, '--repo', repo, args.method, '--auto'];
399
+ if (args.matchHeadCommit) autoArgs.push('--match-head-commit', pinnedHead);
400
+ if (args.deleteBranch) autoArgs.push('--delete-branch');
401
+ console.log(`safe-merge: arming native auto-merge for PR #${pr} (${args.method}, head ${pinnedHead.slice(0, 12)}) — GitHub will merge when all required checks pass...`);
402
+ const a = spawnSync('gh', autoArgs, { encoding: 'utf-8' });
403
+ process.stdout.write(a.stdout ?? '');
404
+ process.stderr.write(a.stderr ?? '');
405
+ if (a.status !== 0 || a.signal) {
406
+ const cls = classifyMergeFailure(a.stderr, a.status, a.signal);
407
+ if (cls === 'already-merged') { result({ result: 'already-merged', pr: Number(pr) }); process.exit(3); }
408
+ if (cls === 'closed') { result({ result: 'closed', pr: Number(pr) }); process.exit(4); }
409
+ result({ result: `refused:auto-arm-${cls}`, raw: cls });
410
+ console.error(`safe-merge: could not arm auto-merge (${cls}). Is "Allow auto-merge" enabled on the repo settings?`);
411
+ process.exit(1);
412
+ }
413
+ // Independent confirmation (B10: never trust the exit code alone). If the
414
+ // checks were ALREADY green, GitHub merges immediately and we report merged.
415
+ try {
416
+ const after = ghJson(['pr', 'view', pr, '--repo', repo, '--json', 'state,mergedAt,autoMergeRequest']);
417
+ if (after.state === 'MERGED' || after.mergedAt) {
418
+ result({ result: 'merged', pr: Number(pr), head: pinnedHead });
419
+ process.exit(0);
420
+ }
421
+ if (after.autoMergeRequest) {
422
+ result({ result: 'auto-merge-armed', pr: Number(pr), head: pinnedHead });
423
+ console.log('safe-merge: auto-merge armed. GitHub will merge when required checks pass — no further action needed.');
424
+ process.exit(5);
425
+ }
426
+ result({ result: 'error:auto-arm-unconfirmed', state: after.state });
427
+ console.error('safe-merge: gh reported success but auto-merge is not armed on re-read. NOT claiming success.');
428
+ process.exit(2);
429
+ } catch (e) {
430
+ result({ result: 'error:auto-confirm-unreadable', detail: String(e.message).slice(0, 300) });
431
+ console.error('safe-merge: could not independently confirm auto-merge was armed. NOT claiming success.');
432
+ process.exit(2);
433
+ }
434
+ }
435
+
373
436
  // --- Wait for checks to settle (bucket-based, never name-based) ----------
374
437
  console.log(`safe-merge: waiting for PR #${pr} checks to finish (deadline ${Math.round(args.deadlineMs / 1000)}s)...`);
375
438
  let checksState;