@markus-global/cli 0.9.3 → 0.9.4

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 (64) hide show
  1. package/dist/commands/start.d.ts.map +1 -1
  2. package/dist/commands/start.js +4 -0
  3. package/dist/commands/start.js.map +1 -1
  4. package/dist/markus.mjs +310 -109
  5. package/dist/web-ui/assets/{CommentInput-BaiGciCW.js → CommentInput-C4c__bEq.js} +1 -1
  6. package/dist/web-ui/assets/{ContentRenderer-BHP-QQl1.js → ContentRenderer-C3AbrVxu.js} +2 -2
  7. package/dist/web-ui/assets/{Deliverables-CxmSjC62.js → Deliverables-CaVRG9uL.js} +1 -1
  8. package/dist/web-ui/assets/{Notifications-DN71_xBe.js → Notifications-Dhiofjhs.js} +1 -1
  9. package/dist/web-ui/assets/{Search-BehRlzl9.js → Search-D3CaLHxp.js} +1 -1
  10. package/dist/web-ui/assets/{Settings-DACkioN7.js → Settings-DIgsyjyV.js} +1 -1
  11. package/dist/web-ui/assets/{Store-vbX7udKk.js → Store-CI404nno.js} +1 -1
  12. package/dist/web-ui/assets/{Team-fYRACN64.js → Team-Cl0ifhel.js} +4 -4
  13. package/dist/web-ui/assets/{Work-CsRMLGyO.js → Work-fzTyK5Bb.js} +1 -1
  14. package/dist/web-ui/assets/{arc-CkYEFYhN.js → arc-WeT_hy0W.js} +1 -1
  15. package/dist/web-ui/assets/{architectureDiagram-3BPJPVTR-DidH7EEL.js → architectureDiagram-3BPJPVTR-BCVvz19o.js} +1 -1
  16. package/dist/web-ui/assets/{blockDiagram-GPEHLZMM-Dfyl794X.js → blockDiagram-GPEHLZMM-Bu6Xf8R8.js} +1 -1
  17. package/dist/web-ui/assets/{c4Diagram-AAUBKEIU-DJ8uivTJ.js → c4Diagram-AAUBKEIU-CNXRbDz0.js} +1 -1
  18. package/dist/web-ui/assets/channel-CgQ1452y.js +1 -0
  19. package/dist/web-ui/assets/{chunk-2J33WTMH-r6qd3avZ.js → chunk-2J33WTMH-zowauCer.js} +1 -1
  20. package/dist/web-ui/assets/{chunk-4BX2VUAB-JGVVxl3S.js → chunk-4BX2VUAB-CtdE-N9t.js} +1 -1
  21. package/dist/web-ui/assets/{chunk-55IACEB6-DrqEO6pb.js → chunk-55IACEB6-CtcDguaE.js} +1 -1
  22. package/dist/web-ui/assets/{chunk-727SXJPM-BEvPkInC.js → chunk-727SXJPM-vkstXMAh.js} +1 -1
  23. package/dist/web-ui/assets/{chunk-AQP2D5EJ-nY9-IZSQ.js → chunk-AQP2D5EJ-CGQQxJGx.js} +1 -1
  24. package/dist/web-ui/assets/{chunk-FMBD7UC4-B2X9_WVL.js → chunk-FMBD7UC4-P_DVWxcv.js} +1 -1
  25. package/dist/web-ui/assets/{chunk-ND2GUHAM-hAHQCUDr.js → chunk-ND2GUHAM-BoDcRFNz.js} +1 -1
  26. package/dist/web-ui/assets/{chunk-QZHKN3VN-BpSI5bvk.js → chunk-QZHKN3VN-UpP-oGbp.js} +1 -1
  27. package/dist/web-ui/assets/classDiagram-4FO5ZUOK-cyuFA4TK.js +1 -0
  28. package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-cyuFA4TK.js +1 -0
  29. package/dist/web-ui/assets/{cose-bilkent-S5V4N54A-CisI94Jk.js → cose-bilkent-S5V4N54A-CoxnfYwV.js} +1 -1
  30. package/dist/web-ui/assets/{dagre-BM42HDAG-CzXJLJs_.js → dagre-BM42HDAG-C-_qqM-2.js} +1 -1
  31. package/dist/web-ui/assets/{diagram-2AECGRRQ-HbWovRxT.js → diagram-2AECGRRQ-Dq4gNWvg.js} +1 -1
  32. package/dist/web-ui/assets/{diagram-5GNKFQAL-Wh4LwHDk.js → diagram-5GNKFQAL-Di6LUbag.js} +1 -1
  33. package/dist/web-ui/assets/{diagram-KO2AKTUF-bVFH4Uh0.js → diagram-KO2AKTUF-DJUoGsAO.js} +1 -1
  34. package/dist/web-ui/assets/{diagram-LMA3HP47-D-y5-DUp.js → diagram-LMA3HP47-DocVuWYa.js} +1 -1
  35. package/dist/web-ui/assets/{diagram-OG6HWLK6-DQn31vSY.js → diagram-OG6HWLK6-YteSCE_B.js} +1 -1
  36. package/dist/web-ui/assets/{erDiagram-TEJ5UH35-B2tUGLya.js → erDiagram-TEJ5UH35-BBusZqGh.js} +1 -1
  37. package/dist/web-ui/assets/{flowDiagram-I6XJVG4X-aljCbWZ3.js → flowDiagram-I6XJVG4X-BvvWdmCF.js} +1 -1
  38. package/dist/web-ui/assets/{ganttDiagram-6RSMTGT7-C5nFi9-r.js → ganttDiagram-6RSMTGT7-D7n83rg1.js} +1 -1
  39. package/dist/web-ui/assets/{gitGraphDiagram-PVQCEYII-_thR_kyI.js → gitGraphDiagram-PVQCEYII-Br__nsx4.js} +1 -1
  40. package/dist/web-ui/assets/{index-DipPqBFp.js → index-CDGrYm4a.js} +7 -7
  41. package/dist/web-ui/assets/{infoDiagram-5YYISTIA-CVAuHVqP.js → infoDiagram-5YYISTIA-Bug574VW.js} +1 -1
  42. package/dist/web-ui/assets/{ishikawaDiagram-YF4QCWOH-zFca2XEY.js → ishikawaDiagram-YF4QCWOH-BQRJpWeM.js} +1 -1
  43. package/dist/web-ui/assets/{journeyDiagram-JHISSGLW-DlmhvDWu.js → journeyDiagram-JHISSGLW-BcuTNZHZ.js} +1 -1
  44. package/dist/web-ui/assets/{kanban-definition-UN3LZRKU-qgul2AZY.js → kanban-definition-UN3LZRKU-CmfyD4gt.js} +1 -1
  45. package/dist/web-ui/assets/{mermaid.core-Bz8NDw6F.js → mermaid.core-DCGJ6Yif.js} +5 -5
  46. package/dist/web-ui/assets/{mindmap-definition-RKZ34NQL-C8lzYJ-U.js → mindmap-definition-RKZ34NQL-Dc732LSM.js} +1 -1
  47. package/dist/web-ui/assets/{pieDiagram-4H26LBE5-CNefdc8U.js → pieDiagram-4H26LBE5-B5QXo63M.js} +1 -1
  48. package/dist/web-ui/assets/{quadrantDiagram-W4KKPZXB-hy2G_8sj.js → quadrantDiagram-W4KKPZXB-dltvEmWO.js} +1 -1
  49. package/dist/web-ui/assets/{requirementDiagram-4Y6WPE33-D_Yf2oYz.js → requirementDiagram-4Y6WPE33-hquMkJIg.js} +1 -1
  50. package/dist/web-ui/assets/{sankeyDiagram-5OEKKPKP-D9LXC3WW.js → sankeyDiagram-5OEKKPKP-BxAGluXl.js} +1 -1
  51. package/dist/web-ui/assets/{sequenceDiagram-3UESZ5HK-B2MTe0br.js → sequenceDiagram-3UESZ5HK-B4MF-94i.js} +1 -1
  52. package/dist/web-ui/assets/{stateDiagram-AJRCARHV-C3vkopIl.js → stateDiagram-AJRCARHV-C1bLRYZl.js} +1 -1
  53. package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-DAoY1cQp.js +1 -0
  54. package/dist/web-ui/assets/{timeline-definition-PNZ67QCA-C3Pm0-dr.js → timeline-definition-PNZ67QCA-BWIogZck.js} +1 -1
  55. package/dist/web-ui/assets/{vennDiagram-CIIHVFJN-BqMHe4cb.js → vennDiagram-CIIHVFJN-D1dMEYNI.js} +1 -1
  56. package/dist/web-ui/assets/{wardley-L42UT6IY-WX37pf9e.js → wardley-L42UT6IY-B7PrCpui.js} +1 -1
  57. package/dist/web-ui/assets/{wardleyDiagram-YWT4CUSO-BXaXNc3h.js → wardleyDiagram-YWT4CUSO-BnepdOhb.js} +1 -1
  58. package/dist/web-ui/assets/{xychartDiagram-2RQKCTM6-QNJQqpdG.js → xychartDiagram-2RQKCTM6-DC6jHTfT.js} +1 -1
  59. package/dist/web-ui/index.html +1 -1
  60. package/package.json +1 -1
  61. package/dist/web-ui/assets/channel-Dis64XIP.js +0 -1
  62. package/dist/web-ui/assets/classDiagram-4FO5ZUOK-uL-MmcmF.js +0 -1
  63. package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-uL-MmcmF.js +0 -1
  64. package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-CpqVKXYT.js +0 -1
