@qlingzzy/qling 1.0.0 → 1.1.0

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 (254) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/README.en.md +82 -17
  3. package/README.md +15 -7
  4. package/dist/agent/main-loop.d.ts +120 -0
  5. package/dist/agent/main-loop.d.ts.map +1 -0
  6. package/dist/agent/main-loop.js +279 -0
  7. package/dist/agent/subtask-parallel.d.ts +29 -0
  8. package/dist/agent/subtask-parallel.d.ts.map +1 -0
  9. package/dist/agent/subtask-parallel.js +107 -0
  10. package/dist/agent/subtask.d.ts +13 -0
  11. package/dist/agent/subtask.d.ts.map +1 -1
  12. package/dist/agent/subtask.js +79 -24
  13. package/dist/agent/system-prompt.d.ts +39 -0
  14. package/dist/agent/system-prompt.d.ts.map +1 -0
  15. package/dist/agent/system-prompt.js +89 -0
  16. package/dist/agent/tool-orchestrator.d.ts +66 -0
  17. package/dist/agent/tool-orchestrator.d.ts.map +1 -0
  18. package/dist/agent/tool-orchestrator.js +355 -0
  19. package/dist/agent-loop.d.ts +29 -16
  20. package/dist/agent-loop.d.ts.map +1 -1
  21. package/dist/agent-loop.js +262 -807
  22. package/dist/agents/roles.d.ts +57 -0
  23. package/dist/agents/roles.d.ts.map +1 -0
  24. package/dist/agents/roles.js +198 -0
  25. package/dist/commands/agents.d.ts.map +1 -1
  26. package/dist/commands/agents.js +17 -3
  27. package/dist/commands/claude-style.d.ts.map +1 -1
  28. package/dist/commands/claude-style.js +19 -10
  29. package/dist/commands/help.d.ts.map +1 -1
  30. package/dist/commands/help.js +3 -2
  31. package/dist/commands/index.d.ts.map +1 -1
  32. package/dist/commands/index.js +6 -0
  33. package/dist/commands/mode.d.ts +16 -0
  34. package/dist/commands/mode.d.ts.map +1 -0
  35. package/dist/commands/mode.js +67 -0
  36. package/dist/commands/recover.d.ts +3 -0
  37. package/dist/commands/recover.d.ts.map +1 -0
  38. package/dist/commands/recover.js +69 -0
  39. package/dist/commands/runtime.d.ts +2 -0
  40. package/dist/commands/runtime.d.ts.map +1 -1
  41. package/dist/commands/runtime.js +2 -0
  42. package/dist/commands/trace.d.ts +3 -0
  43. package/dist/commands/trace.d.ts.map +1 -0
  44. package/dist/commands/trace.js +45 -0
  45. package/dist/commands/verify.js +2 -2
  46. package/dist/config-report.d.ts +0 -1
  47. package/dist/config-report.d.ts.map +1 -1
  48. package/dist/config-report.js +1 -2
  49. package/dist/config.d.ts +0 -1
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +0 -1
  52. package/dist/context-report.d.ts +13 -7
  53. package/dist/context-report.d.ts.map +1 -1
  54. package/dist/context-report.js +64 -61
  55. package/dist/context-tool-hygiene.d.ts +36 -0
  56. package/dist/context-tool-hygiene.d.ts.map +1 -0
  57. package/dist/context-tool-hygiene.js +125 -0
  58. package/dist/dashboard/client.d.ts +2 -0
  59. package/dist/dashboard/client.d.ts.map +1 -0
  60. package/dist/dashboard/client.js +305 -0
  61. package/dist/dashboard/model.d.ts +13 -0
  62. package/dist/dashboard/model.d.ts.map +1 -0
  63. package/dist/dashboard/model.js +112 -0
  64. package/dist/dashboard/page.d.ts +3 -0
  65. package/dist/dashboard/page.d.ts.map +1 -0
  66. package/dist/dashboard/page.js +204 -0
  67. package/dist/dashboard/types.d.ts +63 -0
  68. package/dist/dashboard/types.d.ts.map +1 -0
  69. package/dist/dashboard/types.js +1 -0
  70. package/dist/dashboard-server.d.ts +24 -4
  71. package/dist/dashboard-server.d.ts.map +1 -1
  72. package/dist/dashboard-server.js +397 -302
  73. package/dist/discovery-registry.d.ts +17 -3
  74. package/dist/discovery-registry.d.ts.map +1 -1
  75. package/dist/discovery-registry.js +78 -3
  76. package/dist/doctor.d.ts +8 -0
  77. package/dist/doctor.d.ts.map +1 -1
  78. package/dist/doctor.js +116 -0
  79. package/dist/eval/llm-tasks.d.ts +5 -0
  80. package/dist/eval/llm-tasks.d.ts.map +1 -0
  81. package/dist/eval/llm-tasks.js +125 -0
  82. package/dist/eval/repo-tasks.d.ts +12 -0
  83. package/dist/eval/repo-tasks.d.ts.map +1 -0
  84. package/dist/eval/repo-tasks.js +220 -0
  85. package/dist/eval/runner.d.ts +3 -1
  86. package/dist/eval/runner.d.ts.map +1 -1
  87. package/dist/eval/runner.js +23 -4
  88. package/dist/eval/tasks.d.ts.map +1 -1
  89. package/dist/eval/tasks.js +186 -0
  90. package/dist/eval/types.d.ts +8 -5
  91. package/dist/eval/types.d.ts.map +1 -1
  92. package/dist/execution/event-bus.d.ts +44 -0
  93. package/dist/execution/event-bus.d.ts.map +1 -0
  94. package/dist/execution/event-bus.js +76 -0
  95. package/dist/execution/failure-classifier.d.ts +11 -0
  96. package/dist/execution/failure-classifier.d.ts.map +1 -0
  97. package/dist/execution/failure-classifier.js +66 -0
  98. package/dist/execution/progress-detector.d.ts +3 -0
  99. package/dist/execution/progress-detector.d.ts.map +1 -0
  100. package/dist/execution/progress-detector.js +23 -0
  101. package/dist/execution/recovery-controller.d.ts +24 -0
  102. package/dist/execution/recovery-controller.d.ts.map +1 -0
  103. package/dist/execution/recovery-controller.js +114 -0
  104. package/dist/execution/recovery-messages.d.ts +24 -0
  105. package/dist/execution/recovery-messages.d.ts.map +1 -0
  106. package/dist/execution/recovery-messages.js +48 -0
  107. package/dist/execution/recovery-metrics.d.ts +16 -0
  108. package/dist/execution/recovery-metrics.d.ts.map +1 -0
  109. package/dist/execution/recovery-metrics.js +73 -0
  110. package/dist/execution/recovery-strategy-planner.d.ts +6 -0
  111. package/dist/execution/recovery-strategy-planner.d.ts.map +1 -0
  112. package/dist/execution/recovery-strategy-planner.js +24 -0
  113. package/dist/execution/run-trace-store.d.ts +29 -0
  114. package/dist/execution/run-trace-store.d.ts.map +1 -0
  115. package/dist/execution/run-trace-store.js +140 -0
  116. package/dist/execution/staged-verifier.d.ts +33 -0
  117. package/dist/execution/staged-verifier.d.ts.map +1 -0
  118. package/dist/execution/staged-verifier.js +39 -0
  119. package/dist/execution/types.d.ts +58 -0
  120. package/dist/execution/types.d.ts.map +1 -0
  121. package/dist/execution/types.js +1 -0
  122. package/dist/execution/verification-loop.d.ts +58 -0
  123. package/dist/execution/verification-loop.d.ts.map +1 -0
  124. package/dist/execution/verification-loop.js +195 -0
  125. package/dist/execution/verification-stages.d.ts +17 -0
  126. package/dist/execution/verification-stages.d.ts.map +1 -0
  127. package/dist/execution/verification-stages.js +102 -0
  128. package/dist/help-topics.d.ts.map +1 -1
  129. package/dist/help-topics.js +11 -0
  130. package/dist/index.js +0 -8
  131. package/dist/lsp/ts-service.d.ts +36 -0
  132. package/dist/lsp/ts-service.d.ts.map +1 -0
  133. package/dist/lsp/ts-service.js +291 -0
  134. package/dist/memory/lifecycle.d.ts +19 -0
  135. package/dist/memory/lifecycle.d.ts.map +1 -0
  136. package/dist/memory/lifecycle.js +53 -0
  137. package/dist/memory.d.ts +0 -16
  138. package/dist/memory.d.ts.map +1 -1
  139. package/dist/memory.js +0 -36
  140. package/dist/metrics/collector.d.ts +7 -0
  141. package/dist/metrics/collector.d.ts.map +1 -1
  142. package/dist/metrics/collector.js +60 -0
  143. package/dist/mission/manager.d.ts +1 -0
  144. package/dist/mission/manager.d.ts.map +1 -1
  145. package/dist/mission/manager.js +9 -0
  146. package/dist/mission/progress-notify.d.ts +39 -0
  147. package/dist/mission/progress-notify.d.ts.map +1 -0
  148. package/dist/mission/progress-notify.js +386 -0
  149. package/dist/pipeline/hooks.d.ts +1 -1
  150. package/dist/pipeline/hooks.d.ts.map +1 -1
  151. package/dist/pipeline/hooks.js +1 -0
  152. package/dist/pipeline/sections.d.ts +8 -4
  153. package/dist/pipeline/sections.d.ts.map +1 -1
  154. package/dist/pipeline/sections.js +70 -27
  155. package/dist/pipeline/verification.d.ts +1 -0
  156. package/dist/pipeline/verification.d.ts.map +1 -1
  157. package/dist/pipeline/verification.js +10 -7
  158. package/dist/providers/llm-client.d.ts +38 -0
  159. package/dist/providers/llm-client.d.ts.map +1 -0
  160. package/dist/providers/llm-client.js +105 -0
  161. package/dist/sdk.d.ts +1 -0
  162. package/dist/sdk.d.ts.map +1 -1
  163. package/dist/sdk.js +1 -0
  164. package/dist/session/durable-session-supervisor.d.ts.map +1 -1
  165. package/dist/session/durable-session-supervisor.js +13 -6
  166. package/dist/session/session-persistence.d.ts +29 -0
  167. package/dist/session/session-persistence.d.ts.map +1 -0
  168. package/dist/session/session-persistence.js +45 -0
  169. package/dist/session/session-scheduler.d.ts +8 -1
  170. package/dist/session/session-scheduler.d.ts.map +1 -1
  171. package/dist/session/session-scheduler.js +33 -4
  172. package/dist/session-task-report.d.ts +1 -0
  173. package/dist/session-task-report.d.ts.map +1 -1
  174. package/dist/session-task-report.js +2 -1
  175. package/dist/shortcuts.d.ts.map +1 -1
  176. package/dist/shortcuts.js +1 -0
  177. package/dist/skills/registry.d.ts.map +1 -1
  178. package/dist/skills/registry.js +10 -0
  179. package/dist/skills/security-scan.d.ts +15 -0
  180. package/dist/skills/security-scan.d.ts.map +1 -0
  181. package/dist/skills/security-scan.js +95 -0
  182. package/dist/skills/types.d.ts +2 -0
  183. package/dist/skills/types.d.ts.map +1 -1
  184. package/dist/statusline.d.ts +3 -3
  185. package/dist/statusline.d.ts.map +1 -1
  186. package/dist/statusline.js +9 -17
  187. package/dist/token-usage.d.ts +27 -0
  188. package/dist/token-usage.d.ts.map +1 -0
  189. package/dist/token-usage.js +107 -0
  190. package/dist/tools/bash.d.ts.map +1 -1
  191. package/dist/tools/bash.js +5 -3
  192. package/dist/tools/browser-act-session.d.ts +48 -0
  193. package/dist/tools/browser-act-session.d.ts.map +1 -0
  194. package/dist/tools/browser-act-session.js +168 -0
  195. package/dist/tools/browser-act.d.ts +14 -0
  196. package/dist/tools/browser-act.d.ts.map +1 -0
  197. package/dist/tools/browser-act.js +297 -0
  198. package/dist/tools/code-symbols.d.ts +35 -0
  199. package/dist/tools/code-symbols.d.ts.map +1 -0
  200. package/dist/tools/code-symbols.js +257 -0
  201. package/dist/tools/index.d.ts +4 -1
  202. package/dist/tools/index.d.ts.map +1 -1
  203. package/dist/tools/index.js +22 -2
  204. package/dist/tools/lsp.d.ts +13 -0
  205. package/dist/tools/lsp.d.ts.map +1 -0
  206. package/dist/tools/lsp.js +136 -0
  207. package/dist/tools/patch.d.ts +5 -0
  208. package/dist/tools/patch.d.ts.map +1 -1
  209. package/dist/tools/patch.js +25 -4
  210. package/dist/tools/search.d.ts +7 -0
  211. package/dist/tools/search.d.ts.map +1 -1
  212. package/dist/tools/search.js +20 -3
  213. package/dist/tools/skill.d.ts +2 -0
  214. package/dist/tools/skill.d.ts.map +1 -1
  215. package/dist/tools/skill.js +47 -14
  216. package/dist/tools/subtask.d.ts +3 -1
  217. package/dist/tools/subtask.d.ts.map +1 -1
  218. package/dist/tools/subtask.js +151 -56
  219. package/dist/tui/shell.d.ts +12 -0
  220. package/dist/tui/shell.d.ts.map +1 -1
  221. package/dist/tui/shell.js +36 -3
  222. package/dist/tui/streaming-repl.d.ts +1 -0
  223. package/dist/tui/streaming-repl.d.ts.map +1 -1
  224. package/dist/tui/streaming-repl.js +27 -4
  225. package/dist/tui/streaming-tui.d.ts +10 -0
  226. package/dist/tui/streaming-tui.d.ts.map +1 -1
  227. package/dist/tui/streaming-tui.js +70 -12
  228. package/dist/types.d.ts +0 -8
  229. package/dist/types.d.ts.map +1 -1
  230. package/dist/workflow-runtime.d.ts.map +1 -1
  231. package/dist/workflow-runtime.js +10 -2
  232. package/dist/workflow-types.d.ts +2 -0
  233. package/dist/workflow-types.d.ts.map +1 -1
  234. package/docs/install.md +29 -8
  235. package/docs/skills.md +56 -7
  236. package/docs/web-routing.md +83 -0
  237. package/package.json +18 -4
  238. package/scripts/dep-layers.mjs +275 -0
  239. package/scripts/eval-llm.mjs +27 -0
  240. package/scripts/eval-recovery.mjs +101 -0
  241. package/scripts/eval-tasks.mjs +20 -0
  242. package/scripts/validate-packaging.mjs +51 -0
  243. package/skills/examples/README.md +23 -0
  244. package/skills/examples/add-function/SKILL.md +31 -0
  245. package/skills/examples/fix-failing-test/SKILL.md +32 -0
  246. package/skills/examples/pr-summary/SKILL.md +34 -0
  247. package/skills/lifecycle-build/SKILL.md +22 -0
  248. package/skills/lifecycle-plan/SKILL.md +32 -0
  249. package/skills/lifecycle-review/SKILL.md +25 -0
  250. package/skills/lifecycle-ship/SKILL.md +22 -0
  251. package/skills/lifecycle-spec/SKILL.md +24 -0
  252. package/skills/lifecycle-test/SKILL.md +21 -0
  253. package/skills/opencli/SKILL.md +222 -0
  254. package/skills/qling.md +14 -3
