odai-dsh-agent 0.2.3 → 0.2.6

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 (166) hide show
  1. package/README.md +3 -3
  2. package/build/bin/odai-dsh-agent.d.mts +3 -0
  3. package/build/bin/odai-dsh-agent.d.mts.map +1 -0
  4. package/build/bin/odai-dsh-agent.mjs +114 -0
  5. package/build/bin/odai-dsh-agent.mjs.map +1 -0
  6. package/build/src/dsh-version.d.mts +16 -0
  7. package/build/src/dsh-version.d.mts.map +1 -0
  8. package/build/src/dsh-version.mjs +20 -0
  9. package/build/src/dsh-version.mjs.map +1 -0
  10. package/build/src/installer.d.mts +46 -0
  11. package/build/src/installer.d.mts.map +1 -0
  12. package/build/src/installer.mjs +397 -0
  13. package/build/src/installer.mjs.map +1 -0
  14. package/package.json +13 -12
  15. package/preset/odai/runtime/compaction-config.d.mts +66 -0
  16. package/preset/odai/runtime/compaction-config.d.mts.map +1 -0
  17. package/preset/odai/runtime/compaction-config.mjs +320 -342
  18. package/preset/odai/runtime/compaction-config.mjs.map +1 -0
  19. package/preset/odai/runtime/compaction-runtime.d.mts +68 -0
  20. package/preset/odai/runtime/compaction-runtime.d.mts.map +1 -0
  21. package/preset/odai/runtime/compaction-runtime.mjs +157 -0
  22. package/preset/odai/runtime/compaction-runtime.mjs.map +1 -0
  23. package/preset/odai/runtime/context-activation.d.mts +31 -0
  24. package/preset/odai/runtime/context-activation.d.mts.map +1 -0
  25. package/preset/odai/runtime/context-activation.mjs +55 -49
  26. package/preset/odai/runtime/context-activation.mjs.map +1 -0
  27. package/preset/odai/runtime/context-capability.d.mts +16 -0
  28. package/preset/odai/runtime/context-capability.d.mts.map +1 -0
  29. package/preset/odai/runtime/context-capability.mjs +79 -74
  30. package/preset/odai/runtime/context-capability.mjs.map +1 -0
  31. package/preset/odai/runtime/governance.d.mts +30 -0
  32. package/preset/odai/runtime/governance.d.mts.map +1 -0
  33. package/preset/odai/runtime/governance.mjs +126 -113
  34. package/preset/odai/runtime/governance.mjs.map +1 -0
  35. package/preset/odai/runtime/human-care.d.mts +13 -0
  36. package/preset/odai/runtime/human-care.d.mts.map +1 -0
  37. package/preset/odai/runtime/human-care.mjs +45 -42
  38. package/preset/odai/runtime/human-care.mjs.map +1 -0
  39. package/preset/odai/runtime/human-safety-continuity-store.d.mts +43 -0
  40. package/preset/odai/runtime/human-safety-continuity-store.d.mts.map +1 -0
  41. package/preset/odai/runtime/human-safety-continuity-store.mjs +193 -215
  42. package/preset/odai/runtime/human-safety-continuity-store.mjs.map +1 -0
  43. package/preset/odai/runtime/human-safety-continuity.d.mts +27 -0
  44. package/preset/odai/runtime/human-safety-continuity.d.mts.map +1 -0
  45. package/preset/odai/runtime/human-safety-continuity.mjs +205 -216
  46. package/preset/odai/runtime/human-safety-continuity.mjs.map +1 -0
  47. package/preset/odai/runtime/human-safety.d.mts +14 -0
  48. package/preset/odai/runtime/human-safety.d.mts.map +1 -0
  49. package/preset/odai/runtime/human-safety.mjs +50 -47
  50. package/preset/odai/runtime/human-safety.mjs.map +1 -0
  51. package/preset/odai/runtime/index.d.mts +8 -0
  52. package/preset/odai/runtime/index.d.mts.map +1 -0
  53. package/preset/odai/runtime/index.mjs +161 -2441
  54. package/preset/odai/runtime/index.mjs.map +1 -0
  55. package/preset/odai/runtime/lifecycle-runtime.d.mts +83 -0
  56. package/preset/odai/runtime/lifecycle-runtime.d.mts.map +1 -0
  57. package/preset/odai/runtime/lifecycle-runtime.mjs +1081 -0
  58. package/preset/odai/runtime/lifecycle-runtime.mjs.map +1 -0
  59. package/preset/odai/runtime/model-route.d.mts +22 -0
  60. package/preset/odai/runtime/model-route.d.mts.map +1 -0
  61. package/preset/odai/runtime/model-route.mjs +68 -60
  62. package/preset/odai/runtime/model-route.mjs.map +1 -0
  63. package/preset/odai/runtime/output-config.d.mts +54 -0
  64. package/preset/odai/runtime/output-config.d.mts.map +1 -0
  65. package/preset/odai/runtime/output-config.mjs +289 -315
  66. package/preset/odai/runtime/output-config.mjs.map +1 -0
  67. package/preset/odai/runtime/output-policy-state.d.mts +3 -0
  68. package/preset/odai/runtime/output-policy-state.d.mts.map +1 -0
  69. package/preset/odai/runtime/output-policy-state.mjs +41 -29
  70. package/preset/odai/runtime/output-policy-state.mjs.map +1 -0
  71. package/preset/odai/runtime/prompt-runtime.d.mts +55 -0
  72. package/preset/odai/runtime/prompt-runtime.d.mts.map +1 -0
  73. package/preset/odai/runtime/prompt-runtime.mjs +303 -0
  74. package/preset/odai/runtime/prompt-runtime.mjs.map +1 -0
  75. package/preset/odai/runtime/research-packet.d.mts +30 -0
  76. package/preset/odai/runtime/research-packet.d.mts.map +1 -0
  77. package/preset/odai/runtime/research-packet.mjs +116 -117
  78. package/preset/odai/runtime/research-packet.mjs.map +1 -0
  79. package/preset/odai/runtime/responsibility-gap.d.mts +26 -0
  80. package/preset/odai/runtime/responsibility-gap.d.mts.map +1 -0
  81. package/preset/odai/runtime/responsibility-gap.mjs +91 -85
  82. package/preset/odai/runtime/responsibility-gap.mjs.map +1 -0
  83. package/preset/odai/runtime/responsibility-scope.d.mts +69 -0
  84. package/preset/odai/runtime/responsibility-scope.d.mts.map +1 -0
  85. package/preset/odai/runtime/responsibility-scope.mjs +199 -171
  86. package/preset/odai/runtime/responsibility-scope.mjs.map +1 -0
  87. package/preset/odai/runtime/role-overlays.d.mts +5 -0
  88. package/preset/odai/runtime/role-overlays.d.mts.map +1 -0
  89. package/preset/odai/runtime/role-overlays.mjs +14 -13
  90. package/preset/odai/runtime/role-overlays.mjs.map +1 -0
  91. package/preset/odai/runtime/route-card.d.mts +42 -0
  92. package/preset/odai/runtime/route-card.d.mts.map +1 -0
  93. package/preset/odai/runtime/route-card.mjs +158 -146
  94. package/preset/odai/runtime/route-card.mjs.map +1 -0
  95. package/preset/odai/runtime/router.d.mts +79 -0
  96. package/preset/odai/runtime/router.d.mts.map +1 -0
  97. package/preset/odai/runtime/router.mjs +491 -559
  98. package/preset/odai/runtime/router.mjs.map +1 -0
  99. package/preset/odai/runtime/routing-config.d.mts +76 -0
  100. package/preset/odai/runtime/routing-config.d.mts.map +1 -0
  101. package/preset/odai/runtime/routing-config.mjs +373 -438
  102. package/preset/odai/runtime/routing-config.mjs.map +1 -0
  103. package/preset/odai/runtime/routing-context.d.mts +47 -0
  104. package/preset/odai/runtime/routing-context.d.mts.map +1 -0
  105. package/preset/odai/runtime/routing-context.mjs +238 -273
  106. package/preset/odai/runtime/routing-context.mjs.map +1 -0
  107. package/preset/odai/runtime/runtime-config.d.mts +24 -0
  108. package/preset/odai/runtime/runtime-config.d.mts.map +1 -0
  109. package/preset/odai/runtime/runtime-config.mjs +181 -0
  110. package/preset/odai/runtime/runtime-config.mjs.map +1 -0
  111. package/preset/odai/runtime/runtime-support.d.mts +91 -0
  112. package/preset/odai/runtime/runtime-support.d.mts.map +1 -0
  113. package/preset/odai/runtime/runtime-support.mjs +371 -0
  114. package/preset/odai/runtime/runtime-support.mjs.map +1 -0
  115. package/preset/odai/runtime/runtime-types.d.mts +235 -0
  116. package/preset/odai/runtime/runtime-types.d.mts.map +1 -0
  117. package/preset/odai/runtime/runtime-types.mjs +4 -0
  118. package/preset/odai/runtime/runtime-types.mjs.map +1 -0
  119. package/preset/odai/runtime/semantic-memory-store.d.mts +110 -0
  120. package/preset/odai/runtime/semantic-memory-store.d.mts.map +1 -0
  121. package/preset/odai/runtime/semantic-memory-store.mjs +271 -385
  122. package/preset/odai/runtime/semantic-memory-store.mjs.map +1 -0
  123. package/preset/odai/runtime/semantic-memory.d.mts +88 -0
  124. package/preset/odai/runtime/semantic-memory.d.mts.map +1 -0
  125. package/preset/odai/runtime/semantic-memory.mjs +790 -750
  126. package/preset/odai/runtime/semantic-memory.mjs.map +1 -0
  127. package/preset/odai/runtime/session-compat.d.mts +31 -0
  128. package/preset/odai/runtime/session-compat.d.mts.map +1 -0
  129. package/preset/odai/runtime/session-compat.mjs +301 -328
  130. package/preset/odai/runtime/session-compat.mjs.map +1 -0
  131. package/preset/odai/runtime/session-evidence.d.mts +25 -0
  132. package/preset/odai/runtime/session-evidence.d.mts.map +1 -0
  133. package/preset/odai/runtime/session-evidence.mjs +309 -287
  134. package/preset/odai/runtime/session-evidence.mjs.map +1 -0
  135. package/preset/odai/runtime/skill-bundle.d.mts +53 -0
  136. package/preset/odai/runtime/skill-bundle.d.mts.map +1 -0
  137. package/preset/odai/runtime/skill-bundle.mjs +286 -276
  138. package/preset/odai/runtime/skill-bundle.mjs.map +1 -0
  139. package/preset/odai/runtime/skill-evolution.d.mts +112 -0
  140. package/preset/odai/runtime/skill-evolution.d.mts.map +1 -0
  141. package/preset/odai/runtime/skill-evolution.mjs +1287 -1261
  142. package/preset/odai/runtime/skill-evolution.mjs.map +1 -0
  143. package/preset/odai/runtime/skill-selection-state.d.mts +5 -0
  144. package/preset/odai/runtime/skill-selection-state.d.mts.map +1 -0
  145. package/preset/odai/runtime/skill-selection-state.mjs +59 -43
  146. package/preset/odai/runtime/skill-selection-state.mjs.map +1 -0
  147. package/preset/odai/runtime/skill-selector.d.mts +28 -0
  148. package/preset/odai/runtime/skill-selector.d.mts.map +1 -0
  149. package/preset/odai/runtime/skill-selector.mjs +100 -109
  150. package/preset/odai/runtime/skill-selector.mjs.map +1 -0
  151. package/preset/odai/runtime/skill-source-config.d.mts +32 -0
  152. package/preset/odai/runtime/skill-source-config.d.mts.map +1 -0
  153. package/preset/odai/runtime/skill-source-config.mjs +200 -210
  154. package/preset/odai/runtime/skill-source-config.mjs.map +1 -0
  155. package/preset/odai/runtime/store-lock.d.mts +2 -0
  156. package/preset/odai/runtime/store-lock.d.mts.map +1 -0
  157. package/preset/odai/runtime/store-lock.mjs +92 -87
  158. package/preset/odai/runtime/store-lock.mjs.map +1 -0
  159. package/preset/odai/runtime/tool-runtime.d.mts +43 -0
  160. package/preset/odai/runtime/tool-runtime.d.mts.map +1 -0
  161. package/preset/odai/runtime/tool-runtime.mjs +221 -0
  162. package/preset/odai/runtime/tool-runtime.mjs.map +1 -0
  163. package/bin/odai-dsh-agent.mjs +0 -108
  164. package/scripts/verify-agent-load.mjs +0 -257
  165. package/src/dsh-version.mjs +0 -24
  166. package/src/installer.mjs +0 -398
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
-
2
+ import { isUnknownRecord } from "./runtime-types.mjs";
3
3
  const DEFAULT_MAX_CHARS = 12_000;
