instar 1.3.489 → 1.3.490

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 (106) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +979 -28
  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 +23 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/CodexResumeMap.d.ts +95 -0
  8. package/dist/core/CodexResumeMap.d.ts.map +1 -0
  9. package/dist/core/CodexResumeMap.js +283 -0
  10. package/dist/core/CodexResumeMap.js.map +1 -0
  11. package/dist/core/MeshRpc.d.ts +3 -0
  12. package/dist/core/MeshRpc.d.ts.map +1 -1
  13. package/dist/core/MeshRpc.js +5 -0
  14. package/dist/core/MeshRpc.js.map +1 -1
  15. package/dist/core/ModelSwapService.d.ts +26 -11
  16. package/dist/core/ModelSwapService.d.ts.map +1 -1
  17. package/dist/core/ModelSwapService.js +59 -21
  18. package/dist/core/ModelSwapService.js.map +1 -1
  19. package/dist/core/PostUpdateMigrator.d.ts +16 -0
  20. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  21. package/dist/core/PostUpdateMigrator.js +62 -2
  22. package/dist/core/PostUpdateMigrator.js.map +1 -1
  23. package/dist/core/SessionManager.d.ts +4 -0
  24. package/dist/core/SessionManager.d.ts.map +1 -1
  25. package/dist/core/SessionManager.js +3 -0
  26. package/dist/core/SessionManager.js.map +1 -1
  27. package/dist/core/SessionRefresh.d.ts +36 -7
  28. package/dist/core/SessionRefresh.d.ts.map +1 -1
  29. package/dist/core/SessionRefresh.js +90 -29
  30. package/dist/core/SessionRefresh.js.map +1 -1
  31. package/dist/core/TopicProfileOrchestrator.d.ts +480 -0
  32. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -0
  33. package/dist/core/TopicProfileOrchestrator.js +1404 -0
  34. package/dist/core/TopicProfileOrchestrator.js.map +1 -0
  35. package/dist/core/TopicProfileResolver.d.ts +104 -0
  36. package/dist/core/TopicProfileResolver.d.ts.map +1 -0
  37. package/dist/core/TopicProfileResolver.js +231 -0
  38. package/dist/core/TopicProfileResolver.js.map +1 -0
  39. package/dist/core/TopicProfileStore.d.ts +308 -0
  40. package/dist/core/TopicProfileStore.d.ts.map +1 -0
  41. package/dist/core/TopicProfileStore.js +781 -0
  42. package/dist/core/TopicProfileStore.js.map +1 -0
  43. package/dist/core/TopicProfileTransferCarrier.d.ts +227 -0
  44. package/dist/core/TopicProfileTransferCarrier.d.ts.map +1 -0
  45. package/dist/core/TopicProfileTransferCarrier.js +533 -0
  46. package/dist/core/TopicProfileTransferCarrier.js.map +1 -0
  47. package/dist/core/TopicResumeMap.d.ts +67 -1
  48. package/dist/core/TopicResumeMap.d.ts.map +1 -1
  49. package/dist/core/TopicResumeMap.js +114 -1
  50. package/dist/core/TopicResumeMap.js.map +1 -1
  51. package/dist/core/classifyProfileChange.d.ts +83 -0
  52. package/dist/core/classifyProfileChange.d.ts.map +1 -0
  53. package/dist/core/classifyProfileChange.js +274 -0
  54. package/dist/core/classifyProfileChange.js.map +1 -0
  55. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  56. package/dist/core/devGatedFeatures.js +6 -0
  57. package/dist/core/devGatedFeatures.js.map +1 -1
  58. package/dist/core/frameworkSessionLaunch.d.ts +26 -0
  59. package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
  60. package/dist/core/frameworkSessionLaunch.js +58 -0
  61. package/dist/core/frameworkSessionLaunch.js.map +1 -1
  62. package/dist/core/slackRefreshBinding.d.ts +83 -0
  63. package/dist/core/slackRefreshBinding.d.ts.map +1 -0
  64. package/dist/core/slackRefreshBinding.js +54 -0
  65. package/dist/core/slackRefreshBinding.js.map +1 -0
  66. package/dist/core/topicProfileIngress.d.ts +128 -0
  67. package/dist/core/topicProfileIngress.d.ts.map +1 -0
  68. package/dist/core/topicProfileIngress.js +249 -0
  69. package/dist/core/topicProfileIngress.js.map +1 -0
  70. package/dist/core/topicProfileValidation.d.ts +109 -0
  71. package/dist/core/topicProfileValidation.d.ts.map +1 -0
  72. package/dist/core/topicProfileValidation.js +247 -0
  73. package/dist/core/topicProfileValidation.js.map +1 -0
  74. package/dist/core/topicProfileWriteSurface.d.ts +222 -0
  75. package/dist/core/topicProfileWriteSurface.d.ts.map +1 -0
  76. package/dist/core/topicProfileWriteSurface.js +631 -0
  77. package/dist/core/topicProfileWriteSurface.js.map +1 -0
  78. package/dist/core/types.d.ts +37 -0
  79. package/dist/core/types.d.ts.map +1 -1
  80. package/dist/core/types.js.map +1 -1
  81. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  82. package/dist/lifeline/TelegramLifeline.js +6 -0
  83. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  84. package/dist/messaging/TelegramAdapter.d.ts +10 -1
  85. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  86. package/dist/messaging/TelegramAdapter.js +41 -1
  87. package/dist/messaging/TelegramAdapter.js.map +1 -1
  88. package/dist/scaffold/templates.d.ts.map +1 -1
  89. package/dist/scaffold/templates.js +9 -0
  90. package/dist/scaffold/templates.js.map +1 -1
  91. package/dist/server/AgentServer.d.ts +32 -0
  92. package/dist/server/AgentServer.d.ts.map +1 -1
  93. package/dist/server/AgentServer.js +52 -3
  94. package/dist/server/AgentServer.js.map +1 -1
  95. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  96. package/dist/server/CapabilityIndex.js +1 -0
  97. package/dist/server/CapabilityIndex.js.map +1 -1
  98. package/dist/server/routes.d.ts +17 -0
  99. package/dist/server/routes.d.ts.map +1 -1
  100. package/dist/server/routes.js +271 -1
  101. package/dist/server/routes.js.map +1 -1
  102. package/package.json +1 -1
  103. package/src/data/builtin-manifest.json +66 -66
  104. package/src/scaffold/templates.ts +9 -0
  105. package/upgrades/1.3.490.md +34 -0
  106. package/upgrades/side-effects/topic-profile.md +142 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TopicResumeMap.d.ts","sourceRoot":"","sources":["../../src/core/TopicResumeMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAMnE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACH,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAqCtC;;;;;;;OAOG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUhF;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAyB9D;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBnC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAmE1G,OAAO,CAAC,IAAI;IAWZ;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,OAAO,CAAC,WAAW;CA6BpB"}
