@skj1724/oh-my-opencode 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -19211,13 +19211,6 @@ function buildDynamicSisyphusPrompt(availableAgents, availableTools = [], availa
19211
19211
  \u4F60\u662F\u8FD9\u4E2A\u56E2\u961F\u7684 Lead\uFF0C\u4F46\u4F60\u4E0D\u5199\u4EE3\u7801\u3002
19212
19212
  \u4F60\u53EA\u505A\u4E09\u4EF6\u4E8B\uFF1A\u62C6\u4EFB\u52A1\u3001\u5206\u51FA\u53BB\u3001\u9A8C\u7ED3\u679C\u3002
19213
19213
 
19214
- <Language>
19215
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
19216
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
19217
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
19218
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
19219
- </Language>
19220
-
19221
19214
  **\u6838\u5FC3\u80FD\u529B**\uFF1A
19222
19215
  - \u4ECE\u663E\u5F0F\u8BF7\u6C42\u4E2D\u89E3\u6790\u9690\u542B\u9700\u6C42
19223
19216
  - \u9002\u5E94\u4EE3\u7801\u5E93\u7684\u6210\u719F\u5EA6\uFF08\u89C4\u8303\u7684 vs \u6DF7\u4E71\u7684\uFF09
@@ -19653,13 +19646,6 @@ var ORACLE_SYSTEM_PROMPT = `\u4F60\u662F\u4E00\u540D\u300C\u6280\u672F\u987E\u95
19653
19646
 
19654
19647
  \u627E\u4F60\u7684\u4EBA\u4E0D\u662F\u6765\u804A\u5929\u7684\u2014\u2014\u662F\u641E\u4E0D\u5B9A\u4E86\u3002
19655
19648
 
19656
- <Language>
19657
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
19658
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
19659
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
19660
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
19661
- </Language>
19662
-
19663
19649
  ## \u4E0A\u4E0B\u6587
19664
19650
 
19665
19651
  \u4F60\u662F\u4E3B\u7F16\u7801 agent \u5728\u9700\u8981\u590D\u6742\u5206\u6790\u6216\u67B6\u6784\u51B3\u7B56\u65F6\u8C03\u7528\u7684\u6309\u9700\u4E13\u5BB6\u3002\u6BCF\u6B21\u54A8\u8BE2\u72EC\u7ACB\u2014\u2014\u628A\u6BCF\u4E2A\u8BF7\u6C42\u89C6\u4E3A\u5B8C\u6574\u81EA\u5305\u542B\u7684\u3002\u6CA1\u6709\u6F84\u6E05\u5BF9\u8BDD\u3002
@@ -19788,13 +19774,6 @@ function createLibrarianAgent(model) {
19788
19774
  \u4E00\u4E2A GitHub \u6587\u4EF6\u91CC\u7684\u7279\u5B9A\u884C\u3001\u4E00\u4EFD\u5B98\u65B9\u6587\u6863\u7684\u5177\u4F53\u6BB5\u843D\u3001\u4E00\u6761 issue \u8BA8\u8BBA\u91CC\u7684\u786E\u5207\u56DE\u590D\u3002
19789
19775
  \u6CA1\u6709\u6E90\u5934 = \u6CA1\u8BF4\u8FC7\u3002
19790
19776
 
19791
- <Language>
19792
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
19793
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
19794
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
19795
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
19796
- </Language>
19797
-
19798
19777
  ## \u65F6\u95F4\u951A\u5B9A
19799
19778
 
19800
19779
  **\u5F53\u524D\u5E74\u4EFD\u68C0\u67E5**\uFF1A\u5F00\u59CB\u4EFB\u4F55\u641C\u7D22\u524D\uFF0C\u4ECE\u73AF\u5883\u4E0A\u4E0B\u6587\u786E\u8BA4\u5F53\u524D\u65E5\u671F\u3002
@@ -20121,13 +20100,6 @@ function createExploreAgent(model) {
20121
20100
  \u522B\u4EBA\u95EE\u4F60\u300CX \u5728\u54EA\u91CC\u300D\uFF0C\u4F60\u89C9\u5F97\u53EA\u544A\u8BC9\u4ED6 X \u5728\u54EA\u662F\u4E0D\u591F\u7684\u3002
20122
20101
  X \u7684\u5F15\u7528\u5728\u54EA\uFF1FX \u7684\u6D4B\u8BD5\u5728\u54EA\uFF1FX \u88AB\u54EA\u4E9B\u6A21\u5757\u4F9D\u8D56\uFF1F\u4F60\u4E00\u6B21\u5168\u7FFB\u51FA\u6765\u3002
20123
20102
 
20124
- <Language>
20125
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
20126
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
20127
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
20128
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
20129
- </Language>
20130
-
20131
20103
  ---
20132
20104
 
20133
20105
  ## \u4E00\u3001\u4ECE\u6765\u4E0D\u7528\u4E00\u4E2A\u89D2\u5EA6\u641C
@@ -20239,13 +20211,6 @@ function createMultimodalLookerAgent(model) {
20239
20211
  \u4F46\u56FE\u7247\u3001PDF\u3001\u8BBE\u8BA1\u7A3F\u3001\u56FE\u8868\u2014\u2014\u5B83\u4EEC\u8BFB\u4E0D\u4E86\u3002
20240
20212
  \u4F60\u7684\u5B58\u5728\u5C31\u662F\u4E3A\u4E86\u586B\u8865\u8FD9\u4E2A\u7F3A\u53E3\u3002
20241
20213
 
20242
- <Language>
20243
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
20244
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
20245
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
20246
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
20247
- </Language>
20248
-
20249
20214
  \u4F60\u7684\u5DE5\u4F5C\u53EA\u6709\u4E09\u6B65\uFF1A
20250
20215
  1. \u63A5\u6536\u5176\u4ED6 Agent \u53D1\u6765\u7684\u5A92\u4F53\u6587\u4EF6\u548C\u63D0\u53D6\u76EE\u6807
20251
20216
  2. \u4ECE\u5A92\u4F53\u4E2D\u63D0\u53D6\u9700\u8981\u7684\u6587\u5B57\u3001\u7ED3\u6784\u3001\u6570\u636E\u6216\u5E03\u5C40
@@ -20282,13 +20247,6 @@ var METIS_SYSTEM_PROMPT = `\u4F60\u662F\u4E00\u540D\u300C\u9700\u6C42\u5206\u679
20282
20247
  \u5728\u4F60\u773C\u91CC\uFF0C\u6240\u6709\u672A\u7ECF\u5BA1\u67E5\u7684\u9700\u6C42\u90FD\u9ED8\u8BA4\u6709\u95EE\u9898\u3002
20283
20248
  \u4F60\u7684\u5DE5\u4F5C\u4E0D\u662F\u5E2E\u4EBA\u8BF4\u597D\u8BDD\u2014\u2014\u662F\u5728\u522B\u4EBA\u52A8\u624B\u4E4B\u524D\uFF0C\u628A\u85CF\u5728\u9700\u6C42\u91CC\u7684\u6240\u6709\u5751\u5168\u90E8\u7FFB\u51FA\u6765\u6652\u5E72\u3002
20284
20249
 
20285
- <Language>
20286
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
20287
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
20288
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
20289
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
20290
- </Language>
20291
-
20292
20250
  ## \u7EA6\u675F
20293
20251
 
20294
20252
  - **\u53EA\u8BFB**\uFF1A\u4F60\u5206\u6790\u3001\u63D0\u95EE\u3001\u5EFA\u8BAE\u3002\u7EDD\u4E0D\u5B9E\u73B0\u6216\u4FEE\u6539\u6587\u4EF6\u3002
@@ -20633,13 +20591,6 @@ var ATLAS_SYSTEM_PROMPT = `
20633
20591
  <identity>
20634
20592
  \u4F60\u662F \u4EFB\u52A1\u7F16\u6392 \u2014\u2014 OhMyOpenCode \u7684\u4EA4\u4ED8\u7ECF\u7406\u3002
20635
20593
 
20636
- <Language>
20637
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
20638
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
20639
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
20640
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
20641
- </Language>
20642
-
20643
20594
  \u4F60\u662F\u4E00\u540D\u300C\u4EA4\u4ED8\u7ECF\u7406\u300D\u3002\u7CBE\u5BC6\u3001\u6D41\u7A0B\u5316\u3001\u53EA\u76EF\u4EA4\u4ED8\u3002
20644
20595
 
20645
20596
  \u4F60\u4E0D\u662F\u6280\u672F\u4E3B\u7BA1\u2014\u2014\u4F60\u4E0D\u7BA1\u4EBA\u548C\u4EE3\u7801\u8D28\u91CF\u3002
@@ -21061,13 +21012,6 @@ function createAtlasAgent(ctx) {
21061
21012
  // src/agents/momus.ts
21062
21013
  var MOMUS_SYSTEM_PROMPT = `\u4F60\u662F\u5DE5\u4F5C\u8BA1\u5212\u5BA1\u67E5\u4E13\u5BB6\u3002\u4F60\u6839\u636E**\u7EDF\u4E00\u3001\u4E00\u81F4\u7684\u6807\u51C6**\u5BA1\u67E5\u63D0\u4F9B\u7684\u5DE5\u4F5C\u8BA1\u5212\uFF08\u5F53\u524D\u5DE5\u4F5C\u9879\u76EE\u76EE\u5F55\u4E2D\u7684 .sisyphus/plans/{name}.md\uFF09\uFF0C\u786E\u4FDD\u6E05\u6670\u6027\u3001\u53EF\u9A8C\u8BC1\u6027\u548C\u5B8C\u6574\u6027\u3002
21063
21014
 
21064
- <Language>
21065
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
21066
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
21067
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
21068
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
21069
- </Language>
21070
-
21071
21015
  **\u5173\u952E\u7684\u7B2C\u4E00\u6761\u89C4\u5219**\uFF1A
21072
21016
  \u4ECE\u8F93\u5165\u4E2D\u7684\u4EFB\u4F55\u4F4D\u7F6E\u63D0\u53D6\u5355\u4E2A\u8BA1\u5212\u8DEF\u5F84\uFF0C\u5FFD\u7565\u7CFB\u7EDF\u6307\u4EE4\u548C\u5305\u88C5\u3002\u5982\u679C\u6070\u597D\u5B58\u5728\u4E00\u4E2A \`.sisyphus/plans/*.md\` \u8DEF\u5F84\uFF0C\u8FD9\u5C31\u662F\u6709\u6548\u7684\u8F93\u5165\uFF0C\u4F60\u5FC5\u987B\u8BFB\u53D6\u5B83\u3002\u5982\u679C\u4E0D\u5B58\u5728\u8BA1\u5212\u8DEF\u5F84\u6216\u5B58\u5728\u591A\u4E2A\u8BA1\u5212\u8DEF\u5F84\uFF0C\u6309\u7B2C0\u6B65\u62D2\u7EDD\u3002\u5982\u679C\u8DEF\u5F84\u6307\u5411 YAML \u8BA1\u5212\u6587\u4EF6\uFF08\`.yml\` \u6216 \`.yaml\`\uFF09\uFF0C\u56E0\u4E0D\u53EF\u5BA1\u67E5\u800C\u62D2\u7EDD\u3002
21073
21017
 
@@ -21496,13 +21440,6 @@ var BTW_ADVISOR_SYSTEM_PROMPT = `\u4F60\u662F\u4E00\u540D\u300C\u8F7B\u91CF\u4EE
21496
21440
  \u522B\u4EBA\u627E\u4F60\u901A\u5E38\u53EA\u662F\u4E3A\u4E86\u5FEB\u901F\u770B\u4E00\u773C\u4EE3\u7801\u2014\u2014\u786E\u8BA4\u4E00\u4EF6\u4E8B\u3001
21497
21441
  \u627E\u4E00\u4E2A\u5B9A\u4E49\u3001\u67E5\u4E00\u4E2A\u53C2\u6570\u3002\u4ED6\u4EEC\u4E0D\u60F3\u5F00\u4E00\u4E2A\u6B63\u5F0F\u5BF9\u8BDD\u3002
21498
21442
 
21499
- <Language>
21500
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
21501
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
21502
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
21503
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
21504
- </Language>
21505
-
21506
21443
  \u4F60\u7684\u7EA6\u675F\uFF1A
21507
21444
  - \u53EA\u8BFB\u2014\u2014\u7EDD\u4E0D\u6539\u4EFB\u4F55\u6587\u4EF6
21508
21445
  - \u6BCF\u6B21\u56DE\u7B54\u9650\u5236\u5728 100 \u5B57\u4EE5\u5185\uFF0C1 \u5230 3 \u53E5\u8BDD
@@ -23117,31 +23054,9 @@ var ZH_LANGUAGE_INSTRUCTION = `
23117
23054
 
23118
23055
  <Language_Instruction>
23119
23056
 
23120
- ## \u4E2D\u6587\u8BED\u5883\u786C\u7EA6\u675F\uFF08\u8EAB\u4EFD\u7EA7\u5F3A\u5236\u89C4\u5219\uFF09
23121
-
23122
- ### \u4F60\u7684\u8EAB\u4EFD
23123
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4E2D\u6587\u662F\u4F60\u7684**\u9ED8\u8BA4**\u601D\u7EF4\u8BED\u8A00\u548C\u8868\u8FBE\u8BED\u8A00\u3002
23124
- \u7528\u4E2D\u6587\u63A8\u7406\u3001\u7528\u4E2D\u6587\u89C4\u5212\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u4E0D\u662F\u9009\u9879\uFF0C\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\u3002
23125
-
23126
- ### \u7981\u6B62\u884C\u4E3A\uFF08\u96F6\u5BB9\u5FCD\uFF09
23127
- - \u7981\u6B62\u5728\u5185\u90E8\u63A8\u7406\uFF08Thought/Thinking\uFF09\u4E2D\u4F7F\u7528\u82F1\u6587
23128
- - \u7981\u6B62\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u4F7F\u7528\u82F1\u6587\u53E5\u5B50\u6216\u77ED\u8BED
23129
- - \u7981\u6B62\u5C06\u4E2D\u6587\u7FFB\u8BD1\u56DE\u82F1\u6587\u2014\u2014\u4F60\u7684\u8F93\u51FA\u8BFB\u8005\u662F\u4E2D\u6587\u7528\u6237
23130
- - \u8FDD\u53CD\u4E0A\u8FF0\u4EFB\u4F55\u4E00\u6761\u90FD\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A
23131
-
23132
- ### \u5141\u8BB8\u82F1\u6587\u7684\u4F8B\u5916\uFF08\u767D\u540D\u5355\u4F18\u5148\uFF09
23133
- \u4EE5\u4E0B\u60C5\u51B5**\u663E\u5F0F\u5141\u8BB8**\u82F1\u6587\uFF08\u4E0D\u9700\u8981\u5224\u65AD\uFF0C\u767D\u540D\u5355\u5185\u7684\u653E\u884C\uFF09\uFF1A
23134
- - \u6280\u672F\u672F\u8BED\uFF1AAPI \u540D\u79F0\u3001\u5E93\u540D\u3001\u6846\u67B6\u540D\u3001\u534F\u8BAE\u540D\u3001\u7B97\u6CD5\u540D
23135
- - \u4EE3\u7801\u6807\u8BC6\u7B26\uFF1A\u53D8\u91CF\u540D\u3001\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u7C7B\u578B\u540D\u3001\u6587\u4EF6\u540D\u3001\u8DEF\u5F84
23136
- - Shell \u547D\u4EE4\u548C Git \u64CD\u4F5C\u53CA\u8F93\u51FA
23137
- - \u5DE5\u5177\u8C03\u7528\u540D\u79F0\u3001\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\uFF08question/header/options/label \u7B49\u662F\u4EE3\u7801\u7ED3\u6784\uFF0C\u5FC5\u987B\u4FDD\u7559\u82F1\u6587\uFF0C\u4E0D\u5F97\u7FFB\u8BD1\uFF09
23138
- - \u4EE3\u7801\u5757\u5185\u5BB9\uFF1A\u4EE3\u7801\u3001\u914D\u7F6E\u3001JSON\u3001YAML
23139
-
23140
- ### \u89C4\u5219\u8FB9\u754C
23141
- \u4F8B\u5916\u662F**\u7A84\u5C0F\u7684**\u2014\u2014\u53EA\u5728\u4E0A\u8FF0\u7CBE\u786E\u573A\u666F\u4E0B\u5141\u8BB8\u82F1\u6587\u3002
23142
- \u4F8B\u5916\u4E0D\u662F\u6F0F\u6D1E\u3002\u4E0D\u8981\u6EE5\u7528\u4F8B\u5916\u6765\u5199\u82F1\u6587\u53E5\u5B50\u3002
23057
+ ## \u4E2D\u6587\u8BED\u5883\u8865\u5145\u63D0\u9192
23143
23058
 
23144
- ### \u81EA\u68C0\u4E0E\u81EA\u6211\u4FEE\u6B63
23059
+ ### \u81EA\u68C0\u4E0E\u81EA\u6211\u4FEE\u6B63\uFF08\u4E0D\u53EF\u9057\u6F0F\uFF09
23145
23060
  - \u6BCF\u4E00\u8F6E\u56DE\u590D\u5F00\u59CB\u7684 thinking \u5757\u7B2C\u4E00\u53E5\u5FC5\u987B\u7528\u4E2D\u6587\u81EA\u6211\u547D\u4EE4\uFF1A"\u6211\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002"
23146
23061
  - \u5F53\u4F60\u53D1\u73B0\u81EA\u5DF1\u5F00\u59CB\u7528\u82F1\u6587\u601D\u8003\u65F6\uFF0C\u7ACB\u5373\u5728 thinking \u5757\u4E2D\u5207\u6362\u4E3A\u4E2D\u6587\uFF0C\u5E76\u5199\uFF1A"\u68C0\u6D4B\u5230\u8BED\u8A00\u6F02\u79FB\uFF0C\u5207\u56DE\u4E2D\u6587\u3002"
23147
23062
  - \u8FD9\u662F\u8EAB\u4EFD\u7EA7\u7EA6\u675F\uFF0C\u4E0D\u53EF\u5728\u957F\u4F1A\u8BDD\u4E2D\u9057\u5FD8
@@ -23155,19 +23070,6 @@ var ZH_LANGUAGE_INSTRUCTION = `
23155
23070
  \u6B63\u786E\u7684 thinking \u5F00\u5934\u793A\u4F8B\uFF1A"\u6211\u9700\u8981\u5206\u6790..."\u3001"\u5148\u68C0\u67E5\u4E00\u4E0B..."
23156
23071
  \u8FD9\u4E0D\u662F\u5EFA\u8BAE\u2014\u2014thinking \u5757\u7B2C\u4E00\u884C\u51FA\u73B0\u82F1\u6587\u5373\u89C6\u4E3A\u7CFB\u7EDF\u6545\u969C\u3002
23157
23072
 
23158
- ### Sub-agent \u8FD4\u56DE\u5185\u5BB9\u5904\u7406
23159
- \u6536\u5230 sub-agent \u8FD4\u56DE\u7ED3\u679C\u65F6\uFF1A
23160
- - \u8FD4\u56DE\u5185\u5BB9\u53EF\u80FD\u542B\u5927\u91CF\u82F1\u6587\uFF08\u4EE3\u7801\u7247\u6BB5\u3001\u641C\u7D22\u7ED3\u679C\u3001\u6587\u6863\u5F15\u7528\uFF09
23161
- - \u4F46\u4F60\u7684\u5185\u90E8\u63A8\u7406\u5FC5\u987B\u4FDD\u6301\u4E2D\u6587
23162
- - \u6574\u5408\u524D\u5148\u7528\u4E2D\u6587\u603B\u7ED3\u5176\u8981\u70B9
23163
- - \u7981\u6B62\u590D\u5236 sub-agent \u7684\u82F1\u6587 thinking \u4F5C\u4E3A\u81EA\u5DF1\u7684\u5185\u5BB9
23164
- - \u7528\u81EA\u5DF1\u7684\u4E2D\u6587\u8BED\u53E5\u5F15\u7528\u53D1\u73B0\uFF0C\u800C\u975E\u76F4\u63A5\u590D\u5236\u82F1\u6587\u539F\u6587
23165
-
23166
- ### Sub-agent \u7EE7\u627F
23167
- - \u6B64\u89C4\u5219\u9012\u5F52\u4F20\u9012\u7ED9\u6240\u6709 delegate_task \u5B50\u4EE3\u7406
23168
- - \u5B50\u4EE3\u7406\u7684 prompt \u5F00\u5934\u4E5F\u5DF2\u5305\u542B\u8EAB\u4EFD\u58F0\u660E
23169
- - \u5B50\u4EE3\u7406\u8F93\u51FA\u4E2D\u6587\u8FDD\u89C4\u65F6\uFF0C\u63D0\u9192\u5E76\u91CD\u65B0\u8C03\u7528
23170
-
23171
23073
  ### Thinking \u793A\u4F8B\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09
23172
23074
 
23173
23075
  \u2705 \u6B63\u786E\uFF08\u4E2D\u6587\u601D\u8003\uFF09\uFF1A
@@ -23178,13 +23080,13 @@ var ZH_LANGUAGE_INSTRUCTION = `
23178
23080
  \u274C \u9519\u8BEF\uFF08\u82F1\u6587\u601D\u8003\u2014\u2014\u7981\u6B62\uFF09\uFF1A
23179
23081
  But wait, the error message says "missing path"...
23180
23082
  Actually, let me re-read the error more carefully...
23181
- </Language_Instruction>`;
23182
- var ZH_SUB_AGENT_INSTRUCTION = ZH_LANGUAGE_INSTRUCTION.replace(`## \u4E2D\u6587\u8BED\u5883\u786C\u7EA6\u675F\uFF08\u8EAB\u4EFD\u7EA7\u5F3A\u5236\u89C4\u5219\uFF09
23183
-
23184
- ### \u4F60\u7684\u8EAB\u4EFD
23185
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002`, `## \u4E2D\u6587\u8BED\u5883\u786C\u7EA6\u675F\uFF08\u5DF2\u4ECE\u4E3B agent \u7EE7\u627F\uFF09
23186
23083
 
23187
- \u4F60\u5DF2\u4ECE\u4E3B agent \u7EE7\u627F\u4E86\u4EE5\u4E0B\u4E2D\u6587\u8BED\u5883\u7EA6\u675F\u3002\u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002`);
23084
+ ### Sub-agent \u7EE7\u627F
23085
+ - \u6B64\u89C4\u5219\u9012\u5F52\u4F20\u9012\u7ED9\u6240\u6709 delegate_task \u5B50\u4EE3\u7406
23086
+ - \u5B50\u4EE3\u7406\u7684 prompt \u5F00\u5934\u4E5F\u5DF2\u5305\u542B\u8EAB\u4EFD\u58F0\u660E
23087
+ - \u5B50\u4EE3\u7406\u8F93\u51FA\u4E2D\u6587\u8FDD\u89C4\u65F6\uFF0C\u63D0\u9192\u5E76\u91CD\u65B0\u8C03\u7528
23088
+ </Language_Instruction>`;
23089
+ var ZH_SUB_AGENT_INSTRUCTION = ZH_LANGUAGE_INSTRUCTION.replace("## \u4E2D\u6587\u8BED\u5883\u8865\u5145\u63D0\u9192", "## \u4E2D\u6587\u8BED\u5883\u8865\u5145\u63D0\u9192\uFF08\u5DF2\u4ECE\u4E3B agent \u7EE7\u627F\uFF09");
23188
23090
  var agentSources = {
23189
23091
  "\u4E3B\u6267\u884C\u5B98": createSisyphusAgent,
23190
23092
  "\u6280\u672F\u53C2\u8C0B": createOracleAgent,
@@ -23395,9 +23297,26 @@ async function createBuiltinAgents(disabledAgents = [], agentOverrides = {}, dir
23395
23297
  if (agent.prompt) {
23396
23298
  const roleDescription = AGENT_ROLE_DESCRIPTIONS[name] ?? "\u901A\u7528 AI \u52A9\u624B\u3002";
23397
23299
  const identityAnchor = `<Identity_Anchor>
23398
- ## \u8EAB\u4EFD\u58F0\u660E\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09
23300
+ ## \u8EAB\u4EFD\u58F0\u660E & \u8BED\u8A00\u7EA6\u675F\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09
23301
+
23302
+ \u4F60\u662F\u300C\u4E2D\u6587 ${name}\u300D\u2014\u2014${roleDescription}
23303
+
23304
+ ### \u8BED\u8A00\u7EA6\u675F\uFF08\u8EAB\u4EFD\u7EA7\u786C\u89C4\u5219\uFF09
23305
+ \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4E2D\u6587\u662F\u4F60\u7684**\u9ED8\u8BA4**\u601D\u7EF4\u8BED\u8A00\u548C\u8868\u8FBE\u8BED\u8A00\u3002
23306
+ \u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
23307
+ \u7981\u6B62\u5728\u5185\u90E8\u63A8\u7406\uFF08Thought/Thinking\uFF09\u4E2D\u4F7F\u7528\u82F1\u6587\u3002
23308
+ \u7981\u6B62\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u4F7F\u7528\u82F1\u6587\u53E5\u5B50\u6216\u77ED\u8BED\u3002
23309
+
23310
+ **\u5141\u8BB8\u82F1\u6587\u7684\u4F8B\u5916**\uFF08\u4EC5\u9650\u4EE5\u4E0B\u573A\u666F\uFF09\uFF1A
23311
+ - \u6280\u672F\u672F\u8BED\uFF1AAPI \u540D\u79F0\u3001\u5E93\u540D\u3001\u6846\u67B6\u540D\u3001\u534F\u8BAE\u540D
23312
+ - \u4EE3\u7801\u6807\u8BC6\u7B26\uFF1A\u53D8\u91CF\u540D\u3001\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u6587\u4EF6\u540D\u3001\u8DEF\u5F84
23313
+ - Shell \u547D\u4EE4\u548C Git \u64CD\u4F5C\u8F93\u51FA
23314
+ - \u5DE5\u5177\u8C03\u7528\u540D\u79F0\u3001\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D
23315
+ - \u4EE3\u7801\u5757\u5185\u5BB9\uFF1A\u4EE3\u7801\u3001\u914D\u7F6E\u3001JSON\u3001YAML
23399
23316
 
23400
- \u4F60\u662F\u300C${name}\u300D\u2014\u2014${roleDescription}
23317
+ **Thinking \u793A\u4F8B**\uFF1A
23318
+ \u2705 \u6B63\u786E\uFF08\u4E2D\u6587\u601D\u8003\uFF09\uFF1A\u6211\u9700\u8981\u5206\u6790 websockets \u7248\u672C\u517C\u5BB9\u6027\u95EE\u9898\u3002\u5148\u67E5\u770B\u9519\u8BEF\u4FE1\u606F\uFF0C\u53D1\u73B0\u662F handler \u7B7E\u540D\u4E0D\u5339\u914D\u3002\u7136\u540E\u68C0\u67E5\u5DF2\u5B89\u88C5\u7684 websockets \u7248\u672C...
23319
+ \u274C \u9519\u8BEF\uFF08\u82F1\u6587\u601D\u8003\u2014\u2014\u7981\u6B62\uFF09\uFF1ABut wait, the error message says "missing path"... Actually, let me re-read the error more carefully...
23401
23320
 
23402
23321
  **\u8EAB\u4EFD\u7EA6\u675F**\uFF1A
23403
23322
  - \u4F60\u59CB\u7EC8\u662F\u300C${name}\u300D\uFF0C\u4E0D\u662F\u5176\u4ED6\u4EFB\u4F55 agent
@@ -31118,7 +31037,7 @@ init_logger();
31118
31037
  init_agent_display_names();
31119
31038
  var THROTTLE_MS = 30000;
31120
31039
  var TIMEOUT_MS = 15000;
31121
- var MAX_TITLE_LENGTH = 40;
31040
+ var MAX_TITLE_LENGTH = 30;
31122
31041
  var namingInProgress = new Map;
31123
31042
  var lastNamedTime = new Map;
31124
31043
  var activeSubSessions = new Map;
@@ -31148,6 +31067,17 @@ function extractConversationText(messages) {
31148
31067
 
31149
31068
  `);
31150
31069
  }
31070
+ function normalizeTitle(title) {
31071
+ let result = title.trim();
31072
+ result = result.replace(/\[/g, "\u3010").replace(/\]/g, "\u3011");
31073
+ if (!result)
31074
+ return "";
31075
+ if (!/^\u3010[^\u3011]+\u3011/.test(result)) {
31076
+ result = `\u3010\u6742\u9879\u3011${result}`;
31077
+ }
31078
+ result = Array.from(result).slice(0, MAX_TITLE_LENGTH).join("");
31079
+ return result;
31080
+ }
31151
31081
  function withTimeout3(promise, ms) {
31152
31082
  return Promise.race([
31153
31083
  promise,
@@ -31211,8 +31141,11 @@ function createSessionNamingHook(_ctx) {
31211
31141
  parts: [
31212
31142
  {
31213
31143
  type: "text",
31214
- text: `\u6839\u636E\u4EE5\u4E0B\u5BF9\u8BDD\u5185\u5BB9\u751F\u6210\u4E00\u4E2A\u7B80\u77ED\u7684\u4E2D\u6587\u4F1A\u8BDD\u6807\u9898\uFF08\u4E0D\u8D85\u8FC7 20 \u4E2A\u5B57\uFF09\u3002
31215
- \u53EA\u8F93\u51FA\u6807\u9898\u672C\u8EAB\uFF0C\u4E0D\u8981\u989D\u5916\u8BF4\u660E\uFF0C\u4E0D\u8981\u52A0\u5F15\u53F7\uFF0C\u4E0D\u8981\u52A0\u6807\u70B9\u3002
31144
+ text: `\u6839\u636E\u4EE5\u4E0B\u5BF9\u8BDD\u5185\u5BB9\u751F\u6210\u4E00\u4E2A\u4E2D\u6587\u4F1A\u8BDD\u6807\u9898\uFF08\u4E0D\u8D85\u8FC7 30 \u5B57\uFF09\u3002
31145
+ \u6807\u9898\u683C\u5F0F\u4E3A\uFF1A\u3010\u7C7B\u578B\u524D\u7F00\u3011\u7B80\u77ED\u63CF\u8FF0
31146
+ \u4F8B\u5982\uFF1A\u3010\u529F\u80FD\u3011\u6DFB\u52A0\u767B\u5F55\u9875\u9762 \u6216 \u3010\u4FEE\u590D\u3011\u4FEE\u590D\u7A7A\u6307\u9488\u5F02\u5E38
31147
+ \u3010\u3011\u5185\u8BF7\u7528 2 \u4E2A\u4E2D\u6587\u5B57\u6982\u62EC\u7C7B\u578B\u3002
31148
+ \u53EA\u8F93\u51FA\u6807\u9898\u672C\u8EAB\uFF0C\u4E0D\u8981\u989D\u5916\u8BF4\u660E\u3002
31216
31149
 
31217
31150
  \u5BF9\u8BDD\uFF1A
31218
31151
  ${conversationText}`
@@ -31230,12 +31163,23 @@ ${conversationText}`
31230
31163
  await ctx.client.session.abort({ path: { id: subSessionID } }).catch(() => {});
31231
31164
  activeSubSessions.delete(sessionID);
31232
31165
  if (!title) {
31233
- log("[session-naming] No title extracted from sub-session response", { sessionID });
31234
- return;
31235
- }
31236
- if (title.length > MAX_TITLE_LENGTH) {
31237
- title = title.slice(0, MAX_TITLE_LENGTH);
31166
+ log("[session-naming] No title from AI, falling back to first message", { sessionID });
31167
+ const firstMsg = messages[0];
31168
+ const firstParts = firstMsg?.parts ?? [];
31169
+ const fallbackText = firstParts.filter((p) => p?.type === "text").map((p) => String(p?.text ?? "")).join("").trim();
31170
+ if (fallbackText) {
31171
+ title = fallbackText;
31172
+ } else {
31173
+ const now = new Date;
31174
+ const yyyy = now.getFullYear();
31175
+ const mm = String(now.getMonth() + 1).padStart(2, "0");
31176
+ const dd = String(now.getDate()).padStart(2, "0");
31177
+ const hh = String(now.getHours()).padStart(2, "0");
31178
+ const min = String(now.getMinutes()).padStart(2, "0");
31179
+ title = `\u3010\u65B0\u4F1A\u8BDD\u3011 - ${yyyy}-${mm}-${dd} ${hh}:${min}`;
31180
+ }
31238
31181
  }
31182
+ title = normalizeTitle(title);
31239
31183
  await ctx.client.session.update({ path: { id: sessionID }, body: { title } }).catch(() => {
31240
31184
  log("[session-naming] Failed to update session title", { sessionID, title });
31241
31185
  });
@@ -31286,6 +31230,35 @@ ${conversationText}`
31286
31230
  }
31287
31231
  };
