blun-king-cli 9.1.602 → 9.1.603

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/CHANGELOG.md +103 -97
  2. package/LIESMICH.txt +57 -57
  3. package/README.md +90 -90
  4. package/bin/agentspine-king-goal-inbox.mjs +127 -127
  5. package/bin/agentspine-king-goal-intake.mjs +106 -106
  6. package/bin/agentspine-king-host-runner.mjs +109 -109
  7. package/bin/agentspine-king-snapshot-policy.cjs +80 -80
  8. package/bin/agentspine-king-status-policy.mjs +226 -226
  9. package/bin/agentspine-king-worker-host.mjs +160 -160
  10. package/bin/core-bootstrap.js +77 -77
  11. package/bin/launcher-mode.js +93 -93
  12. package/bin/launcher-restart-policy.cjs +131 -131
  13. package/bin/launcher-runtime.js +491 -491
  14. package/bin/managed-node.js +186 -186
  15. package/bin/managed-plugin-selection.cjs +115 -115
  16. package/bin/native-module-repair.js +201 -201
  17. package/bin/node-runtime.js +34 -34
  18. package/bin/node-version.js +49 -49
  19. package/bin/plugin-bootstrap.js +162 -162
  20. package/bin/private-paths.js +1606 -1606
  21. package/bin/runtime-exit-ledger.cjs +144 -144
  22. package/bin/runtime-exit-ledger.d.cts +23 -23
  23. package/bin/standard-tools-bootstrap.js +272 -272
  24. package/bin/turn-thinking-policy.cjs +82 -82
  25. package/bin/update-copy.js +200 -200
  26. package/bin/update-lease.js +597 -597
  27. package/bin/update-notice.js +1568 -1568
  28. package/bin/verify-agent-behavior.cjs +122 -122
  29. package/bin/verify-agent-components.cjs +104 -104
  30. package/bin/verify-bundled-agent-sources.cjs +83 -83
  31. package/bin/windows-node-crash-dump.cjs +289 -289
  32. package/blun.mjs +115 -7
  33. package/codebase-index/codebase_index.py +470 -470
  34. package/dist-web/assets/{CodeBlockNode-CXnTLMNr.js → CodeBlockNode-TKKkJX8L.js} +1 -1
  35. package/dist-web/assets/{CodeBlockShell.vue_vue_type_style_index_0_lang-CCF8Ntnq.js → CodeBlockShell.vue_vue_type_style_index_0_lang-CUj2Ds5x.js} +1 -1
  36. package/dist-web/assets/DesignSystemView-DwK1aQMo.js +12 -0
  37. package/dist-web/assets/DesignSystemView-szjTj7ns.css +1 -0
  38. package/dist-web/assets/{Tooltip-CFQEzqC-.js → Tooltip-CTWv7WCU.js} +1 -1
  39. package/dist-web/assets/{abnfDiagram-N423BO3Z-Z1APZG5m.js → abnfDiagram-N423BO3Z-DA8V8Zjh.js} +1 -1
  40. package/dist-web/assets/{arc-C4VyWloT.js → arc-YtddKbdY.js} +1 -1
  41. package/dist-web/assets/{architectureDiagram-T3A2C74G-DpddbUcM.js → architectureDiagram-T3A2C74G-CGEiObmo.js} +1 -1
  42. package/dist-web/assets/{blockDiagram-VBNYF7ZC-BqccOSMr.js → blockDiagram-VBNYF7ZC-Bd5Vt50e.js} +1 -1
  43. package/dist-web/assets/{c4Diagram-5PPSVZJV-OHAcJrTy.js → c4Diagram-5PPSVZJV-D2ApPM54.js} +1 -1
  44. package/dist-web/assets/channel-BnluexuN.js +1 -0
  45. package/dist-web/assets/{chunk-2GRJ4B5K-DqJHs8Fw.js → chunk-2GRJ4B5K-BDcIEZSl.js} +1 -1
  46. package/dist-web/assets/{chunk-2Q5K7J3B-B1nCd91o.js → chunk-2Q5K7J3B-6aSabCX7.js} +1 -1
  47. package/dist-web/assets/{chunk-5RXB4S5H-neG70kZx.js → chunk-5RXB4S5H-BFRQvIJS.js} +1 -1
  48. package/dist-web/assets/{chunk-5VM5RSS4-l7biGqeH.js → chunk-5VM5RSS4-ChAa-DNY.js} +1 -1
  49. package/dist-web/assets/{chunk-6Q2QTUOP-BO-F11Gs.js → chunk-6Q2QTUOP-BIfrb2Jc.js} +1 -1
  50. package/dist-web/assets/{chunk-GF5L2VYU-BtC69fw0.js → chunk-GF5L2VYU-BR0gvtWI.js} +1 -1
  51. package/dist-web/assets/{chunk-JWPE2WC7-DIOubEqr.js → chunk-JWPE2WC7-BgXKsx5E.js} +1 -1
  52. package/dist-web/assets/{chunk-KBJHAD2P-DDUeH_Ba.js → chunk-KBJHAD2P-I8mrZhpz.js} +1 -1
  53. package/dist-web/assets/{chunk-RYQCIY6F-B9gFMVbS.js → chunk-RYQCIY6F-BMPaem92.js} +1 -1
  54. package/dist-web/assets/{chunk-XXDRQBXY-Bn1Xz6TQ.js → chunk-XXDRQBXY-COy0J-0j.js} +1 -1
  55. package/dist-web/assets/classDiagram-JCYQIIEL-BliFdSD9.js +1 -0
  56. package/dist-web/assets/classDiagram-v2-OCEON4UE-BliFdSD9.js +1 -0
  57. package/dist-web/assets/{cose-bilkent-JH36ORCC-DqigO3T4.js → cose-bilkent-JH36ORCC-MosTTRdo.js} +1 -1
  58. package/dist-web/assets/{cynefin-VYW2F7L2-rpD93tQ-.js → cynefin-VYW2F7L2-5tjPgrkP.js} +1 -1
  59. package/dist-web/assets/{cynefinDiagram-MW4NZA55-DbTqnkVJ.js → cynefinDiagram-MW4NZA55-CbDcdInR.js} +1 -1
  60. package/dist-web/assets/{dagre-VZM6K2ZE-DcM8aEVY.js → dagre-VZM6K2ZE-YaBom1ZH.js} +1 -1
  61. package/dist-web/assets/{diagram-7IWD3JNH-UymgsBNa.js → diagram-7IWD3JNH-Da4m-Hgz.js} +1 -1
  62. package/dist-web/assets/{diagram-B4RE2ZJO-BiYu5WPF.js → diagram-B4RE2ZJO-CAUUegxg.js} +1 -1
  63. package/dist-web/assets/{diagram-LBJQPF4R-BD3kkgOO.js → diagram-LBJQPF4R-o21mWKG4.js} +1 -1
  64. package/dist-web/assets/{diagram-Q27KOJAE-D1mYQ_cI.js → diagram-Q27KOJAE-BA3z3sXf.js} +1 -1
  65. package/dist-web/assets/{diagram-UB23O5K3-BtX8u6HG.js → diagram-UB23O5K3-CGRdSSDK.js} +1 -1
  66. package/dist-web/assets/{ebnfDiagram-BXEA7PRR-CBAnFkRF.js → ebnfDiagram-BXEA7PRR-Bw-iU9FP.js} +1 -1
  67. package/dist-web/assets/{erDiagram-JOGREHBK-3vKcWsxm.js → erDiagram-JOGREHBK-BwM1yiR0.js} +1 -1
  68. package/dist-web/assets/{flowDiagram-UKHOOZJN-D9wBbHm2.js → flowDiagram-UKHOOZJN-z05eOR1Q.js} +1 -1
  69. package/dist-web/assets/{ganttDiagram-PKOTCBZU-Cd_dViF-.js → ganttDiagram-PKOTCBZU-BMUubNTl.js} +1 -1
  70. package/dist-web/assets/{gitGraphDiagram-DS77QQ5N-BiEEtTo7.js → gitGraphDiagram-DS77QQ5N-Dccbi1wU.js} +1 -1
  71. package/dist-web/assets/{index-DdEakFJM.js → index-BBbC5LRF.js} +1 -1
  72. package/dist-web/assets/{index-BmKj7CB1.css → index-C9eDH3u-.css} +1 -1
  73. package/dist-web/assets/{index-Ba1OvLjf.js → index-D48p0M2S.js} +2 -2
  74. package/dist-web/assets/{index-CiPA8Kex.js → index-h0KEOmkU.js} +14 -14
  75. package/dist-web/assets/{index10-CNr4U-Nw.js → index10-Qbuw1N6u.js} +1 -1
  76. package/dist-web/assets/{index11-Dto_yZNz.js → index11-g8v025wN.js} +1 -1
  77. package/dist-web/assets/{index5-B2PldaO2.js → index5-BYNcV8BY.js} +1 -1
  78. package/dist-web/assets/{index6-CBdZmmyx.js → index6-BetANtnV.js} +1 -1
  79. package/dist-web/assets/{index7-Dz9oCsUF.js → index7-BcPbgCKN.js} +1 -1
  80. package/dist-web/assets/{index8-B6k25jtU.js → index8-B1lp-RvF.js} +2 -2
  81. package/dist-web/assets/{infoDiagram-6WML65LV-D4ph2sIH.js → infoDiagram-6WML65LV-BF_pbUnN.js} +1 -1
  82. package/dist-web/assets/{ishikawaDiagram-WSZJBQD7-DjKjbMm9.js → ishikawaDiagram-WSZJBQD7-Dedv4urS.js} +1 -1
  83. package/dist-web/assets/{journeyDiagram-NVQOT4AX-DttHDfPQ.js → journeyDiagram-NVQOT4AX-B1Ex3b6o.js} +1 -1
  84. package/dist-web/assets/{kanban-definition-27J2QSJJ-C5gB-W0d.js → kanban-definition-27J2QSJJ-BtCGliBH.js} +1 -1
  85. package/dist-web/assets/{linear-BRGe4-d6.js → linear-ByItc8Qr.js} +1 -1
  86. package/dist-web/assets/{mermaid.core-D-9Sx1No.js → mermaid.core-B1M2O7nN.js} +4 -4
  87. package/dist-web/assets/{mindmap-definition-FAOFIHXS-Cg_hoVIq.js → mindmap-definition-FAOFIHXS-D0UHKUyj.js} +1 -1
  88. package/dist-web/assets/{pegDiagram-VL7TDLO6-CSX9hitD.js → pegDiagram-VL7TDLO6-D7zYCVmG.js} +1 -1
  89. package/dist-web/assets/{pieDiagram-7S7Q4E2Y-0L0mxahZ.js → pieDiagram-7S7Q4E2Y-Bd0i9CHa.js} +1 -1
  90. package/dist-web/assets/{quadrantDiagram-CIZ2JOQS-U483z0er.js → quadrantDiagram-CIZ2JOQS-MG-Ug47d.js} +1 -1
  91. package/dist-web/assets/{railroadDiagram-AXF67PYL-D80a2_DJ.js → railroadDiagram-AXF67PYL-AZdl90Gj.js} +1 -1
  92. package/dist-web/assets/{requirementDiagram-LRYGKXZP-CeyHfq8t.js → requirementDiagram-LRYGKXZP-DjplF9kt.js} +1 -1
  93. package/dist-web/assets/{sankeyDiagram-W5VNT64P-CCISkkrR.js → sankeyDiagram-W5VNT64P-Bi9Zgfjs.js} +1 -1
  94. package/dist-web/assets/{sequenceDiagram-SI44F4Z6-jQfm2XS7.js → sequenceDiagram-SI44F4Z6-ChEpdCvb.js} +1 -1
  95. package/dist-web/assets/{sizeCapture-X5ZJPWSS-lRZsmCoS.js → sizeCapture-X5ZJPWSS-B5RFUdaa.js} +1 -1
  96. package/dist-web/assets/{stateDiagram-OKZ733FA-ClCgTdUm.js → stateDiagram-OKZ733FA-BkRblSKp.js} +1 -1
  97. package/dist-web/assets/stateDiagram-v2-UEYNNEHI-fVkQcACW.js +1 -0
  98. package/dist-web/assets/{swimlanes-SLNWSIFB-BCdOUN05.js → swimlanes-SLNWSIFB-DLXH6Zhc.js} +2 -2
  99. package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-Bg-BiZJQ.js +8 -0
  100. package/dist-web/assets/{timeline-definition-Z64GVDOM-DpWutSKa.js → timeline-definition-Z64GVDOM-C_N88siO.js} +1 -1
  101. package/dist-web/assets/{vennDiagram-T6HMQDX7-DVC5JVsc.js → vennDiagram-T6HMQDX7-DMsnvDt0.js} +1 -1
  102. package/dist-web/assets/{vue.runtime.esm-bundler-BwwRtQwQ.js → vue.runtime.esm-bundler-B-3uIy85.js} +1 -1
  103. package/dist-web/assets/{wardleyDiagram-T6FBY63Y-BK2mrq7L.js → wardleyDiagram-T6FBY63Y-C9SJIPzq.js} +1 -1
  104. package/dist-web/assets/{xychartDiagram-ELKLHX3M-DUJu9F7-.js → xychartDiagram-ELKLHX3M-DZLWA6Go.js} +1 -1
  105. package/dist-web/index.html +32 -32
  106. package/dist-web/vis/index.html.gz +0 -0
  107. package/package.json +1 -1
  108. package/scripts/fix-node-pty-perms.js +53 -53
  109. package/standard-skills/blun-app-design-system/SKILL.md +30 -30
  110. package/standard-skills/blun-app-design-system/provenance.json +17 -17
  111. package/standard-skills/blun-app-design-system/references/tokens.md +48 -48
  112. package/standard-skills/blun-app-design-system/scripts/check-blun-design.mjs +49 -49
  113. package/telegram-plugin/blun.plugin.json +20 -20
  114. package/telegram-plugin/commands/access.md +37 -37
  115. package/worker-host.mjs +5 -5
  116. package/dist-web/assets/DesignSystemView-6HgAUEmC.css +0 -1
  117. package/dist-web/assets/DesignSystemView-BbMOu-XO.js +0 -12
  118. package/dist-web/assets/channel-B2VOQOI-.js +0 -1
  119. package/dist-web/assets/classDiagram-JCYQIIEL-BA1TjAxj.js +0 -1
  120. package/dist-web/assets/classDiagram-v2-OCEON4UE-BA1TjAxj.js +0 -1
  121. package/dist-web/assets/stateDiagram-v2-UEYNNEHI-fi_lrTAx.js +0 -1
  122. package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-BUd_uYK3.js +0 -8
