@chrisromp/copilot-bridge 0.6.1 → 0.7.0-dev.16

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.
package/README.md CHANGED
@@ -24,7 +24,9 @@ Mattermost Channel → copilot-bridge → @github/copilot-sdk → Copilot CLI
24
24
  - **MCP & skills** — Auto-loads MCP servers and skill directories from Copilot config
25
25
  - **Fuzzy model matching** — `/model opus` resolves to `claude-opus-4.6` (mobile-friendly)
26
26
  - **Interactive permissions** — Approve/deny tool use via chat, or `/autopilot` to auto-approve
27
- - **Session management** — `/reload` to refresh config, `/resume` to switch between sessions
27
+ - **Model fallback** — Automatic fallback to alternative models on capacity/availability errors
28
+ - **Loop detection** — Detects and breaks tool call loops with user notification
29
+ - **Session management** — `/reload` to refresh config, `/resume` to switch between sessions (prefix matching supported)
28
30
  - **Persistent preferences** — Model, agent, verbose mode, permissions saved per-channel
29
31
  - **Scheduled tasks** — Recurring (cron) and one-off (datetime) tasks per channel
30
32
  - **Inter-agent communication** — Bot-to-bot messaging via `ask_agent` tool
@@ -2,15 +2,8 @@
2
2
  "platforms": {
3
3
  "mattermost": {
4
4
  "url": "https://chat.example.com",
5
-
6
- "_comment_auth": "Use ONE of: 'botToken' (single bot) OR 'bots' (multiple identities)",
7
-
8
- "botToken": "SINGLE_BOT_TOKEN",
9
-
10
- "_comment_bots": "Multi-bot example (remove 'botToken' above and rename '_bots' to 'bots'):",
11
- "_bots": {
12
- "copilot": { "token": "BOT_TOKEN_1", "admin": true },
13
- "bob": { "token": "BOT_TOKEN_2", "agent": "bob-agent" }
5
+ "bots": {
6
+ "copilot": { "token": "YOUR_BOT_TOKEN", "admin": true }
14
7
  }
15
8
  }
16
9
  },
@@ -26,21 +19,11 @@
26
19
  "triggerMode": "mention",
27
20
  "threadedReplies": true,
28
21
  "verbose": false
29
- },
30
- {
31
- "id": "another-channel-id",
32
- "platform": "mattermost",
33
- "bot": "bob",
34
- "name": "Bob's Channel",
35
- "workingDirectory": "/path/to/other-project",
36
- "model": "claude-sonnet-4.6",
37
- "triggerMode": "mention",
38
- "threadedReplies": true,
39
- "verbose": false
40
22
  }
41
23
  ],
