@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.
Files changed (64) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.en.md +3 -3
  3. package/README.md +3 -3
  4. package/dist/agent/durable-session-supervisor.d.ts.map +1 -0
  5. package/dist/{session → agent}/durable-session-supervisor.js +3 -3
  6. package/dist/channels/types.d.ts +2 -12
  7. package/dist/channels/types.d.ts.map +1 -1
  8. package/dist/commands/runtime.d.ts +1 -62
  9. package/dist/commands/runtime.d.ts.map +1 -1
  10. package/dist/commands/runtime.js +2 -22
  11. package/dist/context-report.d.ts +1 -1
  12. package/dist/context-report.d.ts.map +1 -1
  13. package/dist/daemon.js +1 -1
  14. package/dist/doctor.d.ts +1 -1
  15. package/dist/doctor.d.ts.map +1 -1
  16. package/dist/eval/tasks.d.ts.map +1 -1
  17. package/dist/eval/tasks.js +8 -4
  18. package/dist/guard/approval.d.ts +1 -1
  19. package/dist/guard/approval.d.ts.map +1 -1
  20. package/dist/index.js +10 -0
  21. package/dist/local-storage-report.d.ts +1 -1
  22. package/dist/local-storage-report.d.ts.map +1 -1
  23. package/dist/pipeline/sections.d.ts +1 -1
  24. package/dist/pipeline/sections.d.ts.map +1 -1
  25. package/dist/privacy-report.d.ts +1 -1
  26. package/dist/privacy-report.d.ts.map +1 -1
  27. package/dist/recap.d.ts +1 -1
  28. package/dist/recap.d.ts.map +1 -1
  29. package/dist/repl.d.ts +3 -0
  30. package/dist/repl.d.ts.map +1 -1
  31. package/dist/repl.js +4 -1
  32. package/dist/session-export-index.d.ts +1 -1
  33. package/dist/session-export-index.d.ts.map +1 -1
  34. package/dist/session-export.d.ts +1 -1
  35. package/dist/session-export.d.ts.map +1 -1
  36. package/dist/skills/types.d.ts +1 -8
  37. package/dist/skills/types.d.ts.map +1 -1
  38. package/dist/skills/types.js +1 -1
  39. package/dist/slash-context.d.ts +63 -0
  40. package/dist/slash-context.d.ts.map +1 -0
  41. package/dist/slash-context.js +26 -0
  42. package/dist/slash-ports.d.ts +24 -0
  43. package/dist/slash-ports.d.ts.map +1 -0
  44. package/dist/slash-ports.js +31 -0
  45. package/dist/statusline.d.ts +1 -1
  46. package/dist/statusline.d.ts.map +1 -1
  47. package/dist/tui/streaming-repl.d.ts +4 -0
  48. package/dist/tui/streaming-repl.d.ts.map +1 -1
  49. package/dist/tui/streaming-repl.js +5 -2
  50. package/dist/tui/streaming-tui.d.ts +4 -0
  51. package/dist/tui/streaming-tui.d.ts.map +1 -1
  52. package/dist/tui/streaming-tui.js +34 -6
  53. package/dist/types.d.ts +20 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/docs/install.md +30 -27
  56. package/package.json +7 -2
  57. package/scripts/build-portable-win.mjs +193 -0
  58. package/scripts/dep-layers.mjs +50 -0
  59. package/scripts/sync-scoop-bucket.mjs +12 -0
  60. package/scripts/sync-winget-sha.mjs +56 -0
  61. package/scripts/validate-packaging.mjs +52 -14
  62. package/scripts/write-scoop-manifest.mjs +69 -0
  63. package/dist/session/durable-session-supervisor.d.ts.map +0 -1
  64. /package/dist/{session → agent}/durable-session-supervisor.d.ts +0 -0
