@lemoncat7/dsh-knowledge 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +29 -1
  2. package/lib/api.d.ts.map +1 -1
  3. package/lib/api.js +15 -3
  4. package/lib/api.js.map +1 -1
  5. package/lib/client.d.ts +3 -0
  6. package/lib/client.d.ts.map +1 -1
  7. package/lib/client.js +102 -7
  8. package/lib/client.js.map +4 -4
  9. package/lib/extraction.d.ts.map +1 -1
  10. package/lib/extraction.js +1 -0
  11. package/lib/extraction.js.map +1 -1
  12. package/lib/index.d.ts.map +1 -1
  13. package/lib/index.js +14 -1
  14. package/lib/index.js.map +1 -1
  15. package/lib/notes/share-import.d.ts +2 -0
  16. package/lib/notes/share-import.d.ts.map +1 -1
  17. package/lib/notes/share-import.js +40 -5
  18. package/lib/notes/share-import.js.map +1 -1
  19. package/lib/web.js +1 -1
  20. package/lib/web.js.map +1 -1
  21. package/lib/writeback/control.d.ts +5 -0
  22. package/lib/writeback/control.d.ts.map +1 -0
  23. package/lib/writeback/control.js +39 -0
  24. package/lib/writeback/control.js.map +1 -0
  25. package/lib/writeback/live-control.d.ts +5 -0
  26. package/lib/writeback/live-control.d.ts.map +1 -0
  27. package/lib/writeback/live-control.js +63 -0
  28. package/lib/writeback/live-control.js.map +1 -0
  29. package/lib/writeback/queue.d.ts +27 -1
  30. package/lib/writeback/queue.d.ts.map +1 -1
  31. package/lib/writeback/queue.js +97 -7
  32. package/lib/writeback/queue.js.map +1 -1
  33. package/lib/writeback/status-client.d.ts +3 -0
  34. package/lib/writeback/status-client.d.ts.map +1 -1
  35. package/lib/writeback/status-client.js +30 -4
  36. package/lib/writeback/status-client.js.map +1 -1
  37. package/package.json +1 -1
  38. package/web/api-client.js +2 -1
  39. package/web/app.js +42 -15
  40. package/web/styles.css +13 -8
  41. package/web/ui-primitives.js +1 -0
  42. package/web/writeback-live.d.ts +1 -0
  43. package/web/writeback-live.js +52 -0
  44. package/web/writeback-workspace.js +76 -0