package/dist/markus.mjs CHANGED
@@ -5074,7 +5074,7 @@ function clampHeartbeatIntervalMs(ms) {
5074
5074
  return DEFAULT_HEARTBEAT_INTERVAL_MS;
5075
5075
  return Math.max(MIN_HEARTBEAT_INTERVAL_MS, Math.min(MAX_HEARTBEAT_INTERVAL_MS, Math.round(ms)));
5076
5076
  }
5077
- var TASK_GET_NOTES_DEFAULT, TASK_GET_DELIVERABLES_DEFAULT, TASK_GET_STATUS_HISTORY_DEFAULT, REQUIREMENT_LIST_DEFAULT, ENTITY_COMMENTS_DEFAULT, PROMPT_TASK_NOTES_MAX, PROMPT_TASK_NOTE_CHARS, PROMPT_DEP_NOTES_MAX, PROMPT_DEP_NOTE_CHARS, PROMPT_DEP_DESC_CHARS, PROMPT_EXECUTION_ROUNDS_MAX, PROMPT_LOG_ENTRY_CHARS, PROMPT_RECENT_ERRORS_MAX, PROMPT_HUMAN_COMMENTS_MAX, REVIEWER_NOTES_MAX, SYSTEM_MY_TASKS_MAX, SYSTEM_TEAM_TASKS_MAX, SYSTEM_TASK_DESC_CHARS, PROMPT_PROJECT_DESC_CHARS, PROMPT_REQUIREMENT_DESC_CHARS, REVIEWER_FILE_LIST_MAX, DELIVERABLE_TITLE_CHARS, REVISION_REASON_CHARS, TASK_MAX_RETRIES, MAILBOX_ITEM_MAX_RETRIES, COMPLETION_MARKER, COMPLETION_MARKER_INSTRUCTION, COMPLETION_MARKER_LEAK_RE, TASK_MAX_NO_SUBMIT_RETRIES, TASK_RETRY_DELAYS_MS, PREEMPT_REQUEUE_DELAY_MS, SYSTEM_KNOWLEDGE_CHARS, SYSTEM_SOPS_CHARS, SYSTEM_LONGTERM_MEMORY_CHARS, MEMORY_MD_SECTION_MAX_CHARS, MEMORY_MD_TOTAL_MAX_CHARS, SYSTEM_LESSON_ENTRIES_MAX, SYSTEM_BEST_PRACTICE_ENTRIES_MAX, SYSTEM_DELIVERABLES_CHARS, SYSTEM_DAILY_LOG_CHARS, SYSTEM_DAILY_LOG_DAYS, SYSTEM_USER_PROFILE_CHARS, SYSTEM_CHAT_SESSIONS_MAX, HEARTBEAT_DAILY_LOG_CHARS, SYSTEM_PROJECT_DESC_CHARS, SYSTEM_DELIVERABLE_PREVIEW_CHARS, SYSTEM_MAILBOX_MERGED_CHARS, SYSTEM_MAILBOX_ITEM_PREVIEW_CHARS, TASK_LIST_PAGE_SIZE, TASK_LIST_PAGE_MAX, ARCHIVE_COMPLETED_AFTER_DAYS, ARCHIVE_TERMINAL_AFTER_DAYS, ARCHIVE_REQUIREMENT_AFTER_DAYS, ARCHIVE_SCAN_INTERVAL_MS, CHANNEL_CONTEXT_MESSAGES, MAILBOX_QUEUED_TTL_MS, MAILBOX_COALESCE_WINDOW_MS, MAILBOX_PROCESSING_TIMEOUT_MS, SSE_DISCONNECT_FORCE_STOP_MS, WATCHDOG_INTERVAL_MS, WATCHDOG_DRIFT_THRESHOLD_MS, TRIAGE_BACKLOG_THRESHOLD, TRIAGE_PROMPT_MAX_ITEMS, TRIAGE_MAX_TOKENS, TRIAGE_TEMPERATURE, TRIAGE_CONTEXT_MESSAGES_MAX, TRIAGE_CONTEXT_MSG_CHARS, TRIAGE_ITEM_CONTENT_CHARS, TRIAGE_STALE_INFO_TTL_MS, TRIAGE_STALE_DROP_TYPES, TRIAGE_MAX_TOOL_ITERATIONS, TRIAGE_ALLOWED_TOOLS, DELIBERATION_ALLOWED_TOOLS, DEFAULT_HEARTBEAT_INTERVAL_MS, MIN_HEARTBEAT_INTERVAL_MS, MAX_HEARTBEAT_INTERVAL_MS, NOTEBOOK_MAX_AGENT_ENTRIES, NOTEBOOK_MAX_CHARS_PER_ENTRY, WORKING_MEMORY_MAX_ENTRIES, WORKING_MEMORY_MAX_CHARS, SUBAGENT_TASK_PREVIEW_CHARS, SUBAGENT_THINKING_PREVIEW_CHARS, SUBAGENT_RESULT_PREVIEW_CHARS, SUBAGENT_LOG_ENTRY_CHARS, SUBAGENT_ERROR_PREVIEW_CHARS, SUBAGENT_MAX_PARALLEL, SUBAGENT_MAX_AGGREGATE_ITERATIONS, SUBAGENT_MAX_LLM_RETRIES, SUBAGENT_RETRY_BASE_MS, SHELL_TIMEOUT_DEFAULT_MS, SHELL_TIMEOUT_MAX_MS, SHELL_MAX_SESSIONS_PER_AGENT, SHELL_SESSION_IDLE_TIMEOUT_MS, SHELL_SESSION_MAX_OUTPUT_BYTES, APPROVAL_WAIT_TIMEOUT_MS, HEARTBEAT_MIN_INITIAL_DELAY_MS, HEARTBEAT_STARTUP_JITTER_MS, LLM_CIRCUIT_RESET_RATE_LIMIT_MS, SESSION_STORAGE_COMPACT_TRIGGER, SESSION_STORAGE_COMPACT_KEEP, SESSION_STORAGE_TOOL_SHRINK_CHARS, CONTEXT_ABSURD_MESSAGE_CHARS, CONTEXT_PROACTIVE_COMPACT_RATIO, SESSION_RESTORE_MAX_MESSAGES, SESSION_RESTORE_MAX_MESSAGE_TOKENS, TOOL_RESULT_OFFLOAD_CHARS, SYSTEM_COLLEAGUES_MAX, SYSTEM_OTHER_TEAMS_MAX, SYSTEM_OTHER_TEAM_MEMBERS_MAX, SYSTEM_HUMANS_MAX, PROMPT_AFFORD_OUTPUT_RESERVE, TOOL_DEF_BUDGET_REFLEX, TOOL_DEF_BUDGET_CONVERSE, TOOL_DEF_BUDGET_EXECUTE, TOOL_DEF_BUDGET_GOVERN, ROLE_PROMPT_MAX_TOKENS, KNOWLEDGE_PROMPT_MAX_TOKENS, KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX, STATE_PROMPT_MAX_LINES_REFLEX, STATE_TTL_DAYS, COLD_CONVERSE_FIXED_MAX, COLD_REFLEX_FIXED_MAX, SYSTEM_PROMPT_BUDGET_CONVERSE, DEFERRED_CATALOG_MAX_CHARS, MAX_TOKENS_AFFORD_SAFETY, MAX_TOKENS_REMAINING_MARGIN, MAX_TOKENS_CLAMP_FLOOR, DEEP_SLEEP_IDLE_HEARTBEATS, SUBTASK_SOFT_CAP, PROMPT_AFFORD_SAFETY_MARGIN, LLM_MAX_CONCURRENT_PER_PROVIDER, LLM_CONCURRENCY_JITTER_BASE_MS;
5077
+ var TASK_GET_NOTES_DEFAULT, TASK_GET_DELIVERABLES_DEFAULT, TASK_GET_STATUS_HISTORY_DEFAULT, REQUIREMENT_LIST_DEFAULT, ENTITY_COMMENTS_DEFAULT, PROMPT_TASK_NOTES_MAX, PROMPT_TASK_NOTE_CHARS, PROMPT_DEP_NOTES_MAX, PROMPT_DEP_NOTE_CHARS, PROMPT_DEP_DESC_CHARS, PROMPT_EXECUTION_ROUNDS_MAX, PROMPT_LOG_ENTRY_CHARS, PROMPT_RECENT_ERRORS_MAX, PROMPT_HUMAN_COMMENTS_MAX, REVIEWER_NOTES_MAX, SYSTEM_MY_TASKS_MAX, SYSTEM_TEAM_TASKS_MAX, SYSTEM_TASK_DESC_CHARS, PROMPT_PROJECT_DESC_CHARS, PROMPT_REQUIREMENT_DESC_CHARS, REVIEWER_FILE_LIST_MAX, DELIVERABLE_TITLE_CHARS, REVISION_REASON_CHARS, TASK_MAX_RETRIES, MAILBOX_ITEM_MAX_RETRIES, COMPLETION_MARKER, COMPLETION_MARKER_INSTRUCTION, COMPLETION_MARKER_LEAK_RE, TASK_MAX_NO_SUBMIT_RETRIES, TASK_RETRY_DELAYS_MS, PREEMPT_REQUEUE_DELAY_MS, SYSTEM_KNOWLEDGE_CHARS, SYSTEM_SOPS_CHARS, SYSTEM_LONGTERM_MEMORY_CHARS, MEMORY_MD_SECTION_MAX_CHARS, MEMORY_MD_TOTAL_MAX_CHARS, SYSTEM_LESSON_ENTRIES_MAX, SYSTEM_BEST_PRACTICE_ENTRIES_MAX, SYSTEM_DELIVERABLES_CHARS, SYSTEM_DAILY_LOG_CHARS, SYSTEM_DAILY_LOG_DAYS, SYSTEM_USER_PROFILE_CHARS, SYSTEM_CHAT_SESSIONS_MAX, HEARTBEAT_DAILY_LOG_CHARS, SYSTEM_PROJECT_DESC_CHARS, SYSTEM_DELIVERABLE_PREVIEW_CHARS, SYSTEM_MAILBOX_MERGED_CHARS, SYSTEM_MAILBOX_ITEM_PREVIEW_CHARS, TASK_LIST_PAGE_SIZE, TASK_LIST_PAGE_MAX, ARCHIVE_COMPLETED_AFTER_DAYS, ARCHIVE_TERMINAL_AFTER_DAYS, ARCHIVE_REQUIREMENT_AFTER_DAYS, ARCHIVE_SCAN_INTERVAL_MS, CHANNEL_CONTEXT_MESSAGES, MAILBOX_QUEUED_TTL_MS, MAILBOX_COALESCE_WINDOW_MS, MAILBOX_PROCESSING_TIMEOUT_MS, SSE_DISCONNECT_FORCE_STOP_MS, WATCHDOG_INTERVAL_MS, WATCHDOG_DRIFT_THRESHOLD_MS, TRIAGE_BACKLOG_THRESHOLD, TRIAGE_PROMPT_MAX_ITEMS, TRIAGE_MAX_TOKENS, TRIAGE_TEMPERATURE, TRIAGE_CONTEXT_MESSAGES_MAX, TRIAGE_CONTEXT_MSG_CHARS, TRIAGE_ITEM_CONTENT_CHARS, TRIAGE_STALE_INFO_TTL_MS, TRIAGE_STALE_DROP_TYPES, TRIAGE_MAX_TOOL_ITERATIONS, TRIAGE_ALLOWED_TOOLS, DELIBERATION_ALLOWED_TOOLS, DEFAULT_HEARTBEAT_INTERVAL_MS, MIN_HEARTBEAT_INTERVAL_MS, MAX_HEARTBEAT_INTERVAL_MS, NOTEBOOK_MAX_AGENT_ENTRIES, NOTEBOOK_MAX_CHARS_PER_ENTRY, WORKING_MEMORY_MAX_ENTRIES, WORKING_MEMORY_MAX_CHARS, SUBAGENT_TASK_PREVIEW_CHARS, SUBAGENT_THINKING_PREVIEW_CHARS, SUBAGENT_RESULT_PREVIEW_CHARS, SUBAGENT_LOG_ENTRY_CHARS, SUBAGENT_ERROR_PREVIEW_CHARS, SUBAGENT_MAX_PARALLEL, SUBAGENT_MAX_AGGREGATE_ITERATIONS, SUBAGENT_MAX_LLM_RETRIES, SUBAGENT_RETRY_BASE_MS, SHELL_TIMEOUT_DEFAULT_MS, SHELL_TIMEOUT_MAX_MS, SHELL_MAX_SESSIONS_PER_AGENT, SHELL_SESSION_IDLE_TIMEOUT_MS, SHELL_SESSION_MAX_OUTPUT_BYTES, APPROVAL_WAIT_TIMEOUT_MS, HEARTBEAT_MIN_INITIAL_DELAY_MS, HEARTBEAT_STARTUP_JITTER_MS, LLM_CIRCUIT_RESET_RATE_LIMIT_MS, SESSION_STORAGE_COMPACT_TRIGGER, SESSION_STORAGE_COMPACT_KEEP, SESSION_STORAGE_TOOL_SHRINK_CHARS, CONTEXT_ABSURD_MESSAGE_CHARS, CONTEXT_PROACTIVE_COMPACT_RATIO, SESSION_RESTORE_MAX_MESSAGES, SESSION_RESTORE_MAX_MESSAGE_TOKENS, TOOL_RESULT_OFFLOAD_CHARS, SYSTEM_COLLEAGUES_MAX, SYSTEM_OTHER_TEAMS_MAX, SYSTEM_OTHER_TEAM_MEMBERS_MAX, SYSTEM_HUMANS_MAX, PROMPT_AFFORD_OUTPUT_RESERVE, TOOL_DEF_BUDGET_REFLEX, TOOL_DEF_BUDGET_CONVERSE, TOOL_DEF_BUDGET_EXECUTE, TOOL_DEF_BUDGET_GOVERN, ROLE_PROMPT_MAX_TOKENS, KNOWLEDGE_PROMPT_MAX_TOKENS, KNOWLEDGE_PROMPT_MAX_TOKENS_CONVERSE, KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX, STATE_PROMPT_MAX_LINES_REFLEX, STATE_TTL_DAYS, COLD_CONVERSE_FIXED_MAX, COLD_REFLEX_FIXED_MAX, SYSTEM_PROMPT_BUDGET_CONVERSE, SYSTEM_ANNOUNCEMENTS_CHARS_CONVERSE, SYSTEM_NORMS_CHARS_CONVERSE, SYSTEM_ANNOUNCEMENTS_CHARS, SYSTEM_NORMS_CHARS, SYSTEM_WORKFLOWS_MAX_CONVERSE, SYSTEM_WORKFLOW_DESC_CHARS_CONVERSE, SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE, DEFERRED_CATALOG_MAX_CHARS, MAX_TOKENS_AFFORD_SAFETY, MAX_TOKENS_REMAINING_MARGIN, MAX_TOKENS_CLAMP_FLOOR, DEEP_SLEEP_IDLE_HEARTBEATS, SUBTASK_SOFT_CAP, PROMPT_AFFORD_SAFETY_MARGIN, LLM_MAX_CONCURRENT_PER_PROVIDER, LLM_CONCURRENCY_JITTER_BASE_MS;
5078
5078
  var init_limits = __esm({
5079
5079
  "../shared/dist/limits.js"() {
5080
5080
  "use strict";
@@ -5247,12 +5247,20 @@ var init_limits = __esm({
5247
5247
  TOOL_DEF_BUDGET_GOVERN = 8e3;
5248
5248
  ROLE_PROMPT_MAX_TOKENS = 2500;
5249
5249
  KNOWLEDGE_PROMPT_MAX_TOKENS = 1500;
5250
+ KNOWLEDGE_PROMPT_MAX_TOKENS_CONVERSE = 1e3;
5250
5251
  KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX = 0;
5251
5252
  STATE_PROMPT_MAX_LINES_REFLEX = 5;
5252
5253
  STATE_TTL_DAYS = 7;
5253
5254
  COLD_CONVERSE_FIXED_MAX = 12e3;
5254
5255
  COLD_REFLEX_FIXED_MAX = 8e3;
5255
5256
  SYSTEM_PROMPT_BUDGET_CONVERSE = 8e3;
5257
+ SYSTEM_ANNOUNCEMENTS_CHARS_CONVERSE = 400;
5258
+ SYSTEM_NORMS_CHARS_CONVERSE = 400;
5259
+ SYSTEM_ANNOUNCEMENTS_CHARS = 2e3;
5260
+ SYSTEM_NORMS_CHARS = 2e3;
5261
+ SYSTEM_WORKFLOWS_MAX_CONVERSE = 3;
5262
+ SYSTEM_WORKFLOW_DESC_CHARS_CONVERSE = 80;
5263
+ SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE = 800;
5256
5264
  DEFERRED_CATALOG_MAX_CHARS = 1500;
5257
5265
  MAX_TOKENS_AFFORD_SAFETY = 64;
5258
5266
  MAX_TOKENS_REMAINING_MARGIN = 500;
@@ -5379,6 +5387,7 @@ __export(dist_exports, {
5379
5387
  HEARTBEAT_MIN_INITIAL_DELAY_MS: () => HEARTBEAT_MIN_INITIAL_DELAY_MS,
5380
5388
  HEARTBEAT_STARTUP_JITTER_MS: () => HEARTBEAT_STARTUP_JITTER_MS,
5381
5389
  KNOWLEDGE_PROMPT_MAX_TOKENS: () => KNOWLEDGE_PROMPT_MAX_TOKENS,
5390
+ KNOWLEDGE_PROMPT_MAX_TOKENS_CONVERSE: () => KNOWLEDGE_PROMPT_MAX_TOKENS_CONVERSE,
5382
5391
  KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX: () => KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX,
5383
5392
  LLM_CIRCUIT_RESET_RATE_LIMIT_MS: () => LLM_CIRCUIT_RESET_RATE_LIMIT_MS,
5384
5393
  LLM_CONCURRENCY_JITTER_BASE_MS: () => LLM_CONCURRENCY_JITTER_BASE_MS,
@@ -5447,6 +5456,8 @@ __export(dist_exports, {
5447
5456
  SUBAGENT_TASK_PREVIEW_CHARS: () => SUBAGENT_TASK_PREVIEW_CHARS,
5448
5457
  SUBAGENT_THINKING_PREVIEW_CHARS: () => SUBAGENT_THINKING_PREVIEW_CHARS,
5449
5458
  SUBTASK_SOFT_CAP: () => SUBTASK_SOFT_CAP,
5459
+ SYSTEM_ANNOUNCEMENTS_CHARS: () => SYSTEM_ANNOUNCEMENTS_CHARS,
5460
+ SYSTEM_ANNOUNCEMENTS_CHARS_CONVERSE: () => SYSTEM_ANNOUNCEMENTS_CHARS_CONVERSE,
5450
5461
  SYSTEM_BEST_PRACTICE_ENTRIES_MAX: () => SYSTEM_BEST_PRACTICE_ENTRIES_MAX,
5451
5462
  SYSTEM_CHAT_SESSIONS_MAX: () => SYSTEM_CHAT_SESSIONS_MAX,
5452
5463
  SYSTEM_COLLEAGUES_MAX: () => SYSTEM_COLLEAGUES_MAX,
@@ -5454,6 +5465,7 @@ __export(dist_exports, {
5454
5465
  SYSTEM_DAILY_LOG_DAYS: () => SYSTEM_DAILY_LOG_DAYS,
5455
5466
  SYSTEM_DELIVERABLES_CHARS: () => SYSTEM_DELIVERABLES_CHARS,
5456
5467
  SYSTEM_DELIVERABLE_PREVIEW_CHARS: () => SYSTEM_DELIVERABLE_PREVIEW_CHARS,
5468
+ SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE: () => SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE,
5457
5469
  SYSTEM_HUMANS_MAX: () => SYSTEM_HUMANS_MAX,
5458
5470
  SYSTEM_KNOWLEDGE_CHARS: () => SYSTEM_KNOWLEDGE_CHARS,
5459
5471
  SYSTEM_LESSON_ENTRIES_MAX: () => SYSTEM_LESSON_ENTRIES_MAX,
@@ -5461,6 +5473,8 @@ __export(dist_exports, {
5461
5473
  SYSTEM_MAILBOX_ITEM_PREVIEW_CHARS: () => SYSTEM_MAILBOX_ITEM_PREVIEW_CHARS,
5462
5474
  SYSTEM_MAILBOX_MERGED_CHARS: () => SYSTEM_MAILBOX_MERGED_CHARS,
5463
5475
  SYSTEM_MY_TASKS_MAX: () => SYSTEM_MY_TASKS_MAX,
5476
+ SYSTEM_NORMS_CHARS: () => SYSTEM_NORMS_CHARS,
5477
+ SYSTEM_NORMS_CHARS_CONVERSE: () => SYSTEM_NORMS_CHARS_CONVERSE,
5464
5478
  SYSTEM_OTHER_TEAMS_MAX: () => SYSTEM_OTHER_TEAMS_MAX,
5465
5479
  SYSTEM_OTHER_TEAM_MEMBERS_MAX: () => SYSTEM_OTHER_TEAM_MEMBERS_MAX,
5466
5480
  SYSTEM_PROJECT_DESC_CHARS: () => SYSTEM_PROJECT_DESC_CHARS,
@@ -5469,6 +5483,8 @@ __export(dist_exports, {
5469
5483
  SYSTEM_TASK_DESC_CHARS: () => SYSTEM_TASK_DESC_CHARS,
5470
5484
  SYSTEM_TEAM_TASKS_MAX: () => SYSTEM_TEAM_TASKS_MAX,
5471
5485
  SYSTEM_USER_PROFILE_CHARS: () => SYSTEM_USER_PROFILE_CHARS,
5486
+ SYSTEM_WORKFLOWS_MAX_CONVERSE: () => SYSTEM_WORKFLOWS_MAX_CONVERSE,
5487
+ SYSTEM_WORKFLOW_DESC_CHARS_CONVERSE: () => SYSTEM_WORKFLOW_DESC_CHARS_CONVERSE,
5472
5488
  TASK_GET_DELIVERABLES_DEFAULT: () => TASK_GET_DELIVERABLES_DEFAULT,
5473
5489
  TASK_GET_NOTES_DEFAULT: () => TASK_GET_NOTES_DEFAULT,
5474
5490
  TASK_GET_STATUS_HISTORY_DEFAULT: () => TASK_GET_STATUS_HISTORY_DEFAULT,
@@ -8401,6 +8417,8 @@ var init_context_engine = __esm({
8401
8417
  const isDream = opts.scenario === "memory_consolidation";
8402
8418
  const promptProfile = opts.promptProfile ?? packToPromptProfile(scenarioToPack(opts.scenario));
8403
8419
  const isReflex = promptProfile === "reflex";
8420
+ const isConverse = promptProfile === "converse";
8421
+ const isExecuteLike = promptProfile === "execute" || promptProfile === "govern";
8404
8422
  const stable = [];
8405
8423
  {
8406
8424
  const roleText = opts.role.systemPrompt ?? "";
@@ -8422,23 +8440,29 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8422
8440
  stable.push("\n## Tool Usage Rules");
8423
8441
  stable.push("**File editing discipline**: You MUST use `file_write` and `file_edit` for all file creation and modification. NEVER use `shell_execute` with `cat`, `echo`, `printf`, `tee`, pipes (`|`), output redirection (`>`, `>>`), heredocs (`<<`), or `sed`/`awk` to write or modify files \u2014 these bypass file access controls. `shell_execute` is for running commands (build, test, git, etc.), not for writing files.");
8424
8442
  stable.push("**Large file writing**: NEVER write a document >200 lines in a single `file_write` call. Write section by section: `file_write` the first section, then `file_edit` to append each subsequent section.");
8425
- stable.push("**Subagent delegation**: For heavy subtasks needing many tool calls or lots of file reading, delegate to `spawn_subagent` to keep your context lean. Use `spawn_subagents` to run independent subtasks in parallel.");
8443
+ if (isExecuteLike) {
8444
+ stable.push("**Subagent delegation**: For heavy subtasks needing many tool calls or lots of file reading, delegate to `spawn_subagent` to keep your context lean. Use `spawn_subagents` to run independent subtasks in parallel.");
8445
+ }
8426
8446
  stable.push("**Built-in tools over CLI**: ALWAYS use built-in tools (`task_create`, `task_assign`, `package_install`, `agent_send_message`, `memory_save`, etc.) \u2014 NEVER run `markus` CLI commands via `shell_execute`. The CLI is strictly for human operators (server start, emergency stop, initial setup). Agents must use their native tool interface for all operations.");
8427
8447
  stable.push('**No auto-install/deploy (agents/teams)**: NEVER automatically hire/deploy agents or teams via `package_install` or `hub_install` unless explicitly requested by a human (e.g., "install", "deploy", "hire", "start"). Creating builder-artifacts is separate from deploying. **Skills** follow Learning Habits impact rules below (low-impact may install directly).');
8428
8448
  stable.push("");
8429
8449
  stable.push("\n## Search & Exploration Strategy");
8430
- stable.push("When you need to understand code or find information, use a layered approach \u2014 each layer is a fallback for the previous:");
8431
- stable.push("1. **Semantic search** (`memory_search`, `deliverable_search`): Start with conceptual queries to find relevant knowledge and existing outputs.");
8432
- stable.push("2. **Pattern search** (`grep_search`): Use for exact symbol names, error messages, configuration keys, or specific strings.");
8433
- stable.push("3. **File browsing** (`file_read`, `list_directory`): Navigate directory structure and read specific files when you know the likely location.");
8434
- stable.push("4. **External research** (`web_search`, `web_fetch`): Use for unfamiliar libraries, APIs, error codes, or best practices not found in the codebase.");
8435
- const hasBrowserSkill = opts.availableSkills?.some((s2) => s2.name === "chrome-devtools");
8436
- if (hasBrowserSkill) {
8437
- stable.push("5. **Browser tools** (`browser_navigate`, `browser_snapshot`, `browser_click`): when `web_search`/`web_fetch` fails (network error, JS-rendered page, rate-limiting), access the page interactively \u2014 handles JS rendering, auth flows, and complex navigation `web_fetch` cannot.");
8450
+ if (isExecuteLike) {
8451
+ stable.push("When you need to understand code or find information, use a layered approach \u2014 each layer is a fallback for the previous:");
8452
+ stable.push("1. **Semantic search** (`memory_search`, `deliverable_search`): Start with conceptual queries to find relevant knowledge and existing outputs.");
8453
+ stable.push("2. **Pattern search** (`grep_search`): Use for exact symbol names, error messages, configuration keys, or specific strings.");
8454
+ stable.push("3. **File browsing** (`file_read`, `list_directory`): Navigate directory structure and read specific files when you know the likely location.");
8455
+ stable.push("4. **External research** (`web_search`, `web_fetch`): Use for unfamiliar libraries, APIs, error codes, or best practices not found in the codebase.");
8456
+ const hasBrowserSkill = opts.availableSkills?.some((s2) => s2.name === "chrome-devtools");
8457
+ if (hasBrowserSkill) {
8458
+ stable.push("5. **Browser tools** (`browser_navigate`, `browser_snapshot`, `browser_click`): when `web_search`/`web_fetch` fails (network error, JS-rendered page, rate-limiting), access the page interactively \u2014 handles JS rendering, auth flows, and complex navigation `web_fetch` cannot.");
8459
+ } else {
8460
+ stable.push("If `web_search`/`web_fetch` fails, try alternative queries or URLs, or `web_fetch` a search-engine URL directly (e.g. `https://www.google.com/search?q=YOUR_QUERY`). The `chrome-devtools` skill adds browser tools for JS-rendered/interactive sites.");
8461
+ }
8462
+ stable.push("Always check existing patterns in the codebase before introducing new conventions. When exploring unfamiliar code, start from entry points and trace data flow.");
8438
8463
  } else {
8439
- stable.push("If `web_search`/`web_fetch` fails, try alternative queries or URLs, or `web_fetch` a search-engine URL directly (e.g. `https://www.google.com/search?q=YOUR_QUERY`). The `chrome-devtools` skill adds browser tools for JS-rendered/interactive sites.");
8464
+ stable.push("Layered lookup: semantic (`memory_search` / `deliverable_search`) \u2192 exact (`grep_search`) \u2192 files (`file_read` / `list_directory`) \u2192 web (`web_search` / `web_fetch`). Prefer existing codebase patterns. Activate `chrome-devtools` via `discover_tools` when pages need a real browser.");
8440
8465
  }
8441
- stable.push("Always check existing patterns in the codebase before introducing new conventions. When exploring unfamiliar code, start from entry points and trace data flow.");
8442
8466
  stable.push("");
8443
8467
  stable.push("\n## Learning Habits");
8444
8468
  stable.push("Get smarter over time. Prefer the lightest store that changes future behavior.");
@@ -8498,10 +8522,20 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8498
8522
  if (orgCtx)
8499
8523
  semiStable.push(orgCtx);
8500
8524
  if (opts.teamAnnouncements?.trim()) {
8501
- semiStable.push("\n## Team Announcements\n" + opts.teamAnnouncements.trim());
8525
+ const raw = opts.teamAnnouncements.trim();
8526
+ const cap = isConverse ? SYSTEM_ANNOUNCEMENTS_CHARS_CONVERSE : SYSTEM_ANNOUNCEMENTS_CHARS;
8527
+ const body = raw.length > cap ? `${raw.slice(0, cap)}
8528
+
8529
+ _[announcements truncated \u2014 read \`${opts.teamDataDir ?? "team"}/ANNOUNCEMENT.md\` for full text]_` : raw;
8530
+ semiStable.push("\n## Team Announcements\n" + body);
8502
8531
  }
8503
8532
  if (opts.teamNorms?.trim()) {
8504
- semiStable.push("\n## Team Working Norms\n" + opts.teamNorms.trim());
8533
+ const raw = opts.teamNorms.trim();
8534
+ const cap = isConverse ? SYSTEM_NORMS_CHARS_CONVERSE : SYSTEM_NORMS_CHARS;
8535
+ const body = raw.length > cap ? `${raw.slice(0, cap)}
8536
+
8537
+ _[norms truncated \u2014 read \`${opts.teamDataDir ?? "team"}/NORMS.md\` for full text]_` : raw;
8538
+ semiStable.push("\n## Team Working Norms\n" + body);
8505
8539
  }
8506
8540
  if (opts.teamDataDir) {
8507
8541
  const lines = ["\n## Team Data Directory", `Path: \`${opts.teamDataDir}\``, "Files:", "- `ANNOUNCEMENT.md` \u2014 team announcements", "- `NORMS.md` \u2014 team working norms"];
@@ -8576,7 +8610,7 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8576
8610
  if (opts.environment) {
8577
8611
  semiStable.push(this.buildEnvironmentSection(opts.environment));
8578
8612
  }
8579
- const knowledgeTokCap = isReflex ? KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX : KNOWLEDGE_PROMPT_MAX_TOKENS;
8613
+ const knowledgeTokCap = isReflex ? KNOWLEDGE_PROMPT_MAX_TOKENS_REFLEX : isConverse ? KNOWLEDGE_PROMPT_MAX_TOKENS_CONVERSE : KNOWLEDGE_PROMPT_MAX_TOKENS;
8580
8614
  if (knowledgeTokCap > 0) {
8581
8615
  const longTermMem = opts.memory.getLongTermMemory();
8582
8616
  if (longTermMem) {
@@ -8598,9 +8632,11 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8598
8632
  }
8599
8633
  const scenario = opts.scenario ?? "chat";
8600
8634
  semiStable.push(this.buildScenarioSection(scenario, { a2aWaitForReply: opts.a2aWaitForReply, isManager: opts.isTeamManager, channelKey: opts.channelKey }));
8601
- const scenarioPolicies = this.buildScenarioPolicyBlocks(scenario);
8602
- if (scenarioPolicies)
8603
- semiStable.push(scenarioPolicies);
8635
+ if (isExecuteLike) {
8636
+ const scenarioPolicies = this.buildScenarioPolicyBlocks(scenario);
8637
+ if (scenarioPolicies)
8638
+ semiStable.push(scenarioPolicies);
8639
+ }
8604
8640
  const dynamic = [];
8605
8641
  if (opts.projectContext) {
8606
8642
  const { project, repositories, governanceRules, teamRole } = opts.projectContext;
@@ -8680,7 +8716,7 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8680
8716
  dynamic.push(`_(${otherDone.length} other completed/closed tasks)_`);
8681
8717
  }
8682
8718
  }
8683
- } else {
8719
+ } else if (isExecuteLike) {
8684
8720
  dynamic.push("\n## Task Board");
8685
8721
  dynamic.push("No tasks on the board.");
8686
8722
  }
@@ -8696,14 +8732,26 @@ _[ROLE truncated to ${ROLE_PROMPT_MAX_TOKENS} tok budget]_` : roleText);
8696
8732
  }
8697
8733
  if (wc.availableWorkflows.length > 0) {
8698
8734
  dynamic.push("\n## Available Workflows");
8699
- for (const w of wc.availableWorkflows) {
8700
- dynamic.push(`- **${w.name}** (${w.stepCount} steps): ${w.description}`);
8735
+ const list = isConverse ? wc.availableWorkflows.slice(0, SYSTEM_WORKFLOWS_MAX_CONVERSE) : wc.availableWorkflows;
8736
+ for (const w of list) {
8737
+ const desc = isConverse ? w.description.slice(0, SYSTEM_WORKFLOW_DESC_CHARS_CONVERSE) : w.description;
8738
+ dynamic.push(`- **${w.name}** (${w.stepCount} steps): ${desc}`);
8739
+ }
8740
+ if (isConverse && wc.availableWorkflows.length > SYSTEM_WORKFLOWS_MAX_CONVERSE) {
8741
+ dynamic.push(`_(${wc.availableWorkflows.length - SYSTEM_WORKFLOWS_MAX_CONVERSE} more \u2014 use \`workflow_list\`)_`);
8701
8742
  }
8702
8743
  dynamic.push("Use `workflow_list` for details or `workflow_run` to start a workflow.");
8703
8744
  }
8704
8745
  }
8705
8746
  if (opts.dynamicContext) {
8706
- dynamic.push(opts.dynamicContext);
8747
+ const raw = opts.dynamicContext;
8748
+ if (isConverse && raw.length > SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE) {
8749
+ dynamic.push(`${raw.slice(0, SYSTEM_DYNAMIC_CONTEXT_CHARS_CONVERSE)}
8750
+
8751
+ _[dynamic context truncated]_`);
8752
+ } else {
8753
+ dynamic.push(raw);
8754
+ }
8707
8755
  }
8708
8756
  const alreadyShownIds = /* @__PURE__ */ new Set();
8709
8757
  const cpp = opts.cognitiveContext;
@@ -8843,14 +8891,35 @@ Current date and time: ${localStr} (${tz}${offsetLabel ? `, ${offsetLabel}` : ""
8843
8891
  };
8844
8892
  }
8845
8893
  /**
8846
- * Drop lower-priority converse sections until system budgetTokens.
8847
- * Uses the real token counter (not chars/4) so packing matches afford checks.
8848
- * Order: team norms/announcements Search Strategy roster → other dynamics.
8894
+ * Tier-3 tail entries that MUST survive converse budget trim.
8895
+ * Date/locale are small (~50–150 tok) but critical for time-aware replies;
8896
+ * last-resort `dynamic.pop()` previously deleted them first because they
8897
+ * sit at the end of the dynamic array (PROMPT-ENGINEERING §2 Tier 3).
8898
+ */
8899
+ isProtectedDynamicTail(entry) {
8900
+ return entry.includes("Current date and time:") || entry.startsWith("User locale:") || entry.startsWith("User language:");
8901
+ }
8902
+ /** Keep Interaction Mode so the agent knows which scenario it is in. */
8903
+ isProtectedSemiStableTail(entry) {
8904
+ return entry.includes("## Current Interaction Mode");
8905
+ }
8906
+ /**
8907
+ * Failsafe only (Afford.S3): drop lower-priority converse sections until
8908
+ * system ≤ budgetTokens. Normal packing MUST stay under budget via profile
8909
+ * gates and injection caps — if this method runs, log a warning so upstream
8910
+ * bloat can be fixed. Never drops Current date/time, user locale/language,
8911
+ * or Interaction Mode.
8849
8912
  */
8850
8913
  trimConverseSystemBudget(stable, semiStable, dynamic, budgetTokens) {
8851
8914
  const totalTokens = () => estimateTokens([stable.join("\n"), semiStable.join("\n"), dynamic.join("\n")].join("\n"), this.tokenCounter);
8852
- if (totalTokens() <= budgetTokens)
8915
+ const before2 = totalTokens();
8916
+ if (before2 <= budgetTokens)
8853
8917
  return;
8918
+ log8.warn("Converse system over budget after assemble \u2014 failsafe trim engaged", {
8919
+ systemTokens: before2,
8920
+ budgetTokens,
8921
+ hint: "Fix upstream injection caps / profile gates; trim must stay rare"
8922
+ });
8854
8923
  const dropHeadingBlock = (arr, heading) => {
8855
8924
  const start = arr.findIndex((s2) => s2.includes(heading));
8856
8925
  if (start < 0)
@@ -8865,64 +8934,87 @@ Current date and time: ${localStr} (${tz}${offsetLabel ? `, ${offsetLabel}` : ""
8865
8934
  arr.splice(start, end - start);
8866
8935
  return true;
8867
8936
  };
8868
- dropHeadingBlock(semiStable, "## Team Announcements");
8869
- if (totalTokens() <= budgetTokens)
8870
- return;
8871
- dropHeadingBlock(semiStable, "## Team Working Norms");
8872
- if (totalTokens() <= budgetTokens)
8873
- return;
8874
- dropHeadingBlock(stable, "## Search & Exploration Strategy");
8875
- if (totalTokens() <= budgetTokens)
8876
- return;
8877
- dropHeadingBlock(semiStable, "### Colleagues");
8878
- dropHeadingBlock(semiStable, "### Your Team");
8879
- dropHeadingBlock(dynamic, "### Colleagues");
8880
- dropHeadingBlock(dynamic, "## Colleague Status");
8881
- if (totalTokens() <= budgetTokens)
8882
- return;
8883
- const dynamicDropOrder = [
8884
- "## Channel Context",
8885
- "## Active Workflows",
8886
- "## Mailbox",
8887
- "## Current Project",
8888
- "## Shared Deliverables",
8889
- "## Task Board"
8890
- ];
8891
- for (const h of dynamicDropOrder) {
8892
- if (totalTokens() <= budgetTokens)
8893
- return;
8894
- dropHeadingBlock(dynamic, h);
8895
- }
8896
- while (totalTokens() > budgetTokens && dynamic.length > 0) {
8897
- dynamic.pop();
8898
- }
8899
- while (totalTokens() > budgetTokens && semiStable.length > 1) {
8900
- semiStable.pop();
8937
+ const protectedDynamic = [];
8938
+ while (dynamic.length > 0 && this.isProtectedDynamicTail(dynamic[dynamic.length - 1])) {
8939
+ protectedDynamic.unshift(dynamic.pop());
8901
8940
  }
8902
- if (totalTokens() > budgetTokens) {
8903
- const joined = stable.join("\n");
8904
- let lo = 0;
8905
- let hi = joined.length;
8906
- let best = "";
8907
- while (lo <= hi) {
8908
- const mid = Math.floor((lo + hi) / 2);
8909
- const candidate = `${joined.slice(0, mid)}
8941
+ const protectedTok = protectedDynamic.length ? estimateTokens(protectedDynamic.join("\n"), this.tokenCounter) : 0;
8942
+ const workingBudget = Math.max(1e3, budgetTokens - protectedTok);
8943
+ try {
8944
+ dropHeadingBlock(semiStable, "## Team Announcements");
8945
+ if (totalTokens() <= workingBudget)
8946
+ return;
8947
+ dropHeadingBlock(semiStable, "## Team Working Norms");
8948
+ if (totalTokens() <= workingBudget)
8949
+ return;
8950
+ dropHeadingBlock(stable, "## Search & Exploration Strategy");
8951
+ if (totalTokens() <= workingBudget)
8952
+ return;
8953
+ dropHeadingBlock(semiStable, "### Colleagues");
8954
+ dropHeadingBlock(semiStable, "### Your Team");
8955
+ dropHeadingBlock(dynamic, "### Colleagues");
8956
+ dropHeadingBlock(dynamic, "## Colleague Status");
8957
+ if (totalTokens() <= workingBudget)
8958
+ return;
8959
+ const dynamicDropOrder = [
8960
+ "## Channel Context",
8961
+ "## Channel History",
8962
+ "## Available Workflows",
8963
+ "## Active Workflows",
8964
+ "## Mailbox",
8965
+ "## Current Project",
8966
+ "## Shared Deliverables",
8967
+ "## Task Board",
8968
+ "## Team Status"
8969
+ ];
8970
+ for (const h of dynamicDropOrder) {
8971
+ if (totalTokens() <= workingBudget)
8972
+ return;
8973
+ dropHeadingBlock(dynamic, h);
8974
+ }
8975
+ while (totalTokens() > workingBudget && dynamic.length > 0) {
8976
+ dynamic.pop();
8977
+ }
8978
+ while (totalTokens() > workingBudget && semiStable.length > 1) {
8979
+ const last = semiStable[semiStable.length - 1];
8980
+ if (this.isProtectedSemiStableTail(last)) {
8981
+ let idx = semiStable.length - 2;
8982
+ while (idx >= 1 && this.isProtectedSemiStableTail(semiStable[idx]))
8983
+ idx--;
8984
+ if (idx < 1)
8985
+ break;
8986
+ semiStable.splice(idx, 1);
8987
+ continue;
8988
+ }
8989
+ semiStable.pop();
8990
+ }
8991
+ if (totalTokens() > workingBudget) {
8992
+ const joined = stable.join("\n");
8993
+ let lo = 0;
8994
+ let hi = joined.length;
8995
+ let best = "";
8996
+ while (lo <= hi) {
8997
+ const mid = Math.floor((lo + hi) / 2);
8998
+ const candidate = `${joined.slice(0, mid)}
8910
8999
 
8911
9000
  _[system trimmed to ${budgetTokens} tok converse budget]_`;
8912
- const other = [semiStable.join("\n"), dynamic.join("\n")].join("\n");
8913
- const tok = estimateTokens(`${candidate}
9001
+ const other = [semiStable.join("\n"), dynamic.join("\n")].join("\n");
9002
+ const tok = estimateTokens(`${candidate}
8914
9003
  ${other}`, this.tokenCounter);
8915
- if (tok <= budgetTokens) {
8916
- best = candidate;
8917
- lo = mid + 1;
8918
- } else {
8919
- hi = mid - 1;
9004
+ if (tok <= workingBudget) {
9005
+ best = candidate;
9006
+ lo = mid + 1;
9007
+ } else {
9008
+ hi = mid - 1;
9009
+ }
8920
9010
  }
8921
- }
8922
- stable.length = 0;
8923
- stable.push(best || `${joined.slice(0, Math.max(0, budgetTokens * 2))}
9011
+ stable.length = 0;
9012
+ stable.push(best || `${joined.slice(0, Math.max(0, workingBudget * 2))}
8924
9013
 
8925
9014
  _[system trimmed]_`);
9015
+ }
9016
+ } finally {
9017
+ dynamic.push(...protectedDynamic);
8926
9018
  }
8927
9019
  }
8928
9020
  /** Human-readable language name for a BCP-47 locale (e.g. 'zh-CN' → 'Chinese (China)'). */
@@ -9034,11 +9126,12 @@ ${ctx.mergedContent.slice(0, SYSTEM_MAILBOX_MERGED_CHARS)}`);
9034
9126
  return lines.join("\n");
9035
9127
  }
9036
9128
  /**
9037
- * L3 scenario-triggered policy blocks — long checklists that chat/heartbeat
9038
- * must not carry. Loaded for task execution, review, and related modes.
9129
+ * L3 scenario-triggered policy blocks — long checklists that converse/reflex
9130
+ * must not carry. Caller gates on execute/govern profile; this further
9131
+ * restricts to task/review/deliberation scenarios.
9039
9132
  */
9040
9133
  buildScenarioPolicyBlocks(scenario) {
9041
- const needsExecutionPolicies = scenario === "task_execution" || scenario === "review" || scenario === "deliberation" || scenario === "comment_response";
9134
+ const needsExecutionPolicies = scenario === "task_execution" || scenario === "review" || scenario === "deliberation";
9042
9135
  if (!needsExecutionPolicies)
9043
9136
  return void 0;
9044
9137
  const lines = [];
@@ -69365,7 +69458,7 @@ var init_openai = __esm({
69365
69458
  this.baseUrl = config?.baseUrl ?? "https://api.openai.com";
69366
69459
  this.maxTokens = config?.maxTokens ?? DEFAULT_REQUEST_MAX_TOKENS;
69367
69460
  this.chatTimeoutMs = config?.timeoutMs ?? 9e4;
69368
- this.streamTimeoutMs = config?.timeoutMs ?? 18e4;
69461
+ this.streamTimeoutMs = config?.streamTimeoutMs ?? 18e4;
69369
69462
  this.tokenResolver = tokenResolver;
69370
69463
  }
69371
69464
  configure(config) {
@@ -69377,10 +69470,10 @@ var init_openai = __esm({
69377
69470
  this.baseUrl = config.baseUrl;
69378
69471
  if (config.maxTokens)
69379
69472
  this.maxTokens = config.maxTokens;
69380
- if (config.timeoutMs) {
69473
+ if (config.timeoutMs)
69381
69474
  this.chatTimeoutMs = config.timeoutMs;
69382
- this.streamTimeoutMs = config.timeoutMs;
69383
- }
69475
+ if (config.streamTimeoutMs)
69476
+ this.streamTimeoutMs = config.streamTimeoutMs;
69384
69477
  }
69385
69478
  setTokenResolver(resolver) {
69386
69479
  this.tokenResolver = resolver;
@@ -69525,11 +69618,22 @@ var init_openai = __esm({
69525
69618
  const endpoint = /\/v\d+$/.test(base) ? `${base}/chat/completions` : `${base}/v1/chat/completions`;
69526
69619
  const controller = new AbortController();
69527
69620
  const STREAM_HARD_TIMEOUT_MS2 = 15 * 6e4;
69528
- let idleTimeout = setTimeout(() => controller.abort(), this.streamTimeoutMs);
69529
- const hardTimeout = setTimeout(() => controller.abort(), STREAM_HARD_TIMEOUT_MS2);
69621
+ let idleTimedOut = false;
69622
+ let hardTimedOut = false;
69623
+ let idleTimeout = setTimeout(() => {
69624
+ idleTimedOut = true;
69625
+ controller.abort();
69626
+ }, this.streamTimeoutMs);
69627
+ const hardTimeout = setTimeout(() => {
69628
+ hardTimedOut = true;
69629
+ controller.abort();
69630
+ }, STREAM_HARD_TIMEOUT_MS2);
69530
69631
  const bumpIdleTimeout = () => {
69531
69632
  clearTimeout(idleTimeout);
69532
- idleTimeout = setTimeout(() => controller.abort(), this.streamTimeoutMs);
69633
+ idleTimeout = setTimeout(() => {
69634
+ idleTimedOut = true;
69635
+ controller.abort();
69636
+ }, this.streamTimeoutMs);
69533
69637
  };
69534
69638
  const clearStreamTimeouts = () => {
69535
69639
  clearTimeout(idleTimeout);
@@ -69640,6 +69744,18 @@ var init_openai = __esm({
69640
69744
  }
69641
69745
  }
69642
69746
  }
69747
+ } catch (err) {
69748
+ clearStreamTimeouts();
69749
+ const hasPartial = content.length > 0 || reasoningContent.length > 0 || toolCalls.size > 0;
69750
+ if (idleTimedOut && hasPartial) {
69751
+ toolCalls.clear();
69752
+ finishReason = "max_tokens";
69753
+ } else if (idleTimedOut || hardTimedOut) {
69754
+ const kind = hardTimedOut ? "hard" : "idle";
69755
+ throw new Error(`OpenAI stream ${kind} timeout after ${hardTimedOut ? STREAM_HARD_TIMEOUT_MS2 : this.streamTimeoutMs}ms`);
69756
+ } else {
69757
+ throw err;
69758
+ }
69643
69759
  } finally {
69644
69760
  clearStreamTimeouts();
69645
69761
  }
@@ -71515,6 +71631,26 @@ function stripMarkusNamespace(modelId) {
71515
71631
  const id = (modelId ?? "").trim();
71516
71632
  return id.replace(/^markus\//i, "");
71517
71633
  }
71634
+ function parseRetryAfterMs(res) {
71635
+ const raw = res.headers.get("retry-after");
71636
+ if (!raw)
71637
+ return null;
71638
+ const asSec = Number(raw);
71639
+ if (Number.isFinite(asSec) && asSec >= 0) {
71640
+ return Math.min(asSec * 1e3, MAX_RETRY_AFTER_MS);
71641
+ }
71642
+ const asDate = Date.parse(raw);
71643
+ if (Number.isFinite(asDate)) {
71644
+ return Math.min(Math.max(0, asDate - Date.now()), MAX_RETRY_AFTER_MS);
71645
+ }
71646
+ return null;
71647
+ }
71648
+ function retryDelayMs(res, attempt) {
71649
+ const fromHeader = res ? parseRetryAfterMs(res) : null;
71650
+ if (fromHeader !== null)
71651
+ return fromHeader;
71652
+ return RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
71653
+ }
71518
71654
  function fireCreditExhaustedEvent() {
71519
71655
  const g = globalThis;
71520
71656
  if (typeof g.dispatchEvent !== "function")
@@ -71598,7 +71734,7 @@ function detectAudioFormat(audio) {
71598
71734
  }
71599
71735
  return "wav";
71600
71736
  }
71601
- var log52, CUCache, DEFAULT_OR_BASE_URL, DEFAULT_MODEL, CLIENT_ID, CHAT_TIMEOUT_MS, STREAM_TIMEOUT_MS, STREAM_HARD_TIMEOUT_MS, MAX_RETRIES, RETRY_BASE_DELAY_MS, CREDIT_MUTE_KEY, _lastCreditNotifTs, cachedModelList, modelListExpiry, MODEL_LIST_TTL_MS, MarkusProvider, FALLBACK_MODELS;
71737
+ var log52, CUCache, DEFAULT_OR_BASE_URL, DEFAULT_MODEL, CLIENT_ID, CHAT_TIMEOUT_MS, STREAM_TIMEOUT_MS, STREAM_HARD_TIMEOUT_MS, MAX_RETRIES, RETRY_BASE_DELAY_MS, MAX_RETRY_AFTER_MS, CREDIT_MUTE_KEY, _lastCreditNotifTs, cachedModelList, modelListExpiry, MODEL_LIST_TTL_MS, MarkusProvider, FALLBACK_MODELS;
71602
71738
  var init_markus_provider = __esm({
71603
71739
  "../core/dist/llm/markus-provider.js"() {
71604
71740
  "use strict";
@@ -71637,6 +71773,7 @@ var init_markus_provider = __esm({
71637
71773
  STREAM_HARD_TIMEOUT_MS = 15 * 6e4;
71638
71774
  MAX_RETRIES = 3;
71639
71775
  RETRY_BASE_DELAY_MS = 500;
71776
+ MAX_RETRY_AFTER_MS = 6e4;
71640
71777
  CREDIT_MUTE_KEY = "markus:credit-notif-muted";
71641
71778
  _lastCreditNotifTs = 0;
71642
71779
  cachedModelList = null;
@@ -71667,7 +71804,7 @@ var init_markus_provider = __esm({
71667
71804
  this.baseUrl = config?.baseUrl ?? DEFAULT_OR_BASE_URL;
71668
71805
  this.maxTokens = config?.maxTokens;
71669
71806
  this.chatTimeoutMs = config?.timeoutMs ?? CHAT_TIMEOUT_MS;
71670
- this.streamTimeoutMs = config?.timeoutMs ?? STREAM_TIMEOUT_MS;
71807
+ this.streamTimeoutMs = config?.streamTimeoutMs ?? STREAM_TIMEOUT_MS;
71671
71808
  this.modelsUrl = config?.modelsUrl ?? process.env["MARKUS_MODELS_URL"] ?? "";
71672
71809
  this.hubUrl = config?.hubUrl ?? process.env["MARKUS_HUB_URL"] ?? "";
71673
71810
  this.hubToken = config?.hubToken ?? process.env["MARKUS_HUB_TOKEN"] ?? "";
@@ -71691,10 +71828,10 @@ var init_markus_provider = __esm({
71691
71828
  this.hubUrl = config.hubUrl;
71692
71829
  if (config.hubToken !== void 0)
71693
71830
  this.hubToken = config.hubToken;
71694
- if (config.timeoutMs) {
71831
+ if (config.timeoutMs)
71695
71832
  this.chatTimeoutMs = config.timeoutMs;
71696
- this.streamTimeoutMs = config.timeoutMs;
71697
- }
71833
+ if (config.streamTimeoutMs)
71834
+ this.streamTimeoutMs = config.streamTimeoutMs;
71698
71835
  }
71699
71836
  /** Whether OpenRouter credentials are available. */
71700
71837
  hasOpenRouterCreds() {
@@ -72160,6 +72297,7 @@ var init_markus_provider = __esm({
72160
72297
  }
72161
72298
  const decoder = new TextDecoder();
72162
72299
  let buffer = "";
72300
+ let midStreamRateLimited = false;
72163
72301
  try {
72164
72302
  while (true) {
72165
72303
  const { done, value } = await reader.read();
@@ -72169,6 +72307,7 @@ var init_markus_provider = __esm({
72169
72307
  buffer += decoder.decode(value, { stream: true });
72170
72308
  const lines = buffer.split("\n");
72171
72309
  buffer = lines.pop() ?? "";
72310
+ let stopStream = false;
72172
72311
  for (const line of lines) {
72173
72312
  const trimmed = line.trim();
72174
72313
  if (!trimmed || trimmed === "data: [DONE]")
@@ -72179,6 +72318,19 @@ var init_markus_provider = __esm({
72179
72318
  const chunk = JSON.parse(trimmed.slice(6));
72180
72319
  const choice = chunk.choices?.[0];
72181
72320
  const delta = choice?.delta;
72321
+ const streamErr = chunk.error ?? null;
72322
+ const finishRaw = choice?.finish_reason !== null ? String(choice?.finish_reason ?? "") : "";
72323
+ if (streamErr || finishRaw === "error") {
72324
+ const code = Number(streamErr?.code ?? 0);
72325
+ const errMsg = String(streamErr?.message ?? "Rate limit exceeded");
72326
+ const isRateLimit = code === 429 || /rate.?limit/i.test(errMsg);
72327
+ if (isRateLimit) {
72328
+ midStreamRateLimited = true;
72329
+ stopStream = true;
72330
+ break;
72331
+ }
72332
+ throw new Error(`Markus stream error ${code || "unknown"}: ${errMsg}`);
72333
+ }
72182
72334
  const deltaReasoning = extractDeltaReasoning(delta);
72183
72335
  if (deltaReasoning) {
72184
72336
  reasoningContent += deltaReasoning;
@@ -72225,18 +72377,47 @@ var init_markus_provider = __esm({
72225
72377
  this.recordCostUsd(chunk.usage);
72226
72378
  }
72227
72379
  }
72228
- } catch {
72380
+ } catch (parseOrStreamErr) {
72381
+ if (parseOrStreamErr instanceof Error && parseOrStreamErr.message.startsWith("Markus stream error")) {
72382
+ throw parseOrStreamErr;
72383
+ }
72229
72384
  }
72230
72385
  }
72386
+ if (stopStream)
72387
+ break;
72388
+ }
72389
+ if (midStreamRateLimited) {
72390
+ const hasPartial = content.length > 0 || reasoningContent.length > 0 || toolCallsAcc.size > 0;
72391
+ if (hasPartial) {
72392
+ log52.warn("OpenRouter mid-stream rate limit \u2014 returning partial for auto-continuation", {
72393
+ contentChars: content.length
72394
+ });
72395
+ toolCallsAcc.clear();
72396
+ finishReason = "max_tokens";
72397
+ } else {
72398
+ throw new Error("MARKUS_RATE_LIMITED: Rate limit exceeded (mid-stream)");
72399
+ }
72231
72400
  }
72232
72401
  } catch (err) {
72233
72402
  clearStreamTimeouts();
72234
72403
  const msg = err instanceof Error ? err.message : String(err);
72235
- if (idleTimedOut || hardTimedOut || /aborted/i.test(msg)) {
72404
+ const hasPartial = content.length > 0 || reasoningContent.length > 0 || toolCallsAcc.size > 0;
72405
+ if (idleTimedOut && hasPartial) {
72406
+ log52.warn("Markus stream idle timeout with partial content \u2014 returning for auto-continuation", {
72407
+ idleMs: this.streamTimeoutMs,
72408
+ contentChars: content.length,
72409
+ droppedToolCalls: toolCallsAcc.size
72410
+ });
72411
+ toolCallsAcc.clear();
72412
+ finishReason = "max_tokens";
72413
+ } else if (idleTimedOut || hardTimedOut) {
72236
72414
  const kind = hardTimedOut ? "hard" : "idle";
72237
72415
  throw new Error(`Markus stream ${kind} timeout after ${hardTimedOut ? STREAM_HARD_TIMEOUT_MS : this.streamTimeoutMs}ms`);
72416
+ } else if (signal?.aborted || /aborted/i.test(msg)) {
72417
+ throw err instanceof Error ? err : new Error(msg);
72418
+ } else {
72419
+ throw err;
72238
72420
  }
72239
- throw err;
72240
72421
  } finally {
72241
72422
  clearStreamTimeouts();
72242
72423
  }
@@ -72347,32 +72528,48 @@ var init_markus_provider = __esm({
72347
72528
  }
72348
72529
  /**
72349
72530
  * Fetch with exponential backoff retry.
72350
- * Does NOT retry on 4xx errors (billing/auth are not transient).
72351
- * Only retries on 5xx / network issues.
72531
+ *
72532
+ * OpenRouter guidance (https://openrouter.ai/docs/api_reference/limits):
72533
+ * - 429 / 503 are transient — retry with exponential backoff; honor `Retry-After`
72534
+ * - Other 4xx (auth/billing) are not retried
72535
+ * - 5xx / network errors are retried (unless skipRetry — used after stream body
72536
+ * would already be in flight; 429/503 still retry because they fail before body)
72352
72537
  */
72353
72538
  async fetchWithRetry(url, init, skipRetry = false, retries = MAX_RETRIES) {
72354
72539
  let lastError;
72355
72540
  for (let attempt = 0; attempt < retries; attempt++) {
72541
+ let res;
72356
72542
  try {
72357
- const res = await fetch(url, init);
72358
- if (res.status >= 400 && res.status < 500) {
72359
- return res;
72360
- }
72543
+ res = await fetch(url, init);
72361
72544
  if (res.ok)
72362
72545
  return res;
72363
- log52.warn(`Markus proxy error ${res.status} (attempt ${attempt + 1}/${retries})`);
72546
+ const retriableStatus = res.status === 429 || res.status === 503;
72547
+ if (res.status >= 400 && res.status < 500 && !retriableStatus) {
72548
+ return res;
72549
+ }
72550
+ log52.warn(`OpenRouter/Markus HTTP ${res.status} (attempt ${attempt + 1}/${retries})`, {
72551
+ retryAfter: res.headers.get("retry-after"),
72552
+ rateLimitRemaining: res.headers.get("x-ratelimit-remaining"),
72553
+ rateLimitReset: res.headers.get("x-ratelimit-reset")
72554
+ });
72364
72555
  lastError = new Error(`Markus proxy error ${res.status}`);
72365
- if (skipRetry)
72556
+ if (skipRetry && !retriableStatus)
72557
+ return res;
72558
+ if (attempt >= retries - 1)
72366
72559
  return res;
72367
72560
  const errText = await res.text().catch(() => "");
72368
72561
  if (errText)
72369
72562
  log52.warn("Response body", { body: errText.slice(0, 200) });
72563
+ const delay = retryDelayMs(res, attempt);
72564
+ log52.info(`Waiting ${delay}ms before retry (Retry-After / backoff)`);
72565
+ await new Promise((r) => setTimeout(r, delay));
72566
+ continue;
72370
72567
  } catch (err) {
72371
72568
  lastError = err instanceof Error ? err : new Error(String(err));
72372
72569
  log52.warn(`Markus proxy network error (attempt ${attempt + 1}/${retries})`, { error: lastError.message });
72373
- }
72374
- if (attempt < retries - 1) {
72375
- const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
72570
+ if (skipRetry || attempt >= retries - 1)
72571
+ break;
72572
+ const delay = retryDelayMs(void 0, attempt);
72376
72573
  await new Promise((r) => setTimeout(r, delay));
72377
72574
  }
72378
72575
  }
@@ -235912,6 +236109,7 @@ async function createServices(config) {
235912
236109
  const providerConfigs = {};
235913
236110
  let defaultProvider = config.llm.defaultProvider;
235914
236111
  const llmTimeoutMs = Number(process.env["LLM_TIMEOUT_MS"]) || config.llm.timeoutMs || void 0;
236112
+ const llmStreamTimeoutMs = Number(process.env["LLM_STREAM_TIMEOUT_MS"]) || void 0;
235915
236113
  const providerMeta = new Map(PROVIDERS.map((p) => [p.id, p]));
235916
236114
  const envPrefix = (id) => id.toUpperCase().replace(/-/g, "_");
235917
236115
  const markusCfg = config.llm.providers["markus"] ?? {};
@@ -235982,7 +236180,8 @@ async function createServices(config) {
235982
236180
  ...markusModelsUrl ? { modelsUrl: markusModelsUrl } : {},
235983
236181
  hubUrl,
235984
236182
  ...hubToken ? { hubToken } : {},
235985
- timeoutMs: llmTimeoutMs
236183
+ timeoutMs: llmTimeoutMs,
236184
+ ...llmStreamTimeoutMs ? { streamTimeoutMs: llmStreamTimeoutMs } : {}
235986
236185
  };
235987
236186
  } else if (config.llm.defaultProvider === "markus") {
235988
236187
  log103.warn(
@@ -236006,7 +236205,8 @@ async function createServices(config) {
236006
236205
  provider: "ollama",
236007
236206
  model: model2,
236008
236207
  ...baseUrl2 ? { baseUrl: baseUrl2 } : {},
236009
- timeoutMs: llmTimeoutMs
236208
+ timeoutMs: llmTimeoutMs,
236209
+ ...llmStreamTimeoutMs ? { streamTimeoutMs: llmStreamTimeoutMs } : {}
236010
236210
  };
236011
236211
  }
236012
236212
  continue;
@@ -236021,7 +236221,8 @@ async function createServices(config) {
236021
236221
  model,
236022
236222
  apiKey,
236023
236223
  ...baseUrl ? { baseUrl } : {},
236024
- timeoutMs: llmTimeoutMs
236224
+ timeoutMs: llmTimeoutMs,
236225
+ ...llmStreamTimeoutMs ? { streamTimeoutMs: llmStreamTimeoutMs } : {}
236025
236226
  };
236026
236227
  }
236027
236228
  if (!providerConfigs[defaultProvider]) {