@meetquinn/animactl 0.1.24 → 0.1.25-canary.581.1.e8a3442

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 (122) hide show
  1. package/dist/server/providers/claude-launch.d.ts.map +1 -1
  2. package/dist/server/providers/claude-launch.js +0 -1
  3. package/dist/server/runtime/host.d.ts +2 -0
  4. package/dist/server/runtime/host.d.ts.map +1 -1
  5. package/dist/server/runtime/host.js +10 -5
  6. package/dist/server/runtime/team-run-limiter.d.ts +4 -1
  7. package/dist/server/runtime/team-run-limiter.d.ts.map +1 -1
  8. package/dist/server/runtime/team-run-limiter.js +28 -15
  9. package/dist/server/settings/settings.service.d.ts +1 -0
  10. package/dist/server/settings/settings.service.d.ts.map +1 -1
  11. package/dist/server/settings/settings.service.js +5 -0
  12. package/dist/server/storage/schema/server.store.d.ts +3 -0
  13. package/dist/server/storage/schema/server.store.d.ts.map +1 -1
  14. package/dist/server/storage/schema/server.store.js +2 -1
  15. package/dist/server/tests/agent-runtime-claude.test.js +1 -1
  16. package/dist/server/tests/provider-launch.test.js +1 -3
  17. package/dist/server/tests/runtime-host-config-watch.test.js +6 -6
  18. package/dist/server/tests/runtime.test.js +7 -0
  19. package/dist/server/tests/team-run-limit.test.js +47 -1
  20. package/dist/shared/server-settings.d.ts +5 -0
  21. package/dist/shared/server-settings.d.ts.map +1 -1
  22. package/dist/shared/server-settings.js +4 -0
  23. package/dist/web/assets/{FileViewer-CXdEkKVq.js → FileViewer-TPfvZrnb.js} +3 -3
  24. package/dist/web/assets/{SlackTimeline-BOlwJD0-.js → SlackTimeline-DUo1WVd6.js} +1 -1
  25. package/dist/web/assets/{activity-DOJe1kqX.js → activity-CiUqNITH.js} +1 -1
  26. package/dist/web/assets/{arc-DYQNMglw.js → arc-BNZD_YFR.js} +1 -1
  27. package/dist/web/assets/architecture-7EHR7CIX-3aUq5j6N.js +1 -0
  28. package/dist/web/assets/{architectureDiagram-3BPJPVTR-DJ50eYB7.js → architectureDiagram-3BPJPVTR-bvq0_4ZO.js} +1 -1
  29. package/dist/web/assets/{blockDiagram-GPEHLZMM-B7r99Fxg.js → blockDiagram-GPEHLZMM-BwxkuVwH.js} +1 -1
  30. package/dist/web/assets/{c4Diagram-AAUBKEIU-TOoJ2NXr.js → c4Diagram-AAUBKEIU-BNqYM92P.js} +1 -1
  31. package/dist/web/assets/channel-B_kvug5l.js +1 -0
  32. package/dist/web/assets/{channels-DWw4ECY0.js → channels-XmCxVpzf.js} +1 -1
  33. package/dist/web/assets/{chunk-2J33WTMH-Blwg8Yar.js → chunk-2J33WTMH-DMbLdLNy.js} +1 -1
  34. package/dist/web/assets/{chunk-3OPIFGDE-CMj2Nr-H.js → chunk-3OPIFGDE-1MxryAFP.js} +1 -1
  35. package/dist/web/assets/{chunk-4BX2VUAB-DCI6BMot.js → chunk-4BX2VUAB-BNH5AZQT.js} +1 -1
  36. package/dist/web/assets/{chunk-55IACEB6-Cl0DfZ7H.js → chunk-55IACEB6-B-59QlZP.js} +1 -1
  37. package/dist/web/assets/{chunk-5ZQYHXKU--biCKcs-.js → chunk-5ZQYHXKU-Tf9HfIJ0.js} +1 -1
  38. package/dist/web/assets/{chunk-727SXJPM-BBcB-yi7.js → chunk-727SXJPM-C3d78Z_B.js} +1 -1
  39. package/dist/web/assets/{chunk-AQP2D5EJ-CYWsmQhD.js → chunk-AQP2D5EJ-Ci08ey2B.js} +1 -1
  40. package/dist/web/assets/{chunk-BSJP7CBP-CDcjNL5d.js → chunk-BSJP7CBP-CCNVhtnu.js} +1 -1
  41. package/dist/web/assets/{chunk-CSCIHK7Q-BKvyIahu.js → chunk-CSCIHK7Q-wpRaAjqP.js} +3 -3
  42. package/dist/web/assets/{chunk-FMBD7UC4-DB-edqpK.js → chunk-FMBD7UC4-CsR7WS0q.js} +1 -1
  43. package/dist/web/assets/{chunk-KSCS5N6A-DqeIk4cv.js → chunk-KSCS5N6A-CnqSebF1.js} +1 -1
  44. package/dist/web/assets/{chunk-L5ZTLDWV-DtAqG3hv.js → chunk-L5ZTLDWV-D9BfYn_C.js} +1 -1
  45. package/dist/web/assets/{chunk-LZXEDZCA-Rkh6ZzKZ.js → chunk-LZXEDZCA-MRLesqam.js} +2 -2
  46. package/dist/web/assets/{chunk-ND2GUHAM-qAtvbPSq.js → chunk-ND2GUHAM-D9r7vhbv.js} +1 -1
  47. package/dist/web/assets/{chunk-NZK2D7GU-CheI0xa1.js → chunk-NZK2D7GU-C1CM7Ic7.js} +1 -1
  48. package/dist/web/assets/{chunk-O5CBEL6O-CMT0kWy8.js → chunk-O5CBEL6O-BSfYcV1W.js} +1 -1
  49. package/dist/web/assets/chunk-QZHKN3VN-D3Ii3s_Z.js +1 -0
  50. package/dist/web/assets/chunk-WU5MYG2G-BuNKLmrl.js +1 -0
  51. package/dist/web/assets/{chunk-XPW4576I-k7WRIZH5.js → chunk-XPW4576I-CuJN0sUZ.js} +1 -1
  52. package/dist/web/assets/classDiagram-4FO5ZUOK-BZv0FM0b.js +1 -0
  53. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BZv0FM0b.js +1 -0
  54. package/dist/web/assets/{cose-bilkent-S5V4N54A-CM_GXECe.js → cose-bilkent-S5V4N54A-mqMAVjKd.js} +1 -1
  55. package/dist/web/assets/{dagre-BM42HDAG-CFvo5erF.js → dagre-BM42HDAG-D_OfD8Fp.js} +1 -1
  56. package/dist/web/assets/{diagram-2AECGRRQ-CcP9axot.js → diagram-2AECGRRQ-CNdKRwfZ.js} +1 -1
  57. package/dist/web/assets/{diagram-5GNKFQAL-DotXn8Il.js → diagram-5GNKFQAL-L2b61NXU.js} +1 -1
  58. package/dist/web/assets/{diagram-KO2AKTUF-CM5xsnra.js → diagram-KO2AKTUF-kuGtVLw6.js} +1 -1
  59. package/dist/web/assets/{diagram-LMA3HP47-DYyK7_1V.js → diagram-LMA3HP47-DGJkHaph.js} +1 -1
  60. package/dist/web/assets/{diagram-OG6HWLK6-DPED3ZA-.js → diagram-OG6HWLK6-_bGTXtwh.js} +1 -1
  61. package/dist/web/assets/{dist-CbQqGki_.js → dist-BvXkNHai.js} +1 -1
  62. package/dist/web/assets/{erDiagram-TEJ5UH35-MOKpIBpS.js → erDiagram-TEJ5UH35-CsHmBO4h.js} +1 -1
  63. package/dist/web/assets/eventmodeling-FCH6USID-DH2WRGBO.js +1 -0
  64. package/dist/web/assets/{files-BNwWA0v3.js → files-Dvsp5e42.js} +1 -1
  65. package/dist/web/assets/{flowDiagram-I6XJVG4X-CdiqaMRu.js → flowDiagram-I6XJVG4X-C2XABCYp.js} +1 -1
  66. package/dist/web/assets/{ganttDiagram-6RSMTGT7-Ctx5ukTo.js → ganttDiagram-6RSMTGT7-BMJtaYCG.js} +1 -1
  67. package/dist/web/assets/gitGraph-WXDBUCRP-DoTFLDn4.js +1 -0
  68. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-BmVVHlwL.js → gitGraphDiagram-PVQCEYII--dCnu_Xt.js} +1 -1
  69. package/dist/web/assets/{index-D1puqLA5.js → index-DihOwoop.js} +3 -3
  70. package/dist/web/assets/info-J43DQDTF-DbduBHqG.js +1 -0
  71. package/dist/web/assets/{infoDiagram-5YYISTIA-BoU6DNXg.js → infoDiagram-5YYISTIA-0YbnyiIE.js} +1 -1
  72. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-AFWdo0je.js → ishikawaDiagram-YF4QCWOH-NRxZJzG6.js} +1 -1
  73. package/dist/web/assets/{journeyDiagram-JHISSGLW-Dx4QRaQn.js → journeyDiagram-JHISSGLW-CNaY5tZl.js} +1 -1
  74. package/dist/web/assets/{kanban-definition-UN3LZRKU-0TKL_pub.js → kanban-definition-UN3LZRKU-C4SOaRYG.js} +1 -1
  75. package/dist/web/assets/{kb-bBC78aN-.js → kb-CGtRhRrz.js} +1 -1
  76. package/dist/web/assets/{lightbulb-DQAX7Imn.js → lightbulb-C0Do_7WV.js} +1 -1
  77. package/dist/web/assets/{line-DlHKVCmL.js → line-D2GROkaA.js} +1 -1
  78. package/dist/web/assets/{linear-Clb_TpRO.js → linear-zcPQmTdO.js} +1 -1
  79. package/dist/web/assets/{login-Bv-IC5Fa.js → login-DnItmS9c.js} +1 -1
  80. package/dist/web/assets/{mermaid-parser.core-BqxPWFAv.js → mermaid-parser.core-xCah7r3M.js} +2 -2
  81. package/dist/web/assets/{mermaid.core-BIIkEC5s.js → mermaid.core-BuF6DZFs.js} +3 -3
  82. package/dist/web/assets/{mindmap-definition-RKZ34NQL-BRi4ZDn3.js → mindmap-definition-RKZ34NQL-BroGpvqu.js} +1 -1
  83. package/dist/web/assets/packet-YPE3B663-D1FoYErn.js +1 -0
  84. package/dist/web/assets/pie-LRSECV5Y-BejNoj-A.js +1 -0
  85. package/dist/web/assets/{pieDiagram-4H26LBE5-DQ0vdP6f.js → pieDiagram-4H26LBE5-CCxMEgEd.js} +1 -1
  86. package/dist/web/assets/{profile-hQKhTChZ.js → profile-XN8O8GV2.js} +1 -1
  87. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-BVAzgzhw.js → quadrantDiagram-W4KKPZXB-C3gErjrT.js} +1 -1
  88. package/dist/web/assets/radar-GUYGQ44K-Ccsa8wwC.js +1 -0
  89. package/dist/web/assets/{reminders-CQFXuO5n.js → reminders-CtsellFF.js} +1 -1
  90. package/dist/web/assets/{requirementDiagram-4Y6WPE33-3pFkYxzm.js → requirementDiagram-4Y6WPE33-vI6_4txW.js} +1 -1
  91. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-MTIFrHjO.js → sankeyDiagram-5OEKKPKP-DGZwOmgD.js} +1 -1
  92. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-azho1KpP.js → sequenceDiagram-3UESZ5HK-ZjX6q687.js} +1 -1
  93. package/dist/web/assets/{src-BfilLRQJ.js → src-BDhZsKMY.js} +1 -1
  94. package/dist/web/assets/{stateDiagram-AJRCARHV-CloWMjxr.js → stateDiagram-AJRCARHV-Dtur1eu8.js} +1 -1
  95. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-B-vzW-gz.js +1 -0
  96. package/dist/web/assets/{timeline-definition-PNZ67QCA-DL45n_6J.js → timeline-definition-PNZ67QCA-CcdPO16h.js} +1 -1
  97. package/dist/web/assets/treeView-BLDUP644-pyaycCJF.js +1 -0
  98. package/dist/web/assets/treemap-LRROVOQU-C7LelJSG.js +1 -0
  99. package/dist/web/assets/{useInfiniteQuery-BY3oUlBQ.js → useInfiniteQuery-OFod0Kvk.js} +1 -1
  100. package/dist/web/assets/{vennDiagram-CIIHVFJN-Sf3BnLXb.js → vennDiagram-CIIHVFJN-jVnwB0zv.js} +1 -1
  101. package/dist/web/assets/wardley-L42UT6IY-Dj3AoCi9.js +1 -0
  102. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-D9bMXCp6.js → wardleyDiagram-YWT4CUSO-B0cft9A1.js} +1 -1
  103. package/dist/web/assets/{xychartDiagram-2RQKCTM6--ow2q1Fp.js → xychartDiagram-2RQKCTM6-BhHkg3lF.js} +1 -1
  104. package/dist/web/index.html +1 -1
  105. package/docs/architecture/overview.md +1 -1
  106. package/package.json +1 -1
  107. package/dist/web/assets/architecture-7EHR7CIX-6wVCUdkw.js +0 -1
  108. package/dist/web/assets/channel-Cpal_lJQ.js +0 -1
  109. package/dist/web/assets/chunk-QZHKN3VN-B6qvB28d.js +0 -1
  110. package/dist/web/assets/chunk-WU5MYG2G-CwiQCcXD.js +0 -1
  111. package/dist/web/assets/classDiagram-4FO5ZUOK-bInTwX6Q.js +0 -1
  112. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-bInTwX6Q.js +0 -1
  113. package/dist/web/assets/eventmodeling-FCH6USID-TciIP7ce.js +0 -1
  114. package/dist/web/assets/gitGraph-WXDBUCRP-Dao1yqCc.js +0 -1
  115. package/dist/web/assets/info-J43DQDTF-CUr6K45C.js +0 -1
  116. package/dist/web/assets/packet-YPE3B663-DrI9iLDC.js +0 -1
  117. package/dist/web/assets/pie-LRSECV5Y-BTqk28hE.js +0 -1
  118. package/dist/web/assets/radar-GUYGQ44K-D-mWJVl9.js +0 -1
  119. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-DZySAdor.js +0 -1
  120. package/dist/web/assets/treeView-BLDUP644-DnACBPm7.js +0 -1
  121. package/dist/web/assets/treemap-LRROVOQU-CLXOxd-D.js +0 -1
  122. package/dist/web/assets/wardley-L42UT6IY-Cm8hs-_J.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"claude-launch.d.ts","sourceRoot":"","sources":["../../../server/providers/claude-launch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAEtF,eAAO,MAAM,kCAAkC,SAAS,CAAC;AACzD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/F;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,6BAA6B,EACrC,oBAAoB,EAAE,MAAM,GAAG,SAAS,GACvC,MAAM,EAAE,CAUV;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC7C,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,sBAAsB,CAAC,GACtE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B"}
