@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.
- package/CHANGELOG.md +154 -0
- package/README.en.md +82 -17
- package/README.md +15 -7
- package/dist/agent/main-loop.d.ts +120 -0
- package/dist/agent/main-loop.d.ts.map +1 -0
- package/dist/agent/main-loop.js +279 -0
- package/dist/agent/subtask-parallel.d.ts +29 -0
- package/dist/agent/subtask-parallel.d.ts.map +1 -0
- package/dist/agent/subtask-parallel.js +107 -0
- package/dist/agent/subtask.d.ts +13 -0
- package/dist/agent/subtask.d.ts.map +1 -1
- package/dist/agent/subtask.js +79 -24
- package/dist/agent/system-prompt.d.ts +39 -0
- package/dist/agent/system-prompt.d.ts.map +1 -0
- package/dist/agent/system-prompt.js +89 -0
- package/dist/agent/tool-orchestrator.d.ts +66 -0
- package/dist/agent/tool-orchestrator.d.ts.map +1 -0
- package/dist/agent/tool-orchestrator.js +355 -0
- package/dist/agent-loop.d.ts +29 -16
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +262 -807
- package/dist/agents/roles.d.ts +57 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +198 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +17 -3
- package/dist/commands/claude-style.d.ts.map +1 -1
- package/dist/commands/claude-style.js +19 -10
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +3 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -0
- package/dist/commands/mode.d.ts +16 -0
- package/dist/commands/mode.d.ts.map +1 -0
- package/dist/commands/mode.js +67 -0
- package/dist/commands/recover.d.ts +3 -0
- package/dist/commands/recover.d.ts.map +1 -0
- package/dist/commands/recover.js +69 -0
- package/dist/commands/runtime.d.ts +2 -0
- package/dist/commands/runtime.d.ts.map +1 -1
- package/dist/commands/runtime.js +2 -0
- package/dist/commands/trace.d.ts +3 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +45 -0
- package/dist/commands/verify.js +2 -2
- package/dist/config-report.d.ts +0 -1
- package/dist/config-report.d.ts.map +1 -1
- package/dist/config-report.js +1 -2
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/context-report.d.ts +13 -7
- package/dist/context-report.d.ts.map +1 -1
- package/dist/context-report.js +64 -61
- package/dist/context-tool-hygiene.d.ts +36 -0
- package/dist/context-tool-hygiene.d.ts.map +1 -0
- package/dist/context-tool-hygiene.js +125 -0
- package/dist/dashboard/client.d.ts +2 -0
- package/dist/dashboard/client.d.ts.map +1 -0
- package/dist/dashboard/client.js +305 -0
- package/dist/dashboard/model.d.ts +13 -0
- package/dist/dashboard/model.d.ts.map +1 -0
- package/dist/dashboard/model.js +112 -0
- package/dist/dashboard/page.d.ts +3 -0
- package/dist/dashboard/page.d.ts.map +1 -0
- package/dist/dashboard/page.js +204 -0
- package/dist/dashboard/types.d.ts +63 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +1 -0
- package/dist/dashboard-server.d.ts +24 -4
- package/dist/dashboard-server.d.ts.map +1 -1
- package/dist/dashboard-server.js +397 -302
- package/dist/discovery-registry.d.ts +17 -3
- package/dist/discovery-registry.d.ts.map +1 -1
- package/dist/discovery-registry.js +78 -3
- package/dist/doctor.d.ts +8 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +116 -0
- package/dist/eval/llm-tasks.d.ts +5 -0
- package/dist/eval/llm-tasks.d.ts.map +1 -0
- package/dist/eval/llm-tasks.js +125 -0
- package/dist/eval/repo-tasks.d.ts +12 -0
- package/dist/eval/repo-tasks.d.ts.map +1 -0
- package/dist/eval/repo-tasks.js +220 -0
- package/dist/eval/runner.d.ts +3 -1
- package/dist/eval/runner.d.ts.map +1 -1
- package/dist/eval/runner.js +23 -4
- package/dist/eval/tasks.d.ts.map +1 -1
- package/dist/eval/tasks.js +186 -0
- package/dist/eval/types.d.ts +8 -5
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/execution/event-bus.d.ts +44 -0
- package/dist/execution/event-bus.d.ts.map +1 -0
- package/dist/execution/event-bus.js +76 -0
- package/dist/execution/failure-classifier.d.ts +11 -0
- package/dist/execution/failure-classifier.d.ts.map +1 -0
- package/dist/execution/failure-classifier.js +66 -0
- package/dist/execution/progress-detector.d.ts +3 -0
- package/dist/execution/progress-detector.d.ts.map +1 -0
- package/dist/execution/progress-detector.js +23 -0
- package/dist/execution/recovery-controller.d.ts +24 -0
- package/dist/execution/recovery-controller.d.ts.map +1 -0
- package/dist/execution/recovery-controller.js +114 -0
- package/dist/execution/recovery-messages.d.ts +24 -0
- package/dist/execution/recovery-messages.d.ts.map +1 -0
- package/dist/execution/recovery-messages.js +48 -0
- package/dist/execution/recovery-metrics.d.ts +16 -0
- package/dist/execution/recovery-metrics.d.ts.map +1 -0
- package/dist/execution/recovery-metrics.js +73 -0
- package/dist/execution/recovery-strategy-planner.d.ts +6 -0
- package/dist/execution/recovery-strategy-planner.d.ts.map +1 -0
- package/dist/execution/recovery-strategy-planner.js +24 -0
- package/dist/execution/run-trace-store.d.ts +29 -0
- package/dist/execution/run-trace-store.d.ts.map +1 -0
- package/dist/execution/run-trace-store.js +140 -0
- package/dist/execution/staged-verifier.d.ts +33 -0
- package/dist/execution/staged-verifier.d.ts.map +1 -0
- package/dist/execution/staged-verifier.js +39 -0
- package/dist/execution/types.d.ts +58 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +1 -0
- package/dist/execution/verification-loop.d.ts +58 -0
- package/dist/execution/verification-loop.d.ts.map +1 -0
- package/dist/execution/verification-loop.js +195 -0
- package/dist/execution/verification-stages.d.ts +17 -0
- package/dist/execution/verification-stages.d.ts.map +1 -0
- package/dist/execution/verification-stages.js +102 -0
- package/dist/help-topics.d.ts.map +1 -1
- package/dist/help-topics.js +11 -0
- package/dist/index.js +0 -8
- package/dist/lsp/ts-service.d.ts +36 -0
- package/dist/lsp/ts-service.d.ts.map +1 -0
- package/dist/lsp/ts-service.js +291 -0
- package/dist/memory/lifecycle.d.ts +19 -0
- package/dist/memory/lifecycle.d.ts.map +1 -0
- package/dist/memory/lifecycle.js +53 -0
- package/dist/memory.d.ts +0 -16
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +0 -36
- package/dist/metrics/collector.d.ts +7 -0
- package/dist/metrics/collector.d.ts.map +1 -1
- package/dist/metrics/collector.js +60 -0
- package/dist/mission/manager.d.ts +1 -0
- package/dist/mission/manager.d.ts.map +1 -1
- package/dist/mission/manager.js +9 -0
- package/dist/mission/progress-notify.d.ts +39 -0
- package/dist/mission/progress-notify.d.ts.map +1 -0
- package/dist/mission/progress-notify.js +386 -0
- package/dist/pipeline/hooks.d.ts +1 -1
- package/dist/pipeline/hooks.d.ts.map +1 -1
- package/dist/pipeline/hooks.js +1 -0
- package/dist/pipeline/sections.d.ts +8 -4
- package/dist/pipeline/sections.d.ts.map +1 -1
- package/dist/pipeline/sections.js +70 -27
- package/dist/pipeline/verification.d.ts +1 -0
- package/dist/pipeline/verification.d.ts.map +1 -1
- package/dist/pipeline/verification.js +10 -7
- package/dist/providers/llm-client.d.ts +38 -0
- package/dist/providers/llm-client.d.ts.map +1 -0
- package/dist/providers/llm-client.js +105 -0
- package/dist/sdk.d.ts +1 -0
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +1 -0
- package/dist/session/durable-session-supervisor.d.ts.map +1 -1
- package/dist/session/durable-session-supervisor.js +13 -6
- package/dist/session/session-persistence.d.ts +29 -0
- package/dist/session/session-persistence.d.ts.map +1 -0
- package/dist/session/session-persistence.js +45 -0
- package/dist/session/session-scheduler.d.ts +8 -1
- package/dist/session/session-scheduler.d.ts.map +1 -1
- package/dist/session/session-scheduler.js +33 -4
- package/dist/session-task-report.d.ts +1 -0
- package/dist/session-task-report.d.ts.map +1 -1
- package/dist/session-task-report.js +2 -1
- package/dist/shortcuts.d.ts.map +1 -1
- package/dist/shortcuts.js +1 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +10 -0
- package/dist/skills/security-scan.d.ts +15 -0
- package/dist/skills/security-scan.d.ts.map +1 -0
- package/dist/skills/security-scan.js +95 -0
- package/dist/skills/types.d.ts +2 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/statusline.d.ts +3 -3
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +9 -17
- package/dist/token-usage.d.ts +27 -0
- package/dist/token-usage.d.ts.map +1 -0
- package/dist/token-usage.js +107 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +5 -3
- package/dist/tools/browser-act-session.d.ts +48 -0
- package/dist/tools/browser-act-session.d.ts.map +1 -0
- package/dist/tools/browser-act-session.js +168 -0
- package/dist/tools/browser-act.d.ts +14 -0
- package/dist/tools/browser-act.d.ts.map +1 -0
- package/dist/tools/browser-act.js +297 -0
- package/dist/tools/code-symbols.d.ts +35 -0
- package/dist/tools/code-symbols.d.ts.map +1 -0
- package/dist/tools/code-symbols.js +257 -0
- package/dist/tools/index.d.ts +4 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +22 -2
- package/dist/tools/lsp.d.ts +13 -0
- package/dist/tools/lsp.d.ts.map +1 -0
- package/dist/tools/lsp.js +136 -0
- package/dist/tools/patch.d.ts +5 -0
- package/dist/tools/patch.d.ts.map +1 -1
- package/dist/tools/patch.js +25 -4
- package/dist/tools/search.d.ts +7 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +20 -3
- package/dist/tools/skill.d.ts +2 -0
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +47 -14
- package/dist/tools/subtask.d.ts +3 -1
- package/dist/tools/subtask.d.ts.map +1 -1
- package/dist/tools/subtask.js +151 -56
- package/dist/tui/shell.d.ts +12 -0
- package/dist/tui/shell.d.ts.map +1 -1
- package/dist/tui/shell.js +36 -3
- package/dist/tui/streaming-repl.d.ts +1 -0
- package/dist/tui/streaming-repl.d.ts.map +1 -1
- package/dist/tui/streaming-repl.js +27 -4
- package/dist/tui/streaming-tui.d.ts +10 -0
- package/dist/tui/streaming-tui.d.ts.map +1 -1
- package/dist/tui/streaming-tui.js +70 -12
- package/dist/types.d.ts +0 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow-runtime.d.ts.map +1 -1
- package/dist/workflow-runtime.js +10 -2
- package/dist/workflow-types.d.ts +2 -0
- package/dist/workflow-types.d.ts.map +1 -1
- package/docs/install.md +29 -8
- package/docs/skills.md +56 -7
- package/docs/web-routing.md +83 -0
- package/package.json +18 -4
- package/scripts/dep-layers.mjs +275 -0
- package/scripts/eval-llm.mjs +27 -0
- package/scripts/eval-recovery.mjs +101 -0
- package/scripts/eval-tasks.mjs +20 -0
- package/scripts/validate-packaging.mjs +51 -0
- package/skills/examples/README.md +23 -0
- package/skills/examples/add-function/SKILL.md +31 -0
- package/skills/examples/fix-failing-test/SKILL.md +32 -0
- package/skills/examples/pr-summary/SKILL.md +34 -0
- package/skills/lifecycle-build/SKILL.md +22 -0
- package/skills/lifecycle-plan/SKILL.md +32 -0
- package/skills/lifecycle-review/SKILL.md +25 -0
- package/skills/lifecycle-ship/SKILL.md +22 -0
- package/skills/lifecycle-spec/SKILL.md +24 -0
- package/skills/lifecycle-test/SKILL.md +21 -0
- package/skills/opencli/SKILL.md +222 -0
- package/skills/qling.md +14 -3
|
@@ -18,7 +18,7 @@ import { default as stringWidth } from "string-width";
|
|
|
18
18
|
import { findSlashCompletion, formatSlashCommandPanel, formatGroupedSlashPanel } from "../commands/index.js";
|
|
19
19
|
import { InputBuffer } from "./input-buffer.js";
|
|
20
20
|
import { formatProgressPulse } from "./progress.js";
|
|
21
|
-
import {
|
|
21
|
+
import { formatWelcomeGuide, formatRoleHeader, formatResultHighlight, formatToolOutputCard, formatToolTimelineRow, formatTopBar, padVisible, truncateVisible, } from "./shell.js";
|
|
22
22
|
import { formatMarkdownForTerminal } from "./markdown.js";
|
|
23
23
|
import { getPackageVersion } from "../package-version.js";
|
|
24
24
|
// ── ANSI 颜色工具 ───────────────────────────────────────
|
|
@@ -101,6 +101,7 @@ export class StreamUI {
|
|
|
101
101
|
slashCompletionSelectedIndex = 0;
|
|
102
102
|
inputCursorAnchor = "current";
|
|
103
103
|
inputStartRow = 0;
|
|
104
|
+
recoveryState = null;
|
|
104
105
|
now;
|
|
105
106
|
doubleCtrlCExitWindowMs = 2_000;
|
|
106
107
|
constructor(model = "deepseek-chat", tools = 0, options = {}) {
|
|
@@ -148,6 +149,30 @@ export class StreamUI {
|
|
|
148
149
|
if (next)
|
|
149
150
|
this.model = next;
|
|
150
151
|
}
|
|
152
|
+
setRecoveryState(state) {
|
|
153
|
+
this.recoveryState = state ? { ...state } : null;
|
|
154
|
+
if (state?.status === "paused")
|
|
155
|
+
this.appendRecoveryCard(state);
|
|
156
|
+
}
|
|
157
|
+
setInputDraft(draft) {
|
|
158
|
+
this.input.clear();
|
|
159
|
+
for (const ch of draft)
|
|
160
|
+
ch === "\n" ? this.input.insertNewline() : this.input.insertChar(ch);
|
|
161
|
+
this.draftDisplaySource = draft.includes("\n") ? "typed" : null;
|
|
162
|
+
this.redrawInput();
|
|
163
|
+
}
|
|
164
|
+
appendRecoveryCard(state) {
|
|
165
|
+
this.moveAfterInputFrame();
|
|
166
|
+
const failure = state.lastFailure;
|
|
167
|
+
process.stdout.write("\n" + [
|
|
168
|
+
S.y("执行已暂停"),
|
|
169
|
+
`${DIM("原因")} ${failure?.category ?? "unknown"}: ${failure?.message ?? "-"}`,
|
|
170
|
+
`${DIM("证据")} ${failure?.fingerprint ?? "-"} ${DIM("剩余预算")} ${state.remainingStrategyAttempts}`,
|
|
171
|
+
`${S.p("R")} 重试 ${S.p("S")} 下一策略 ${S.p("E")} 编辑任务 ${S.p("C")} 取消并保存摘要`,
|
|
172
|
+
].join("\n") + "\n");
|
|
173
|
+
this.writeInputValue(true);
|
|
174
|
+
this.syncCursor();
|
|
175
|
+
}
|
|
151
176
|
isExpandLongToolOutput() {
|
|
152
177
|
return this.expandLongToolOutput;
|
|
153
178
|
}
|
|
@@ -210,13 +235,12 @@ export class StreamUI {
|
|
|
210
235
|
process.stdout.write(chunks.join(""));
|
|
211
236
|
}
|
|
212
237
|
// ── 底部输入栏 ────────────────────────────────────
|
|
238
|
+
/**
|
|
239
|
+
* 输入框上方不再堆叠 statusline / 快捷键黑灰提示(去噪)。
|
|
240
|
+
* 详情仍可通过 /statusline、/shortcuts 与顶栏查看。
|
|
241
|
+
*/
|
|
213
242
|
printPromptHint() {
|
|
214
|
-
|
|
215
|
-
if (this.statusLineEnabled && this.statusLine) {
|
|
216
|
-
chunks.push(DIM(this.statusLine) + "\n");
|
|
217
|
-
}
|
|
218
|
-
chunks.push(DIM(formatBottomHints()) + "\n");
|
|
219
|
-
process.stdout.write(chunks.join(""));
|
|
243
|
+
// intentionally empty — keep input chrome minimal
|
|
220
244
|
}
|
|
221
245
|
printInputBar() {
|
|
222
246
|
this.printPromptHint();
|
|
@@ -537,6 +561,11 @@ export class StreamUI {
|
|
|
537
561
|
this.dataHandler = (chunk) => {
|
|
538
562
|
if (!this.running)
|
|
539
563
|
return;
|
|
564
|
+
if (this.recoveryState?.status === "paused" && !this.input.value && /^[rsec]$/i.test(chunk)) {
|
|
565
|
+
const action = { r: "retry", s: "next", e: "edit", c: "cancel" }[chunk.toLowerCase()];
|
|
566
|
+
this.inputCallback?.(`/recover ${action}`);
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
540
569
|
if (chunk === "\x1b") {
|
|
541
570
|
partial = "";
|
|
542
571
|
return;
|
|
@@ -610,6 +639,10 @@ export class StreamUI {
|
|
|
610
639
|
partial = "";
|
|
611
640
|
this.handleTab();
|
|
612
641
|
}
|
|
642
|
+
else if (seq === "\x1b[Z") {
|
|
643
|
+
partial = "";
|
|
644
|
+
this.handleShiftTab();
|
|
645
|
+
}
|
|
613
646
|
else if (seq === "\x03") {
|
|
614
647
|
partial = "";
|
|
615
648
|
this.handleCtrlC();
|
|
@@ -751,6 +784,14 @@ export class StreamUI {
|
|
|
751
784
|
}
|
|
752
785
|
this.appendFeedbackAndRedraw(S.y("Tab agents 仅在空输入时打开;当前草稿已保留,补全未启用"));
|
|
753
786
|
}
|
|
787
|
+
handleShiftTab() {
|
|
788
|
+
this.lastEmptyCtrlCAt = 0;
|
|
789
|
+
this.moveAfterInputFrame();
|
|
790
|
+
process.stdout.write("\n");
|
|
791
|
+
if (this.inputCallback) {
|
|
792
|
+
this.inputCallback("/mode cycle");
|
|
793
|
+
}
|
|
794
|
+
}
|
|
754
795
|
handleCtrlC() {
|
|
755
796
|
if (!this.input.value) {
|
|
756
797
|
const now = this.now();
|
|
@@ -1029,11 +1070,28 @@ export class StreamUI {
|
|
|
1029
1070
|
process.stdout.write("\n " + S.d("retry:") + " " + S.y(String(retryCount)));
|
|
1030
1071
|
}
|
|
1031
1072
|
appendFinal(text) {
|
|
1032
|
-
process.stdout.write("\n" + S.p(formatRoleHeader("assistant")) + "\n");
|
|
1033
1073
|
const width = process.stdout.columns || 100;
|
|
1034
|
-
const
|
|
1035
|
-
|
|
1036
|
-
|
|
1074
|
+
const mdWidth = Math.max(40, width - 4);
|
|
1075
|
+
const mdLines = formatMarkdownForTerminal(text, { width: mdWidth });
|
|
1076
|
+
process.stdout.write("\n" + S.p(BOLD(formatRoleHeader("assistant"))) + " " + S.g(BOLD("结果")) + "\n");
|
|
1077
|
+
const box = formatResultHighlight({
|
|
1078
|
+
header: "结果",
|
|
1079
|
+
lines: mdLines,
|
|
1080
|
+
width,
|
|
1081
|
+
});
|
|
1082
|
+
for (let i = 0; i < box.length; i++) {
|
|
1083
|
+
const line = box[i];
|
|
1084
|
+
// 顶/底与左右边框用强调色;正文保留 Markdown 原色
|
|
1085
|
+
if (i === 0 || i === box.length - 1) {
|
|
1086
|
+
process.stdout.write(S.g(BOLD(line)) + "\n");
|
|
1087
|
+
}
|
|
1088
|
+
else if (line.startsWith("│ ") && line.endsWith(" │")) {
|
|
1089
|
+
const mid = line.slice(2, line.length - 2);
|
|
1090
|
+
process.stdout.write(S.g("│ ") + mid + S.g(" │") + "\n");
|
|
1091
|
+
}
|
|
1092
|
+
else {
|
|
1093
|
+
process.stdout.write(S.g(line) + "\n");
|
|
1094
|
+
}
|
|
1037
1095
|
}
|
|
1038
1096
|
}
|
|
1039
1097
|
appendError(text) {
|
|
@@ -1044,6 +1102,6 @@ export class StreamUI {
|
|
|
1044
1102
|
}
|
|
1045
1103
|
appendDone(durationMs) {
|
|
1046
1104
|
const dur = fmtDur(durationMs);
|
|
1047
|
-
process.stdout.write("\n" + S.g("☑
|
|
1105
|
+
process.stdout.write("\n" + S.g(BOLD("☑ 任务完成")) + " " + S.p(dur) + "\n");
|
|
1048
1106
|
}
|
|
1049
1107
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -37,7 +37,6 @@ export interface AgentConfig {
|
|
|
37
37
|
systemPrompt: string;
|
|
38
38
|
maxIterations: number;
|
|
39
39
|
tools: ToolDefinition[];
|
|
40
|
-
tokenBudget?: TokenBudgetConfig;
|
|
41
40
|
sections?: PromptSectionRegistry;
|
|
42
41
|
runtime?: {
|
|
43
42
|
workspaceDir: string | null;
|
|
@@ -45,7 +44,6 @@ export interface AgentConfig {
|
|
|
45
44
|
fileStateDir: string;
|
|
46
45
|
maxSteps: number;
|
|
47
46
|
parseRetries: number;
|
|
48
|
-
maxTokenBudget: number;
|
|
49
47
|
toolRepeatLimit: number;
|
|
50
48
|
timeoutMs: number;
|
|
51
49
|
};
|
|
@@ -87,12 +85,6 @@ export interface ToolDefinition {
|
|
|
87
85
|
scenes?: string[];
|
|
88
86
|
priority?: number;
|
|
89
87
|
}
|
|
90
|
-
export interface TokenBudgetConfig {
|
|
91
|
-
maxTokens: number;
|
|
92
|
-
nudgeThreshold: number;
|
|
93
|
-
totalBudget: number;
|
|
94
|
-
usedTokens?: number;
|
|
95
|
-
}
|
|
96
88
|
export type HookName = "PreToolUse" | "PostToolUse" | "PostToolUseFailure";
|
|
97
89
|
export type PermissionDecision = "allow" | "deny" | "ask";
|
|
98
90
|
export interface ToolHookContext {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;KACjF,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;IAExB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;KACjF,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;IAExB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE;QACR,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAC3C,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,EAAE,OAAO,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAExC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,aAAa,GACb,oBAAoB,CAAC;AAEzB,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3F,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACpG,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1F,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAI5C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,KAAK,CAAgB;IAE7B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK5B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,MAAM,IAAI,aAAa,EAAE;IAIzB,WAAW,IAAI,MAAM;IAOrB,UAAU,IAAI,IAAI;IAMlB,UAAU,IAAI,IAAI;CAGnB;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-runtime.d.ts","sourceRoot":"","sources":["../src/workflow-runtime.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"workflow-runtime.d.ts","sourceRoot":"","sources":["../src/workflow-runtime.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAmC;gBAEvC,aAAa,EAAE,MAAM;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsBpH;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0BxD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,aAAa,IAAI,kBAAkB,GAAG,IAAI;YAI5B,cAAc;IAM5B,OAAO,CAAC,iBAAiB;CAG1B"}
|
package/dist/workflow-runtime.js
CHANGED
|
@@ -26,6 +26,7 @@ export class WorkflowRuntime {
|
|
|
26
26
|
this.currentCheckpoint = {
|
|
27
27
|
runId,
|
|
28
28
|
workflowId: workflow.id,
|
|
29
|
+
workflowDefinition: workflow,
|
|
29
30
|
sessionId,
|
|
30
31
|
status: "running",
|
|
31
32
|
currentState: workflow.initialState,
|
|
@@ -42,13 +43,20 @@ export class WorkflowRuntime {
|
|
|
42
43
|
* 从 Checkpoint 恢复
|
|
43
44
|
*/
|
|
44
45
|
async resume(runId) {
|
|
46
|
+
if (!/^[A-Za-z0-9_-]+$/.test(runId)) {
|
|
47
|
+
throw new Error(`Invalid workflow runId: ${runId}`);
|
|
48
|
+
}
|
|
45
49
|
const cpPath = this.getCheckpointPath(runId);
|
|
46
50
|
if (!existsSync(cpPath)) {
|
|
47
51
|
throw new Error(`Checkpoint not found for runId: ${runId}`);
|
|
48
52
|
}
|
|
49
53
|
const raw = await fs.readFile(cpPath, "utf-8");
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
const checkpoint = JSON.parse(raw);
|
|
55
|
+
if (!checkpoint.workflowDefinition || checkpoint.workflowDefinition.id !== checkpoint.workflowId) {
|
|
56
|
+
throw new Error(`Checkpoint ${runId} cannot be resumed: workflow definition is missing or inconsistent`);
|
|
57
|
+
}
|
|
58
|
+
this.workflow = checkpoint.workflowDefinition;
|
|
59
|
+
this.currentCheckpoint = checkpoint;
|
|
52
60
|
this.currentCheckpoint.status = "running";
|
|
53
61
|
this.currentCheckpoint.updatedAt = Date.now();
|
|
54
62
|
await this.saveCheckpoint();
|
package/dist/workflow-types.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface WorkflowDefinition {
|
|
|
37
37
|
export interface WorkflowCheckpoint {
|
|
38
38
|
runId: string;
|
|
39
39
|
workflowId: string;
|
|
40
|
+
/** Definition required to restore state transitions after process restart. */
|
|
41
|
+
workflowDefinition?: WorkflowDefinition;
|
|
40
42
|
sessionId: string;
|
|
41
43
|
status: "running" | "paused" | "completed" | "failed" | "awaiting_approval";
|
|
42
44
|
currentState: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../src/workflow-types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAChD,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,WAAW,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,iBAAiB;IACjB,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,mBAAmB,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,yBAAyB;IACzB,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,wBAAwB;IACxB,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,yBAAyB;IACzB,oBAAoB,EAAE,UAAU,EAAE,CAAC;IACnC,gBAAgB;IAChB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAWpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAQpC,KAAK,IAAI,kBAAkB;CAG5B"}
|
|
1
|
+
{"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../src/workflow-types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC;IAChD,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,WAAW,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,iBAAiB;IACjB,WAAW,CAAC,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,mBAAmB,CAAC;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,yBAAyB;IACzB,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,wBAAwB;IACxB,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,yBAAyB;IACzB,oBAAoB,EAAE,UAAU,EAAE,CAAC;IACnC,gBAAgB;IAChB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAWpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKlC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAQpC,KAAK,IAAI,kBAAkB;CAG5B"}
|
package/docs/install.md
CHANGED
|
@@ -75,28 +75,49 @@ qling
|
|
|
75
75
|
|
|
76
76
|
## 方式 D:Scoop 草案(未上架)
|
|
77
77
|
|
|
78
|
-
清单草稿:`packaging/scoop/qling.json
|
|
78
|
+
清单草稿:`packaging/scoop/qling.json`(版本与 `package.json` 对齐,当前 **1.1.0**)。
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
本地校验(不安装到官方 bucket):
|
|
81
81
|
|
|
82
82
|
```powershell
|
|
83
|
-
|
|
83
|
+
npm run validate:packaging
|
|
84
|
+
# 检查 version / url 是否钉死到当前版本
|
|
85
|
+
Get-Content packaging/scoop/qling.json | ConvertFrom-Json | Select-Object version, url, hash
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
本地试用(需自建 bucket,并先把 `hash` 换成真实 tarball SHA256):
|
|
89
|
+
|
|
90
|
+
```powershell
|
|
91
|
+
# 示例:私有 bucket 放好 manifest 后
|
|
84
92
|
scoop install qling
|
|
85
93
|
```
|
|
86
94
|
|
|
87
|
-
|
|
95
|
+
当前草案 URL 指向 npm tarball;`hash` 仍为占位。正式上架前请:
|
|
96
|
+
|
|
97
|
+
1. `npm pack` 或发布后下载 tarball
|
|
98
|
+
2. 计算 SHA256 写入 `hash`
|
|
99
|
+
3. 提交到自建/社区 Scoop bucket
|
|
100
|
+
|
|
101
|
+
在 hash 未填前,**推荐**继续用 `npm install -g @qlingzzy/qling` 或源码 bootstrap。
|
|
88
102
|
|
|
89
103
|
## 方式 E:winget 草案(未上架)
|
|
90
104
|
|
|
91
|
-
清单草稿:`packaging/winget/Zzy-min.qling.yaml
|
|
105
|
+
清单草稿:`packaging/winget/Zzy-min.qling.yaml`(`PackageVersion` 与当前版本对齐)。
|
|
106
|
+
|
|
107
|
+
本地校验:
|
|
108
|
+
|
|
109
|
+
```powershell
|
|
110
|
+
npm run validate:packaging
|
|
111
|
+
Select-String -Path packaging/winget/Zzy-min.qling.yaml -Pattern 'PackageVersion|InstallerUrl|InstallerSha256'
|
|
112
|
+
```
|
|
92
113
|
|
|
93
114
|
正式提交需:
|
|
94
115
|
|
|
95
|
-
1. 稳定版本的安装包 URL(msi/zip 或 portable)
|
|
96
|
-
2.
|
|
116
|
+
1. 稳定版本的安装包 URL(msi/zip 或 portable;当前示例为 GitHub Release zip)
|
|
117
|
+
2. 真实 `InstallerSha256`(草案里为全零占位)
|
|
97
118
|
3. 通过 [winget-pkgs](https://github.com/microsoft/winget-pkgs) 审核
|
|
98
119
|
|
|
99
|
-
当前文件仅为**结构样例**,不可直接 `winget install
|
|
120
|
+
当前文件仅为**结构样例**,不可直接 `winget install`。发布 zip 前可先用 npm 全局安装路径。
|
|
100
121
|
|
|
101
122
|
## 配置与安全
|
|
102
123
|
|
package/docs/skills.md
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
# Skills 约定
|
|
2
2
|
|
|
3
|
-
轻灵通过 Markdown skill
|
|
3
|
+
轻灵通过 Markdown skill 扩展领域知识。扫描路径(去重,优先靠前):
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
1. **包内** `skills/`(随 `@qlingzzy/qling` 安装,全局可用)
|
|
6
|
+
2. 本机 `~/.qling/skills/`
|
|
7
|
+
3. 当前工作区 `skills/`
|
|
8
|
+
4. 项目 `.qling/skills/`(若存在)
|
|
9
|
+
5. 可选 `HERMES_HOME/skills`
|
|
10
|
+
|
|
11
|
+
内置:`opencli`(平台数据必读)、`qling`、**lifecycle-*** 生命周期六件套,以及 `skills/examples/` 示例包:
|
|
12
|
+
|
|
13
|
+
| 示例 skill | 用途 |
|
|
14
|
+
|------------|------|
|
|
15
|
+
| `repo-triage` | 陌生仓库快速摸底 |
|
|
16
|
+
| `fix-failing-test` | 修失败单测 |
|
|
17
|
+
| `add-function` | 增量加导出函数 |
|
|
18
|
+
| `pr-summary` | 写 PR / 发布摘要 |
|
|
19
|
+
|
|
20
|
+
详见 `skills/examples/README.md`。
|
|
21
|
+
|
|
22
|
+
## 渐进加载(Progressive Skills)
|
|
23
|
+
|
|
24
|
+
| 层级 | 内容 |
|
|
25
|
+
|------|------|
|
|
26
|
+
| System 索引 | 仅 `name` / `description` / `tags` / `triggers`(短描述) |
|
|
27
|
+
| 按需正文 | `skill name="..."` 或 `/skill <name>` 加载 Markdown body |
|
|
28
|
+
|
|
29
|
+
**原则**:用到什么知识,临时加载什么知识,不把全部 skill 正文塞进 system prompt。
|
|
8
30
|
|
|
9
31
|
## 文件约定
|
|
10
32
|
|
|
@@ -21,9 +43,33 @@
|
|
|
21
43
|
name: my-skill
|
|
22
44
|
description: 何时使用该 skill(给模型做路由)
|
|
23
45
|
tags: [optional, tags]
|
|
46
|
+
triggers: [关键词1, 场景2]
|
|
24
47
|
---
|
|
25
48
|
```
|
|
26
49
|
|
|
50
|
+
## 安全扫描
|
|
51
|
+
|
|
52
|
+
加载 skill 前默认静态扫描(`QLING_SKILL_SCAN`):
|
|
53
|
+
|
|
54
|
+
| 值 | 行为 |
|
|
55
|
+
|----|------|
|
|
56
|
+
| `on`(默认) | critical/high 命中则 **拒绝加载** |
|
|
57
|
+
| `warn` | 仅警告仍加载 |
|
|
58
|
+
| `off` | 关闭(仅调试) |
|
|
59
|
+
|
|
60
|
+
规则覆盖:私钥 PEM、典型密钥形态、`curl|bash` / `irm|iex`、可疑 base64 执行等。
|
|
61
|
+
|
|
62
|
+
## 生命周期 skills
|
|
63
|
+
|
|
64
|
+
| name | 用途 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| `lifecycle-spec` | 规格 / 验收 |
|
|
67
|
+
| `lifecycle-plan` | 任务拆分 |
|
|
68
|
+
| `lifecycle-build` | 增量实现 |
|
|
69
|
+
| `lifecycle-test` | 测试证明 |
|
|
70
|
+
| `lifecycle-review` | 合并前审查 |
|
|
71
|
+
| `lifecycle-ship` | 发布清单 |
|
|
72
|
+
|
|
27
73
|
## 模板与示例
|
|
28
74
|
|
|
29
75
|
- 模板:`skills/templates/SKILL.md`
|
|
@@ -42,10 +88,13 @@ cp skills/templates/SKILL.md skills/my-skill/SKILL.md
|
|
|
42
88
|
```text
|
|
43
89
|
/skill list
|
|
44
90
|
/skill my-skill
|
|
91
|
+
/skill lifecycle-plan
|
|
45
92
|
```
|
|
46
93
|
|
|
47
94
|
## 设计原则
|
|
48
95
|
|
|
49
|
-
1. **短而可执行** — 步骤可直接变成工具调用
|
|
50
|
-
2. **诚实边界** — 写清不要做什么
|
|
51
|
-
3. **本地优先** — 不要求外网上传
|
|
96
|
+
1. **短而可执行** — 步骤可直接变成工具调用
|
|
97
|
+
2. **诚实边界** — 写清不要做什么
|
|
98
|
+
3. **本地优先** — 不要求外网上传
|
|
99
|
+
4. **渐进加载** — 索引进 prompt,正文 on-demand
|
|
100
|
+
5. **默认可扫描** — 第三方 skill 先过安全规则
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# 网页 / 平台数据路由(Phase 3.3)
|
|
2
|
+
|
|
3
|
+
轻灵有多条「上网」路径。**先选对通道,再调用**,避免反爬挑战页被当成成功数据。
|
|
4
|
+
|
|
5
|
+
## 决策树
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
需要外部数据?
|
|
9
|
+
├─ 社交/内容平台(抖音、小红书、微博、B站、TikTok、X…)
|
|
10
|
+
│ → skill name="opencli"
|
|
11
|
+
│ → bash: opencli <site> … -f json
|
|
12
|
+
│ → 禁止 url_fetch / browser_* 当主路径
|
|
13
|
+
│
|
|
14
|
+
├─ 普通 HTTPS API / 静态页
|
|
15
|
+
│ → url_fetch(Guard 白名单 / 私网拦截)
|
|
16
|
+
│
|
|
17
|
+
├─ 文档站 / 弱反爬、需 JS 渲染摘要
|
|
18
|
+
│ → browser_fetch(Playwright 只读抓取)
|
|
19
|
+
│
|
|
20
|
+
├─ 需要点击/填表等交互(实验)
|
|
21
|
+
│ → 优先 opencli browser <session> …
|
|
22
|
+
│ → 或启用 browser_act(QLING_BROWSER_ACT=1,默认关)
|
|
23
|
+
│
|
|
24
|
+
└─ 不确定
|
|
25
|
+
→ opencli list / doctor;不要盲目重试 url_fetch
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 工具对照
|
|
29
|
+
|
|
30
|
+
| 工具 | 默认 | 能力 | 典型场景 |
|
|
31
|
+
|------|------|------|----------|
|
|
32
|
+
| **opencli**(via bash) | 本机已装则可用 | 站点适配器、登录会话、结构化 JSON | 抖/红/微/B/推 |
|
|
33
|
+
| **url_fetch** | 开 | HTTP + Guard | 公开 API、静态资源 |
|
|
34
|
+
| **browser_fetch** | 开 | 无头浏览、正文摘要 | 文档站 SPA |
|
|
35
|
+
| **browser_act** | **关** | goto/click/type/extract | 显式启用后的弱交互 |
|
|
36
|
+
|
|
37
|
+
## browser_act 启用与跨步会话
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
# Windows PowerShell
|
|
41
|
+
$env:QLING_BROWSER_ACT = "1"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**推荐流程(同 session 保活页面)**:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
browser_act action=open session=demo url="https://example.com"
|
|
48
|
+
browser_act action=click session=demo selector="a.docs"
|
|
49
|
+
browser_act action=extract session=demo
|
|
50
|
+
browser_act action=close session=demo
|
|
51
|
+
browser_act action=status
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
- `session` 默认 `default`;进程内保活,跨多次 tool 调用
|
|
55
|
+
- 空闲超时默认 10 分钟:`QLING_BROWSER_ACT_IDLE_TTL_MS`
|
|
56
|
+
- 最大会话数默认 3:`QLING_BROWSER_ACT_MAX_SESSIONS`
|
|
57
|
+
- 与 `url_fetch` **共用网络 Guard**;**Plan Mode 禁止**
|
|
58
|
+
- 强反爬平台仍应 **opencli**,不要靠 browser_act 硬抠
|
|
59
|
+
|
|
60
|
+
## 失败诚实
|
|
61
|
+
|
|
62
|
+
| 现象 | 含义 | 动作 |
|
|
63
|
+
|------|------|------|
|
|
64
|
+
| HTML 含 `_$jsvmprt` / `acrawler` | 反爬挑战页 | 换 opencli 站点命令 + 登录 |
|
|
65
|
+
| `BROWSER_ACT_DISABLED` | 未开启交互 | 开 env 或改 opencli browser |
|
|
66
|
+
| Guard deny | 策略拦截 | 检查网络模式 / 白名单 |
|
|
67
|
+
|
|
68
|
+
## 使命通道通知(Phase 3.5)
|
|
69
|
+
|
|
70
|
+
| 变量 | 默认 | 说明 |
|
|
71
|
+
|------|------|------|
|
|
72
|
+
| `QLING_MISSION_NOTIFY` | on | 总开关 |
|
|
73
|
+
| `QLING_MISSION_NOTIFY_STYLE` | rich | rich=TG HTML / Slack Blocks;plain=纯文本 |
|
|
74
|
+
| `QLING_MISSION_NOTIFY_LOGS` | milestone | off / milestone / all — 日志推送粒度 |
|
|
75
|
+
| `QLING_CHANNEL_TELEGRAM_TOKEN` + chat ids | — | Telegram |
|
|
76
|
+
| `QLING_CHANNEL_SLACK_BOT_TOKEN` + channel ids | — | Slack |
|
|
77
|
+
|
|
78
|
+
`qling doctor` 会摘要 browser_act / parallel / notify 开关。
|
|
79
|
+
|
|
80
|
+
## 相关
|
|
81
|
+
|
|
82
|
+
- Skill:`skills/opencli/SKILL.md`
|
|
83
|
+
- 沙箱/网络:`docs/docker.md`、环境变量 `QLING_GUARD_*`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qlingzzy/qling",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "轻灵 Qling - 本地优先的中文 AI Agent CLI 工作台 / Local-first Chinese AI Agent CLI workbench",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/sdk.js",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"docs/sdk.md",
|
|
33
33
|
"docs/skills.md",
|
|
34
34
|
"docs/install.md",
|
|
35
|
-
"docs/docker.md"
|
|
35
|
+
"docs/docker.md",
|
|
36
|
+
"docs/web-routing.md"
|
|
36
37
|
],
|
|
37
38
|
"engines": {
|
|
38
39
|
"node": ">=18"
|
|
@@ -77,12 +78,17 @@
|
|
|
77
78
|
"bootstrap": "node scripts/bootstrap.mjs",
|
|
78
79
|
"daemon": "node dist/daemon.js",
|
|
79
80
|
"prepare": "npm run build",
|
|
80
|
-
"prepack": "npm run build",
|
|
81
81
|
"dev": "tsc --watch",
|
|
82
82
|
"test": "npm run build && node --experimental-test-module-mocks --test \"tests/unit/**/*.test.mjs\"",
|
|
83
83
|
"test:smoke": "npm run build && node --test \"tests/smoke/**/*.test.mjs\"",
|
|
84
84
|
"eval:smoke": "npm run build && node scripts/eval-smoke.mjs",
|
|
85
|
-
"
|
|
85
|
+
"eval:recovery": "npm run build && node scripts/eval-recovery.mjs",
|
|
86
|
+
"eval:tasks": "npm run build && node scripts/eval-tasks.mjs",
|
|
87
|
+
"eval:llm": "npm run build && node scripts/eval-llm.mjs",
|
|
88
|
+
"validate:packaging": "node scripts/validate-packaging.mjs",
|
|
89
|
+
"dep:layers": "node scripts/dep-layers.mjs",
|
|
90
|
+
"dep:layers:json": "node scripts/dep-layers.mjs --json",
|
|
91
|
+
"ci:check": "npm run build && node --experimental-test-module-mocks --test \"tests/unit/**/*.test.mjs\" && node --test \"tests/smoke/**/*.test.mjs\" && node scripts/eval-smoke.mjs && node scripts/eval-tasks.mjs && node scripts/validate-packaging.mjs"
|
|
86
92
|
},
|
|
87
93
|
"dependencies": {
|
|
88
94
|
"axios": "^1.7.0",
|
|
@@ -93,6 +99,14 @@
|
|
|
93
99
|
"yaml": "^2.8.1",
|
|
94
100
|
"zod": "^3.23.0"
|
|
95
101
|
},
|
|
102
|
+
"peerDependencies": {
|
|
103
|
+
"typescript": ">=5.0.0"
|
|
104
|
+
},
|
|
105
|
+
"peerDependenciesMeta": {
|
|
106
|
+
"typescript": {
|
|
107
|
+
"optional": true
|
|
108
|
+
}
|
|
109
|
+
},
|
|
96
110
|
"devDependencies": {
|
|
97
111
|
"@types/better-sqlite3": "^7.6.13",
|
|
98
112
|
"@types/node": "^22.19.17",
|