@@ -0,0 +1,26 @@
1
+ // ============================================================
2
+ // Slash / adapter shared context (adapters layer)
3
+ // Kept out of cli/ so reports & TUI can import without reverse deps.
4
+ // ============================================================
5
+ export function withDefaultWriters(context) {
6
+ return {
7
+ scheduler: context.scheduler,
8
+ goalController: context.goalController,
9
+ inputQueue: context.inputQueue,
10
+ workspaceDir: context.workspaceDir,
11
+ homeDir: context.homeDir,
12
+ listSavedSessions: context.listSavedSessions,
13
+ switchSession: context.switchSession,
14
+ daemonSessionApi: context.daemonSessionApi,
15
+ statusLine: context.statusLine,
16
+ toolOutput: context.toolOutput,
17
+ setImmediatePrompt: context.setImmediatePrompt,
18
+ setInputDraft: context.setInputDraft,
19
+ onRecoveryStateChanged: context.onRecoveryStateChanged,
20
+ onModelChanged: context.onModelChanged,
21
+ writeClipboard: context.writeClipboard,
22
+ writeLine: context.writeLine ?? ((line = "") => console.log(line)),
23
+ writeError: context.writeError ?? ((line = "") => console.error(line)),
24
+ agentLoop: context.agentLoop,
25
+ };
26
+ }
@@ -0,0 +1,24 @@
1
+ import type { SlashCommandContext } from "./slash-context.js";
2
+ export type SlashCommandHandler = (input: string, context: SlashCommandContext | Record<string, any>) => Promise<boolean>;
3
+ export interface SlashCatalogItem {
4
+ name: string;
5
+ description?: string;
6
+ aliases?: string[];
7
+ }
8
+ export type FindSlashCompletion = (prefix: string, limit?: number) => SlashCatalogItem[];
9
+ export type FormatSlashPanel = (prefix: string, selectedIndex?: number, width?: number, limit?: number) => string[];
10
+ export type FormatGroupedSlashPanel = (width?: number) => string[];
11
+ export interface SlashUiPorts {
12
+ findSlashCompletion: FindSlashCompletion;
13
+ formatSlashCommandPanel: FormatSlashPanel;
14
+ formatGroupedSlashPanel: FormatGroupedSlashPanel;
15
+ }
16
+ export interface SlashRuntimePorts {
17
+ handleSlashCommand: SlashCommandHandler;
18
+ ui?: SlashUiPorts;
19
+ }
20
+ export declare function installSlashPorts(ports: SlashRuntimePorts): void;
21
+ export declare function getInstalledSlashPorts(): SlashRuntimePorts | null;
22
+ export declare function resolveSlashHandler(override?: SlashCommandHandler): Promise<SlashCommandHandler>;
23
+ export declare function resolveSlashUiPorts(override?: SlashUiPorts): Promise<SlashUiPorts>;
24
+ //# sourceMappingURL=slash-ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash-ports.d.ts","sourceRoot":"","sources":["../src/slash-ports.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;AACzF,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AACpH,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uBAAuB,EAAE,gBAAgB,CAAC;IAC1C,uBAAuB,EAAE,uBAAuB,CAAC;CAClD;AAED,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,EAAE,CAAC,EAAE,YAAY,CAAC;CACnB;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEhE;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,GAAG,IAAI,CAEjE;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CASxF"}
@@ -0,0 +1,31 @@
1
+ // ============================================================
2
+ // Slash ports — agent-runtime / presentation 依赖的抽象,避免直接 import cli/commands
3
+ // ============================================================
4
+ /** 由 cli 入口注入;未注入时 runtime 使用动态 import 回退(不形成静态分层边) */
5
+ let installedPorts = null;
6
+ export function installSlashPorts(ports) {
7
+ installedPorts = ports;
8
+ }
9
+ export function getInstalledSlashPorts() {
10
+ return installedPorts;
11
+ }
12
+ export async function resolveSlashHandler(override) {
13
+ if (override)
14
+ return override;
15
+ if (installedPorts?.handleSlashCommand)
16
+ return installedPorts.handleSlashCommand;
17
+ const mod = await import("./commands/index.js");
18
+ return mod.handleSlashCommand;
19
+ }
20
+ export async function resolveSlashUiPorts(override) {
21
+ if (override)
22
+ return override;
23
+ if (installedPorts?.ui)
24
+ return installedPorts.ui;
25
+ const mod = await import("./commands/index.js");
26
+ return {
27
+ findSlashCompletion: mod.findSlashCompletion,
28
+ formatSlashCommandPanel: mod.formatSlashCommandPanel,
29
+ formatGroupedSlashPanel: mod.formatGroupedSlashPanel,
30
+ };
31
+ }
@@ -1,4 +1,4 @@
1
- import type { SlashCommandContext } from "./commands/runtime.js";
1
+ import type { SlashCommandContext } from "./slash-context.js";
2
2
  export interface StatusLineSnapshot {
3
3
  model: string;
4
4
  sessionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA4BD,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAa5E;AAiBD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEpE;AAqBD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CA4BrE;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,8BAA8B,GAAG,kBAAkB,CAe1G;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmDzG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnF"}
1
+ {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA4BD,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAa5E;AAiBD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEpE;AAqBD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CA4BrE;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,8BAA8B,GAAG,kBAAkB,CAe1G;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmDzG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnF"}
@@ -1,4 +1,5 @@
1
1
  import { AgentLoop } from "../agent-loop.js";
2
+ import { type SlashCommandHandler, type SlashUiPorts } from "../slash-ports.js";
2
3
  export declare class StreamingREPL {
3
4
  private ui;
4
5
  private agent;
@@ -13,9 +14,12 @@ export declare class StreamingREPL {
13
14
  private closed;
14
15
  private onClose;
15
16
  private lastExecutionStatus;
17
+ private readonly handleSlashCommandOverride?;
16
18
  constructor(agent?: AgentLoop, options?: {
17
19
  resumeSession?: string;
18
20
  continueSession?: boolean;
21
+ handleSlashCommand?: SlashCommandHandler;
22
+ slashUi?: SlashUiPorts;
19
23
  });
20
24
  start(): Promise<void>;
21
25
  stop(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"streaming-repl.d.ts","sourceRoot":"","sources":["../../src/tui/streaming-repl.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAa7C,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,mBAAmB,CAAM;gBAG/B,KAAK,CAAC,EAAE,SAAS,EACjB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;KACtB;IAyBF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,KAAK;IAkBnB,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;YAqDZ,gBAAgB;YAKhB,iBAAiB;YAoBjB,qBAAqB;YAQrB,uBAAuB;YAQvB,aAAa;YAsEb,eAAe;YASf,2BAA2B;IA4BzC,OAAO,CAAC,0BAA0B;YAkCpB,qBAAqB;IAgCnC,OAAO,CAAC,kBAAkB;YAWZ,6BAA6B;YAU7B,yBAAyB;YA2BzB,aAAa;CAsB5B"}
1
+ {"version":3,"file":"streaming-repl.d.ts","sourceRoot":"","sources":["../../src/tui/streaming-repl.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI7C,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAS3B,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,mBAAmB,CAAM;IACjC,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;QACzC,OAAO,CAAC,EAAE,YAAY,CAAC;KACnB;IA0BF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,KAAK;IAkBnB,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;YAqDZ,gBAAgB;YAKhB,iBAAiB;YAoBjB,qBAAqB;YAQrB,uBAAuB;YAQvB,aAAa;YAsEb,eAAe;YASf,2BAA2B;IA4BzC,OAAO,CAAC,0BAA0B;YAkCpB,qBAAqB;IAiCnC,OAAO,CAAC,kBAAkB;YAWZ,6BAA6B;YAU7B,yBAAyB;YA2BzB,aAAa;CAsB5B"}
@@ -10,8 +10,8 @@
10
10
  // ============================================================
11
11
  import { AgentLoop } from "../agent-loop.js";
12
12
  import { StreamUI } from "./streaming-tui.js";
13
- import { handleSlashCommand } from "../commands/index.js";
14
13
  import { SessionScheduler } from "../session/session-scheduler.js";
14
+ import { resolveSlashHandler, } from "../slash-ports.js";
15
15
  import { SessionGoalManager } from "../session/session-goal-manager.js";
16
16
  import { SessionGoalController } from "../session/goal-controller.js";
17
17
  import { DaemonSessionApi } from "../session/daemon-session-api.js";
@@ -32,14 +32,16 @@ export class StreamingREPL {
32
32
  closed = false;
33
33
  onClose = null;
34
34
  lastExecutionStatus = "";
35
+ handleSlashCommandOverride;
35
36
  constructor(agent, options = {}) {
36
37
  this.agent = agent ?? new AgentLoop();
37
38
  const model = this.agent.getModel();
38
39
  const toolsCount = this.agent.getToolCount();
39
- this.ui = new StreamUI(model, toolsCount);
40
+ this.ui = new StreamUI(model, toolsCount, { slashUi: options.slashUi });
40
41
  this.daemonSessionApi = new DaemonSessionApi();
41
42
  this.startupResumeTarget = options.resumeSession;
42
43
  this.startupContinue = options.continueSession ?? false;
44
+ this.handleSlashCommandOverride = options.handleSlashCommand;
43
45
  this.inputQueue = new SerialInputQueue({
44
46
  maxPending: 20,
45
47
  onQueued: ({ pendingCount }) => {
@@ -402,6 +404,7 @@ export class StreamingREPL {
402
404
  }
403
405
  // v0.4 Slash Commands
404
406
  this.immediatePrompt = null;
407
+ const handleSlashCommand = await resolveSlashHandler(this.handleSlashCommandOverride);
405
408
  const handled = await handleSlashCommand(input, this.createSlashContext());
406
409
  if (handled) {
407
410
  // plan/model/permissions 等变更后刷新 chrome + statusline
@@ -1,3 +1,4 @@
1
+ import { type SlashUiPorts } from "../slash-ports.js";
1
2
  import type { RecoveryState } from "../execution/types.js";
2
3
  export type AgentEvent = {
3
4
  type: "tool_start";
@@ -73,8 +74,11 @@ export declare class StreamUI {
73
74
  private recoveryState;
74
75
  private readonly now;
75
76
  private readonly doubleCtrlCExitWindowMs;
77
+ private slashUi;
78
+ private readonly slashUiPromise;
76
79
  constructor(model?: string, tools?: number, options?: {
77
80
  now?: () => number;
81
+ slashUi?: SlashUiPorts;
78
82
  });
79
83
  start(): void;
80
84
  stop(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"streaming-tui.d.ts","sourceRoot":"","sources":["../../src/tui/streaming-tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streaming-tui.d.ts","sourceRoot":"","sources":["../../src/tui/streaming-tui.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@
15
15
  // appendFinal / appendError / appendState / appendDone
16
16
  // ============================================================
17
17
  import { default as stringWidth } from "string-width";
18
- import { findSlashCompletion, formatSlashCommandPanel, formatGroupedSlashPanel } from "../commands/index.js";
18
+ import { resolveSlashUiPorts, } from "../slash-ports.js";
19
19
  import { InputBuffer } from "./input-buffer.js";
20
20
  import { formatProgressPulse } from "./progress.js";
21
21
  import { formatWelcomeGuide, formatRoleHeader, formatResultHighlight, formatToolOutputCard, formatToolTimelineRow, formatTopBar, padVisible, truncateVisible, } from "./shell.js";
@@ -104,13 +104,26 @@ export class StreamUI {
104
104
  recoveryState = null;
105
105
  now;
106
106
  doubleCtrlCExitWindowMs = 2_000;
107
+ slashUi = null;
108
+ slashUiPromise;
107
109
  constructor(model = "deepseek-chat", tools = 0, options = {}) {
108
110
  this.model = model;
109
111
  this.tools = tools;
110
112
  this.now = options.now ?? (() => Date.now());
113
+ if (options.slashUi) {
114
+ this.slashUi = options.slashUi;
115
+ this.slashUiPromise = Promise.resolve(options.slashUi);
116
+ }
117
+ else {
118
+ this.slashUiPromise = resolveSlashUiPorts().then((ports) => {
119
+ this.slashUi = ports;
120
+ return ports;
121
+ });
122
+ }
111
123
  }
112
124
  start() {
113
125
  this.running = true;
126
+ void this.slashUiPromise;
114
127
  this.printHeader();
115
128
  this.printInputBar();
116
129
  this.setupInput();
@@ -486,15 +499,20 @@ export class StreamUI {
486
499
  formatCurrentSlashCompletionHints() {
487
500
  if (!this.isSlashCompletionActive(this.input.value))
488
501
  return [];
489
- const matches = findSlashCompletion(this.input.value, 8);
502
+ const ports = this.slashUi;
503
+ if (!ports) {
504
+ void this.slashUiPromise;
505
+ return [];
506
+ }
507
+ const matches = ports.findSlashCompletion(this.input.value, 8);
490
508
  if (matches.length > 0 && this.slashCompletionSelectedIndex >= matches.length) {
491
509
  this.slashCompletionSelectedIndex = 0;
492
510
  }
493
511
  const inputVal = this.input.value || "";
494
512
  if (inputVal === "/" || inputVal === "") {
495
- return formatGroupedSlashPanel(process.stdout.columns || 80);
513
+ return ports.formatGroupedSlashPanel(process.stdout.columns || 80);
496
514
  }
497
- return formatSlashCommandPanel(inputVal, this.slashCompletionSelectedIndex, process.stdout.columns || 80, 8);
515
+ return ports.formatSlashCommandPanel(inputVal, this.slashCompletionSelectedIndex, process.stdout.columns || 80, 8);
498
516
  }
499
517
  isSlashCompletionPrefix(value) {
500
518
  const text = value.trim();
@@ -506,7 +524,12 @@ export class StreamUI {
506
524
  acceptSlashCompletion() {
507
525
  if (!this.isSlashCompletionPrefix(this.input.value))
508
526
  return false;
509
- const matches = findSlashCompletion(this.input.value, 8);
527
+ const ports = this.slashUi;
528
+ if (!ports) {
529
+ void this.slashUiPromise;
530
+ return false;
531
+ }
532
+ const matches = ports.findSlashCompletion(this.input.value, 8);
510
533
  const completion = matches[this.slashCompletionSelectedIndex] ?? matches[0];
511
534
  if (!completion)
512
535
  return false;
@@ -521,7 +544,12 @@ export class StreamUI {
521
544
  moveSlashCompletionSelection(delta) {
522
545
  if (!this.isSlashCompletionPrefix(this.input.value))
523
546
  return false;
524
- const matches = findSlashCompletion(this.input.value, 8);
547
+ const ports = this.slashUi;
548
+ if (!ports) {
549
+ void this.slashUiPromise;
550
+ return false;
551
+ }
552
+ const matches = ports.findSlashCompletion(this.input.value, 8);
525
553
  if (matches.length <= 1)
526
554
  return false;
527
555
  this.slashCompletionSelectedIndex =
package/dist/types.d.ts CHANGED
@@ -186,6 +186,26 @@ export interface LLMDreamConfig {
186
186
  apiKey: string;
187
187
  endpoint: string;
188
188
  }
189
+ export interface SkillMeta {
190
+ name: string;
191
+ description: string;
192
+ tags: string[];
193
+ /** 触发关键词/场景,仅进入索引,不进正文 */
194
+ triggers: string[];
195
+ path: string;
196
+ }
197
+ export interface ApprovalRequest {
198
+ id: string;
199
+ toolName: string;
200
+ arguments: Record<string, unknown>;
201
+ reason: string;
202
+ timestamp: number;
203
+ }
204
+ export interface ApprovalResponse {
205
+ requestId: string;
206
+ decision: "allow" | "deny";
207
+ timestamp: number;
208
+ }
189
209
  export interface MCPServerConfig {
190
210
  name: string;
191
211
  command: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/docs/install.md CHANGED
@@ -34,7 +34,7 @@ qling --help
34
34
 
35
35
  `bootstrap` 会:检查 Node/npm → 安装依赖 → 构建 → 创建 `~/.qling/` → 给出 `doctor`/`setup` 下一步。默认**不**安装浏览器、**不**自动开 dashboard。
36
36
 
37
- ## 方式 B:npm 全局安装(已发布 1.1.1
37
+ ## 方式 B:npm 全局安装(已发布 1.2.0
38
38
 
39
39
  包名因 npm 相似度策略使用作用域 **`@qlingzzy/qling`**(安装后命令仍是 `qling`)。
40
40
  包页:https://www.npmjs.com/package/@qlingzzy/qling
@@ -84,53 +84,56 @@ qling doctor
84
84
  qling
85
85
  ```
86
86
 
87
- ## 方式 D:Scoop 草案(未上架)
87
+ ## 方式 D:Scoop(自建 bucket)
88
88
 
89
- 清单草稿:`packaging/scoop/qling.json`(版本与 `package.json` 对齐,当前 **1.1.1**)。
90
-
91
- 本地校验(不安装到官方 bucket):
89
+ ### D1. 本仓库自建 bucket(推荐试用)
92
90
 
93
91
  ```powershell
94
- npm run validate:packaging
95
- # 检查 version / url 是否钉死到当前版本
96
- Get-Content packaging/scoop/qling.json | ConvertFrom-Json | Select-Object version, url, hash
97
- ```
92
+ # 公共 bucket(推荐)
93
+ scoop bucket add qling https://github.com/Zzy-min/scoop-qling
94
+ scoop install qling
98
95
 
99
- 本地试用(需自建 bucket,并先把 `hash` 换成真实 tarball SHA256):
96
+ # 或从本仓库本地路径
97
+ # scoop bucket add qling "$PWD\packaging\scoop-bucket"
98
+ # scoop install qling/qling
100
99
 
101
- ```powershell
102
- # 示例:私有 bucket 放好 manifest 后
103
- scoop install qling
100
+ qling --version
104
101
  ```
105
102
 
106
- 1.1.1 npm tarball **已填真实 SHA256**(见 manifest `hash`)。仍未进官方 Scoop bucket:需自建 bucket 或社区 bucket PR。
103
+ 便携包内嵌 Node 运行时,**无需系统安装 Node**。公共 bucket:https://github.com/Zzy-min/scoop-qling
104
+ 官方 Extras PR:https://github.com/ScoopInstaller/Extras/pull/18307
105
+
106
+ ### D2. 校验与同步
107
107
 
108
108
  ```powershell
109
- # 私有 bucket 放入 packaging/scoop/qling.json 后可试装
110
- # shim 不理想,post_install 会提示改用 npm 全局安装
111
- scoop install qling
109
+ npm run validate:packaging
110
+ npm run sync:scoop-bucket # packaging/scoop scoop-bucket
112
111
  ```
113
112
 
113
+ **仍未**提交到官方 Scoop 目录;社区 PR 需另开。
114
+
114
115
  **推荐**用户路径仍是:`npm install -g @qlingzzy/qling --registry https://registry.npmjs.org/` 或源码 bootstrap。
115
116
 
116
- ## 方式 E:winget 草案(未上架)
117
+ ## 方式 E:winget / 便携 zip
118
+
119
+ ### 构建 Windows 便携包
120
+
121
+ ```powershell
122
+ npm run build:portable-win
123
+ # → dist-portable/qling-win-x64.zip + portable-meta.json (sha256)
124
+ ```
117
125
 
118
- 清单草稿:`packaging/winget/Zzy-min.qling.yaml`(`PackageVersion` 与当前版本对齐)。
126
+ Release 资产示例:`https://github.com/Zzy-min/qling/releases/download/v1.2.1/qling-win-x64.zip`
127
+ 清单:`packaging/winget/Zzy-min.qling.yaml`(含 InstallerSha256)。
119
128
 
120
- 本地校验:
129
+ ### 本地校验
121
130
 
122
131
  ```powershell
123
132
  npm run validate:packaging
124
133
  Select-String -Path packaging/winget/Zzy-min.qling.yaml -Pattern 'PackageVersion|InstallerUrl|InstallerSha256'
125
134
  ```
126
135
 
127
- 正式提交需:
128
-
129
- 1. 稳定版本的安装包 URL(msi/zip 或 portable;当前示例为 GitHub Release zip)
130
- 2. 真实 `InstallerSha256`(草案里为全零占位)
131
- 3. 通过 [winget-pkgs](https://github.com/microsoft/winget-pkgs) 审核
132
-
133
- 当前文件仅为**结构样例**,不可直接 `winget install`。发布 zip 前可先用 npm 全局安装路径。
136
+ 正式提交 [winget-pkgs](https://github.com/microsoft/winget-pkgs) 仍需 PR;在此之前可用 zip 解压 + `qling.cmd`(便携 zip 已内嵌 Node 运行时(亦可使用系统 Node))。
134
137
 
135
138
  ## 配置与安全
136
139
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qlingzzy/qling",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "description": "轻灵 Qling - 本地优先的中文 AI Agent CLI 工作台 / Local-first Chinese AI Agent CLI workbench",
5
5
  "type": "module",
6
6
  "main": "./dist/sdk.js",
@@ -88,7 +88,12 @@
88
88
  "validate:packaging": "node scripts/validate-packaging.mjs",
89
89
  "dep:layers": "node scripts/dep-layers.mjs",
90
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"
91
+ "dep:layers:baseline": "node scripts/dep-layers.mjs --baseline",
92
+ "dep:layers:write-baseline": "node scripts/dep-layers.mjs --write-baseline",
93
+ "sync:scoop-bucket": "node scripts/sync-scoop-bucket.mjs",
94
+ "build:portable-win": "node scripts/build-portable-win.mjs",
95
+ "sync:winget-sha": "node scripts/sync-winget-sha.mjs",
96
+ "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 && node scripts/dep-layers.mjs --strict"
92
97
  },
93
98
  "dependencies": {
94
99
  "axios": "^1.7.0",