baxian 2.0.1 → 2.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.
Files changed (144) hide show
  1. package/README.md +5 -7
  2. package/README.zh-CN.md +5 -7
  3. package/dist/agent/bootstrap.d.ts.map +1 -1
  4. package/dist/agent/bootstrap.js +2 -4
  5. package/dist/agent/bootstrap.js.map +1 -1
  6. package/dist/agent/branch.d.ts +0 -12
  7. package/dist/agent/branch.d.ts.map +1 -1
  8. package/dist/agent/branch.js +1 -71
  9. package/dist/agent/branch.js.map +1 -1
  10. package/dist/agent/dispatch-reconciler.d.ts.map +1 -1
  11. package/dist/agent/dispatch-reconciler.js +9 -9
  12. package/dist/agent/dispatch-reconciler.js.map +1 -1
  13. package/dist/agent/manager.d.ts +65 -138
  14. package/dist/agent/manager.d.ts.map +1 -1
  15. package/dist/agent/manager.js +928 -2442
  16. package/dist/agent/manager.js.map +1 -1
  17. package/dist/agent/pane-streamer.d.ts +4 -1
  18. package/dist/agent/pane-streamer.d.ts.map +1 -1
  19. package/dist/agent/pane-streamer.js +25 -5
  20. package/dist/agent/pane-streamer.js.map +1 -1
  21. package/dist/agent/phase-signal-watcher.d.ts +2 -11
  22. package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
  23. package/dist/agent/phase-signal-watcher.js +38 -87
  24. package/dist/agent/phase-signal-watcher.js.map +1 -1
  25. package/dist/agent/phase-signal.d.ts +14 -40
  26. package/dist/agent/phase-signal.d.ts.map +1 -1
  27. package/dist/agent/phase-signal.js +47 -90
  28. package/dist/agent/phase-signal.js.map +1 -1
  29. package/dist/agent/preflight.d.ts +0 -1
  30. package/dist/agent/preflight.d.ts.map +1 -1
  31. package/dist/agent/preflight.js +8 -15
  32. package/dist/agent/preflight.js.map +1 -1
  33. package/dist/agent/prompt.d.ts +1 -30
  34. package/dist/agent/prompt.d.ts.map +1 -1
  35. package/dist/agent/prompt.js +21 -148
  36. package/dist/agent/prompt.js.map +1 -1
  37. package/dist/agent/repo-store.d.ts.map +1 -1
  38. package/dist/agent/repo-store.js +0 -4
  39. package/dist/agent/repo-store.js.map +1 -1
  40. package/dist/agent/root-agent-runtime.d.ts.map +1 -1
  41. package/dist/agent/root-agent-runtime.js +4 -2
  42. package/dist/agent/root-agent-runtime.js.map +1 -1
  43. package/dist/agent/root-recovery-coordinator.d.ts +0 -1
  44. package/dist/agent/root-recovery-coordinator.d.ts.map +1 -1
  45. package/dist/agent/root-recovery-coordinator.js +39 -61
  46. package/dist/agent/root-recovery-coordinator.js.map +1 -1
  47. package/dist/agent/vt-visible-text.d.ts +42 -0
  48. package/dist/agent/vt-visible-text.d.ts.map +1 -0
  49. package/dist/agent/vt-visible-text.js +482 -0
  50. package/dist/agent/vt-visible-text.js.map +1 -0
  51. package/dist/api/config.d.ts.map +1 -1
  52. package/dist/api/config.js +6 -2
  53. package/dist/api/config.js.map +1 -1
  54. package/dist/api/platform-guard.js +2 -2
  55. package/dist/api/platform-guard.js.map +1 -1
  56. package/dist/api/projects.d.ts.map +1 -1
  57. package/dist/api/projects.js +598 -318
  58. package/dist/api/projects.js.map +1 -1
  59. package/dist/api/tasks.d.ts.map +1 -1
  60. package/dist/api/tasks.js +15 -39
  61. package/dist/api/tasks.js.map +1 -1
  62. package/dist/config/loader.d.ts +5 -1
  63. package/dist/config/loader.d.ts.map +1 -1
  64. package/dist/config/loader.js +36 -24
  65. package/dist/config/loader.js.map +1 -1
  66. package/dist/config/validator.d.ts +7 -4
  67. package/dist/config/validator.d.ts.map +1 -1
  68. package/dist/config/validator.js +57 -73
  69. package/dist/config/validator.js.map +1 -1
  70. package/dist/event/handlers.d.ts.map +1 -1
  71. package/dist/event/handlers.js +359 -226
  72. package/dist/event/handlers.js.map +1 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +0 -5
  75. package/dist/index.js.map +1 -1
  76. package/dist/platform/command-renderer.d.ts +6 -0
  77. package/dist/platform/command-renderer.d.ts.map +1 -1
  78. package/dist/platform/command-renderer.js +20 -0
  79. package/dist/platform/command-renderer.js.map +1 -1
  80. package/dist/platform/driver-host.d.ts.map +1 -1
  81. package/dist/platform/driver-host.js +3 -1
  82. package/dist/platform/driver-host.js.map +1 -1
  83. package/dist/platform/driver-spec.d.ts.map +1 -1
  84. package/dist/platform/driver-spec.js +32 -4
  85. package/dist/platform/driver-spec.js.map +1 -1
  86. package/dist/platform/git-driver.d.ts +2 -0
  87. package/dist/platform/git-driver.d.ts.map +1 -1
  88. package/dist/platform/git-driver.js +9 -3
  89. package/dist/platform/git-driver.js.map +1 -1
  90. package/dist/platform/platform-poller.d.ts +0 -1
  91. package/dist/platform/platform-poller.d.ts.map +1 -1
  92. package/dist/platform/platform-poller.js +0 -6
  93. package/dist/platform/platform-poller.js.map +1 -1
  94. package/dist/platform/plugins/github/driver.json +5 -0
  95. package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +20 -14
  96. package/dist/platform/startup.d.ts.map +1 -1
  97. package/dist/platform/startup.js +5 -5
  98. package/dist/platform/startup.js.map +1 -1
  99. package/dist/platform/types.d.ts +1 -0
  100. package/dist/platform/types.d.ts.map +1 -1
  101. package/dist/platform/types.js +3 -3
  102. package/dist/platform/types.js.map +1 -1
  103. package/dist/shared/constants.d.ts +1 -6
  104. package/dist/shared/constants.d.ts.map +1 -1
  105. package/dist/shared/constants.js +2 -29
  106. package/dist/shared/constants.js.map +1 -1
  107. package/dist/shared/types.d.ts +28 -124
  108. package/dist/shared/types.d.ts.map +1 -1
  109. package/dist/shared/types.js +7 -6
  110. package/dist/shared/types.js.map +1 -1
  111. package/dist/skills/baxian-pr-feedback/SKILL.md +5 -3
  112. package/dist/skills/baxian-pr-recheck/SKILL.md +4 -0
  113. package/dist/skills/baxian-pr-review/SKILL.md +4 -0
  114. package/dist/skills/baxian-signals/SKILL.md +15 -32
  115. package/dist/skills/baxian-task-check/SKILL.md +13 -14
  116. package/dist/state/snapshot.d.ts.map +1 -1
  117. package/dist/state/snapshot.js +5 -2
  118. package/dist/state/snapshot.js.map +1 -1
  119. package/dist/state/task-store.d.ts.map +1 -1
  120. package/dist/state/task-store.js +56 -140
  121. package/dist/state/task-store.js.map +1 -1
  122. package/dist/web/assets/index-BKiM0MSM.js +15 -0
  123. package/dist/web/assets/index-BS2adAfI.css +1 -0
  124. package/dist/web/index.html +2 -2
  125. package/package.json +1 -1
  126. package/dist/agent/review-transport.d.ts +0 -92
  127. package/dist/agent/review-transport.d.ts.map +0 -1
  128. package/dist/agent/review-transport.js +0 -512
  129. package/dist/agent/review-transport.js.map +0 -1
  130. package/dist/event/server-handlers.d.ts +0 -4
  131. package/dist/event/server-handlers.d.ts.map +0 -1
  132. package/dist/event/server-handlers.js +0 -1294
  133. package/dist/event/server-handlers.js.map +0 -1
  134. package/dist/skills/baxian-research/SKILL.md +0 -28
  135. package/dist/skills/baxian-server-feedback/SKILL.md +0 -40
  136. package/dist/skills/baxian-server-feedback/agents/openai.yaml +0 -2
  137. package/dist/skills/baxian-server-review/SKILL.md +0 -58
  138. package/dist/skills/baxian-server-review/agents/openai.yaml +0 -2
  139. package/dist/state/review-store.d.ts +0 -33
  140. package/dist/state/review-store.d.ts.map +0 -1
  141. package/dist/state/review-store.js +0 -272
  142. package/dist/state/review-store.js.map +0 -1
  143. package/dist/web/assets/index-BPv6vv3U.css +0 -1
  144. package/dist/web/assets/index-BXfgaFNm.js +0 -18