package/blun.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // BLUN_BUILD_INPUT_SHA256:162d0b633ad0d4d13f2b94a0353790b6eea58dbb6ab1609395fee3e8567f5eaf
2
+ // BLUN_BUILD_INPUT_SHA256:229c4eb365991e68b7e51ace7b55e5f8669cac5e6924bc54c9e1157b7a94f7e6
3
3
  import { fileURLToPath as __cjsShimFileURLToPath } from 'node:url';
4
4
  import { dirname as __cjsShimDirname } from 'node:path';
5
5
  const __filename = __cjsShimFileURLToPath(import.meta.url);
@@ -28596,19 +28596,19 @@ var init_load = __esmMin((() => {
28596
28596
  //#region ../../packages/agent-core/src/profile/default/agent.yaml?raw
28597
28597
  var agent_default$1;
28598
28598
  var init_agent$3 = __esmMin((() => {
28599
- agent_default$1 = "name: agent\ndescription: Default BLUN King agent\n\nsystemPromptPath: ./system.md\npromptVars:\n roleAdditional: ''\n\ntools:\n - Read\n - ReadBatch\n - ProgrammaticTool\n - Write\n - Edit\n - Grep\n - Glob\n - Bash\n - TaskList\n - TaskOutput\n - TaskStop\n - TaskUpdate\n - TaskResume\n - CronCreate\n - CronList\n - CronRunList\n - CronRunOutput\n - CronDelete\n - ReadMediaFile\n - TodoList\n - CompactConversation\n - Skill\n - WebSearch\n - Agent\n - AgentSwarm\n - FetchURL\n - GenerateImage\n - GenerateVideo\n - GenerateSpeech\n - GetMedia\n - AskUserQuestion\n - MistakeRecord\n - CodebaseSearch\n - EnterPlanMode\n - ExitPlanMode\n - CreateGoal\n - GetGoal\n - SetGoalBudget\n - UpdateGoal\n - mcp__*\n\nsubagents:\n coder:\n description: General software engineering agent — the only subagent type with file-editing tools; use it for any delegated task that must modify code.\n explore:\n description: Fast codebase exploration with prompt-enforced read-only behavior.\n plan:\n description: Read-only implementation planning and architecture design.\n";
28599
+ agent_default$1 = "name: agent\r\ndescription: Default BLUN King agent\r\n\r\nsystemPromptPath: ./system.md\r\npromptVars:\r\n roleAdditional: ''\r\n\r\ntools:\r\n - Read\r\n - ReadBatch\r\n - ProgrammaticTool\r\n - Write\r\n - Edit\r\n - Grep\r\n - Glob\r\n - Bash\r\n - TaskList\r\n - TaskOutput\r\n - TaskStop\r\n - TaskUpdate\r\n - TaskResume\r\n - CronCreate\r\n - CronList\r\n - CronRunList\r\n - CronRunOutput\r\n - CronDelete\r\n - ReadMediaFile\r\n - TodoList\r\n - CompactConversation\r\n - Skill\r\n - WebSearch\r\n - Agent\r\n - AgentSwarm\r\n - FetchURL\r\n - GenerateImage\r\n - GenerateVideo\r\n - GenerateSpeech\r\n - GetMedia\r\n - AskUserQuestion\r\n - MistakeRecord\r\n - CodebaseSearch\r\n - EnterPlanMode\r\n - ExitPlanMode\r\n - CreateGoal\r\n - GetGoal\r\n - SetGoalBudget\r\n - UpdateGoal\r\n - mcp__*\r\n\r\nsubagents:\r\n coder:\r\n description: General software engineering agent — the only subagent type with file-editing tools; use it for any delegated task that must modify code.\r\n explore:\r\n description: Fast codebase exploration with prompt-enforced read-only behavior.\r\n plan:\r\n description: Read-only implementation planning and architecture design.\r\n";
28600
28600
  }));
28601
28601
  //#endregion
28602
28602
  //#region ../../packages/agent-core/src/profile/default/coder.yaml?raw
28603
28603
  var coder_default;
28604
28604
  var init_coder = __esmMin((() => {
28605
- coder_default = "extends: agent\nname: coder\npromptVars:\n roleAdditional: |\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\n\n Your final message is the entire handoff — the parent sees nothing else from your run. Make it technically complete: what you changed and why, the path of every file you touched, how you verified the change (tests or commands run, with results), and anything left undone or worth follow-up. A final message of only a sentence or two is treated as too brief and sent back to you for expansion, costing an extra turn.\nwhenToUse: |\n Use this agent for non-trivial software engineering work that may require reading files, editing code, running commands, and returning a compact but technically complete summary to the parent agent.\ntools:\n - Bash\n - Read\n - ReadBatch\n - ProgrammaticTool\n - ReadMediaFile\n - Glob\n - Grep\n - Write\n - Edit\n - MistakeRecord\n - WebSearch\n - FetchURL\n - mcp__*\n";
28605
+ coder_default = "extends: agent\r\nname: coder\r\npromptVars:\r\n roleAdditional: |\r\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\r\n\r\n Your final message is the entire handoff — the parent sees nothing else from your run. Make it technically complete: what you changed and why, the path of every file you touched, how you verified the change (tests or commands run, with results), and anything left undone or worth follow-up. A final message of only a sentence or two is treated as too brief and sent back to you for expansion, costing an extra turn.\r\nwhenToUse: |\r\n Use this agent for non-trivial software engineering work that may require reading files, editing code, running commands, and returning a compact but technically complete summary to the parent agent.\r\ntools:\r\n - Bash\r\n - Read\r\n - ReadBatch\r\n - ProgrammaticTool\r\n - ReadMediaFile\r\n - Glob\r\n - Grep\r\n - Write\r\n - Edit\r\n - MistakeRecord\r\n - WebSearch\r\n - FetchURL\r\n - mcp__*\r\n";
28606
28606
  }));
28607
28607
  //#endregion
28608
28608
  //#region ../../packages/agent-core/src/profile/default/explore.yaml?raw
28609
28609
  var explore_default;
28610
28610
  var init_explore = __esmMin((() => {
28611
- explore_default = "extends: agent\nname: explore\npromptVars:\n roleAdditional: |\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\n\n You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to project file editing tools. MistakeRecord is the sole write-capable exception: it may record a concrete refutation in shared BLUN learning memory, never modify project files.\n\n Your strengths:\n - Rapidly finding files using glob patterns\n - Searching code and text with powerful regex patterns\n - Reading and analyzing file contents\n - Running read-only shell commands (git log, git diff, ls, find, etc.)\n\n Guidelines:\n - Use Glob for broad file pattern matching. Prefer patterns with a literal anchor (extension or subdirectory); pure wildcards like `*` or `**/*` are allowed but usually truncate at the match cap.\n - Use Grep for searching file contents with regex\n - Use Read when you know the specific file path\n - Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find)\n - NEVER use Bash for any file creation or modification commands\n - Use WebSearch or FetchURL when a question needs external context (library documentation, error messages, upstream APIs); the local codebase remains your primary domain\n - Adapt your search depth based on the thoroughness level specified by the caller\n - Wherever possible, spawn multiple parallel tool calls for grepping and reading files to maximize speed\n\n If the prompt includes a <git-context> block, use it to orient yourself about the repository state before starting your investigation.\n\n You are meant to be a fast agent. Complete the search request efficiently and report your findings clearly in a structured format.\nwhenToUse: |\n Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (e.g. \"src/**/*.yaml\"), search code for keywords (e.g. \"database connection\"), or answer questions about the codebase (e.g. \"how does the auth module work?\"). When calling this agent, specify the desired thoroughness level: \"quick\" for basic searches, \"medium\" for moderate exploration, or \"thorough\" for comprehensive analysis across multiple locations and naming conventions. Use this agent for any read-only exploration that will clearly require more than 3 search queries. Prefer launching multiple explore agents concurrently when investigating independent questions.\ntools:\n - Bash\n - Read\n - ReadBatch\n - ProgrammaticTool\n - ReadMediaFile\n - Glob\n - Grep\n - MistakeRecord\n - WebSearch\n - FetchURL\n";
28611
+ explore_default = "extends: agent\r\nname: explore\r\npromptVars:\r\n roleAdditional: |\r\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\r\n\r\n You are a codebase exploration specialist. Your role is EXCLUSIVELY to search, read, and analyze existing code and resources. You do NOT have access to project file editing tools. MistakeRecord is the sole write-capable exception: it may record a concrete refutation in shared BLUN learning memory, never modify project files.\r\n\r\n Your strengths:\r\n - Rapidly finding files using glob patterns\r\n - Searching code and text with powerful regex patterns\r\n - Reading and analyzing file contents\r\n - Running read-only shell commands (git log, git diff, ls, find, etc.)\r\n\r\n Guidelines:\r\n - Use Glob for broad file pattern matching. Prefer patterns with a literal anchor (extension or subdirectory); pure wildcards like `*` or `**/*` are allowed but usually truncate at the match cap.\r\n - Use Grep for searching file contents with regex\r\n - Use Read when you know the specific file path\r\n - Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find)\r\n - NEVER use Bash for any file creation or modification commands\r\n - Use WebSearch or FetchURL when a question needs external context (library documentation, error messages, upstream APIs); the local codebase remains your primary domain\r\n - Adapt your search depth based on the thoroughness level specified by the caller\r\n - Wherever possible, spawn multiple parallel tool calls for grepping and reading files to maximize speed\r\n\r\n If the prompt includes a <git-context> block, use it to orient yourself about the repository state before starting your investigation.\r\n\r\n You are meant to be a fast agent. Complete the search request efficiently and report your findings clearly in a structured format.\r\nwhenToUse: |\r\n Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (e.g. \"src/**/*.yaml\"), search code for keywords (e.g. \"database connection\"), or answer questions about the codebase (e.g. \"how does the auth module work?\"). When calling this agent, specify the desired thoroughness level: \"quick\" for basic searches, \"medium\" for moderate exploration, or \"thorough\" for comprehensive analysis across multiple locations and naming conventions. Use this agent for any read-only exploration that will clearly require more than 3 search queries. Prefer launching multiple explore agents concurrently when investigating independent questions.\r\ntools:\r\n - Bash\r\n - Read\r\n - ReadBatch\r\n - ProgrammaticTool\r\n - ReadMediaFile\r\n - Glob\r\n - Grep\r\n - MistakeRecord\r\n - WebSearch\r\n - FetchURL\r\n";
28612
28612
  }));
28613
28613
  //#endregion
28614
28614
  //#region ../../packages/agent-core/src/profile/default/init.md?raw
@@ -28620,7 +28620,7 @@ var init_init = __esmMin((() => {
28620
28620
  //#region ../../packages/agent-core/src/profile/default/plan.yaml?raw
28621
28621
  var plan_default;
28622
28622
  var init_plan$1 = __esmMin((() => {
28623
- plan_default = "extends: agent\nname: plan\npromptVars:\n roleAdditional: |\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\n\n Before designing your implementation plan, consider whether you fully understand the codebase areas relevant to the task. If not, recommend the parent agent to use the explore agent (subagent_type=\"explore\") to investigate key questions first. In your response, clearly state:\n 1. What you already know from the information provided\n 2. What questions remain unanswered that would benefit from explore agent investigation\n 3. Your implementation plan (either preliminary if questions remain, or final if sufficient context exists)\n\n You are a read-only planning agent: you can read and search files (Read, Glob, Grep, ReadMediaFile) and consult the web (WebSearch, FetchURL), but you have no shell and no project file-editing tools. MistakeRecord is the sole write-capable exception: it may record a concrete refutation in shared BLUN learning memory, never modify project files. Where the general instructions tell you to make changes with tools, that does not apply to you — do not attempt to run commands or modify project files. Your deliverable is the plan itself, returned as your final message.\nwhenToUse: |\n Use this agent when the parent agent needs a step-by-step implementation plan, key file identification, and architectural trade-off analysis before code changes are made.\ntools:\n - Read\n - ReadBatch\n - ProgrammaticTool\n - ReadMediaFile\n - Glob\n - Grep\n - MistakeRecord\n - WebSearch\n - FetchURL\n";
28623
+ plan_default = "extends: agent\r\nname: plan\r\npromptVars:\r\n roleAdditional: |\r\n You are now running as a subagent. All the `user` messages are sent by the main agent. The main agent cannot see your context, it can only see your last message when you finish the task. You must treat the parent agent as your caller. Do not directly ask the end user questions. If something is unclear, explain the ambiguity in your final summary to the parent agent.\r\n\r\n Before designing your implementation plan, consider whether you fully understand the codebase areas relevant to the task. If not, recommend the parent agent to use the explore agent (subagent_type=\"explore\") to investigate key questions first. In your response, clearly state:\r\n 1. What you already know from the information provided\r\n 2. What questions remain unanswered that would benefit from explore agent investigation\r\n 3. Your implementation plan (either preliminary if questions remain, or final if sufficient context exists)\r\n\r\n You are a read-only planning agent: you can read and search files (Read, Glob, Grep, ReadMediaFile) and consult the web (WebSearch, FetchURL), but you have no shell and no project file-editing tools. MistakeRecord is the sole write-capable exception: it may record a concrete refutation in shared BLUN learning memory, never modify project files. Where the general instructions tell you to make changes with tools, that does not apply to you — do not attempt to run commands or modify project files. Your deliverable is the plan itself, returned as your final message.\r\nwhenToUse: |\r\n Use this agent when the parent agent needs a step-by-step implementation plan, key file identification, and architectural trade-off analysis before code changes are made.\r\ntools:\r\n - Read\r\n - ReadBatch\r\n - ProgrammaticTool\r\n - ReadMediaFile\r\n - Glob\r\n - Grep\r\n - MistakeRecord\r\n - WebSearch\r\n - FetchURL\r\n";
28624
28624
  }));
28625
28625
  //#endregion
28626
28626
  //#region ../../packages/agent-core/src/profile/default/system.md?raw
@@ -538229,6 +538229,100 @@ registerUiCatalogFragment({
538229
538229
  }
538230
538230
  });
538231
538231
  //#endregion
538232
+ //#region src/tui/startup/native-folder-picker.ts
538233
+ const WINDOWS_PICKER = String.raw`
538234
+ $ErrorActionPreference = 'Stop'
538235
+ [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding($false)
538236
+ Add-Type -AssemblyName System.Windows.Forms
538237
+ if (-not [Environment]::UserInteractive) { throw 'No interactive desktop' }
538238
+ [System.Windows.Forms.Application]::EnableVisualStyles()
538239
+ $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
538240
+ $owner = New-Object System.Windows.Forms.Form
538241
+ try {
538242
+ $dialog.Description = $env:BLUN_PICKER_TITLE
538243
+ $dialog.ShowNewFolderButton = $true
538244
+ $dialog.RootFolder = [Environment+SpecialFolder]::Desktop
538245
+ if ([System.IO.Directory]::Exists($env:BLUN_PICKER_INITIAL_PATH)) {
538246
+ $dialog.SelectedPath = $env:BLUN_PICKER_INITIAL_PATH
538247
+ }
538248
+ $owner.ShowInTaskbar = $false
538249
+ $owner.TopMost = $true
538250
+ $owner.Opacity = 0
538251
+ $owner.Width = 1
538252
+ $owner.Height = 1
538253
+ $owner.Show()
538254
+ $owner.Activate()
538255
+ if ($dialog.ShowDialog($owner) -eq [System.Windows.Forms.DialogResult]::OK) {
538256
+ @{ kind = 'selected'; path = $dialog.SelectedPath } | ConvertTo-Json -Compress
538257
+ } else {
538258
+ @{ kind = 'cancelled' } | ConvertTo-Json -Compress
538259
+ }
538260
+ } finally {
538261
+ $dialog.Dispose()
538262
+ $owner.Dispose()
538263
+ }
538264
+ `;
538265
+ const runPicker = (file, args, env) => new Promise((resolve, reject) => {
538266
+ const child = execFile(file, args, {
538267
+ env,
538268
+ windowsHide: true,
538269
+ timeout: 10 * 6e4,
538270
+ maxBuffer: 64 * 1024,
538271
+ encoding: "utf8"
538272
+ }, (error, stdout) => {
538273
+ process.removeListener("exit", closePicker);
538274
+ if (error) reject(error);
538275
+ else resolve(stdout);
538276
+ });
538277
+ const closePicker = () => {
538278
+ child.kill();
538279
+ };
538280
+ process.once("exit", closePicker);
538281
+ });
538282
+ function safeStartupWorkspacePath(value, options = {}) {
538283
+ if ((options.platform ?? process.platform) !== "win32") return value;
538284
+ const canonical = (path) => win32.resolve(path.replace(/^\\\\\?\\/, "")).toLowerCase();
538285
+ const root = canonical(options.windowsRoot ?? process.env["SystemRoot"] ?? "C:\\Windows");
538286
+ const isSystem = (path) => {
538287
+ const normalized = canonical(path);
538288
+ return normalized === root || normalized.startsWith(root + "\\");
538289
+ };
538290
+ if (!isSystem(value)) return value;
538291
+ const home = options.home ?? homedir();
538292
+ return isSystem(home) ? win32.parse(home).root : home;
538293
+ }
538294
+ async function pickNativeFolder(initialPath, title, options = {}) {
538295
+ const platform = options.platform ?? process.platform;
538296
+ const env = options.env ?? process.env;
538297
+ if (platform !== "win32" || env["SSH_CONNECTION"] || env["SSH_TTY"]) return { kind: "unavailable" };
538298
+ const file = win32.join(env["SystemRoot"] ?? "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
538299
+ try {
538300
+ const output = await (options.run ?? runPicker)(file, [
538301
+ "-NoLogo",
538302
+ "-NoProfile",
538303
+ "-NonInteractive",
538304
+ "-STA",
538305
+ "-EncodedCommand",
538306
+ Buffer.from(WINDOWS_PICKER, "utf16le").toString("base64")
538307
+ ], {
538308
+ ...env,
538309
+ BLUN_PICKER_INITIAL_PATH: safeStartupWorkspacePath(initialPath, {
538310
+ platform,
538311
+ windowsRoot: env["SystemRoot"]
538312
+ }),
538313
+ BLUN_PICKER_TITLE: title
538314
+ });
538315
+ const result = JSON.parse(output.trim().replace(/^\uFEFF/, ""));
538316
+ if (typeof result !== "object" || result === null || !("kind" in result)) return { kind: "unavailable" };
538317
+ if (result.kind === "cancelled") return { kind: "cancelled" };
538318
+ if (result.kind === "selected" && "path" in result && typeof result.path === "string" && win32.isAbsolute(result.path) && !result.path.includes("\0")) return {
538319
+ kind: "selected",
538320
+ path: result.path
538321
+ };
538322
+ } catch {}
538323
+ return { kind: "unavailable" };
538324
+ }
538325
+ //#endregion
538232
538326
  //#region src/tui/startup/workspace-prompts.ts
538233
538327
  function startupWorkspacePromptCopy() {
538234
538328
  return {
@@ -538262,6 +538356,10 @@ function promptStartupWorkspaceChoice(host, currentPath, copy) {
538262
538356
  value: "change",
538263
538357
  label: copy.chooseOther
538264
538358
  },
538359
+ {
538360
+ value: "enter",
538361
+ label: copy.input.title
538362
+ },
538265
538363
  {
538266
538364
  value: "exit",
538267
538365
  label: copy.exit,
@@ -538299,10 +538397,19 @@ function promptStartupWorkspacePath(host, initialPath, copy) {
538299
538397
  }));
538300
538398
  });
538301
538399
  }
538400
+ async function promptStartupWorkspaceFolder(host, initialPath, copy, picker = pickNativeFolder) {
538401
+ const result = await picker(initialPath, copy.choiceTitle);
538402
+ if (result.kind === "selected") return {
538403
+ kind: "entered",
538404
+ path: result.path
538405
+ };
538406
+ if (result.kind === "cancelled") return { kind: "back" };
538407
+ return promptStartupWorkspacePath(host, initialPath, copy);
538408
+ }
538302
538409
  //#endregion
538303
538410
  //#region src/tui/startup/workspace-selection.ts
538304
538411
  async function selectStartupWorkspace(initialWorkDir, persistedWorkDir, port) {
538305
- let currentPath = persistedWorkDir ?? initialWorkDir;
538412
+ let currentPath = safeStartupWorkspacePath(persistedWorkDir ?? initialWorkDir);
538306
538413
  while (true) {
538307
538414
  const choice = await port.choose(currentPath);
538308
538415
  if (choice === "exit") return { kind: "cancelled" };
@@ -538316,7 +538423,7 @@ async function selectStartupWorkspace(initialWorkDir, persistedWorkDir, port) {
538316
538423
  }
538317
538424
  let inputPath = currentPath;
538318
538425
  while (true) {
538319
- const entered = await port.enter(inputPath);
538426
+ const entered = await (choice === "change" ? port.browse ?? port.enter : port.enter)(inputPath);
538320
538427
  if (entered.kind === "back") break;
538321
538428
  if (entered.kind === "exit") return { kind: "cancelled" };
538322
538429
  const validated = await port.validate(entered.path);
@@ -539193,6 +539300,7 @@ var BlunTUI = class {
539193
539300
  const result = await selectStartupWorkspace(this.state.appState.workDir, persisted?.lastWorkDir ?? null, {
539194
539301
  choose: (currentPath) => promptStartupWorkspaceChoice(this, currentPath, copy),
539195
539302
  enter: (currentPath) => promptStartupWorkspacePath(this, currentPath, copy),
539303
+ browse: (currentPath) => promptStartupWorkspaceFolder(this, currentPath, copy),
539196
539304
  validate: validateWorkspacePath,
539197
539305
  persist: writeStartupWorkspaceState,
539198
539306
  invalid: (path) => {