1
+ {"version":3,"file":"claude-launch.d.ts","sourceRoot":"","sources":["../../../server/providers/claude-launch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAEtF,eAAO,MAAM,kCAAkC,SAAS,CAAC;AACzD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/F;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,6BAA6B,EACrC,oBAAoB,EAAE,MAAM,GAAG,SAAS,GACvC,MAAM,EAAE,CASV;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC7C,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,GAAG,sBAAsB,CAAC,GACtE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B"}
@@ -20,7 +20,6 @@ export function claudeProviderEnv(config) {
20
20
  }
21
21
  export function claudeCommonArgs(config, systemPromptFilePath) {
22
22
  const args = [
23
- '--chrome',
24
23
  '--permission-mode', 'bypassPermissions',
25
24
  '--disallowedTools', CLAUDE_DISALLOWED_TOOLS.join(','),
26
25
  ];
@@ -22,6 +22,7 @@ export interface RuntimeHostDependencies {
22
22
  animaHome?: string;
23
23
  forceRestartTimeoutMs?: number;
24
24
  loadAgents?: (opts: RuntimeHostOptions) => Promise<AgentConfig[]>;
25
+ loadMaxConcurrentAgentRuns?: () => Promise<number>;
25
26
  loadProviderCommands?: () => Promise<ProviderRuntimeCommandsConfig>;
26
27
  ensureDefaultSkills?: () => Promise<void>;
27
28
  healthIntervalMs?: number;
@@ -40,6 +41,7 @@ export declare class RuntimeHost {
40
41
  private readonly agents;
41
42
  private readonly animaHome;
42
43
  private readonly loadAgents;
44
+ private readonly loadMaxConcurrentAgentRuns;
43
45
  private readonly loadProviderCommands;
44
46
  private readonly ensureDefaultSkills;
45
47
  private readonly logger;
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../server/runtime/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../server/runtime/host.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { createAgentRuntime } from '../providers/factory.js';
13
13
  import { isRestartDrainActive } from '../services/restart-drain.js';
14
14
  import { cacheDelete } from '../storage/json-file.js';
15
15
  import { ServerConfigStore } from '../storage/schema/server.store.js';
16
+ import { ServerSettingsService } from '../settings/settings.service.js';
16
17
  import { applyClaudeAccountToAgent, claudeAccountRuntimeFingerprint, } from '../provider-accounts/claude-account-config.js';
17
18
  import { agentSlackServiceForAgent } from '../agents/agent-slack.service.js';
18
19
  import { FEISHU_OPEN_API_BASE_URL, fetchFeishuTenantAccessToken, } from '../feishu/client.js';
@@ -45,6 +46,7 @@ export class RuntimeHost {
45
46
  agents = new Map();
46
47
  animaHome;
47
48
  loadAgents;
49
+ loadMaxConcurrentAgentRuns;
48
50
  loadProviderCommands;
49
51
  ensureDefaultSkills;
50
52
  logger;
@@ -71,10 +73,11 @@ export class RuntimeHost {
71
73
  this.opts = opts;
72
74
  this.animaHome = deps.animaHome ?? resolveAnimaHome();
73
75
  this.loadAgents = deps.loadAgents ?? loadRuntimeAgents;
74
- this.loadProviderCommands = deps.loadProviderCommands ?? (async () => {
75
- const config = await new ServerConfigStore(this.animaHome).read();
76
- return config.providerCommands ?? {};
77
- });
76
+ const settings = new ServerSettingsService(new ServerConfigStore(this.animaHome));
77
+ this.loadMaxConcurrentAgentRuns = deps.loadMaxConcurrentAgentRuns
78
+ ?? (() => settings.getMaxConcurrentAgentRuns());
79
+ this.loadProviderCommands = deps.loadProviderCommands
80
+ ?? (() => settings.getProviderRuntimeCommands());
78
81
  this.ensureDefaultSkills = deps.ensureDefaultSkills ?? (async () => {
79
82
  await ensureDefaultSkills();
80
83
  });
@@ -169,10 +172,12 @@ export class RuntimeHost {
169
172
  .sort();
170
173
  }
171
174
  async reconcileAgents() {
172
- const [agents, providerCommands] = await Promise.all([
175
+ const [agents, maxConcurrentAgentRuns, providerCommands] = await Promise.all([
173
176
  this.loadAgents(this.opts),
177
+ this.loadMaxConcurrentAgentRuns(),
174
178
  this.loadProviderCommands(),
175
179
  ]);
180
+ this.runLimiter.setLimit(maxConcurrentAgentRuns);
176
181
  await this.cleanupExpiredHandoffs(agents);
177
182
  await this.initializeBootHealth(agents);
178
183
  this.syncConfigWatchers(agents.map((agent) => agent.id));
@@ -1,11 +1,14 @@
1
1
  export declare const TEAM_ACTIVE_RUN_LIMIT = 5;
2
2
  type ReleaseRunSlot = () => void;
3
3
  export declare class TeamRunLimiter {
4
- private readonly limit;
5
4
  private activeRuns;
6
5
  private readonly waitingRuns;
6
+ private limit;
7
7
  constructor(limit?: number);
8
+ currentLimit(): number;
9
+ setLimit(limit: number): void;
8
10
  acquire(): Promise<ReleaseRunSlot>;
11
+ private admitWaitingRuns;
9
12
  private releaseOnce;
10
13
  }
11
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"team-run-limiter.d.ts","sourceRoot":"","sources":["../../../server/runtime/team-run-limiter.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,KAAK,cAAc,GAAG,MAAM,IAAI,CAAC;AAGjC,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;gBAEnB,KAAK,SAAwB;IAM1D,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAUlC,OAAO,CAAC,WAAW;CAapB"}
1
+ {"version":3,"file":"team-run-limiter.d.ts","sourceRoot":"","sources":["../../../server/runtime/team-run-limiter.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,IAAoC,CAAC;AAEvE,KAAK,cAAc,GAAG,MAAM,IAAI,CAAC;AAGjC,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,SAAwB;IAIzC,YAAY,IAAI,MAAM;IAItB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAOlC,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,WAAW;CASpB"}
@@ -1,35 +1,48 @@
1
- export const TEAM_ACTIVE_RUN_LIMIT = 5;
1
+ import { DEFAULT_MAX_CONCURRENT_AGENT_RUNS } from '../../shared/server-settings.js';
2
+ export const TEAM_ACTIVE_RUN_LIMIT = DEFAULT_MAX_CONCURRENT_AGENT_RUNS;
2
3
  export class TeamRunLimiter {
3
- limit;
4
4
  activeRuns = 0;
5
5
  waitingRuns = [];
6
+ limit;
6
7
  constructor(limit = TEAM_ACTIVE_RUN_LIMIT) {
7
- this.limit = limit;
8
- if (!Number.isInteger(limit) || limit < 1) {
9
- throw new Error(`Team run limit must be a positive integer, received ${limit}`);
10
- }
8
+ this.limit = validateLimit(limit);
9
+ }
10
+ currentLimit() {
11
+ return this.limit;
12
+ }
13
+ setLimit(limit) {
14
+ this.limit = validateLimit(limit);
15
+ this.admitWaitingRuns();
11
16
  }
12
17
  acquire() {
13
- if (this.activeRuns < this.limit) {
14
- this.activeRuns += 1;
15
- return Promise.resolve(this.releaseOnce());
16
- }
17
18
  return new Promise((resolve) => {
18
19
  this.waitingRuns.push(resolve);
20
+ this.admitWaitingRuns();
19
21
  });
20
22
  }
23
+ admitWaitingRuns() {
24
+ while (this.activeRuns < this.limit) {
25
+ const next = this.waitingRuns.shift();
26
+ if (!next)
27
+ return;
28
+ this.activeRuns += 1;
29
+ next(this.releaseOnce());
30
+ }
31
+ }
21
32
  releaseOnce() {
22
33
  let released = false;
23
34
  return () => {
24
35
  if (released)
25
36
  return;
26
37
  released = true;
27
- const next = this.waitingRuns.shift();
28
- if (next) {
29
- next(this.releaseOnce());
30
- return;
31
- }
32
38
  this.activeRuns -= 1;
39
+ this.admitWaitingRuns();
33
40
  };
34
41
  }
35
42
  }
43
+ function validateLimit(limit) {
44
+ if (!Number.isInteger(limit) || limit < 1) {
45
+ throw new Error(`Team run limit must be a positive integer, received ${limit}`);
46
+ }
47
+ return limit;
48
+ }
@@ -21,6 +21,7 @@ export declare class ServerSettingsService {
21
21
  getProviderAccounts(): Promise<ProviderAccountsConfig>;
22
22
  getProviderContextLimits(): Promise<ProviderContextLimitsConfig>;
23
23
  getProviderRuntimeCommands(): Promise<ProviderRuntimeCommandsConfig>;
24
+ getMaxConcurrentAgentRuns(): Promise<number>;
24
25
  getTrack(): Promise<ServerTrack>;
25
26
  getWorkspacePlatform(): Promise<WorkspacePlatform>;
26
27
  setReleaseTrack(releaseTrack: ReleaseTrack): Promise<ReleaseTrack>;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.service.d.ts","sourceRoot":"","sources":["../../../server/settings/settings.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,iBAAqC;IAEzE,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,oBAAoB,CAAC,KAAK,EAAE;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQxB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAOxC,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKjC,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKtD,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAOxC,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAKtD,wBAAwB,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAKhE,0BAA0B,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAKpE,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAKhC,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKlD,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlE,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlE,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAMpD,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAMtE,mBAAmB,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM9F,uBAAuB,CAC3B,QAAQ,EAAE,4BAA4B,EACtC,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,2BAA2B,CAAC;IAUjC,yBAAyB,CAC7B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,6BAA6B,CAAC;IAanC,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAK7F;AAED,eAAO,MAAM,4BAA4B,uBAA8B,CAAC"}
1
+ {"version":3,"file":"settings.service.d.ts","sourceRoot":"","sources":["../../../server/settings/settings.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,iBAAqC;IAEzE,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,oBAAoB,CAAC,KAAK,EAAE;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQxB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAOxC,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKjC,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAKtD,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAOxC,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAKtD,wBAAwB,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAKhE,0BAA0B,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAKpE,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5C,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAKhC,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKlD,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlE,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlE,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAMpD,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAMtE,mBAAmB,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM9F,uBAAuB,CAC3B,QAAQ,EAAE,4BAA4B,EACtC,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,2BAA2B,CAAC;IAUjC,yBAAyB,CAC7B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,6BAA6B,CAAC;IAanC,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAK7F;AAED,eAAO,MAAM,4BAA4B,uBAA8B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { DEFAULT_MAX_CONCURRENT_AGENT_RUNS } from '../../shared/server-settings.js';
1
2
  import { serverConfigStore, } from '../storage/schema/server.store.js';
2
3
  export class ServerSettingsService {
3
4
  store;
@@ -48,6 +49,10 @@ export class ServerSettingsService {
48
49
  const config = await this.store.read();
49
50
  return config.providerCommands ?? {};
50
51
  }
52
+ async getMaxConcurrentAgentRuns() {
53
+ const config = await this.store.read();
54
+ return config.runtime?.maxConcurrentAgentRuns ?? DEFAULT_MAX_CONCURRENT_AGENT_RUNS;
55
+ }
51
56
  async getTrack() {
52
57
  const config = await this.store.read();
53
58
  return config.track ?? config.releaseTrack ?? 'stable';
@@ -55,6 +55,9 @@ export declare const ServerConfig: z.ZodObject<{
55
55
  stable: "stable";
56
56
  canary: "canary";
57
57
  }>>;
58
+ runtime: z.ZodOptional<z.ZodObject<{
59
+ maxConcurrentAgentRuns: z.ZodOptional<z.ZodNumber>;
60
+ }, z.core.$strict>>;
58
61
  sidebarOrder: z.ZodOptional<z.ZodObject<{
59
62
  agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
60
63
  kbs: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.store.d.ts","sourceRoot":"","sources":["../../../../server/storage/schema/server.store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgBd,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAV,SAAS,CAAC,EAAE,MAAM,YAAA;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAQlB;IAEH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,MAAM,CACJ,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GACjE,OAAO,CAAC,YAAY,CAAC;CAGzB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"server.store.d.ts","sourceRoot":"","sources":["../../../../server/storage/schema/server.store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiBd,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAV,SAAS,CAAC,EAAE,MAAM,YAAA;IAE/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAQlB;IAEH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,MAAM,CACJ,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GACjE,OAAO,CAAC,YAAY,CAAC;CAGzB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -4,7 +4,7 @@ import { join } from 'node:path';
4
4
  import { z } from 'zod';
5
5
  import { resolveAnimaHome } from '../../anima-home.js';
6
6
  import { JsonStore } from '../json-store.js';
7
- import { CursorDeliveryConfig, DashboardAuth, MemoryCoherenceConfig, ProviderAccountsConfig, ProviderContextLimitsConfig, ProviderRuntimeCommandsConfig, ReleaseTrack, ServerTrack, SidebarOrder, TeamConfig, WorkspacePlatform, } from '../../../shared/server-settings.js';
7
+ import { CursorDeliveryConfig, DashboardAuth, MemoryCoherenceConfig, ProviderAccountsConfig, ProviderContextLimitsConfig, ProviderRuntimeCommandsConfig, ReleaseTrack, RuntimeConfig, ServerTrack, SidebarOrder, TeamConfig, WorkspacePlatform, } from '../../../shared/server-settings.js';
8
8
  export const ServerConfig = z.object({
9
9
  cursorDelivery: CursorDeliveryConfig.optional(),
10
10
  dashboardAuth: DashboardAuth.optional(),
@@ -15,6 +15,7 @@ export const ServerConfig = z.object({
15
15
  providerContextLimits: ProviderContextLimitsConfig.optional(),
16
16
  providerCommands: ProviderRuntimeCommandsConfig.optional(),
17
17
  releaseTrack: ReleaseTrack.optional(),
18
+ runtime: RuntimeConfig.optional(),
18
19
  sidebarOrder: SidebarOrder.optional(),
19
20
  // Team registry. Optional + never schema-defaulted, so a legacy/empty config still loads
20
21
  // as `{}` (zero-touch upgrade). The default team is synthesized in TeamService, not here.
@@ -49,7 +49,7 @@ test('claude-code runtime streams activity, persists Claude session metadata, an
49
49
  "const systemPrompt = systemPromptFile ? readFileSync(systemPromptFile, 'utf8') : '';",
50
50
  'if (argv.includes("-p")) process.exit(41);',
51
51
  'if (argv.includes("--append-system-prompt")) process.exit(58);',
52
- 'if (!argv.includes("--chrome")) process.exit(63);',
52
+ 'if (argv.includes("--chrome")) process.exit(63);',
53
53
  'if (!argv.includes("--verbose")) process.exit(42);',
54
54
  'if (!argv.includes("--include-partial-messages")) process.exit(60);',
55
55
  'if (!argv.includes("--include-hook-events")) process.exit(61);',
@@ -35,14 +35,12 @@ test('claude provider env keeps configured values but hard-disables native auto-
35
35
  EXTRA: 'kept',
36
36
  });
37
37
  });
38
- test('claude common args carry the shared launch flags and optional config flags', () => {
38
+ test('claude common args leave Chrome disabled by default and carry optional config flags', () => {
39
39
  assert.deepEqual(claudeCommonArgs({ kind: 'claude-code' }, undefined), [
40
- '--chrome',
41
40
  '--permission-mode', 'bypassPermissions',
42
41
  '--disallowedTools', CLAUDE_DISALLOWED_TOOLS.join(','),
43
42
  ]);
44
43
  assert.deepEqual(claudeCommonArgs({ kind: 'claude-code', model: 'claude-opus-4-8', reasoningEffort: 'max' }, '/tmp/system-prompt.md'), [
45
- '--chrome',
46
44
  '--permission-mode', 'bypassPermissions',
47
45
  '--disallowedTools', CLAUDE_DISALLOWED_TOOLS.join(','),
48
46
  '--model', 'claude-opus-4-8',
@@ -24,18 +24,18 @@ test('runtime host config watch event invalidates changed agent config cache', a
24
24
  test('runtime host root agents watch events schedule reconcile without config cache invalidation', () => {
25
25
  assert.equal(invalidateConfigCacheForWatchEvent('agents', '/tmp/anima/agents', 'scout'), true);
26
26
  });
27
- test('runtime host server config watch event invalidates provider command config cache', async () => {
27
+ test('runtime host server config watch event invalidates runtime config cache', async () => {
28
28
  const dir = await mkdtemp(join(tmpdir(), 'anima-server-config-watch-'));
29
29
  try {
30
30
  const configPath = join(dir, 'config.json');
31
- await writeFile(configPath, '{"providerCommands":{"codex-cli":"mcodex"}}\n', 'utf8');
31
+ await writeFile(configPath, '{"runtime":{"maxConcurrentAgentRuns":9}}\n', 'utf8');
32
32
  const fileStat = await statOrNull(configPath);
33
33
  assert.ok(fileStat);
34
- cacheSet(configPath, { providerCommands: { 'codex-cli': 'codex' } }, fileStat);
35
- const file = new JsonFile(configPath, () => ({ providerCommands: {} }));
36
- assert.equal((await file.read()).providerCommands['codex-cli'], 'codex');
34
+ cacheSet(configPath, { runtime: { maxConcurrentAgentRuns: 5 } }, fileStat);
35
+ const file = new JsonFile(configPath, () => ({ runtime: { maxConcurrentAgentRuns: 5 } }));
36
+ assert.equal((await file.read()).runtime.maxConcurrentAgentRuns, 5);
37
37
  assert.equal(invalidateConfigCacheForWatchEvent('server', dir, 'config.json'), true);
38
- assert.equal((await file.read()).providerCommands['codex-cli'], 'mcodex');
38
+ assert.equal((await file.read()).runtime.maxConcurrentAgentRuns, 9);
39
39
  }
40
40
  finally {
41
41
  await rm(dir, { force: true, recursive: true });
@@ -201,12 +201,14 @@ test('runtime host idles with zero agents and starts a newly runnable agent once
201
201
  });
202
202
  test('runtime host shares one run limiter across every agent it starts', async () => {
203
203
  const runLimiters = [];
204
+ let maxConcurrentAgentRuns = 2;
204
205
  const host = new RuntimeHost({}, {
205
206
  animaHome: testHome,
206
207
  loadAgents: async () => [
207
208
  runtimeHostAgent('aria', { connected: true }),
208
209
  runtimeHostAgent('milo', { connected: true }),
209
210
  ],
211
+ loadMaxConcurrentAgentRuns: async () => maxConcurrentAgentRuns,
210
212
  logger: silentLogger,
211
213
  startAgent: async (agent, _animaHome, options) => {
212
214
  runLimiters.push(options.runLimiter);
@@ -217,6 +219,11 @@ test('runtime host shares one run limiter across every agent it starts', async (
217
219
  await host.reconcileOnce();
218
220
  assert.equal(runLimiters.length, 2);
219
221
  assert.equal(runLimiters[0], runLimiters[1]);
222
+ assert.equal(runLimiters[0].currentLimit(), 2);
223
+ maxConcurrentAgentRuns = 7;
224
+ await host.reconcileOnce();
225
+ assert.equal(runLimiters.length, 2);
226
+ assert.equal(runLimiters[0].currentLimit(), 7);
220
227
  await host.stop();
221
228
  });
222
229
  test('runtime host reconciles memory coherence scheduler after agent reconciliation', async () => {
@@ -2,12 +2,58 @@ import assert from 'node:assert/strict';
2
2
  import test from 'node:test';
3
3
  import { AgentRuntimeWorker } from '../runtime/runtime-worker.js';
4
4
  import { TEAM_ACTIVE_RUN_LIMIT, TeamRunLimiter } from '../runtime/team-run-limiter.js';
5
+ import { ServerSettingsService } from '../settings/settings.service.js';
6
+ import { ServerConfigStore } from '../storage/schema/server.store.js';
5
7
  import { makeSlackEvent } from './helpers/slack.js';
6
8
  import { sleep, waitFor, withTempAnimaHome } from './helpers/harness.js';
7
9
  import { ControlledRuntime, FollowupRuntime, enqueueInbox, queueFor, silentLogger, waitForInboxItemAppendedTo, } from './helpers/runtime-worker.js';
8
- test('team run limit is five active provider runs', () => {
10
+ test('team run limit defaults to five active provider runs', () => {
9
11
  assert.equal(TEAM_ACTIVE_RUN_LIMIT, 5);
10
12
  });
13
+ test('server config controls the runtime-wide active provider run limit', async () => {
14
+ await withTempAnimaHome(async (stateDir) => {
15
+ const store = new ServerConfigStore(stateDir);
16
+ const settings = new ServerSettingsService(store);
17
+ assert.equal(await settings.getMaxConcurrentAgentRuns(), 5);
18
+ await store.write({ runtime: { maxConcurrentAgentRuns: 9 } });
19
+ assert.equal(await settings.getMaxConcurrentAgentRuns(), 9);
20
+ await assert.rejects(store.write({ runtime: { maxConcurrentAgentRuns: 0 } }), /expected number to be >0/);
21
+ await assert.rejects(store.write({ runtime: { maxConcurrentAgentRuns: 101 } }), /expected number to be <=100/);
22
+ });
23
+ });
24
+ test('team run limiter applies increases and decreases without interrupting active runs', async () => {
25
+ const limiter = new TeamRunLimiter(1);
26
+ const firstRelease = await limiter.acquire();
27
+ let secondRelease;
28
+ let thirdRelease;
29
+ void limiter.acquire().then((release) => {
30
+ secondRelease = release;
31
+ });
32
+ await sleep(10);
33
+ assert.equal(secondRelease, undefined);
34
+ limiter.setLimit(2);
35
+ await waitFor(() => secondRelease !== undefined, {
36
+ description: 'increased limit to admit a queued run',
37
+ });
38
+ assert.equal(limiter.currentLimit(), 2);
39
+ limiter.setLimit(1);
40
+ void limiter.acquire().then((release) => {
41
+ thirdRelease = release;
42
+ });
43
+ firstRelease();
44
+ await sleep(10);
45
+ assert.equal(thirdRelease, undefined);
46
+ secondRelease();
47
+ await waitFor(() => thirdRelease !== undefined, {
48
+ description: 'decreased limit to admit after active runs drain',
49
+ });
50
+ thirdRelease();
51
+ });
52
+ test('team run limiter rejects invalid limits', () => {
53
+ assert.throws(() => new TeamRunLimiter(0), /positive integer/);
54
+ const limiter = new TeamRunLimiter();
55
+ assert.throws(() => limiter.setLimit(1.5), /positive integer/);
56
+ });
11
57
  test('team run limiter admits waiters in request order', async () => {
12
58
  const limiter = new TeamRunLimiter(2);
13
59
  const firstRelease = await limiter.acquire();
@@ -40,6 +40,11 @@ export declare const WorkspacePlatform: z.ZodEnum<{
40
40
  export type WorkspacePlatform = z.infer<typeof WorkspacePlatform>;
41
41
  export { ProviderAccountsConfig, ProviderContextLimitsConfig, ProviderRuntimeCommandsConfig, };
42
42
  export declare const DEFAULT_MEMORY_COHERENCE_CONSOLIDATION_THRESHOLD_BYTES: number;
43
+ export declare const DEFAULT_MAX_CONCURRENT_AGENT_RUNS = 5;
44
+ export declare const RuntimeConfig: z.ZodObject<{
45
+ maxConcurrentAgentRuns: z.ZodOptional<z.ZodNumber>;
46
+ }, z.core.$strict>;
47
+ export type RuntimeConfig = z.infer<typeof RuntimeConfig>;
43
48
  export declare const DashboardAuth: z.ZodObject<{
44
49
  enabled: z.ZodOptional<z.ZodBoolean>;
45
50
  passwordHash: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"server-settings.d.ts","sourceRoot":"","sources":["../../shared/server-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,eAAO,MAAM,YAAY;;;;iBAIvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAMxD,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,eAAO,MAAM,UAAU;;;;kBASZ,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAKpD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC;IAEf,eAAe,EAAE,MAAM,CAAC;IAExB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW;;;;EAAsC,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,GAC9B,CAAC;AAEF,eAAO,MAAM,sDAAsD,QAAY,CAAC;AAEhF,eAAO,MAAM,aAAa;;;;;kBAKf,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,qBAAqB;;;;;;;;kBAQvB,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;kBAGtB,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"server-settings.d.ts","sourceRoot":"","sources":["../../shared/server-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,eAAO,MAAM,YAAY;;;;iBAIvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAMxD,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,eAAO,MAAM,UAAU;;;;kBASZ,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAKpD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC;IAEf,eAAe,EAAE,MAAM,CAAC;IAExB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW;;;;EAAsC,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,GAC9B,CAAC;AAEF,eAAO,MAAM,sDAAsD,QAAY,CAAC;AAChF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,eAAO,MAAM,aAAa;;kBAEf,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,aAAa;;;;;kBAKf,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,qBAAqB;;;;;;;;kBAQvB,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;kBAGtB,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -28,6 +28,10 @@ export const ServerTrack = z.enum(['dev', 'canary', 'stable']);
28
28
  export const WorkspacePlatform = z.enum(['slack', 'feishu']);
29
29
  export { ProviderAccountsConfig, ProviderContextLimitsConfig, ProviderRuntimeCommandsConfig, };
30
30
  export const DEFAULT_MEMORY_COHERENCE_CONSOLIDATION_THRESHOLD_BYTES = 16 * 1024;
31
+ export const DEFAULT_MAX_CONCURRENT_AGENT_RUNS = 5;
32
+ export const RuntimeConfig = z.object({
33
+ maxConcurrentAgentRuns: z.number().int().positive().max(100).optional(),
34
+ }).strict();
31
35
  export const DashboardAuth = z.object({
32
36
  enabled: z.boolean().optional(),
33
37
  passwordHash: z.string().min(1).optional(),
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-BIIkEC5s.js","assets/index-D1puqLA5.js","assets/index-C-urRSPf.css","assets/chunk-O5CBEL6O-CMT0kWy8.js","assets/src-BfilLRQJ.js","assets/chunk-5ZQYHXKU--biCKcs-.js","assets/dist-CbQqGki_.js","assets/chunk-CSCIHK7Q-BKvyIahu.js","assets/chunk-3OPIFGDE-CMj2Nr-H.js","assets/chunk-L5ZTLDWV-DtAqG3hv.js","assets/chunk-NZK2D7GU-CheI0xa1.js","assets/rough.esm-CSKSodPl.js","assets/chunk-BSJP7CBP-CDcjNL5d.js","assets/chunk-KSCS5N6A-DqeIk4cv.js","assets/line-DlHKVCmL.js","assets/path-BWPyau1x.js","assets/array-BifhSqXX.js","assets/chunk-LZXEDZCA-Rkh6ZzKZ.js","assets/chunk-WU5MYG2G-CwiQCcXD.js","assets/chunk-XPW4576I-k7WRIZH5.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./lightbulb-DQAX7Imn.js";import{$ as t,An as n,At as r,Bt as i,En as a,Et as o,Mn as s,Nn as c,P as l,U as u,Z as d,_t as f,bt as p,ct as m,gt as h,ht as g,jn as _,kn as v,t as y,ut as b,vt as x,wt as S,yn as ee,yt as te,zt as ne}from"./index-D1puqLA5.js";var C=r(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),re=r(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ie=r(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),ae=r(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),oe=r(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]),se=r(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),ce=r(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),le=r(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),ue=r(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),de=r(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),fe=r(`megaphone`,[[`path`,{d:`M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z`,key:`q8bfy3`}],[`path`,{d:`M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14`,key:`1853fq`}],[`path`,{d:`M8 6v8`,key:`15ugcq`}]]),pe=r(`octagon-alert`,[[`path`,{d:`M12 16h.01`,key:`1drbdi`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z`,key:`1fd625`}]]),me=r(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),he=r(`text-wrap`,[[`path`,{d:`m16 16-3 3 3 3`,key:`117b85`}],[`path`,{d:`M3 12h14.5a1 1 0 0 1 0 7H13`,key:`18xa6z`}],[`path`,{d:`M3 19h6`,key:`1ygdsz`}],[`path`,{d:`M3 5h18`,key:`1u36vt`}]]),w=c(n(),1),T=ee(),ge=s({ParseError:()=>E,SETTINGS_SCHEMA:()=>Ee,__defineFunction:()=>B,__defineMacro:()=>H,__defineSymbol:()=>k,__domTree:()=>Oo,__parse:()=>Co,__renderToDomTree:()=>To,__renderToHTMLTree:()=>Eo,__setFontMetrics:()=>It,default:()=>ko,render:()=>xo,renderToString:()=>So,version:()=>Do}),E=class e extends Error{constructor(t,n){var r=`KaTeX parse error: `+t,i,a,o=n&&n.loc;if(o&&o.start<=o.end){var s=o.lexer.input;i=o.start,a=o.end,i===s.length?r+=` at end of input: `:r+=` at position `+(i+1)+`: `;var c=s.slice(i,a).replace(/[^]/g,`$&̲`),l=i>15?`…`+s.slice(i-15,i):s.slice(0,i),u=a+15<s.length?s.slice(a,a+15)+`…`:s.slice(a);r+=l+c+u}super(r),this.name=`ParseError`,this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,e.prototype),this.position=i,i!=null&&a!=null&&(this.length=a-i),this.rawMessage=t}},_e=/([A-Z])/g,ve=e=>e.replace(_e,`-$1`).toLowerCase(),ye={"&":`&amp;`,">":`&gt;`,"<":`&lt;`,'"':`&quot;`,"'":`&#x27;`},be=/[&><"']/g,xe=e=>String(e).replace(be,e=>ye[e]),Se=e=>e.type===`ordgroup`||e.type===`color`?e.body.length===1?Se(e.body[0]):e:e.type===`font`?Se(e.body):e,Ce=new Set([`mathord`,`textord`,`atom`]),we=e=>Ce.has(Se(e).type),Te=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?t[2]!==`:`||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():`_relative`},Ee={displayMode:{type:`boolean`,description:`Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.`,cli:`-d, --display-mode`},output:{type:{enum:[`htmlAndMathml`,`html`,`mathml`]},description:`Determines the markup language of the output.`,cli:`-F, --format <type>`},leqno:{type:`boolean`,description:`Render display math in leqno style (left-justified tags).`},fleqn:{type:`boolean`,description:`Render display math flush left.`},throwOnError:{type:`boolean`,default:!0,cli:`-t, --no-throw-on-error`,cliDescription:`Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error.`},errorColor:{type:`string`,default:`#cc0000`,cli:`-c, --error-color <color>`,cliDescription:`A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.`,cliProcessor:e=>`#`+e},macros:{type:`object`,cli:`-m, --macro <def>`,cliDescription:`Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).`,cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:`number`,description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:`--min-rule-thickness <size>`,cliProcessor:parseFloat},colorIsTextColor:{type:`boolean`,description:`Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.`,cli:`-b, --color-is-text-color`},strict:{type:[{enum:[`warn`,`ignore`,`error`]},`boolean`,`function`],description:`Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.`,cli:`-S, --strict`,cliDefault:!1},trust:{type:[`boolean`,`function`],description:`Trust the input, enabling all HTML features such as \\url.`,cli:`-T, --trust`},maxSize:{type:`number`,default:1/0,description:`If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large`,processor:e=>Math.max(0,e),cli:`-s, --max-size <n>`,cliProcessor:parseInt},maxExpand:{type:`number`,default:1e3,description:`Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.`,processor:e=>Math.max(0,e),cli:`-e, --max-expand <n>`,cliProcessor:e=>e===`Infinity`?1/0:parseInt(e)},globalGroup:{type:`boolean`,cli:!1}};function De(e){if(typeof e!=`string`)return e.enum[0];switch(e){case`boolean`:return!1;case`string`:return``;case`number`:return 0;case`object`:return{};default:throw Error(`Unexpected schema type; settings must declare an explicit default.`)}}function Oe(e){return e.default===void 0?De(Array.isArray(e.type)?e.type[0]:e.type):e.default}function ke(e,t,n,r){var i=n[t];e[t]=i===void 0?Oe(r):r.processor?r.processor(i):i}var Ae=class{constructor(e){e===void 0&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e||={};for(var t of Object.keys(Ee)){var n=Ee[t];n&&ke(this,t,e,n)}}reportNonstrict(e,t,n){var r=this.strict;if(typeof r==`function`&&(r=r(e,t,n)),!(!r||r===`ignore`)){if(r===!0||r===`error`)throw new E(`LaTeX-incompatible input and strict mode is set to 'error': `+(t+` [`+e+`]`),n);r===`warn`?typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)):typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`))}}useStrictBehavior(e,t,n){var r=this.strict;if(typeof r==`function`)try{r=r(e,t,n)}catch{r=`error`}return!r||r===`ignore`?!1:r===!0||r===`error`?!0:r===`warn`?(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)),!1):(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`)),!1)}isTrusted(e){if(`url`in e&&e.url&&!e.protocol){var t=Te(e.url);if(t==null)return!1;e.protocol=t}return!!(typeof this.trust==`function`?this.trust(e):this.trust)}},je=class{constructor(e,t,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=n}sup(){return Be[Ve[this.id]]}sub(){return Be[He[this.id]]}fracNum(){return Be[Ue[this.id]]}fracDen(){return Be[We[this.id]]}cramp(){return Be[Ge[this.id]]}text(){return Be[Ke[this.id]]}isTight(){return this.size>=2}},Me=0,Ne=1,Pe=2,Fe=3,Ie=4,Le=5,Re=6,ze=7,Be=[new je(Me,0,!1),new je(Ne,0,!0),new je(Pe,1,!1),new je(Fe,1,!0),new je(Ie,2,!1),new je(Le,2,!0),new je(Re,3,!1),new je(ze,3,!0)],Ve=[Ie,Le,Ie,Le,Re,ze,Re,ze],He=[Le,Le,Le,Le,ze,ze,ze,ze],Ue=[Pe,Fe,Ie,Le,Re,ze,Re,ze],We=[Fe,Fe,Le,Le,ze,ze,ze,ze],Ge=[Ne,Ne,Fe,Fe,Le,Le,ze,ze],Ke=[Me,Ne,Pe,Fe,Pe,Fe,Pe,Fe],D={DISPLAY:Be[Me],TEXT:Be[Pe],SCRIPT:Be[Ie],SCRIPTSCRIPT:Be[Re]},qe=[{name:`latin`,blocks:[[256,591],[768,879]]},{name:`cyrillic`,blocks:[[1024,1279]]},{name:`armenian`,blocks:[[1328,1423]]},{name:`brahmic`,blocks:[[2304,4255]]},{name:`georgian`,blocks:[[4256,4351]]},{name:`cjk`,blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:`hangul`,blocks:[[44032,55215]]}];function Je(e){for(var t=0;t<qe.length;t++)for(var n=qe[t],r=0;r<n.blocks.length;r++){var i=n.blocks[r];if(e>=i[0]&&e<=i[1])return n.name}return null}var Ye=[];qe.forEach(e=>e.blocks.forEach(e=>Ye.push(...e)));function Xe(e){for(var t=0;t<Ye.length;t+=2)if(e>=Ye[t]&&e<=Ye[t+1])return!0;return!1}var Ze=e=>e+` `+e,Qe=80,$e=function(e,t){return`M95,`+(622+e+t)+`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-BuF6DZFs.js","assets/index-DihOwoop.js","assets/index-C-urRSPf.css","assets/chunk-O5CBEL6O-BSfYcV1W.js","assets/src-BDhZsKMY.js","assets/chunk-5ZQYHXKU-Tf9HfIJ0.js","assets/dist-BvXkNHai.js","assets/chunk-CSCIHK7Q-wpRaAjqP.js","assets/chunk-3OPIFGDE-1MxryAFP.js","assets/chunk-L5ZTLDWV-D9BfYn_C.js","assets/chunk-NZK2D7GU-C1CM7Ic7.js","assets/rough.esm-CSKSodPl.js","assets/chunk-BSJP7CBP-CCNVhtnu.js","assets/chunk-KSCS5N6A-CnqSebF1.js","assets/line-D2GROkaA.js","assets/path-BWPyau1x.js","assets/array-BifhSqXX.js","assets/chunk-LZXEDZCA-MRLesqam.js","assets/chunk-WU5MYG2G-BuNKLmrl.js","assets/chunk-XPW4576I-CuJN0sUZ.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./lightbulb-C0Do_7WV.js";import{$ as t,An as n,At as r,Bt as i,En as a,Et as o,Mn as s,Nn as c,P as l,U as u,Z as d,_t as f,bt as p,ct as m,gt as h,ht as g,jn as _,kn as v,t as y,ut as b,vt as x,wt as S,yn as ee,yt as te,zt as ne}from"./index-DihOwoop.js";var C=r(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),re=r(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ie=r(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),ae=r(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),oe=r(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]),se=r(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),ce=r(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),le=r(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),ue=r(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),de=r(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),fe=r(`megaphone`,[[`path`,{d:`M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z`,key:`q8bfy3`}],[`path`,{d:`M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14`,key:`1853fq`}],[`path`,{d:`M8 6v8`,key:`15ugcq`}]]),pe=r(`octagon-alert`,[[`path`,{d:`M12 16h.01`,key:`1drbdi`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z`,key:`1fd625`}]]),me=r(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),he=r(`text-wrap`,[[`path`,{d:`m16 16-3 3 3 3`,key:`117b85`}],[`path`,{d:`M3 12h14.5a1 1 0 0 1 0 7H13`,key:`18xa6z`}],[`path`,{d:`M3 19h6`,key:`1ygdsz`}],[`path`,{d:`M3 5h18`,key:`1u36vt`}]]),w=c(n(),1),T=ee(),ge=s({ParseError:()=>E,SETTINGS_SCHEMA:()=>Ee,__defineFunction:()=>B,__defineMacro:()=>H,__defineSymbol:()=>k,__domTree:()=>Oo,__parse:()=>Co,__renderToDomTree:()=>To,__renderToHTMLTree:()=>Eo,__setFontMetrics:()=>It,default:()=>ko,render:()=>xo,renderToString:()=>So,version:()=>Do}),E=class e extends Error{constructor(t,n){var r=`KaTeX parse error: `+t,i,a,o=n&&n.loc;if(o&&o.start<=o.end){var s=o.lexer.input;i=o.start,a=o.end,i===s.length?r+=` at end of input: `:r+=` at position `+(i+1)+`: `;var c=s.slice(i,a).replace(/[^]/g,`$&̲`),l=i>15?`…`+s.slice(i-15,i):s.slice(0,i),u=a+15<s.length?s.slice(a,a+15)+`…`:s.slice(a);r+=l+c+u}super(r),this.name=`ParseError`,this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,e.prototype),this.position=i,i!=null&&a!=null&&(this.length=a-i),this.rawMessage=t}},_e=/([A-Z])/g,ve=e=>e.replace(_e,`-$1`).toLowerCase(),ye={"&":`&amp;`,">":`&gt;`,"<":`&lt;`,'"':`&quot;`,"'":`&#x27;`},be=/[&><"']/g,xe=e=>String(e).replace(be,e=>ye[e]),Se=e=>e.type===`ordgroup`||e.type===`color`?e.body.length===1?Se(e.body[0]):e:e.type===`font`?Se(e.body):e,Ce=new Set([`mathord`,`textord`,`atom`]),we=e=>Ce.has(Se(e).type),Te=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?t[2]!==`:`||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():`_relative`},Ee={displayMode:{type:`boolean`,description:`Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.`,cli:`-d, --display-mode`},output:{type:{enum:[`htmlAndMathml`,`html`,`mathml`]},description:`Determines the markup language of the output.`,cli:`-F, --format <type>`},leqno:{type:`boolean`,description:`Render display math in leqno style (left-justified tags).`},fleqn:{type:`boolean`,description:`Render display math flush left.`},throwOnError:{type:`boolean`,default:!0,cli:`-t, --no-throw-on-error`,cliDescription:`Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error.`},errorColor:{type:`string`,default:`#cc0000`,cli:`-c, --error-color <color>`,cliDescription:`A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.`,cliProcessor:e=>`#`+e},macros:{type:`object`,cli:`-m, --macro <def>`,cliDescription:`Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).`,cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:`number`,description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:`--min-rule-thickness <size>`,cliProcessor:parseFloat},colorIsTextColor:{type:`boolean`,description:`Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.`,cli:`-b, --color-is-text-color`},strict:{type:[{enum:[`warn`,`ignore`,`error`]},`boolean`,`function`],description:`Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.`,cli:`-S, --strict`,cliDefault:!1},trust:{type:[`boolean`,`function`],description:`Trust the input, enabling all HTML features such as \\url.`,cli:`-T, --trust`},maxSize:{type:`number`,default:1/0,description:`If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large`,processor:e=>Math.max(0,e),cli:`-s, --max-size <n>`,cliProcessor:parseInt},maxExpand:{type:`number`,default:1e3,description:`Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.`,processor:e=>Math.max(0,e),cli:`-e, --max-expand <n>`,cliProcessor:e=>e===`Infinity`?1/0:parseInt(e)},globalGroup:{type:`boolean`,cli:!1}};function De(e){if(typeof e!=`string`)return e.enum[0];switch(e){case`boolean`:return!1;case`string`:return``;case`number`:return 0;case`object`:return{};default:throw Error(`Unexpected schema type; settings must declare an explicit default.`)}}function Oe(e){return e.default===void 0?De(Array.isArray(e.type)?e.type[0]:e.type):e.default}function ke(e,t,n,r){var i=n[t];e[t]=i===void 0?Oe(r):r.processor?r.processor(i):i}var Ae=class{constructor(e){e===void 0&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e||={};for(var t of Object.keys(Ee)){var n=Ee[t];n&&ke(this,t,e,n)}}reportNonstrict(e,t,n){var r=this.strict;if(typeof r==`function`&&(r=r(e,t,n)),!(!r||r===`ignore`)){if(r===!0||r===`error`)throw new E(`LaTeX-incompatible input and strict mode is set to 'error': `+(t+` [`+e+`]`),n);r===`warn`?typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)):typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`))}}useStrictBehavior(e,t,n){var r=this.strict;if(typeof r==`function`)try{r=r(e,t,n)}catch{r=`error`}return!r||r===`ignore`?!1:r===!0||r===`error`?!0:r===`warn`?(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)),!1):(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`)),!1)}isTrusted(e){if(`url`in e&&e.url&&!e.protocol){var t=Te(e.url);if(t==null)return!1;e.protocol=t}return!!(typeof this.trust==`function`?this.trust(e):this.trust)}},je=class{constructor(e,t,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=n}sup(){return Be[Ve[this.id]]}sub(){return Be[He[this.id]]}fracNum(){return Be[Ue[this.id]]}fracDen(){return Be[We[this.id]]}cramp(){return Be[Ge[this.id]]}text(){return Be[Ke[this.id]]}isTight(){return this.size>=2}},Me=0,Ne=1,Pe=2,Fe=3,Ie=4,Le=5,Re=6,ze=7,Be=[new je(Me,0,!1),new je(Ne,0,!0),new je(Pe,1,!1),new je(Fe,1,!0),new je(Ie,2,!1),new je(Le,2,!0),new je(Re,3,!1),new je(ze,3,!0)],Ve=[Ie,Le,Ie,Le,Re,ze,Re,ze],He=[Le,Le,Le,Le,ze,ze,ze,ze],Ue=[Pe,Fe,Ie,Le,Re,ze,Re,ze],We=[Fe,Fe,Le,Le,ze,ze,ze,ze],Ge=[Ne,Ne,Fe,Fe,Le,Le,ze,ze],Ke=[Me,Ne,Pe,Fe,Pe,Fe,Pe,Fe],D={DISPLAY:Be[Me],TEXT:Be[Pe],SCRIPT:Be[Ie],SCRIPTSCRIPT:Be[Re]},qe=[{name:`latin`,blocks:[[256,591],[768,879]]},{name:`cyrillic`,blocks:[[1024,1279]]},{name:`armenian`,blocks:[[1328,1423]]},{name:`brahmic`,blocks:[[2304,4255]]},{name:`georgian`,blocks:[[4256,4351]]},{name:`cjk`,blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:`hangul`,blocks:[[44032,55215]]}];function Je(e){for(var t=0;t<qe.length;t++)for(var n=qe[t],r=0;r<n.blocks.length;r++){var i=n.blocks[r];if(e>=i[0]&&e<=i[1])return n.name}return null}var Ye=[];qe.forEach(e=>e.blocks.forEach(e=>Ye.push(...e)));function Xe(e){for(var t=0;t<Ye.length;t+=2)if(e>=Ye[t]&&e<=Ye[t+1])return!0;return!1}var Ze=e=>e+` `+e,Qe=80,$e=function(e,t){return`M95,`+(622+e+t)+`
3
3
  c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
4
4
  c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
5
5
  c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
@@ -297,4 +297,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
297
297
  `,e[0].empty=!0)},gT=(e,t)=>{let n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},_T=e=>{let t=[[]],n=[e],r=[0],i=[e.length],a=0,o=0,s=[],c=[s];for(;o>-1;){for(;(a=r[o]++)<i[o];){let e,l=t[o],u=n[o][a];if(typeof u==`string`?(l=o>0?l:[`plain`],e=u):(l=gT(l,u.type),u.alias&&(l=gT(l,u.alias)),e=u.content),typeof e!=`string`){o++,t.push(l),n.push(e),r.push(0),i.push(e.length);continue}let d=e.split(mT),f=d.length;s.push({types:l,content:d[0]});for(let e=1;e<f;e++)hT(s),c.push(s=[]),s.push({types:l,content:d[e]})}o--,t.pop(),n.pop(),r.pop(),i.pop()}return hT(s),c},vT=({prism:e,code:t,grammar:n,language:r})=>(0,w.useMemo)(()=>{if(n==null)return _T([t]);let i={code:t,grammar:n,language:r,tokens:[]};return e.hooks.run(`before-tokenize`,i),i.tokens=e.tokenize(t,n),e.hooks.run(`after-tokenize`,i),_T(i.tokens)},[t,n,r,e]),yT=(e,t)=>{let{plain:n}=e,r=e.styles.reduce((e,n)=>{let{languages:r,style:i}=n;return r&&!r.includes(t)||n.types.forEach(t=>{e[t]=Rw(Rw({},e[t]),i)}),e},{});return r.root=n,r.plain=zw(Rw({},n),{backgroundColor:void 0}),r},bT=({children:e,language:t,code:n,theme:r,prism:i})=>{let a=t.toLowerCase(),o=yT(r,a),s=fT(o),c=pT(o),l=i.languages[a];return e({tokens:vT({prism:i,language:a,code:n,grammar:l}),className:`prism-code language-${a}`,style:o==null?{}:o.root,getLineProps:s,getTokenProps:c})},xT=e=>(0,w.createElement)(bT,zw(Rw({},e),{prism:e.prism||$,theme:e.theme||iT,code:e.code,language:e.language}));function ST(e){return e.toLowerCase().replace(/[^\w\s-]/g,``).trim().replace(/\s+/g,`-`)||`section`}function CT(e,t){let n=ST(e),r=t.get(n)??0;return t.set(n,r+1),r===0?n:`${n}-${r}`}function wT(e){return e.replace(/\s+#+\s*$/,``).trim()}function TT(e){window.location.hash!==`#${e}`&&window.history.replaceState(null,``,`${window.location.pathname}${window.location.search}#${e}`)}function ET(e){let t=[],n=new Map,r=e.split(`
298
298
  `);for(let[e,i]of r.entries()){let r=i.match(/^(#{1,6})\s+(.+)/);if(r){let i=r[1].length,a=wT(r[2]);t.push({depth:i,text:a,id:CT(a,n),line:e+1})}}return t}function DT(e){let{origin:t,pathname:n,search:r}=window.location;return`${t}${n}${r}#${e}`}function OT(e){let t=/^#L(\d+)$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isInteger(n)&&n>0?n:null}function kT({text:e,variant:t=`floating`}){let[n,r]=(0,w.useState)(!1),i=(0,w.useRef)(null),a=(0,w.useCallback)(()=>{y(e).then(()=>{r(!0),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>r(!1),2e3)}).catch(()=>{})},[e]);return(0,w.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]),(0,T.jsxs)(`button`,{onClick:a,title:n?`Copied!`:`Copy`,"aria-label":n?`Copied`:`Copy code`,className:t===`floating`?`chrome absolute right-2 top-2 flex h-7 items-center gap-1 rounded-sm bg-surface-elevated/80 px-2 text-[11px] text-text-subtle opacity-0 transition-opacity hover:bg-surface-elevated hover:text-text focus-visible:opacity-100 group-hover:opacity-100 group-focus-within:opacity-100 [@media(hover:none)]:opacity-100`:`chrome flex h-7 items-center gap-1 rounded-sm px-2 text-[11px] text-text-subtle transition-colors hover:bg-surface-hover hover:text-text focus-visible:bg-surface-hover focus-visible:text-text`,children:[(0,T.jsx)(p,{className:`h-3 w-3`}),n&&(0,T.jsx)(`span`,{children:`Copied!`})]})}function AT({id:e}){let[t,n]=(0,w.useState)(!1),r=(0,w.useRef)(null),i=(0,w.useCallback)(t=>{t.stopPropagation(),t.preventDefault(),TT(e),y(DT(e)).then(()=>{n(!0),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>n(!1),1500)}).catch(()=>{})},[e]);return(0,w.useEffect)(()=>()=>{r.current&&clearTimeout(r.current)},[]),(0,T.jsx)(`a`,{href:`#${e}`,onClick:i,"aria-label":t?`Link copied`:`Copy link to this section`,title:t?`Link copied!`:`Copy link to this section`,contentEditable:!1,className:`absolute right-full top-[0.1em] mr-1 inline-flex items-center px-1 text-text-subtle no-underline opacity-0 transition-opacity duration-100 hover:text-accent focus-visible:opacity-100 group-hover:opacity-100`,children:(0,T.jsx)(ue,{className:`h-[0.7em] w-[0.7em]`,strokeWidth:2.5,"aria-hidden":`true`})})}function jT({filePath:e}){let t=e.split(`/`).filter(Boolean),n=t[t.length-1]??e,r=t.slice(0,-1),i=r[r.length-1],a=r.length>1;return(0,T.jsxs)(`div`,{title:e,className:`flex min-w-0 items-center gap-1 font-sans text-[12px] text-text-subtle`,children:[i&&(0,T.jsxs)(T.Fragment,{children:[a&&(0,T.jsx)(`span`,{className:`shrink-0 text-text-subtle/70`,children:`…`}),a&&(0,T.jsx)(S,{className:`h-3 w-3 shrink-0 text-text-subtle/50`}),(0,T.jsx)(`span`,{className:`max-w-[12rem] shrink truncate`,children:i}),(0,T.jsx)(S,{className:`h-3 w-3 shrink-0 text-text-subtle/50`})]}),(0,T.jsx)(`span`,{className:`min-w-0 shrink truncate font-medium text-text-muted`,children:n})]})}function MT({id:e,filePath:t,size:n,rawUrl:r,downloadUrl:a}){let[o,s]=(0,w.useState)(!1),[c,u]=(0,w.useState)(!1),m=(0,w.useRef)(null),h=(0,w.useRef)(null);(0,w.useEffect)(()=>{if(!o)return;function e(e){m.current&&!m.current.contains(e.target)&&s(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[o]),(0,w.useEffect)(()=>()=>{h.current&&clearTimeout(h.current)},[]);let g=r??i(e,t),_=a===void 0?l(e,t):a,v=(0,w.useCallback)(()=>{y(t).then(()=>{u(!0),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>u(!1),2e3)}).catch(()=>{})},[t]),b=`flex w-full items-center gap-2 px-3 py-2 text-left font-sans text-[12px] text-text-muted transition-colors hover:bg-surface-elevated`;return(0,T.jsxs)(`div`,{ref:m,className:`relative`,children:[(0,T.jsx)(`button`,{onClick:()=>s(e=>!e),title:`More actions`,"aria-label":`More actions`,"aria-haspopup":`menu`,"aria-expanded":o,className:[`chrome flex min-h-[44px] shrink-0 items-center justify-center rounded-sm px-2 transition-colors`,o?`text-text`:`text-text-subtle hover:bg-surface-elevated hover:text-text-muted`].join(` `),children:(0,T.jsx)(x,{className:`h-3.5 w-3.5`})}),o&&(0,T.jsxs)(`div`,{role:`menu`,className:`absolute right-0 top-full z-20 mt-1 w-44 overflow-hidden rounded-md border border-border-soft bg-surface-raised shadow-lg`,children:[n!==void 0&&(0,T.jsx)(`div`,{className:`border-b border-border-soft px-3 py-1.5 font-sans text-[11px] text-text-subtle`,children:d(n)}),(0,T.jsxs)(`button`,{role:`menuitem`,onClick:v,className:b,children:[(0,T.jsx)(p,{className:`h-3.5 w-3.5 shrink-0`}),c?`Path copied`:`Copy path`]}),(0,T.jsxs)(`a`,{role:`menuitem`,href:g,target:`_blank`,rel:`noreferrer`,onClick:()=>s(!1),className:b,children:[(0,T.jsx)(f,{className:`h-3.5 w-3.5 shrink-0`}),`Open raw`]}),_&&(0,T.jsxs)(`a`,{role:`menuitem`,href:_,download:!0,onClick:()=>s(!1),className:b,children:[(0,T.jsx)(te,{className:`h-3.5 w-3.5 shrink-0`}),`Download`]})]})]})}function NT({entries:e}){let[t,n]=(0,w.useState)(!1),r=(0,w.useRef)(null);return(0,w.useEffect)(()=>{if(!t)return;function e(e){r.current&&!r.current.contains(e.target)&&n(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[t]),e.length===0?null:(0,T.jsxs)(`div`,{ref:r,className:`relative`,children:[(0,T.jsx)(`button`,{onClick:()=>n(e=>!e),title:`Table of contents`,className:[`chrome flex min-h-[44px] shrink-0 items-center justify-center rounded-sm px-2 transition-colors`,t?`text-text`:`text-text-subtle hover:bg-surface-elevated hover:text-text-muted`].join(` `),children:(0,T.jsx)(de,{className:`h-3.5 w-3.5`})}),t&&(0,T.jsx)(`div`,{className:`absolute right-0 top-full z-20 mt-1 w-72 max-h-[480px] overflow-y-auto rounded-md border border-border-soft bg-surface shadow-deep`,children:(0,T.jsx)(`nav`,{className:`py-1`,children:e.map((e,t)=>(0,T.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),n(!1),window.history.replaceState(null,``,`#${e.id}`),document.getElementById(e.id)?.scrollIntoView({behavior:`smooth`})},className:`flex min-h-[40px] items-center font-sans text-[13px] text-text-muted transition-colors hover:bg-surface-elevated/60 hover:text-text`,style:{paddingLeft:`${.75+(e.depth-1)*.75}rem`,paddingRight:`0.75rem`},children:e.text},t))})})]})}var PT=[{value:`preview`,label:`Preview`,Icon:re},{value:`code`,label:`Code`,Icon:C}];function FT({mode:e,onChange:t}){return(0,T.jsx)(`div`,{role:`tablist`,"aria-label":`File view mode`,className:`chrome inline-flex shrink-0 items-center gap-0.5 rounded-md border border-border-soft bg-surface-raised/40 p-0.5`,children:PT.map(({value:n,label:r,Icon:i})=>{let a=e===n;return(0,T.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":a,title:r,onClick:()=>t(n),className:[`flex min-h-[28px] items-center gap-1.5 rounded-[5px] px-2 text-[11px] font-medium transition-colors`,a?`bg-surface text-text shadow-sm`:`text-text-subtle hover:text-text-muted`].join(` `),children:[(0,T.jsx)(i,{className:`h-3.5 w-3.5`,strokeWidth:2}),r]},n)})})}var IT=`kb-file-view-mode`;function LT(){try{return window.sessionStorage.getItem(`kb-file-view-mode`)===`code`?`code`:`preview`}catch{return`preview`}}function RT(e){try{window.sessionStorage.setItem(IT,e)}catch{}}var zT=`kb-code-wrap`;function BT(){try{return window.sessionStorage.getItem(zT)!==`off`}catch{return!0}}function VT(e){try{window.sessionStorage.setItem(zT,e?`on`:`off`)}catch{}}function HT({body:e,language:t}){let n=(0,w.useRef)(null),[r,i]=(0,w.useState)(()=>OT(window.location.hash)),[a,o]=(0,w.useState)(BT),s=(0,w.useCallback)(()=>{o(e=>{let t=!e;return VT(t),t})},[]);(0,w.useEffect)(()=>{function e(){i(OT(window.location.hash))}return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,w.useEffect)(()=>{let e=OT(window.location.hash);if(e===null)return;let t=n.current?.querySelector(`#L${e}`);if(!t)return;let r=setTimeout(()=>t.scrollIntoView({behavior:`smooth`,block:`center`}),80);return()=>clearTimeout(r)},[]);function c(e){let t=r===e?null:e;i(t);let n=t===null?window.location.pathname+window.location.search:`#L${t}`;window.history.replaceState(null,``,n)}return(0,T.jsx)(`div`,{ref:n,className:`min-h-0 flex-1 overflow-auto`,children:(0,T.jsxs)(`div`,{className:`relative group min-h-0 flex-1 overflow-auto`,children:[(0,T.jsx)(`button`,{type:`button`,onClick:s,"aria-pressed":a,title:a?`Disable soft wrap`:`Enable soft wrap`,className:[`chrome absolute right-12 top-2 z-10 flex h-7 items-center gap-1 rounded-sm px-2 text-[11px] transition-opacity`,`opacity-0 focus-visible:opacity-100 group-hover:opacity-100 group-focus-within:opacity-100 [@media(hover:none)]:opacity-100`,a?`bg-accent/10 text-accent hover:bg-accent/15`:`bg-surface-elevated/80 text-text-subtle hover:bg-surface-elevated hover:text-text`].join(` `),children:(0,T.jsx)(he,{className:`h-3 w-3`})}),(0,T.jsx)(kT,{text:e}),(0,T.jsx)(xT,{code:e.replace(/\n$/,``),language:t,theme:Ww.github,children:({className:e,style:t,tokens:n,getLineProps:i,getTokenProps:o})=>(0,T.jsx)(`pre`,{className:`${e} min-h-full font-mono text-[12.5px] leading-relaxed ${a?``:`w-max`}`,style:{...t,background:`transparent`,padding:0,whiteSpace:a?`pre-wrap`:`pre`,wordBreak:a?`break-word`:`normal`},children:(0,T.jsx)(`div`,{className:`py-4`,children:n.map((e,t)=>{let n=t+1,{className:s,...l}=i({line:e}),u=r===n;return(0,T.jsxs)(`div`,{...l,id:`L${n}`,className:[s??``,`flex px-5`,a?``:`min-w-full`,u?`bg-accent/10`:``].join(` `).trim(),children:[(0,T.jsx)(`a`,{href:`#L${n}`,onClick:e=>{e.preventDefault(),c(n)},title:`Link to line ${n}`,className:[`mr-4 inline-block w-8 shrink-0 select-none text-right tabular-nums transition-colors`,u?`text-accent`:`text-text-subtle/50 hover:text-text-muted`].join(` `),children:n}),(0,T.jsx)(`span`,{className:a?`min-w-0 flex-1`:`shrink-0`,children:e.map((e,t)=>(0,T.jsx)(`span`,{...o({token:e})},t))})]},t)})})})})]})})}function UT(e){if(e.length>=2){let t=e[0],n=e[e.length-1];if(t===`"`&&n===`"`||t===`'`&&n===`'`)return e.slice(1,-1)}return e}function WT(e){let t=e.split(`
299
299
  `),n=[],r=0;for(;r<t.length;){let e=t[r];if(e.trim()===``||e.trimStart().startsWith(`#`)){r++;continue}let i=/^([A-Za-z0-9_][\w .-]*):(?:[ \t]+(.*))?$/.exec(e);if(!i||/^\s/.test(e)){r++;continue}let a=i[1],o=(i[2]??``).trim();if(o!==``){n.push({key:a,value:UT(o),block:null}),r++;continue}let s=[];for(r++;r<t.length;){let e=t[r];if(e.trim()===``){r++;continue}if(/^\s/.test(e)||/^-[ \t]/.test(e)){s.push(e),r++;continue}break}n.push({key:a,value:null,block:s.length>0?s:null})}return n}function GT(e){let t=/^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/.exec(e);if(!t)return{entries:null,body:e};let n=WT(t[1]);return n.length===0?{entries:null,body:e}:{entries:n,body:e.slice(t[0].length)}}function KT(e){let t=e.filter(e=>e.trim()!==``).map(e=>/^[ \t]*/.exec(e)?.[0].length??0),n=t.length>0?Math.min(...t):0;return e.map(e=>e.slice(n))}function qT({block:e}){let t=KT(e),n=t.filter(e=>e.trim()!==``);return n.length>0&&n.every(e=>/^-[ \t]+/.test(e))?(0,T.jsx)(`ul`,{className:`m-0 list-disc space-y-0.5 pl-4`,children:n.map((e,t)=>(0,T.jsx)(`li`,{className:`font-mono text-[12px] text-text`,children:UT(e.replace(/^-[ \t]+/,``).trim())},t))}):(0,T.jsx)(`pre`,{className:`m-0 whitespace-pre-wrap break-words font-mono text-[12px] leading-relaxed text-text`,children:t.join(`
300
- `).trimEnd()})}function JT({entries:e}){return(0,T.jsx)(`div`,{className:`mb-5 overflow-hidden rounded-sm border border-border-soft bg-surface-raised/30`,children:(0,T.jsx)(`table`,{className:`m-0 w-full border-collapse text-left align-top`,children:(0,T.jsx)(`tbody`,{children:e.map((e,t)=>(0,T.jsxs)(`tr`,{className:t>0?`border-t border-border-soft/70`:void 0,children:[(0,T.jsx)(`th`,{scope:`row`,className:`w-px whitespace-nowrap border-r border-border-soft/70 bg-surface-raised/40 px-3 py-2 align-top font-sans text-[11px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.key}),(0,T.jsx)(`td`,{className:`px-3 py-2 align-top font-mono text-[12px] text-text`,children:e.block?(0,T.jsx)(qT,{block:e.block}):(0,T.jsx)(`span`,{className:`break-words`,children:e.value})})]},e.key+t))})})})}function YT({src:e,alt:t}){let[n,r]=(0,w.useState)(!1),i=(0,w.useRef)(null),a=(0,w.useRef)(null),o=(0,w.useCallback)(()=>{a.current=document.activeElement instanceof HTMLElement?document.activeElement:null,r(!0)},[]),s=(0,w.useCallback)(()=>{r(!1)},[]);return(0,w.useEffect)(()=>{if(!n)return;function e(e){e.key===`Escape`?s():e.key===`Tab`&&(e.preventDefault(),i.current?.focus())}return i.current?.focus(),document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e),a.current?.focus()}},[s,n]),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`img`,{src:e,alt:t,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},role:`button`,tabIndex:0,"aria-label":t?`Open image: ${t}`:`Open image`,className:`max-w-full cursor-zoom-in rounded`}),n&&(0,T.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":t?`Image preview: ${t}`:`Image preview`,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4`,onClick:s,children:[(0,T.jsx)(`button`,{ref:i,onClick:e=>{e.stopPropagation(),s()},"aria-label":`Close image preview`,title:`Close`,className:`chrome absolute right-4 top-4 flex min-h-[44px] min-w-[44px] items-center justify-center rounded-sm bg-black/40 text-white transition-colors hover:bg-black/60 focus-visible:bg-black/60`,children:(0,T.jsx)(m,{className:`h-4 w-4`})}),(0,T.jsx)(`img`,{src:e,alt:t,className:`max-h-full max-w-full object-contain`,onClick:e=>e.stopPropagation()}),t&&(0,T.jsx)(`div`,{className:`chrome absolute bottom-4 left-4 right-4 rounded-sm bg-black/45 px-3 py-2 text-center text-[12px] text-white/85`,children:t})]})]})}var XT=null;function ZT(){return XT||=v(async()=>{let{default:e}=await import(`./mermaid.core-BIIkEC5s.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,theme:`neutral`,htmlLabels:!1,flowchart:{htmlLabels:!1}}),e)),XT}function QT(e){return qs.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`foreignObject`,`img`,`image`,`script`,`iframe`,`object`,`embed`,`a`,`audio`,`video`,`source`,`link`,`base`],FORBID_ATTR:[`href`,`xlink:href`,`src`,`onerror`,`onload`,`onclick`]})}function $T({code:e}){let t=(0,w.useId)(),[n,r]=(0,w.useState)({svg:null,failed:!1});(0,w.useEffect)(()=>{let n=!1,i=`mermaid-${t.replace(/[^a-zA-Z0-9_-]/g,``)}`;return ZT().then(t=>t.render(i,e)).then(({svg:e})=>{n||r({svg:e,failed:!1})}).catch(()=>{n||r({svg:null,failed:!0})}),()=>{n=!0}},[e,t]);let{svg:i,failed:a}=n;return a?(0,T.jsx)(`pre`,{className:`font-mono text-[0.82em] leading-[1.55] text-text-muted`,style:{background:`transparent`,margin:0},children:e}):i===null?(0,T.jsx)(`div`,{className:`px-3 py-4 text-[0.82em] text-text-subtle`,children:`Rendering diagram…`}):(0,T.jsx)(`div`,{className:`flex justify-center overflow-x-auto px-3 py-3 [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:QT(i)}})}var eE={note:{label:`Note`,Icon:le},tip:{label:`Tip`,Icon:e},important:{label:`Important`,Icon:fe},warning:{label:`Warning`,Icon:b},caution:{label:`Caution`,Icon:pe}},tE=/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]/i;function nE(e){let t=Array.isArray(e)?e:typeof e==`string`?e.split(/\s+/):[];if(!t.includes(`markdown-alert`))return null;for(let e of Object.keys(eE))if(t.includes(`markdown-alert-${e}`))return e;return null}function rE(){function e(e){let t=e.children?.find(e=>e.type===`element`&&e.tagName===`p`),n=t?.children?.[0];if(!t||!n||n.type!==`text`||typeof n.value!=`string`)return;let r=tE.exec(n.value);if(!r)return;let i=r[1].toLowerCase(),a=n.value.slice(r[0].length).replace(/^[^\S\n]*\n?/,``);if(a)n.value=a;else{t.children.shift();let n=t.children[0];(n&&n.type===`text`&&typeof n.value==`string`&&/^\s+$/.test(n.value)||n&&n.type===`element`&&n.tagName===`br`)&&t.children.shift(),t.children.length===0&&(e.children=e.children.filter(e=>e!==t))}e.properties=e.properties??{},e.properties.className=[`markdown-alert`,`markdown-alert-${i}`]}function t(n){if(n.children)for(let r of n.children)r.type===`element`&&r.tagName===`blockquote`&&e(r),t(r)}return e=>t(e)}function iE(e,t){if(!e||e.startsWith(`#`)||/^[a-z][a-z\d+\-.]*:/i.test(e))return null;try{let n=new URL(e,`http://x/${t}`);if(n.host!==`x`)return null;let r=n.pathname.slice(1);return r?{path:r,hash:n.hash}:null}catch{return null}}function aE(e,t,n){if(!e||/^[a-z][a-z\d+\-.]*:/i.test(e)||e.startsWith(`#`)||e.startsWith(`/`))return e;let r=iE(e,n);return r?t(r.path):e}function oE(e){if(typeof e!=`string`||e.trim()===``)return!0;if(/prefers-color-scheme:\s*dark/i.test(e))return!1;if(/prefers-color-scheme:\s*light/i.test(e))return!0;if(typeof window<`u`&&typeof window.matchMedia==`function`)try{return window.matchMedia(e).matches}catch{return!0}return!0}function sE(e,t,n){let r=Array.isArray(e)?e.join(`, `):typeof e==`string`?e:``;if(r)return r.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let[r,...i]=e.split(/\s+/);return[aE(r,t,n),...i].join(` `).trim()}).join(`, `)}function cE(e){return w.Children.toArray(e).map(e=>typeof e==`string`?e:(0,w.isValidElement)(e)?cE(e.props.children):``).join(``)}function lE(e,t){return function({children:n,node:r,className:i,...a}){let o=r?.position?.start?.line,s=(typeof o==`number`?t.get(o):void 0)??ST(cE(n));return(0,T.jsxs)(e,{...a,id:s,onClick:()=>{TT(s)},className:[`group relative cursor-pointer`,i].filter(Boolean).join(` `),children:[(0,T.jsx)(AT,{id:s}),n]})}}function uE(e){return{h1:lE(`h1`,e),h2:lE(`h2`,e),h3:lE(`h3`,e),h4:lE(`h4`,e),h5:lE(`h5`,e),h6:lE(`h6`,e)}}var dE=[`div`,`p`,`span`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`td`,`th`],fE={...lw,tagNames:[...lw.tagNames??[],`picture`,`source`,`details`,`summary`],attributes:{...lw.attributes,source:[`srcSet`,`srcset`,`media`,`type`,`sizes`,`width`,`height`],img:[...lw.attributes?.img??[],`align`,`width`,`height`,`loading`],details:[...lw.attributes?.details??[],`open`],blockquote:[...lw.attributes?.blockquote??[],[`className`,`markdown-alert`,`markdown-alert-note`,`markdown-alert-tip`,`markdown-alert-important`,`markdown-alert-warning`,`markdown-alert-caution`]],...Object.fromEntries(dE.map(e=>[e,[...lw.attributes?.[e]??[],`align`]]))}};function pE(e,t){return function({href:n,children:r,...i}){let o=a();if(!n||n.startsWith(`#`))return(0,T.jsx)(`a`,{href:n,...i,children:r});if(/^[a-z][a-z\d+\-.]*:/i.test(n))return(0,T.jsx)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,...i,children:r});let s=iE(n,t);if(!s)return(0,T.jsx)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,...i,children:r});let c=e.browsePath(s.path)+s.hash;return(0,T.jsx)(`a`,{href:c,onClick:e=>{e.preventDefault(),o(c)},...i,children:r})}}function mE({id:e,filePath:t,file:n,loading:r,error:a,links:o,mode:s,onModeChange:c}){let l=(0,w.useMemo)(()=>o??{rawPath:t=>i(e,t),browsePath:t=>ne({id:e,filePath:t})},[o,e]),u=l.rawPath(t),p=(0,w.useRef)(null),{entries:m,body:h}=(0,w.useMemo)(()=>n?.kind!==`markdown`||!n.content?{entries:null,body:``}:GT(n.content),[n]),g=(0,w.useMemo)(()=>n?.kind!==`markdown`||!h?[]:ET(h),[n,h]),_=(0,w.useMemo)(()=>new Map(g.map(e=>[e.line,e.id])),[g]),[v,y]=(0,w.useState)(null),b=g.length>=3,x=g.length?Math.min(...g.map(e=>e.depth)):1,[S,ee]=(0,w.useState)(()=>OT(window.location.hash)?`code`:LT()),te=s!==void 0&&c!==void 0,C=te?s:S,re=(0,w.useCallback)(e=>{te&&c?c(e):(ee(e),RT(e))},[te,c]),ie=n?.kind===`markdown`&&C===`code`,ae=(0,w.useRef)(null),oe=(0,w.useCallback)(e=>{ae.current={id:e,until:Date.now()+2e3}},[]);(0,w.useEffect)(()=>{if(n?.kind!==`markdown`||C!==`preview`)return;let e=window.location.hash.slice(1);if(!e)return;let t=document.getElementById(e);if(t){oe(e);let n=setTimeout(()=>{g.some(t=>t.id===e)&&y(e),t.scrollIntoView({behavior:`smooth`})},100);return()=>clearTimeout(n)}},[n,C,g,oe]),(0,w.useEffect)(()=>{if(n?.kind!==`markdown`||C!==`preview`)return;let e=p.current;if(!e)return;let t=e,r=()=>Array.from(t.querySelectorAll(`h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]`)),i=0;function a(e){i=0;let n=r();if(n.length===0)return;let a=t.getBoundingClientRect().top+24,o=n[0];for(let e of n)if(e.getBoundingClientRect().top<=a)o=e;else break;if(!o?.id)return;let s=ae.current;if(s&&Date.now()<s.until){if(o.id!==s.id)return;ae.current=null}else ae.current=null;e&&TT(o.id),y(o.id)}function o(){i||=window.requestAnimationFrame(()=>a(!0))}let s=window.location.hash.slice(1);return(!s||!r().some(e=>e.id===s))&&(i=window.requestAnimationFrame(()=>a(!1))),t.addEventListener(`scroll`,o,{passive:!0}),()=>{t.removeEventListener(`scroll`,o),i&&window.cancelAnimationFrame(i)}},[n,C]);let se=(0,w.useMemo)(()=>({a:pE(l,t),...uE(_),img:({src:e,alt:n})=>{let r=e??``;if(r&&!/^[a-z][a-z\d+\-.]*:/i.test(r)&&!r.startsWith(`#`)){let e=iE(r,t);e&&(r=l.rawPath(e.path))}return(0,T.jsx)(YT,{src:r,alt:n??``})},picture:({node:e})=>{let n=null,r=null;for(let i of e?.children??[]){if(i.type!==`element`)continue;let e=i.properties??{};if(i.tagName===`source`&&!n&&oE(e.media)){let r=sE(e.srcSet??e.srcset,l.rawPath,t),i=r?r.split(`,`)[0]?.trim().split(/\s+/)[0]:``;i&&(n=i)}else i.tagName===`img`&&!r&&(r={src:aE(typeof e.src==`string`?e.src:``,l.rawPath,t),alt:typeof e.alt==`string`?e.alt:``,width:e.width==null?void 0:String(e.width)})}let i=n??r?.src;return i?(0,T.jsx)(`img`,{src:i,alt:r?.alt??``,width:r?.width,className:`inline-block h-auto max-w-full`}):null},blockquote:({node:e,children:t,...n})=>{let r=nE(e?.properties?.className);if(!r)return(0,T.jsx)(`blockquote`,{...n,children:t});let{label:i,Icon:a}=eE[r];return(0,T.jsxs)(`blockquote`,{className:`markdown-alert markdown-alert-${r}`,children:[(0,T.jsxs)(`p`,{className:`markdown-alert-title`,children:[(0,T.jsx)(a,{className:`h-4 w-4 shrink-0`,strokeWidth:2,"aria-hidden":`true`}),i]}),t]})},table:({children:e,...t})=>(0,T.jsx)(`div`,{className:`overflow-x-auto`,children:(0,T.jsx)(`table`,{...t,children:e})}),pre:({children:e})=>{let t=cE(e),n=``,r=w.Children.toArray(e)[0];if((0,w.isValidElement)(r)){let e=(r.props.className??``).match(/language-(\S+)/);e&&(n=e[1])}return n===`mermaid`?(0,T.jsxs)(`div`,{className:`kb-markdown-code-block group`,children:[(0,T.jsxs)(`div`,{className:`chrome flex min-h-9 items-center justify-between gap-2 border-b border-border-soft/70 bg-surface-raised/45 px-2 py-1`,children:[(0,T.jsx)(`span`,{className:`rounded-sm px-1.5 py-0.5 text-[10px] uppercase tracking-wider text-text-subtle`,children:`mermaid`}),(0,T.jsx)(kT,{text:t,variant:`inline`})]}),(0,T.jsx)($T,{code:t.replace(/\n$/,``)})]}):(0,T.jsxs)(`div`,{className:`kb-markdown-code-block group`,children:[(0,T.jsxs)(`div`,{className:`chrome flex min-h-9 items-center justify-between gap-2 border-b border-border-soft/70 bg-surface-raised/45 px-2 py-1`,children:[n?(0,T.jsx)(`span`,{className:`rounded-sm px-1.5 py-0.5 text-[10px] uppercase tracking-wider text-text-subtle`,children:n}):(0,T.jsx)(`span`,{"aria-hidden":`true`}),(0,T.jsx)(kT,{text:t,variant:`inline`})]}),(0,T.jsx)(xT,{code:t.replace(/\n$/,``),language:n||`text`,theme:Ww.github,children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:i})=>(0,T.jsx)(`pre`,{className:`${e} font-mono text-[0.82em] leading-[1.55]`,style:{...t,background:`transparent`,margin:0},children:n.map((e,t)=>(0,T.jsx)(`div`,{...r({line:e}),children:e.map((e,t)=>(0,T.jsx)(`span`,{...i({token:e})},t))},t))})})]})}}),[_,l,t]);if(a)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-health-error`,children:[`Could not open `,(0,T.jsx)(`span`,{className:`font-mono`,children:t}),`: `,a.message]});if(r||!n)return(0,T.jsx)(`div`,{className:`p-6 font-sans text-[13px] text-text-subtle`,children:`Loading…`});if(n.kind===`html`)return(0,T.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,T.jsx)(`div`,{className:`flex h-8 shrink-0 items-center justify-end border-b border-border-soft px-3`,children:(0,T.jsxs)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,title:`Open the full-width report in a new tab`,className:`chrome flex items-center gap-1 rounded-sm px-2 py-0.5 text-[10px] uppercase tracking-[0.08em] text-text-subtle transition-colors hover:bg-surface-elevated hover:text-text-muted`,children:[(0,T.jsx)(f,{className:`h-3 w-3`}),`Open full page`]})}),(0,T.jsx)(`iframe`,{title:n.name,src:u,sandbox:`allow-scripts`,className:`min-h-0 w-full flex-1 border-0 bg-white`})]});if(n.kind===`image`)return(0,T.jsx)(`div`,{className:`flex h-full flex-col`,children:(0,T.jsx)(`div`,{className:`flex flex-1 items-center justify-center overflow-auto bg-surface-elevated/30 p-6`,children:(0,T.jsx)(YT,{src:u,alt:n.name})})});if(n.truncated)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-text-muted`,children:[`This file is too large to inline (`,d(n.size),`).`,` `,(0,T.jsx)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,className:`text-accent underline underline-offset-2`,children:`Open raw`})]});if(n.kind===`binary`||n.content===void 0)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-text-muted`,children:[`Binary file (`,d(n.size),`).`,` `,(0,T.jsx)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,className:`text-accent underline underline-offset-2`,children:`Open raw`})]});if(n.kind===`markdown`)return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[!te&&(0,T.jsx)(`div`,{className:`flex h-9 shrink-0 items-center justify-end border-b border-border-soft px-3`,children:(0,T.jsx)(FT,{mode:C,onChange:re})}),ie?(0,T.jsx)(HT,{body:n.content,language:`markdown`}):(0,T.jsx)(`div`,{ref:p,className:`@container min-h-0 flex-1 overflow-y-auto px-6 py-6 md:px-10 md:py-10`,children:(0,T.jsxs)(`div`,{className:[`mx-auto flex w-full max-w-[1024px] gap-12`,b?`@min-[1372px]:max-w-[1292px]`:``].join(` `),children:[(0,T.jsxs)(`div`,{className:`w-full min-w-0 max-w-[1024px] flex-1`,children:[m&&(0,T.jsx)(JT,{entries:m}),(0,T.jsx)(`div`,{className:`md-prose`,children:(0,T.jsx)(Um,{remarkPlugins:[Y_,sv,uv],rehypePlugins:[xC,rE,[Ew,fE],sw],components:se,children:h})})]}),b&&(0,T.jsxs)(`nav`,{"aria-label":`On this page`,className:`sticky top-2 hidden w-[220px] shrink-0 self-start @min-[1372px]:block`,children:[(0,T.jsx)(`div`,{className:`chrome mb-3 text-[11px] uppercase tracking-[0.14em] text-text-muted`,children:`On this page`}),(0,T.jsx)(`ul`,{className:`space-y-2 border-l border-border-soft pl-3`,children:g.map(e=>(0,T.jsx)(`li`,{children:(0,T.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),oe(e.id),document.getElementById(e.id)?.scrollIntoView({behavior:`smooth`}),TT(e.id),y(e.id)},className:[`block truncate font-sans text-[14px] leading-snug transition-colors`,v===e.id?`text-accent`:`text-text-muted hover:text-text`].join(` `),style:{paddingLeft:`${(e.depth-x)*12}px`},children:e.text})},`${e.id}-${e.line}`))})]})]})})]});let ce=n.kind===`json`?`json`:n.language??`text`,le=n.content;if(n.kind===`json`)try{le=JSON.stringify(JSON.parse(n.content),null,2)}catch{}return(0,T.jsx)(HT,{body:le,language:ce})}export{MT as a,ET as c,ac as d,$s as f,me as h,jT as i,OT as l,ge as m,LT as n,NT as o,qs as p,RT as r,FT as s,mE as t,ic as u};
300
+ `).trimEnd()})}function JT({entries:e}){return(0,T.jsx)(`div`,{className:`mb-5 overflow-hidden rounded-sm border border-border-soft bg-surface-raised/30`,children:(0,T.jsx)(`table`,{className:`m-0 w-full border-collapse text-left align-top`,children:(0,T.jsx)(`tbody`,{children:e.map((e,t)=>(0,T.jsxs)(`tr`,{className:t>0?`border-t border-border-soft/70`:void 0,children:[(0,T.jsx)(`th`,{scope:`row`,className:`w-px whitespace-nowrap border-r border-border-soft/70 bg-surface-raised/40 px-3 py-2 align-top font-sans text-[11px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.key}),(0,T.jsx)(`td`,{className:`px-3 py-2 align-top font-mono text-[12px] text-text`,children:e.block?(0,T.jsx)(qT,{block:e.block}):(0,T.jsx)(`span`,{className:`break-words`,children:e.value})})]},e.key+t))})})})}function YT({src:e,alt:t}){let[n,r]=(0,w.useState)(!1),i=(0,w.useRef)(null),a=(0,w.useRef)(null),o=(0,w.useCallback)(()=>{a.current=document.activeElement instanceof HTMLElement?document.activeElement:null,r(!0)},[]),s=(0,w.useCallback)(()=>{r(!1)},[]);return(0,w.useEffect)(()=>{if(!n)return;function e(e){e.key===`Escape`?s():e.key===`Tab`&&(e.preventDefault(),i.current?.focus())}return i.current?.focus(),document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e),a.current?.focus()}},[s,n]),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`img`,{src:e,alt:t,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},role:`button`,tabIndex:0,"aria-label":t?`Open image: ${t}`:`Open image`,className:`max-w-full cursor-zoom-in rounded`}),n&&(0,T.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":t?`Image preview: ${t}`:`Image preview`,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-4`,onClick:s,children:[(0,T.jsx)(`button`,{ref:i,onClick:e=>{e.stopPropagation(),s()},"aria-label":`Close image preview`,title:`Close`,className:`chrome absolute right-4 top-4 flex min-h-[44px] min-w-[44px] items-center justify-center rounded-sm bg-black/40 text-white transition-colors hover:bg-black/60 focus-visible:bg-black/60`,children:(0,T.jsx)(m,{className:`h-4 w-4`})}),(0,T.jsx)(`img`,{src:e,alt:t,className:`max-h-full max-w-full object-contain`,onClick:e=>e.stopPropagation()}),t&&(0,T.jsx)(`div`,{className:`chrome absolute bottom-4 left-4 right-4 rounded-sm bg-black/45 px-3 py-2 text-center text-[12px] text-white/85`,children:t})]})]})}var XT=null;function ZT(){return XT||=v(async()=>{let{default:e}=await import(`./mermaid.core-BuF6DZFs.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,theme:`neutral`,htmlLabels:!1,flowchart:{htmlLabels:!1}}),e)),XT}function QT(e){return qs.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`foreignObject`,`img`,`image`,`script`,`iframe`,`object`,`embed`,`a`,`audio`,`video`,`source`,`link`,`base`],FORBID_ATTR:[`href`,`xlink:href`,`src`,`onerror`,`onload`,`onclick`]})}function $T({code:e}){let t=(0,w.useId)(),[n,r]=(0,w.useState)({svg:null,failed:!1});(0,w.useEffect)(()=>{let n=!1,i=`mermaid-${t.replace(/[^a-zA-Z0-9_-]/g,``)}`;return ZT().then(t=>t.render(i,e)).then(({svg:e})=>{n||r({svg:e,failed:!1})}).catch(()=>{n||r({svg:null,failed:!0})}),()=>{n=!0}},[e,t]);let{svg:i,failed:a}=n;return a?(0,T.jsx)(`pre`,{className:`font-mono text-[0.82em] leading-[1.55] text-text-muted`,style:{background:`transparent`,margin:0},children:e}):i===null?(0,T.jsx)(`div`,{className:`px-3 py-4 text-[0.82em] text-text-subtle`,children:`Rendering diagram…`}):(0,T.jsx)(`div`,{className:`flex justify-center overflow-x-auto px-3 py-3 [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:QT(i)}})}var eE={note:{label:`Note`,Icon:le},tip:{label:`Tip`,Icon:e},important:{label:`Important`,Icon:fe},warning:{label:`Warning`,Icon:b},caution:{label:`Caution`,Icon:pe}},tE=/^\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]/i;function nE(e){let t=Array.isArray(e)?e:typeof e==`string`?e.split(/\s+/):[];if(!t.includes(`markdown-alert`))return null;for(let e of Object.keys(eE))if(t.includes(`markdown-alert-${e}`))return e;return null}function rE(){function e(e){let t=e.children?.find(e=>e.type===`element`&&e.tagName===`p`),n=t?.children?.[0];if(!t||!n||n.type!==`text`||typeof n.value!=`string`)return;let r=tE.exec(n.value);if(!r)return;let i=r[1].toLowerCase(),a=n.value.slice(r[0].length).replace(/^[^\S\n]*\n?/,``);if(a)n.value=a;else{t.children.shift();let n=t.children[0];(n&&n.type===`text`&&typeof n.value==`string`&&/^\s+$/.test(n.value)||n&&n.type===`element`&&n.tagName===`br`)&&t.children.shift(),t.children.length===0&&(e.children=e.children.filter(e=>e!==t))}e.properties=e.properties??{},e.properties.className=[`markdown-alert`,`markdown-alert-${i}`]}function t(n){if(n.children)for(let r of n.children)r.type===`element`&&r.tagName===`blockquote`&&e(r),t(r)}return e=>t(e)}function iE(e,t){if(!e||e.startsWith(`#`)||/^[a-z][a-z\d+\-.]*:/i.test(e))return null;try{let n=new URL(e,`http://x/${t}`);if(n.host!==`x`)return null;let r=n.pathname.slice(1);return r?{path:r,hash:n.hash}:null}catch{return null}}function aE(e,t,n){if(!e||/^[a-z][a-z\d+\-.]*:/i.test(e)||e.startsWith(`#`)||e.startsWith(`/`))return e;let r=iE(e,n);return r?t(r.path):e}function oE(e){if(typeof e!=`string`||e.trim()===``)return!0;if(/prefers-color-scheme:\s*dark/i.test(e))return!1;if(/prefers-color-scheme:\s*light/i.test(e))return!0;if(typeof window<`u`&&typeof window.matchMedia==`function`)try{return window.matchMedia(e).matches}catch{return!0}return!0}function sE(e,t,n){let r=Array.isArray(e)?e.join(`, `):typeof e==`string`?e:``;if(r)return r.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let[r,...i]=e.split(/\s+/);return[aE(r,t,n),...i].join(` `).trim()}).join(`, `)}function cE(e){return w.Children.toArray(e).map(e=>typeof e==`string`?e:(0,w.isValidElement)(e)?cE(e.props.children):``).join(``)}function lE(e,t){return function({children:n,node:r,className:i,...a}){let o=r?.position?.start?.line,s=(typeof o==`number`?t.get(o):void 0)??ST(cE(n));return(0,T.jsxs)(e,{...a,id:s,onClick:()=>{TT(s)},className:[`group relative cursor-pointer`,i].filter(Boolean).join(` `),children:[(0,T.jsx)(AT,{id:s}),n]})}}function uE(e){return{h1:lE(`h1`,e),h2:lE(`h2`,e),h3:lE(`h3`,e),h4:lE(`h4`,e),h5:lE(`h5`,e),h6:lE(`h6`,e)}}var dE=[`div`,`p`,`span`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`td`,`th`],fE={...lw,tagNames:[...lw.tagNames??[],`picture`,`source`,`details`,`summary`],attributes:{...lw.attributes,source:[`srcSet`,`srcset`,`media`,`type`,`sizes`,`width`,`height`],img:[...lw.attributes?.img??[],`align`,`width`,`height`,`loading`],details:[...lw.attributes?.details??[],`open`],blockquote:[...lw.attributes?.blockquote??[],[`className`,`markdown-alert`,`markdown-alert-note`,`markdown-alert-tip`,`markdown-alert-important`,`markdown-alert-warning`,`markdown-alert-caution`]],...Object.fromEntries(dE.map(e=>[e,[...lw.attributes?.[e]??[],`align`]]))}};function pE(e,t){return function({href:n,children:r,...i}){let o=a();if(!n||n.startsWith(`#`))return(0,T.jsx)(`a`,{href:n,...i,children:r});if(/^[a-z][a-z\d+\-.]*:/i.test(n))return(0,T.jsx)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,...i,children:r});let s=iE(n,t);if(!s)return(0,T.jsx)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,...i,children:r});let c=e.browsePath(s.path)+s.hash;return(0,T.jsx)(`a`,{href:c,onClick:e=>{e.preventDefault(),o(c)},...i,children:r})}}function mE({id:e,filePath:t,file:n,loading:r,error:a,links:o,mode:s,onModeChange:c}){let l=(0,w.useMemo)(()=>o??{rawPath:t=>i(e,t),browsePath:t=>ne({id:e,filePath:t})},[o,e]),u=l.rawPath(t),p=(0,w.useRef)(null),{entries:m,body:h}=(0,w.useMemo)(()=>n?.kind!==`markdown`||!n.content?{entries:null,body:``}:GT(n.content),[n]),g=(0,w.useMemo)(()=>n?.kind!==`markdown`||!h?[]:ET(h),[n,h]),_=(0,w.useMemo)(()=>new Map(g.map(e=>[e.line,e.id])),[g]),[v,y]=(0,w.useState)(null),b=g.length>=3,x=g.length?Math.min(...g.map(e=>e.depth)):1,[S,ee]=(0,w.useState)(()=>OT(window.location.hash)?`code`:LT()),te=s!==void 0&&c!==void 0,C=te?s:S,re=(0,w.useCallback)(e=>{te&&c?c(e):(ee(e),RT(e))},[te,c]),ie=n?.kind===`markdown`&&C===`code`,ae=(0,w.useRef)(null),oe=(0,w.useCallback)(e=>{ae.current={id:e,until:Date.now()+2e3}},[]);(0,w.useEffect)(()=>{if(n?.kind!==`markdown`||C!==`preview`)return;let e=window.location.hash.slice(1);if(!e)return;let t=document.getElementById(e);if(t){oe(e);let n=setTimeout(()=>{g.some(t=>t.id===e)&&y(e),t.scrollIntoView({behavior:`smooth`})},100);return()=>clearTimeout(n)}},[n,C,g,oe]),(0,w.useEffect)(()=>{if(n?.kind!==`markdown`||C!==`preview`)return;let e=p.current;if(!e)return;let t=e,r=()=>Array.from(t.querySelectorAll(`h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]`)),i=0;function a(e){i=0;let n=r();if(n.length===0)return;let a=t.getBoundingClientRect().top+24,o=n[0];for(let e of n)if(e.getBoundingClientRect().top<=a)o=e;else break;if(!o?.id)return;let s=ae.current;if(s&&Date.now()<s.until){if(o.id!==s.id)return;ae.current=null}else ae.current=null;e&&TT(o.id),y(o.id)}function o(){i||=window.requestAnimationFrame(()=>a(!0))}let s=window.location.hash.slice(1);return(!s||!r().some(e=>e.id===s))&&(i=window.requestAnimationFrame(()=>a(!1))),t.addEventListener(`scroll`,o,{passive:!0}),()=>{t.removeEventListener(`scroll`,o),i&&window.cancelAnimationFrame(i)}},[n,C]);let se=(0,w.useMemo)(()=>({a:pE(l,t),...uE(_),img:({src:e,alt:n})=>{let r=e??``;if(r&&!/^[a-z][a-z\d+\-.]*:/i.test(r)&&!r.startsWith(`#`)){let e=iE(r,t);e&&(r=l.rawPath(e.path))}return(0,T.jsx)(YT,{src:r,alt:n??``})},picture:({node:e})=>{let n=null,r=null;for(let i of e?.children??[]){if(i.type!==`element`)continue;let e=i.properties??{};if(i.tagName===`source`&&!n&&oE(e.media)){let r=sE(e.srcSet??e.srcset,l.rawPath,t),i=r?r.split(`,`)[0]?.trim().split(/\s+/)[0]:``;i&&(n=i)}else i.tagName===`img`&&!r&&(r={src:aE(typeof e.src==`string`?e.src:``,l.rawPath,t),alt:typeof e.alt==`string`?e.alt:``,width:e.width==null?void 0:String(e.width)})}let i=n??r?.src;return i?(0,T.jsx)(`img`,{src:i,alt:r?.alt??``,width:r?.width,className:`inline-block h-auto max-w-full`}):null},blockquote:({node:e,children:t,...n})=>{let r=nE(e?.properties?.className);if(!r)return(0,T.jsx)(`blockquote`,{...n,children:t});let{label:i,Icon:a}=eE[r];return(0,T.jsxs)(`blockquote`,{className:`markdown-alert markdown-alert-${r}`,children:[(0,T.jsxs)(`p`,{className:`markdown-alert-title`,children:[(0,T.jsx)(a,{className:`h-4 w-4 shrink-0`,strokeWidth:2,"aria-hidden":`true`}),i]}),t]})},table:({children:e,...t})=>(0,T.jsx)(`div`,{className:`overflow-x-auto`,children:(0,T.jsx)(`table`,{...t,children:e})}),pre:({children:e})=>{let t=cE(e),n=``,r=w.Children.toArray(e)[0];if((0,w.isValidElement)(r)){let e=(r.props.className??``).match(/language-(\S+)/);e&&(n=e[1])}return n===`mermaid`?(0,T.jsxs)(`div`,{className:`kb-markdown-code-block group`,children:[(0,T.jsxs)(`div`,{className:`chrome flex min-h-9 items-center justify-between gap-2 border-b border-border-soft/70 bg-surface-raised/45 px-2 py-1`,children:[(0,T.jsx)(`span`,{className:`rounded-sm px-1.5 py-0.5 text-[10px] uppercase tracking-wider text-text-subtle`,children:`mermaid`}),(0,T.jsx)(kT,{text:t,variant:`inline`})]}),(0,T.jsx)($T,{code:t.replace(/\n$/,``)})]}):(0,T.jsxs)(`div`,{className:`kb-markdown-code-block group`,children:[(0,T.jsxs)(`div`,{className:`chrome flex min-h-9 items-center justify-between gap-2 border-b border-border-soft/70 bg-surface-raised/45 px-2 py-1`,children:[n?(0,T.jsx)(`span`,{className:`rounded-sm px-1.5 py-0.5 text-[10px] uppercase tracking-wider text-text-subtle`,children:n}):(0,T.jsx)(`span`,{"aria-hidden":`true`}),(0,T.jsx)(kT,{text:t,variant:`inline`})]}),(0,T.jsx)(xT,{code:t.replace(/\n$/,``),language:n||`text`,theme:Ww.github,children:({className:e,style:t,tokens:n,getLineProps:r,getTokenProps:i})=>(0,T.jsx)(`pre`,{className:`${e} font-mono text-[0.82em] leading-[1.55]`,style:{...t,background:`transparent`,margin:0},children:n.map((e,t)=>(0,T.jsx)(`div`,{...r({line:e}),children:e.map((e,t)=>(0,T.jsx)(`span`,{...i({token:e})},t))},t))})})]})}}),[_,l,t]);if(a)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-health-error`,children:[`Could not open `,(0,T.jsx)(`span`,{className:`font-mono`,children:t}),`: `,a.message]});if(r||!n)return(0,T.jsx)(`div`,{className:`p-6 font-sans text-[13px] text-text-subtle`,children:`Loading…`});if(n.kind===`html`)return(0,T.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,T.jsx)(`div`,{className:`flex h-8 shrink-0 items-center justify-end border-b border-border-soft px-3`,children:(0,T.jsxs)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,title:`Open the full-width report in a new tab`,className:`chrome flex items-center gap-1 rounded-sm px-2 py-0.5 text-[10px] uppercase tracking-[0.08em] text-text-subtle transition-colors hover:bg-surface-elevated hover:text-text-muted`,children:[(0,T.jsx)(f,{className:`h-3 w-3`}),`Open full page`]})}),(0,T.jsx)(`iframe`,{title:n.name,src:u,sandbox:`allow-scripts`,className:`min-h-0 w-full flex-1 border-0 bg-white`})]});if(n.kind===`image`)return(0,T.jsx)(`div`,{className:`flex h-full flex-col`,children:(0,T.jsx)(`div`,{className:`flex flex-1 items-center justify-center overflow-auto bg-surface-elevated/30 p-6`,children:(0,T.jsx)(YT,{src:u,alt:n.name})})});if(n.truncated)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-text-muted`,children:[`This file is too large to inline (`,d(n.size),`).`,` `,(0,T.jsx)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,className:`text-accent underline underline-offset-2`,children:`Open raw`})]});if(n.kind===`binary`||n.content===void 0)return(0,T.jsxs)(`div`,{className:`p-6 font-sans text-[13px] text-text-muted`,children:[`Binary file (`,d(n.size),`).`,` `,(0,T.jsx)(`a`,{href:u,target:`_blank`,rel:`noreferrer`,className:`text-accent underline underline-offset-2`,children:`Open raw`})]});if(n.kind===`markdown`)return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[!te&&(0,T.jsx)(`div`,{className:`flex h-9 shrink-0 items-center justify-end border-b border-border-soft px-3`,children:(0,T.jsx)(FT,{mode:C,onChange:re})}),ie?(0,T.jsx)(HT,{body:n.content,language:`markdown`}):(0,T.jsx)(`div`,{ref:p,className:`@container min-h-0 flex-1 overflow-y-auto px-6 py-6 md:px-10 md:py-10`,children:(0,T.jsxs)(`div`,{className:[`mx-auto flex w-full max-w-[1024px] gap-12`,b?`@min-[1372px]:max-w-[1292px]`:``].join(` `),children:[(0,T.jsxs)(`div`,{className:`w-full min-w-0 max-w-[1024px] flex-1`,children:[m&&(0,T.jsx)(JT,{entries:m}),(0,T.jsx)(`div`,{className:`md-prose`,children:(0,T.jsx)(Um,{remarkPlugins:[Y_,sv,uv],rehypePlugins:[xC,rE,[Ew,fE],sw],components:se,children:h})})]}),b&&(0,T.jsxs)(`nav`,{"aria-label":`On this page`,className:`sticky top-2 hidden w-[220px] shrink-0 self-start @min-[1372px]:block`,children:[(0,T.jsx)(`div`,{className:`chrome mb-3 text-[11px] uppercase tracking-[0.14em] text-text-muted`,children:`On this page`}),(0,T.jsx)(`ul`,{className:`space-y-2 border-l border-border-soft pl-3`,children:g.map(e=>(0,T.jsx)(`li`,{children:(0,T.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),oe(e.id),document.getElementById(e.id)?.scrollIntoView({behavior:`smooth`}),TT(e.id),y(e.id)},className:[`block truncate font-sans text-[14px] leading-snug transition-colors`,v===e.id?`text-accent`:`text-text-muted hover:text-text`].join(` `),style:{paddingLeft:`${(e.depth-x)*12}px`},children:e.text})},`${e.id}-${e.line}`))})]})]})})]});let ce=n.kind===`json`?`json`:n.language??`text`,le=n.content;if(n.kind===`json`)try{le=JSON.stringify(JSON.parse(n.content),null,2)}catch{}return(0,T.jsx)(HT,{body:le,language:ce})}export{MT as a,ET as c,ac as d,$s as f,me as h,jT as i,OT as l,ge as m,LT as n,NT as o,qs as p,RT as r,FT as s,mE as t,ic as u};