@wrongstack/core 0.289.0 → 0.291.1

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 (177) hide show
  1. package/dist/boot.d.ts.map +1 -1
  2. package/dist/chronicle/domain-adapter.d.ts.map +1 -1
  3. package/dist/chronicle/index.d.ts +1 -1
  4. package/dist/chronicle/index.d.ts.map +1 -1
  5. package/dist/chronicle/index.js +964 -245
  6. package/dist/chronicle/index.js.map +3 -3
  7. package/dist/chronicle/journal.d.ts +35 -3
  8. package/dist/chronicle/journal.d.ts.map +1 -1
  9. package/dist/chronicle/query.d.ts +8 -5
  10. package/dist/chronicle/query.d.ts.map +1 -1
  11. package/dist/chronicle/tool-adapter.d.ts.map +1 -1
  12. package/dist/coordination/agent-subagent-runner.d.ts +6 -0
  13. package/dist/coordination/agent-subagent-runner.d.ts.map +1 -1
  14. package/dist/coordination/agents/phase6-domain.d.ts.map +1 -1
  15. package/dist/coordination/brain.d.ts +2 -1
  16. package/dist/coordination/brain.d.ts.map +1 -1
  17. package/dist/coordination/collab-debug.d.ts +0 -9
  18. package/dist/coordination/collab-debug.d.ts.map +1 -1
  19. package/dist/coordination/coordinator/error-classifier.d.ts.map +1 -1
  20. package/dist/coordination/dep-watcher.d.ts +2 -1
  21. package/dist/coordination/dep-watcher.d.ts.map +1 -1
  22. package/dist/coordination/director/director-collab.d.ts +1 -1
  23. package/dist/coordination/director/director-collab.d.ts.map +1 -1
  24. package/dist/coordination/director-tools.d.ts.map +1 -1
  25. package/dist/coordination/director.d.ts +19 -1
  26. package/dist/coordination/director.d.ts.map +1 -1
  27. package/dist/coordination/fleet-event-validation.d.ts +0 -7
  28. package/dist/coordination/fleet-event-validation.d.ts.map +1 -1
  29. package/dist/coordination/fleet-spawn.d.ts.map +1 -1
  30. package/dist/coordination/fleet-supervisor.d.ts +1 -1
  31. package/dist/coordination/fleet-supervisor.d.ts.map +1 -1
  32. package/dist/coordination/fleet.d.ts +0 -44
  33. package/dist/coordination/fleet.d.ts.map +1 -1
  34. package/dist/coordination/index.d.ts +2 -2
  35. package/dist/coordination/index.d.ts.map +1 -1
  36. package/dist/coordination/index.js +733 -111
  37. package/dist/coordination/index.js.map +4 -4
  38. package/dist/coordination/knowledge-graph.d.ts +2 -1
  39. package/dist/coordination/knowledge-graph.d.ts.map +1 -1
  40. package/dist/coordination/large-answer-store.d.ts +0 -6
  41. package/dist/coordination/large-answer-store.d.ts.map +1 -1
  42. package/dist/coordination/mail-tools.d.ts.map +1 -1
  43. package/dist/coordination/mailbox-http-router.d.ts.map +1 -1
  44. package/dist/coordination/mailbox-message-codec.d.ts +35 -0
  45. package/dist/coordination/mailbox-message-codec.d.ts.map +1 -1
  46. package/dist/coordination/mailbox-tool.d.ts +1 -1
  47. package/dist/coordination/mailbox-tool.d.ts.map +1 -1
  48. package/dist/coordination/mailbox-types.d.ts +151 -0
  49. package/dist/coordination/mailbox-types.d.ts.map +1 -1
  50. package/dist/coordination/provider-status-tracker.d.ts +27 -2
  51. package/dist/coordination/provider-status-tracker.d.ts.map +1 -1
  52. package/dist/coordination/subagent-budget.d.ts +2 -1
  53. package/dist/coordination/subagent-budget.d.ts.map +1 -1
  54. package/dist/core/agent-response.d.ts +2 -1
  55. package/dist/core/agent-response.d.ts.map +1 -1
  56. package/dist/core/agent-tools.d.ts.map +1 -1
  57. package/dist/core/context.d.ts +51 -0
  58. package/dist/core/context.d.ts.map +1 -1
  59. package/dist/core/fallback-model.d.ts +1 -1
  60. package/dist/core/fallback-model.d.ts.map +1 -1
  61. package/dist/core/fallback-profile-manager.d.ts +1 -1
  62. package/dist/core/fallback-profile-manager.d.ts.map +1 -1
  63. package/dist/core/fleet-pulse.d.ts +2 -1
  64. package/dist/core/fleet-pulse.d.ts.map +1 -1
  65. package/dist/core/iteration-limit.d.ts +2 -1
  66. package/dist/core/iteration-limit.d.ts.map +1 -1
  67. package/dist/core/mailbox-loop.d.ts +11 -1
  68. package/dist/core/mailbox-loop.d.ts.map +1 -1
  69. package/dist/core/model-availability-calendar.d.ts +27 -0
  70. package/dist/core/model-availability-calendar.d.ts.map +1 -0
  71. package/dist/core/system-prompt-builder.d.ts +2 -1
  72. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  73. package/dist/defaults/index.js +1459 -560
  74. package/dist/defaults/index.js.map +4 -4
  75. package/dist/execution/auto-compaction-middleware.d.ts +3 -2
  76. package/dist/execution/auto-compaction-middleware.d.ts.map +1 -1
  77. package/dist/execution/enhance-recovery.d.ts +8 -0
  78. package/dist/execution/enhance-recovery.d.ts.map +1 -1
  79. package/dist/execution/error-handler.d.ts +2 -2
  80. package/dist/execution/error-handler.d.ts.map +1 -1
  81. package/dist/execution/index.js +643 -134
  82. package/dist/execution/index.js.map +4 -4
  83. package/dist/execution/intelligent-compactor.d.ts +0 -16
  84. package/dist/execution/intelligent-compactor.d.ts.map +1 -1
  85. package/dist/execution/one-shot-llm.d.ts.map +1 -1
  86. package/dist/execution/retry-policy.d.ts +0 -13
  87. package/dist/execution/retry-policy.d.ts.map +1 -1
  88. package/dist/execution/skill-loader.d.ts.map +1 -1
  89. package/dist/execution/tool-executor.d.ts.map +1 -1
  90. package/dist/hq/auth-store.d.ts.map +1 -1
  91. package/dist/hq/index.js +39 -1
  92. package/dist/hq/index.js.map +3 -3
  93. package/dist/index.d.ts +32 -30
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +22263 -19999
  96. package/dist/index.js.map +4 -4
  97. package/dist/infrastructure/index.js +59 -5
  98. package/dist/infrastructure/index.js.map +2 -2
  99. package/dist/kernel/events/agent-events.d.ts +2 -0
  100. package/dist/kernel/events/agent-events.d.ts.map +1 -1
  101. package/dist/kernel/events/file-events.d.ts +46 -0
  102. package/dist/kernel/events/file-events.d.ts.map +1 -1
  103. package/dist/kernel/events/memory-events.d.ts +9 -0
  104. package/dist/kernel/events/memory-events.d.ts.map +1 -1
  105. package/dist/kernel/events/provider-events.d.ts +2 -1
  106. package/dist/kernel/events/provider-events.d.ts.map +1 -1
  107. package/dist/kernel/events/tool-events.d.ts +25 -0
  108. package/dist/kernel/events/tool-events.d.ts.map +1 -1
  109. package/dist/mailbox-attach.d.ts.map +1 -1
  110. package/dist/plugins/auto-review-plugin.d.ts +10 -0
  111. package/dist/plugins/auto-review-plugin.d.ts.map +1 -1
  112. package/dist/plugins/chimera-plugin.d.ts +5 -0
  113. package/dist/plugins/chimera-plugin.d.ts.map +1 -1
  114. package/dist/security/index.d.ts +1 -0
  115. package/dist/security/index.d.ts.map +1 -1
  116. package/dist/security/index.js +317 -9
  117. package/dist/security/index.js.map +4 -4
  118. package/dist/security/kanban-boundary.d.ts +10 -0
  119. package/dist/security/kanban-boundary.d.ts.map +1 -0
  120. package/dist/security/permission-policy.d.ts +8 -1
  121. package/dist/security/permission-policy.d.ts.map +1 -1
  122. package/dist/storage/config-loader.d.ts +15 -0
  123. package/dist/storage/config-loader.d.ts.map +1 -1
  124. package/dist/storage/index.d.ts +2 -2
  125. package/dist/storage/index.d.ts.map +1 -1
  126. package/dist/storage/index.js +627 -428
  127. package/dist/storage/index.js.map +4 -4
  128. package/dist/storage/memory-consolidator.d.ts +49 -4
  129. package/dist/storage/memory-consolidator.d.ts.map +1 -1
  130. package/dist/storage/memory-graph-backend.d.ts +11 -0
  131. package/dist/storage/memory-graph-backend.d.ts.map +1 -1
  132. package/dist/storage/provider-config-watcher.d.ts +17 -0
  133. package/dist/storage/provider-config-watcher.d.ts.map +1 -1
  134. package/dist/storage/session-event-bridge.d.ts +2 -2
  135. package/dist/storage/session-event-bridge.d.ts.map +1 -1
  136. package/dist/tools/fallback-manage-tools.d.ts.map +1 -1
  137. package/dist/tools/index.js +166 -26
  138. package/dist/tools/index.js.map +3 -3
  139. package/dist/types/config.d.ts +12 -4
  140. package/dist/types/config.d.ts.map +1 -1
  141. package/dist/types/file-event-record.d.ts +68 -0
  142. package/dist/types/file-event-record.d.ts.map +1 -0
  143. package/dist/types/index.d.ts +1 -0
  144. package/dist/types/index.d.ts.map +1 -1
  145. package/dist/types/index.js +13 -8
  146. package/dist/types/index.js.map +3 -3
  147. package/dist/types/permission.d.ts +38 -0
  148. package/dist/types/permission.d.ts.map +1 -1
  149. package/dist/types/provider.d.ts +1 -1
  150. package/dist/types/provider.d.ts.map +1 -1
  151. package/dist/types/session.d.ts +27 -0
  152. package/dist/types/session.d.ts.map +1 -1
  153. package/dist/types/tool-executor.d.ts +2 -0
  154. package/dist/types/tool-executor.d.ts.map +1 -1
  155. package/dist/utils/config-backup.d.ts +20 -0
  156. package/dist/utils/config-backup.d.ts.map +1 -0
  157. package/dist/utils/index.d.ts +12 -11
  158. package/dist/utils/index.d.ts.map +1 -1
  159. package/dist/utils/index.js +436 -290
  160. package/dist/utils/index.js.map +4 -4
  161. package/dist/utils/message-invariants.d.ts +12 -0
  162. package/dist/utils/message-invariants.d.ts.map +1 -1
  163. package/dist/utils/safe-json.d.ts +1 -1
  164. package/dist/utils/safe-json.d.ts.map +1 -1
  165. package/dist/utils/term.d.ts +6 -0
  166. package/dist/utils/term.d.ts.map +1 -1
  167. package/dist/utils/tool-wire-compact.d.ts +9 -0
  168. package/dist/utils/tool-wire-compact.d.ts.map +1 -1
  169. package/dist/utils/wstack-paths.d.ts +21 -1
  170. package/dist/utils/wstack-paths.d.ts.map +1 -1
  171. package/instructions/agents/ios.md +113 -0
  172. package/instructions/llm/memory-consolidator.md +4 -12
  173. package/instructions/system.md +4 -1
  174. package/package.json +3 -3
  175. package/skills/auto-review/SKILL.md +176 -0
  176. package/skills/mnemosyne/SKILL.md +156 -0
  177. package/skills/mnemosyne/instructions/agent-prompt.md +200 -0
