baxian 2.0.18 → 2.0.19

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 (33) hide show
  1. package/dist/agent/detect/classify.d.ts +7 -0
  2. package/dist/agent/detect/classify.d.ts.map +1 -0
  3. package/dist/agent/detect/classify.js +42 -0
  4. package/dist/agent/detect/classify.js.map +1 -0
  5. package/dist/agent/detect/gate.d.ts +2 -2
  6. package/dist/agent/detect/gate.d.ts.map +1 -1
  7. package/dist/agent/detect/gate.js +17 -63
  8. package/dist/agent/detect/gate.js.map +1 -1
  9. package/dist/agent/detect/manifest.d.ts +3 -2
  10. package/dist/agent/detect/manifest.d.ts.map +1 -1
  11. package/dist/agent/detect/manifest.js +36 -63
  12. package/dist/agent/detect/manifest.js.map +1 -1
  13. package/dist/agent/detect/manifests/claude-code.json +387 -153
  14. package/dist/agent/detect/manifests/codex.json +137 -63
  15. package/dist/agent/detect/manifests/opencode.json +69 -17
  16. package/dist/agent/detect/manifests/qodercli.json +84 -25
  17. package/dist/agent/detect/region.d.ts +2 -2
  18. package/dist/agent/detect/region.d.ts.map +1 -1
  19. package/dist/agent/detect/region.js +122 -101
  20. package/dist/agent/detect/region.js.map +1 -1
  21. package/dist/agent/manager.d.ts +1 -0
  22. package/dist/agent/manager.d.ts.map +1 -1
  23. package/dist/agent/manager.js +85 -57
  24. package/dist/agent/manager.js.map +1 -1
  25. package/dist/agent/tmux-probe-poller.d.ts +0 -1
  26. package/dist/agent/tmux-probe-poller.d.ts.map +1 -1
  27. package/dist/agent/tmux-probe-poller.js +11 -34
  28. package/dist/agent/tmux-probe-poller.js.map +1 -1
  29. package/dist/agent/tmux.d.ts +3 -14
  30. package/dist/agent/tmux.d.ts.map +1 -1
  31. package/dist/agent/tmux.js +35 -235
  32. package/dist/agent/tmux.js.map +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ import { type AgentManifest, type AgentRuntimeKind, type ManifestDetection } from './manifest.js';
2
+ export declare const manifests: Record<AgentRuntimeKind, AgentManifest>;
3
+ export declare function classifyScreen(runtime: AgentRuntimeKind, screen: string, oscTitle?: string, oscProgress?: string): ManifestDetection;
4
+ export declare const MENU_RULE_IDS: Record<AgentRuntimeKind, ReadonlySet<string>>;
5
+ export declare function isMenuRule(runtime: AgentRuntimeKind, ruleId: string | undefined): boolean;
6
+ export declare function isTrustedIdleRule(runtime: AgentRuntimeKind, ruleId: string | undefined): boolean;
7
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/classify.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAgBvB,eAAO,MAAM,SAAS,yCAAkB,CAAC;AAEzC,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,SAAK,EACb,WAAW,SAAK,GACf,iBAAiB,CAEnB;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAKvE,CAAC;AAUF,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEzF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGhG"}
@@ -0,0 +1,42 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { compileManifest, evaluateManifest, } from './manifest.js';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ function loadManifests() {
7
+ const dir = join(__dirname, 'manifests');
8
+ const read = (name) => compileManifest(JSON.parse(readFileSync(join(dir, `${name}.json`), 'utf-8')));
9
+ return {
10
+ 'claude-code': read('claude-code'),
11
+ codex: read('codex'),
12
+ opencode: read('opencode'),
13
+ qodercli: read('qodercli'),
14
+ };
15
+ }
16
+ export const manifests = loadManifests();
17
+ export function classifyScreen(runtime, screen, oscTitle = '', oscProgress = '') {
18
+ return evaluateManifest(manifests[runtime], { screen, oscTitle, oscProgress });
19
+ }
20
+ // 门控策略按 manifest rule id 取信,集中放在规则本体旁边,同步性由 detect 测试守护
21
+ export const MENU_RULE_IDS = {
22
+ 'claude-code': new Set(['live_blocked_form', 'dynamic_workflow_prompt', 'model_picker_menu']),
23
+ codex: new Set(),
24
+ opencode: new Set(),
25
+ qodercli: new Set(),
26
+ };
27
+ // 只有 claude 的 ✳ 标题是稳定 idle 契约,其余 runtime 的标题不足以判就绪
28
+ const TITLE_IDLE_TRUSTED = {
29
+ 'claude-code': true,
30
+ codex: false,
31
+ opencode: false,
32
+ qodercli: false,
33
+ };
34
+ export function isMenuRule(runtime, ruleId) {
35
+ return ruleId !== undefined && MENU_RULE_IDS[runtime].has(ruleId);
36
+ }
37
+ export function isTrustedIdleRule(runtime, ruleId) {
38
+ if (ruleId === undefined)
39
+ return false;
40
+ return ruleId !== 'osc_title_idle' || TITLE_IDLE_TRUSTED[runtime];
41
+ }
42
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/agent/detect/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAEvB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAiB,EAAE,CAC3C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,OAAO,CAAC,CAAkB,CAAC,CAAC;IACjG,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QACpB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;AAEzC,MAAM,UAAU,cAAc,CAC5B,OAAyB,EACzB,MAAc,EACd,QAAQ,GAAG,EAAE,EACb,WAAW,GAAG,EAAE;IAEhB,OAAO,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,aAAa,GAAkD;IAC1E,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,mBAAmB,CAAC,CAAC;IAC7F,KAAK,EAAE,IAAI,GAAG,EAAE;IAChB,QAAQ,EAAE,IAAI,GAAG,EAAE;IACnB,QAAQ,EAAE,IAAI,GAAG,EAAE;CACpB,CAAC;AAEF,mDAAmD;AACnD,MAAM,kBAAkB,GAAsC;IAC5D,aAAa,EAAE,IAAI;IACnB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAyB,EAAE,MAA0B;IAC9E,OAAO,MAAM,KAAK,SAAS,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAyB,EAAE,MAA0B;IACrF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,MAAM,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC"}
@@ -5,7 +5,7 @@ export interface Gate {
5
5
  all?: Gate[];
6
6
  any?: Gate[];
7
7
  not?: Gate[];
8
- notAfter?: Gate[];
9
8
  }