@@ -0,0 +1,89 @@
1
+ // ============================================================
2
+ // System prompt 组装 + 内省评估(从 AgentLoop 抽出)
3
+ // ============================================================
4
+ import path from "node:path";
5
+ import { buildRepoMapSection, buildSystemPrompt, buildReflectionPrompt, } from "../pipeline/sections.js";
6
+ export function findLastUserMessageContent(messages) {
7
+ for (let index = messages.length - 1; index >= 0; index--) {
8
+ if (messages[index].role === "user")
9
+ return messages[index].content;
10
+ }
11
+ return "";
12
+ }
13
+ export function buildRuntimeMetaSection(options) {
14
+ const workspace = options.workspaceDir ?? "(disabled)";
15
+ const cache = options.fileCacheDir ?? path.join(options.runtimeRootDir, "cache");
16
+ const state = options.fileStateDir ?? options.runtimeRootDir;
17
+ return [
18
+ "【Runtime Meta】",
19
+ `provider=${options.provider ?? "default"}`,
20
+ `endpoint=${options.endpoint ?? "default"}`,
21
+ `workspace_dir=${workspace}`,
22
+ `file_cache_dir=${cache}`,
23
+ `file_state_dir=${state}`,
24
+ ].join("\n");
25
+ }
26
+ export async function assembleSystemPrompt(options) {
27
+ const cognitiveIndex = options.memoryStore
28
+ .getCognitiveIndex?.();
29
+ if (cognitiveIndex) {
30
+ try {
31
+ const symbols = cognitiveIndex.getAllSymbols();
32
+ options.sectionRegistry.register(buildRepoMapSection(symbols));
33
+ }
34
+ catch {
35
+ // ignore repomap failures
36
+ }
37
+ }
38
+ let memoryStr = "";
39
+ if (options.messages.length > 0) {
40
+ const lastUserMsg = findLastUserMessageContent(options.messages);
41
+ const relevant = await options.memoryStore.getRelevant(lastUserMsg, 10);
42
+ if (relevant.length > 0) {
43
+ memoryStr = relevant.map((e) => "[" + e.source + "] " + e.content).join("\n");
44
+ }
45
+ }
46
+ const sectionPrompt = buildSystemPrompt(options.sectionRegistry, {
47
+ memory: memoryStr || undefined,
48
+ });
49
+ const parts = [
50
+ options.baseSystemPrompt.trim(),
51
+ buildRuntimeMetaSection({
52
+ provider: options.provider,
53
+ endpoint: options.endpoint,
54
+ workspaceDir: options.workspaceDir,
55
+ fileCacheDir: options.fileCacheDir,
56
+ fileStateDir: options.fileStateDir,
57
+ runtimeRootDir: options.runtimeRootDir,
58
+ }),
59
+ sectionPrompt,
60
+ ].filter((p) => p && p.trim().length > 0);
61
+ return parts.join("\n\n");
62
+ }
63
+ export function heuristicReflect(tc) {
64
+ const args = tc.arguments;
65
+ const cmd = (args.cmd || args.command || "").toLowerCase();
66
+ if (cmd.includes("rm ") || cmd.includes("del ")) {
67
+ return { decision: "warn", reason: "启发式拦截:检测到可能的删除操作。" };
68
+ }
69
+ return { decision: "proceed", reason: "启发式通过。" };
70
+ }
71
+ /**
72
+ * Self-reflective pre-check for high-risk tools.
73
+ * Uses optional chat callback; falls back to heuristics on failure.
74
+ */
75
+ export async function reflectiveThink(tc, chat) {
76
+ const prompt = buildReflectionPrompt(tc.name, tc.arguments);
77
+ try {
78
+ const resp = await chat(prompt, { max_tokens: 200, temperature: 0 });
79
+ const jsonStr = resp.content.match(/\{[\s\S]*\}/)?.[0] || "{}";
80
+ const analysis = JSON.parse(jsonStr);
81
+ return {
82
+ decision: analysis.decision || "proceed",
83
+ reason: analysis.reason || "评估完成。",
84
+ };
85
+ }
86
+ catch {
87
+ return heuristicReflect(tc);
88
+ }
89
+ }
@@ -0,0 +1,66 @@
1
+ import type { ToolPipeline } from "../pipeline/hooks.js";
2
+ import { ApprovalGate } from "../guard/approval.js";
3
+ import type { GuardConfig } from "../config.js";
4
+ import type { Channel } from "../channels/types.js";
5
+ import type { KnowledgeAgentAdapter } from "../knowledge-agent.js";
6
+ import type { MemoryStore } from "../memory.js";
7
+ import type { WorkflowRuntime } from "../workflow-runtime.js";
8
+ import type { ExecutionEventBus } from "../execution/event-bus.js";
9
+ import type { Message, RawToolCall, ToolCall, ToolDefinition, ToolResult } from "../types.js";
10
+ export type ParseToolArgsResult = {
11
+ ok: true;
12
+ value: Record<string, unknown>;
13
+ } | {
14
+ ok: false;
15
+ error: string;
16
+ };
17
+ export interface PreparedToolCall {
18
+ call: ToolCall;
19
+ immediateResult?: ToolResult;
20
+ }
21
+ export declare function repairToolArguments(source: string, attempt: number): string;
22
+ export declare function parseToolArguments(raw: string, parseRetries?: number): ParseToolArgsResult;
23
+ export declare function stableStringify(value: unknown): string;
24
+ export declare function buildToolSignature(name: string, args: Record<string, unknown>): string;
25
+ /**
26
+ * Parse raw tool calls, apply argument repair retries, and enforce per-signature
27
+ * repeat limits within the current run.
28
+ */
29
+ export declare function prepareToolCalls(toolCalls: RawToolCall[], options?: {
30
+ parseRetries?: number;
31
+ toolRepeatLimit?: number;
32
+ signatureCounts?: Map<string, number>;
33
+ }): PreparedToolCall[];
34
+ export type ReflectionDecision = "proceed" | "ask" | "block" | "warn";
35
+ export interface ToolOrchestratorDeps {
36
+ pipeline: ToolPipeline;
37
+ tools: ToolDefinition[];
38
+ guardConfig: GuardConfig;
39
+ channel: Channel | null;
40
+ approvalGate: ApprovalGate;
41
+ knowledgeAdapter: KnowledgeAgentAdapter;
42
+ memoryStore: MemoryStore;
43
+ workspaceDir: string;
44
+ workflowRuntime: WorkflowRuntime;
45
+ executionEventBus: ExecutionEventBus;
46
+ emit: (event: string, ...args: unknown[]) => void;
47
+ reflectiveThink: (tc: ToolCall) => Promise<{
48
+ decision: ReflectionDecision;
49
+ reason: string;
50
+ }>;
51
+ }
52
+ export interface ExecuteToolsContext {
53
+ preparedCalls: PreparedToolCall[];
54
+ messages: Message[];
55
+ runId: string;
56
+ attemptId: string;
57
+ }
58
+ export interface ExecuteToolsResult {
59
+ turnToolCalls: number;
60
+ turnToolFailures: number;
61
+ }
62
+ /**
63
+ * Execute a prepared tool batch, appending tool messages onto `context.messages`.
64
+ */
65
+ export declare function executePreparedTools(deps: ToolOrchestratorDeps, context: ExecuteToolsContext): Promise<ExecuteToolsResult>;
66
+ //# sourceMappingURL=tool-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-orchestrator.d.ts","sourceRoot":"","sources":["../../src/agent/tool-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ // ============================================================
2
+ // 工具编排(从 AgentLoop 抽出)
3
+ // agent-runtime:解析参数、重复限制、pipeline 执行、结果卫生
4
+ // ============================================================
5
+ import { dispatch } from "../tools/index.js";
6
+ import { checkToolConsistency } from "../pipeline/consistency-checker.js";
7
+ import { ApprovalRequiredError } from "../guard/approval.js";
8
+ import { applyContentFilter } from "../guard/content-filter.js";
9
+ import { appendGuardAudit } from "../guard.js";
10
+ import { prepareToolResultContent, resolveToolResultMaxChars, } from "../context-tool-hygiene.js";
11
+ import { maybeAutoCommitAfterWrite } from "../git/auto-commit.js";
12
+ export function repairToolArguments(source, attempt) {
13
+ let out = source.trim();
14
+ if (attempt === 0) {
15
+ const fenced = out.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
16
+ if (fenced) {
17
+ out = fenced[1].trim();
18
+ }
19
+ return out;
20
+ }
21
+ if (attempt === 1) {
22
+ return out.replace(/,\s*([}\]])/g, "$1");
23
+ }
24
+ if (attempt === 2) {
25
+ return out
26
+ .replace(/[“”]/g, "\"")
27
+ .replace(/[‘’]/g, "'")
28
+ .replace(/([{,]\s*)'([^']+?)'\s*:/g, '$1"$2":')
29
+ .replace(/:\s*'([^']*?)'(\s*[,}])/g, ': "$1"$2');
30
+ }
31
+ return out;
32
+ }
33
+ export function parseToolArguments(raw, parseRetries = 0) {
34
+ const retries = Math.max(0, parseRetries);
35
+ let candidate = String(raw ?? "");
36
+ let lastError = "invalid arguments";
37
+ for (let attempt = 0; attempt <= retries; attempt++) {
38
+ try {
39
+ const parsed = JSON.parse(candidate);
40
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
41
+ lastError = "arguments must be a JSON object";
42
+ }
43
+ else {
44
+ return { ok: true, value: parsed };
45
+ }
46
+ }
47
+ catch (err) {
48
+ lastError = err instanceof Error ? err.message : String(err);
49
+ }
50
+ if (attempt < retries) {
51
+ candidate = repairToolArguments(candidate, attempt);
52
+ }
53
+ }
54
+ return {
55
+ ok: false,
56
+ error: `failed after ${retries + 1} attempt(s): ${lastError}`,
57
+ };
58
+ }
59
+ export function stableStringify(value) {
60
+ const normalize = (input) => {
61
+ if (Array.isArray(input)) {
62
+ return input.map((item) => normalize(item));
63
+ }
64
+ if (input && typeof input === "object") {
65
+ const entries = Object.entries(input).sort(([a], [b]) => a.localeCompare(b));
66
+ const obj = {};
67
+ for (const [k, v] of entries) {
68
+ obj[k] = normalize(v);
69
+ }
70
+ return obj;
71
+ }
72
+ return input;
73
+ };
74
+ try {
75
+ return JSON.stringify(normalize(value));
76
+ }
77
+ catch {
78
+ return "[unstringifiable]";
79
+ }
80
+ }
81
+ export function buildToolSignature(name, args) {
82
+ return `${name}:${stableStringify(args)}`;
83
+ }
84
+ /**
85
+ * Parse raw tool calls, apply argument repair retries, and enforce per-signature
86
+ * repeat limits within the current run.
87
+ */
88
+ export function prepareToolCalls(toolCalls, options = {}) {
89
+ const parseRetries = options.parseRetries ?? 0;
90
+ const toolRepeatLimit = Math.max(1, options.toolRepeatLimit ?? 6);
91
+ const signatureCounts = options.signatureCounts ?? new Map();
92
+ const prepared = [];
93
+ for (const tc of toolCalls) {
94
+ const parseResult = parseToolArguments(tc.function.arguments, parseRetries);
95
+ if (!parseResult.ok) {
96
+ prepared.push({
97
+ call: {
98
+ id: tc.id,
99
+ name: tc.function.name,
100
+ arguments: {},
101
+ },
102
+ immediateResult: {
103
+ tool_call_id: tc.id,
104
+ output: `Error: [TOOL_INVALID_ARGUMENTS] ${parseResult.error}`,
105
+ is_error: true,
106
+ error: {
107
+ code: "TOOL_INVALID_ARGUMENTS",
108
+ message: parseResult.error,
109
+ category: "runtime",
110
+ },
111
+ },
112
+ });
113
+ continue;
114
+ }
115
+ const call = {
116
+ id: tc.id,
117
+ name: tc.function.name,
118
+ arguments: parseResult.value,
119
+ };
120
+ const signature = buildToolSignature(call.name, call.arguments);
121
+ const repeatCount = (signatureCounts.get(signature) ?? 0) + 1;
122
+ signatureCounts.set(signature, repeatCount);
123
+ if (repeatCount > toolRepeatLimit) {
124
+ prepared.push({
125
+ call,
126
+ immediateResult: {
127
+ tool_call_id: tc.id,
128
+ output: `Error: [TOOL_REPEAT_LIMIT_EXCEEDED] ` +
129
+ `tool '${call.name}' exceeded repeat limit (${toolRepeatLimit})`,
130
+ is_error: true,
131
+ error: {
132
+ code: "TOOL_REPEAT_LIMIT_EXCEEDED",
133
+ message: `tool '${call.name}' exceeded repeat limit (${toolRepeatLimit})`,
134
+ category: "guard",
135
+ },
136
+ },
137
+ });
138
+ continue;
139
+ }
140
+ prepared.push({ call });
141
+ }
142
+ return prepared;
143
+ }
144
+ /**
145
+ * Execute a prepared tool batch, appending tool messages onto `context.messages`.
146
+ */
147
+ export async function executePreparedTools(deps, context) {
148
+ let turnToolCalls = 0;
149
+ let turnToolFailures = 0;
150
+ const { preparedCalls, messages, runId, attemptId } = context;
151
+ if (process.env.QLING_FEATURES_WORKFLOW_RUNTIME === "true") {
152
+ await deps.workflowRuntime.setPendingTools(preparedCalls.map((p) => p.call));
153
+ }
154
+ for (const prepared of preparedCalls) {
155
+ const tc = prepared.call;
156
+ turnToolCalls++;
157
+ if (tc.name === "write" || tc.name === "bash") {
158
+ const reflection = await deps.reflectiveThink(tc);
159
+ if (reflection.decision === "block") {
160
+ console.error(`🚨 [内省阻断] ${reflection.reason}`);
161
+ messages.push({
162
+ role: "tool",
163
+ content: JSON.stringify({
164
+ tool_call_id: tc.id,
165
+ output: `Error: [REFLECTION_BLOCKED] ${reflection.reason}. This action was deemed too risky.`,
166
+ is_error: true,
167
+ }),
168
+ tool_call_id: tc.id,
169
+ });
170
+ turnToolFailures++;
171
+ continue;
172
+ }
173
+ else if (reflection.decision === "warn") {
174
+ console.error(`💭 [内省警告] ${reflection.reason}`);
175
+ }
176
+ }
177
+ if (process.env.QLING_FEATURES_TOOL_SPEC_BOOST === "true") {
178
+ const def = deps.tools.find((t) => t.name === tc.name);
179
+ if (def) {
180
+ const check = checkToolConsistency(tc, def);
181
+ if (!check.ok) {
182
+ console.error(`⚠️ [SpecBoost] 检查到幻觉风险: ${tc.name} - ${check.error}`);
183
+ messages.push({
184
+ role: "tool",
185
+ content: JSON.stringify({
186
+ tool_call_id: tc.id,
187
+ output: `Error: [TOOL_SPEC_VIOLATION] ${check.error}. Please correct your arguments based on the schema and examples.`,
188
+ is_error: true,
189
+ }),
190
+ tool_call_id: tc.id,
191
+ });
192
+ turnToolFailures++;
193
+ continue;
194
+ }
195
+ if (check.warnings.length > 0) {
196
+ console.warn(`[SpecBoost] 潜在警告: ${check.warnings.join("; ")}`);
197
+ }
198
+ }
199
+ }
200
+ deps.knowledgeAdapter.onToolCall(tc);
201
+ deps.executionEventBus.startTool({ runId, attemptId, toolCallId: tc.id, tool: tc.name });
202
+ deps.emit("tool_start", tc.name, tc.arguments);
203
+ let result = prepared.immediateResult ?? {
204
+ tool_call_id: tc.id,
205
+ output: "",
206
+ is_error: false,
207
+ };
208
+ if (!prepared.immediateResult) {
209
+ try {
210
+ result = await deps.pipeline.execute(tc, (t) => dispatch(t));
211
+ }
212
+ catch (err) {
213
+ if (err instanceof ApprovalRequiredError && deps.channel) {
214
+ if (process.env.QLING_FEATURES_WORKFLOW_RUNTIME === "true") {
215
+ await deps.workflowRuntime.awaitApproval();
216
+ }
217
+ const approvalResponse = await deps.approvalGate.requestApproval({
218
+ id: err.toolCallId,
219
+ toolName: err.toolName,
220
+ arguments: tc.arguments,
221
+ reason: err.reasons.join("; "),
222
+ timestamp: Date.now(),
223
+ }, deps.channel);
224
+ if (approvalResponse.decision === "allow") {
225
+ result = await dispatch(tc);
226
+ }
227
+ else {
228
+ result = {
229
+ tool_call_id: tc.id,
230
+ output: "[Approval Denied] " + err.reasons.join("; "),
231
+ is_error: true,
232
+ error: {
233
+ code: "APPROVAL_DENIED",
234
+ message: "User denied tool execution",
235
+ category: "permission",
236
+ },
237
+ };
238
+ turnToolFailures++;
239
+ }
240
+ }
241
+ else {
242
+ result = {
243
+ tool_call_id: tc.id,
244
+ output: err.message,
245
+ is_error: true,
246
+ error: {
247
+ code: "TOOL_ERROR",
248
+ message: err.message,
249
+ category: "runtime",
250
+ },
251
+ };
252
+ turnToolFailures++;
253
+ }
254
+ }
255
+ }
256
+ else {
257
+ turnToolFailures++;
258
+ }
259
+ deps.knowledgeAdapter.onToolResult(result, tc.name);
260
+ deps.executionEventBus.completeTool({
261
+ runId,
262
+ attemptId,
263
+ toolCallId: tc.id,
264
+ tool: tc.name,
265
+ failed: result.is_error,
266
+ });
267
+ deps.emit("tool_result", tc.name, result.output, result.is_error ?? false);
268
+ if (!result.is_error && (tc.name === "bash" || tc.name === "write" || tc.name === "read")) {
269
+ let lastUserMsg = "";
270
+ for (let i = messages.length - 1; i >= 0; i--) {
271
+ if (messages[i].role === "user") {
272
+ lastUserMsg = messages[i].content;
273
+ break;
274
+ }
275
+ }
276
+ const taskId = "task_" + Buffer.from(lastUserMsg.slice(0, 10)).toString("hex");
277
+ deps.memoryStore.link({ id: taskId, type: "task", label: lastUserMsg.slice(0, 50) }, "uses", { id: "tool_" + tc.name, type: "tool", label: tc.name });
278
+ const args = tc.arguments;
279
+ const targetFile = args.path || args.file || "";
280
+ if (targetFile) {
281
+ deps.memoryStore.link({ id: "tool_" + tc.name, type: "tool", label: tc.name }, tc.name === "read" ? "reads" : "writes", {
282
+ id: "file_" + Buffer.from(targetFile).toString("hex"),
283
+ type: "file",
284
+ label: targetFile,
285
+ });
286
+ }
287
+ }
288
+ if (!result.is_error &&
289
+ (tc.name === "write" || tc.name === "patch") &&
290
+ !tc.arguments?.dry_run) {
291
+ const args = tc.arguments;
292
+ const targetFile = String(args.path || args.file || "").trim();
293
+ if (targetFile) {
294
+ try {
295
+ const ac = await maybeAutoCommitAfterWrite({
296
+ workspaceDir: deps.workspaceDir || process.cwd(),
297
+ filePath: targetFile,
298
+ toolName: tc.name,
299
+ });
300
+ if (ac.mode !== "off") {
301
+ result = {
302
+ ...result,
303
+ output: `${result.output}\n\n[${ac.message}]`,
304
+ };
305
+ }
306
+ }
307
+ catch {
308
+ // auto-commit 失败不影响工具成功语义
309
+ }
310
+ }
311
+ }
312
+ if (deps.guardConfig.enabled && deps.guardConfig.content_filter?.enabled) {
313
+ const cf = applyContentFilter(result.output, {
314
+ pii: deps.guardConfig.content_filter.pii_detection,
315
+ injection: deps.guardConfig.content_filter.injection_detection,
316
+ custom: deps.guardConfig.content_filter.custom_patterns.length > 0,
317
+ });
318
+ if (cf.blocked) {
319
+ await appendGuardAudit(deps.guardConfig, {
320
+ tool: tc.name,
321
+ action: "deny",
322
+ category: "content_filter",
323
+ reason: cf.reason,
324
+ });
325
+ result = {
326
+ ...result,
327
+ output: `[内容过滤] ${cf.reason}: ${(cf.matches ?? []).join(", ")}`,
328
+ is_error: true,
329
+ error: {
330
+ code: "CONTENT_FILTERED",
331
+ message: cf.reason ?? "content filtered",
332
+ category: "guard",
333
+ },
334
+ };
335
+ turnToolFailures++;
336
+ }
337
+ }
338
+ const preview = result.output.split("\n")[0].slice(0, 80);
339
+ const icon = result.is_error ? "❌" : "✅";
340
+ console.error(icon + " " + tc.name + ": " + preview + (result.output.length > 80 ? "..." : ""));
341
+ if (process.env.QLING_FEATURES_WORKFLOW_RUNTIME === "true") {
342
+ await deps.workflowRuntime.addToolResult(result);
343
+ }
344
+ const rawToolContent = JSON.stringify(result);
345
+ const hygienicContent = prepareToolResultContent(rawToolContent, {
346
+ maxChars: resolveToolResultMaxChars(),
347
+ });
348
+ messages.push({
349
+ role: "tool",
350
+ content: hygienicContent,
351
+ tool_call_id: tc.id,
352
+ });
353
+ }
354
+ return { turnToolCalls, turnToolFailures };
355
+ }
@@ -1,24 +1,26 @@
1
1
  import { MemoryStore } from "./memory.js";