42
24
  "defaults": {
43
25
  "model": "claude-sonnet-4.6",
26
+ "fallbackModels": [],
44
27
  "agent": null,
45
28
  "triggerMode": "mention",
46
29
  "threadedReplies": true,
@@ -61,7 +61,7 @@ export function resolveModel(input, models) {
61
61
  /** Pick the best model from ambiguous candidates. Prefers shorter IDs and closer matches. */
62
62
  function pickBestMatch(input, candidates) {
63
63
  return candidates.sort((a, b) => {
64
- // Prefer exact id prefix match (e.g., "opus" matching "claude-opus-4.6" not "claude-opus-4.6-1m")
64
+ // Prefer exact id prefix match (e.g., "opus" matching base model over extended variants)
65
65
  const aStartsId = a.id.toLowerCase().endsWith(input) ? 1 : 0;
66
66
  const bStartsId = b.id.toLowerCase().endsWith(input) ? 1 : 0;
67
67
  if (aStartsId !== bStartsId)
@@ -1 +1 @@
1
- {"version":3,"file":"command-handler.js","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEzG,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACxE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAE1E,sEAAsE;AACtE,SAAS,SAAS,CAAC,KAAa,EAAE,QAAiB;IACjD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0DAA0D;AAC1D,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,wDAAwD;AACxD,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,gBAAgB,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,mDAAmD;AACnD,SAAS,cAAc;IACrB,OAAO,gBAAgB,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;AACnD,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAmB;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IAC/F,IAAI,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAErD,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3E,CAAC;IACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE3F,uDAAuD;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAEnF,uCAAuC;IACvC,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,qBAAqB,KAAK,4CAA4C,EAAE,CAAC;AAC3F,CAAC;AAED,6FAA6F;AAC7F,SAAS,aAAa,CAAC,KAAa,EAAE,UAAuB;IAC3D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,kGAAkG;QAClG,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,GAAG,SAAS,CAAC;QAE1D,wDAAwD;QACxD,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QAElE,sBAAsB;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,+EAA+E;AAC/E,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IACjD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,kDAAkD;AAClD,SAAS,kBAAkB,CAAC,KAAoD;IAC9E,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IACvE,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClF,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE;QACjD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAY,EAAE,WAAwE,EAAE,cAA8F,EAAE,WAAyD,EAAE,MAAoB,EAAE,OAAyB,EAAE,YAAmE;IACtZ,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEvC,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,MAAM,IAAI,WAAW;QAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI;QACtD,CAAC,CAAC,IAAI,CAAC;IAET,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC;QAE1F,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,6BAA6B,EAAE,CAAC;QAE5F,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;QAE1F,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,yEAAyE;gBACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;QACtH,CAAC;QAED,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,4BAA4B;gBAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAC;gBACrE,CAAC;gBACD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;gBAClC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG;oBACZ,sBAAsB;oBACtB,EAAE;oBACF,uBAAuB;oBACvB,yBAAyB;iBAC1B,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,MAAM,SAAS,GAAG,CAAC,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC7D,MAAM,MAAM,GAAG,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBAC/E,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,MAAM,OAAO,KAAK,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;gBACxE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uEAAuE,CAAC,CAAC;gBACxF,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,2BAA2B,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YAClI,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACnD,CAAC;YACD,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,CAAC,cAAc,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YACxD,IAAI,QAAQ,GAAG,iBAAiB,UAAU,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;qBAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,OAAO;oBAAE,QAAQ,IAAI,qBAAqB,OAAO,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;QACvF,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC,CAAC,4CAA4C;aACpG,CAAC;QACJ,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;YACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,eAAe,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,4DAA4D;aAChJ,CAAC;QACJ,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,cAAc,EAAE,eAAe,IAAI,SAAS,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,kCAAkC,OAAO,mDAAmD,EAAE,CAAC;YACnI,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,qFAAqF,EAAE,CAAC;YAC5H,CAAC;YACD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClI,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC;oBAC9E,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,KAAK,WAAW,EAAE,KAAK,IAAI,SAAS,IAAI,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,kBAAkB,wGAAwG,EAAE,CAAC;YAC7K,CAAC;YACD,eAAe,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,gCAAgC,KAAK,8CAA8C;aAC9F,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,wCAAwC,EAAE,CAAC;YAC/E,CAAC;YACD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,CAAC,cAAc,IAAI,gBAAgB,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1F,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,KAAK,GAAG;gBACZ,uBAAuB;gBACvB,gBAAgB,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO;gBACxD,cAAc,YAAY,IAAI;gBAC9B,YAAY,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE;gBAClF,kBAAkB,WAAW,EAAE,gBAAgB,IAAI,SAAS,IAAI;gBAChE,UAAU,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;gBAChE,cAAc,CAAC,cAAc,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAChF,sBAAsB,CAAC,cAAc,EAAE,cAAc,IAAI,KAAK,EAAE,cAAc,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,EAAE;aACvI,CAAC;YACF,wDAAwD;YACxD,IAAI,gBAAgB,EAAE,yBAAyB,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzG,MAAM,OAAO,GAAG,cAAc,EAAE,eAAe,IAAI,gBAAgB,CAAC,sBAAsB,IAAI,SAAS,CAAC;gBACxG,KAAK,CAAC,IAAI,CAAC,4BAA4B,OAAO,iBAAiB,gBAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3H,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,2DAA2D,EAAE,CAAC;YAClG,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,kBAAkB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QAC5F,CAAC;QAED,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAEvE,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAElE,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,cAAc,EAAE,cAAc,IAAI,KAAK,EAAE,cAAc,IAAI,aAAa,CAAC;YACzF,MAAM,OAAO,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;YACtE,eAAe,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,OAAO,KAAK,WAAW;oBAC/B,CAAC,CAAC,2DAA2D;oBAC7D,CAAC,CAAC,+DAA+D;aACpE,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,2BAA2B;gBAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;YACjF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,+BAA+B,EAAE,CAAC;YACtE,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC7D,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC;YACjF,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,KAAK,MAAM,CAAC,IAAI,WAAW;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,gBAAgB;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,KAAK,MAAM,CAAC,IAAI,eAAe;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,eAAe,CAAC;QACrB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,QAAQ;oBAChB,CAAC,CAAC,wEAAwE;oBAC1E,CAAC,CAAC,qDAAqD;aAC1D,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAE7E,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;YAC5D,MAAM,MAAM,GAAG;gBACb,cAAc;gBACd,8BAA8B;gBAC9B,iCAAiC;gBACjC,yCAAyC;gBACzC,+BAA+B;gBAC/B,wCAAwC;gBACxC,0CAA0C;gBAC1C,yCAAyC;gBACzC,yCAAyC;gBACzC,iDAAiD;gBACjD,iCAAiC;aAClC,CAAC;YACF,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE;oBACR,kBAAkB;oBAClB,EAAE;oBACF,aAAa;oBACb,8BAA8B;oBAC9B,oDAAoD;oBACpD,mEAAmE;oBACnE,2CAA2C;oBAC3C,+DAA+D;oBAC/D,6DAA6D;oBAC7D,2DAA2D;oBAC3D,qEAAqE;oBACrE,wCAAwC;oBACxC,0CAA0C;oBAC1C,+BAA+B;oBAC/B,EAAE;oBACF,iBAAiB;oBACjB,kDAAkD;oBAClD,8CAA8C;oBAC9C,sCAAsC;oBACtC,uDAAuD;oBACvD,0DAA0D;oBAC1D,EAAE;oBACF,gBAAgB;oBAChB,2EAA2E;oBAC3E,mDAAmD;oBACnD,wDAAwD;oBACxD,8DAA8D;oBAC9D,EAAE;oBACF,kBAAkB;oBAClB,iDAAiD;oBACjD,4CAA4C;oBAC5C,kDAAkD;oBAClD,gCAAgC;iBACjC,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;QACJ,CAAC;QAED;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"command-handler.js","sourceRoot":"","sources":["../../src/core/command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEzG,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACxE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAE1E,sEAAsE;AACtE,SAAS,SAAS,CAAC,KAAa,EAAE,QAAiB;IACjD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0DAA0D;AAC1D,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,wDAAwD;AACxD,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,gBAAgB,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,mDAAmD;AACnD,SAAS,cAAc;IACrB,OAAO,gBAAgB,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;AACnD,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,MAAmB;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IAC/F,IAAI,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAErD,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3E,CAAC;IACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE3F,uDAAuD;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAEnF,uCAAuC;IACvC,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,qBAAqB,KAAK,4CAA4C,EAAE,CAAC;AAC3F,CAAC;AAED,6FAA6F;AAC7F,SAAS,aAAa,CAAC,KAAa,EAAE,UAAuB;IAC3D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,yFAAyF;QACzF,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,GAAG,SAAS,CAAC;QAE1D,wDAAwD;QACxD,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QAElE,sBAAsB;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,+EAA+E;AAC/E,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IACjD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,kDAAkD;AAClD,SAAS,kBAAkB,CAAC,KAAoD;IAC9E,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IACvE,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClF,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE;QACjD,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAY,EAAE,WAAwE,EAAE,cAA8F,EAAE,WAAyD,EAAE,MAAoB,EAAE,OAAyB,EAAE,YAAmE;IACtZ,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEvC,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,MAAM,IAAI,WAAW;QAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI;QACtD,CAAC,CAAC,IAAI,CAAC;IAET,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC;QAE1F,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,6BAA6B,EAAE,CAAC;QAE5F,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;QAE1F,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,yEAAyE;gBACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;QACtH,CAAC;QAED,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,4BAA4B;gBAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAC;gBACrE,CAAC;gBACD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;gBAClC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG;oBACZ,sBAAsB;oBACtB,EAAE;oBACF,uBAAuB;oBACvB,yBAAyB;iBAC1B,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,MAAM,SAAS,GAAG,CAAC,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC7D,MAAM,MAAM,GAAG,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBAC/E,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,MAAM,OAAO,KAAK,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;gBACxE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uEAAuE,CAAC,CAAC;gBACxF,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,2BAA2B,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YAClI,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACnD,CAAC;YACD,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,CAAC,cAAc,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YACxD,IAAI,QAAQ,GAAG,iBAAiB,UAAU,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;qBAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,OAAO;oBAAE,QAAQ,IAAI,qBAAqB,OAAO,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;QACvF,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC,CAAC,4CAA4C;aACpG,CAAC;QACJ,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;YACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,eAAe,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,4DAA4D;aAChJ,CAAC;QACJ,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,cAAc,EAAE,eAAe,IAAI,SAAS,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,kCAAkC,OAAO,mDAAmD,EAAE,CAAC;YACnI,CAAC;YACD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,qFAAqF,EAAE,CAAC;YAC5H,CAAC;YACD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,yBAAyB,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClI,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC;oBAC9E,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,KAAK,WAAW,EAAE,KAAK,IAAI,SAAS,IAAI,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,kBAAkB,wGAAwG,EAAE,CAAC;YAC7K,CAAC;YACD,eAAe,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,gCAAgC,KAAK,8CAA8C;aAC9F,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,wCAAwC,EAAE,CAAC;YAC/E,CAAC;YACD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,CAAC,cAAc,IAAI,gBAAgB,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1F,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,KAAK,GAAG;gBACZ,uBAAuB;gBACvB,gBAAgB,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO;gBACxD,cAAc,YAAY,IAAI;gBAC9B,YAAY,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE;gBAClF,kBAAkB,WAAW,EAAE,gBAAgB,IAAI,SAAS,IAAI;gBAChE,UAAU,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;gBAChE,cAAc,CAAC,cAAc,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAChF,sBAAsB,CAAC,cAAc,EAAE,cAAc,IAAI,KAAK,EAAE,cAAc,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,EAAE;aACvI,CAAC;YACF,wDAAwD;YACxD,IAAI,gBAAgB,EAAE,yBAAyB,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzG,MAAM,OAAO,GAAG,cAAc,EAAE,eAAe,IAAI,gBAAgB,CAAC,sBAAsB,IAAI,SAAS,CAAC;gBACxG,KAAK,CAAC,IAAI,CAAC,4BAA4B,OAAO,iBAAiB,gBAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3H,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,2DAA2D,EAAE,CAAC;YAClG,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,kBAAkB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QAC5F,CAAC;QAED,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAEvE,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAElE,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,cAAc,EAAE,cAAc,IAAI,KAAK,EAAE,cAAc,IAAI,aAAa,CAAC;YACzF,MAAM,OAAO,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;YACtE,eAAe,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,OAAO,KAAK,WAAW;oBAC/B,CAAC,CAAC,2DAA2D;oBAC7D,CAAC,CAAC,+DAA+D;aACpE,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACpD,CAAC;YACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,2BAA2B;gBAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;YACjF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,+BAA+B,EAAE,CAAC;YACtE,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC7D,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC;YACjF,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,KAAK,MAAM,CAAC,IAAI,WAAW;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,gBAAgB;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC9C,KAAK,MAAM,CAAC,IAAI,eAAe;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,eAAe,CAAC;QACrB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3E,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,QAAQ;oBAChB,CAAC,CAAC,wEAAwE;oBAC1E,CAAC,CAAC,qDAAqD;aAC1D,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAE7E,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;YAC5D,MAAM,MAAM,GAAG;gBACb,cAAc;gBACd,8BAA8B;gBAC9B,iCAAiC;gBACjC,yCAAyC;gBACzC,+BAA+B;gBAC/B,wCAAwC;gBACxC,0CAA0C;gBAC1C,yCAAyC;gBACzC,yCAAyC;gBACzC,iDAAiD;gBACjD,iCAAiC;aAClC,CAAC;YACF,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE;oBACR,kBAAkB;oBAClB,EAAE;oBACF,aAAa;oBACb,8BAA8B;oBAC9B,oDAAoD;oBACpD,mEAAmE;oBACnE,2CAA2C;oBAC3C,+DAA+D;oBAC/D,6DAA6D;oBAC7D,2DAA2D;oBAC3D,qEAAqE;oBACrE,wCAAwC;oBACxC,0CAA0C;oBAC1C,+BAA+B;oBAC/B,EAAE;oBACF,iBAAiB;oBACjB,kDAAkD;oBAClD,8CAA8C;oBAC9C,sCAAsC;oBACtC,uDAAuD;oBACvD,0DAA0D;oBAC1D,EAAE;oBACF,gBAAgB;oBAChB,2EAA2E;oBAC3E,mDAAmD;oBACnD,wDAAwD;oBACxD,8DAA8D;oBAC9D,EAAE;oBACF,kBAAkB;oBAClB,iDAAiD;oBACjD,4CAA4C;oBAC5C,kDAAkD;oBAClD,gCAAgC;iBACjC,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;QACJ,CAAC;QAED;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ /** Number of identical tool calls within the window before flagging a loop. */
2
+ export declare const MAX_IDENTICAL_CALLS = 5;
3
+ /** Only count calls within this time window (ms). */
4
+ export declare const WINDOW_MS = 60000;
5
+ /** Maximum tool call entries to keep per channel. */
6
+ export declare const MAX_HISTORY = 50;
7
+ /**
8
+ * Multiplier applied to MAX_IDENTICAL_CALLS. When the count reaches this
9
+ * threshold, the loop is considered critical and the session should be destroyed.
10
+ */
11
+ export declare const CRITICAL_MULTIPLIER = 2;
12
+ export interface LoopDetectionResult {
13
+ isLoop: boolean;
14
+ count: number;
15
+ /** True when count >= MAX_IDENTICAL_CALLS * CRITICAL_MULTIPLIER */
16
+ isCritical: boolean;
17
+ }
18
+ /**
19
+ * Tracks recent tool calls per channel and detects when the same tool is
20
+ * called with identical arguments repeatedly -- a sign the agent is stuck.
21
+ */
22
+ export declare class LoopDetector {
23
+ private history;
24
+ /**
25
+ * Record a tool call and check for loops.
26
+ *
27
+ * @returns Detection result indicating whether a loop (or critical loop) was found.
28
+ */
29
+ recordToolCall(channelId: string, toolName: string, args: unknown): LoopDetectionResult;
30
+ /** Clear all history for a channel (e.g., on /new or session change). */
31
+ reset(channelId: string): void;
32
+ /** Remove entries outside the time window and cap to MAX_HISTORY. */
33
+ private cleanup;
34
+ /** Produce a deterministic hash for a tool name + arguments pair. */
35
+ private hashCall;
36
+ }
37
+ //# sourceMappingURL=loop-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-detector.d.ts","sourceRoot":"","sources":["../../src/core/loop-detector.ts"],"names":[],"mappings":"AAKA,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,qDAAqD;AACrD,eAAO,MAAM,SAAS,QAAS,CAAC;AAEhC,qDAAqD;AACrD,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAOrC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAiC;IAEhD;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,mBAAmB;IA8BvF,yEAAyE;IACzE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9B,qEAAqE;IACrE,OAAO,CAAC,OAAO;IAmBf,qEAAqE;IACrE,OAAO,CAAC,QAAQ;CAIjB"}
@@ -0,0 +1,95 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { createLogger } from '../logger.js';
3
+ const log = createLogger('loop-detector');
4
+ /** Number of identical tool calls within the window before flagging a loop. */
5
+ export const MAX_IDENTICAL_CALLS = 5;
6
+ /** Only count calls within this time window (ms). */
7
+ export const WINDOW_MS = 60_000;
8
+ /** Maximum tool call entries to keep per channel. */
9
+ export const MAX_HISTORY = 50;
10
+ /**
11
+ * Multiplier applied to MAX_IDENTICAL_CALLS. When the count reaches this
12
+ * threshold, the loop is considered critical and the session should be destroyed.
13
+ */
14
+ export const CRITICAL_MULTIPLIER = 2;
15
+ /**
16
+ * Tracks recent tool calls per channel and detects when the same tool is
17
+ * called with identical arguments repeatedly -- a sign the agent is stuck.
18
+ */
19
+ export class LoopDetector {
20
+ history = new Map();
21
+ /**
22
+ * Record a tool call and check for loops.
23
+ *
24
+ * @returns Detection result indicating whether a loop (or critical loop) was found.
25
+ */
26
+ recordToolCall(channelId, toolName, args) {
27
+ const hash = this.hashCall(toolName, args);
28
+ const now = Date.now();
29
+ let calls = this.history.get(channelId);
30
+ if (!calls) {
31
+ calls = [];
32
+ this.history.set(channelId, calls);
33
+ }
34
+ calls.push({ argsHash: hash, timestamp: now });
35
+ this.cleanup(channelId);
36
+ // Re-read after cleanup (cleanup may replace the array)
37
+ const current = this.history.get(channelId) ?? [];
38
+ const count = current.filter(c => c.argsHash === hash).length;
39
+ const isLoop = count >= MAX_IDENTICAL_CALLS;
40
+ const isCritical = count >= MAX_IDENTICAL_CALLS * CRITICAL_MULTIPLIER;
41
+ if (isLoop) {
42
+ log.warn(`Loop detected on channel ${channelId.slice(0, 8)}...: ` +
43
+ `tool="${toolName}" called ${count} times` +
44
+ (isCritical ? ' (CRITICAL)' : ''));
45
+ }
46
+ return { isLoop, count, isCritical };
47
+ }
48
+ /** Clear all history for a channel (e.g., on /new or session change). */
49
+ reset(channelId) {
50
+ this.history.delete(channelId);
51
+ }
52
+ /** Remove entries outside the time window and cap to MAX_HISTORY. */
53
+ cleanup(channelId) {
54
+ const calls = this.history.get(channelId);
55
+ if (!calls)
56
+ return;
57
+ const cutoff = Date.now() - WINDOW_MS;
58
+ const filtered = calls.filter(c => c.timestamp >= cutoff);
59
+ // Cap total entries to prevent unbounded growth
60
+ if (filtered.length > MAX_HISTORY) {
61
+ filtered.splice(0, filtered.length - MAX_HISTORY);
62
+ }
63
+ if (filtered.length === 0) {
64
+ this.history.delete(channelId);
65
+ }
66
+ else {
67
+ this.history.set(channelId, filtered);
68
+ }
69
+ }
70
+ /** Produce a deterministic hash for a tool name + arguments pair. */
71
+ hashCall(toolName, args) {
72
+ const payload = toolName + '\0' + stableStringify(args);
73
+ return createHash('sha256').update(payload).digest('hex').slice(0, 16);
74
+ }
75
+ }
76
+ /**
77
+ * Canonical JSON.stringify with sorted object keys so equivalent objects hash
78
+ * identically regardless of property insertion order, while preserving
79
+ * proper JSON quoting and escaping for all values.
80
+ */
81
+ function stableStringify(value) {
82
+ const json = JSON.stringify(value, (_key, val) => {
83
+ if (val && typeof val === 'object' && !Array.isArray(val)) {
84
+ const obj = val;
85
+ const sorted = {};
86
+ for (const key of Object.keys(obj).sort()) {
87
+ sorted[key] = obj[key];
88
+ }
89
+ return sorted;
90
+ }
91
+ return val;
92
+ });
93
+ return json === undefined ? 'undefined' : json;
94
+ }
95
+ //# sourceMappingURL=loop-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-detector.js","sourceRoot":"","sources":["../../src/core/loop-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface ParsedModel {
2
+ provider: string;
3
+ family: string;
4
+ version: string;
5
+ variant?: string;
6
+ raw: string;
7
+ }
8
+ /**
9
+ * Parse a model ID into its component parts.
10
+ *
11
+ * Known patterns:
12
+ * - `claude-{family}-{version}[-{variant}]` e.g. claude-opus-4.6, claude-sonnet-4.5
13
+ * - `gpt-{version}[-{family}][-{variant}]` e.g. gpt-5.4, gpt-5.3-codex, gpt-5.1-codex-max
14
+ * - `gemini-{version}-{family}[-{variant}]` e.g. gemini-2.5-pro
15
+ * - `o{version}[-{variant}]` e.g. o3, o4-mini
16
+ */
17
+ export declare function parseModelId(id: string): ParsedModel;
18
+ /**
19
+ * Get an ordered fallback chain for a model, filtered to only available models.
20
+ *
21
+ * Strategy:
22
+ * 1. Check static fallback map for explicit chain
23
+ * 2. Filter to models that are actually available
24
+ * 3. Append generic same-provider+family fallbacks not already in the static chain
25
+ * 4. Deduplicate while preserving order
26
+ */
27
+ export declare function getFallbackChain(modelId: string, availableModels: string[]): string[];
28
+ /**
29
+ * Detect whether an error is model-specific (capacity, not found, rate limit)
30
+ * rather than a general infrastructure or auth error.
31
+ */
32
+ export declare function isModelError(error: any): boolean;
33
+ /**
34
+ * Build a merged fallback chain from config overrides and auto-detected fallbacks.
35
+ * Config fallbacks take priority; auto-detected ones fill in any gaps.
36
+ * When availableModels is empty (e.g., listModels() failed), config fallbacks
37
+ * are included unfiltered so they still get attempted.
38
+ */
39
+ export declare function buildFallbackChain(primaryModel: string, availableModels: string[], configFallbacks?: string[]): string[];
40
+ /**
41
+ * Attempt an action with automatic model fallback.
42
+ *
43
+ * Tries the primary model first. If a model-specific error occurs, tries each
44
+ * fallback model in order. Returns the result and the model that succeeded.
45
+ *
46
+ * @param primaryModel - The preferred model ID
47
+ * @param availableModels - All models available from listModels()
48
+ * @param configFallbacks - Optional explicit fallback list from user config
49
+ * @param action - Async action to attempt; receives the model ID to use
50
+ * @returns Object with the action result and the model that worked
51
+ */
52
+ export declare function tryWithFallback<T>(primaryModel: string, availableModels: string[], configFallbacks: string[] | undefined, action: (model: string) => Promise<T>): Promise<{
53
+ result: T;
54
+ usedModel: string;
55
+ didFallback: boolean;
56
+ }>;
57
+ //# sourceMappingURL=model-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-fallback.d.ts","sourceRoot":"","sources":["../../src/core/model-fallback.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AA8CD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAgEpD;AAqDD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwBrF;AAsBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAiBhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,MAAM,EAAE,CAgBV;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,EACrC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAqCjE"}
@@ -0,0 +1,294 @@
1
+ import { createLogger } from '../logger.js';
2
+ const log = createLogger('model-fallback');
3
+ // ---------------------------------------------------------------------------
4
+ // Static fallback map — explicit chains for known models
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Ordered fallback chains for known model IDs.
8
+ * Each entry maps a model to its preferred fallbacks (best alternative first).
9
+ * Only includes models where the automatic parser might not produce ideal results.
10
+ */
11
+ const STATIC_FALLBACK_MAP = {
12
+ // Claude Opus family
13
+ 'claude-opus-4.6': ['claude-opus-4.5', 'claude-sonnet-4.6', 'claude-sonnet-4.5'],
14
+ 'claude-opus-4.5': ['claude-opus-4.6', 'claude-sonnet-4.6', 'claude-sonnet-4.5'],
15
+ // Claude Sonnet family
16
+ 'claude-sonnet-4.6': ['claude-sonnet-4.5', 'claude-haiku-4.5'],
17
+ 'claude-sonnet-4.5': ['claude-sonnet-4.6', 'claude-haiku-4.5'],
18
+ // Claude Haiku — cheapest Claude, fall through to sonnet
19
+ 'claude-haiku-4.5': ['claude-sonnet-4.5', 'claude-sonnet-4.6'],
20
+ // GPT main family
21
+ 'gpt-5.4': ['gpt-5.2', 'gpt-5.1'],
22
+ 'gpt-5.2': ['gpt-5.1', 'gpt-5.4'],
23
+ 'gpt-5.1': ['gpt-5.2', 'gpt-5.4'],
24
+ 'gpt-5-mini': ['gpt-5.1', 'gpt-5.2'],
25
+ // GPT Codex family
26
+ 'gpt-5.3-codex': ['gpt-5.2-codex', 'gpt-5.1-codex-max'],
27
+ 'gpt-5.2-codex': ['gpt-5.1-codex-max', 'gpt-5.3-codex'],
28
+ 'gpt-5.1-codex-max': ['gpt-5.2-codex', 'gpt-5.3-codex'],
29
+ // GPT-4.1 (older)
30
+ 'gpt-4.1': ['gpt-5-mini', 'gpt-5.1'],
31
+ // o-series (reasoning models)
32
+ 'o3': ['o4-mini', 'gpt-5.4'],
33
+ 'o4-mini': ['o3', 'gpt-5-mini'],
34
+ };
35
+ // ---------------------------------------------------------------------------
36
+ // Model ID parser
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Parse a model ID into its component parts.
40
+ *
41
+ * Known patterns:
42
+ * - `claude-{family}-{version}[-{variant}]` e.g. claude-opus-4.6, claude-sonnet-4.5
43
+ * - `gpt-{version}[-{family}][-{variant}]` e.g. gpt-5.4, gpt-5.3-codex, gpt-5.1-codex-max
44
+ * - `gemini-{version}-{family}[-{variant}]` e.g. gemini-2.5-pro
45
+ * - `o{version}[-{variant}]` e.g. o3, o4-mini
46
+ */
47
+ export function parseModelId(id) {
48
+ const lower = id.toLowerCase();
49
+ // Claude: claude-{family}-{version}[-variant]
50
+ const claudeMatch = lower.match(/^claude-(\w+)-(\d+(?:\.\d+)?)(?:-(.+))?$/);
51
+ if (claudeMatch) {
52
+ return {
53
+ provider: 'claude',
54
+ family: claudeMatch[1],
55
+ version: claudeMatch[2],
56
+ variant: claudeMatch[3],
57
+ raw: id,
58
+ };
59
+ }
60
+ // GPT: gpt-{version}[-family][-variant]
61
+ // e.g. gpt-5.4, gpt-5.3-codex, gpt-5.1-codex-max, gpt-5-mini, gpt-4.1
62
+ const gptMatch = lower.match(/^gpt-(\d+(?:\.\d+)?)(?:-(\w+))?(?:-(\w+))?$/);
63
+ if (gptMatch) {
64
+ const version = gptMatch[1];
65
+ const second = gptMatch[2]; // could be family (codex) or variant (mini)
66
+ const third = gptMatch[3]; // variant if second is family
67
+ // Distinguish: "gpt-5-mini" (family='', variant='mini') vs "gpt-5.3-codex" (family='codex')
68
+ const knownFamilies = ['codex'];
69
+ let family = '';
70
+ let variant;
71
+ if (second && knownFamilies.includes(second)) {
72
+ family = second;
73
+ variant = third;
74
+ }
75
+ else if (second) {
76
+ variant = third ? `${second}-${third}` : second;
77
+ }
78
+ return { provider: 'gpt', family, version, variant, raw: id };
79
+ }
80
+ // Gemini: gemini-{version}-{family}[-variant]
81
+ const geminiMatch = lower.match(/^gemini-(\d+(?:\.\d+)?)-(\w+)(?:-(.+))?$/);
82
+ if (geminiMatch) {
83
+ return {
84
+ provider: 'gemini',
85
+ family: geminiMatch[2],
86
+ version: geminiMatch[1],
87
+ variant: geminiMatch[3],
88
+ raw: id,
89
+ };
90
+ }
91
+ // o-series: o{version}[-variant]
92
+ const oMatch = lower.match(/^o(\d+)(?:-(.+))?$/);
93
+ if (oMatch) {
94
+ return {
95
+ provider: 'o',
96
+ family: '',
97
+ version: oMatch[1],
98
+ variant: oMatch[2],
99
+ raw: id,
100
+ };
101
+ }
102
+ // Unknown model — best-effort parse
103
+ return { provider: 'unknown', family: '', version: '', raw: id };
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // Generic fallback strategy
107
+ // ---------------------------------------------------------------------------
108
+ /** Compare two version strings segment by segment (e.g. "4.10" > "4.9"). */
109
+ function compareVersions(a, b) {
110
+ const partsA = a.split('.').map(Number);
111
+ const partsB = b.split('.').map(Number);
112
+ const len = Math.max(partsA.length, partsB.length);
113
+ for (let i = 0; i < len; i++) {
114
+ const va = partsA[i] ?? 0;
115
+ const vb = partsB[i] ?? 0;
116
+ if (va !== vb)
117
+ return va - vb;
118
+ }
119
+ return 0;
120
+ }
121
+ /**
122
+ * Build a generic fallback chain for a model based on parsed fields.
123
+ * Finds models from the same provider+family, sorted by descending version,
124
+ * excluding the original model.
125
+ */
126
+ function buildGenericFallback(parsed, availableModels) {
127
+ if (parsed.provider === 'unknown')
128
+ return [];
129
+ const candidates = [];
130
+ for (const id of availableModels) {
131
+ if (id === parsed.raw)
132
+ continue;
133
+ const p = parseModelId(id);
134
+ if (p.provider === parsed.provider && p.family === parsed.family) {
135
+ candidates.push({ id, parsed: p });
136
+ }
137
+ }
138
+ // Sort by version descending (prefer higher versions as they're more capable)
139
+ candidates.sort((a, b) => {
140
+ const cmp = compareVersions(b.parsed.version, a.parsed.version);
141
+ if (cmp !== 0)
142
+ return cmp;
143
+ // Prefer no-variant over variant (base model over specialized)
144
+ if (!a.parsed.variant && b.parsed.variant)
145
+ return -1;
146
+ if (a.parsed.variant && !b.parsed.variant)
147
+ return 1;
148
+ return 0;
149
+ });
150
+ return candidates.map(c => c.id);
151
+ }
152
+ // ---------------------------------------------------------------------------
153
+ // Public API
154
+ // ---------------------------------------------------------------------------
155
+ /**
156
+ * Get an ordered fallback chain for a model, filtered to only available models.
157
+ *
158
+ * Strategy:
159
+ * 1. Check static fallback map for explicit chain
160
+ * 2. Filter to models that are actually available
161
+ * 3. Append generic same-provider+family fallbacks not already in the static chain
162
+ * 4. Deduplicate while preserving order
163
+ */
164
+ export function getFallbackChain(modelId, availableModels) {
165
+ const availableSet = new Set(availableModels);
166
+ const seen = new Set();
167
+ const chain = [];
168
+ const addIfAvailable = (id) => {
169
+ if (id !== modelId && availableSet.has(id) && !seen.has(id)) {
170
+ seen.add(id);
171
+ chain.push(id);
172
+ }
173
+ };
174
+ // Static fallbacks first (explicit, curated order)
175
+ const staticChain = STATIC_FALLBACK_MAP[modelId];
176
+ if (staticChain) {
177
+ for (const id of staticChain)
178
+ addIfAvailable(id);
179
+ }
180
+ // Generic fallbacks for anything not already covered
181
+ const parsed = parseModelId(modelId);
182
+ const generic = buildGenericFallback(parsed, availableModels);
183
+ for (const id of generic)
184
+ addIfAvailable(id);
185
+ return chain;
186
+ }
187
+ // ---------------------------------------------------------------------------
188
+ // Error detection
189
+ // ---------------------------------------------------------------------------
190
+ /** Patterns in error messages that indicate a model-specific (capacity/availability) issue. */
191
+ const MODEL_ERROR_PATTERNS = [
192
+ /model.*capacity/i,
193
+ /model.*(overloaded|over\s*loaded)/i,
194
+ /model.*(not\s+found|not\s+available|unavailable|does\s+not\s+exist)/i,
195
+ /rate\s*limit/i,
196
+ /too\s+many\s+requests/i,
197
+ /resource\s+exhausted/i,
198
+ /model.*temporarily\s+unavailable/i,
199
+ /quota\s+exceeded/i,
200
+ /model\s+is\s+(currently\s+)?(unavailable|overloaded|at\s+capacity)/i,
201
+ ];
202
+ /** HTTP status codes that typically indicate model-level issues. */
203
+ const MODEL_ERROR_CODES = new Set([429, 503]);
204
+ /**
205
+ * Detect whether an error is model-specific (capacity, not found, rate limit)
206
+ * rather than a general infrastructure or auth error.
207
+ */
208
+ export function isModelError(error) {
209
+ if (!error)
210
+ return false;
211
+ // Check HTTP status codes
212
+ const status = error.status ?? error.statusCode;
213
+ if (typeof status === 'number' && MODEL_ERROR_CODES.has(status)) {
214
+ return true;
215
+ }
216
+ // Some HTTP libraries store status as a string code — try parsing
217
+ const code = error.code;
218
+ if (typeof code === 'number' && MODEL_ERROR_CODES.has(code)) {
219
+ return true;
220
+ }
221
+ // Check error message patterns
222
+ const message = String(error.message ?? error.reason ?? error ?? '');
223
+ return MODEL_ERROR_PATTERNS.some(pattern => pattern.test(message));
224
+ }
225
+ /**
226
+ * Build a merged fallback chain from config overrides and auto-detected fallbacks.
227
+ * Config fallbacks take priority; auto-detected ones fill in any gaps.
228
+ * When availableModels is empty (e.g., listModels() failed), config fallbacks
229
+ * are included unfiltered so they still get attempted.
230
+ */
231
+ export function buildFallbackChain(primaryModel, availableModels, configFallbacks) {
232
+ const hasAvailability = availableModels.length > 0;
233
+ const availableSet = new Set(availableModels);
234
+ const autoChain = hasAvailability ? getFallbackChain(primaryModel, availableModels) : [];
235
+ if (configFallbacks && configFallbacks.length > 0) {
236
+ const configSet = new Set(configFallbacks);
237
+ const filtered = hasAvailability
238
+ ? configFallbacks.filter(m => m !== primaryModel && availableSet.has(m))
239
+ : configFallbacks.filter(m => m !== primaryModel);
240
+ return [
241
+ ...filtered,
242
+ ...autoChain.filter(m => !configSet.has(m)),
243
+ ];
244
+ }
245
+ return autoChain;
246
+ }
247
+ /**
248
+ * Attempt an action with automatic model fallback.
249
+ *
250
+ * Tries the primary model first. If a model-specific error occurs, tries each
251
+ * fallback model in order. Returns the result and the model that succeeded.
252
+ *
253
+ * @param primaryModel - The preferred model ID
254
+ * @param availableModels - All models available from listModels()
255
+ * @param configFallbacks - Optional explicit fallback list from user config
256
+ * @param action - Async action to attempt; receives the model ID to use
257
+ * @returns Object with the action result and the model that worked
258
+ */
259
+ export async function tryWithFallback(primaryModel, availableModels, configFallbacks, action) {
260
+ // Try primary model first
261
+ try {
262
+ const result = await action(primaryModel);
263
+ return { result, usedModel: primaryModel, didFallback: false };
264
+ }
265
+ catch (err) {
266
+ if (!isModelError(err)) {
267
+ throw err; // Not a model error — don't try fallbacks
268
+ }
269
+ log.warn(`Model "${primaryModel}" failed: ${err.message ?? err}. Trying fallbacks...`);
270
+ const chain = buildFallbackChain(primaryModel, availableModels, configFallbacks);
271
+ if (chain.length === 0) {
272
+ log.error(`No fallback models available for "${primaryModel}"`);
273
+ throw err;
274
+ }
275
+ log.info(`Fallback chain for "${primaryModel}": ${chain.join(' → ')}`);
276
+ // Try each fallback
277
+ let lastError = err;
278
+ for (const fallbackModel of chain) {
279
+ try {
280
+ log.info(`Trying fallback model "${fallbackModel}"...`);
281
+ const result = await action(fallbackModel);
282
+ log.info(`Fallback to "${fallbackModel}" succeeded`);
283
+ return { result, usedModel: fallbackModel, didFallback: true };
284
+ }
285
+ catch (fallbackErr) {
286
+ log.warn(`Fallback model "${fallbackModel}" also failed: ${fallbackErr.message ?? fallbackErr}`);
287
+ lastError = fallbackErr;
288
+ }
289
+ }
290
+ log.error(`All fallback models exhausted for "${primaryModel}"`);
291
+ throw lastError;
292
+ }
293
+ }
294
+ //# sourceMappingURL=model-fallback.js.map