10
- export declare function evaluateGate(gate: Gate, text: string): boolean;
9
+ export declare function compileGate(gate: Gate): void;
10
+ export declare function evaluateGate(gate: Gate, text: string, lowerText?: string): boolean;
11
11
  //# sourceMappingURL=gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/gate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;CACnB;AAmED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA2D9D"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/gate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;CACd;AAoBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAM5C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAqB,GAAG,OAAO,CA+C9F"}
@@ -1,60 +1,26 @@
1
1
  const regexCache = new Map();
2
+ const INLINE_FLAGS_RE = /^\(\?([ims]+)\)/;
2
3
  function getCachedRegExp(pattern) {
3
4
  let re = regexCache.get(pattern);
4
5
  if (!re) {
5
- re = new RegExp(pattern);
6
+ // 规则用 Rust regex 方言:Unicode 默认开启,行首内联 flag 需转成 JS flags
7
+ const inline = INLINE_FLAGS_RE.exec(pattern);
8
+ const flags = inline ? inline[1] : '';
9
+ // Rust 走 DFA,前导 .* 不要钱;JS 回溯引擎下它让每行退化成 O(L²),而 test() 本就不锚定行首
10
+ const body = (inline ? pattern.slice(inline[0].length) : pattern).replace(/^\.\*(?![?*+])/, '');
11
+ re = new RegExp(body, `${flags}u`);
6
12
  regexCache.set(pattern, re);
7
13
  }
8
14
  return re;
9
15
  }