2
+ import type { TokenUsageSource } from "./token-usage.js";
2
3
  import type { Channel } from "./channels/types.js";
3
4
  import type { AgentConfig, Message } from "./types.js";
4
5
  import { WorkflowRuntime } from "./workflow-runtime.js";
5
6
  import { DiscoveryRegistry } from "./discovery-registry.js";
6
7
  import { MissionManager } from "./mission/manager.js";
7
8
  import { type SavedSessionSummary } from "./session/session-registry.js";
9
+ import type { ExecutionEvent, RecoveryState } from "./execution/types.js";
10
+ export declare function resolveMemoryDreamLlmEnabled(env?: NodeJS.ProcessEnv | Record<string, string | undefined>): boolean;
8
11
  export interface LlmSessionPatch {
9
12
  model?: string;
10
13
  provider?: string;
11
14
  endpoint?: string;
12
15
  apiKey?: string;
13
16
  }
14
- type TokenUsageSource = "provider" | "estimate" | "unknown";
15
17
  export declare class AgentEventEmitter {
16
18
  private handlers;
17
19
  on(event: string, handler: Function): () => void;
18
20
  emit(event: string, ...args: unknown[]): void;
19
21
  }
20
22
  export declare class AgentLoop extends AgentEventEmitter {
21
- private client;
23
+ private llmClient;
22
24
  private messages;
23
25
  private config;
24
26
  private turnCount;
@@ -29,7 +31,6 @@ export declare class AgentLoop extends AgentEventEmitter {
29
31
  private pipeline;
30
32
  private sectionRegistry;
31
33
  private memoryStore;
32
- private tokenBudget;
33
34
  private verifier;
34
35
  private compactor;
35
36
  private knowledgeAdapter;
@@ -53,6 +54,10 @@ export declare class AgentLoop extends AgentEventEmitter {
53
54
  private sessionRegistry;
54
55
  private guardConfig;
55
56
  private verificationCommand;
57
+ private readonly executionEventBus;
58
+ private readonly recoveryController;
59
+ private runTraceStore;
60
+ private activeRun;
56
61
  getWorkflowRuntime(): WorkflowRuntime;
57
62
  getMemoryStore(): MemoryStore;
58
63
  getDiscoveryRegistry(): DiscoveryRegistry;
@@ -61,11 +66,23 @@ export declare class AgentLoop extends AgentEventEmitter {
61
66
  getWorkspaceDir(): string;
62
67
  getMessagesSnapshot(): Message[];
63
68
  getVerificationCommand(): string | null;
69
+ getActiveRun(): Readonly<typeof this.activeRun>;
70
+ getRecoveryState(): RecoveryState | null;
71
+ subscribeExecutionEvents(listener: (event: ExecutionEvent) => void): () => void;
72
+ applyRecoveryAction(action: "retry" | "next" | "edit" | "cancel"): {
73
+ state: RecoveryState;
74
+ prompt?: string;
75
+ };
76
+ listRunTraceIds(): Promise<string[]>;
77
+ readRunTrace(runId: string): Promise<ExecutionEvent[]>;
78
+ getRecentRunTrace(sessionId?: string, runId?: string): Promise<ExecutionEvent[]>;
64
79
  setVerificationCommand(cmd: string | null): Promise<void>;
65
80
  getSessionStats(): {
66
81
  sessionId: string;
67
82
  turnCount: number;
68
83
  tokens: number;
84
+ promptTokens: number;
85
+ completionTokens: number;
69
86
  tokenSource: TokenUsageSource;
70
87
  compactions: number;
71
88
  };
@@ -73,6 +90,8 @@ export declare class AgentLoop extends AgentEventEmitter {
73
90
  /** 状态机恢复后的内部同步 */
74
91
  syncWorkflowState(checkpoint: any): void;
75
92
  private sessionTokens;
93
+ private sessionPromptTokens;
94
+ private sessionCompletionTokens;
76
95
  private tokenUsageSource;
77
96
  private initPromise;
78
97
  private compactionCount;
@@ -84,6 +103,9 @@ export declare class AgentLoop extends AgentEventEmitter {
84
103
  private init;
85
104
  addUserMessage(content: string): void;
86
105
  run(): Promise<string>;
106
+ private executeRunInternal;
107
+ private formatRecoveryPause;
108
+ private applyRecoveryStrategy;
87
109
  getModel(): string;
88
110
  getProvider(): string;
89
111
  getEndpoint(): string;
@@ -120,15 +142,14 @@ export declare class AgentLoop extends AgentEventEmitter {
120
142
  listSessionsDetailed(): Promise<SavedSessionSummary[]>;
121
143
  restoreSession(nameOrSessionId: string): Promise<SavedSessionSummary | null>;
122
144
  restoreLatestSession(): Promise<SavedSessionSummary | null>;
123
- private buildSessionSnapshot;
124
- private applySessionSnapshot;
145
+ private captureSessionSnapshot;
146
+ private hydrateSessionSnapshot;
125
147
  /** 自我反思循环 (v0.5 M2) */
126
148
  private reflectiveThink;
127
149
  private buildSystemPrompt;
128
150
  private chat;
129
- private extractChatUsage;
130
- private resolveRoundTokenUsage;
131
- private verifyLastOperation;
151
+ /** Exposed for doctor / status: current staged verification plan. */
152
+ getVerificationStagesSummary(): string;
132
153
  persistVerificationCommand(): Promise<void>;
133
154
  loadVerificationCommand(): Promise<void>;
134
155
  runVerificationCommand(cmd: string): Promise<{
@@ -137,15 +158,7 @@ export declare class AgentLoop extends AgentEventEmitter {
137
158
  stderr: string;
138
159
  }>;
139
160
  private checkAutoDream;
140
- private estimateTokens;
141
- private logTurnTelemetry;
142
- private buildRuntimeMetaSection;
143
161
  private maybeDumpInspect;
144
162
  private resolveLlmRequestTimeout;
145
- private parseToolArguments;
146
- private repairToolArguments;
147
- private buildToolSignature;
148
- private stableStringify;
149
163
  }
150
- export {};
151
164
  //# sourceMappingURL=agent-loop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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"}