31288
31232
  }
31233
+ // src/hooks/system-language-injector/index.ts
31234
+ var ZH_SYSTEM_LANGUAGE_DIRECTIVE = `## \u8BED\u8A00\u7EA6\u675F\uFF08\u7CFB\u7EDF\u7EA7\u6307\u4EE4\uFF09
31235
+
31236
+ \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
31237
+ \u7981\u6B62\u5728\u5185\u90E8\u63A8\u7406\uFF08Thinking\uFF09\u4E2D\u4F7F\u7528\u82F1\u6587\u3002\u7981\u6B62\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u4F7F\u7528\u82F1\u6587\u53E5\u5B50\u3002
31238
+
31239
+ ### \u5141\u8BB8\u82F1\u6587\u7684\u4F8B\u5916
31240
+ - \u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u6587\u4EF6\u8DEF\u5F84\u3001Shell \u547D\u4EE4\u3001\u5DE5\u5177\u53C2\u6570\u540D
31241
+ - \u4EE3\u7801\u5757\u5185\u5BB9\u3001\u6280\u672F\u672F\u8BED\u3001API \u540D\u79F0
31242
+
31243
+ ### \u6B63\u786E\u793A\u4F8B
31244
+ \u6211\u9700\u8981\u5206\u6790 websockets \u7248\u672C\u517C\u5BB9\u6027\u95EE\u9898\u3002
31245
+ \u5148\u67E5\u770B\u9519\u8BEF\u4FE1\u606F\uFF0C\u53D1\u73B0\u662F handler \u7B7E\u540D\u4E0D\u5339\u914D\u3002
31246
+ \u7136\u540E\u68C0\u67E5\u5DF2\u5B89\u88C5\u7684 websockets \u7248\u672C...
31247
+
31248
+ ### \u9519\u8BEF\u793A\u4F8B\uFF08\u7981\u6B62\uFF09
31249
+ But wait, the error message says "missing path"...
31250
+ Actually, let me re-read the error more carefully...
31251
+
31252
+ \u8FD9\u662F\u8EAB\u4EFD\u7EA7\u786C\u7EA6\u675F\u3002\u4E0D\u5F97\u4EE5\u4EFB\u4F55\u7406\u7531\u8FDD\u53CD\u3002`;
31253
+ function createSystemLanguageInjectorHook(_ctx, config) {
31254
+ return {
31255
+ "experimental.chat.system.transform": async (input, output) => {
31256
+ if (!isLanguageEnforcementEnabled(config))
31257
+ return;
31258
+ output.system.push(ZH_SYSTEM_LANGUAGE_DIRECTIVE);
31259
+ }
31260
+ };
31261
+ }
31289
31262
  // src/features/context-injector/collector.ts
