instar 1.3.235 → 1.3.237

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 (67) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +41 -0
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/CircuitBreakingIntelligenceProvider.d.ts +1 -1
  5. package/dist/core/CircuitBreakingIntelligenceProvider.d.ts.map +1 -1
  6. package/dist/core/CircuitBreakingIntelligenceProvider.js +5 -2
  7. package/dist/core/CircuitBreakingIntelligenceProvider.js.map +1 -1
  8. package/dist/core/IntelligenceRouter.d.ts +82 -0
  9. package/dist/core/IntelligenceRouter.d.ts.map +1 -0
  10. package/dist/core/IntelligenceRouter.js +108 -0
  11. package/dist/core/IntelligenceRouter.js.map +1 -0
  12. package/dist/core/ParallelActivityIndex.d.ts +62 -0
  13. package/dist/core/ParallelActivityIndex.d.ts.map +1 -0
  14. package/dist/core/ParallelActivityIndex.js +129 -0
  15. package/dist/core/ParallelActivityIndex.js.map +1 -0
  16. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  17. package/dist/core/PostUpdateMigrator.js +34 -0
  18. package/dist/core/PostUpdateMigrator.js.map +1 -1
  19. package/dist/core/componentCategories.d.ts +37 -0
  20. package/dist/core/componentCategories.d.ts.map +1 -0
  21. package/dist/core/componentCategories.js +84 -0
  22. package/dist/core/componentCategories.js.map +1 -0
  23. package/dist/core/intelligenceProviderFactory.d.ts +8 -0
  24. package/dist/core/intelligenceProviderFactory.d.ts.map +1 -1
  25. package/dist/core/intelligenceProviderFactory.js +3 -3
  26. package/dist/core/intelligenceProviderFactory.js.map +1 -1
  27. package/dist/core/types.d.ts +26 -0
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/core/types.js.map +1 -1
  30. package/dist/monitoring/GeminiLoopDriver.d.ts +112 -0
  31. package/dist/monitoring/GeminiLoopDriver.d.ts.map +1 -0
  32. package/dist/monitoring/GeminiLoopDriver.js +111 -0
  33. package/dist/monitoring/GeminiLoopDriver.js.map +1 -0
  34. package/dist/monitoring/ParallelWorkOverlap.d.ts +59 -0
  35. package/dist/monitoring/ParallelWorkOverlap.d.ts.map +1 -0
  36. package/dist/monitoring/ParallelWorkOverlap.js +86 -0
  37. package/dist/monitoring/ParallelWorkOverlap.js.map +1 -0
  38. package/dist/monitoring/ParallelWorkSentinel.d.ts +59 -0
  39. package/dist/monitoring/ParallelWorkSentinel.d.ts.map +1 -0
  40. package/dist/monitoring/ParallelWorkSentinel.js +79 -0
  41. package/dist/monitoring/ParallelWorkSentinel.js.map +1 -0
  42. package/dist/providers/adapters/gemini-cli/transport/geminiSpawn.d.ts +14 -0
  43. package/dist/providers/adapters/gemini-cli/transport/geminiSpawn.d.ts.map +1 -1
  44. package/dist/providers/adapters/gemini-cli/transport/geminiSpawn.js +16 -0
  45. package/dist/providers/adapters/gemini-cli/transport/geminiSpawn.js.map +1 -1
  46. package/dist/scaffold/templates.d.ts.map +1 -1
  47. package/dist/scaffold/templates.js +10 -0
  48. package/dist/scaffold/templates.js.map +1 -1
  49. package/dist/server/AgentServer.d.ts +1 -0
  50. package/dist/server/AgentServer.d.ts.map +1 -1
  51. package/dist/server/AgentServer.js +33 -0
  52. package/dist/server/AgentServer.js.map +1 -1
  53. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  54. package/dist/server/CapabilityIndex.js +10 -0
  55. package/dist/server/CapabilityIndex.js.map +1 -1
  56. package/dist/server/routes.d.ts +4 -0
  57. package/dist/server/routes.d.ts.map +1 -1
  58. package/dist/server/routes.js +44 -0
  59. package/dist/server/routes.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/data/builtin-manifest.json +64 -64
  62. package/src/scaffold/templates.ts +10 -0
  63. package/upgrades/1.3.236.md +53 -0
  64. package/upgrades/1.3.237.md +82 -0
  65. package/upgrades/side-effects/gemini-multi-turn-loop-driver.md +56 -0
  66. package/upgrades/side-effects/parallel-activity-coherence.md +85 -0
  67. package/upgrades/side-effects/per-component-framework-routing.md +88 -0
@@ -74,5 +74,5 @@ export declare class CircuitBreakingIntelligenceProvider implements Intelligence
74
74
  * can pass a possibly-null factory result through unchanged) and is idempotent
75
75
  * (never double-wraps).
76
76
  */