@@ -0,0 +1,5 @@
1
+ import type { RuntimeContextLike } from '../runtime.js';
2
+ import type { WritebackQueue } from './queue.js';
3
+ /** The outbox belongs to this DSH instance, never the remote knowledge provider. */
4
+ export declare function registerWritebackControl(ctx: RuntimeContextLike, queue: WritebackQueue | undefined): (() => void) | undefined;
5
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/writeback/control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CA0B7H"}
@@ -0,0 +1,39 @@
1
+ import { assertKnowledgeBrowserRequest } from '../api.js';
2
+ /** The outbox belongs to this DSH instance, never the remote knowledge provider. */
3
+ export function registerWritebackControl(ctx, queue) {
4
+ return ctx.webServer?.register({
5
+ kind: 'exact', path: '/knowledge-control/v1/writeback-jobs',
6
+ handler(req, res) {
7
+ try {
8
+ assertKnowledgeBrowserRequest(req, 'management-web');
9
+ if (!queue)
10
+ throw Object.assign(new Error('知识库回写已停用'), { status: 409 });
11
+ const url = new URL(req.url ?? '/', 'http://localhost');
12
+ let result;
13
+ if (req.method === 'GET') {
14
+ const offset = Number(url.searchParams.get('offset') ?? 0);
15
+ if (!Number.isSafeInteger(offset) || offset < 0)
16
+ throw Object.assign(new Error('无效分页参数'), { status: 400 });
17
+ result = queue.list(url.searchParams.get('sessionId')?.trim(), offset);
18
+ }
19
+ else if (req.method === 'POST') {
20
+ const key = url.searchParams.get('sourceKey');
21
+ const action = url.searchParams.get('action');
22
+ if (!key || !['retry', 'cancel'].includes(action ?? ''))
23
+ throw Object.assign(new Error('需要任务编号和有效操作'), { status: 400 });
24
+ result = action === 'retry' ? queue.retry(key) : queue.cancel(key);
25
+ }
26
+ else {
27
+ res.writeHead(405, { allow: 'GET, POST' }).end();
28
+ return;
29
+ }
30
+ res.writeHead(200, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' }).end(JSON.stringify(result));
31
+ }
32
+ catch (error) {
33
+ const status = error?.status ?? 500;
34
+ res.writeHead(status, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' }).end(JSON.stringify({ error: status < 500 && error instanceof Error ? error.message : '回写队列操作失败,请稍后重试' }));
35
+ }
36
+ },
37
+ });
38
+ }
39
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/writeback/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAA;AAIzD,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CAAC,GAAuB,EAAE,KAAiC;IACjG,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC7B,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sCAAsC;QAC3D,OAAO,CAAC,GAAG,EAAE,GAAG;YACd,IAAI,CAAC;gBACH,6BAA6B,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBACpD,IAAI,CAAC,KAAK;oBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;gBACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAA;gBACvD,IAAI,MAAe,CAAA;gBACnB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;wBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC1G,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;gBACxE,CAAC;qBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;oBAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;oBAC7C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;wBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;oBACvH,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACpE,CAAC;qBAAM,CAAC;oBAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;oBAAC,OAAM;gBAAC,CAAC;gBACnE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;YACpI,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAI,KAA6B,EAAE,MAAM,IAAI,GAAG,CAAA;gBAC5D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;YACrN,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { RuntimeContextLike } from '../runtime.js';
2
+ import type { WritebackQueue } from './queue.js';
3
+ /** Authenticated long polling: one notification channel per page, no job content. */
4
+ export declare function registerWritebackLive(ctx: RuntimeContextLike, queue?: WritebackQueue): (() => void) | undefined;
5
+ //# sourceMappingURL=live-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-control.d.ts","sourceRoot":"","sources":["../../src/writeback/live-control.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CA0C/G"}
@@ -0,0 +1,63 @@
1
+ import { assertKnowledgeBrowserRequest } from '../api.js';
2
+ /** Authenticated long polling: one notification channel per page, no job content. */
3
+ export function registerWritebackLive(ctx, queue) {
4
+ const waiting = new Set();
5
+ const notify = () => { for (const check of [...waiting])
6
+ check(); };
7
+ const unsubscribe = queue?.subscribe(notify);
8
+ // Also notice writes from another process using the same SQLite outbox.
9
+ const timer = setInterval(notify, 2000);
10
+ timer.unref?.();
11
+ const unregister = ctx.webServer?.register({
12
+ kind: 'exact', path: '/knowledge-control/v1/writeback-changes',
13
+ handler(req, res) {
14
+ try {
15
+ const client = req.headers['x-dsh-knowledge-client'];
16
+ assertKnowledgeBrowserRequest(req, client === 'conversation-web' ? 'conversation-web' : 'management-web');
17
+ if (req.method !== 'GET') {
18
+ res.writeHead(405, { allow: 'GET' }).end();
19
+ return;
20
+ }
21
+ if (!queue) {
22
+ res.writeHead(409).end();
23
+ return;
24
+ }
25
+ if (waiting.size >= 128) {
26
+ res.writeHead(429).end();
27
+ return;
28
+ }
29
+ const since = new URL(req.url ?? '/', 'http://localhost').searchParams.get('since');
30
+ let finished = false;
31
+ let deadline;
32
+ const cleanup = () => { waiting.delete(check); clearTimeout(deadline); res.off('close', disconnect); };
33
+ const disconnect = () => { finished = true; cleanup(); };
34
+ const finish = (status, revision) => {
35
+ if (finished)
36
+ return;
37
+ finished = true;
38
+ cleanup();
39
+ res.writeHead(status, { 'content-type': 'application/json', 'cache-control': 'no-store' }).end(JSON.stringify({ revision }));
40
+ };
41
+ const check = (shutdown = false) => {
42
+ if (shutdown) {
43
+ finish(503);
44
+ return;
45
+ }
46
+ const revision = queue.revision;
47
+ if (since !== revision)
48
+ finish(200, revision);
49
+ };
50
+ waiting.add(check);
51
+ res.on('close', disconnect);
52
+ deadline = setTimeout(() => finish(200, queue.revision), 20000);
53
+ check();
54
+ }
55
+ catch {
56
+ res.writeHead(403, { 'cache-control': 'no-store' }).end();
57
+ }
58
+ },
59
+ });
60
+ return () => { clearInterval(timer); unsubscribe?.(); for (const check of [...waiting])
61
+ check(true); unregister?.(); };
62
+ }
63
+ //# sourceMappingURL=live-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-control.js","sourceRoot":"","sources":["../../src/writeback/live-control.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import type { ExtractionWriteDestination } from '../domain.js';
2
2
  import type { ExtractionCheckpoint, TurnSnapshot } from '../extraction.js';
3
3
  export interface WritebackStatus {
4
- status: 'queued' | 'running' | 'completed' | 'failed';
4
+ status: 'queued' | 'running' | 'completed' | 'failed' | 'cancelled';
5
5
  summary: string;
6
6
  error?: string;
7
7
  retryable: boolean;
8
8
  destinations?: ExtractionWriteDestination[];
9
9
  nextAttemptAt?: number;
10
+ blockedBy?: string;
11
+ cancelRequested?: boolean;
10
12
  }
11
13
  export interface WritebackWork {
12
14
  snapshot: TurnSnapshot;
@@ -23,13 +25,37 @@ export declare class WritebackQueue {
23
25
  private timer;
24
26
  private active;
25
27
  private controller;
28
+ private activeKey;
26
29
  private closed;
27
30
  private closing;
31
+ private readonly listeners;
32
+ subscribe(listener: () => void): () => void;
33
+ get revision(): string;
34
+ private notify;
28
35
  constructor(path: string, execute: (work: WritebackWork, checkpoint: ExtractionCheckpoint, signal: AbortSignal) => Promise<WritebackStatus>, warn?: (message: string) => void);
29
36
  enqueue(work: WritebackWork): WritebackStatus;
30
37
  completeEmpty(sourceKey: string, sessionId: string): WritebackStatus;
31
38
  status(key: string): WritebackStatus | undefined;
32
39
  retry(key: string): WritebackStatus;
40
+ list(sessionId?: string, offset?: number, limit?: number): {
41
+ total: number;
42
+ items: {
43
+ status: "queued" | "running" | "completed" | "failed" | "cancelled";
44
+ summary: string;
45
+ error?: string;
46
+ retryable: boolean;
47
+ destinations?: ExtractionWriteDestination[];
48
+ nextAttemptAt?: number;
49
+ blockedBy?: string;
50
+ cancelRequested?: boolean;
51
+ sourceKey: string;
52
+ sessionId: string;
53
+ attempts: number;
54
+ createdAt: number | null;
55
+ }[];
56
+ };
57
+ cancel(key: string): WritebackStatus;
58
+ private finishCancellation;
33
59
  start(): void;
34
60
  get isRunning(): boolean;
35
61
  private kick;
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/writeback/queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAExF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,0BAA0B,EAAE,CAAA;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAID,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,iFAAiF;AACjF,qBAAa,cAAc;IAQC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA4G,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPnL,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAA2B;gBAC9B,IAAI,EAAE,MAAM,EAAmB,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,EAAmB,IAAI,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe;IAczN,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe;IAa7C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe;IAMpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAUhD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAYnC,KAAK,IAAI,IAAI;IAOb,IAAI,SAAS,IAAI,OAAO,CAAyC;IAEjE,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,KAAK;YAqBC,KAAK;IA+CnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvB"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/writeback/queue.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAExF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,0BAA0B,EAAE,CAAA;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAID,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,iFAAiF;AACjF,qBAAa,cAAc;IA4BC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA4G,OAAO,CAAC,QAAQ,CAAC,IAAI;IA3BnL,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED,OAAO,CAAC,MAAM;gBAKF,IAAI,EAAE,MAAM,EAAmB,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,EAAmB,IAAI,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe;IAsBzN,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe;IAa7C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe;IAOpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAWhD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAYnC,IAAI,CAAC,SAAS,SAAK,EAAE,MAAM,SAAI,EAAE,KAAK,SAAK;;;oBAhHnC,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW;qBAC1D,MAAM;oBACP,MAAM;uBACH,OAAO;2BACH,0BAA0B,EAAE;4BAC3B,MAAM;wBACV,MAAM;8BACA,OAAO;;;;;;;IAiHzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAkBpC,OAAO,CAAC,kBAAkB;IAK1B,KAAK,IAAI,IAAI;IAOb,IAAI,SAAS,IAAI,OAAO,CAAyC;IAEjE,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,KAAK;YAsBC,KAAK;IAwDnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvB"}
@@ -15,8 +15,31 @@ export class WritebackQueue {
15
15
  timer;
16
16
  active;
17
17
  controller;
18
+ activeKey;
18
19
  closed = false;
19
20
  closing;
21
+ listeners = new Set();
22
+ subscribe(listener) {
23
+ this.listeners.add(listener);
24
+ return () => { this.listeners.delete(listener); };
25
+ }
26
+ get revision() {
27
+ if (this.closed)
28
+ return `${this.owner}:closed`;
29
+ const external = this.db.prepare('PRAGMA data_version').get();
30
+ const local = this.db.prepare('SELECT total_changes() AS changes').get();
31
+ return `${this.owner}:${external.data_version}:${local.changes}`;
32
+ }
33
+ notify() {
34
+ for (const listener of this.listeners) {
35
+ try {
36
+ listener();
37
+ }
38
+ catch (error) {
39
+ this.warn(`writeback status notification: ${String(error)}`);
40
+ }
41
+ }
42
+ }
20
43
  constructor(path, execute, warn = () => { }) {
21
44
  this.execute = execute;
22
45
  this.warn = warn;
@@ -33,6 +56,21 @@ export class WritebackQueue {
33
56
  CREATE INDEX IF NOT EXISTS queue_capacity ON queue_jobs(id) WHERE status!='completed';
34
57
  CREATE TABLE IF NOT EXISTS queue_lease(id INTEGER PRIMARY KEY CHECK(id=1), owner TEXT NOT NULL, expires INTEGER NOT NULL);
35
58
  INSERT OR IGNORE INTO queue_lease VALUES(1,'',0);`);
59
+ this.db.exec('BEGIN IMMEDIATE');
60
+ try {
61
+ const columns = this.db.prepare('PRAGMA table_info(queue_jobs)').all();
62
+ if (!columns.some(column => column.name === 'cancel_requested'))
63
+ this.db.exec('ALTER TABLE queue_jobs ADD COLUMN cancel_requested INTEGER NOT NULL DEFAULT 0');
64
+ if (!columns.some(column => column.name === 'created_at'))
65
+ this.db.exec('ALTER TABLE queue_jobs ADD COLUMN created_at INTEGER');
66
+ this.db.exec('DROP INDEX IF EXISTS queue_management_order');
67
+ this.db.exec('COMMIT');
68
+ }
69
+ catch (error) {
70
+ this.db.exec('ROLLBACK');
71
+ this.db.close();
72
+ throw error;
73
+ }
36
74
  }
37
75
  enqueue(work) {
38
76
  if (this.closed)
@@ -40,18 +78,19 @@ export class WritebackQueue {
40
78
  const existing = this.status(work.snapshot.sourceKey);
41
79
  if (existing)
42
80
  return existing;
43
- const count = this.db.prepare("SELECT count(*) AS count FROM queue_jobs WHERE status != 'completed'").get();
81
+ const count = this.db.prepare("SELECT count(*) AS count FROM queue_jobs WHERE status NOT IN ('completed','cancelled')").get();
44
82
  if (count.count >= 1000)
45
83
  throw new Error('回写队列已满,请先处理失败任务;未删除任何未完成记录');
46
84
  const view = { status: 'queued', summary: '知识库回写 · 等待回写', retryable: false };
47
- this.db.prepare('INSERT OR IGNORE INTO queue_jobs(source_key,session_id,payload,status,view) VALUES(?,?,?,?,?)')
48
- .run(work.snapshot.sourceKey, work.snapshot.sessionId, JSON.stringify(work), 'queued', JSON.stringify(view));
85
+ this.db.prepare('INSERT OR IGNORE INTO queue_jobs(source_key,session_id,payload,status,view,created_at) VALUES(?,?,?,?,?,?)')
86
+ .run(work.snapshot.sourceKey, work.snapshot.sessionId, JSON.stringify(work), 'queued', JSON.stringify(view), Date.now());
49
87
  this.kick();
50
88
  return this.status(work.snapshot.sourceKey);
51
89
  }
52
90
  completeEmpty(sourceKey, sessionId) {
53
91
  const view = { status: 'completed', summary: '知识库回写 · 当前回答无可提取内容', retryable: false };
54
- this.db.prepare('INSERT OR IGNORE INTO queue_jobs(source_key,session_id,status,view) VALUES(?,?,?,?)').run(sourceKey, sessionId, view.status, JSON.stringify(view));
92
+ this.db.prepare('INSERT OR IGNORE INTO queue_jobs(source_key,session_id,status,view,created_at) VALUES(?,?,?,?,?)').run(sourceKey, sessionId, view.status, JSON.stringify(view), Date.now());
93
+ this.notify();
55
94
  return this.status(sourceKey);
56
95
  }
57
96
  status(key) {
@@ -59,8 +98,9 @@ export class WritebackQueue {
59
98
  if (!row)
60
99
  return undefined;
61
100
  const view = JSON.parse(row.view);
62
- if (row.status === 'queued' && this.db.prepare("SELECT 1 FROM queue_jobs WHERE session_id=? AND id<? AND status!='completed' LIMIT 1").get(row.session_id, row.id)) {
63
- return { ...view, summary: '知识库回写 · 等待本会话前一轮回写完成;若前一轮失败,请先重试' };
101
+ const blocker = row.status === 'queued' ? this.db.prepare("SELECT source_key FROM queue_jobs WHERE session_id=? AND id<? AND status NOT IN ('completed','cancelled') ORDER BY id LIMIT 1").get(row.session_id, row.id) : undefined;
102
+ if (blocker) {
103
+ return { ...view, blockedBy: blocker.source_key, summary: '知识库回写 · 等待本会话前一轮回写完成;可在回写任务中重试或取消阻塞项' };
64
104
  }
65
105
  return view;
66
106
  }
@@ -79,6 +119,42 @@ export class WritebackQueue {
79
119
  this.kick();
80
120
  return this.status(key);
81
121
  }
122
+ list(sessionId = '', offset = 0, limit = 50) {
123
+ const where = sessionId ? 'WHERE session_id=?' : '';
124
+ const args = sessionId ? [sessionId] : [];
125
+ const total = this.db.prepare(`SELECT count(*) AS count FROM queue_jobs ${where}`).get(...args).count;
126
+ const rows = this.db.prepare(`SELECT source_key,session_id,attempts,created_at FROM queue_jobs ${where} ORDER BY id DESC LIMIT ? OFFSET ?`).all(...args, limit, offset);
127
+ return { total, items: rows.map(row => ({ sourceKey: row.source_key, sessionId: row.session_id, attempts: row.attempts, createdAt: row.created_at, ...this.status(row.source_key) })) };
128
+ }
129
+ cancel(key) {
130
+ if (this.closed)
131
+ throw new Error('知识库回写队列已关闭');
132
+ this.db.exec('BEGIN IMMEDIATE');
133
+ try {
134
+ const current = this.status(key);
135
+ if (!current)
136
+ throw Object.assign(new Error('回写任务不存在'), { status: 404 });
137
+ if (current.status === 'running') {
138
+ this.db.prepare('UPDATE queue_jobs SET cancel_requested=1,view=? WHERE source_key=?').run(JSON.stringify({ ...current, cancelRequested: true, summary: '知识库回写 · 正在取消,等待当前写入结束' }), key);
139
+ }
140
+ else if (current.status !== 'completed' && current.status !== 'cancelled') {
141
+ this.finishCancellation(key);
142
+ }
143
+ this.db.exec('COMMIT');
144
+ }
145
+ catch (error) {
146
+ this.db.exec('ROLLBACK');
147
+ throw error;
148
+ }
149
+ if (this.activeKey === key)
150
+ this.controller?.abort(new Error('用户取消回写'));
151
+ this.kick();
152
+ return this.status(key);
153
+ }
154
+ finishCancellation(key) {
155
+ const view = { status: 'cancelled', summary: '知识库回写 · 已取消;已写入的内容不会撤销', retryable: false };
156
+ this.db.prepare("UPDATE queue_jobs SET status='cancelled',payload=NULL,plan=NULL,view=? WHERE source_key=?").run(JSON.stringify(view), key);
157
+ }
82
158
  start() {
83
159
  if (this.timer || this.closed)
84
160
  return;
@@ -88,6 +164,8 @@ export class WritebackQueue {
88
164
  }
89
165
  get isRunning() { return this.controller !== undefined; }
90
166
  kick() {
167
+ if (!this.closed)
168
+ this.notify();
91
169
  if (this.closed || this.active)
92
170
  return;
93
171
  // A macrotask boundary lets the host finish its turn/channel reply first.
@@ -104,10 +182,12 @@ export class WritebackQueue {
104
182
  return undefined;
105
183
  }
106
184
  // Only the current lease owner may recover work abandoned by a dead process.
185
+ for (const cancelled of this.db.prepare("SELECT source_key FROM queue_jobs WHERE status='running' AND cancel_requested=1").all())
186
+ this.finishCancellation(cancelled.source_key);
107
187
  this.db.prepare("UPDATE queue_jobs SET status='queued',next_at=0,view=? WHERE status='running'")
108
188
  .run(JSON.stringify({ status: 'queued', summary: '知识库回写 · 中断后等待恢复', retryable: false }));
109
189
  const row = this.db.prepare(`SELECT j.* FROM queue_jobs j WHERE j.status='queued' AND j.next_at<=?
110
- AND NOT EXISTS(SELECT 1 FROM queue_jobs p WHERE p.session_id=j.session_id AND p.id<j.id AND p.status!='completed')
190
+ AND NOT EXISTS(SELECT 1 FROM queue_jobs p WHERE p.session_id=j.session_id AND p.id<j.id AND p.status NOT IN ('completed','cancelled'))
111
191
  ORDER BY j.id LIMIT 1`).get(now);
112
192
  if (!row) {
113
193
  this.db.exec('COMMIT');
@@ -131,11 +211,15 @@ export class WritebackQueue {
131
211
  break;
132
212
  const controller = new AbortController();
133
213
  this.controller = controller;
214
+ this.activeKey = row.source_key;
215
+ this.notify();
134
216
  const assertLease = () => {
135
217
  controller.signal.throwIfAborted();
136
218
  const lease = this.db.prepare('SELECT owner,expires FROM queue_lease WHERE id=1').get();
137
219
  if (lease.owner !== this.owner || lease.expires < Date.now())
138
220
  throw new Error('回写工作租约已失效');
221
+ if (this.db.prepare('SELECT 1 FROM queue_jobs WHERE id=? AND cancel_requested=1').get(row.id))
222
+ throw new Error('用户取消回写');
139
223
  };
140
224
  const renewal = setInterval(() => {
141
225
  try {
@@ -162,6 +246,10 @@ export class WritebackQueue {
162
246
  const lease = this.db.prepare('SELECT owner FROM queue_lease WHERE id=1').get();
163
247
  if (lease.owner !== this.owner)
164
248
  return;
249
+ if (this.db.prepare('SELECT 1 FROM queue_jobs WHERE id=? AND cancel_requested=1').get(row.id)) {
250
+ this.finishCancellation(row.source_key);
251
+ continue;
252
+ }
165
253
  const message = error instanceof Error ? error.message : String(error);
166
254
  const waiting = error instanceof WritebackDeferred;
167
255
  const transient = /network|fetch failed|EOF|ECONN|ETIMEDOUT|EAI_AGAIN|SQLITE_BUSY|timeout|timed out|\b(?:429|500|502|503|504)\b|invalid JSON|网络|超时|租约已失效/i.test(message);
@@ -175,7 +263,9 @@ export class WritebackQueue {
175
263
  finally {
176
264
  clearInterval(renewal);
177
265
  this.controller = undefined;
266
+ this.activeKey = undefined;
178
267
  this.db.prepare('UPDATE queue_lease SET owner=\'\',expires=0 WHERE owner=?').run(this.owner);
268
+ this.notify();
179
269
  }
180
270
  }
181
271
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/writeback/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/writeback/queue.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,12 @@ export declare class WritebackStatusClient {
12
12
  private failures;
13
13
  private value;
14
14
  private readError;
15
+ private missing;
16
+ private invalidated;
15
17
  constructor(url: string, change: (value: WritebackStatus | undefined, retrying: boolean, readError?: string) => void, fetcher?: typeof fetch);
16
18
  setVisible(visible: boolean): void;
17
19
  refresh(): void;
20
+ invalidate(): void;
18
21
  retry(): void;
19
22
  private load;
20
23
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"status-client.d.ts","sourceRoot":"","sources":["../../src/writeback/status-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,uFAAuF;AACvF,qBAAa,qBAAqB;IAWpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAuF,OAAO,CAAC,QAAQ,CAAC,OAAO;IAVhL,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,SAAS,CAAoB;gBAGR,GAAG,EAAE,MAAM,EAAmB,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,EAAmB,OAAO,GAAE,OAAO,KAA8C;IAEvO,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMlC,OAAO,IAAI,IAAI;IAKf,KAAK,IAAI,IAAI;YAQC,IAAI;IAsClB,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"status-client.d.ts","sourceRoot":"","sources":["../../src/writeback/status-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,uFAAuF;AACvF,qBAAa,qBAAqB;IAapB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAuF,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZhL,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAQ;gBAGE,GAAG,EAAE,MAAM,EAAmB,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,EAAmB,OAAO,GAAE,OAAO,KAA8C;IAEvO,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMlC,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IAMlB,KAAK,IAAI,IAAI;YAQC,IAAI;IAkDlB,OAAO,IAAI,IAAI;CAKhB"}
@@ -11,6 +11,8 @@ export class WritebackStatusClient {
11
11
  failures = 0;
12
12
  value;
13
13
  readError;
14
+ missing = false;
15
+ invalidated = false;
14
16
  // Browser fetch checks its Window receiver. Never store it as an unbound
15
17
  // instance method: this.fetcher() would supply the client as its receiver.
16
18
  constructor(url, change, fetcher = (...args) => globalThis.fetch(...args)) {
@@ -33,6 +35,14 @@ export class WritebackStatusClient {
33
35
  return;
34
36
  void this.load(false);
35
37
  }
38
+ invalidate() {
39
+ if (this.disposed || !this.visible)
40
+ return;
41
+ if (this.retrying || this.request && !this.request.signal.aborted)
42
+ this.invalidated = true;
43
+ else
44
+ this.refresh();
45
+ }
36
46
  retry() {
37
47
  if (this.disposed || this.retrying || !this.value?.retryable)
38
48
  return;
@@ -55,15 +65,27 @@ export class WritebackStatusClient {
55
65
  const body = await response.json();
56
66
  if (this.request !== controller || this.disposed)
57
67
  return;
58
- if (!response.ok && (retry || response.status !== 404))
68
+ if (!response.ok && (retry || response.status !== 404 || String(body.status) !== 'missing'))
59
69
  throw new Error(body.error ?? `状态请求失败(HTTP ${response.status})`);
60
- this.readError = undefined;
70
+ if (response.ok && !body.summary)
71
+ throw new Error('无效的回写状态响应');
61
72
  if (response.ok && body.summary) {
73
+ this.readError = undefined;
74
+ this.missing = false;
62
75
  this.value = body;
63
76
  this.failures = 0;
64
- delay = body.status === 'completed' ? 0 : body.status === 'failed' ? 15_000 : 1_500;
77
+ delay = body.status === 'completed' || body.status === 'cancelled' ? 0 : body.status === 'failed' ? 15_000 : 1_500;
65
78
  }
66
79
  else {
80
+ // A definitive missing response must invalidate a previously displayed state.
81
+ // Initial absence is normal before turn-stopping has persisted the snapshot.
82
+ if (this.value || this.missing) {
83
+ this.missing = true;
84
+ this.value = undefined;
85
+ this.readError = '当前客户端找不到这轮回写记录;旧等待状态已失效,请在回写任务中核对。';
86
+ }
87
+ else
88
+ this.readError = undefined;
67
89
  delay = ++this.failures <= 3 ? 1_500 : 60_000;
68
90
  }
69
91
  }
@@ -83,7 +105,11 @@ export class WritebackStatusClient {
83
105
  if (retry)
84
106
  this.retrying = false;
85
107
  this.change(this.value, this.retrying, this.readError);
86
- if (delay && this.visible)
108
+ if (this.invalidated && this.visible) {
109
+ this.invalidated = false;
110
+ this.refresh();
111
+ }
112
+ else if (delay && this.visible)
87
113
  this.timer = setTimeout(() => this.refresh(), delay);
88
114
  }
89
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status-client.js","sourceRoot":"","sources":["../../src/writeback/status-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-client.js","sourceRoot":"","sources":["../../src/writeback/status-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lemoncat7/dsh-knowledge",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "Local and remote knowledge bases for DeepSeek Harness, with scoped recall, controlled write-back, and a Web management console",
5
5
  "keywords": [
6
6
  "deepseek-harness",
package/web/api-client.js CHANGED
@@ -30,6 +30,8 @@ export function createApiClient({ apiBase, authMode, getToken }) {
30
30
  if (!response.ok) {
31
31
  const error = new Error(payload?.error || `请求失败(HTTP ${response.status})`)
32
32
  error.status = response.status
33
+ error.code = payload?.code
34
+ error.origin = payload?.origin
33
35
  throw error
34
36
  }
35
37
  return payload
@@ -91,4 +93,3 @@ export function createApiClient({ apiBase, authMode, getToken }) {
91
93
 
92
94
  return { api, binaryRequest, binaryUploadRequest }
93
95
  }
94
-