@@ -0,0 +1,42 @@
1
+ export declare class VisibleTextExtractor {
2
+ private state;
3
+ private pendingHigh;
4
+ private active;
5
+ private readonly charsets;
6
+ private gl;
7
+ private savedByBuffer;
8
+ private conceal;
9
+ private altBuffer;
10
+ private pendingIntermediate;
11
+ private csiPrefix;
12
+ private csiIntermediates;
13
+ private csiParamValues;
14
+ private csiParamHasSub;
15
+ private csiParamValue;
16
+ private csiParamStarted;
17
+ private csiInSubParam;
18
+ private csiOverflowed;
19
+ private csiEightBit;
20
+ reset(): void;
21
+ private collectCsiParam;
22
+ private flushCsiParam;
23
+ private collectCsiIntermediate;
24
+ private collectCsiPrefix;
25
+ private clearCsiCollect;
26
+ private setgCharset;
27
+ private setgLevel;
28
+ private resetCharsetSlots;
29
+ private softReset;
30
+ private fullReset;
31
+ private selectDefaultCharset;
32
+ private saveCursorState;
33
+ private restoreCursorState;
34
+ private dispatchSgr;
35
+ private extendedColourSpan;
36
+ private dispatchCsi;
37
+ private dispatchPrivateMode;
38
+ private remapsCode;
39
+ write(rawChunk: string): string;
40
+ }
41
+ export declare function visibleText(text: string): string;
42
+ //# sourceMappingURL=vt-visible-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vt-visible-text.d.ts","sourceRoot":"","sources":["../../src/agent/vt-visible-text.ts"],"names":[],"mappings":"AA0FA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,WAAW,CAAM;IAEzB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2E;IACpG,OAAO,CAAC,EAAE,CAAW;IAGrB,OAAO,CAAC,aAAa,CAA0D;IAC/E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,gBAAgB,CAAM;IAG9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,UAAU;IAIlB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAqIhC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,482 @@
1
+ // 转移表按 https://vt100.net/emu/dec_ansi_parser
2
+ const S = {
3
+ ground: 0,
4
+ escape: 1,
5
+ escapeIntermediate: 2,
6
+ csiEntry: 3,
7
+ csiParam: 4,
8
+ csiIntermediate: 5,
9
+ csiIgnore: 6,
10
+ dcsEntry: 7,
11
+ dcsParam: 8,
12
+ dcsIntermediate: 9,
13
+ dcsIgnore: 10,
14
+ dcsPassthrough: 11,
15
+ oscString: 12,
16
+ sosPmApcString: 13,
17
+ };
18
+ // 这几个状态显式忽略 xterm 的 NON_ASCII_PRINTABLE 槽;其余状态无表项,走 ERROR 打回 ground。
19
+ const NON_ASCII_IGNORED = new Set([
20
+ S.oscString, S.dcsPassthrough, S.csiIgnore, S.dcsIgnore,
21
+ ]);
22
+ // 转移动作为 EXECUTE 的状态;Dcs*/Osc/SosPmApc 里是 ignore/put,屏幕无效果。
23
+ const EXECUTES_C0 = new Set([
24
+ S.ground, S.escape, S.escapeIntermediate,
25
+ S.csiEntry, S.csiParam, S.csiIntermediate, S.csiIgnore,
26
+ ]);
27
+ // 保留原字节:属不属 \s 正好就编码了会不会隔断 marker——BS 隔断,HT/LF/CR 让软换行接得回去。
28
+ const CURSOR_MOVING_C0 = new Set([0x08, 0x09, 0x0a, 0x0d]);
29
+ // 被字符集改写的字节在屏幕上是别的字形,拼出来的 marker 终端根本不显示。既不能原样吐也不能丢
30
+ // ——两者都会拼出 marker——所以吐一个 compact 删不掉、又不可能出现在 marker 里的分隔符。
31
+ const REMAPPED = '\x00';
32
+ // 必须精确到字节:UK('A') 只改 '#',把整套字符集判为不可见会漏掉屏幕上真实可见的 marker。
33
+ const CHARSET_REMAPS = {
34
+ '0': '`abcdefghijklmnopqrstuvwxyz{|}~',
35
+ '4': '#@[\\]{|}~',
36
+ '5': '[\\]^`{|}~',
37
+ '6': '@[\\]^`{|}~',
38
+ '7': '@[\\]^`{|}~',
39
+ '=': '#@[\\]^_`{|}~',
40
+ A: '#',
41
+ C: '[\\]^`{|}~',
42
+ E: '@[\\]^`{|}~',
43
+ H: '@[\\]^`{|}~',
44
+ K: '@[\\]{|}~',
45
+ Q: '@[\\]^`{|}~',
46
+ R: '#@[\\]{|}~',
47
+ Y: '#@[\\]`{|}~',
48
+ Z: '#@[\\]{|}',
49
+ };
50
+ const REMAPPED_CODES = new Map(Object.entries(CHARSET_REMAPS).map(([d, chars]) => [d, new Set([...chars].map(c => c.charCodeAt(0)))]));
51
+ // 只有终端认得的 designator 才会改写槽位;认不出的整条 designation 被忽略、旧字符集留任。
52
+ const RECOGNISED_DESIGNATORS = new Set([...Object.keys(CHARSET_REMAPS), 'B']);
53
+ const MAX_CSI_PARAMS = 32;
54
+ const MAX_CSI_PARAM = 0x7fffffff;
55
+ const SGR_FINAL = 'm';
56
+ // GR 的 '-' '.' 与 GL 的 ')' '*' 落在同一批槽位上,后续 SO/LS2 会把它们选出来;'/' 被忽略。
57
+ const DESIGNATE_INTERMEDIATES = {
58
+ '(': 0, ')': 1, '*': 2, '+': 3, '-': 1, '.': 2,
59
+ };
60
+ // xterm 5.5.0 把 LS1R/LS2R/LS3R 也当作 GL 移位处理,与标准的 GR 语义不同。
61
+ const LOCKING_SHIFTS = { n: 2, o: 3, '|': 3, '}': 2, '~': 1 };
62
+ // ESC、CAN/SUB 与全部 C1 控制取消进行中的序列,从任何状态生效。
63
+ function anywhereTransition(code) {
64
+ if (code === 0x1b)
65
+ return S.escape;
66
+ if (code === 0x18 || code === 0x1a)
67
+ return S.ground;
68
+ if (code < 0x80 || code > 0x9f)
69
+ return undefined;
70
+ if (code === 0x9b)
71
+ return S.csiEntry;
72
+ if (code === 0x9d)
73
+ return S.oscString;
74
+ if (code === 0x90)
75
+ return S.dcsEntry;
76
+ if (code === 0x98 || code === 0x9e || code === 0x9f)
77
+ return S.sosPmApcString;
78
+ return S.ground;
79
+ }
80
+ export class VisibleTextExtractor {
81
+ state = S.ground;
82
+ pendingHigh = '';
83
+ // 装载的那张表与槽位是两样东西:DECSC/DECRC 只存取 active,移位则从 charsets 重新装载。
84
+ active;
85
+ charsets = [undefined, undefined, undefined, undefined];
86
+ gl = 0;
87
+ // 每个缓冲区各存一份(`CSI ?1049h` 进备用屏时存的是主屏那份);
88
+ // 存了 undefined 与没存过是两回事,故用外层 undefined 表示"没存过"。
89
+ savedByBuffer = [undefined, undefined];
90
+ conceal = false;
91
+ altBuffer = 0;
92
+ pendingIntermediate;
93
+ // 私有前缀要留原字节:只有 '?' 是 DEC private mode,'<' '=' '>' 各有别的含义。
94
+ csiPrefix = '';
95
+ csiIntermediates = '';
96
+ // 按 xterm 的 Params 语义收数值主参数:前导零归一、冒号子参数只取冒号前的值、
97
+ // 容量算的是**参数个数**(超出的丢弃,已收下的照常派发),不是原始字符数。
98
+ csiParamValues = [];
99
+ csiParamHasSub = [];
100
+ csiParamValue = 0;
101
+ csiParamStarted = false;
102
+ csiInSubParam = false;
103
+ csiOverflowed = false;
104
+ csiEightBit = false;
105
+ reset() {
106
+ this.state = S.ground;
107
+ this.pendingHigh = '';
108
+ this.fullReset();
109
+ this.altBuffer = 0;
110
+ this.pendingIntermediate = undefined;
111
+ this.clearCsiCollect();
112
+ }
113
+ collectCsiParam(ch) {
114
+ if (ch === ';') {
115
+ this.flushCsiParam();
116
+ return;
117
+ }
118
+ if (ch === ':') {
119
+ this.csiInSubParam = true;
120
+ return;
121
+ }
122
+ if (this.csiInSubParam)
123
+ return;
124
+ this.csiParamStarted = true;
125
+ const next = this.csiParamValue * 10 + (ch.charCodeAt(0) - 0x30);
126
+ this.csiParamValue = next > MAX_CSI_PARAM ? MAX_CSI_PARAM : next;
127
+ }
128
+ flushCsiParam() {
129
+ if (this.csiParamValues.length < MAX_CSI_PARAMS) {
130
+ this.csiParamValues.push(this.csiParamStarted ? this.csiParamValue : 0);
131
+ this.csiParamHasSub.push(this.csiInSubParam);
132
+ }
133
+ this.csiParamValue = 0;
134
+ this.csiParamStarted = false;
135
+ this.csiInSubParam = false;
136
+ }
137
+ collectCsiIntermediate(ch) {
138
+ if (this.csiIntermediates.length < 4)
139
+ this.csiIntermediates += ch;
140
+ else
141
+ this.csiOverflowed = true;
142
+ }
143
+ collectCsiPrefix(ch) {
144
+ if (this.csiPrefix === '')
145
+ this.csiPrefix = ch;
146
+ else
147
+ this.csiOverflowed = true;
148
+ }
149
+ clearCsiCollect() {
150
+ this.csiPrefix = '';
151
+ this.csiIntermediates = '';
152
+ this.csiParamValues = [];
153
+ this.csiParamHasSub = [];
154
+ this.csiParamValue = 0;
155
+ this.csiParamStarted = false;
156
+ this.csiInSubParam = false;
157
+ this.csiOverflowed = false;
158
+ this.csiEightBit = false;
159
+ }
160
+ setgCharset(slot, designator) {
161
+ this.charsets[slot] = designator;
162
+ if (this.gl === slot)
163
+ this.active = designator;
164
+ }
165
+ setgLevel(slot) {
166
+ this.gl = slot;
167
+ this.active = this.charsets[slot];
168
+ }
169
+ // `CSI ?2h` 只重指定 G0-G3,不碰 GL,也不碰已保存的那份。
170
+ resetCharsetSlots() {
171
+ this.charsets.fill(undefined);
172
+ this.active = undefined;
173
+ }
174
+ // DECSTR 连 GL 与**当前 buffer** 保存的那份一起清;另一个 buffer 的存档不归它管。
175
+ softReset() {
176
+ this.resetCharsetSlots();
177
+ this.gl = 0;
178
+ this.conceal = false;
179
+ this.savedByBuffer[this.altBuffer] = undefined;
180
+ }
181
+ // RIS 是整机复位:连 buffer 身份与两份存档一起回到初始。
182
+ fullReset() {
183
+ this.resetCharsetSlots();
184
+ this.gl = 0;
185
+ this.conceal = false;
186
+ this.savedByBuffer = [undefined, undefined];
187
+ this.altBuffer = 0;
188
+ }
189
+ // ESC % G/@ 只是"选回默认":动 G0 与 GL,不碰 G1-G3。
190
+ selectDefaultCharset() {
191
+ this.setgCharset(0, undefined);
192
+ this.setgLevel(0);
193
+ }
194
+ saveCursorState() {
195
+ this.savedByBuffer[this.altBuffer] = { charset: this.active, conceal: this.conceal };
196
+ }
197
+ restoreCursorState() {
198
+ const saved = this.savedByBuffer[this.altBuffer];
199
+ this.active = saved?.charset;
200
+ this.conceal = saved?.conceal ?? false;
201
+ }
202
+ // SGR 8 让字形在屏幕上消失,单元格里却还留着字符——和字符集重映射是同一类问题。
203
+ dispatchSgr() {
204
+ for (let i = 0; i < this.csiParamValues.length; i++) {
205
+ const param = this.csiParamValues[i];
206
+ if (param === 38 || param === 48 || param === 58) {
207
+ i += this.extendedColourSpan(i);
208
+ }
209
+ else if (param === 8)
210
+ this.conceal = true;
211
+ else if (param === 0 || param === 28)
212
+ this.conceal = false;
213
+ }
214
+ }
215
+ // 照搬 xterm 的 _extractColor 推进量:颜色载荷里的 8/28 是分量值,当成独立参数两个方向都会错。
216
+ extendedColourSpan(leader) {
217
+ let advance = 0;
218
+ let cSpace = 0;
219
+ for (;;) {
220
+ if (this.csiParamHasSub[leader + advance])
221
+ return advance;
222
+ const subtype = advance >= 1 ? this.csiParamValues[leader + 1] : 0;
223
+ if ((subtype === 5 && advance + cSpace >= 2) || (subtype === 2 && advance + cSpace >= 5))
224
+ return advance;
225
+ if (subtype)
226
+ cSpace = 1;
227
+ advance++;
228
+ if (leader + advance >= this.csiParamValues.length || advance + cSpace >= 6)
229
+ return advance;
230
+ }
231
+ }
232
+ dispatchCsi(final) {
233
+ this.flushCsiParam();
234
+ if (this.csiOverflowed) {
235
+ // fall through to the reset below
236
+ }
237
+ else if (this.csiPrefix === '?') {
238
+ if (this.csiIntermediates === '')
239
+ this.dispatchPrivateMode(final);
240
+ }
241
+ else if (this.csiPrefix === '' && this.csiIntermediates === '' && final === 's') {
242
+ this.saveCursorState();
243
+ }
244
+ else if (this.csiPrefix === '' && this.csiIntermediates === '' && final === 'u') {
245
+ this.restoreCursorState();
246
+ }
247
+ else if (this.csiPrefix === '' && this.csiIntermediates === '' && final === SGR_FINAL) {
248
+ this.dispatchSgr();
249
+ }
250
+ else if (this.csiPrefix === '' && this.csiIntermediates === '!' && final === 'p') {
251
+ this.softReset(); // DECSTR
252
+ }
253
+ // 派发出去的 8-bit CSI 真会动屏幕,而 main 的正则不认 0x9b、天然隔开 marker——只有 SGR 例外,
254
+ // 它唯一的可见性影响(conceal)已经建模。取消/ignore 的序列 xterm 整条丢弃,不在此列。
255
+ const transparent = this.csiPrefix === '' && this.csiIntermediates === '' && final === SGR_FINAL;
256
+ const boundary = this.csiEightBit && !transparent ? REMAPPED : '';
257
+ this.clearCsiCollect();
258
+ this.state = S.ground;
259
+ return boundary;
260
+ }
261
+ dispatchPrivateMode(final) {
262
+ if (final !== 'h' && final !== 'l')
263
+ return;
264
+ const set = final === 'h';
265
+ for (const param of this.csiParamValues) {
266
+ // 保存/恢复与切屏是两件事:1048 只在当前 buffer 存取游标字符集、不切屏;
267
+ // 47/1047 只切屏、不存取;1049 两件都做。
268
+ if (param === 1048) {
269
+ if (set)
270
+ this.saveCursorState();
271
+ else
272
+ this.restoreCursorState();
273
+ }
274
+ else if (param === 1049) {
275
+ if (set) {
276
+ this.saveCursorState();
277
+ this.altBuffer = 1;
278
+ }
279
+ else {
280
+ this.altBuffer = 0;
281
+ this.restoreCursorState();
282
+ }
283
+ }
284
+ else if (param === 47 || param === 1047) {
285
+ this.altBuffer = set ? 1 : 0;
286
+ }
287
+ else if (param === 2 && set) {
288
+ this.resetCharsetSlots();
289
+ }
290
+ }
291
+ }
292
+ remapsCode(code) {
293
+ return this.active !== undefined && (REMAPPED_CODES.get(this.active)?.has(code) ?? false);
294
+ }
295
+ write(rawChunk) {
296
+ // 按码点解析:跨 write 拆开的代理对要缝回去,否则低代理会落在与高代理不同的状态里。
297
+ const chunk = this.pendingHigh + rawChunk;
298
+ this.pendingHigh = '';
299
+ let out = '';
300
+ for (let i = 0; i < chunk.length; i++) {
301
+ let code = chunk.charCodeAt(i);
302
+ let width = 1;
303
+ if (code >= 0xd800 && code <= 0xdbff) {
304
+ if (i + 1 === chunk.length) {
305
+ this.pendingHigh = chunk[i];
306
+ break;
307
+ }
308
+ if ((chunk.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
309
+ code = 0x10000;
310
+ width = 2;
311
+ }
312
+ }
313
+ if (code === 0xfeff)
314
+ continue; // xterm 的 StringToUtf32 在喂进转移表前就丢掉 BOM
315
+ if (code >= 0xa0) {
316
+ if (this.state === S.ground)
317
+ out += this.conceal ? REMAPPED : chunk.slice(i, i + width);
318
+ else if (!NON_ASCII_IGNORED.has(this.state)) {
319
+ this.pendingIntermediate = undefined;
320
+ this.state = S.ground;
321
+ }
322
+ i += width - 1;
323
+ continue;
324
+ }
325
+ if (CURSOR_MOVING_C0.has(code)) {
326
+ // 序列里的 CR 不是软换行的一半,而是真把后半段重画到行首。
327
+ if (EXECUTES_C0.has(this.state))
328
+ out += code === 0x0d && this.state !== S.ground ? REMAPPED : chunk[i];
329
+ continue; // EXECUTE 与 ignore 都保持当前状态
330
+ }
331
+ if (code === 0x0e || code === 0x0f) {
332
+ if (EXECUTES_C0.has(this.state))
333
+ this.setgLevel(code === 0x0e ? 1 : 0);
334
+ continue;
335
+ }
336
+ const jump = anywhereTransition(code);
337
+ if (jump !== undefined) {
338
+ this.pendingIntermediate = undefined;
339
+ if (jump === S.csiEntry) {
340
+ this.clearCsiCollect();
341
+ this.csiEightBit = true;
342
+ }
343
+ this.state = jump;
344
+ continue;
345
+ }
346
+ switch (this.state) {
347
+ case S.ground:
348
+ if (code >= 0x20 && code <= 0x7e) {
349
+ out += this.conceal || this.remapsCode(code) ? REMAPPED : chunk[i];
350
+ }
351
+ break;
352
+ case S.escape:
353
+ if (code <= 0x1f || code === 0x7f)
354
+ break;
355
+ if (code <= 0x2f) {
356
+ this.pendingIntermediate = chunk[i];
357
+ this.state = S.escapeIntermediate;
358
+ }
359
+ else if (code === 0x50)
360
+ this.state = S.dcsEntry;
361
+ else if (code === 0x58 || code === 0x5e || code === 0x5f)
362
+ this.state = S.sosPmApcString;
363
+ else if (code === 0x5b) {
364
+ this.clearCsiCollect();
365
+ this.csiEightBit = false;
366
+ this.state = S.csiEntry;
367
+ }
368
+ else if (code === 0x5d)
369
+ this.state = S.oscString;
370
+ else {
371
+ const shifted = LOCKING_SHIFTS[chunk[i]];
372
+ if (shifted !== undefined)
373
+ this.setgLevel(shifted);
374
+ else if (code === 0x37)
375
+ this.saveCursorState();
376
+ else if (code === 0x38)
377
+ this.restoreCursorState();
378
+ else if (code === 0x63) {
379
+ this.fullReset();
380
+ out += REMAPPED;
381
+ } // RIS wipes the screen
382
+ else if (code === 0x4d)
383
+ out += REMAPPED; // RI 把后半段挪到前半段上一行
384
+ this.state = S.ground;
385
+ }
386
+ break;
387
+ case S.escapeIntermediate:
388
+ if (code >= 0x30 && code <= 0x7e) {
389
+ const intermediate = this.pendingIntermediate;
390
+ this.pendingIntermediate = undefined;
391
+ const slot = intermediate === undefined ? undefined : DESIGNATE_INTERMEDIATES[intermediate];
392
+ if (slot !== undefined) {
393
+ if (RECOGNISED_DESIGNATORS.has(chunk[i]))
394
+ this.setgCharset(slot, chunk[i]);
395
+ }
396
+ else if (intermediate === '%' && (code === 0x47 || code === 0x40)) {
397
+ this.selectDefaultCharset(); // only ESC % G / ESC % @; other finals are ignored
398
+ }
399
+ else if (intermediate === '#' && code === 0x38)
400
+ out += REMAPPED; // DECALN wipes the screen
401
+ this.state = S.ground;
402
+ }
403
+ else if (code >= 0x20 && code <= 0x2f) {
404
+ this.pendingIntermediate = undefined;
405
+ }
406
+ break;
407
+ case S.csiEntry:
408
+ if (code >= 0x40 && code <= 0x7e)
409
+ out += this.dispatchCsi(chunk[i]);
410
+ else if (code >= 0x30 && code <= 0x3f) {
411
+ if (code >= 0x3c)
412
+ this.collectCsiPrefix(chunk[i]);
413
+ else
414
+ this.collectCsiParam(chunk[i]);
415
+ this.state = S.csiParam;
416
+ }
417
+ else if (code >= 0x20 && code <= 0x2f) {
418
+ this.collectCsiIntermediate(chunk[i]);
419
+ this.state = S.csiIntermediate;
420
+ }
421
+ break;
422
+ case S.csiParam:
423
+ if (code >= 0x40 && code <= 0x7e)
424
+ out += this.dispatchCsi(chunk[i]);
425
+ else if (code >= 0x3c && code <= 0x3f)
426
+ this.state = S.csiIgnore;
427
+ else if (code >= 0x20 && code <= 0x2f) {
428
+ this.collectCsiIntermediate(chunk[i]);
429
+ this.state = S.csiIntermediate;
430
+ }
431
+ else if (code >= 0x30 && code <= 0x3b)
432
+ this.collectCsiParam(chunk[i]);
433
+ break; // 剩下的 C0/DEL 在参数态是 execute/ignore,不能当数字累进参数
434
+ case S.csiIntermediate:
435
+ if (code >= 0x40 && code <= 0x7e)
436
+ out += this.dispatchCsi(chunk[i]);
437
+ else if (code >= 0x30 && code <= 0x3f)
438
+ this.state = S.csiIgnore;
439
+ else if (code >= 0x20 && code <= 0x2f)
440
+ this.collectCsiIntermediate(chunk[i]);
441
+ break;
442
+ case S.csiIgnore:
443
+ if (code >= 0x40 && code <= 0x7e)
444
+ this.state = S.ground;
445
+ break;
446
+ case S.dcsEntry:
447
+ if (code >= 0x40 && code <= 0x7e)
448
+ this.state = S.dcsPassthrough;
449
+ else if (code >= 0x30 && code <= 0x3f)
450
+ this.state = S.dcsParam;
451
+ else if (code >= 0x20 && code <= 0x2f)
452
+ this.state = S.dcsIntermediate;
453
+ break;
454
+ case S.dcsParam:
455
+ if (code >= 0x40 && code <= 0x7e)
456
+ this.state = S.dcsPassthrough;
457
+ else if (code >= 0x3c && code <= 0x3f)
458
+ this.state = S.dcsIgnore;
459
+ else if (code >= 0x20 && code <= 0x2f)
460
+ this.state = S.dcsIntermediate;
461
+ break;
462
+ case S.dcsIntermediate:
463
+ if (code >= 0x40 && code <= 0x7e)
464
+ this.state = S.dcsPassthrough;
465
+ else if (code >= 0x30 && code <= 0x3f)
466
+ this.state = S.dcsIgnore;
467
+ break;
468
+ case S.oscString:
469
+ if (code === 0x07)
470
+ this.state = S.ground; // BEL 只终结 OSC,其余控制串忽略它
471
+ break;
472
+ default:
473
+ break;
474
+ }
475
+ }
476
+ return out;
477
+ }
478
+ }
479
+ export function visibleText(text) {
480
+ return new VisibleTextExtractor().write(text);
481
+ }
482
+ //# sourceMappingURL=vt-visible-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vt-visible-text.js","sourceRoot":"","sources":["../../src/agent/vt-visible-text.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAe,UAAU,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AAqGhH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAKzE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAW/D;AASD,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+LtE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAe,UAAU,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AAqGhH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAKzE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAW/D;AASD,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuMtE"}
@@ -1,6 +1,6 @@
1
1
  import { normalize } from 'node:path';
2
2
  import { autoBootstrapAgentIds } from '../agent/bootstrap.js';
3
- import { saveConfig, prepareConfig, ConfigValidationError, } from '../config/loader.js';
3
+ import { saveConfig, prepareConfigWithWarnings, ConfigValidationError, } from '../config/loader.js';
4
4
  import { withConfigLock } from '../config/mutex.js';
5
5
  import { applyConfigHotReload, prepareConfigHotReload } from '../config/hot-reload.js';
6
6
  import { activeParticipantBlockers, gitBindingBlockerDetails, gitBindingBlockers } from './platform-guard.js';
@@ -153,7 +153,9 @@ export async function configRoutes(app) {
153
153
  if (mergedServer.token === undefined) {
154
154
  delete mergedServer.token;
155
155
  }
156
+ const unknownIncoming = Object.fromEntries(Object.entries(incoming).filter(([key]) => !['language', 'review', 'server', 'project', 'root'].includes(key)));
156
157
  const merged = {
158
+ ...unknownIncoming,
157
159
  language: ('language' in incoming ? incoming.language : current.language),
158
160
  review: { ...current.review, ...(incoming.review ?? {}) },
159
161
  server: mergedServer,
@@ -164,8 +166,9 @@ export async function configRoutes(app) {
164
166
  : (current.root ? { root: current.root } : {})),
165
167
  };
166
168
  let validated;
169
+ let warnings;
167
170
  try {
168
- validated = prepareConfig(merged);
171
+ ({ config: validated, warnings } = prepareConfigWithWarnings(merged));
169
172
  }
170
173
  catch (err) {
171
174
  if (err instanceof ConfigValidationError) {
@@ -291,6 +294,7 @@ export async function configRoutes(app) {
291
294
  return reply.send({
292
295
  config: redactConfig(validated),
293
296
  restartRequired: mustRestart,
297
+ ...(warnings.length > 0 ? { warnings } : {}),
294
298
  note: mustRestart
295
299
  ? 'Saved and hot-reloadable fields applied. server.host/port/https or root changes require a restart to take effect.'
296
300
  : 'Saved and applied immediately (no restart required).',