77
- export declare function wrapIntelligenceWithCircuitBreaker(provider: IntelligenceProvider | null | undefined): IntelligenceProvider | null;
77
+ export declare function wrapIntelligenceWithCircuitBreaker(provider: IntelligenceProvider | null | undefined, breaker?: LlmCircuitBreaker): IntelligenceProvider | null;
78
78
  //# sourceMappingURL=CircuitBreakingIntelligenceProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircuitBreakingIntelligenceProvider.d.ts","sourceRoot":"","sources":["../../src/core/CircuitBreakingIntelligenceProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,KAAK,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAEvF;AACD,wBAAgB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI,CAEzE;AAED,qBAAa,mCAAoC,YAAW,oBAAoB;IAE5E,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE,iBAA0C;IAGtE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAsBd,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;CA+D/E;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAChD,oBAAoB,GAAG,IAAI,CAI7B"}
1
+ {"version":3,"file":"CircuitBreakingIntelligenceProvider.d.ts","sourceRoot":"","sources":["../../src/core/CircuitBreakingIntelligenceProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,KAAK,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAEvF;AACD,wBAAgB,yBAAyB,IAAI,sBAAsB,GAAG,IAAI,CAEzE;AAED,qBAAa,mCAAoC,YAAW,oBAAoB;IAE5E,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE,iBAA0C;IAGtE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAsBd,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;CA+D/E;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,oBAAoB,GAAG,IAAI,CAO7B"}
@@ -135,11 +135,14 @@ export class CircuitBreakingIntelligenceProvider {
135
135
  * can pass a possibly-null factory result through unchanged) and is idempotent
136
136
  * (never double-wraps).
137
137
  */
138
- export function wrapIntelligenceWithCircuitBreaker(provider) {
138
+ export function wrapIntelligenceWithCircuitBreaker(provider, breaker) {
139
139
  if (!provider)
140
140
  return null;
141
141
  if (provider instanceof CircuitBreakingIntelligenceProvider)
142
142
  return provider;
143
- return new CircuitBreakingIntelligenceProvider(provider);
143
+ // breaker===undefined ⇒ the constructor default (the account-global singleton)
144
+ // applies, preserving today's behavior. A caller (the IntelligenceRouter) passes
145
+ // a DISTINCT breaker per framework so one framework's trip can't pause another.
146
+ return new CircuitBreakingIntelligenceProvider(provider, breaker);
144
147
  }
145
148
  //# sourceMappingURL=CircuitBreakingIntelligenceProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircuitBreakingIntelligenceProvider.js","sourceRoot":"","sources":["../../src/core/CircuitBreakingIntelligenceProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAEL,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AA2BhC,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,gEAAgE;AAChE,IAAI,uBAAuB,GAAkC,IAAI,CAAC;AAClE,MAAM,UAAU,yBAAyB,CAAC,QAAuC;IAC/E,uBAAuB,GAAG,QAAQ,CAAC;AACrC,CAAC;AACD,MAAM,UAAU,yBAAyB;IACvC,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,mCAAmC;IAE3B;IACA;IAFnB,YACmB,KAA2B,EAC3B,UAA6B,oBAAoB,EAAE;QADnD,UAAK,GAAL,KAAK,CAAsB;QAC3B,YAAO,GAAP,OAAO,CAA4C;IACnE,CAAC;IAEJ;;;;;;;;;;OAUG;IACK,YAAY,CAClB,OAAe,EACf,OAAkC,EAClC,SAAiB,EACjB,MAAe,EACf,MAA0B,EAC1B,QAAiB,EACjB,SAAkB;QAElB,MAAM,GAAG,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC;YACH,GAAG,CAAC,MAAM,CAAC;gBACT,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS;gBACxC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3C,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAA6B;QAC1D,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW,EAAE,SAAS,IAAI,WAAW,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,yEAAyE;YACzE,2EAA2E;YAC3E,mEAAmE;YACnE,MAAM,MAAM,GAAG,OAAO,EAAE,eAAe,CAAC;YACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,yEAAyE;gBACzE,qEAAqE;gBACrE,0EAA0E;gBAC1E,0EAA0E;gBAC1E,eAAe;gBACf,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;gBAC7F,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,uEAAuE;YACvE,uEAAuE;YACvE,kEAAkE;YAClE,IAAI,KAAgE,CAAC;YACrE,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO,CAAC;YACvC,MAAM,YAAY,GAAwB;gBACxC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,KAAK,GAAG,CAAC,CAAC;oBACV,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,CAAC;aACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CACf,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EACzE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,CACxC,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAC9F,IAAI,GAAG,YAAY,cAAc,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpD,sEAAsE;gBACtE,4DAA4D;gBAC5D,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBACzD,IAAI,GAAG,YAAY,cAAc;oBAAE,MAAM,GAAG,CAAC;gBAC7C,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;YACD,0EAA0E;YAC1E,2EAA2E;YAC3E,4EAA4E;YAC5E,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,kCAAkC,CAChD,QAAiD;IAEjD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,QAAQ,YAAY,mCAAmC;QAAE,OAAO,QAAQ,CAAC;IAC7E,OAAO,IAAI,mCAAmC,CAAC,QAAQ,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"CircuitBreakingIntelligenceProvider.js","sourceRoot":"","sources":["../../src/core/CircuitBreakingIntelligenceProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * IntelligenceRouter — routes each LLM call to a framework-specific provider
3
+ * based on the calling component's category/name, so different Instar components
4
+ * can run on different agentic frameworks (e.g. sentinels on Codex while the
5
+ * agent's conversation stays on Claude). Implements docs/specs/
6
+ * per-component-framework-routing.md (B1).
7
+ *
8
+ * KEY DESIGN (corrected by convergence):
9
+ * - Routing is resolved at CALL TIME, at the single funnel every `.evaluate()`
10
+ * already passes through — NOT at construction. The component name only
11
+ * exists at call time (`attribution.component`), and ~half the LLM callers
12
+ * never receive a constructor-injected provider, so construction-time routing
13
+ * is unworkable. The router IS the injected provider; it dispatches per call.
14
+ * - Config is read LIVE on each call, so a `componentFrameworks` change takes
15
+ * effect on the next call with no restart (no session-start staleness trap).
16
+ * - Each non-default framework gets its OWN circuit breaker (built by the
17
+ * injected `buildProvider`), so a Claude rate-limit trip does NOT pause Codex.
18
+ * The default framework keeps using the existing shared (global-breaker)
19
+ * provider, so unconfigured behavior is byte-identical to today.
20
+ * - Fallback is circuit-aware: a framework whose binary is MISSING degrades to
21
+ * the default framework (config/install problem, low volume) and reports it; a
22
+ * framework that is merely RATE-LIMITED surfaces LlmCircuitOpenError, which
23
+ * callers already swallow into their heuristic — so we never herd a Codex
24
+ * outage's worth of calls onto Claude all at once.
25
+ */
26
+ import type { IntelligenceProvider, IntelligenceOptions } from './types.js';
27
+ import type { IntelligenceFramework } from './intelligenceProviderFactory.js';
28
+ import { type ComponentCategory } from './componentCategories.js';
29
+ export interface ComponentFrameworksConfig {
30
+ /** Framework for anything not otherwise specified. Defaults to the router's defaultFramework. */
31
+ default?: IntelligenceFramework;
32
+ /** Per-category framework, e.g. { sentinel: 'codex-cli' }. */
33
+ categories?: Partial<Record<ComponentCategory, IntelligenceFramework>>;
34
+ /** Per-component-name override, highest precedence. */
35
+ overrides?: Record<string, IntelligenceFramework>;
36
+ /** When a routed framework's provider is unavailable (binary missing): 'default' degrades, 'none' errors. */
37
+ fallback?: 'default' | 'none';
38
+ }
39
+ export interface RouterDegradeInfo {
40
+ component: string;
41
+ category: ComponentCategory;
42
+ from: IntelligenceFramework;
43
+ to: IntelligenceFramework;
44
+ reason: string;
45
+ }
46
+ export interface IntelligenceRouterOptions {
47
+ /** The existing shared provider for the default framework (global breaker). Used unconfigured + for default-routed calls. */
48
+ defaultProvider: IntelligenceProvider;
49
+ /** Which framework defaultProvider speaks. */
50
+ defaultFramework: IntelligenceFramework;
51
+ /** Live config getter — read on EVERY call so changes are hot. Returns undefined ⇒ routing disabled (all default). */
52
+ resolveConfig: () => ComponentFrameworksConfig | undefined;
53
+ /**
54
+ * Build a provider for a non-default framework, with its OWN circuit breaker.
55
+ * Returns null when that framework's binary isn't available. Called at most
56
+ * once per framework (result cached). MUST NOT throw (catch internally).
57
+ */
58
+ buildProvider: (framework: IntelligenceFramework) => IntelligenceProvider | null;
59
+ /** Optional: invoked when a routed call degrades to the default framework (for DegradationReporter). */
60
+ onDegrade?: (info: RouterDegradeInfo) => void;
61
+ }
62
+ export declare class IntelligenceRouter implements IntelligenceProvider {
63
+ private readonly opts;
64
+ private readonly cache;
65
+ constructor(opts: IntelligenceRouterOptions);
66
+ /** Resolve the framework for a component+category against a config (pure). */
67
+ resolveFramework(component: string | undefined, category: ComponentCategory, cfg: ComponentFrameworksConfig | undefined): IntelligenceFramework;
68
+ /**
69
+ * Diagnostic resolver for the GET /intelligence/routing surface: what framework
70
+ * a component WOULD route to right now, and whether that framework is available.
71
+ */
72
+ for(component: string, categoryOverride?: ComponentCategory): {
73
+ component: string;
74
+ category: ComponentCategory;
75
+ framework: IntelligenceFramework;
76
+ available: boolean;
77
+ };
78
+ /** Get-or-build the provider for a framework (cached). Default framework → shared provider. */
79
+ private providerFor;
80
+ evaluate(prompt: string, options?: IntelligenceOptions): Promise<string>;
81
+ }
82
+ //# sourceMappingURL=IntelligenceRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntelligenceRouter.d.ts","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,iGAAiG;IACjG,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACvE,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,6HAA6H;IAC7H,eAAe,EAAE,oBAAoB,CAAC;IACtC,8CAA8C;IAC9C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,sHAAsH;IACtH,aAAa,EAAE,MAAM,yBAAyB,GAAG,SAAS,CAAC;IAC3D;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,qBAAqB,KAAK,oBAAoB,GAAG,IAAI,CAAC;IACjF,wGAAwG;IACxG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/C;AAMD,qBAAa,kBAAmB,YAAW,oBAAoB;IAGjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;gBAE9C,IAAI,EAAE,yBAAyB;IAE5D,8EAA8E;IAC9E,gBAAgB,CACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,yBAAyB,GAAG,SAAS,GACzC,qBAAqB;IAQxB;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,iBAAiB,GAAG;QAC5D,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,SAAS,EAAE,qBAAqB,CAAC;QACjC,SAAS,EAAE,OAAO,CAAC;KACpB;IAQD,+FAA+F;IAC/F,OAAO,CAAC,WAAW;IAcb,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;CAwC/E"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * IntelligenceRouter — routes each LLM call to a framework-specific provider
3
+ * based on the calling component's category/name, so different Instar components
4
+ * can run on different agentic frameworks (e.g. sentinels on Codex while the
5
+ * agent's conversation stays on Claude). Implements docs/specs/
6
+ * per-component-framework-routing.md (B1).
7
+ *
8
+ * KEY DESIGN (corrected by convergence):
9
+ * - Routing is resolved at CALL TIME, at the single funnel every `.evaluate()`
10
+ * already passes through — NOT at construction. The component name only
11
+ * exists at call time (`attribution.component`), and ~half the LLM callers
12
+ * never receive a constructor-injected provider, so construction-time routing
13
+ * is unworkable. The router IS the injected provider; it dispatches per call.
14
+ * - Config is read LIVE on each call, so a `componentFrameworks` change takes
15
+ * effect on the next call with no restart (no session-start staleness trap).
16
+ * - Each non-default framework gets its OWN circuit breaker (built by the
17
+ * injected `buildProvider`), so a Claude rate-limit trip does NOT pause Codex.
18
+ * The default framework keeps using the existing shared (global-breaker)
19
+ * provider, so unconfigured behavior is byte-identical to today.
20
+ * - Fallback is circuit-aware: a framework whose binary is MISSING degrades to
21
+ * the default framework (config/install problem, low volume) and reports it; a
22
+ * framework that is merely RATE-LIMITED surfaces LlmCircuitOpenError, which
23
+ * callers already swallow into their heuristic — so we never herd a Codex
24
+ * outage's worth of calls onto Claude all at once.
25
+ */
26
+ import { isComponentCategory, categoryForComponent, } from './componentCategories.js';
27
+ export class IntelligenceRouter {
28
+ opts;
29
+ cache = new Map();
30
+ constructor(opts) {
31
+ this.opts = opts;
32
+ }
33
+ /** Resolve the framework for a component+category against a config (pure). */
34
+ resolveFramework(component, category, cfg) {
35
+ if (!cfg)
36
+ return this.opts.defaultFramework;
37
+ if (component && cfg.overrides && cfg.overrides[component])
38
+ return cfg.overrides[component];
39
+ const byCat = cfg.categories?.[category];
40
+ if (byCat)
41
+ return byCat;
42
+ return cfg.default ?? this.opts.defaultFramework;
43
+ }
44
+ /**
45
+ * Diagnostic resolver for the GET /intelligence/routing surface: what framework
46
+ * a component WOULD route to right now, and whether that framework is available.
47
+ */
48
+ for(component, categoryOverride) {
49
+ const category = categoryOverride ?? categoryForComponent(component);
50
+ const cfg = this.opts.resolveConfig();
51
+ const framework = this.resolveFramework(component, category, cfg);
52
+ const available = framework === this.opts.defaultFramework ? true : this.providerFor(framework) !== null;
53
+ return { component, category, framework, available };
54
+ }
55
+ /** Get-or-build the provider for a framework (cached). Default framework → shared provider. */
56
+ providerFor(framework) {
57
+ if (framework === this.opts.defaultFramework)
58
+ return this.opts.defaultProvider;
59
+ const cached = this.cache.get(framework);
60
+ if (cached)
61
+ return cached.provider;
62
+ let provider = null;
63
+ try {
64
+ provider = this.opts.buildProvider(framework);
65
+ }
66
+ catch {
67
+ provider = null; // never throw into the call path on a build failure
68
+ }
69
+ this.cache.set(framework, { provider });
70
+ return provider;
71
+ }
72
+ async evaluate(prompt, options) {
73
+ const component = options?.attribution?.component;
74
+ const explicitCategory = options?.attribution?.category;
75
+ const category = isComponentCategory(explicitCategory)
76
+ ? explicitCategory
77
+ : categoryForComponent(component);
78
+ const cfg = this.opts.resolveConfig();
79
+ // Unconfigured ⇒ exactly today's behavior.
80
+ if (!cfg)
81
+ return this.opts.defaultProvider.evaluate(prompt, options);
82
+ const framework = this.resolveFramework(component, category, cfg);
83
+ if (framework === this.opts.defaultFramework) {
84
+ return this.opts.defaultProvider.evaluate(prompt, options);
85
+ }
86
+ const provider = this.providerFor(framework);
87
+ if (provider) {
88
+ // Per-framework breaker handles rate-limit isolation. If that breaker is
89
+ // open, LlmCircuitOpenError propagates and the caller swallows it into its
90
+ // heuristic — we deliberately do NOT herd onto the default framework here.
91
+ return provider.evaluate(prompt, options);
92
+ }
93
+ // Provider unavailable (binary missing / not built).
94
+ if ((cfg.fallback ?? 'default') === 'none') {
95
+ throw new Error(`IntelligenceRouter: framework '${framework}' for component '${component ?? '(none)'}' ` +
96
+ `is unavailable and fallback is 'none'.`);
97
+ }
98
+ this.opts.onDegrade?.({
99
+ component: component ?? '(none)',
100
+ category,
101
+ from: framework,
102
+ to: this.opts.defaultFramework,
103
+ reason: `framework '${framework}' unavailable (binary missing / not built) — degraded to default`,
104
+ });
105
+ return this.opts.defaultProvider.evaluate(prompt, options);
106
+ }
107
+ }
108
+ //# sourceMappingURL=IntelligenceRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntelligenceRouter.js","sourceRoot":"","sources":["../../src/core/IntelligenceRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * ParallelActivityIndex — a thin CROSS-topic read aggregator over the EXISTING
3
+ * Topic-Intent Layer (docs/specs/parallel-activity-coherence.md, Phase A).
4
+ *
5
+ * It does NOT introduce a new per-topic store (convergence: that would duplicate
6
+ * TopicIntentStore/TopicIntentCapture/briefing/decay). It only READS the existing
7
+ * per-topic intent files and presents a cross-topic view — "all my topics + what
8
+ * each is currently working on" — which is the thing that genuinely did not exist.
9
+ * This view feeds the GET /parallel-work/activities surface and (Phase B) the
10
+ * ParallelWorkSentinel's overlap comparison. Signal-only; never gates or mutates.
11
+ */
12
+ import { type EstablishedRef } from './TopicIntent.js';
13
+ /** A topic's current parallel-work snapshot, derived from its intent refs. */
14
+ export interface TopicActivity {
15
+ topicId: number;
16
+ /** One-line current focus: the highest-tier goal, else the latest decision, else null. */
17
+ focus: string | null;
18
+ /** High-specificity tokens (entities/files/identifiers) for cheap overlap matching. */
19
+ tags: string[];
20
+ /** Count of established refs at/above the 'tentative' tier (how "settled" the topic is). */
21
+ refCount: number;
22
+ /** Most recent reinforcement across the topic's refs (freshness; null if unknown). */
23
+ updatedAt: number | null;
24
+ }
25
+ /**
26
+ * Extract high-specificity tokens from free text: identifiers, file paths, branch-ish
27
+ * names, camelCase/kebab/snake words, and rare ≥4-char words — minus boilerplate. Bare
28
+ * generic words are dropped so two topics that merely both say "fix the test" don't match.
29
+ */
30
+ export declare function extractTags(text: string): string[];
31
+ export interface ParallelActivityIndexOptions {
32
+ stateDir: string;
33
+ /** Optional: resolve a topic's one-line purpose (e.g. TopicMemory.purpose) as a focus fallback. */
34
+ purposeFor?: (topicId: number) => string | null | undefined;
35
+ /** Optional: is a session/autonomous job live on this topic right now? */
36
+ isRunning?: (topicId: number) => boolean;
37
+ /** Optional: a human nickname for the topic. */
38
+ nicknameFor?: (topicId: number) => string | null | undefined;
39
+ /**
40
+ * Optional refs provider seam (testability + wiring-integrity). Defaults to the
41
+ * real TopicIntentStore.getRefsAtOrAbove(topicId,'tentative'). Production never
42
+ * sets this; tests inject controlled refs without fighting projectConfidence.
43
+ */
44
+ getRefs?: (topicId: number, nowMs: number) => EstablishedRef[];
45
+ }
46
+ export declare class ParallelActivityIndex {
47
+ private readonly opts;
48
+ private readonly store;
49
+ private readonly intentDir;
50
+ constructor(opts: ParallelActivityIndexOptions);
51
+ /** Enumerate every topic that has an intent file. */
52
+ listTopicIds(): number[];
53
+ /** Build the cross-topic snapshot. nowMs lets tests pin time; defaults to live. */
54
+ activities(nowMs?: number): Array<TopicActivity & {
55
+ nickname: string | null;
56
+ running: boolean;
57
+ }>;
58
+ private safeRefs;
59
+ /** Focus = most-recently-reinforced goal text, else the latest decision, else purpose, else null. */
60
+ private deriveFocus;
61
+ }
62
+ //# sourceMappingURL=ParallelActivityIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParallelActivityIndex.d.ts","sourceRoot":"","sources":["../../src/core/ParallelActivityIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEzE,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uFAAuF;IACvF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAYD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAalD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5D,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7D;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,cAAc,EAAE,CAAC;CAChE;AAED,qBAAa,qBAAqB;IAIpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEN,IAAI,EAAE,4BAA4B;IAK/D,qDAAqD;IACrD,YAAY,IAAI,MAAM,EAAE;IAexB,mFAAmF;IACnF,UAAU,CAAC,KAAK,GAAE,MAAmB,GAAG,KAAK,CAAC,aAAa,GAAG;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAwB5G,OAAO,CAAC,QAAQ;IAShB,qGAAqG;IACrG,OAAO,CAAC,WAAW;CASpB"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * ParallelActivityIndex — a thin CROSS-topic read aggregator over the EXISTING
3
+ * Topic-Intent Layer (docs/specs/parallel-activity-coherence.md, Phase A).
4
+ *
5
+ * It does NOT introduce a new per-topic store (convergence: that would duplicate
6
+ * TopicIntentStore/TopicIntentCapture/briefing/decay). It only READS the existing
7
+ * per-topic intent files and presents a cross-topic view — "all my topics + what
8
+ * each is currently working on" — which is the thing that genuinely did not exist.
9
+ * This view feeds the GET /parallel-work/activities surface and (Phase B) the
10
+ * ParallelWorkSentinel's overlap comparison. Signal-only; never gates or mutates.
11
+ */
12
+ import fs from 'node:fs';
13
+ import path from 'node:path';
14
+ import { TopicIntentStore } from './TopicIntent.js';
15
+ /** Generic instar/domain boilerplate that must NOT count as overlap specificity. */
16
+ const STOPWORDS = new Set([
17
+ 'the', 'a', 'an', 'and', 'or', 'to', 'of', 'in', 'on', 'for', 'with', 'is', 'are', 'be',
18
+ 'this', 'that', 'it', 'we', 'i', 'you', 'will', 'should', 'add', 'use', 'using', 'make',
19
+ 'fix', 'fixing', 'test', 'tests', 'testing', 'config', 'configure', 'pr', 'spec', 'topic',
20
+ 'sentinel', 'hook', 'session', 'sessions', 'migration', 'migrate', 'work', 'working',
21
+ 'build', 'building', 'change', 'changes', 'update', 'updates', 'wire', 'wiring', 'run',
22
+ 'running', 'check', 'checks', 'new', 'task', 'feature', 'code', 'agent', 'instar',
23
+ ]);
24
+ /**
25
+ * Extract high-specificity tokens from free text: identifiers, file paths, branch-ish
26
+ * names, camelCase/kebab/snake words, and rare ≥4-char words — minus boilerplate. Bare
27
+ * generic words are dropped so two topics that merely both say "fix the test" don't match.
28
+ */
29
+ export function extractTags(text) {
30
+ const out = new Set();
31
+ if (!text)
32
+ return [];
33
+ // Path-ish / identifier-ish tokens (contain / . _ - or camelCase) are high-specificity.
34
+ const specific = text.match(/[A-Za-z0-9][A-Za-z0-9._/-]*[A-Za-z0-9]/g) ?? [];
35
+ for (const raw of specific) {
36
+ const tok = raw.toLowerCase();
37
+ const isCompound = /[._/-]/.test(raw) || /[a-z][A-Z]/.test(raw); // path/identifier/camelCase
38
+ if (isCompound && tok.length >= 3) {
39
+ out.add(tok);
40
+ continue;
41
+ }
42
+ // plain word: keep only if rare-ish (≥4 chars) and not boilerplate
43
+ if (tok.length >= 4 && !STOPWORDS.has(tok))
44
+ out.add(tok);
45
+ }
46
+ return [...out];
47
+ }
48
+ export class ParallelActivityIndex {
49
+ opts;
50
+ store;
51
+ intentDir;
52
+ constructor(opts) {
53
+ this.opts = opts;
54
+ this.store = new TopicIntentStore(opts.stateDir);
55
+ this.intentDir = path.join(opts.stateDir, 'topic-intent');
56
+ }
57
+ /** Enumerate every topic that has an intent file. */
58
+ listTopicIds() {
59
+ let names = [];
60
+ try {
61
+ names = fs.readdirSync(this.intentDir);
62
+ }
63
+ catch {
64
+ return []; // no intent dir yet ⇒ no activities
65
+ }
66
+ const ids = [];
67
+ for (const n of names) {
68
+ const m = n.match(/^(\d+)\.json$/);
69
+ if (m)
70
+ ids.push(Number(m[1]));
71
+ }
72
+ return ids.sort((a, b) => a - b);
73
+ }
74
+ /** Build the cross-topic snapshot. nowMs lets tests pin time; defaults to live. */
75
+ activities(nowMs = Date.now()) {
76
+ return this.listTopicIds().map((topicId) => {
77
+ const refs = this.safeRefs(topicId, nowMs);
78
+ const focus = this.deriveFocus(refs, topicId);
79
+ const updatedAt = refs.reduce((acc, r) => {
80
+ const ms = tsOf(r);
81
+ return ms !== null && (acc === null || ms > acc) ? ms : acc;
82
+ }, null);
83
+ const tagSet = new Set();
84
+ for (const r of refs)
85
+ for (const t of extractTags(r.text))
86
+ tagSet.add(t);
87
+ const purpose = this.opts.purposeFor?.(topicId);
88
+ if (purpose)
89
+ for (const t of extractTags(purpose))
90
+ tagSet.add(t);
91
+ return {
92
+ topicId,
93
+ focus,
94
+ tags: [...tagSet],
95
+ refCount: refs.length,
96
+ updatedAt,
97
+ nickname: this.opts.nicknameFor?.(topicId) ?? null,
98
+ running: this.opts.isRunning?.(topicId) ?? false,
99
+ };
100
+ });
101
+ }
102
+ safeRefs(topicId, nowMs) {
103
+ try {
104
+ if (this.opts.getRefs)
105
+ return this.opts.getRefs(topicId, nowMs);
106
+ return this.store.getRefsAtOrAbove(topicId, 'tentative', nowMs);
107
+ }
108
+ catch {
109
+ return [];
110
+ }
111
+ }
112
+ /** Focus = most-recently-reinforced goal text, else the latest decision, else purpose, else null. */
113
+ deriveFocus(refs, topicId) {
114
+ const latestByKind = (kind) => {
115
+ const matching = refs.filter((r) => r.kind === kind && r.text);
116
+ if (!matching.length)
117
+ return null;
118
+ const latest = matching.reduce((a, b) => ((tsOf(b) ?? 0) > (tsOf(a) ?? 0) ? b : a));
119
+ return latest.text;
120
+ };
121
+ return latestByKind('goal') ?? latestByKind('decision') ?? this.opts.purposeFor?.(topicId) ?? null;
122
+ }
123
+ }
124
+ /** Parse an EstablishedRef's ISO lastReinforcedAt to epoch ms; null if unparseable. */
125
+ function tsOf(ref) {
126
+ const ms = Date.parse(ref.lastReinforcedAt);
127
+ return Number.isNaN(ms) ? null : ms;
128
+ }
129
+ //# sourceMappingURL=ParallelActivityIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParallelActivityIndex.js","sourceRoot":"","sources":["../../src/core/ParallelActivityIndex.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAsCH,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAiB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAiC;gBAEvC,MAAM,EAAE,cAAc;IAIlC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAItC;;;;;;OAMG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC;IAIjC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,IAAI,eAAe;IA+C1B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,0BAA0B;IAmFlC,OAAO,CAAC,0BAA0B;IAmDlC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kCAAkC;IAwH1C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,kCAAkC;IA8C1C,OAAO,CAAC,uBAAuB;IAwE/B,OAAO,CAAC,4CAA4C;IA+CpD;;;;;;;OAOG;IACH,OAAO,CAAC,iCAAiC;IA0BzC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oCAAoC;IAmB5C,OAAO,CAAC,yBAAyB;IA6FjC;;;;;;;;;;OAUG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;YA4BhC,uBAAuB;IAkGrC,OAAO,CAAC,0BAA0B;IAkGlC,OAAO,CAAC,0BAA0B;IAoElC,OAAO,CAAC,oBAAoB;IA4G5B,OAAO,CAAC,8BAA8B;IA2EtC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,4BAA4B;IAwBpC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,mCAAmC;IAuE3C;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,yBAAyB;IA4HjC;6EACyE;IACzE,OAAO,CAAC,wBAAwB;IAShC;sDACkD;IAClD,OAAO,CAAC,wBAAwB;IAQhC;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkPpB;;;;;;;;OAQG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IA6CvE;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;IAoEhC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAiE5B;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IA8BnC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAyIhC;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;IAwDtC,OAAO,CAAC,0BAA0B;IA8DlC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA82CvB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,kCAAkC;IAoG1C;;;OAGG;IACH,OAAO,CAAC,cAAc;IA6JtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,OAAO,CAAC,yCAAyC;IAyDjD;;;OAGG;IACH,OAAO,CAAC,eAAe;IA0SvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqFrB;;;OAGG;IACH;;;OAGG;IACH;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,wBAAwB;IAmEhC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,6BAA6B;IAwDrC;;;;;;;;;OASG;IACH,OAAO,CAAC,yBAAyB;IAsDjC,OAAO,CAAC,wBAAwB;IAqChC,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,qBAAqB;IAkE7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,0BAA0B;IAgDlC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,oBAAoB;IAgC5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,wBAAwB,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,8BAA8B,GAAG,2BAA2B,GAAG,4BAA4B,GAAG,iBAAiB,GAAG,0BAA0B,GAAG,wBAAwB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,MAAM;IAwBnf,oFAAoF;IACpF,iCAAiC,IAAI,MAAM;IAI3C,6EAA6E;IAC7E,yBAAyB,IAAI,MAAM;IAInC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,2BAA2B;IAmFnC,OAAO,CAAC,mBAAmB;IAob3B,OAAO,CAAC,wBAAwB;IAqIhC,OAAO,CAAC,2BAA2B;IAoEnC,OAAO,CAAC,yBAAyB;IA8IjC,OAAO,CAAC,2BAA2B;IA0JnC,OAAO,CAAC,qBAAqB;IA4P7B,OAAO,CAAC,uBAAuB;IAqJ/B,OAAO,CAAC,oBAAoB;IAgG5B,OAAO,CAAC,qBAAqB;IA8H7B,OAAO,CAAC,2BAA2B;IAoHnC,OAAO,CAAC,iCAAiC;IA6DzC,OAAO,CAAC,4BAA4B;IA0MpC;;;;;;;;;;OAUG;IACH;;;;;;;;;;;OAWG;IAEH,gBAAuB,iCAAiC,EAAE,WAAW,CAAC,MAAM,CAAC,CA4B1E;IAEH;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,8BAA8B;IAiHtC,OAAO,CAAC,uBAAuB;IAwC/B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,8BAA8B;IA6HtC,OAAO,CAAC,+BAA+B;IAuKvC,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,qBAAqB;IAqO7B,OAAO,CAAC,qBAAqB;IAwI7B,OAAO,CAAC,qBAAqB;IAyN7B,OAAO,CAAC,6BAA6B;IAkLrC,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,gBAAgB;IAmJxB,OAAO,CAAC,6BAA6B;CAoCtC"}
1
+ {"version":3,"file":"PostUpdateMigrator.d.ts","sourceRoot":"","sources":["../../src/core/PostUpdateMigrator.ts"],"names":[],"mappings":"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"}
@@ -3059,6 +3059,40 @@ The "an unknown component is using more than a quarter of the agent's token budg
3059
3059
  patched = true;
3060
3060
  result.upgraded.push('CLAUDE.md: added Token-Burn Alerts awareness (activity-gate noise fix)');
3061
3061
  }
3062
+ // Parallel-Work Awareness (2026-06-03) — Agent Awareness + Migration Parity:
3063
+ // existing agents must learn they can see what all their topics are working on
3064
+ // (the cross-topic index), the antidote to duplicating another topic's work.
3065
+ // Content-sniffed for idempotency.
3066
+ if (!content.includes('Parallel-Work Awareness')) {
3067
+ const pwSection = `
3068
+ ## Parallel-Work Awareness
3069
+
3070
+ See what ALL your hands are doing across topics/sessions at once (like a king with a council). A cross-topic read index over your existing per-topic intent: every topic, its current focus, high-specificity tags, and whether a session is live on it. The antidote to self-blindness — duplicating work another of your topics already did.
3071
+ - Check: \`curl -H "Authorization: Bearer $AUTH" "http://localhost:4042/parallel-work/activities"\` → \`{ count, runningCount, activities: [{ topicId, focus, tags, running, updatedAt }] }\`.
3072
+ - Proactive: before starting substantial new work in a topic, glance here to see if another topic is already on it; when the user asks "what am I working on across topics?" / "is another session already doing this?". (The proactive overlap councilor — ParallelWorkSentinel — is Phase B, ships dark.) Read-only; never gates. Spec: \`docs/specs/parallel-activity-coherence.md\`.
3073
+ `;
3074
+ content += '\n' + pwSection;
3075
+ patched = true;
3076
+ result.upgraded.push('CLAUDE.md: added Parallel-Work Awareness');
3077
+ }
3078
+ // Per-Component Framework Routing (2026-06-03) — Agent Awareness + Migration
3079
+ // Parity: existing agents must learn they can route internal components
3080
+ // (sentinels/gates) to a different framework (e.g. sentinels on Codex) to
3081
+ // spread LLM load off a single account's rate limit. Content-sniffed for idempotency.
3082
+ if (!content.includes('Per-Component Framework Routing')) {
3083
+ const routingSection = `
3084
+ ## Per-Component Framework Routing
3085
+
3086
+ Run different INTERNAL components on different agentic frameworks to spread LLM load off a single account's rate limit — e.g. you run on Claude Code but ALL your sentinels/gates run on Codex, so that background chatter stops spending your Claude quota. Model "size" is preserved automatically (a \`fast\` check becomes Haiku on Claude or a small GPT model on Codex). Opt-in; with no config, everything stays on your default framework.
3087
+ - See current routing: \`curl -H "Authorization: Bearer $AUTH" "http://localhost:4042/intelligence/routing"\` → \`{ defaultFramework, components: [{ component, category, framework, available }], coverage }\`.
3088
+ - Turn it on in \`.instar/config.json\` → \`sessions.componentFrameworks\`, e.g. \`{ "categories": { "sentinel": "codex-cli" }, "overrides": { "CoherenceReviewer": "claude-code" }, "fallback": "default" }\`. Categories: \`sentinel | gate | job | reflector | other\`. Resolution: \`overrides[name] → categories[category] → default\`.
3089
+ - Each framework gets its own circuit breaker (a Claude trip can't pause Codex). A missing CLI degrades to default + reports; a rate-limited framework falls back to the component's heuristic (no herd). Routes INTERNAL calls only — spawned sessions stay on \`topicFrameworks\`. Restart sessions to apply.
3090
+ - Proactive: user hitting rate limits / "run my sentinels on Codex" / "move background checks off Claude" → point them at \`sessions.componentFrameworks\` + \`GET /intelligence/routing\`. (Spec: \`docs/specs/per-component-framework-routing.md\`.)
3091
+ `;
3092
+ content += '\n' + routingSection;
3093
+ patched = true;
3094
+ result.upgraded.push('CLAUDE.md: added Per-Component Framework Routing awareness');
3095
+ }
3062
3096
  // Correction & Preference Learning Sentinel (Slice 1a) §7 — Agent Awareness +
3063
3097
  // Migration Parity: existing agents must learn about the preferences read-
3064
3098
  // surface (the session-start hook now fetches /preferences/session-context