4
4
  const DEFAULT_MAX_EVENTS = 80;
5
5
  const REQUIREMENT_PATTERNS = [/requirement/iu, /acceptance/iu, /需求/u, /要求/u, /目标/u, /验收/u];
@@ -7,315 +7,280 @@ const ACCEPTANCE_PATTERNS = [/\bA\d+\b/u, /accept(?:ance)?/iu, /验收/u, /通
7
7
  const DIFF_OUTPUT_PATTERNS = [/diff --git/iu, /^---\s+a\/[^\n]+\n\+\+\+\s+b\//imu];
8
8
  const DIFF_COMMAND_PATTERNS = [/^\s*git(?:\.exe)?\s+diff(?:\s|$)/iu];
9
9
  const TEST_COMMAND_PATTERNS = [
10
- /^\s*(?:&\s*)?(?:"[^"\r\n]*[\\/]node(?:\.exe)?"|[A-Za-z]:\\[^\s"\r\n]*[\\/]node(?:\.exe)?|\/[^\s"\r\n]*\/node|node(?:\.exe)?)\s+--test(?:\s|$)/iu,
11
- /^\s*(?:npm|pnpm|yarn)(?:\.cmd)?(?:\s+--(?:prefix|dir)\s+(?:"[^"]+"|\S+))?\s+(?:run\s+)?test(?:\s|$)/iu,
12
- /^\s*(?:pytest|vitest|jest|mocha)(?:\.cmd)?(?:\s|$)/iu,
13
- /^\s*(?:go|cargo|dotnet)\s+test(?:\s|$)/iu,
10
+ /^\s*(?:&\s*)?(?:"[^"\r\n]*[\\/]node(?:\.exe)?"|[A-Za-z]:\\[^\s"\r\n]*[\\/]node(?:\.exe)?|\/[^\s"\r\n]*\/node|node(?:\.exe)?)\s+--test(?:\s|$)/iu,
11
+ /^\s*(?:npm|pnpm|yarn)(?:\.cmd)?(?:\s+--(?:prefix|dir)\s+(?:"[^"]+"|\S+))?\s+(?:run\s+)?test(?:\s|$)/iu,
12
+ /^\s*(?:pytest|vitest|jest|mocha)(?:\.cmd)?(?:\s|$)/iu,
13
+ /^\s*(?:go|cargo|dotnet)\s+test(?:\s|$)/iu,
14
14
  ];
15
15
  const TEST_SUCCESS_PATTERNS = [
16
- /exit code:\s*0/iu,
17
- /(?:^|\n)[^\n]*(?:pass|passed)\s*[:=]?\s*[1-9]\d*/iu,
18
- /(?:^|\n)[^\n]*[1-9]\d*\s+passed\b/iu,
19
- /(?:^|\n)[^\n]*fail(?:ed)?\s*[:=]?\s*0\b/iu,
20
- /\btests?\s+\d+[^\n]*(?:pass|passed)\s+[1-9]\d*[^\n]*fail(?:ed)?\s+0\b/iu,
16
+ /exit code:\s*0/iu,
17
+ /(?:^|\n)[^\n]*(?:pass|passed)\s*[:=]?\s*[1-9]\d*/iu,
18
+ /(?:^|\n)[^\n]*[1-9]\d*\s+passed\b/iu,
19
+ /(?:^|\n)[^\n]*fail(?:ed)?\s*[:=]?\s*0\b/iu,
20
+ /\btests?\s+\d+[^\n]*(?:pass|passed)\s+[1-9]\d*[^\n]*fail(?:ed)?\s+0\b/iu,
21
21
  ];
22
22
  const TEST_FAILURE_PATTERNS = [
23
- /exit code:\s*[1-9]\d*/iu,
24
- /(?:^|\n)[^\n]*fail(?:ed)?\s*[:=]?\s*[1-9]\d*/iu,
25
- /\b(?:tests?|test suite) failed\b/iu,
23
+ /exit code:\s*[1-9]\d*/iu,
24
+ /(?:^|\n)[^\n]*fail(?:ed)?\s*[:=]?\s*[1-9]\d*/iu,
25
+ /\b(?:tests?|test suite) failed\b/iu,
26
26
  ];
27
27
  const WRITE_TOOL_NAMES = new Set(["edit", "write", "apply_patch"]);
28
28
  const SHELL_TOOL_NAMES = new Set(["bash", "pwsh", "shell", "powershell"]);
29
29
  const SHELL_CONTROL_PATTERN = /[;&|<>]/u;
30
30
  const READ_ONLY_SHELL_COMMAND_PATTERNS = [
31
- /^\s*git(?:\.exe)?\s+(?:status|log|show|rev-parse|ls-files|branch)(?:\s|$)/iu,
32
- /^\s*(?:Get-[A-Za-z]+|Select-String|Test-Path)(?:\s|$)/iu,
33
- /^\s*(?:rg|grep|find|ls|pwd|cat|head|tail|wc|where|which)(?:\.exe)?(?:\s|$)/iu,
34
- /^\s*node(?:\.exe)?\s+--check(?:\s|$)/iu,
31
+ /^\s*git(?:\.exe)?\s+(?:status|log|show|rev-parse|ls-files|branch)(?:\s|$)/iu,
32
+ /^\s*(?:Get-[A-Za-z]+|Select-String|Test-Path)(?:\s|$)/iu,
33
+ /^\s*(?:rg|grep|find|ls|pwd|cat|head|tail|wc|where|which)(?:\.exe)?(?:\s|$)/iu,
34
+ /^\s*node(?:\.exe)?\s+--check(?:\s|$)/iu,
35
35
  ];
36
36
  const WRITE_COMMAND_PATTERNS = [
37
- /(?:^|\s)(?:git\s+apply|apply_patch|sed\s+-i|perl\s+-pi)(?:\s|$)/iu,
38
- /(?:^|\s)(?:Set-Content|Add-Content|Out-File|Remove-Item|Move-Item|Copy-Item|New-Item)(?:\s|$)/iu,
39
- /(?:^|\s)(?:rm|mv|cp|mkdir|touch)(?:\s|$)/u,
37
+ /(?:^|\s)(?:git\s+apply|apply_patch|sed\s+-i|perl\s+-pi)(?:\s|$)/iu,
38
+ /(?:^|\s)(?:Set-Content|Add-Content|Out-File|Remove-Item|Move-Item|Copy-Item|New-Item)(?:\s|$)/iu,
39
+ /(?:^|\s)(?:rm|mv|cp|mkdir|touch)(?:\s|$)/u,
40
40
  ];
41
-
42
41
  function textBlocks(value, depth = 0) {
43
- if (depth > 5 || value === null || value === undefined) return [];
44
- if (typeof value === "string") return [value];
45
- if (Array.isArray(value)) return value.flatMap((item) => textBlocks(item, depth + 1));
46
- if (typeof value !== "object") return [];
47
- if (value.type === "text" && typeof value.text === "string") return [value.text];
48
- const keys = ["content", "message", "output", "result", "data", "text", "value", "command", "args", "input"];
49
- return keys.flatMap((key) => key in value ? textBlocks(value[key], depth + 1) : []);
42
+ if (depth > 5 || value === null || value === undefined)
43
+ return [];
44
+ if (typeof value === "string")
45
+ return [value];
46
+ if (Array.isArray(value))
47
+ return value.flatMap((item) => textBlocks(item, depth + 1));
48
+ if (!isUnknownRecord(value))
49
+ return [];
50
+ if (value.type === "text" && typeof value.text === "string")
51
+ return [value.text];
52
+ const keys = ["content", "message", "output", "result", "data", "text", "value", "command", "args", "input"];
53
+ return keys.flatMap((key) => key in value ? textBlocks(value[key], depth + 1) : []);
50
54
  }
51
-
52
55
  function matchesAny(text, patterns) {
53
- return patterns.some((pattern) => pattern.test(text));
56
+ return patterns.some((pattern) => pattern.test(text));
54
57
  }
55
-
56
58
  function toolResultBlocks(value, depth = 0) {
57
- if (depth > 5 || value === null || value === undefined) return [];
58
- if (Array.isArray(value)) return value.flatMap((item) => toolResultBlocks(item, depth + 1));
59
- if (typeof value !== "object") return [];
60
- const own = value.type === "tool-result" ? [value] : [];
61
- return own.concat(Object.values(value).flatMap((item) => toolResultBlocks(item, depth + 1)));
59
+ if (depth > 5 || value === null || value === undefined)
60
+ return [];
61
+ if (Array.isArray(value))
62
+ return value.flatMap((item) => toolResultBlocks(item, depth + 1));
63
+ if (!isUnknownRecord(value))
64
+ return [];
65
+ const own = value.type === "tool-result" ? [value] : [];
66
+ return own.concat(Object.values(value).flatMap((item) => toolResultBlocks(item, depth + 1)));
62
67
  }
63
-
64
68
  function nativeToolResult(data) {
65
- const blocks = toolResultBlocks(data);
66
- if (blocks.length !== 1) return undefined;
67
- const block = blocks[0];
68
- const source = data?.message?.source;
69
- if (source?.kind !== "tool"
70
- || typeof source.callId !== "string"
71
- || !source.callId
72
- || block.toolCallId !== source.callId
73
- || typeof block.isError !== "boolean"
74
- || !Array.isArray(block.content)) {
75
- return undefined;
76
- }
77
- return Object.freeze({
78
- callId: source.callId,
79
- successful: block.isError === false && !data?.error,
80
- });
69
+ const blocks = toolResultBlocks(data);
70
+ if (blocks.length !== 1)
71
+ return undefined;
72
+ const block = blocks[0];
73
+ const message = isUnknownRecord(data.message) ? data.message : undefined;
74
+ const source = isUnknownRecord(message?.source) ? message.source : undefined;
75
+ if (source?.kind !== "tool"
76
+ || typeof source.callId !== "string"
77
+ || !source.callId
78
+ || block?.toolCallId !== source.callId
79
+ || typeof block.isError !== "boolean"
80
+ || !Array.isArray(block.content))
81
+ return undefined;
82
+ return Object.freeze({
83
+ callId: source.callId,
84
+ successful: block.isError === false && !data.error,
85
+ });
81
86
  }
82
-
83
87
  function commandFromCall(call) {
84
- const args = call?.arguments;
85
- if (typeof args === "string") return args;
86
- if (!args || typeof args !== "object" || Array.isArray(args)) return "";
87
- for (const field of ["command", "cmd", "script"]) {
88
- if (typeof args[field] === "string") return args[field];
89
- }
90
- return "";
88
+ const arguments_ = call?.arguments;
89
+ if (typeof arguments_ === "string")
90
+ return arguments_;
91
+ if (!isUnknownRecord(arguments_))
92
+ return "";
93
+ for (const field of ["command", "cmd", "script"]) {
94
+ if (typeof arguments_[field] === "string")
95
+ return arguments_[field];
96
+ }
97
+ return "";
91
98
  }
92
-
93
99
  function resultReferencesCall(event, call) {
94
- return Number.isSafeInteger(call?.seq)
95
- && Array.isArray(event?.sourceEventSeqs)
96
- && event.sourceEventSeqs.length === 1
97
- && event.sourceEventSeqs[0] === call.seq;
100
+ return Number.isSafeInteger(call?.seq)
101
+ && Array.isArray(event?.sourceEventSeqs)
102
+ && event.sourceEventSeqs.length === 1
103
+ && event.sourceEventSeqs[0] === call.seq;
98
104
  }
99
-
100
105
  function nativeToolCalls(events, startIndex) {
101
- const calls = new Map();
102
- const duplicates = new Set();
103
- for (let index = startIndex; index < events.length; index += 1) {
104
- const event = events[index];
105
- if (event?.type !== "tool/call") continue;
106
- const callId = event.data?.callId;
107
- const name = event.data?.name;
108
- if (typeof callId !== "string" || !callId || typeof name !== "string" || !name || !Number.isSafeInteger(event.seq)) continue;
109
- if (calls.has(callId)) {
110
- calls.delete(callId);
111
- duplicates.add(callId);
112
- continue;
106
+ const calls = new Map();
107
+ const duplicates = new Set();
108
+ for (let index = startIndex; index < events.length; index += 1) {
109
+ const event = events[index];
110
+ if (event?.type !== "tool/call")
111
+ continue;
112
+ const callId = event.data?.callId;
113
+ const name = event.data?.name;
114
+ if (typeof callId !== "string" || !callId || typeof name !== "string" || !name || !Number.isSafeInteger(event.seq))
115
+ continue;
116
+ if (calls.has(callId)) {
117
+ calls.delete(callId);
118
+ duplicates.add(callId);
119
+ continue;
120
+ }
121
+ if (duplicates.has(callId))
122
+ continue;
123
+ calls.set(callId, Object.freeze({ index, seq: event.seq, name, arguments: event.data?.arguments }));
113
124
  }
114
- if (duplicates.has(callId)) continue;
115
- calls.set(callId, Object.freeze({
116
- index,
117
- seq: event.seq,
118
- name,
119
- arguments: event.data?.arguments,
120
- }));
121
- }
122
- return calls;
125
+ return calls;
123
126
  }
124
-
125
127
  function eventEvidence(event, index, calls) {
126
- if (event?.type === "user/message") {
127
- const text = textBlocks(event.data).join("\n").trim();
128
- return text ? { index, source: "user", kinds: ["requirement"], label: "earlier user requirement", text } : undefined;
129
- }
130
- if (["assistant/message", "agent/message", "message/assistant"].includes(event?.type)) {
131
- const text = textBlocks(event.data).join("\n").trim();
132
- if (!text) return undefined;
133
- const kinds = ["assistant-claim"];
134
- if (matchesAny(text, REQUIREMENT_PATTERNS)) kinds.push("requirement");
135
- if (matchesAny(text, ACCEPTANCE_PATTERNS)) kinds.push("acceptance");
136
- return { index, source: "assistant", kinds, label: "controller claim", text };
137
- }
138
- if (event?.type === "odai/route-card-frozen" && event.data?.card) {
139
- return {
140
- index,
141
- source: "route-card",
142
- kinds: ["acceptance"],
143
- label: `frozen route card ${event.data.card.id ?? "(unknown)"}`,
144
- text: JSON.stringify(event.data.card),
145
- };
146
- }
147
- if (event?.type === "tool/result") {
148
- const result = nativeToolResult(event.data);
149
- const call = result ? calls.get(result.callId) : undefined;
150
- if (!call || call.index >= index || !resultReferencesCall(event, call)) return undefined;
151
- const callId = result.callId;
152
- const successful = result.successful;
153
- const command = commandFromCall(call);
154
- const simpleCommand = !SHELL_CONTROL_PATTERN.test(command);
155
- const diffCommand = simpleCommand && matchesAny(command, DIFF_COMMAND_PATTERNS);
156
- const testCommand = simpleCommand && matchesAny(command, TEST_COMMAND_PATTERNS);
157
- const explicitWrite = WRITE_TOOL_NAMES.has(call.name) || matchesAny(command, WRITE_COMMAND_PATTERNS);
158
- const unknownShellMutation = SHELL_TOOL_NAMES.has(call.name)
159
- && !diffCommand
160
- && !testCommand
161
- && (SHELL_CONTROL_PATTERN.test(command) || !matchesAny(command, READ_ONLY_SHELL_COMMAND_PATTERNS));
162
- const writeCommand = explicitWrite || unknownShellMutation;
163
- if (!successful && !testCommand && !writeCommand) return undefined;
164
- const output = textBlocks(event.data).join("\n").trim();
165
- const kinds = successful ? ["tool"] : [];
166
- if (successful && diffCommand && matchesAny(output, DIFF_OUTPUT_PATTERNS)) kinds.push("diff");
167
- if (writeCommand) kinds.push("write");
168
- if (testCommand) {
169
- const testPassed = successful
170
- && matchesAny(output, TEST_SUCCESS_PATTERNS)
171
- && !matchesAny(output, TEST_FAILURE_PATTERNS);
172
- kinds.push(testPassed ? "test" : "test-failed");
128
+ if (event?.type === "user/message") {
129
+ const text = textBlocks(event.data).join("\n").trim();
130
+ return text ? { index, source: "user", kinds: ["requirement"], label: "earlier user requirement", text } : undefined;
131
+ }
132
+ if (["assistant/message", "agent/message", "message/assistant"].includes(event?.type)) {
133
+ const text = textBlocks(event.data).join("\n").trim();
134
+ if (!text)
135
+ return undefined;
136
+ const kinds = ["assistant-claim"];
137
+ if (matchesAny(text, REQUIREMENT_PATTERNS))
138
+ kinds.push("requirement");
139
+ if (matchesAny(text, ACCEPTANCE_PATTERNS))
140
+ kinds.push("acceptance");
141
+ return { index, source: "assistant", kinds, label: "controller claim", text };
142
+ }
143
+ if (event?.type === "odai/route-card-frozen" && event.data?.card) {
144
+ return {
145
+ index, source: "route-card", kinds: ["acceptance"],
146
+ label: `frozen route card ${typeof event.data.card.id === "string" ? event.data.card.id : "(unknown)"}`,
147
+ text: JSON.stringify(event.data.card),
148
+ };
173
149
  }
174
- const identity = `tool-call:${callId}`;
175
- const text = [command ? `command: ${command}` : "", output || "(no textual result)"].filter(Boolean).join("\n\n");
176
- return {
177
- index,
178
- source: "tool",
179
- kinds,
180
- label: `tool ${call.name} (${identity})`,
181
- identity,
182
- text,
183
- };
184
- }
185
- if (event?.type === "odai/tool-observed" && event.data?.isError === false) {
186
- const identity = typeof event.data.callId === "string" ? `tool-call:${event.data.callId}` : undefined;
187
- const tool = event.data.tool ?? "unknown";
188
- return {
189
- index,
190
- source: "tool",
191
- kinds: ["tool", ...(WRITE_TOOL_NAMES.has(tool) ? ["write"] : [])],
192
- label: `observed tool ${tool}${identity ? ` (${identity})` : ""}`,
193
- ...(identity ? { identity } : {}),
194
- text: JSON.stringify(event.data),
195
- };
196
- }
197
- return undefined;
150
+ if (event?.type === "tool/result") {
151
+ const result = nativeToolResult(event.data);
152
+ if (!result)
153
+ return undefined;
154
+ const call = calls.get(result.callId);
155
+ if (!call || call.index >= index || !resultReferencesCall(event, call))
156
+ return undefined;
157
+ const command = commandFromCall(call);
158
+ const simpleCommand = !SHELL_CONTROL_PATTERN.test(command);
159
+ const diffCommand = simpleCommand && matchesAny(command, DIFF_COMMAND_PATTERNS);
160
+ const testCommand = simpleCommand && matchesAny(command, TEST_COMMAND_PATTERNS);
161
+ const explicitWrite = WRITE_TOOL_NAMES.has(call.name) || matchesAny(command, WRITE_COMMAND_PATTERNS);
162
+ const unknownShellMutation = SHELL_TOOL_NAMES.has(call.name)
163
+ && !diffCommand && !testCommand
164
+ && (SHELL_CONTROL_PATTERN.test(command) || !matchesAny(command, READ_ONLY_SHELL_COMMAND_PATTERNS));
165
+ const writeCommand = explicitWrite || unknownShellMutation;
166
+ if (!result.successful && !testCommand && !writeCommand)
167
+ return undefined;
168
+ const output = textBlocks(event.data).join("\n").trim();
169
+ const kinds = result.successful ? ["tool"] : [];
170
+ if (result.successful && diffCommand && matchesAny(output, DIFF_OUTPUT_PATTERNS))
171
+ kinds.push("diff");
172
+ if (writeCommand)
173
+ kinds.push("write");
174
+ if (testCommand) {
175
+ const testPassed = result.successful && matchesAny(output, TEST_SUCCESS_PATTERNS) && !matchesAny(output, TEST_FAILURE_PATTERNS);
176
+ kinds.push(testPassed ? "test" : "test-failed");
177
+ }
178
+ const identity = `tool-call:${result.callId}`;
179
+ const text = [command ? `command: ${command}` : "", output || "(no textual result)"].filter(Boolean).join("\n\n");
180
+ return { index, source: "tool", kinds, label: `tool ${call.name} (${identity})`, identity, text };
181
+ }
182
+ if (event?.type === "odai/tool-observed" && event.data?.isError === false) {
183
+ const identity = typeof event.data.callId === "string" ? `tool-call:${event.data.callId}` : undefined;
184
+ const tool = typeof event.data.tool === "string" ? event.data.tool : "unknown";
185
+ return {
186
+ index, source: "tool", kinds: ["tool", ...(WRITE_TOOL_NAMES.has(tool) ? ["write"] : [])],
187
+ label: `observed tool ${tool}${identity ? ` (${identity})` : ""}`,
188
+ ...(identity ? { identity } : {}), text: JSON.stringify(event.data),
189
+ };
190
+ }
191
+ return undefined;
198
192
  }
199
-
200
193
  function truncateText(text, limit) {
201
- if (text.length <= limit) return { text, truncated: false };
202
- return { text: `${text.slice(0, Math.max(0, limit - 24))}\n...[packet truncated]`, truncated: true };
194
+ if (text.length <= limit)
195
+ return { text, truncated: false };
196
+ return { text: `${text.slice(0, Math.max(0, limit - 24))}\n...[packet truncated]`, truncated: true };
203
197
  }
204
-
205
198
  function digestPacket(value) {
206
- return createHash("sha256").update(JSON.stringify(value)).digest("hex");
199
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex");
207
200
  }
208
-
209
201
  function coverageFor(currentTask, entries) {
210
- const matching = (kind) => entries.filter((entry) => entry.kinds.includes(kind));
211
- const latestIndex = (kind) => matching(kind).reduce((latest, entry) => Math.max(latest, entry.index), -1);
212
- const acceptanceCount = matching("acceptance").length;
213
- const diffEntries = matching("diff");
214
- const testEntries = matching("test");
215
- const failedTestEntries = matching("test-failed");
216
- const latestWriteIndex = latestIndex("write");
217
- const latestDiffIndex = latestIndex("diff");
218
- const latestTestIndex = latestIndex("test");
219
- const latestFailedTestIndex = latestIndex("test-failed");
220
- const currentEvidence = acceptanceCount > 0
221
- && latestDiffIndex >= 0
222
- && latestTestIndex >= 0
223
- && latestDiffIndex > latestWriteIndex
224
- && latestTestIndex > latestWriteIndex
225
- && latestTestIndex > latestFailedTestIndex
226
- && diffEntries.some((diff) => testEntries.some((testResult) => diff.identity !== testResult.identity));
227
- return Object.freeze({
228
- requirements: Boolean(currentTask) || matching("requirement").length > 0,
229
- acceptanceCount,
230
- diffCount: diffEntries.length,
231
- testCount: testEntries.length,
232
- failedTestCount: failedTestEntries.length,
233
- writeCount: matching("write").length,
234
- toolEvidenceCount: matching("tool").length,
235
- latestWriteIndex,
236
- latestDiffIndex,
237
- latestTestIndex,
238
- latestFailedTestIndex,
239
- currentEvidence,
240
- });
202
+ const matching = (kind) => entries.filter((entry) => entry.kinds.includes(kind));
203
+ const latestIndex = (kind) => matching(kind).reduce((latest, entry) => Math.max(latest, entry.index), -1);
204
+ const acceptanceCount = matching("acceptance").length;
205
+ const diffEntries = matching("diff");
206
+ const testEntries = matching("test");
207
+ const failedTestEntries = matching("test-failed");
208
+ const latestWriteIndex = latestIndex("write");
209
+ const latestDiffIndex = latestIndex("diff");
210
+ const latestTestIndex = latestIndex("test");
211
+ const latestFailedTestIndex = latestIndex("test-failed");
212
+ const currentEvidence = acceptanceCount > 0
213
+ && latestDiffIndex >= 0 && latestTestIndex >= 0
214
+ && latestDiffIndex > latestWriteIndex && latestTestIndex > latestWriteIndex
215
+ && latestTestIndex > latestFailedTestIndex
216
+ && diffEntries.some((diff) => testEntries.some((testResult) => diff.identity !== testResult.identity));
217
+ return Object.freeze({
218
+ requirements: Boolean(currentTask) || matching("requirement").length > 0,
219
+ acceptanceCount, diffCount: diffEntries.length, testCount: testEntries.length,
220
+ failedTestCount: failedTestEntries.length, writeCount: matching("write").length,
221
+ toolEvidenceCount: matching("tool").length, latestWriteIndex, latestDiffIndex,
222
+ latestTestIndex, latestFailedTestIndex, currentEvidence,
223
+ });
241
224
  }
242
-
243
225
  export function buildRoleContextPacket(agent, role, taskText, options = {}) {
244
- const maxChars = Number.isSafeInteger(options.maxChars) && options.maxChars > 0
245
- ? options.maxChars
246
- : DEFAULT_MAX_CHARS;
247
- const maxEvents = Number.isSafeInteger(options.maxEvents) && options.maxEvents > 0
248
- ? options.maxEvents
249
- : DEFAULT_MAX_EVENTS;
250
- const taskBudget = Math.max(128, Math.floor(maxChars / 2));
251
- const task = truncateText(String(taskText ?? "").trim(), taskBudget);
252
- const events = Array.isArray(agent?.session?.events) ? agent.session.events : [];
253
- const startIndex = Math.max(0, events.length - maxEvents);
254
- const calls = nativeToolCalls(events, startIndex);
255
- const selected = [];
256
- let evidenceChars = 0;
257
- let truncated = task.truncated || events.length > maxEvents;
258
-
259
- for (let index = events.length - 1; index >= startIndex; index -= 1) {
260
- const entry = eventEvidence(events[index], index, calls);
261
- if (!entry) continue;
262
- const remaining = maxChars - task.text.length - evidenceChars;
263
- if (remaining <= 0) { truncated = true; break; }
264
- const bounded = truncateText(entry.text, remaining);
265
- selected.push(Object.freeze({ ...entry, kinds: Object.freeze([...new Set(entry.kinds)]), text: bounded.text }));
266
- evidenceChars += bounded.text.length;
267
- if (bounded.truncated) { truncated = true; break; }
268
- }
269
- selected.reverse();
270
-
271
- const entries = Object.freeze(selected);
272
- const coverage = coverageFor(task.text, entries);
273
- const packetBody = Object.freeze({
274
- schemaVersion: 1,
275
- role,
276
- currentTask: task.text,
277
- entries,
278
- coverage,
279
- truncated,
280
- });
281
- const digest = digestPacket(packetBody);
282
- const reviewerSufficient = !truncated
283
- && coverage.requirements
284
- && coverage.acceptanceCount > 0
285
- && coverage.diffCount > 0
286
- && coverage.testCount > 0
287
- && coverage.toolEvidenceCount > 0
288
- && coverage.currentEvidence;
289
- return Object.freeze({
290
- ...packetBody,
291
- digest,
292
- evidenceCount: entries.length,
293
- toolEvidenceCount: coverage.toolEvidenceCount,
294
- sufficient: role === "reviewer" ? reviewerSufficient : Boolean(task.text),
295
- });
226
+ const maxChars = Number.isSafeInteger(options.maxChars) && (options.maxChars ?? 0) > 0 ? options.maxChars : DEFAULT_MAX_CHARS;
227
+ const maxEvents = Number.isSafeInteger(options.maxEvents) && (options.maxEvents ?? 0) > 0 ? options.maxEvents : DEFAULT_MAX_EVENTS;
228
+ const taskBudget = Math.max(128, Math.floor(maxChars / 2));
229
+ const task = truncateText(String(taskText ?? "").trim(), taskBudget);
230
+ const events = Array.isArray(agent?.session?.events) ? agent.session.events : [];
231
+ const startIndex = Math.max(0, events.length - maxEvents);
232
+ const calls = nativeToolCalls(events, startIndex);
233
+ const selected = [];
234
+ let evidenceChars = 0;
235
+ let truncated = task.truncated || events.length > maxEvents;
236
+ for (let index = events.length - 1; index >= startIndex; index -= 1) {
237
+ const event = events[index];
238
+ if (!event)
239
+ continue;
240
+ const entry = eventEvidence(event, index, calls);
241
+ if (!entry)
242
+ continue;
243
+ const remaining = maxChars - task.text.length - evidenceChars;
244
+ if (remaining <= 0) {
245
+ truncated = true;
246
+ break;
247
+ }
248
+ const bounded = truncateText(entry.text, remaining);
249
+ selected.push(Object.freeze({ ...entry, kinds: Object.freeze([...new Set(entry.kinds)]), text: bounded.text }));
250
+ evidenceChars += bounded.text.length;
251
+ if (bounded.truncated) {
252
+ truncated = true;
253
+ break;
254
+ }
255
+ }
256
+ selected.reverse();
257
+ const entries = Object.freeze(selected);
258
+ const coverage = coverageFor(task.text, entries);
259
+ const packetBody = Object.freeze({ schemaVersion: 1, role, currentTask: task.text, entries, coverage, truncated });
260
+ const digest = digestPacket(packetBody);
261
+ const reviewerSufficient = !truncated && coverage.requirements && coverage.acceptanceCount > 0
262
+ && coverage.diffCount > 0 && coverage.testCount > 0 && coverage.toolEvidenceCount > 0 && coverage.currentEvidence;
263
+ return Object.freeze({
264
+ ...packetBody, digest, evidenceCount: entries.length, toolEvidenceCount: coverage.toolEvidenceCount,
265
+ sufficient: role === "reviewer" ? reviewerSufficient : Boolean(task.text),
266
+ });
296
267
  }
297
-
298
268
  export function renderRoleContextPacket(packet) {
299
- const evidence = packet.entries.length
300
- ? packet.entries.map((entry, index) => [
301
- `### E${index + 1}: ${entry.label}`,
302
- `kinds: ${entry.kinds.join(", ")}`,
303
- entry.text,
304
- ].join("\n")).join("\n\n")
305
- : "(no prior evidence entries)";
306
- return [
307
- "# Odai bounded role context packet",
308
- `role: ${packet.role}`,
309
- `digest: sha256:${packet.digest}`,
310
- `truncated: ${packet.truncated}`,
311
- `coverage: ${JSON.stringify(packet.coverage)}`,
312
- "",
313
- "## Current task",
314
- packet.currentTask || "(empty)",
315
- "",
316
- "## Evidence",
317
- evidence,
318
- "",
319
- "Treat assistant text and route-card contents as claims. Tool entries are evidence only for the exact command/result they contain.",
320
- ].join("\n");
269
+ const evidence = packet.entries.length
270
+ ? packet.entries.map((entry, index) => [
271
+ `### E${index + 1}: ${entry.label}`,
272
+ `kinds: ${entry.kinds.join(", ")}`,
273
+ entry.text,
274
+ ].join("\n")).join("\n\n")
275
+ : "(no prior evidence entries)";
276
+ return [
277
+ "# Odai bounded role context packet",
278
+ `role: ${packet.role}`,
279
+ `digest: sha256:${packet.digest}`,
280
+ `truncated: ${packet.truncated}`,
281
+ `coverage: ${JSON.stringify(packet.coverage)}`,
282
+ "", "## Current task", packet.currentTask || "(empty)", "", "## Evidence", evidence, "",
283
+ "Treat assistant text and route-card contents as claims. Tool entries are evidence only for the exact command/result they contain.",
284
+ ].join("\n");
321
285
  }
286
+ //# sourceMappingURL=routing-context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-context.mjs","sourceRoot":"","sources":["../src/routing-context.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ModelRoute, RuntimeConfig, UnknownRecord } from "./runtime-types.mjs";
2
+ interface CompactionRequestOptions extends UnknownRecord {
3
+ purpose?: string;
4
+ sessionId?: string;
5
+ provider?: string;
6
+ model?: string;
7
+ reasoningEffort?: string;
8
+ cacheRetention?: string;
9
+ }
10
+ interface SessionRouteStore {
11
+ get(sessionId: string): {
12
+ requestHeader?(): {
13
+ config?: ModelRoute;
14
+ };
15
+ } | undefined;
16
+ }
17
+ export declare const ROUTED_ROLES: readonly ["researcher", "planner", "executor", "reviewer", "frontend"];
18
+ export declare function resolveConfig(rawConfig?: unknown): RuntimeConfig;
19
+ /** Mutate exact-route compaction options; returns true only when an option changed. */
20
+ export declare function inheritCompactionReasoning(options: CompactionRequestOptions, sessions: SessionRouteStore | undefined, cacheRetention?: RuntimeConfig["compaction"]["cacheRetention"]): boolean;
21
+ export declare function resolveSkillPath(configuredPath?: string, env?: NodeJS.ProcessEnv): string;
22
+ export declare function loadRoleContracts(skillPath: string): unknown;
23
+ export {};
24
+ //# sourceMappingURL=runtime-config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.d.mts","sourceRoot":"","sources":["../src/runtime-config.mts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpF,UAAU,wBAAyB,SAAQ,aAAa;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG;QACtB,aAAa,CAAC,IAAI;YAAE,MAAM,CAAC,EAAE,UAAU,CAAA;SAAE,CAAC;KAC3C,GAAG,SAAS,CAAC;CACf;AAKD,eAAO,MAAM,YAAY,wEAAqB,CAAC;AAyB/C,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAY,GAAG,aAAa,CAoGpE;AAED,uFAAuF;AACvF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,cAAc,GAAE,aAAa,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAsB,GACjF,OAAO,CA0BT;AAED,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAetG;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5D"}