10
- function findLastPositiveMatchLine(gate, lines) {
11
- let last = -1;
12
- if (gate.contains) {
13
- for (const needle of gate.contains) {
14
- const lower = needle.toLowerCase();
15
- for (let i = lines.length - 1; i >= 0; i--) {
16
- if (lines[i].toLowerCase().includes(lower)) {
17
- last = Math.max(last, i);
18
- break;
19
- }
20
- }
21
- }
22
- }
23
- if (gate.lineRegex) {
24
- for (const pattern of gate.lineRegex) {
25
- const re = getCachedRegExp(pattern);
26
- for (let i = lines.length - 1; i >= 0; i--) {
27
- if (re.test(lines[i])) {
28
- last = Math.max(last, i);
29
- break;
30
- }
31
- }
32
- }
33
- }
34
- if (gate.regex) {
35
- for (const pattern of gate.regex) {
36
- const re = getCachedRegExp(pattern);
37
- for (let i = lines.length - 1; i >= 0; i--) {
38
- if (re.test(lines[i])) {
39
- last = Math.max(last, i);
40
- break;
41
- }
42
- }
43
- }
44
- }
45
- if (gate.any) {
46
- for (const nested of gate.any) {
47
- last = Math.max(last, findLastPositiveMatchLine(nested, lines));
48
- }
49
- }
50
- if (gate.all) {
51
- for (const nested of gate.all) {
52
- last = Math.max(last, findLastPositiveMatchLine(nested, lines));
53
- }
54
- }
55
- return last;
16
+ export function compileGate(gate) {
17
+ gate.regex?.forEach(getCachedRegExp);
18
+ gate.lineRegex?.forEach(getCachedRegExp);
19
+ gate.all?.forEach(compileGate);
20
+ gate.any?.forEach(compileGate);
21
+ gate.not?.forEach(compileGate);
56
22
  }
57
- export function evaluateGate(gate, text) {
23
+ export function evaluateGate(gate, text, lowerText = text.toLowerCase()) {
58
24
  const hasMatcher = (gate.contains && gate.contains.length > 0)
59
25
  || (gate.regex && gate.regex.length > 0)
60
26
  || (gate.lineRegex && gate.lineRegex.length > 0)
@@ -64,7 +30,6 @@ export function evaluateGate(gate, text) {
64
30
  if (!hasMatcher)
65
31
  return false;
66
32
  if (gate.contains) {
67
- const lowerText = text.toLowerCase();
68
33
  for (const needle of gate.contains) {
69
34
  if (!lowerText.includes(needle.toLowerCase()))
70
35
  return false;
@@ -85,31 +50,20 @@ export function evaluateGate(gate, text) {
85
50
  }
86
51
  if (gate.all) {
87
52
  for (const nested of gate.all) {
88
- if (!evaluateGate(nested, text))
53
+ if (!evaluateGate(nested, text, lowerText))
89
54
  return false;
90
55
  }
91
56
  }
92
57
  if (gate.any && gate.any.length > 0) {
93
- if (!gate.any.some(nested => evaluateGate(nested, text)))
58
+ if (!gate.any.some(nested => evaluateGate(nested, text, lowerText)))
94
59
  return false;
95
60
  }
96
61
  if (gate.not) {
97
62
  for (const nested of gate.not) {
98
- if (evaluateGate(nested, text))
63
+ if (evaluateGate(nested, text, lowerText))
99
64
  return false;
100
65
  }
101
66
  }
102
- if (gate.notAfter && gate.notAfter.length > 0) {
103
- const lines = text.split('\n');
104
- const anchor = findLastPositiveMatchLine(gate, lines);
105
- if (anchor >= 0 && anchor < lines.length - 1) {
106
- const suffix = lines.slice(anchor + 1).join('\n');
107
- for (const nested of gate.notAfter) {
108
- if (evaluateGate(nested, suffix))
109
- return false;
110
- }
111
- }
112
- }
113
67
  return true;
114
68
  }
115
69
  //# sourceMappingURL=gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/agent/detect/gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/agent/detect/gate.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,wDAAwD;QACxD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,8DAA8D;QAC9D,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAChG,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACnC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,IAAY,EAAE,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;IACnF,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;WACxC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;WACrC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;WAC7C,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;WACjC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;WACjC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAE9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { Gate } from './gate.js';
2
2
  import { type DetectionInput } from './region.js';
3
+ export type AgentRuntimeKind = 'claude-code' | 'codex' | 'opencode' | 'qodercli';
3
4
  export type DetectedState = 'idle' | 'working' | 'pending' | 'unknown';
4
- interface ManifestRule extends Gate {
5
+ export interface ManifestRule extends Gate {
5
6
  id: string;
6
7
  state: DetectedState;
7
8
  priority: number;
@@ -23,6 +24,6 @@ export interface ManifestDetection {
23
24
  visibleWorking: boolean;
24
25
  skipStateUpdate: boolean;
25
26
  }
27
+ export declare function compileManifest(manifest: AgentManifest): AgentManifest;
26
28
  export declare function evaluateManifest(manifest: AgentManifest, input: DetectionInput): ManifestDetection;
27
- export {};
28
29
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,UAAU,YAAa,SAAQ,IAAI;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,cAAc,GACpB,iBAAiB,CAqEnB"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/agent/detect/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAWtE;AAcD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,cAAc,GACpB,iBAAiB,CAoBnB"}
@@ -1,75 +1,48 @@
1
- import { evaluateGate } from './gate.js';
2
- import { extractRegion } from './region.js';
3
- export function evaluateManifest(manifest, input) {
4
- let matched;
5
- let bestScreenBlocker;
6
- let bestScreenEvidence;
7
- let bestScreenSkip;
1
+ import { compileGate, evaluateGate } from './gate.js';
2
+ import { extractRegion, isKnownRegion } from './region.js';
3
+ export function compileManifest(manifest) {
8
4
  for (const rule of manifest.rules) {
9
- const regionText = extractRegion(input, rule.region);
10
- if (!evaluateGate(rule, regionText))
11
- continue;
12
- if (!matched || rule.priority > matched.priority) {
13
- matched = rule;
5
+ const where = `manifest ${manifest.id} rule ${rule.id}`;
6
+ if (!isKnownRegion(rule.region))
7
+ throw new Error(`${where} uses unknown region: ${rule.region}`);
8
+ try {
9
+ compileGate(rule);
14
10
  }
15
- if (rule.region !== 'oscTitle') {
16
- if (rule.skipStateUpdate) {
17
- if (!bestScreenSkip || rule.priority > bestScreenSkip.priority) {
18
- bestScreenSkip = rule;
19
- }
20
- }
21
- else {
22
- if (rule.visibleBlocker && rule.state === 'pending') {
23
- if (!bestScreenBlocker || rule.priority > bestScreenBlocker.priority) {
24
- bestScreenBlocker = rule;
25
- }
26
- }
27
- if ((rule.visibleWorking && rule.state === 'working') || (rule.visibleIdle && rule.state === 'idle')) {
28
- if (!bestScreenEvidence || rule.priority > bestScreenEvidence.priority) {
29
- bestScreenEvidence = rule;
30
- }
31
- }
32
- }
11
+ catch (err) {
12
+ throw new Error(`${where} has an uncompilable pattern: ${err instanceof Error ? err.message : String(err)}`);
33
13
  }
34
14
  }
35
- if (matched && matched.region === 'oscTitle') {
36
- if (bestScreenBlocker && bestScreenSkip && bestScreenBlocker.priority >= bestScreenSkip.priority) {
37
- matched = bestScreenBlocker;
38
- }
39
- else if (bestScreenSkip) {
40
- matched = bestScreenSkip;
41
- }
42
- else if (matched.state === 'working' && bestScreenBlocker && bestScreenBlocker.priority >= 900) {
43
- matched = bestScreenBlocker;
44
- }
45
- else if (matched.state === 'working' && bestScreenEvidence && bestScreenEvidence.state === 'idle') {
46
- matched = bestScreenEvidence;
47
- }
48
- else if (matched.state === 'pending') {
49
- if (bestScreenBlocker) {
50
- matched = bestScreenBlocker;
51
- }
52
- else if (bestScreenEvidence) {
53
- matched = bestScreenEvidence;
54
- }
55
- }
15
+ return manifest;
16
+ }
17
+ const rulesByPriority = new WeakMap();
18
+ // 稳定降序 = 上游"取最高优先级、同分取先出现者",于是首个命中即最终结果
19
+ function orderedRules(manifest) {
20
+ let ordered = rulesByPriority.get(manifest);
21
+ if (!ordered) {
22
+ ordered = [...manifest.rules].sort((a, b) => b.priority - a.priority);
23
+ rulesByPriority.set(manifest, ordered);
56
24
  }
57
- if (!matched) {
25
+ return ordered;
26
+ }
27
+ export function evaluateManifest(manifest, input) {
28
+ for (const rule of orderedRules(manifest)) {
29
+ if (!evaluateGate(rule, extractRegion(input, rule.region)))
30
+ continue;
58
31
  return {
59
- state: 'idle',
60
- visibleBlocker: false,
61
- visibleIdle: false,
62
- visibleWorking: false,
63
- skipStateUpdate: false,
32
+ state: rule.state,
33
+ matchedRuleId: rule.id,
34
+ visibleBlocker: !!(rule.visibleBlocker && rule.state === 'pending'),
35
+ visibleIdle: !!(rule.visibleIdle && rule.state === 'idle'),
36
+ visibleWorking: !!(rule.visibleWorking && rule.state === 'working'),
37
+ skipStateUpdate: !!rule.skipStateUpdate,
64
38
  };
65
39
  }
66
40
  return {
67
- state: matched.state,
68
- matchedRuleId: matched.id,
69
- visibleBlocker: !!(matched.visibleBlocker && matched.state === 'pending'),
70
- visibleIdle: !!(matched.visibleIdle && matched.state === 'idle'),
71
- visibleWorking: !!(matched.visibleWorking && matched.state === 'working'),
72
- skipStateUpdate: !!matched.skipStateUpdate,
41
+ state: 'idle',
42
+ visibleBlocker: false,
43
+ visibleIdle: false,
44
+ visibleWorking: false,
45
+ skipStateUpdate: false,
73
46
  };
74
47
  }
75
48
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/agent/detect/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/agent/detect/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AA+BhF,MAAM,UAAU,eAAe,CAAC,QAAuB;IACrD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,YAAY,QAAQ,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,OAAO,EAAiC,CAAC;AAErE,wCAAwC;AACxC,SAAS,YAAY,CAAC,QAAuB;IAC3C,IAAI,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtE,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAuB,EACvB,KAAqB;IAErB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,SAAS;QACrE,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,EAAE;YACtB,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;YACnE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;YAC1D,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;YACnE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe;SACxC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,KAAK;QACrB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC"}