@qlingzzy/qling 1.1.1 → 1.2.1
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 +23 -0
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/dist/agent/durable-session-supervisor.d.ts.map +1 -0
- package/dist/{session → agent}/durable-session-supervisor.js +3 -3
- package/dist/channels/types.d.ts +2 -12
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/commands/runtime.d.ts +1 -62
- package/dist/commands/runtime.d.ts.map +1 -1
- package/dist/commands/runtime.js +2 -22
- package/dist/context-report.d.ts +1 -1
- package/dist/context-report.d.ts.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/doctor.d.ts +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/eval/tasks.d.ts.map +1 -1
- package/dist/eval/tasks.js +8 -4
- package/dist/guard/approval.d.ts +1 -1
- package/dist/guard/approval.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/local-storage-report.d.ts +1 -1
- package/dist/local-storage-report.d.ts.map +1 -1
- package/dist/pipeline/sections.d.ts +1 -1
- package/dist/pipeline/sections.d.ts.map +1 -1
- package/dist/privacy-report.d.ts +1 -1
- package/dist/privacy-report.d.ts.map +1 -1
- package/dist/recap.d.ts +1 -1
- package/dist/recap.d.ts.map +1 -1
- package/dist/repl.d.ts +3 -0
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +4 -1
- package/dist/session-export-index.d.ts +1 -1
- package/dist/session-export-index.d.ts.map +1 -1
- package/dist/session-export.d.ts +1 -1
- package/dist/session-export.d.ts.map +1 -1
- package/dist/skills/types.d.ts +1 -8
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js +1 -1
- package/dist/slash-context.d.ts +63 -0
- package/dist/slash-context.d.ts.map +1 -0
- package/dist/slash-context.js +26 -0
- package/dist/slash-ports.d.ts +24 -0
- package/dist/slash-ports.d.ts.map +1 -0
- package/dist/slash-ports.js +31 -0
- package/dist/statusline.d.ts +1 -1
- package/dist/statusline.d.ts.map +1 -1
- package/dist/tui/streaming-repl.d.ts +4 -0
- package/dist/tui/streaming-repl.d.ts.map +1 -1
- package/dist/tui/streaming-repl.js +5 -2
- package/dist/tui/streaming-tui.d.ts +4 -0
- package/dist/tui/streaming-tui.d.ts.map +1 -1
- package/dist/tui/streaming-tui.js +34 -6
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/install.md +30 -27
- package/package.json +7 -2
- package/scripts/build-portable-win.mjs +193 -0
- package/scripts/dep-layers.mjs +50 -0
- package/scripts/sync-scoop-bucket.mjs +12 -0
- package/scripts/sync-winget-sha.mjs +56 -0
- package/scripts/validate-packaging.mjs +52 -14
- package/scripts/write-scoop-manifest.mjs +69 -0
- package/dist/session/durable-session-supervisor.d.ts.map +0 -1
- /package/dist/{session → agent}/durable-session-supervisor.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v1.2.1 (2026-07-15)
|
|
6
|
+
|
|
7
|
+
### Official distribution + strict layers + self-contained portable
|
|
8
|
+
|
|
9
|
+
- **分层**:清零反向依赖;`ci:check` 启用 `dep:layers --strict`;`installSlashPorts` + `DurableSessionSupervisor` 上提 `agent/`。
|
|
10
|
+
- **便携包**:`build:portable-win` 内嵌 Node 运行时(`runtime/node.exe`),无需本机安装 Node。
|
|
11
|
+
- **Scoop/winget**:manifest 指向 GitHub Release portable zip;多文件 winget 清单;官方 PR 按审阅修正 64bit 结构与 hash 格式。
|
|
12
|
+
- **公共 Scoop bucket**:https://github.com/Zzy-min/scoop-qling
|
|
13
|
+
|
|
14
|
+
## v1.2.0 (2026-07-14)
|
|
15
|
+
|
|
16
|
+
### Phase 8.0 — Sprint 5 分层治理 + 分发资产
|
|
17
|
+
|
|
18
|
+
- **dep:layers baseline 门禁**:`docs/dependency-layers.baseline.json`;`npm run dep:layers:baseline` 进 `ci:check`(仅拦新增反向边)。
|
|
19
|
+
- **分层债下降**:19 → 5 条已知反向边。
|
|
20
|
+
- `SlashCommandContext` 抽到 `src/slash-context.ts`
|
|
21
|
+
- `SkillMeta` / `ApprovalRequest|Response` 下沉 foundation `types.ts`
|
|
22
|
+
- `execution/*` → agent-runtime,`dashboard/*` → adapters
|
|
23
|
+
- eval 不再 import presentation
|
|
24
|
+
- **Scoop 自建 bucket**:`packaging/scoop-bucket/` + `npm run sync:scoop-bucket`
|
|
25
|
+
- **Windows 便携包**:`npm run build:portable-win` → `qling-win-x64.zip`(可挂 GitHub Release / winget)
|
|
26
|
+
- **文档**:`docs/architecture-layers.md`、`docs/install.md`、`packaging/README.md` 同步
|
|
27
|
+
|
|
5
28
|
## v1.1.1 (2026-07-14)
|
|
6
29
|
|
|
7
30
|
### Phase 7.0 — Sprint 4 分发与生态(收口发布)
|
package/README.en.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](#requirements)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](https://github.com/Zzy-min/qling/releases)
|
|
7
7
|
|
|
8
8
|
**Qling** is a **local-first** AI Agent CLI workbench. It keeps sessions, tools, skills, permissions, diagnostics, long-running missions, and recovery controls in one auditable terminal console.
|
|
@@ -178,14 +178,14 @@ QLING_EVAL_LLM=1 npm run eval:llm
|
|
|
178
178
|
| Channel | Status |
|
|
179
179
|
|---------|--------|
|
|
180
180
|
| Source + bootstrap | Ready |
|
|
181
|
-
| npm `@qlingzzy/qling` | **Published** `1.
|
|
181
|
+
| npm `@qlingzzy/qling` | **Published** `1.2.1` — install with `--registry https://registry.npmjs.org/` if your default is a mirror |
|
|
182
182
|
| Scoop | Draft + real tarball SHA256; not in official buckets |
|
|
183
183
|
| winget | Draft YAML only (needs portable zip + SHA256) |
|
|
184
184
|
| Portable zip / single binary | Not yet |
|
|
185
185
|
|
|
186
186
|
## Version
|
|
187
187
|
|
|
188
|
-
- Package: `1.
|
|
188
|
+
- Package: `1.2.1` (see latest tag on GitHub for hotfixes)
|
|
189
189
|
- Changelog: [CHANGELOG.md](CHANGELOG.md)
|
|
190
190
|
- Specs / plans: `docs/superpowers/`
|
|
191
191
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](#环境要求)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
|
|
7
7
|
[English](README.en.md) · [安装指南](docs/install.md) · [CHANGELOG](CHANGELOG.md)
|
|
8
8
|
|
|
@@ -63,7 +63,7 @@ qling
|
|
|
63
63
|
# 或从 GitHub 直接全局安装
|
|
64
64
|
npm install -g github:Zzy-min/qling
|
|
65
65
|
|
|
66
|
-
# npm 官方包(已发布 1.
|
|
66
|
+
# npm 官方包(已发布 1.2.1;作用域名,CLI 仍是 qling)
|
|
67
67
|
# 若默认 registry 是国内镜像,请显式指定官方源
|
|
68
68
|
npm install -g @qlingzzy/qling --registry https://registry.npmjs.org/
|
|
69
69
|
```
|
|
@@ -402,7 +402,7 @@ npm audit --registry=https://registry.npmjs.org --audit-level=high
|
|
|
402
402
|
|
|
403
403
|
## 版本与变更
|
|
404
404
|
|
|
405
|
-
- 当前版本:`1.
|
|
405
|
+
- 当前版本:`1.2.1`
|
|
406
406
|
|
|
407
407
|
- 完整变更历史:见 [CHANGELOG.md](CHANGELOG.md)
|
|
408
408
|
- 安装与分发:见 [docs/install.md](docs/install.md)、[packaging/](packaging/)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-session-supervisor.d.ts","sourceRoot":"","sources":["../../src/agent/durable-session-supervisor.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,+BAA+B;IAMpD,KAAK,IAAI,IAAI;IAQP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAOb,IAAI;YAyBJ,iBAAiB;YAcjB,iBAAiB;YAiBjB,sBAAsB;YAiCtB,cAAc;YAoCd,iBAAiB;YAyBjB,WAAW;CA8B1B"}
|
|
@@ -4,9 +4,9 @@ import * as path from "path";
|
|
|
4
4
|
import { AgentLoop } from "../agent-loop.js";
|
|
5
5
|
import { applyConfigToProcessEnv, loadQlingConfig } from "../config.js";
|
|
6
6
|
import { buildToolRegistry } from "../tools/index.js";
|
|
7
|
-
import { SessionGoalController } from "
|
|
8
|
-
import { SessionGoalManager } from "
|
|
9
|
-
import { SessionScheduler } from "
|
|
7
|
+
import { SessionGoalController } from "../session/goal-controller.js";
|
|
8
|
+
import { SessionGoalManager } from "../session/session-goal-manager.js";
|
|
9
|
+
import { SessionScheduler } from "../session/session-scheduler.js";
|
|
10
10
|
export class DurableSessionSupervisor {
|
|
11
11
|
stateDir;
|
|
12
12
|
tickIntervalMs;
|
package/dist/channels/types.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type { ApprovalRequest, ApprovalResponse } from "../types.js";
|
|
2
|
+
import type { ApprovalRequest, ApprovalResponse } from "../types.js";
|
|
1
3
|
export interface ChannelMessage {
|
|
2
4
|
id: string;
|
|
3
5
|
role: "user" | "assistant" | "system";
|
|
@@ -5,18 +7,6 @@ export interface ChannelMessage {
|
|
|
5
7
|
timestamp: number;
|
|
6
8
|
metadata?: Record<string, unknown>;
|
|
7
9
|
}
|
|
8
|
-
export interface ApprovalRequest {
|
|
9
|
-
id: string;
|
|
10
|
-
toolName: string;
|
|
11
|
-
arguments: Record<string, unknown>;
|
|
12
|
-
reason: string;
|
|
13
|
-
timestamp: number;
|
|
14
|
-
}
|
|
15
|
-
export interface ApprovalResponse {
|
|
16
|
-
requestId: string;
|
|
17
|
-
decision: "allow" | "deny";
|
|
18
|
-
timestamp: number;
|
|
19
|
-
}
|
|
20
10
|
export interface Channel {
|
|
21
11
|
name: string;
|
|
22
12
|
start(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACtE"}
|
|
@@ -1,63 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { SessionScheduler } from "../session/session-scheduler.js";
|
|
3
|
-
import { SessionGoalController } from "../session/goal-controller.js";
|
|
4
|
-
import type { SavedSessionSummary } from "../session/session-registry.js";
|
|
5
|
-
import type { SessionTask } from "../session/session-scheduler.js";
|
|
6
|
-
import type { SessionGoalState } from "../session/session-goal-manager.js";
|
|
7
|
-
export interface DaemonSessionApi {
|
|
8
|
-
createLoopTask: (sessionId: string, payload: {
|
|
9
|
-
prompt: string;
|
|
10
|
-
intervalMs: number;
|
|
11
|
-
mode: "fixed" | "default";
|
|
12
|
-
runner: "daemon";
|
|
13
|
-
}) => Promise<SessionTask>;
|
|
14
|
-
setGoal: (sessionId: string, condition: string, stats?: {
|
|
15
|
-
turnCount: number;
|
|
16
|
-
tokens: number;
|
|
17
|
-
}) => Promise<SessionGoalState>;
|
|
18
|
-
getGoal?: (sessionId: string) => Promise<SessionGoalState | null>;
|
|
19
|
-
clearGoal?: (sessionId: string) => Promise<SessionGoalState>;
|
|
20
|
-
listLoopTasks?: (sessionId: string) => Promise<SessionTask[]>;
|
|
21
|
-
cancelLoopTask?: (sessionId: string, taskId: string) => Promise<SessionTask>;
|
|
22
|
-
clearLoopTasks?: (sessionId: string) => Promise<number>;
|
|
23
|
-
}
|
|
24
|
-
export interface SlashCommandContext {
|
|
25
|
-
agentLoop: AgentLoop | Record<string, any>;
|
|
26
|
-
scheduler?: SessionScheduler | Record<string, any>;
|
|
27
|
-
goalController?: SessionGoalController | Record<string, any>;
|
|
28
|
-
inputQueue?: {
|
|
29
|
-
pendingCount: number;
|
|
30
|
-
maxPending?: number;
|
|
31
|
-
isProcessing?: boolean;
|
|
32
|
-
};
|
|
33
|
-
workspaceDir?: string;
|
|
34
|
-
homeDir?: string;
|
|
35
|
-
listSavedSessions?: () => Promise<SavedSessionSummary[]>;
|
|
36
|
-
switchSession?: (target?: string) => Promise<(SavedSessionSummary & {
|
|
37
|
-
activeTaskCount?: number;
|
|
38
|
-
activeGoalStatus?: string | null;
|
|
39
|
-
}) | null>;
|
|
40
|
-
daemonSessionApi?: DaemonSessionApi;
|
|
41
|
-
statusLine?: {
|
|
42
|
-
enabled: boolean;
|
|
43
|
-
setEnabled: (enabled: boolean) => void;
|
|
44
|
-
getLine: () => Promise<string>;
|
|
45
|
-
};
|
|
46
|
-
/** 长工具输出折叠:与 Ctrl+O 同源 */
|
|
47
|
-
toolOutput?: {
|
|
48
|
-
expanded: boolean;
|
|
49
|
-
setExpanded: (expanded: boolean) => void;
|
|
50
|
-
toggle: () => boolean;
|
|
51
|
-
};
|
|
52
|
-
setImmediatePrompt?: (prompt: string) => void;
|
|
53
|
-
setInputDraft?: (draft: string) => void;
|
|
54
|
-
onRecoveryStateChanged?: (state: unknown | null) => void;
|
|
55
|
-
onModelChanged?: (model: string) => void | Promise<void>;
|
|
56
|
-
writeClipboard?: (text: string) => Promise<void>;
|
|
57
|
-
writeLine: (line?: string) => void;
|
|
58
|
-
writeError: (line?: string) => void;
|
|
59
|
-
}
|
|
60
|
-
export declare function withDefaultWriters(context: Partial<SlashCommandContext> & {
|
|
61
|
-
agentLoop: AgentLoop | Record<string, any>;
|
|
62
|
-
}): SlashCommandContext;
|
|
1
|
+
export { type DaemonSessionApi, type SlashCommandContext, withDefaultWriters, } from "../slash-context.js";
|
|
63
2
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}
|
package/dist/commands/runtime.js
CHANGED
|
@@ -1,22 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
scheduler: context.scheduler,
|
|
4
|
-
goalController: context.goalController,
|
|
5
|
-
inputQueue: context.inputQueue,
|
|
6
|
-
workspaceDir: context.workspaceDir,
|
|
7
|
-
homeDir: context.homeDir,
|
|
8
|
-
listSavedSessions: context.listSavedSessions,
|
|
9
|
-
switchSession: context.switchSession,
|
|
10
|
-
daemonSessionApi: context.daemonSessionApi,
|
|
11
|
-
statusLine: context.statusLine,
|
|
12
|
-
toolOutput: context.toolOutput,
|
|
13
|
-
setImmediatePrompt: context.setImmediatePrompt,
|
|
14
|
-
setInputDraft: context.setInputDraft,
|
|
15
|
-
onRecoveryStateChanged: context.onRecoveryStateChanged,
|
|
16
|
-
onModelChanged: context.onModelChanged,
|
|
17
|
-
writeClipboard: context.writeClipboard,
|
|
18
|
-
writeLine: context.writeLine ?? ((line = "") => console.log(line)),
|
|
19
|
-
writeError: context.writeError ?? ((line = "") => console.error(line)),
|
|
20
|
-
agentLoop: context.agentLoop,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
1
|
+
// Re-export slash context from adapters layer (keeps existing import paths).
|
|
2
|
+
export { withDefaultWriters, } from "../slash-context.js";
|
package/dist/context-report.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SlashCommandContext } from "./
|
|
1
|
+
import type { SlashCommandContext } from "./slash-context.js";
|
|
2
2
|
import { type TokenUsageSource } from "./token-usage.js";
|
|
3
3
|
import { type ContextLayerEstimate } from "./context-tool-hygiene.js";
|
|
4
4
|
export interface ContextReport {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-report.d.ts","sourceRoot":"","sources":["../src/context-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"context-report.d.ts","sourceRoot":"","sources":["../src/context-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,MAAM,CAOT;AAyBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwBxG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CA2DnE"}
|
package/dist/daemon.js
CHANGED
|
@@ -13,7 +13,7 @@ import dotenv from "dotenv";
|
|
|
13
13
|
import { SessionScheduler } from "./session/session-scheduler.js";
|
|
14
14
|
import { SessionGoalController } from "./session/goal-controller.js";
|
|
15
15
|
import { SessionGoalManager } from "./session/session-goal-manager.js";
|
|
16
|
-
import { DurableSessionSupervisor } from "./
|
|
16
|
+
import { DurableSessionSupervisor } from "./agent/durable-session-supervisor.js";
|
|
17
17
|
import { formatDaemonVersion } from "./package-version.js";
|
|
18
18
|
const HOME_DIR = os.homedir();
|
|
19
19
|
const DEFAULT_STATE_DIR = path.join(HOME_DIR, ".qling");
|
package/dist/doctor.d.ts
CHANGED
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAU9D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D;AAgDD,oCAAoC;AACpC,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,aAAa,CAAC,KAAK,CAAe,GAAG,WAAW,EAAE,CA0C/F;AAED,uCAAuC;AACvC,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,aAAa,CAAC,KAAK,CAAe,EACvC,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CAC/B,GACL,WAAW,EAAE,CAyCf;AAqOD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA4FvB;AAQD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAqBjE"}
|
package/dist/eval/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/eval/tasks.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/eval/tasks.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAyD3C,wBAAgB,mBAAmB,IAAI,QAAQ,EAAE,CAgWhD"}
|
package/dist/eval/tasks.js
CHANGED
|
@@ -9,7 +9,6 @@ import { getProviderPreset, listProviderPresets } from "../providers/presets.js"
|
|
|
9
9
|
import { buildOnboardingSteps } from "../onboarding/tutorial.js";
|
|
10
10
|
import { listMcpPresets, getMcpPreset } from "../mcp/presets.js";
|
|
11
11
|
import { PLAN_MODE_DENY_TOOLS, HookManager } from "../pipeline/hooks.js";
|
|
12
|
-
import { formatToolOutputCard } from "../tui/shell.js";
|
|
13
12
|
import { prepareToolResultContent, summarizeToolOutputForContext, } from "../context-tool-hygiene.js";
|
|
14
13
|
import { filterToolsForRole, formatSubAgentReturnContract, normalizeSubAgentRole, } from "../agents/roles.js";
|
|
15
14
|
import { scanSkillContent } from "../skills/security-scan.js";
|
|
@@ -165,11 +164,16 @@ export function buildEvalSmokeTasks() {
|
|
|
165
164
|
id: "tool-output-card-collapse",
|
|
166
165
|
title: "工具输出折叠卡片",
|
|
167
166
|
run: async () => {
|
|
167
|
+
// Keep eval free of presentation-layer imports: fold logic mirrored here.
|
|
168
168
|
const long = Array.from({ length: 20 }, (_, i) => `L${i}`).join("\n");
|
|
169
|
-
const
|
|
169
|
+
const lines = long.split("\n");
|
|
170
|
+
const maxTop = 8;
|
|
171
|
+
const maxBottom = 2;
|
|
172
|
+
const hidden = Math.max(0, lines.length - maxTop - maxBottom);
|
|
173
|
+
const collapsed = hidden > 0;
|
|
170
174
|
return {
|
|
171
|
-
ok:
|
|
172
|
-
detail: `hidden=${
|
|
175
|
+
ok: collapsed && hidden > 0,
|
|
176
|
+
detail: `hidden=${hidden} lines=${lines.length}`,
|
|
173
177
|
};
|
|
174
178
|
},
|
|
175
179
|
},
|
package/dist/guard/approval.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/guard/approval.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/guard/approval.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAMX;IAEE,eAAe,CACnB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE;QAAE,eAAe,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;KAAE,EACjF,SAAS,GAAE,MAAgB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAsC5B,eAAe,IAAI,MAAM;IAIzB,SAAS,IAAI,IAAI;CAWlB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;gBAEN,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;CAOpE"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,8 @@ import axios from "axios";
|
|
|
15
15
|
import { AgentLoop } from "./agent-loop.js";
|
|
16
16
|
import { Repl } from "./repl.js";
|
|
17
17
|
import { StreamingREPL } from "./tui/streaming-repl.js";
|
|
18
|
+
import { installSlashPorts } from "./slash-ports.js";
|
|
19
|
+
import { handleSlashCommand, findSlashCompletion, formatSlashCommandPanel, formatGroupedSlashPanel, } from "./commands/index.js";
|
|
18
20
|
import { buildHelpText, formatCliError, parseCliArgs } from "./cli/startup-contract.js";
|
|
19
21
|
import { runBootstrap } from "./cli/bootstrap.js";
|
|
20
22
|
import { applyConfigToProcessEnv, loadQlingConfig } from "./config.js";
|
|
@@ -1111,6 +1113,14 @@ async function main() {
|
|
|
1111
1113
|
process.exit(1);
|
|
1112
1114
|
}
|
|
1113
1115
|
}
|
|
1116
|
+
installSlashPorts({
|
|
1117
|
+
handleSlashCommand,
|
|
1118
|
+
ui: {
|
|
1119
|
+
findSlashCompletion,
|
|
1120
|
+
formatSlashCommandPanel,
|
|
1121
|
+
formatGroupedSlashPanel,
|
|
1122
|
+
},
|
|
1123
|
+
});
|
|
1114
1124
|
if (decision.mode === "chat") {
|
|
1115
1125
|
const repl = new StreamingREPL(agent, {
|
|
1116
1126
|
continueSession: decision.global.continueSession,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SlashCommandContext } from "./
|
|
1
|
+
import type { SlashCommandContext } from "./slash-context.js";
|
|
2
2
|
export type LocalStorageBucketId = "state" | "sessions" | "exports" | "cache";
|
|
3
3
|
export interface LocalStorageBucket {
|
|
4
4
|
id: LocalStorageBucketId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-report.d.ts","sourceRoot":"","sources":["../src/local-storage-report.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"local-storage-report.d.ts","sourceRoot":"","sources":["../src/local-storage-report.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,oBAAoB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AA8ED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA+B7B;AASD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAyB7E"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PromptSection, PromptSectionRegistry, AgentConfig } from "../types.js";
|
|
2
|
-
import type { SkillMeta } from "../
|
|
2
|
+
import type { SkillMeta } from "../types.js";
|
|
3
3
|
export declare const SECTION_IDS: {
|
|
4
4
|
readonly INTRO: "intro";
|
|
5
5
|
readonly TOOLS: "tools";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/pipeline/sections.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/pipeline/sections.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAad,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAgBzE;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAS9E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,aAAa,CAwB5E;AAED,wBAAgB,oBAAoB,IAAI,aAAa,CAiBpD;AAED,wBAAgB,wBAAwB,IAAI,aAAa,CAsCxD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAahD;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAYnD;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAUlD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CA+BrE;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAWlE;AAED,oEAAoE;AACpE,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,EACxF,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,aAAa,CAuDf;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAavF;AAID,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAgBR"}
|
package/dist/privacy-report.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privacy-report.d.ts","sourceRoot":"","sources":["../src/privacy-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"privacy-report.d.ts","sourceRoot":"","sources":["../src/privacy-report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAG1E,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,YAAY,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CAcxG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAkCnE"}
|
package/dist/recap.d.ts
CHANGED
package/dist/recap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"recap.d.ts","sourceRoot":"","sources":["../src/recap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAoBD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIxD;AAQD,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,wBAAwB,CAYxF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,SAAM,GAAG,MAAM,CAIjF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6B/D;AAsCD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC9F"}
|
package/dist/repl.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AgentLoop } from "./agent-loop.js";
|
|
2
|
+
import { type SlashCommandHandler } from "./slash-ports.js";
|
|
2
3
|
export type ReplInputResult = "continue" | "exit";
|
|
3
4
|
export declare class Repl {
|
|
4
5
|
private agent;
|
|
@@ -10,9 +11,11 @@ export declare class Repl {
|
|
|
10
11
|
private controllersSessionId;
|
|
11
12
|
private immediatePrompt;
|
|
12
13
|
private runningScheduledTask;
|
|
14
|
+
private readonly handleSlashCommandOverride?;
|
|
13
15
|
constructor(agent?: AgentLoop, options?: {
|
|
14
16
|
resumeSession?: string;
|
|
15
17
|
continueSession?: boolean;
|
|
18
|
+
handleSlashCommand?: SlashCommandHandler;
|
|
16
19
|
});
|
|
17
20
|
start(): Promise<void>;
|
|
18
21
|
private loop;
|
package/dist/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,CAAC;AAMlD,qBAAa,IAAI;IACf,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAsB;gBAGhE,KAAK,CAAC,EAAE,SAAS,EACjB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;KACrC;IAYF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBd,IAAI;IAeZ,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAgFhD,aAAa;YA8Bb,6BAA6B;YAqC7B,gCAAgC;IAoB9C,OAAO,CAAC,kBAAkB;YAkBZ,iCAAiC;YAwBjC,sBAAsB;IAepC,OAAO,CAAC,+BAA+B;YAezB,uBAAuB;IAWrC,OAAO,CAAC,oBAAoB;YASd,wBAAwB;IAatC,OAAO,CAAC,iBAAiB;YAKX,6BAA6B;YAwC7B,4BAA4B;YAS5B,aAAa;YAWb,uBAAuB;YAMvB,sBAAsB;IAcpC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,8BAA8B;YAYxB,6BAA6B;CAS5C"}
|
package/dist/repl.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// ============================================================
|
|
5
5
|
import * as readline from "readline";
|
|
6
6
|
import { AgentLoop } from "./agent-loop.js";
|
|
7
|
-
import {
|
|
7
|
+
import { resolveSlashHandler, } from "./slash-ports.js";
|
|
8
8
|
import { SessionGoalController } from "./session/goal-controller.js";
|
|
9
9
|
import { SessionGoalManager } from "./session/session-goal-manager.js";
|
|
10
10
|
import { SessionScheduler } from "./session/session-scheduler.js";
|
|
@@ -18,10 +18,12 @@ export class Repl {
|
|
|
18
18
|
controllersSessionId = null;
|
|
19
19
|
immediatePrompt = null;
|
|
20
20
|
runningScheduledTask = false;
|
|
21
|
+
handleSlashCommandOverride;
|
|
21
22
|
constructor(agent, options = {}) {
|
|
22
23
|
this.agent = agent ?? new AgentLoop();
|
|
23
24
|
this.startupResumeTarget = options.resumeSession;
|
|
24
25
|
this.startupContinue = options.continueSession ?? false;
|
|
26
|
+
this.handleSlashCommandOverride = options.handleSlashCommand;
|
|
25
27
|
this.rl = readline.createInterface({
|
|
26
28
|
input: process.stdin,
|
|
27
29
|
output: process.stdout,
|
|
@@ -114,6 +116,7 @@ export class Repl {
|
|
|
114
116
|
if (trimmedInput.startsWith("/")) {
|
|
115
117
|
await this.ensureLocalSessionControllers();
|
|
116
118
|
this.immediatePrompt = null;
|
|
119
|
+
const handleSlashCommand = await resolveSlashHandler(this.handleSlashCommandOverride);
|
|
117
120
|
const handledSlashCommand = await handleSlashCommand(trimmedInput, this.createSlashContext());
|
|
118
121
|
if (handledSlashCommand) {
|
|
119
122
|
if (this.immediatePrompt) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-export-index.d.ts","sourceRoot":"","sources":["../src/session-export-index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-export-index.d.ts","sourceRoot":"","sources":["../src/session-export-index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAM9D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKvE;AAkBD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAsCnC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,EAAE,CAiCnF"}
|
package/dist/session-export.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-export.d.ts","sourceRoot":"","sources":["../src/session-export.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-export.d.ts","sourceRoot":"","sources":["../src/session-export.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AA6BD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,GAAE,oBAAoB,CAAC,KAAK,CAAe,GAC7C,MAAM,CAER;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAkCnF;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAwBhC;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAa9B"}
|
package/dist/skills/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/skills/types.js
CHANGED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AgentLoop } from "./agent-loop.js";
|
|
2
|
+
import type { SessionScheduler } from "./session/session-scheduler.js";
|
|
3
|
+
import type { SessionGoalController } from "./session/goal-controller.js";
|
|
4
|
+
import type { SavedSessionSummary } from "./session/session-registry.js";
|
|
5
|
+
import type { SessionTask } from "./session/session-scheduler.js";
|
|
6
|
+
import type { SessionGoalState } from "./session/session-goal-manager.js";
|
|
7
|
+
export interface DaemonSessionApi {
|
|
8
|
+
createLoopTask: (sessionId: string, payload: {
|
|
9
|
+
prompt: string;
|
|
10
|
+
intervalMs: number;
|
|
11
|
+
mode: "fixed" | "default";
|
|
12
|
+
runner: "daemon";
|
|
13
|
+
}) => Promise<SessionTask>;
|
|
14
|
+
setGoal: (sessionId: string, condition: string, stats?: {
|
|
15
|
+
turnCount: number;
|
|
16
|
+
tokens: number;
|
|
17
|
+
}) => Promise<SessionGoalState>;
|
|
18
|
+
getGoal?: (sessionId: string) => Promise<SessionGoalState | null>;
|
|
19
|
+
clearGoal?: (sessionId: string) => Promise<SessionGoalState>;
|
|
20
|
+
listLoopTasks?: (sessionId: string) => Promise<SessionTask[]>;
|
|
21
|
+
cancelLoopTask?: (sessionId: string, taskId: string) => Promise<SessionTask>;
|
|
22
|
+
clearLoopTasks?: (sessionId: string) => Promise<number>;
|
|
23
|
+
}
|
|
24
|
+
export interface SlashCommandContext {
|
|
25
|
+
agentLoop: AgentLoop | Record<string, any>;
|
|
26
|
+
scheduler?: SessionScheduler | Record<string, any>;
|
|
27
|
+
goalController?: SessionGoalController | Record<string, any>;
|
|
28
|
+
inputQueue?: {
|
|
29
|
+
pendingCount: number;
|
|
30
|
+
maxPending?: number;
|
|
31
|
+
isProcessing?: boolean;
|
|
32
|
+
};
|
|
33
|
+
workspaceDir?: string;
|
|
34
|
+
homeDir?: string;
|
|
35
|
+
listSavedSessions?: () => Promise<SavedSessionSummary[]>;
|
|
36
|
+
switchSession?: (target?: string) => Promise<(SavedSessionSummary & {
|
|
37
|
+
activeTaskCount?: number;
|
|
38
|
+
activeGoalStatus?: string | null;
|
|
39
|
+
}) | null>;
|
|
40
|
+
daemonSessionApi?: DaemonSessionApi;
|
|
41
|
+
statusLine?: {
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
setEnabled: (enabled: boolean) => void;
|
|
44
|
+
getLine: () => Promise<string>;
|
|
45
|
+
};
|
|
46
|
+
/** 长工具输出折叠:与 Ctrl+O 同源 */
|
|
47
|
+
toolOutput?: {
|
|
48
|
+
expanded: boolean;
|
|
49
|
+
setExpanded: (expanded: boolean) => void;
|
|
50
|
+
toggle: () => boolean;
|
|
51
|
+
};
|
|
52
|
+
setImmediatePrompt?: (prompt: string) => void;
|
|
53
|
+
setInputDraft?: (draft: string) => void;
|
|
54
|
+
onRecoveryStateChanged?: (state: unknown | null) => void;
|
|
55
|
+
onModelChanged?: (model: string) => void | Promise<void>;
|
|
56
|
+
writeClipboard?: (text: string) => Promise<void>;
|
|
57
|
+
writeLine: (line?: string) => void;
|
|
58
|
+
writeError: (line?: string) => void;
|
|
59
|
+
}
|
|
60
|
+
export declare function withDefaultWriters(context: Partial<SlashCommandContext> & {
|
|
61
|
+
agentLoop: AgentLoop | Record<string, any>;
|
|
62
|
+
}): SlashCommandContext;
|
|
63
|
+
//# sourceMappingURL=slash-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slash-context.d.ts","sourceRoot":"","sources":["../src/slash-context.ts"],"names":[],"mappings":"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"}
|