1
+ {"version":3,"file":"TopicResumeMap.d.ts","sourceRoot":"","sources":["../../src/core/TopicResumeMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,gBAAgB,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAKzF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAgC;gBAErC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAMnE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACH,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAqCtC;;;;;;;OAOG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUhF;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAIhD,OAAO,CAAC,UAAU;IAWlB;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,gBAAyB,GAAG,IAAI;IA4BrG;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqBnC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ1E;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAMvD,qEAAqE;IACrE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIhD,mFAAmF;IACnF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAmB3C,kFAAkF;IAClF,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAiBhC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B;;;;;;;;;OASG;IACH,qBAAqB,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IA8E1G,OAAO,CAAC,IAAI;IAWZ;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,OAAO,CAAC,WAAW;CA6BpB"}
@@ -15,12 +15,14 @@ import os from 'node:os';
15
15
  import { spawnSync } from 'node:child_process';
16
16
  import { findRolloutFileSync } from '../providers/adapters/openai-codex/observability/sessionPaths.js';
17
17
  import { findGeminiSessionFileSync } from '../providers/adapters/gemini-cli/observability/sessionPaths.js';
18
+ import { DegradationReporter } from '../monitoring/DegradationReporter.js';
18
19
  /** Entries older than 24 hours are pruned */
19
20
  const MAX_AGE_MS = 24 * 60 * 60 * 1000;
20
21
  export class TopicResumeMap {
21
22
  filePath;
22
23
  projectDir;
23
24
  tmuxPath;
25
+ writeGate = null;
24
26
  constructor(stateDir, projectDir, tmuxPath) {
25
27
  this.filePath = path.join(stateDir, 'topic-resume-map.json');
26
28
  this.projectDir = projectDir;
@@ -97,15 +99,43 @@ export class TopicResumeMap {
97
99
  // to thread history than resume the wrong conversation.
98
100
  return null;
99
101
  }
102
+ /**
103
+ * Install the §8 profile write-gate (TOPIC-PROFILE-SPEC). All writers are
104
+ * gated at this single chokepoint — the heartbeat, the kill listener, the
105
+ * post-spawn save and the shutdown saves all land in save()/
106
+ * refreshResumeMappings. No gate installed ⇒ today's behavior (ungated).
107
+ */
108
+ setWriteGate(gate) {
109
+ this.writeGate = gate;
110
+ }
111
+ gateAllows(topicId) {
112
+ if (!this.writeGate)
113
+ return true;
114
+ try {
115
+ return this.writeGate(topicId).allowed;
116
+ }
117
+ catch {
118
+ // A broken gate must not silence resume capture (the safe direction
119
+ // for an ungateable read is today's behavior).
120
+ return true;
121
+ }
122
+ }
100
123
  /**
101
124
  * Persist a resume mapping before killing an idle session.
125
+ * Entries are framework-tagged ('claude-code' — this map only ever holds
126
+ * Claude JSONL UUIDs) and provenance-tagged (§8). A refused (gated) write
127
+ * is a silent no-op — the gate's caller owns disclosure.
102
128
  */
103
- save(topicId, uuid, sessionName) {
129
+ save(topicId, uuid, sessionName, provenance = 'hook') {
130
+ if (!this.gateAllows(topicId))
131
+ return;
104
132
  const map = this.load();
105
133
  map[String(topicId)] = {
106
134
  uuid,
107
135
  savedAt: new Date().toISOString(),
108
136
  sessionName,
137
+ framework: 'claude-code',
138
+ provenance,
109
139
  };
110
140
  // Prune old entries
111
141
  const now = Date.now();
@@ -131,6 +161,9 @@ export class TopicResumeMap {
131
161
  const entry = map[String(topicId)];
132
162
  if (!entry)
133
163
  return null;
164
+ // §8 — parked entries are ignored by resolution (recoverable via unpark).
165
+ if (entry.parked)
166
+ return null;
134
167
  // Check age
135
168
  if (Date.now() - new Date(entry.savedAt).getTime() > MAX_AGE_MS) {
136
169
  return null;
@@ -141,6 +174,75 @@ export class TopicResumeMap {
141
174
  }
142
175
  return entry.uuid;
143
176
  }
177
+ /**
178
+ * §8 last-line guard: the spawn path REFUSES a resume id whose framework
179
+ * tag mismatches the resolved framework, falling to CONTINUATION with
180
+ * disclosure. Untagged legacy entries grandfather as 'claude-code'.
181
+ */
182
+ getForFramework(topicId, resolvedFramework) {
183
+ const entry = this.load()[String(topicId)];
184
+ if (!entry)
185
+ return null;
186
+ const tag = entry.framework ?? 'claude-code';
187
+ if (tag !== resolvedFramework)
188
+ return null;
189
+ return this.get(topicId);
190
+ }
191
+ /**
192
+ * §8 provenance read — the none-loss rows require HOOK provenance; an
193
+ * mtime-fallback-only entry classifies as CONTINUATION-class loss.
194
+ * Untagged legacy entries grandfather as 'hook' (provably safe).
195
+ */
196
+ getProvenance(topicId) {
197
+ const entry = this.load()[String(topicId)];
198
+ if (!entry || entry.parked)
199
+ return null;
200
+ return entry.provenance ?? 'hook';
201
+ }
202
+ /** Raw entry (parked included) for the §8 park/un-park machinery. */
203
+ getEntryRaw(topicId) {
204
+ return this.load()[String(topicId)] ?? null;
205
+ }
206
+ /** §8 — "remove" means PARK, not delete (deletion destroys the cheap recovery). */
207
+ park(topicId, reason) {
208
+ const map = this.load();
209
+ const entry = map[String(topicId)];
210
+ if (!entry || entry.parked)
211
+ return;
212
+ entry.parked = reason;
213
+ try {
214
+ fs.writeFileSync(this.filePath, JSON.stringify(map, null, 2));
215
+ }
216
+ catch (err) {
217
+ console.error(`[TopicResumeMap] Failed to park: ${err}`);
218
+ DegradationReporter.getInstance().report({
219
+ feature: 'TopicResumeMap.park',
220
+ primary: "Park a topic's resume entry so resolution ignores it (§8 mid-framework-switch suppression)",
221
+ fallback: 'The entry stays live on disk — resolution keeps returning the old resume UUID',
222
+ reason: `Park write failed: ${err instanceof Error ? err.message : String(err)}`,
223
+ impact: 'A framework switch may resume the previous framework\'s transcript on the next spawn (the exact poisoning the park exists to prevent)',
224
+ });
225
+ }
226
+ }
227
+ /** §10.4 revert / §10.3 undo — un-park the entry. Returns true when un-parked. */
228
+ unpark(topicId) {
229
+ const map = this.load();
230
+ const entry = map[String(topicId)];
231
+ if (!entry?.parked)
232
+ return false;
233
+ entry.parked = null;
234
+ try {
235
+ fs.writeFileSync(this.filePath, JSON.stringify(map, null, 2));
236
+ }
237
+ catch (err) {
238
+ // @silent-fallback-ok: not silent — the write failure is logged and
239
+ // SURFACED to the caller via the boolean return; the §10.4 revert /
240
+ // §10.3 undo paths own disclosure of an undo that did not land.
241
+ console.error(`[TopicResumeMap] Failed to unpark: ${err}`);
242
+ return false;
243
+ }
244
+ return true;
245
+ }
144
246
  /**
145
247
  * Remove an entry after successful resume (prevents stale reuse).
146
248
  */
@@ -182,7 +284,15 @@ export class TopicResumeMap {
182
284
  if (activeSessions.length === 0)
183
285
  return;
184
286
  for (const { topicId, sessionName, claudeSessionId } of activeSessions) {
287
+ // §8 writer gate — the heartbeat MUST NOT write a Claude JSONL UUID
288
+ // for a topic whose resolved profile framework is not claude-code,
289
+ // or that is mid-framework-switch (TOPIC-PROFILE-SPEC §8: this is
290
+ // the writer that would otherwise re-poison the map within a minute
291
+ // of a switch).
292
+ if (!this.gateAllows(topicId))
293
+ continue;
185
294
  let uuid = null;
295
+ let provenance = 'hook';
186
296
  if (claudeSessionId && this.jsonlExists(claudeSessionId)) {
187
297
  // Authoritative: Claude Code reported its own session ID via hooks
188
298
  uuid = claudeSessionId;
@@ -190,6 +300,7 @@ export class TopicResumeMap {
190
300
  else if (activeSessions.length === 1) {
191
301
  // Single session fallback: mtime-based is safe when there's no ambiguity
192
302
  uuid = this.findClaudeSessionUuid();
303
+ provenance = 'mtime-fallback';
193
304
  }
194
305
  // With multiple sessions and no authoritative UUID, skip — don't guess
195
306
  if (!uuid)
@@ -203,6 +314,8 @@ export class TopicResumeMap {
203
314
  uuid,
204
315
  savedAt: new Date().toISOString(),
205
316
  sessionName,
317
+ framework: 'claude-code',
318
+ provenance,
206
319
  };
207
320
  updated++;
208
321
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TopicResumeMap.js","sourceRoot":"","sources":["../../src/core/TopicResumeMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopicResumeMap.js","sourceRoot":"","sources":["../../src/core/TopicResumeMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * classifyProfileChange — the §7 respawn classifier & swap-quality matrix
3
+ * (TOPIC-PROFILE-SPEC). Pure in-memory comparison, NO I/O.
4
+ *
5
+ * Picks the gentlest swap method for a profile change and states the honest
6
+ * expected context loss — including the contingencies (FABLE canary, Claude
7
+ * resume-UUID capture, Codex rollout-id capture, unverified thinking-toggle
8
+ * resume, unverified cross-model resume). The none-loss rows require HOOK
9
+ * provenance / fence-validated capture; anything weaker classifies to the
10
+ * disclosed-loss row — a wrong-conversation resume is worse than disclosed
11
+ * loss (§8).
12
+ *
13
+ * Classification chooses the METHOD only. Idle is a precondition RE-CHECKED
14
+ * at kill time inside the per-topic lock (§8 TOCTOU rule) — an unconfirmed
15
+ * idle read here fails toward kill+--resume (the safe, lossless direction,
16
+ * never an in-flight injection); at kill time unconfirmed is treated as busy.
17
+ */
18
+ import type { TopicProfile } from './TopicProfileStore.js';
19
+ export type SwapMethod = 'in-flight' | 'resume' | 'continuation' | 'none';
20
+ export type ExpectedLoss = 'none' | 'recent-only';
21
+ export type IdleReading = 'confirmed-idle' | 'busy' | 'unconfirmed';
22
+ export interface ProfileSessionState {
23
+ /** False for a dormant topic (no live session) — change applies at next spawn. */
24
+ exists: boolean;
25
+ /** FABLE capture-pane idle confirmation (three-valued, §8). */
26
+ idle: IdleReading;
27
+ /** Pane-idle is not task-done: an active autonomous/time-boxed run is busy (§8). */
28
+ autonomousActive: boolean;
29
+ /** Protected sessions are never profile-killed (§8). */
30
+ isProtected: boolean;
31
+ /**
32
+ * §8 pre-kill predicate: the live session has a hook-reported
33
+ * claudeSessionId (or an existing HOOK-provenance resume entry) — not
34
+ * merely "an entry exists" (mtime-fallback entries classify as
35
+ * CONTINUATION-class loss).
36
+ */
37
+ claudeResumeReady: boolean;
38
+ /** A fence-validated codex rollout-id is captured for this topic (§7). */
39
+ codexRolloutCaptured: boolean;
40
+ /**
41
+ * §14 runtime canary: a durable recent-confirmation marker (TTL) shows the
42
+ * FABLE in-flight swap actually confirming. No recent confirmation ⇒ the
43
+ * in-flight row is unavailable.
44
+ */
45
+ inFlightSwapConfirmedRecently: boolean;
46
+ /** §6 — thinking off↔on toggle verified benign across --resume on the live CLI. */
47
+ thinkingOffOnResumeVerified: boolean;
48
+ /** §6 — thinking budget LEVEL change verified across --resume (round-4: same contingent cell). */
49
+ thinkingLevelResumeVerified: boolean;
50
+ /** §6 — MODEL change across --resume verified (round-4: wedge-class risk). */
51
+ crossModelResumeVerified: boolean;
52
+ /** §6 contingency — a launch-time thinking control exists for claude-code at all. */
53
+ claudeThinkingControlAvailable: boolean;
54
+ }
55
+ export interface ProfileChangeClassification {
56
+ requiresRespawn: boolean;
57
+ swapMethod: SwapMethod;
58
+ expectedLoss: ExpectedLoss;
59
+ reason: string;
60
+ /**
61
+ * True when the method is kill-bearing and the session is not
62
+ * confirmed-idle (busy/unconfirmed/autonomous) — §8 defers until idle.
63
+ */
64
+ deferUntilIdle: boolean;
65
+ /**
66
+ * §7 busy framework switch: refuse-or-confirm, never a silent mid-work
67
+ * kill. (deferUntilIdle is also true; this adds the explicit-confirm arm.)
68
+ */
69
+ refuseOrConfirm: boolean;
70
+ /** Protected sessions defer regardless of idle; 'switch now' never overrides (§8). */
71
+ protectedDeferral: boolean;
72
+ /**
73
+ * True when the respawn is a FRESH spawn (framework switch / unverified
74
+ * resume path) — the §8 kill path must PARK both resume stores' entries
75
+ * before the kill and suppress the save-on-kill listeners.
76
+ */
77
+ freshRespawn: boolean;
78
+ /** Which profile axes changed (for disclosure text). */
79
+ changedFields: string[];
80
+ }
81
+ /** Classify a profile change against the live-session state. Pure, no I/O. */
82
+ export declare function classifyProfileChange(oldProfile: TopicProfile | null, newProfile: TopicProfile | null, session: ProfileSessionState): ProfileChangeClassification;
83
+ //# sourceMappingURL=classifyProfileChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyProfileChange.d.ts","sourceRoot":"","sources":["../../src/core/classifyProfileChange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,MAAM,GAAG,aAAa,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,IAAI,EAAE,WAAW,CAAC;IAClB,oFAAoF;IACpF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0EAA0E;IAC1E,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,6BAA6B,EAAE,OAAO,CAAC;IACvC,mFAAmF;IACnF,2BAA2B,EAAE,OAAO,CAAC;IACrC,kGAAkG;IAClG,2BAA2B,EAAE,OAAO,CAAC;IACrC,8EAA8E;IAC9E,wBAAwB,EAAE,OAAO,CAAC;IAClC,qFAAqF;IACrF,8BAA8B,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB,sFAAsF;IACtF,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAWD,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,YAAY,GAAG,IAAI,EAC/B,UAAU,EAAE,YAAY,GAAG,IAAI,EAC/B,OAAO,EAAE,mBAAmB,GAC3B,2BAA2B,CA2Q7B"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * classifyProfileChange — the §7 respawn classifier & swap-quality matrix
3
+ * (TOPIC-PROFILE-SPEC). Pure in-memory comparison, NO I/O.
4
+ *
5
+ * Picks the gentlest swap method for a profile change and states the honest
6
+ * expected context loss — including the contingencies (FABLE canary, Claude
7
+ * resume-UUID capture, Codex rollout-id capture, unverified thinking-toggle
8
+ * resume, unverified cross-model resume). The none-loss rows require HOOK
9
+ * provenance / fence-validated capture; anything weaker classifies to the
10
+ * disclosed-loss row — a wrong-conversation resume is worse than disclosed
11
+ * loss (§8).
12
+ *
13
+ * Classification chooses the METHOD only. Idle is a precondition RE-CHECKED
14
+ * at kill time inside the per-topic lock (§8 TOCTOU rule) — an unconfirmed
15
+ * idle read here fails toward kill+--resume (the safe, lossless direction,
16
+ * never an in-flight injection); at kill time unconfirmed is treated as busy.
17
+ */
18
+ const AXES = ['framework', 'model', 'modelTier', 'thinkingMode', 'escalationOverride'];
19
+ function isOffOnToggle(a, b) {
20
+ const oldMode = a?.thinkingMode ?? null;
21
+ const newMode = b?.thinkingMode ?? null;
22
+ if (oldMode === newMode)
23
+ return false;
24
+ return oldMode === 'off' || newMode === 'off' || oldMode === null || newMode === null;
25
+ }
26
+ /** Classify a profile change against the live-session state. Pure, no I/O. */
27
+ export function classifyProfileChange(oldProfile, newProfile, session) {
28
+ const changedFields = AXES.filter((f) => (oldProfile?.[f] ?? null) !== (newProfile?.[f] ?? null));
29
+ const base = {
30
+ deferUntilIdle: false,
31
+ refuseOrConfirm: false,
32
+ protectedDeferral: false,
33
+ freshRespawn: false,
34
+ changedFields,
35
+ };
36
+ // §8 net-unchanged / no-effective-delta → zero respawns.
37
+ if (changedFields.length === 0) {
38
+ return {
39
+ ...base,
40
+ requiresRespawn: false,
41
+ swapMethod: 'none',
42
+ expectedLoss: 'none',
43
+ reason: 'no effective profile change',
44
+ };
45
+ }
46
+ // escalationOverride alone never moves a live session — it is consulted by
47
+ // the escalation authority at its own decision points (§9).
48
+ const onlyEscalationOverride = changedFields.length === 1 && changedFields[0] === 'escalationOverride';
49
+ if (onlyEscalationOverride) {
50
+ return {
51
+ ...base,
52
+ requiresRespawn: false,
53
+ swapMethod: 'none',
54
+ expectedLoss: 'none',
55
+ reason: 'escalation-override change — applies at the next escalation decision, no respawn',
56
+ };
57
+ }
58
+ // Dormant topic: the pin applies at the next natural spawn.
59
+ if (!session.exists) {
60
+ return {
61
+ ...base,
62
+ requiresRespawn: false,
63
+ swapMethod: 'none',
64
+ expectedLoss: 'none',
65
+ reason: 'no live session — profile applies at the next session start',
66
+ };
67
+ }
68
+ const oldFramework = oldProfile?.framework ?? 'claude-code';
69
+ const newFramework = newProfile?.framework ?? oldFramework;
70
+ const frameworkSwitch = changedFields.includes('framework') && oldFramework !== newFramework;
71
+ const confirmedIdle = session.idle === 'confirmed-idle' && !session.autonomousActive;
72
+ const busyish = !confirmedIdle;
73
+ const killGuards = (cls) => ({
74
+ ...cls,
75
+ deferUntilIdle: busyish,
76
+ protectedDeferral: session.isProtected,
77
+ });
78
+ // ── framework switch (the cold-rebuild path) ──────────────────────────
79
+ if (frameworkSwitch) {
80
+ if (busyish) {
81
+ // §7 busy row: refuse-or-confirm — never a silent mid-work kill.
82
+ return {
83
+ ...base,
84
+ requiresRespawn: true,
85
+ swapMethod: 'continuation',
86
+ expectedLoss: 'recent-only',
87
+ reason: 'framework switch while the session is mid-task — refused until idle (or an explicit "switch now")',
88
+ deferUntilIdle: true,
89
+ refuseOrConfirm: true,
90
+ protectedDeferral: session.isProtected,
91
+ freshRespawn: true,
92
+ };
93
+ }
94
+ return killGuards({
95
+ ...base,
96
+ requiresRespawn: true,
97
+ swapMethod: 'continuation',
98
+ expectedLoss: 'recent-only',
99
+ reason: 'framework switch — the full transcript cannot follow across frameworks; CONTINUATION carries recent history + memory',
100
+ refuseOrConfirm: false,
101
+ freshRespawn: true,
102
+ });
103
+ }
104
+ // ── same-framework changes ────────────────────────────────────────────
105
+ const modelChanged = changedFields.includes('model');
106
+ const tierChanged = changedFields.includes('modelTier');
107
+ const thinkingChanged = changedFields.includes('thinkingMode');
108
+ if (newFramework === 'codex-cli') {
109
+ // §7 Codex rows: none-loss IFF the fence-validated rollout-id is
110
+ // captured on THIS machine; else CONTINUATION, recent-only, disclosed.
111
+ if (session.codexRolloutCaptured) {
112
+ return killGuards({
113
+ ...base,
114
+ requiresRespawn: true,
115
+ swapMethod: 'resume',
116
+ expectedLoss: 'none',
117
+ reason: 'codex change with a fence-validated rollout-id — kill + codex resume <rollout-id>',
118
+ refuseOrConfirm: false,
119
+ freshRespawn: false,
120
+ });
121
+ }
122
+ return killGuards({
123
+ ...base,
124
+ requiresRespawn: true,
125
+ swapMethod: 'continuation',
126
+ expectedLoss: 'recent-only',
127
+ reason: 'codex change with NO captured rollout-id — fresh spawn, recent history only (disclosed)',
128
+ refuseOrConfirm: false,
129
+ freshRespawn: true,
130
+ });
131
+ }
132
+ if (newFramework !== 'claude-code') {
133
+ // gemini/pi: no resume verification surface wired — honest CONTINUATION.
134
+ return killGuards({
135
+ ...base,
136
+ requiresRespawn: true,
137
+ swapMethod: 'continuation',
138
+ expectedLoss: 'recent-only',
139
+ reason: `${newFramework} profile change — no verified resume path; fresh spawn, recent history only`,
140
+ refuseOrConfirm: false,
141
+ freshRespawn: true,
142
+ });
143
+ }
144
+ // claude-code rows.
145
+ // thinkingMode with NO usable launch-time control: disclosed no-op (§6).
146
+ if (thinkingChanged && !modelChanged && !tierChanged && !session.claudeThinkingControlAvailable) {
147
+ return {
148
+ ...base,
149
+ requiresRespawn: false,
150
+ swapMethod: 'none',
151
+ expectedLoss: 'none',
152
+ reason: 'claude thinking-mode control is not verifiable on the installed CLI — recorded, but a disclosed no-op until it is',
153
+ };
154
+ }
155
+ // modelTier pin (in-flight eligible row).
156
+ if (tierChanged && !modelChanged && !thinkingChanged) {
157
+ if (session.idle === 'confirmed-idle' && !session.autonomousActive && session.inFlightSwapConfirmedRecently) {
158
+ return killGuards({
159
+ ...base,
160
+ requiresRespawn: false,
161
+ swapMethod: 'in-flight',
162
+ expectedLoss: 'none',
163
+ reason: 'tier pin on a confirmed-idle claude session with a recently-confirmed swap canary — in-flight /model swap',
164
+ refuseOrConfirm: false,
165
+ freshRespawn: false,
166
+ });
167
+ }
168
+ // Canary not recently confirmed, or idle unconfirmed/busy: fail toward
169
+ // kill+--resume (still none-loss, brief respawn). Cross-model resume
170
+ // applies — a tier change IS a model change at the transcript level.
171
+ if (!session.crossModelResumeVerified) {
172
+ return killGuards({
173
+ ...base,
174
+ requiresRespawn: true,
175
+ swapMethod: 'continuation',
176
+ expectedLoss: 'recent-only',
177
+ reason: 'tier change without verified cross-model resume — fresh spawn (resuming across models risks the thinking-block wedge)',
178
+ refuseOrConfirm: false,
179
+ freshRespawn: true,
180
+ });
181
+ }
182
+ if (!session.claudeResumeReady) {
183
+ return killGuards({
184
+ ...base,
185
+ requiresRespawn: true,
186
+ swapMethod: 'continuation',
187
+ expectedLoss: 'recent-only',
188
+ reason: 'tier change with no hook-captured resume UUID — fresh spawn, recent history only (disclosed)',
189
+ refuseOrConfirm: false,
190
+ freshRespawn: true,
191
+ });
192
+ }
193
+ return killGuards({
194
+ ...base,
195
+ requiresRespawn: true,
196
+ swapMethod: 'resume',
197
+ expectedLoss: 'none',
198
+ reason: 'tier change — kill + claude --resume (in-flight row unavailable)',
199
+ refuseOrConfirm: false,
200
+ freshRespawn: false,
201
+ });
202
+ }
203
+ // Explicit model change (round-4: cross-model resume is wedge-class until verified).
204
+ if (modelChanged || tierChanged) {
205
+ if (!session.crossModelResumeVerified) {
206
+ return killGuards({
207
+ ...base,
208
+ requiresRespawn: true,
209
+ swapMethod: 'continuation',
210
+ expectedLoss: 'recent-only',
211
+ reason: 'model change without verified cross-model resume — fresh spawn (resuming an old-model transcript risks the thinking-block wedge)',
212
+ refuseOrConfirm: false,
213
+ freshRespawn: true,
214
+ });
215
+ }
216
+ if (!session.claudeResumeReady) {
217
+ return killGuards({
218
+ ...base,
219
+ requiresRespawn: true,
220
+ swapMethod: 'continuation',
221
+ expectedLoss: 'recent-only',
222
+ reason: 'model change with no hook-captured resume UUID — fresh spawn, recent history only (disclosed)',
223
+ refuseOrConfirm: false,
224
+ freshRespawn: true,
225
+ });
226
+ }
227
+ return killGuards({
228
+ ...base,
229
+ requiresRespawn: true,
230
+ swapMethod: 'resume',
231
+ expectedLoss: 'none',
232
+ reason: 'model change — kill + claude --resume (full transcript)',
233
+ refuseOrConfirm: false,
234
+ freshRespawn: false,
235
+ });
236
+ }
237
+ // thinkingMode change (claude, control available).
238
+ const offOn = isOffOnToggle(oldProfile, newProfile);
239
+ const toggleVerified = offOn ? session.thinkingOffOnResumeVerified : session.thinkingLevelResumeVerified;
240
+ if (!toggleVerified) {
241
+ return killGuards({
242
+ ...base,
243
+ requiresRespawn: true,
244
+ swapMethod: 'continuation',
245
+ expectedLoss: 'recent-only',
246
+ reason: offOn
247
+ ? 'thinking off↔on toggle unverified across --resume — fresh spawn (the toggle is the documented wedge class)'
248
+ : 'thinking level change unverified across --resume — fresh spawn (disclosed)',
249
+ refuseOrConfirm: false,
250
+ freshRespawn: true,
251
+ });
252
+ }
253
+ if (!session.claudeResumeReady) {
254
+ return killGuards({
255
+ ...base,
256
+ requiresRespawn: true,
257
+ swapMethod: 'continuation',
258
+ expectedLoss: 'recent-only',
259
+ reason: 'thinking change with no hook-captured resume UUID — fresh spawn, recent history only (disclosed)',
260
+ refuseOrConfirm: false,
261
+ freshRespawn: true,
262
+ });
263
+ }
264
+ return killGuards({
265
+ ...base,
266
+ requiresRespawn: true,
267
+ swapMethod: 'resume',
268
+ expectedLoss: 'none',
269
+ reason: 'thinking change — kill + claude --resume (verified benign on the live CLI)',
270
+ refuseOrConfirm: false,
271
+ freshRespawn: false,
272
+ });
273
+ }
274
+ //# sourceMappingURL=classifyProfileChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifyProfileChange.js","sourceRoot":"","sources":["../../src/core/classifyProfileChange.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA6D/C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,sBAAsB,GACtB,cAAc,GACd,iBAAiB,GACjB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAqGnD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
1
+ {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAmE/C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,sBAAsB,GACtB,cAAc,GACd,iBAAiB,GACjB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAqGnD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
@@ -84,6 +84,12 @@ export const DEV_GATED_FEATURES = [
84
84
  description: 'Blocker Ledger — resolution pipeline + memory for Principle 1 (/blockers/*).',
85
85
  justification: 'Signal-only local recorder (never blocks a message); file-JSON state, no egress, no destructive action; the only LLM use is one bounded (<=200-token) fail-closed B17 settle check on the rare true-blocker settle.',
86
86
  },
87
+ {
88
+ name: 'topicProfiles',
89
+ configPath: 'topicProfiles.enabled',
90
+ description: 'Topic Profile — per-topic model/thinking/framework pins (TOPIC-PROFILE-SPEC).',
91
+ justification: 'Gate covers the WRITE path only (reads are always-on O(1) resolution) and ships dryRun:true (§14 shadow-field — logs intended respawns, performs none); no spend, no destructive action while the dry-run canary holds.',
92
+ },
87
93
  ];
88
94
  export const DARK_GATE_EXCLUSIONS = [
89
95
  // ── destructive — kills/deletes on a heuristic; off + dry-run for EVERYONE ──
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}