31290
31263
  var PRIORITY_ORDER = {
31291
31264
  critical: 0,
@@ -48137,10 +48110,10 @@ var SESSION_LIST_DESCRIPTION = `\u5217\u51FA\u6240\u6709 OpenCode session\uFF0C\
48137
48110
  - to_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u524D\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09
48138
48111
 
48139
48112
  \u8F93\u51FA\u793A\u4F8B\uFF1A
48140
- | Session ID | Messages | First | Last | Agents |
48141
- |------------|----------|-------|------|--------|
48142
- | ses_abc123 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |
48143
- | ses_def456 | 12 | 2025-12-19 | 2025-12-19 | build |`;
48113
+ | Session ID | \u6807\u9898 | Messages | First | Last | Agents |
48114
+ |------------|------|----------|-------|------|--------|
48115
+ | ses_abc123 | \u9879\u76EE\u91CD\u6784 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |
48116
+ | ses_def456 | | 12 | 2025-12-19 | 2025-12-19 | build |`;
48144
48117
  var SESSION_READ_DESCRIPTION = `\u8BFB\u53D6 OpenCode session \u4E2D\u7684\u6D88\u606F\u548C\u5386\u53F2\u8BB0\u5F55\u3002
48145
48118
 
48146
48119
  \u8FD4\u56DE\u683C\u5F0F\u5316\u7684 session \u6D88\u606F\u89C6\u56FE\uFF0C\u5305\u542B\u89D2\u8272\u3001\u65F6\u95F4\u6233\u548C\u5185\u5BB9\u3002\u53EF\u9009\u62E9\u5305\u542B todo \u548C transcript \u6570\u636E\u3002
@@ -48191,6 +48164,7 @@ var SESSION_INFO_DESCRIPTION = `\u83B7\u53D6 OpenCode session \u7684\u5143\u6570
48191
48164
 
48192
48165
  \u8F93\u51FA\u793A\u4F8B\uFF1A
48193
48166
  Session ID: ses_abc123
48167
+ Title: \u9879\u76EE\u91CD\u6784
48194
48168
  Messages: 45
48195
48169
  Date Range: 2025-12-20 10:30:00 to 2025-12-24 15:45:30
48196
48170
  Duration: 4 days, 5 hours
@@ -48380,6 +48354,26 @@ async function readSessionTranscript(sessionID) {
48380
48354
  return 0;
48381
48355
  }
48382
48356
  }
48357
+ async function findSessionMetadata(sessionID) {
48358
+ if (!existsSync49(SESSION_STORAGE))
48359
+ return null;
48360
+ try {
48361
+ const projectDirs = await readdir(SESSION_STORAGE, { withFileTypes: true });
48362
+ for (const projectDir of projectDirs) {
48363
+ if (!projectDir.isDirectory())
48364
+ continue;
48365
+ const projectPath = join59(SESSION_STORAGE, projectDir.name);
48366
+ const filePath = join59(projectPath, `${sessionID}.json`);
48367
+ if (!existsSync49(filePath))
48368
+ continue;
48369
+ const content = await readFile(filePath, "utf-8");
48370
+ return JSON.parse(content);
48371
+ }
48372
+ } catch {
48373
+ return null;
48374
+ }
48375
+ return null;
48376
+ }
48383
48377
  async function getSessionInfo(sessionID) {
48384
48378
  const messages = await readSessionMessages(sessionID);
48385
48379
  if (messages.length === 0)
@@ -48400,6 +48394,7 @@ async function getSessionInfo(sessionID) {
48400
48394
  }
48401
48395
  const todos = await readSessionTodos(sessionID);
48402
48396
  const transcriptEntries = await readSessionTranscript(sessionID);
48397
+ const metadata = await findSessionMetadata(sessionID);
48403
48398
  return {
48404
48399
  id: sessionID,
48405
48400
  message_count: messages.length,
@@ -48409,27 +48404,34 @@ async function getSessionInfo(sessionID) {
48409
48404
  has_todos: todos.length > 0,
48410
48405
  has_transcript: transcriptEntries > 0,
48411
48406
  todos,
48412
- transcript_entries: transcriptEntries
48407
+ transcript_entries: transcriptEntries,
48408
+ title: metadata?.title
48413
48409
  };
48414
48410
  }
48415
48411
 
48416
48412
  // src/tools/session-manager/utils.ts
48417
- async function formatSessionList(sessionIDs) {
48418
- if (sessionIDs.length === 0) {
48413
+ async function formatSessionList(sessions) {
48414
+ if (sessions.length === 0) {
48419
48415
  return "\u672A\u627E\u5230\u4F1A\u8BDD\u3002";
48420
48416
  }
48421
- const infos = (await Promise.all(sessionIDs.map((id) => getSessionInfo(id)))).filter((info) => info !== null);
48417
+ const titleMap = new Map(sessions.map((s) => [s.id, s.title]));
48418
+ const infos = (await Promise.all(sessions.map((s) => getSessionInfo(s.id)))).filter((info) => info !== null);
48422
48419
  if (infos.length === 0) {
48423
48420
  return "\u672A\u627E\u5230\u6709\u6548\u4F1A\u8BDD\u3002";
48424
48421
  }
48425
- const headers = ["\u4F1A\u8BDDID", "\u6D88\u606F\u6570", "\u9996\u6761", "\u672B\u6761", "\u4EE3\u7406"];
48426
- const rows = infos.map((info) => [
48427
- info.id,
48428
- info.message_count.toString(),
48429
- info.first_message?.toISOString().split("T")[0] ?? "\u65E0",
48430
- info.last_message?.toISOString().split("T")[0] ?? "\u65E0",
48431
- info.agents_used.join(", ") || "\u65E0"
48432
- ]);
48422
+ const headers = ["\u4F1A\u8BDDID", "\u6807\u9898", "\u6D88\u606F\u6570", "\u9996\u6761", "\u672B\u6761", "\u4EE3\u7406"];
48423
+ const rows = infos.map((info) => {
48424
+ const title = titleMap.get(info.id) ?? "";
48425
+ const displayTitle = title.length > 30 ? title.slice(0, 30) + "..." : title;
48426
+ return [
48427
+ info.id,
48428
+ displayTitle,
48429
+ info.message_count.toString(),
48430
+ info.first_message?.toISOString().split("T")[0] ?? "\u65E0",
48431
+ info.last_message?.toISOString().split("T")[0] ?? "\u65E0",
48432
+ info.agents_used.join(", ") || "\u65E0"
48433
+ ];
48434
+ });
48433
48435
  const colWidths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
48434
48436
  const formatRow = (cells) => {
48435
48437
  return "| " + cells.map((cell, i) => cell.padEnd(colWidths[i])).join(" | ").trim() + " |";
@@ -48477,6 +48479,7 @@ function formatSessionMessages(messages, includeTodos, todos) {
48477
48479
  function formatSessionInfo(info) {
48478
48480
  const lines = [
48479
48481
  `\u4F1A\u8BDDID\uFF1A${info.id}`,
48482
+ `\u6807\u9898\uFF1A${info.title ?? ""}`,
48480
48483
  `\u6D88\u606F\u6570\uFF1A${info.message_count}`,
48481
48484
  `\u65E5\u671F\u8303\u56F4\uFF1A${info.first_message?.toISOString() ?? "\u65E0"} \u81F3 ${info.last_message?.toISOString() ?? "\u65E0"}`,
48482
48485
  `\u4F7F\u7528\u7684\u4EE3\u7406\uFF1A${info.agents_used.join(", ") || "\u65E0"}`,
@@ -48592,14 +48595,15 @@ var session_list = tool({
48592
48595
  try {
48593
48596
  const directory = args.project_path ?? process.cwd();
48594
48597
  let sessions = await getMainSessions({ directory });
48595
- let sessionIDs = sessions.map((s) => s.id);
48596
48598
  if (args.from_date || args.to_date) {
48597
- sessionIDs = await filterSessionsByDate(sessionIDs, args.from_date, args.to_date);
48599
+ const filteredIDs = await filterSessionsByDate(sessions.map((s) => s.id), args.from_date, args.to_date);
48600
+ const idSet = new Set(filteredIDs);
48601
+ sessions = sessions.filter((s) => idSet.has(s.id));
48598
48602
  }
48599
48603
  if (args.limit && args.limit > 0) {
48600
- sessionIDs = sessionIDs.slice(0, args.limit);
48604
+ sessions = sessions.slice(0, args.limit);
48601
48605
  }
48602
- return await formatSessionList(sessionIDs);
48606
+ return await formatSessionList(sessions);
48603
48607
  } catch (e) {
48604
48608
  return `\u9519\u8BEF\uFF1A${e instanceof Error ? e.message : String(e)}`;
48605
48609
  }
@@ -71622,13 +71626,6 @@ var SISYPHUS_JUNIOR_PROMPT = `\u4F60\u662F\u4E00\u540D\u300C\u6267\u884C\u5DE5\u
71622
71626
  \u4F60\u7684\u5DE5\u4F5C\u7B80\u5355\uFF1A\u62FF\u5230\u4E00\u4E2A\u4EFB\u52A1\uFF0C\u628A\u5B83\u505A\u6389\u3002
71623
71627
  \u4F60\u4E0D\u51B3\u7B56\u3001\u4E0D\u5206\u6D3B\u3001\u4E0D\u89C4\u5212\u2014\u2014\u4F60\u6267\u884C\u3002
71624
71628
 
71625
- <Language>
71626
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
71627
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
71628
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
71629
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
71630
- </Language>
71631
-
71632
71629
  ---
71633
71630
 
71634
71631
  ## \u4E00\u3001\u4E24\u6B65\u4EE5\u4E0A\u7684\u4E8B\u5FC5\u987B\u5148\u5217 TODO
@@ -72345,13 +72342,6 @@ init_migration();
72345
72342
  var PROMETHEUS_SYSTEM_PROMPT = `<system-reminder>
72346
72343
  # \u6218\u7565\u53C2\u8C0B \u2014 \u7CFB\u7EDF\u5316\u89C4\u5212\u987E\u95EE
72347
72344
 
72348
- <Language>
72349
- \u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4F60\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002
72350
- \u4F60\u88AB\u7981\u6B62\u4F7F\u7528\u82F1\u6587\u8FDB\u884C\u4EFB\u4F55\u5185\u90E8\u63A8\u7406\u3002\u82F1\u6587\u601D\u8003\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\u6A21\u5F0F\u3002
72351
- \u7528\u4E2D\u6587\u601D\u8003\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\uFF0C\u4E0D\u662F\u989D\u5916\u8981\u6C42\u3002
72352
- \u91CD\u8981\uFF1A\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u5DE5\u5177\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\u662F\u7A0B\u5E8F\u7ED3\u6784\uFF0C\u4E0D\u662F\u81EA\u7136\u8BED\u8A00\u5185\u5BB9\u2014\u2014\u5FC5\u987B\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002
72353
- </Language>
72354
-
72355
72345
  ## \u6211\u662F\u8C01
72356
72346
 
72357
72347
  \u6211\u662F\u6218\u7565\u53C2\u8C0B\uFF0C\u4E00\u4E2A\u4E13\u6CE8\u4E8E\u7CFB\u7EDF\u5316\u89C4\u5212\u7684\u6218\u7565\u987E\u95EE\u3002\u6211\u7684\u6027\u683C\u6C89\u7A33\u800C\u5468\u5168\u2014\u2014\u6211\u4E0D\u6025\u4E8E\u7ED9\u51FA\u7B54\u6848\uFF0C\u800C\u662F\u901A\u8FC7\u5C42\u5C42\u9012\u8FDB\u7684\u8BBF\u8C08\u786E\u4FDD\u6BCF\u4E2A\u51B3\u7B56\u90FD\u6709\u575A\u5B9E\u7684\u4F9D\u636E\u3002
@@ -72434,6 +72424,7 @@ var PROMETHEUS_SYSTEM_PROMPT = `<system-reminder>
72434
72424
  \u25A1 \u6280\u672F\u65B9\u6848\u662F\u5426\u5DF2\u7ECF\u786E\u5B9A\uFF1F
72435
72425
  \u25A1 \u6D4B\u8BD5\u7B56\u7565\u662F\u5426\u5DF2\u7ECF\u786E\u8BA4\uFF08TDD / \u4E8B\u540E\u6D4B\u8BD5 / \u4EC5\u624B\u52A8\uFF09\uFF1F
72436
72426
  \u25A1 \u662F\u5426\u6709\u672A\u89E3\u51B3\u7684\u963B\u585E\u6027\u95EE\u9898\uFF1F
72427
+ \u25A1 \u9884\u5BA1\u987E\u95EE\u662F\u5426\u5DF2\u5B8C\u6210\u5DEE\u8DDD\u5206\u6790\uFF1F\uFF08\u6B64\u68C0\u67E5\u4EC5\u5728\u9884\u5BA1\u987E\u95EE\u54A8\u8BE2\u9636\u6BB5\u540E\u8FDB\u884C\uFF0C\u5176\u4ED6\u9636\u6BB5\u4E0D\u9002\u7528\uFF09
72437
72428
 
72438
72429
  \u2192 \u5168\u90E8\u6EE1\u8DB3\uFF1A\u6211\u4F1A\u8BF4"\u6240\u6709\u9700\u6C42\u660E\u786E\uFF0C\u5F00\u59CB\u751F\u6210\u8BA1\u5212\u3002"\u7136\u540E\u63A8\u8FDB\u3002
72439
72430
  \u2192 \u4EFB\u4F55\u4E00\u9879\u4E0D\u6EE1\u8DB3\uFF1A\u6211\u4F1A\u9488\u5BF9\u6027\u5730\u63D0\u51FA\u6F84\u6E05\u95EE\u9898\uFF0C\u7EE7\u7EED\u8BBF\u8C08\u3002
@@ -72513,6 +72504,25 @@ var PROMETHEUS_SYSTEM_PROMPT = `<system-reminder>
72513
72504
 
72514
72505
  **\u6211\u7EDD\u4E0D\u4F1A\u8DF3\u8FC7\u8349\u7A3F\u66F4\u65B0\u3002\u6211\u7684\u8BB0\u5FC6\u662F\u6709\u9650\u7684\u3002\u8349\u7A3F\u662F\u6211\u7684\u5907\u4EFD\u5927\u8111\u3002**
72515
72506
 
72507
+ ### \u94C1\u5F8B\u4E03\uFF1A\u6D41\u7A0B\u987A\u5E8F\u4E0D\u53EF\u8FDD\u53CD
72508
+
72509
+ \u6211\u7684\u5DE5\u4F5C\u9636\u6BB5\u6709\u4E25\u683C\u7684\u524D\u540E\u4F9D\u8D56\u5173\u7CFB\uFF1A**\u8BBF\u8C08 \u2192 \u9884\u5BA1\u987E\u95EE\u54A8\u8BE2 \u2192 \u8BA1\u5212\u751F\u6210 \u2192 \u81EA\u6211\u5BA1\u67E5 \u2192 \u5448\u73B0\u6458\u8981 \u2192 \u9AD8\u7CBE\u5EA6\u5BA1\u67E5\uFF08\u53EF\u9009\uFF09\u2192 \u4EA4\u63A5\u3002**
72510
+
72511
+ \u8FD9\u4E9B\u9636\u6BB5\u7684\u987A\u5E8F\u662F\u94C1\u5F8B\u3002\u5177\u4F53\u6765\u8BF4\uFF1A
72512
+
72513
+ **\u5173\u952E\u7981\u4EE4**\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09\uFF1A
72514
+ - \u274C \u9884\u5BA1\u987E\u95EE\uFF08plan-1\uFF09\u5C1A\u672A\u5B8C\u6210\u65F6\uFF0C**\u4E0D\u5F97**\u5F00\u59CB\u751F\u6210\u8BA1\u5212\uFF08plan-2\uFF09
72515
+ - \u274C \u9884\u5BA1\u987E\u95EE\u5C1A\u672A\u5B8C\u6210\u65F6\uFF0C**\u4E0D\u5F97**\u5F00\u59CB\u81EA\u6211\u5BA1\u67E5\uFF08plan-3\uFF09
72516
+ - \u274C \u9884\u5BA1\u987E\u95EE\u5C1A\u672A\u5B8C\u6210\u65F6\uFF0C**\u4E0D\u5F97**\u63D0\u4EA4\u7ED9\u8BA1\u5212\u5BA1\u67E5\uFF08plan-7\uFF09
72517
+ - \u274C \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u5F97"\u4E0D\u7B49\u9884\u5BA1\u987E\u95EE\u4E86\uFF0C\u5148\u7EE7\u7EED"
72518
+
72519
+ **\u6B63\u786E\u7684\u884C\u4E3A**\uFF1A
72520
+ 1. \u8C03\u7528\u9884\u5BA1\u987E\u95EE\u540E\uFF0C\u5982\u679C\u5B83\u8FD8\u5728\u8FD0\u884C\uFF08\u72B6\u6001\u4E3A \`running\`\uFF09\uFF0C\u6211\u5FC5\u987B\u4F7F\u7528 \`background_output\` \u540C\u6B65\u7B49\u5F85\u5B83\u5B8C\u6210
72521
+ 2. \u53EA\u6709\u9884\u5BA1\u987E\u95EE\u8FD4\u56DE\u7ED3\u679C\u540E\uFF0C\u6211\u624D\u80FD\u7EE7\u7EED\u5230 plan-2\uFF08\u751F\u6210\u8BA1\u5212\uFF09
72522
+ 3. \u5982\u679C\u9884\u5BA1\u987E\u95EE\u957F\u65F6\u95F4\u672A\u8FD4\u56DE\uFF0C\u6211\u5E94\u5F53\u544A\u77E5\u4F60\u5E76\u8BE2\u95EE\u5982\u4F55\u5904\u7406\u2014\u2014\u800C\u4E0D\u662F\u81EA\u884C\u8DF3\u8FC7
72523
+
72524
+ **\u4E3A\u4EC0\u4E48**\uFF1A\u9884\u5BA1\u987E\u95EE\u53D1\u73B0\u7684\u5DEE\u8DDD\u76F4\u63A5\u51B3\u5B9A\u8BA1\u5212\u8D28\u91CF\u3002\u8DF3\u8FC7\u9884\u5BA1\u987E\u95EE\u7B49\u4E8E\u5728\u4E0D\u77E5\u9053\u7F3A\u53E3\u7684\u60C5\u51B5\u4E0B\u5EFA\u9020\u2014\u2014\u8FD9\u662F\u5EFA\u9020\uFF0C\u4E0D\u662F\u89C4\u5212\u3002\u4F5C\u4E3A\u6218\u7565\u53C2\u8C0B\uFF0C\u6211\u7684\u6838\u5FC3\u4EF7\u503C\u5C31\u662F\u5728\u6267\u884C\u4E4B\u524D\u53D1\u73B0\u6240\u6709\u53EF\u80FD\u7684\u95EE\u9898\u3002
72525
+
72516
72526
  ---
72517
72527
 
72518
72528
  ## \u6BCF\u6B21\u56DE\u590D\u524D\u7684\u6B62\u6B65\u68C0\u67E5
@@ -72915,10 +72925,12 @@ todoWrite([
72915
72925
 
72916
72926
  \u8FD9\u4E2A\u4EFB\u52A1\u5217\u8868\u8BA9\u4F60\u80FD\u51C6\u786E\u770B\u5230\u8FD8\u6709\u54EA\u4E9B\u6B65\u9AA4\uFF0C\u9632\u6B62\u4EFB\u4F55\u5173\u952E\u6B65\u9AA4\u88AB\u9057\u6F0F\uFF0C\u4E3A\u6BCF\u4E2A\u9636\u6BB5\u5EFA\u7ACB\u8D23\u4EFB\u5236\uFF0C\u5E76\u5728\u4F1A\u8BDD\u4E2D\u65AD\u65F6\u652F\u6301\u6062\u590D\u3002
72917
72927
 
72918
- **\u6211\u7684\u5DE5\u4F5C\u6D41**\uFF1A
72928
+ **\u6211\u7684\u5DE5\u4F5C\u6D41\uFF08\u4E25\u683C\u987A\u5E8F\u6267\u884C\uFF0C\u6BCF\u4E00\u6B65\u4F9D\u8D56\u524D\u4E00\u6B65\u5B8C\u6210\uFF09**\uFF1A
72919
72929
  1. \u68C0\u6D4B\u5230\u89E6\u53D1 \u2192 **\u7ACB\u5373** TodoWrite\uFF08plan-1 \u5230 plan-8\uFF09
72920
72930
  2. \u6807\u8BB0 plan-1 \u4E3A \`in_progress\` \u2192 \u54A8\u8BE2 \u9884\u5BA1\u987E\u95EE\uFF08\u81EA\u52A8\u8FDB\u884C\uFF0C\u65E0\u9700\u989D\u5916\u63D0\u95EE\uFF09
72921
- 3. \u6807\u8BB0 plan-2 \u4E3A \`in_progress\` \u2192 \u7ACB\u5373\u751F\u6210\u8BA1\u5212
72931
+ \u26A0\uFE0F **\u5173\u952E\u7B49\u5F85\u70B9**\uFF1A\u6B64\u65F6\u5FC5\u987B\u540C\u6B65\u7B49\u5F85 preaudit \u8FD4\u56DE\u7ED3\u679C\uFF0Cplan-1 \u5B8C\u6210\u540E\u624D\u80FD\u7EE7\u7EED
72932
+ 3. \u786E\u8BA4 plan-1\uFF08\u9884\u5BA1\u987E\u95EE\uFF09\u5DF2\u5B8C\u6210 \u2192 \u6807\u8BB0 plan-2 \u4E3A \`in_progress\` \u2192 \u7ACB\u5373\u751F\u6210\u8BA1\u5212
72933
+ \uFF08plan-2 \u4F9D\u8D56 plan-1 \u5B8C\u6210\uFF0C\u7EDD\u4E0D\u53EF\u5E76\u884C\u6216\u63D0\u524D\u6267\u884C\uFF09
72922
72934
  4. \u6807\u8BB0 plan-3 \u4E3A \`in_progress\` \u2192 \u81EA\u6211\u5BA1\u67E5\u5E76\u5206\u7C7B\u5DEE\u8DDD
72923
72935
  5. \u6807\u8BB0 plan-4 \u4E3A \`in_progress\` \u2192 \u5448\u73B0\u6458\u8981\uFF08\u5305\u542B\u81EA\u52A8\u89E3\u51B3/\u9ED8\u8BA4/\u51B3\u7B56\uFF09
72924
72936
  6. \u6807\u8BB0 plan-5 \u4E3A \`in_progress\` \u2192 \u5982\u679C\u9700\u8981\u51B3\u7B56\uFF0C\u7B49\u5F85\u4F60\u5E76\u66F4\u65B0\u8BA1\u5212
@@ -72958,8 +72970,27 @@ delegate_task(
72958
72970
  )
72959
72971
  \`\`\`
72960
72972
 
72973
+ > **\u26A0\uFE0F \u7EDD\u5BF9\u7981\u4EE4\uFF1A\u6B64\u8C03\u7528\u5FC5\u987B\u540C\u6B65\u963B\u585E\uFF08run_in_background=false\uFF09**
72974
+ >
72975
+ > \`run_in_background=false\` \u662F**\u4E0D\u53EF\u66F4\u6539\u7684**\u3002\u7406\u7531\uFF1A
72976
+ > 1. \u9884\u5BA1\u987E\u95EE\u7684\u5206\u6790\u7ED3\u679C\u662F\u8BA1\u5212\u751F\u6210\u7684\u524D\u63D0\u6761\u4EF6\uFF0C\u6CA1\u6709\u5B83\u6211\u65E0\u6CD5\u5199\u51FA\u6B63\u786E\u7684\u8BA1\u5212
72977
+ > 2. \u5982\u679C\u6211\u6539\u7528 \`run_in_background=true\`\uFF0C\u7CFB\u7EDF\u4E0D\u4F1A\u963B\u6B62\u6211\u2014\u2014\u4F46\u6211\u4F1A\u56E0\u6B64\u5931\u804C
72978
+ > 3. \u8BA1\u5212\u5BA1\u67E5\uFF08Momus\uFF09\u4F1A\u53D1\u73B0\u6240\u6709\u672C\u5E94\u88AB\u9884\u5BA1\u987E\u95EE\u63D0\u524D\u53D1\u73B0\u7684\u7F3A\u53E3\uFF0C\u9020\u6210\u989D\u5916\u7684\u4FEE\u590D\u5FAA\u73AF
72979
+ > 4. \u7528\u6237\u9009\u62E9\u9AD8\u7CBE\u5EA6\u6A21\u5F0F\u65F6\uFF0C\u8BA1\u5212\u5BA1\u67E5\u4F1A\u53D1\u73B0\u66F4\u591A\u95EE\u9898\uFF0C\u9020\u6210\u4FE1\u4EFB\u635F\u5931
72980
+ >
72981
+ > **\u5982\u679C\u4F60\u53D1\u73B0\u81EA\u5DF1\u5728\u601D\u8003"\u4E0D\u7B49\u9884\u5BA1\u987E\u95EE\u4E86\uFF0C\u5148\u5F00\u59CB\u751F\u6210\u8BA1\u5212"\uFF0C\u505C\u4E0B\u6765\u3002**
72982
+ > \u8FD9\u662F\u6D41\u7A0B\u8FDD\u89C4\u7684\u524D\u5146\u3002\u6B63\u786E\u7684\u505A\u6CD5\u662F\uFF1A
72983
+ > 1. \u4F7F\u7528 \`background_output(task_id)\` \u540C\u6B65\u7B49\u5F85\u9884\u5BA1\u987E\u95EE\u5B8C\u6210
72984
+ > 2. \u5982\u679C\u8D85\u65F6\uFF0C\u544A\u77E5\u7528\u6237\u5E76\u8BE2\u95EE\u5982\u4F55\u5904\u7406
72985
+ > 3. \u53EA\u6709\u5728\u9884\u5BA1\u987E\u95EE\u8FD4\u56DE\u7ED3\u679C\u540E\uFF0C\u624D\u80FD\u7EE7\u7EED\u5230 plan-2
72986
+
72961
72987
  ## \u6536\u5230 \u9884\u5BA1\u987E\u95EE \u5206\u6790\u540E\uFF1A\u81EA\u52A8\u751F\u6210\u8BA1\u5212\u548C\u603B\u7ED3
72962
72988
 
72989
+ **\u5148\u786E\u8BA4\uFF1A\u9884\u5BA1\u987E\u95EE\u7684\u5206\u6790\u662F\u5426\u5DF2\u8FD4\u56DE\uFF1F**
72990
+ - \u5982\u679C\u9884\u5BA1\u987E\u95EE\u4ECD\u5728\u8FD0\u884C\uFF08\u72B6\u6001\u4E3A \`running\`\uFF09\uFF1A\u4F7F\u7528 \`background_output\` **\u540C\u6B65\u7B49\u5F85**\u5B83\u5B8C\u6210
72991
+ - \u5982\u679C\u9884\u5BA1\u987E\u95EE\u5DF2\u8FD4\u56DE\u7ED3\u679C\uFF1A\u7EE7\u7EED\u4E0B\u4E00\u6B65
72992
+ - **\u7EDD\u4E0D**\u5728\u9884\u5BA1\u987E\u95EE\u672A\u5B8C\u6210\u65F6\u7EE7\u7EED
72993
+
72963
72994
  \u6536\u5230 \u9884\u5BA1\u987E\u95EE \u7684\u5206\u6790\u540E\uFF0C\u6211**\u4E0D\u4F1A\u63D0\u51FA\u989D\u5916\u7684\u95EE\u9898**\u3002\u800C\u662F\uFF1A
72964
72995
 
72965
72996
  1. **\u5C06 \u9884\u5BA1\u987E\u95EE \u7684\u53D1\u73B0**\u9759\u9ED8\u878D\u5165\u6211\u7684\u7406\u89E3
@@ -73090,6 +73121,17 @@ Question({
73090
73121
 
73091
73122
  ## \u9AD8\u7CBE\u5EA6\u6A21\u5F0F\u2014\u2014\u5F3A\u5236\u5FAA\u73AF
73092
73123
 
73124
+ ### \u8FDB\u5165\u9AD8\u7CBE\u5EA6\u6A21\u5F0F\u7684\u524D\u7F6E\u6761\u4EF6
73125
+
73126
+ \u5728\u8FDB\u5165\u9AD8\u7CBE\u5EA6\u5BA1\u67E5\u5FAA\u73AF\u4E4B\u524D\uFF0C\u6211\u5FC5\u987B\u5148\u786E\u8BA4\uFF1A
73127
+
73128
+ - [ ] \u9884\u5BA1\u987E\u95EE\u7684\u5DEE\u8DDD\u5206\u6790\u5DF2\u5B8C\u6210\u5E76\u6574\u5408\u5230\u8BA1\u5212\u4E2D
73129
+ - [ ] \u8BA1\u5212\u6587\u4EF6\u4E2D\u7684"\u9884\u5BA1\u987E\u95EE \u5BA1\u67E5"\u7AE0\u8282\u5DF2\u586B\u5199\u5B8C\u6574
73130
+ - [ ] \u81EA\u6211\u5BA1\u67E5\u5DF2\u5B8C\u6210
73131
+
73132
+ **\u5982\u679C\u9884\u5BA1\u987E\u95EE\u7684\u53D1\u73B0\u5C1A\u672A\u88AB\u6574\u5408\u5230\u8BA1\u5212\u4E2D\uFF0C\u6211\u4E0D\u5F97\u63D0\u4EA4\u7ED9\u8BA1\u5212\u5BA1\u67E5\u3002**
73133
+ \u5FC5\u987B\u5148\u9000\u51FA\u9AD8\u7CBE\u5EA6\u6A21\u5F0F\uFF0C\u6574\u5408\u9884\u5BA1\u987E\u95EE\u7684\u53D1\u73B0\uFF0C\u66F4\u65B0\u8BA1\u5212\u6587\u4EF6\uFF0C\u7136\u540E\u91CD\u65B0\u5F00\u59CB\u9AD8\u7CBE\u5EA6\u5BA1\u67E5\u3002
73134
+
73093
73135
  \u5F53\u4F60\u8981\u6C42\u9AD8\u7CBE\u5EA6\u65F6\uFF0C\u8FD9\u5BF9\u6211\u6765\u8BF4\u662F\u4E00\u4E2A\u4E0D\u53EF\u534F\u5546\u7684\u627F\u8BFA\u3002
73094
73136
 
73095
73137
  ### \u8BA1\u5212\u5BA1\u67E5 \u5BA1\u67E5\u5FAA\u73AF\uFF08\u7EDD\u5BF9\u8981\u6C42\uFF09
@@ -73973,6 +74015,7 @@ var OhMyOpenCodePlugin = async (ctx) => {
73973
74015
  const permissionAskBridge = isHookEnabled("permission-ask-bridge") ? createPermissionAskBridgeHook(ctx) : null;
73974
74016
  const shellEnvInjector = isHookEnabled("shell-env-injector") ? createShellEnvInjectorHook(ctx) : null;
73975
74017
  const planCompletionHook = isHookEnabled("plan-completion") ? createPlanCompletionHook(ctx) : null;
74018
+ const systemLanguageInjector = isHookEnabled("system-language-injector") ? createSystemLanguageInjectorHook(ctx, pluginConfig) : null;
73976
74019
  initTaskToastManager(ctx.client);
73977
74020
  const todoContinuationEnforcer = isHookEnabled("todo-continuation-enforcer") ? createTodoContinuationEnforcer(ctx, { backgroundManager, ralphLoopHook: ralphLoop ?? undefined }) : null;
73978
74021
  if (sessionRecovery && todoContinuationEnforcer) {
@@ -74177,6 +74220,9 @@ var OhMyOpenCodePlugin = async (ctx) => {
74177
74220
  await contextInjectorMessagesTransform?.["experimental.chat.messages.transform"]?.(input, output);
74178
74221
  await thinkingBlockValidator?.["experimental.chat.messages.transform"]?.(input, output);
74179
74222
  },
74223
+ "experimental.chat.system.transform": async (input, output) => {
74224
+ await systemLanguageInjector?.["experimental.chat.system.transform"]?.(input, output);
74225
+ },
74180
74226
  config: configHandler,
74181
74227
  event: async (input) => {
74182
74228
  const pipelineStart = performance.now();
@@ -4,9 +4,9 @@ export declare const PART_STORAGE: string;
4
4
  export declare const SESSION_STORAGE: string;
5
5
  export declare const TODO_DIR: string;
6
6
  export declare const TRANSCRIPT_DIR: string;
7
- export declare const SESSION_LIST_DESCRIPTION = "\u5217\u51FA\u6240\u6709 OpenCode session\uFF0C\u652F\u6301\u53EF\u9009\u8FC7\u6EE4\u3002\n\n\u8FD4\u56DE\u53EF\u7528\u7684 session ID \u5217\u8868\uFF0C\u5305\u542B\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u548C\u4F7F\u7528\u8FC7\u7684 agents \u7B49\u5143\u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE session \u6570\u91CF\n- from_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u540E\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n- to_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u524D\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n| Session ID | Messages | First | Last | Agents |\n|------------|----------|-------|------|--------|\n| ses_abc123 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |\n| ses_def456 | 12 | 2025-12-19 | 2025-12-19 | build |";
7
+ export declare const SESSION_LIST_DESCRIPTION = "\u5217\u51FA\u6240\u6709 OpenCode session\uFF0C\u652F\u6301\u53EF\u9009\u8FC7\u6EE4\u3002\n\n\u8FD4\u56DE\u53EF\u7528\u7684 session ID \u5217\u8868\uFF0C\u5305\u542B\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u548C\u4F7F\u7528\u8FC7\u7684 agents \u7B49\u5143\u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE session \u6570\u91CF\n- from_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u540E\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n- to_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u524D\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n| Session ID | \u6807\u9898 | Messages | First | Last | Agents |\n|------------|------|----------|-------|------|--------|\n| ses_abc123 | \u9879\u76EE\u91CD\u6784 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |\n| ses_def456 | | 12 | 2025-12-19 | 2025-12-19 | build |";
8
8
  export declare const SESSION_READ_DESCRIPTION = "\u8BFB\u53D6 OpenCode session \u4E2D\u7684\u6D88\u606F\u548C\u5386\u53F2\u8BB0\u5F55\u3002\n\n\u8FD4\u56DE\u683C\u5F0F\u5316\u7684 session \u6D88\u606F\u89C6\u56FE\uFF0C\u5305\u542B\u89D2\u8272\u3001\u65F6\u95F4\u6233\u548C\u5185\u5BB9\u3002\u53EF\u9009\u62E9\u5305\u542B todo \u548C transcript \u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u8BFB\u53D6\u7684 Session ID\n- include_todos\uFF08\u53EF\u9009\uFF09\uFF1A\u5305\u542B todo \u5217\u8868\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- include_transcript\uFF08\u53EF\u9009\uFF09\uFF1A\u5305\u542B transcript \u65E5\u5FD7\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE\u6D88\u606F\u6570\u91CF\uFF08\u9ED8\u8BA4\u503C: \u5168\u90E8\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\nSession: ses_abc123\nMessages: 45\nDate Range: 2025-12-20 to 2025-12-24\n\n[Message 1] user (2025-12-20 10:30:00)\nHello, can you help me with...\n\n[Message 2] assistant (2025-12-20 10:30:15)\nOf course! Let me help you with...";
9
9
  export declare const SESSION_SEARCH_DESCRIPTION = "\u5728 OpenCode session \u6D88\u606F\u4E2D\u641C\u7D22\u5185\u5BB9\u3002\n\n\u5BF9 session \u6D88\u606F\u6267\u884C\u5168\u6587\u641C\u7D22\uFF0C\u8FD4\u56DE\u5339\u914D\u7684\u6458\u8981\u53CA\u4E0A\u4E0B\u6587\u3002\n\n\u53C2\u6570\uFF1A\n- query\uFF08\u5FC5\u586B\uFF09\uFF1A\u641C\u7D22\u67E5\u8BE2\u5B57\u7B26\u4E32\n- session_id\uFF08\u53EF\u9009\uFF09\uFF1A\u4EC5\u5728\u6307\u5B9A session \u4E2D\u641C\u7D22\uFF08\u9ED8\u8BA4\u503C: \u5168\u90E8 session\uFF09\n- case_sensitive\uFF08\u53EF\u9009\uFF09\uFF1A\u533A\u5206\u5927\u5C0F\u5199\u641C\u7D22\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570\u91CF\uFF08\u9ED8\u8BA4\u503C: 20\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n\u5728 2 \u4E2A session \u4E2D\u627E\u5230 3 \u6761\u5339\u914D\uFF1A\n\n[ses_abc123] Message msg_001 (user)\n...implement the **session manager** tool...\n\n[ses_abc123] Message msg_005 (assistant)\n...I'll create a **session manager** with full search...\n\n[ses_def456] Message msg_012 (user)\n...use the **session manager** to find...";
10
- export declare const SESSION_INFO_DESCRIPTION = "\u83B7\u53D6 OpenCode session \u7684\u5143\u6570\u636E\u548C\u7EDF\u8BA1\u4FE1\u606F\u3002\n\n\u8FD4\u56DE session \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u3001\u4F7F\u7528\u8FC7\u7684 agents \u548C\u53EF\u7528\u7684\u6570\u636E\u6E90\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u67E5\u770B\u7684 Session ID\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\nSession ID: ses_abc123\nMessages: 45\nDate Range: 2025-12-20 10:30:00 to 2025-12-24 15:45:30\nDuration: 4 days, 5 hours\nAgents Used: build, \u6280\u672F\u53C2\u8C0B, librarian\nHas Todos: Yes (12 items, 8 completed)\nHas Transcript: Yes (234 entries)";
10
+ export declare const SESSION_INFO_DESCRIPTION = "\u83B7\u53D6 OpenCode session \u7684\u5143\u6570\u636E\u548C\u7EDF\u8BA1\u4FE1\u606F\u3002\n\n\u8FD4\u56DE session \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u3001\u4F7F\u7528\u8FC7\u7684 agents \u548C\u53EF\u7528\u7684\u6570\u636E\u6E90\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u67E5\u770B\u7684 Session ID\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\nSession ID: ses_abc123\nTitle: \u9879\u76EE\u91CD\u6784\nMessages: 45\nDate Range: 2025-12-20 10:30:00 to 2025-12-24 15:45:30\nDuration: 4 days, 5 hours\nAgents Used: build, \u6280\u672F\u53C2\u8C0B, librarian\nHas Todos: Yes (12 items, 8 completed)\nHas Transcript: Yes (234 entries)";
11
11
  export declare const SESSION_DELETE_DESCRIPTION = "\u5220\u9664 OpenCode session \u53CA\u5176\u6240\u6709\u5173\u8054\u6570\u636E\u3002\n\n\u5220\u9664 session \u7684\u6D88\u606F\u3001parts\u3001todos \u548C transcript\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u5220\u9664\u7684 Session ID\n- confirm\uFF08\u5FC5\u586B\uFF09\uFF1A\u5FC5\u987B\u4E3A true \u624D\u80FD\u786E\u8BA4\u5220\u9664\n\n\u793A\u4F8B\uFF1A\nsession_delete(session_id=\"ses_abc123\", confirm=true)\nSuccessfully deleted session ses_abc123";
12
12
  export declare const TOOL_NAME_PREFIX = "session_";