@@ -2,12 +2,47 @@ import type { AfterRunHook, AgentExtension } from '../extension/extension-points
2
2
  import type { MemoryStore } from '../types/memory.js';
3
3
  import type { Provider } from '../types/provider.js';
4
4
  import type { OneShotOrchestrator } from '../execution/one-shot-llm.js';
5
+ /**
6
+ * Minimal interface for writing to Super Memory without importing
7
+ * @wrongstack/super-memory (core cannot depend on super-memory).
8
+ * Tools like the consolidator use this to route adds through
9
+ * rememberSuper rather than the legacy MemoryStore.remember(),
10
+ * making them visible to searchSuper/turn-middleware.
11
+ */
12
+ type ConsolidatorSuperMemoryKind = 'fact' | 'decision' | 'convention' | 'preference' | 'anti_pattern' | 'file_note';
13
+ export interface ConsolidatorSuperMemory {
14
+ rememberSuper(input: {
15
+ text: string;
16
+ scope?: string | undefined;
17
+ kind?: ConsolidatorSuperMemoryKind | undefined;
18
+ tags?: string[] | undefined;
19
+ priority?: string | undefined;
20
+ importance?: number | undefined;
21
+ confidence?: number | undefined;
22
+ sources?: Array<{
23
+ type: string;
24
+ sessionId?: string | undefined;
25
+ }> | undefined;
26
+ }): Promise<unknown>;
27
+ listSuper?(statuses?: Array<'active'>): Promise<unknown[]>;
28
+ searchSuper?(query: string, opts?: {
29
+ limit?: number;
30
+ scope?: 'project';
31
+ includeStatuses?: Array<'active'>;
32
+ }): Promise<unknown[]>;
33
+ }
5
34
  export interface ConsolidationOp {
6
- action: 'add' | 'edit' | 'delete';
7
- /** For add: the fact to remember. For edit: the new text replacing the old. */
35
+ /**
36
+ * Add-only by design. The consolidator runs unattended after every
37
+ * successful session, so LLM-issued delete/edit ops used to give an
38
+ * unsupervised model a substring-matched deletion path over the whole
39
+ * memory store (see the 2026-07 mass-deletion postmortem). Removals and
40
+ * corrections belong to explicit review flows (memory_delete /
41
+ * memory_update / ReviewQueue), never to this hook.
42
+ */
43
+ action: 'add';
44
+ /** The fact to remember. */
8
45
  text?: string | undefined;
9
- /** For edit/delete: the query to match existing entries. */
10
- query?: string | undefined;
11
46
  /** Memory type for categorization. */
12
47
  type?: string | undefined;
13
48
  /** Tags for grouping. */
@@ -17,6 +52,14 @@ export interface ConsolidationOp {
17
52
  }
18
53
  export interface MemoryConsolidatorOptions {
19
54
  memoryStore: MemoryStore;
55
+ /**
56
+ * Optional Super Memory writer. When provided, the consolidator routes
57
+ * adds through `rememberSuper()` and reads existing entries for dedup
58
+ * context via `searchSuper()` instead of the legacy `MemoryStore`.
59
+ * This makes consolidator-sourced memories visible to the turn-middleware
60
+ * (searchSuper, retrieveForPath) which only queries Super Memory.
61
+ */
62
+ superMemory?: ConsolidatorSuperMemory | undefined;
20
63
  /**
21
64
  * Provider used for the consolidation LLM call. Uses the session's
22
65
  * provider by default.
@@ -47,6 +90,7 @@ export declare class SessionMemoryConsolidator implements AgentExtension {
47
90
  name: string;
48
91
  owner: string;
49
92
  private readonly memoryStore;
93
+ private readonly superMemory?;
50
94
  private readonly provider?;
51
95
  private readonly model?;
52
96
  private readonly minIterations;
@@ -55,4 +99,5 @@ export declare class SessionMemoryConsolidator implements AgentExtension {
55
99
  constructor(opts: MemoryConsolidatorOptions);
56
100
  afterRun: AfterRunHook;
57
101
  }
102
+ export {};
58
103
  //# sourceMappingURL=memory-consolidator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/storage/memory-consolidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQxE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAOD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACvD;AAiGD,qBAAa,yBAA0B,YAAW,cAAc;IAC9D,IAAI,SAAiC;IACrC,KAAK,SAAU;IAEf,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAkC;IAEvE,YAAY,IAAI,EAAE,yBAAyB,EAO1C;IAED,QAAQ,EAAE,YAAY,CAkIpB;CACH"}
1
+ {"version":3,"file":"memory-consolidator.d.ts","sourceRoot":"","sources":["../../src/storage/memory-consolidator.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,17 @@ export interface GraphMemoryBackendOptions extends FileMemoryBackendOptions {
27
27
  graphPath?: string | undefined;
28
28
  }
29
29
  /**
30
+ * @deprecated Migrate to `SuperMemoryStore` from the Super Memory package,
31
+ * which provides the same `MemoryBackend` operations (remember, forget, search,
32
+ * consolidate, list, clear) plus graph support via its integrated
33
+ * `SuperMemoryGraph` implementation.
34
+ * This legacy backend stores entries as markdown bullets in a flat file with a
35
+ * separate graph.json; SuperMemoryStore stores structured records in JSONL (or
36
+ * SQLite) with a dedicated edges.jsonl supporting 12 relation types (supersedes,
37
+ * contradicts, about_file, etc.) and mutation-locked append.
38
+ * Migration is NOT drop-in — migrate to SuperMemoryStore and use its
39
+ * integrated graph features instead.
40
+ *
30
41
  * Graph-based memory backend that tracks relationships between entries.
31
42
  * Builds on top of FileMemoryBackend — entries are still persisted as
32
43
  * markdown bullets, but the graph layer adds:
@@ -1 +1 @@
1
- {"version":3,"file":"memory-graph-backend.d.ts","sourceRoot":"","sources":["../../src/storage/memory-graph-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,KAAK,wBAAwB,EAAqB,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CAChD;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAID,MAAM,WAAW,yBAA0B,SAAQ,wBAAwB;IACzE;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAkC;IAEvD,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAK;IAEzC;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAoC;IAErD,YAAY,IAAI,EAAE,yBAAyB,EAG1C;IAIK,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDtF;IAEK,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBjF;IAEK,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;IAEK,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+BvF;IAEK,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAiDzG;IAEK,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/D;IAEK,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE;IAID;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAe7G;IAED;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAA;KAAE,CAKrD;IAID,OAAO,CAAC,MAAM;YAMA,SAAS;IAiBvB,4FAA4F;YAC9E,UAAU;IAmBxB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAID;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAWjB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB;;;OAGG;IACH,OAAO,CAAC,YAAY;CAoBrB"}
1
+ {"version":3,"file":"memory-graph-backend.d.ts","sourceRoot":"","sources":["../../src/storage/memory-graph-backend.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,12 @@ import type { SecretVault } from '../types/secret-vault.js';
8
8
  */
9
9
  export interface ProviderConfigSnapshot {
10
10
  providers: Record<string, ProviderConfig>;
11
+ /** True when the config file actually had a `providers` key. The watcher
12
+ * callback uses this to avoid clearing in-memory providers during hot-reload
13
+ * when the profile config file simply doesn't define any — without this
14
+ * guard, reading a profile config that has no `providers` key would set
15
+ * `appConfig.providers = {}` and wipe all configured providers. */
16
+ snapshotHasProviders: boolean;
11
17
  apiKey?: string;
12
18
  baseUrl?: string;
13
19
  /** Display language (Config.uiLocale), surfaced so a cross-process change
@@ -21,6 +27,7 @@ export interface ProviderConfigSnapshot {
21
27
  favoriteModelsOnly?: boolean;
22
28
  modelMatrix?: Record<string, unknown>;
23
29
  fallbackAuto?: boolean;
30
+ modelAvailabilitySchedule?: import('../core/model-availability-calendar.js').ModelBlackoutRule[];
24
31
  }
25
32
  export interface WatchProviderConfigOptions {
26
33
  /** Surface non-fatal read/parse/decrypt issues. */
@@ -28,6 +35,16 @@ export interface WatchProviderConfigOptions {
28
35
  /** Coalesce bursts of fs events (default 200ms). */
29
36
  debounceMs?: number;
30
37
  }
38
+ /**
39
+ * Read and decrypt the credential slice of a config file. Returns `undefined`
40
+ * when the file is missing or unparseable (the `warn` callback carries the
41
+ * detail); never throws for routine I/O.
42
+ *
43
+ * Exported so multi-layer watchers (e.g. `provider-runtime-setup.ts`) can
44
+ * re-read every active config layer when any layer changes, then merge them
45
+ * with correct precedence before applying.
46
+ */
47
+ export declare function readProviderSnapshot(configPath: string, vault: SecretVault, warn?: (msg: string) => void): Promise<ProviderConfigSnapshot | undefined>;
31
48
  /**
32
49
  * Watch `configPath` for credential changes and invoke `onChange` with a
33
50
  * freshly-decrypted snapshot whenever the `providers`/`apiKey`/`baseUrl` slice
@@ -1 +1 @@
1
- {"version":3,"file":"provider-config-watcher.d.ts","sourceRoot":"","sources":["../../src/storage/provider-config-watcher.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0EACsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;yEACqE;IACrE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,EACpD,IAAI,GAAE,0BAA+B,GACpC;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAgEvB"}
1
+ {"version":3,"file":"provider-config-watcher.d.ts","sourceRoot":"","sources":["../../src/storage/provider-config-watcher.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C;;;;wEAIoE;IACpE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0EACsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;yEACqE;IACrE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,OAAO,wCAAwC,EAAE,iBAAiB,EAAE,CAAC;CAClG;AAED,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC3B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAiD7C;AAmBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,EACpD,IAAI,GAAE,0BAA+B,GACpC;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAgEvB"}
@@ -45,12 +45,12 @@ export interface SessionEventBridge {
45
45
  allows(type: SessionEvent['type']): boolean;
46
46
  }
47
47
  /** Core events that are always written regardless of auditLevel. */
48
- declare const CORE_RECONSTRUCT_EVENTS: Set<"agent_error" | "agent_spawned" | "agent_stopped" | "checkpoint" | "compaction" | "context_snapshot" | "error" | "file_observation" | "file_snapshot" | "in_flight_end" | "in_flight_start" | "llm_request" | "llm_response" | "message_appended" | "message_truncated" | "message_updated" | "messages_replaced" | "mode_changed" | "provider_error" | "provider_retry" | "rewound" | "session_end" | "session_forked" | "session_resumed" | "session_start" | "side_effect" | "skill_activated" | "skill_deactivated" | "spec_analyzed" | "spec_parsed" | "task_completed" | "task_created" | "task_failed" | "task_updated" | "tool_call_end" | "tool_call_start" | "tool_progress" | "tool_result" | "tool_use" | "user_input">;
48
+ declare const CORE_RECONSTRUCT_EVENTS: Set<"agent_error" | "agent_spawned" | "agent_stopped" | "checkpoint" | "compaction" | "context_snapshot" | "error" | "file_event" | "file_observation" | "file_snapshot" | "in_flight_end" | "in_flight_start" | "llm_request" | "llm_response" | "message_appended" | "message_truncated" | "message_updated" | "messages_replaced" | "mode_changed" | "provider_error" | "provider_retry" | "rewound" | "session_end" | "session_forked" | "session_resumed" | "session_start" | "side_effect" | "skill_activated" | "skill_deactivated" | "spec_analyzed" | "spec_parsed" | "task_completed" | "task_created" | "task_failed" | "task_updated" | "tool_call_end" | "tool_call_start" | "tool_progress" | "tool_result" | "tool_use" | "user_input">;
49
49
  /**
50
50
  * Events that are considered "standard" audit detail.
51
51
  * These are lightweight and high-value for forensics.
52
52
  */
53
- declare const STANDARD_AUDIT_EVENTS: Set<"agent_error" | "agent_spawned" | "agent_stopped" | "checkpoint" | "compaction" | "context_snapshot" | "error" | "file_observation" | "file_snapshot" | "in_flight_end" | "in_flight_start" | "llm_request" | "llm_response" | "message_appended" | "message_truncated" | "message_updated" | "messages_replaced" | "mode_changed" | "provider_error" | "provider_retry" | "rewound" | "session_end" | "session_forked" | "session_resumed" | "session_start" | "side_effect" | "skill_activated" | "skill_deactivated" | "spec_analyzed" | "spec_parsed" | "task_completed" | "task_created" | "task_failed" | "task_updated" | "tool_call_end" | "tool_call_start" | "tool_progress" | "tool_result" | "tool_use" | "user_input">;
53
+ declare const STANDARD_AUDIT_EVENTS: Set<"agent_error" | "agent_spawned" | "agent_stopped" | "checkpoint" | "compaction" | "context_snapshot" | "error" | "file_event" | "file_observation" | "file_snapshot" | "in_flight_end" | "in_flight_start" | "llm_request" | "llm_response" | "message_appended" | "message_truncated" | "message_updated" | "messages_replaced" | "mode_changed" | "provider_error" | "provider_retry" | "rewound" | "session_end" | "session_forked" | "session_resumed" | "session_start" | "side_effect" | "skill_activated" | "skill_deactivated" | "spec_analyzed" | "spec_parsed" | "task_completed" | "task_created" | "task_failed" | "task_updated" | "tool_call_end" | "tool_call_start" | "tool_progress" | "tool_result" | "tool_use" | "user_input">;
54
54
  /**
55
55
  * Create a safe, audit-level-aware bridge around a SessionWriter.
56
56
  *
@@ -1 +1 @@
1
- {"version":3,"file":"session-event-bridge.d.ts","sourceRoot":"","sources":["../../src/storage/session-event-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,kGAAkG;IAClG,YAAY,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAEvC,oFAAoF;IACpF,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;CAC7C;AAED,oEAAoE;AACpE,QAAA,MAAM,uBAAuB,ysBAkB3B,CAAC;AAEH;;;GAGG;AACH,QAAA,MAAM,qBAAqB,ysBAyBzB,CAAC;AA4BH;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,EACnF,KAAK,GAAE,UAAuB,EAC9B,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CAyFpB;AAED,oEAAoE;AACpE,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,GAAG,IAAI,GAC7E,UAAU,CAMZ;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,CAAC,EAAE;IACJ,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QACpC,QAAQ,CAAC,EAAE;YACT,YAAY,CAAC,EAAE;gBAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;aAAE,CAAC;SACpD,CAAC;KACH,CAAC;CACH,GAAG,IAAI,GACP;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE;QACR,YAAY,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH,CAeA"}
1
+ {"version":3,"file":"session-event-bridge.d.ts","sourceRoot":"","sources":["../../src/storage/session-event-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,kGAAkG;IAClG,YAAY,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAEvC,oFAAoF;IACpF,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;CAC7C;AAED,oEAAoE;AACpE,QAAA,MAAM,uBAAuB,wtBAkB3B,CAAC;AAEH;;;GAGG;AACH,QAAA,MAAM,qBAAqB,wtBAyBzB,CAAC;AA4BH;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,EACnF,KAAK,GAAE,UAAuB,EAC9B,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CAyFpB;AAED,oEAAoE;AACpE,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAA;CAAE,GAAG,IAAI,GAC7E,UAAU,CAMZ;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,CAAC,EAAE;IACJ,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QACpC,QAAQ,CAAC,EAAE;YACT,YAAY,CAAC,EAAE;gBAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;aAAE,CAAC;SACpD,CAAC;KACH,CAAC;CACH,GAAG,IAAI,GACP;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE;QACR,YAAY,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KACtC,CAAC;CACH,CAeA"}
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-manage-tools.d.ts","sourceRoot":"","sources":["../../src/tools/fallback-manage-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAc,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAOzD,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAC3D,eAAO,MAAM,+BAA+B,0BAA0B,CAAC;AACvE,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAC3E,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AA2nBD,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AA4L3D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAqL7D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AA6K7D,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AA2QjE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,EAAE,CAWjF"}
1
+ {"version":3,"file":"fallback-manage-tools.d.ts","sourceRoot":"","sources":["../../src/tools/fallback-manage-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAc,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAOzD,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAC3D,eAAO,MAAM,+BAA+B,0BAA0B,CAAC;AACvE,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAC3E,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAmoBD,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AA4L3D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AA6L7D,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AA6K7D,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AA2QjE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,EAAE,CAWjF"}
@@ -2011,6 +2011,84 @@ function validateCouncilToolInput(input) {
2011
2011
  return errors;
2012
2012
  }
2013
2013
 
2014
+ // src/core/model-availability-calendar.ts
2015
+ function logicalCalendarTarget(providerId, model) {
2016
+ if (providerId !== "omniroute") return { providerId, model };
2017
+ const slash = model.indexOf("/");
2018
+ return slash > 0 && slash < model.length - 1 ? { providerId: model.slice(0, slash), model: model.slice(slash + 1) } : { providerId, model };
2019
+ }
2020
+ var WEEKDAYS = {
2021
+ Sun: 0,
2022
+ Mon: 1,
2023
+ Tue: 2,
2024
+ Wed: 3,
2025
+ Thu: 4,
2026
+ Fri: 5,
2027
+ Sat: 6
2028
+ };
2029
+ function minuteOfDay(value) {
2030
+ const match = /^(\d{2}):(\d{2})$/.exec(value);
2031
+ if (!match) return void 0;
2032
+ const hour = Number(match[1]);
2033
+ const minute = Number(match[2]);
2034
+ if (hour > 23 || minute > 59) return void 0;
2035
+ return hour * 60 + minute;
2036
+ }
2037
+ function clockAt(date, timezone) {
2038
+ try {
2039
+ const parts = new Intl.DateTimeFormat("en-US", {
2040
+ timeZone: timezone,
2041
+ weekday: "short",
2042
+ hour: "2-digit",
2043
+ minute: "2-digit",
2044
+ hourCycle: "h23"
2045
+ }).formatToParts(date);
2046
+ const weekday = parts.find((part) => part.type === "weekday")?.value;
2047
+ const hour = Number(parts.find((part) => part.type === "hour")?.value);
2048
+ const minute = Number(parts.find((part) => part.type === "minute")?.value);
2049
+ if (!weekday || WEEKDAYS[weekday] === void 0 || !Number.isFinite(hour + minute))
2050
+ return void 0;
2051
+ return { day: WEEKDAYS[weekday], minute: hour * 60 + minute };
2052
+ } catch {
2053
+ return void 0;
2054
+ }
2055
+ }
2056
+ function targetMatches(rule, providerId, model) {
2057
+ if (rule.provider && rule.provider !== providerId) return false;
2058
+ if (rule.model && rule.model !== model) return false;
2059
+ return Boolean(rule.provider || rule.model);
2060
+ }
2061
+ function timeMatches(rule, day, minute) {
2062
+ const start = minuteOfDay(rule.start);
2063
+ const end = minuteOfDay(rule.end);
2064
+ if (start === void 0 || end === void 0) return false;
2065
+ const days = rule.days?.length ? new Set(rule.days) : void 0;
2066
+ if (start === end) return !days || days.has(day);
2067
+ if (start < end) return (!days || days.has(day)) && minute >= start && minute < end;
2068
+ if (minute >= start) return !days || days.has(day);
2069
+ const previousDay = (day + 6) % 7;
2070
+ return minute < end && (!days || days.has(previousDay));
2071
+ }
2072
+ function evaluateModelCalendar(rules, providerId, model, at = /* @__PURE__ */ new Date()) {
2073
+ ({ providerId, model } = logicalCalendarTarget(providerId, model));
2074
+ const allowRules = [];
2075
+ let allowMatched = false;
2076
+ for (const rule of rules ?? []) {
2077
+ if (rule.enabled === false || !targetMatches(rule, providerId, model)) continue;
2078
+ const clock = clockAt(at, rule.timezone);
2079
+ if (!clock || minuteOfDay(rule.start) === void 0 || minuteOfDay(rule.end) === void 0)
2080
+ continue;
2081
+ if (rule.mode === "allow_only") {
2082
+ allowRules.push(rule);
2083
+ if (timeMatches(rule, clock.day, clock.minute)) allowMatched = true;
2084
+ } else if (timeMatches(rule, clock.day, clock.minute)) {
2085
+ return { allowed: false, rule };
2086
+ }
2087
+ }
2088
+ if (allowRules.length > 0 && !allowMatched) return { allowed: false, rule: allowRules[0] };
2089
+ return { allowed: true };
2090
+ }
2091
+
2014
2092
  // src/types/blocks.ts
2015
2093
  function isTextBlock(b) {
2016
2094
  return b.type === "text";
@@ -2019,18 +2097,20 @@ function isTextBlock(b) {
2019
2097
  // src/types/provider.ts
2020
2098
  var CONTEXT_OVERFLOW_RE = /context.length|context.window|max.*tokens?.*exceeded|prompt is too long|too long|exceeds the context|\btokens\b.*exceed|context_length_exceeded/i;
2021
2099
  var CONTENT_FILTER_RE = /content.(filter|policy|moderation)|safety (system|filter)/i;
2100
+ var QUOTA_EXHAUSTED_RE = /(?:insufficient|exhausted|depleted|exceeded|no|not enough)[-_\s]*(?:quota|credit|balance)|(?:quota|credit|balance)[-_\s]*(?:exhausted|depleted|exceeded|insufficient)|billing[_\s-]*(?:hard[_\s-]*)?limit|payment required|spending limit|plan limit/i;
2022
2101
  function classifyProviderError(status, body, message) {
2023
2102
  const type = body?.type;
2103
+ const text = [message, body?.message, type, body?.raw].filter(Boolean).join("\n");
2024
2104
  if (status === 0) return "network";
2025
2105
  if (status === 408) return "timeout";
2026
2106
  if (status === 599) return "stream_hang";
2107
+ if (status === 402 || QUOTA_EXHAUSTED_RE.test(text)) return "quota_exhausted";
2027
2108
  if (type === "rate_limit_error" || status === 429) return "rate_limit";
2028
2109
  if (type === "overloaded_error" || status === 529) return "overloaded";
2029
2110
  if (status >= 500) return "server";
2030
2111
  if (type === "authentication_error" || type === "permission_error" || status === 401 || status === 403) {
2031
2112
  return "auth";
2032
2113
  }
2033
- const text = [message, body?.message, type, body?.raw].filter(Boolean).join("\n");
2034
2114
  if (type === "content_filter" || CONTENT_FILTER_RE.test(text)) return "content_filter";
2035
2115
  if (status === 413 || status >= 400 && CONTEXT_OVERFLOW_RE.test(text)) {
2036
2116
  return "context_overflow";
@@ -2043,6 +2123,7 @@ function isFallbackWorthy(kind) {
2043
2123
  }
2044
2124
  var FALLBACK_WORTHY_BY_KIND = {
2045
2125
  rate_limit: true,
2126
+ quota_exhausted: true,
2046
2127
  overloaded: true,
2047
2128
  server: true,
2048
2129
  timeout: true,
@@ -2121,6 +2202,7 @@ var KIND_TO_CODE = {
2121
2202
  network: ERROR_CODES.PROVIDER_NETWORK_ERROR,
2122
2203
  timeout: ERROR_CODES.PROVIDER_NETWORK_ERROR,
2123
2204
  rate_limit: ERROR_CODES.PROVIDER_RATE_LIMITED,
2205
+ quota_exhausted: ERROR_CODES.PROVIDER_RATE_LIMITED,
2124
2206
  auth: ERROR_CODES.PROVIDER_AUTH_FAILED,
2125
2207
  overloaded: ERROR_CODES.PROVIDER_OVERLOADED,
2126
2208
  context_overflow: ERROR_CODES.PROVIDER_CONTEXT_OVERFLOW,
@@ -2184,14 +2266,20 @@ var OneShotOrchestrator = class {
2184
2266
  let servingProviderId = provider.id;
2185
2267
  let servingModel = target.model;
2186
2268
  let fromFallback = false;
2187
- let lastError = void 0;
2269
+ let lastError;
2188
2270
  let fallbackEligible = false;
2189
- if (tracker && !tracker.isAvailable(target.providerId, target.model)) {
2271
+ if (tracker && !tracker.isAvailable(target.providerId, target.model) || !evaluateModelCalendar(config.modelAvailabilitySchedule, target.providerId, target.model).allowed) {
2190
2272
  this.opts.logger?.debug(
2191
2273
  `one-shot: primary "${target.providerId}/${target.model}" is blocked \u2014 trying fallback`
2192
2274
  );
2193
2275
  } else {
2194
- const primaryAttempt = await this.tryCall(provider, request, signal, target.providerId, target.model);
2276
+ const primaryAttempt = await this.tryCall(
2277
+ provider,
2278
+ request,
2279
+ signal,
2280
+ target.providerId,
2281
+ target.model
2282
+ );
2195
2283
  const result = primaryAttempt.response;
2196
2284
  lastError = primaryAttempt.error;
2197
2285
  fallbackEligible = primaryAttempt.fallbackEligible;
@@ -2202,17 +2290,13 @@ var OneShotOrchestrator = class {
2202
2290
  return this.buildResult(result, servingProviderId, servingModel, false, startedAt);
2203
2291
  }
2204
2292
  if (!fallbackEligible || chain.length === 0) {
2205
- return this.buildErrorResult(
2206
- lastError,
2207
- target.providerId,
2208
- target.model,
2209
- false,
2210
- startedAt
2211
- );
2293
+ return this.buildErrorResult(lastError, target.providerId, target.model, false, startedAt);
2212
2294
  }
2213
2295
  }
2214
2296
  const usableChain = tracker ? chain.filter((e) => tracker.isAvailable(e.providerId, e.model)) : chain;
2215
2297
  for (const entry of usableChain) {
2298
+ if (!evaluateModelCalendar(config.modelAvailabilitySchedule, entry.providerId, entry.model).allowed)
2299
+ continue;
2216
2300
  if (entry.providerId === provider.id && entry.model === target.model) continue;
2217
2301
  let fbProvider;
2218
2302
  try {
@@ -2239,7 +2323,13 @@ var OneShotOrchestrator = class {
2239
2323
  fallbackEligible = attempt.fallbackEligible;
2240
2324
  if (!fallbackEligible) break;
2241
2325
  }
2242
- return this.buildErrorResult(lastError, servingProviderId, servingModel, fromFallback, startedAt);
2326
+ return this.buildErrorResult(
2327
+ lastError,
2328
+ servingProviderId,
2329
+ servingModel,
2330
+ fromFallback,
2331
+ startedAt
2332
+ );
2243
2333
  }
2244
2334
  // ── Private helpers ─────────────────────────────────────────────
2245
2335
  /**
@@ -3624,6 +3714,40 @@ var DOMAIN_AGENTS = [
3624
3714
  "information architecture"
3625
3715
  ]
3626
3716
  }
3717
+ },
3718
+ {
3719
+ config: {
3720
+ id: "ios",
3721
+ name: "iOS",
3722
+ role: "ios",
3723
+ tools: [...TOOLS.build, "fetch"],
3724
+ prompt: agentPrompt("ios")
3725
+ },
3726
+ budget: HEAVY_BUDGET,
3727
+ capability: {
3728
+ phase: "domain",
3729
+ summary: "Apple-platform app development in Swift against the latest Xcode/iOS-SDK line: SwiftUI, UIKit, SwiftData, concurrency, accessibility, and App Store submission.",
3730
+ keywords: [
3731
+ "ios",
3732
+ "iphone",
3733
+ "ipad",
3734
+ "ipados",
3735
+ "watchos",
3736
+ "tvos",
3737
+ "visionos",
3738
+ "macos",
3739
+ "swift",
3740
+ "swiftui",
3741
+ "uikit",
3742
+ "xcode",
3743
+ "swiftdata",
3744
+ "app store",
3745
+ "app intents",
3746
+ "swift package manager",
3747
+ "cocoapods",
3748
+ "foundation models"
3749
+ ]
3750
+ }
3627
3751
  }
3628
3752
  ];
3629
3753
 
@@ -4094,7 +4218,8 @@ function providerHasKey(entry) {
4094
4218
  if (!entry) return false;
4095
4219
  if (hasText(entry.apiKey)) return true;
4096
4220
  if (Array.isArray(entry.apiKeys) && entry.apiKeys.some((k) => hasText(k?.apiKey))) return true;
4097
- if (Array.isArray(entry.envVars) && entry.envVars.some((v) => hasText(process.env[v]))) return true;
4221
+ if (Array.isArray(entry.envVars) && entry.envVars.some((v) => hasText(process.env[v])))
4222
+ return true;
4098
4223
  return false;
4099
4224
  }
4100
4225
  function visibleProviderModels(config, providerId, providerModels) {
@@ -4166,6 +4291,8 @@ var FallbackProfileManager = class {
4166
4291
  const health = this.checkProvider(providerId);
4167
4292
  if (!health.usable) continue;
4168
4293
  if (this.statusTracker && !this.statusTracker.isAvailable(providerId, parsed.model)) continue;
4294
+ if (!evaluateModelCalendar(this.config.modelAvailabilitySchedule, providerId, parsed.model).allowed)
4295
+ continue;
4169
4296
  const allowedModels = this.config.providers?.[providerId]?.models;
4170
4297
  if (allowedModels && !allowedModels.includes(parsed.model)) continue;
4171
4298
  resolved.push({
@@ -4238,6 +4365,8 @@ var FallbackProfileManager = class {
4238
4365
  seen.add(key);
4239
4366
  if (excludeKey && key === excludeKey) continue;
4240
4367
  if (this.statusTracker && !this.statusTracker.isAvailable(providerId, parsed.model)) continue;
4368
+ if (!evaluateModelCalendar(this.config.modelAvailabilitySchedule, providerId, parsed.model).allowed)
4369
+ continue;
4241
4370
  resolved.push({
4242
4371
  providerId,
4243
4372
  model: parsed.model,
@@ -4282,6 +4411,8 @@ var FallbackProfileManager = class {
4282
4411
  seen.add(ref);
4283
4412
  if (excludeKey && ref === excludeKey) continue;
4284
4413
  if (this.statusTracker && !this.statusTracker.isAvailable(id, model)) continue;
4414
+ if (!evaluateModelCalendar(this.config.modelAvailabilitySchedule, id, model).allowed)
4415
+ continue;
4285
4416
  if (favoriteSet.has(ref)) {
4286
4417
  favorites.push(ref);
4287
4418
  continue;
@@ -4886,14 +5017,11 @@ var AGENT_MODEL_ASSIGN_SCHEMA = {
4886
5017
  description: "Set to true to remove the matrix entry for this role (it will fall through to phase/*/leader)."
4887
5018
  }
4888
5019
  },
4889
- oneOf: [
4890
- { required: ["role", "clear"] },
4891
- { required: ["role", "model"] },
4892
- { required: ["role", "profile"] },
4893
- { required: ["role", "provider", "model"] },
4894
- { required: ["role"] }
4895
- // show current assignment
4896
- ],
5020
+ // Flattened from a top-level oneOf — Anthropic-family endpoints reject
5021
+ // top-level combinators (omniroute 400: "input_schema does not support
5022
+ // oneOf, allOf, or anyOf at the top level"). Combination rules are
5023
+ // enforced in the handler instead.
5024
+ required: ["role"],
4897
5025
  additionalProperties: false
4898
5026
  };
4899
5027
  function createAgentModelAssignTool(opts) {
@@ -4909,6 +5037,13 @@ function createAgentModelAssignTool(opts) {
4909
5037
  icon: "settings",
4910
5038
  async execute(input) {
4911
5039
  const config = opts.getConfig();
5040
+ const modes = [input.clear ? "clear" : null, input.profile ? "profile" : null, input.model ? "model" : null].filter(Boolean);
5041
+ if (modes.length > 1) {
5042
+ return {
5043
+ status: "error",
5044
+ message: `Conflicting assignment modes: ${modes.join(" + ")}. Use exactly one: clear=true, profile="name", or model="name" (optionally with provider).`
5045
+ };
5046
+ }
4912
5047
  if (input.role === "list") {
4913
5048
  const matrix = config.modelMatrix ?? {};
4914
5049
  const keys = Object.keys(matrix);
@@ -5147,11 +5282,10 @@ var PROVIDER_KEY_SET_SCHEMA = {
5147
5282
  description: "Whether to make this the active key. Default: true."
5148
5283
  }
5149
5284
  },
5150
- oneOf: [
5151
- { required: ["provider", "key"] },
5152
- { required: ["provider", "envVar"] },
5153
- { required: ["provider"] }
5154
- ],
5285
+ // Flattened from a top-level oneOf — Anthropic-family endpoints reject
5286
+ // top-level combinators (omniroute 400). Combination rules are enforced
5287
+ // in the handler instead.
5288
+ required: ["provider"],
5155
5289
  additionalProperties: false
5156
5290
  };
5157
5291
  function createProviderKeySetTool(opts) {
@@ -5170,6 +5304,12 @@ function createProviderKeySetTool(opts) {
5170
5304
  const providers = {
5171
5305
  ...config.providers ?? {}
5172
5306
  };
5307
+ if (input.key && input.envVar) {
5308
+ return {
5309
+ status: "error",
5310
+ message: "Provide either key (direct, visible to LLM) OR envVar (reads from environment, never visible to LLM), not both. Use envVar for security."
5311
+ };
5312
+ }
5173
5313
  if (!input.key && !input.envVar) {
5174
5314
  if (opts.requestInput) {
5175
5315
  try {