@lemoncat7/dsh-partner 1.16.1 → 2.0.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 (157) hide show
  1. package/README.md +23 -0
  2. package/cordis.patch.yml +1 -0
  3. package/docs/channel-reply-progress.md +18 -0
  4. package/docs/releases/1.16.2.md +11 -0
  5. package/docs/releases/2.0.0.md +34 -0
  6. package/docs/storage-migration.md +72 -0
  7. package/lib/agent-runtime.d.ts +2 -1
  8. package/lib/agent-runtime.d.ts.map +1 -1
  9. package/lib/agent-runtime.js +23 -8
  10. package/lib/agent-runtime.js.map +1 -1
  11. package/lib/api.d.ts +2 -0
  12. package/lib/api.d.ts.map +1 -1
  13. package/lib/api.js +49 -1
  14. package/lib/api.js.map +1 -1
  15. package/lib/attachments/service.d.ts +10 -0
  16. package/lib/attachments/service.d.ts.map +1 -1
  17. package/lib/attachments/service.js +68 -9
  18. package/lib/attachments/service.js.map +1 -1
  19. package/lib/channels/direct/progress-transport.d.ts +15 -0
  20. package/lib/channels/direct/progress-transport.d.ts.map +1 -0
  21. package/lib/channels/direct/progress-transport.js +51 -0
  22. package/lib/channels/direct/progress-transport.js.map +1 -0
  23. package/lib/channels/direct/transport.d.ts +2 -0
  24. package/lib/channels/direct/transport.d.ts.map +1 -1
  25. package/lib/channels/direct/transport.js +6 -0
  26. package/lib/channels/direct/transport.js.map +1 -1
  27. package/lib/channels/manager.d.ts.map +1 -1
  28. package/lib/channels/manager.js +23 -6
  29. package/lib/channels/manager.js.map +1 -1
  30. package/lib/channels/reply-progress-controller.d.ts +32 -0
  31. package/lib/channels/reply-progress-controller.d.ts.map +1 -0
  32. package/lib/channels/reply-progress-controller.js +116 -0
  33. package/lib/channels/reply-progress-controller.js.map +1 -0
  34. package/lib/client-controller.d.ts +1 -1
  35. package/lib/client-controller.d.ts.map +1 -1
  36. package/lib/client.d.ts.map +1 -1
  37. package/lib/client.js +8657 -1564
  38. package/lib/client.js.map +4 -4
  39. package/lib/companions/removal.d.ts.map +1 -1
  40. package/lib/companions/removal.js +3 -0
  41. package/lib/companions/removal.js.map +1 -1
  42. package/lib/concern-store.d.ts +5 -1
  43. package/lib/concern-store.d.ts.map +1 -1
  44. package/lib/concern-store.js +13 -4
  45. package/lib/concern-store.js.map +1 -1
  46. package/lib/config.d.ts +1 -0
  47. package/lib/config.d.ts.map +1 -1
  48. package/lib/config.js +6 -0
  49. package/lib/config.js.map +1 -1
  50. package/lib/execution/reply-progress.d.ts +7 -0
  51. package/lib/execution/reply-progress.d.ts.map +1 -0
  52. package/lib/execution/reply-progress.js +15 -0
  53. package/lib/execution/reply-progress.js.map +1 -0
  54. package/lib/index.d.ts.map +1 -1
  55. package/lib/index.js +162 -132
  56. package/lib/index.js.map +1 -1
  57. package/lib/memory-store.d.ts +4 -1
  58. package/lib/memory-store.d.ts.map +1 -1
  59. package/lib/memory-store.js +10 -2
  60. package/lib/memory-store.js.map +1 -1
  61. package/lib/notifications/domain.d.ts +2 -1
  62. package/lib/notifications/domain.d.ts.map +1 -1
  63. package/lib/notifications/store.d.ts +8 -0
  64. package/lib/notifications/store.d.ts.map +1 -1
  65. package/lib/notifications/store.js +81 -17
  66. package/lib/notifications/store.js.map +1 -1
  67. package/lib/pendant/markdown.d.ts +6 -0
  68. package/lib/pendant/markdown.d.ts.map +1 -0
  69. package/lib/pendant/markdown.js +92 -0
  70. package/lib/pendant/markdown.js.map +1 -0
  71. package/lib/pendant/reader.d.ts.map +1 -1
  72. package/lib/pendant/reader.js +2 -1
  73. package/lib/pendant/reader.js.map +1 -1
  74. package/lib/pendant/widget.d.ts.map +1 -1
  75. package/lib/pendant/widget.js +5 -1
  76. package/lib/pendant/widget.js.map +1 -1
  77. package/lib/storage/atomic.d.ts +3 -0
  78. package/lib/storage/atomic.d.ts.map +1 -0
  79. package/lib/storage/atomic.js +35 -0
  80. package/lib/storage/atomic.js.map +1 -0
  81. package/lib/storage/bootstrap.d.ts +8 -0
  82. package/lib/storage/bootstrap.d.ts.map +1 -0
  83. package/lib/storage/bootstrap.js +31 -0
  84. package/lib/storage/bootstrap.js.map +1 -0
  85. package/lib/storage/coordinator.d.ts +36 -0
  86. package/lib/storage/coordinator.d.ts.map +1 -0
  87. package/lib/storage/coordinator.js +103 -0
  88. package/lib/storage/coordinator.js.map +1 -0
  89. package/lib/storage/layout.d.ts +13 -0
  90. package/lib/storage/layout.d.ts.map +1 -0
  91. package/lib/storage/layout.js +30 -0
  92. package/lib/storage/layout.js.map +1 -0
  93. package/lib/storage/lease.d.ts +5 -0
  94. package/lib/storage/lease.d.ts.map +1 -0
  95. package/lib/storage/lease.js +25 -0
  96. package/lib/storage/lease.js.map +1 -0
  97. package/lib/storage/legacy-backups.d.ts +3 -0
  98. package/lib/storage/legacy-backups.d.ts.map +1 -0
  99. package/lib/storage/legacy-backups.js +14 -0
  100. package/lib/storage/legacy-backups.js.map +1 -0
  101. package/lib/storage/migrate-layout.d.ts +18 -0
  102. package/lib/storage/migrate-layout.d.ts.map +1 -0
  103. package/lib/storage/migrate-layout.js +204 -0
  104. package/lib/storage/migrate-layout.js.map +1 -0
  105. package/lib/storage/migrations/index.d.ts +3 -0
  106. package/lib/storage/migrations/index.d.ts.map +1 -0
  107. package/lib/storage/migrations/index.js +4 -0
  108. package/lib/storage/migrations/index.js.map +1 -0
  109. package/lib/storage/migrations/registry.d.ts +19 -0
  110. package/lib/storage/migrations/registry.d.ts.map +1 -0
  111. package/lib/storage/migrations/registry.js +40 -0
  112. package/lib/storage/migrations/registry.js.map +1 -0
  113. package/lib/storage/migrations/v0-to-v1.d.ts +5 -0
  114. package/lib/storage/migrations/v0-to-v1.d.ts.map +1 -0
  115. package/lib/storage/migrations/v0-to-v1.js +11 -0
  116. package/lib/storage/migrations/v0-to-v1.js.map +1 -0
  117. package/lib/storage/notice.d.ts +4 -0
  118. package/lib/storage/notice.d.ts.map +1 -0
  119. package/lib/storage/notice.js +13 -0
  120. package/lib/storage/notice.js.map +1 -0
  121. package/lib/storage/preflight.d.ts +40 -0
  122. package/lib/storage/preflight.d.ts.map +1 -0
  123. package/lib/storage/preflight.js +208 -0
  124. package/lib/storage/preflight.js.map +1 -0
  125. package/lib/storage/safe-files.d.ts +6 -0
  126. package/lib/storage/safe-files.d.ts.map +1 -0
  127. package/lib/storage/safe-files.js +125 -0
  128. package/lib/storage/safe-files.js.map +1 -0
  129. package/lib/storage/source-archive.d.ts +14 -0
  130. package/lib/storage/source-archive.d.ts.map +1 -0
  131. package/lib/storage/source-archive.js +98 -0
  132. package/lib/storage/source-archive.js.map +1 -0
  133. package/lib/storage/split-state.d.ts +14 -0
  134. package/lib/storage/split-state.d.ts.map +1 -0
  135. package/lib/storage/split-state.js +107 -0
  136. package/lib/storage/split-state.js.map +1 -0
  137. package/lib/store.d.ts +5 -0
  138. package/lib/store.d.ts.map +1 -1
  139. package/lib/store.js +12 -1
  140. package/lib/store.js.map +1 -1
  141. package/lib/ui/storage-recovery-marker.d.ts +4 -0
  142. package/lib/ui/storage-recovery-marker.d.ts.map +1 -0
  143. package/lib/ui/storage-recovery-marker.js +19 -0
  144. package/lib/ui/storage-recovery-marker.js.map +1 -0
  145. package/lib/ui/storage-recovery.d.ts +20 -0
  146. package/lib/ui/storage-recovery.d.ts.map +1 -0
  147. package/lib/ui/storage-recovery.js +39 -0
  148. package/lib/ui/storage-recovery.js.map +1 -0
  149. package/lib/ui/storage-settings.d.ts +2 -0
  150. package/lib/ui/storage-settings.d.ts.map +1 -0
  151. package/lib/ui/storage-settings.js +90 -0
  152. package/lib/ui/storage-settings.js.map +1 -0
  153. package/lib/ui/workspace-navigation.d.ts +78 -0
  154. package/lib/ui/workspace-navigation.d.ts.map +1 -0
  155. package/lib/ui/workspace-navigation.js +28 -0
  156. package/lib/ui/workspace-navigation.js.map +1 -0
  157. package/package.json +5 -1
@@ -6,6 +6,8 @@ import { usePendantPlacement } from './use-placement.js';
6
6
  import { PendantReader } from './reader.js';
7
7
  import { usePendantSettings } from './use-settings.js';
8
8
  function messageLabel(notice) {
9
+ if (notice.kind === 'system')
10
+ return '需要升级迁移';
9
11
  if (notice.kind === 'reply')
10
12
  return '有新回复';
11
13
  if (notice.kind === 'task' && notice.title.startsWith('遇到阻塞 · '))
@@ -77,7 +79,9 @@ function ActivePendant({ controller, settings }) {
77
79
  const visit = async (item) => {
78
80
  setNavigationError('');
79
81
  try {
80
- if (item.routeId && item.sessionId)
82
+ if (item.kind === 'system' && item.action === 'storage-migration')
83
+ controller.open(undefined, { page: 'general' });
84
+ else if (item.routeId && item.sessionId)
81
85
  await controller.openSession(item.routeId, item.sessionId);
82
86
  else
83
87
  controller.open(item.companionId, { page: item.kind === 'task' ? 'board' : item.kind === 'schedule' ? 'schedules' : 'home', ...(item.taskId ? { taskId: item.taskId } : {}) });
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","sourceRoot":"","sources":["../../src/pendant/widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../../src/pendant/widget.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function syncDirectory(path: string): Promise<void>;
2
+ export declare function atomicJson(path: string, value: unknown): Promise<void>;
3
+ //# sourceMappingURL=atomic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../src/storage/atomic.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AACD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5E"}
@@ -0,0 +1,35 @@
1
+ import { mkdir, open, rename, rm } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ export async function syncDirectory(path) {
5
+ if (process.platform === 'win32')
6
+ return;
7
+ const file = await open(path, 'r');
8
+ try {
9
+ await file.sync();
10
+ }
11
+ finally {
12
+ await file.close();
13
+ }
14
+ }
15
+ export async function atomicJson(path, value) {
16
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
17
+ const temp = `${path}.${randomUUID()}.tmp`;
18
+ try {
19
+ const file = await open(temp, 'wx', 0o600);
20
+ try {
21
+ await file.writeFile(JSON.stringify(value) + '\n');
22
+ await file.sync();
23
+ }
24
+ finally {
25
+ await file.close();
26
+ }
27
+ // Never unlink the previous committed file as a Windows fallback.
28
+ await rename(temp, path);
29
+ await syncDirectory(dirname(path));
30
+ }
31
+ finally {
32
+ await rm(temp, { force: true }).catch(() => { });
33
+ }
34
+ }
35
+ //# sourceMappingURL=atomic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../src/storage/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAM;IACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAAC,IAAI,CAAC;QAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;IAAC,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAAC,CAAC;AAC9F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,KAAc;IAC3D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAA;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC;YAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAAC,CAAC;QAC5G,kEAAkE;QAClE,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACpC,CAAC;YAAS,CAAC;QAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface StorageConfig {
2
+ storageVersion: number;
3
+ transactionId: string;
4
+ workspaceRoot: string;
5
+ }
6
+ export declare const storageConfigPath: (statePath: string) => string;
7
+ export declare function readStorageConfig(statePath: string, root: string, configured?: number): Promise<StorageConfig>;
8
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/storage/bootstrap.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAAG,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;AACvG,eAAO,MAAM,iBAAiB,GAAI,WAAU,MAAM,WAA4D,CAAA;AAC9G,wBAAsB,iBAAiB,CAAC,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAC,UAAU,SAAE,GAAE,OAAO,CAAC,aAAa,CAAC,CAkBxG"}
@@ -0,0 +1,31 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { storageLayout, storageVersion, TARGET_STORAGE_VERSION } from './layout.js';
4
+ import { exists } from './safe-files.js';
5
+ export const storageConfigPath = (statePath) => join(dirname(resolve(statePath)), 'storage-config.json');
6
+ export async function readStorageConfig(statePath, root, configured = 0) {
7
+ const path = storageConfigPath(statePath);
8
+ if (!await exists(path)) {
9
+ if (configured !== 0)
10
+ throw Error('缺少迁移提交配置,不能手动启用新版目录');
11
+ return { storageVersion: 0, transactionId: '', workspaceRoot: resolve(root) };
12
+ }
13
+ const value = JSON.parse(await readFile(path, 'utf8'));
14
+ if (!value || typeof value !== 'object' || !Number.isInteger(value.storageVersion) || typeof value.transactionId !== 'string')
15
+ throw Error('存储配置无效,拒绝猜测数据版本');
16
+ const version = storageVersion(value.storageVersion);
17
+ if (version > TARGET_STORAGE_VERSION)
18
+ throw Error('数据版本高于插件支持版本,拒绝写入');
19
+ if (value.workspaceRoot !== resolve(root))
20
+ throw Error('数据根目录已变化,请恢复配置后再迁移,不能静默创建新伙伴数据');
21
+ if (configured > version)
22
+ throw Error('插件配置与已提交的数据版本不一致');
23
+ if (version === 1) {
24
+ const layout = storageLayout(resolve(statePath), resolve(root));
25
+ const manifest = JSON.parse(await readFile(join(layout.publicRoot, 'migration-owner.json'), 'utf8'));
26
+ if (manifest.transactionId !== value.transactionId)
27
+ throw Error('迁移配置与目录提交标记不一致');
28
+ }
29
+ return value;
30
+ }
31
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/storage/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAC,qBAAqB,CAAC,CAAA;AAC9G,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAgB,EAAC,IAAW,EAAC,UAAU,GAAC,CAAC;IAC/E,MAAM,IAAI,GAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACvC,IAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAG,UAAU,KAAG,CAAC;YAAC,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpD,OAAO,EAAC,cAAc,EAAC,CAAC,EAAC,aAAa,EAAC,EAAE,EAAC,aAAa,EAAC,OAAO,CAAC,IAAI,CAAC,EAAC,CAAA;IACxE,CAAC;IACD,MAAM,KAAK,GAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC,CAAkB,CAAA;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QAAE,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAC7J,MAAM,OAAO,GAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;IAClD,IAAG,OAAO,GAAC,sBAAsB;QAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAClE,IAAG,KAAK,CAAC,aAAa,KAAG,OAAO,CAAC,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACpF,IAAG,UAAU,GAAC,OAAO;QAAC,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrD,IAAG,OAAO,KAAG,CAAC,EAAE,CAAC;QACf,MAAM,MAAM,GAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,MAAM,QAAQ,GAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAC,sBAAsB,CAAC,EAAC,MAAM,CAAC,CAAC,CAAA;QAChG,IAAG,QAAQ,CAAC,aAAa,KAAG,KAAK,CAAC,aAAa;YAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { PartnerState } from '../domain.js';
2
+ import { StoragePreflight } from './preflight.js';
3
+ import { type MigrationResult } from './migrate-layout.js';
4
+ interface Ports {
5
+ busy(): boolean;
6
+ quiesce(): Promise<void>;
7
+ snapshot(): PartnerState;
8
+ restart(): Promise<void>;
9
+ report(error: unknown): void;
10
+ }
11
+ export declare class StorageCoordinator extends StoragePreflight {
12
+ private readonly configPath;
13
+ private readonly workspaceRoot;
14
+ private readonly currentVersion;
15
+ private readonly ports;
16
+ private migrating;
17
+ private requests;
18
+ enterRequest(): () => void;
19
+ get running(): boolean;
20
+ constructor(configPath: string, workspaceRoot: string, currentVersion: number, ports: Ports);
21
+ status(): Promise<{
22
+ currentVersion: number;
23
+ targetVersion: number;
24
+ running: boolean;
25
+ backupPath: string | undefined;
26
+ cleanupPending: number;
27
+ lastError: string | undefined;
28
+ }>;
29
+ private validate;
30
+ start(expectedVersion: number): void;
31
+ startCleanup(): void;
32
+ private reload;
33
+ migrate(expectedVersion: number): Promise<MigrationResult>;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/storage/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoD,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAQ5G,UAAU,KAAK;IAAG,IAAI,IAAG,OAAO,CAAC;IAAC,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,IAAG,YAAY,CAAC;IAAC,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,EAAC,OAAO,GAAE,IAAI,CAAA;CAAE;AACzI,qBAAa,kBAAmB,SAAQ,gBAAgB;IAS1C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAQ,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAQ,OAAO,CAAC,QAAQ,CAAC,cAAc;IAAQ,OAAO,CAAC,QAAQ,CAAC,KAAK;IARlJ,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAE;IAClB,YAAY,IAAG,MAAI,IAAI;IAKvB,IAAI,OAAO,IAAG,OAAO,CAAuB;gBACf,UAAU,EAAC,MAAM,EAAkB,aAAa,EAAC,MAAM,EAAkB,cAAc,EAAC,MAAM,EAAkB,KAAK,EAAC,KAAK;IAClJ,MAAM;;;;;;;;IAWZ,OAAO,CAAC,QAAQ;IAMhB,KAAK,CAAC,eAAe,EAAC,MAAM,GAAE,IAAI;IAMlC,YAAY,IAAG,IAAI;IAUnB,OAAO,CAAC,MAAM;IACR,OAAO,CAAC,eAAe,EAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAC;CAmB/D"}
@@ -0,0 +1,103 @@
1
+ import { StoragePreflight } from './preflight.js';
2
+ import { commitLayoutVersion } from './migrate-layout.js';
3
+ import { runMigrationPath, storageMigrations } from './migrations/index.js';
4
+ import { dirname, join } from 'node:path';
5
+ import { readFile } from 'node:fs/promises';
6
+ import { atomicJson } from './atomic.js';
7
+ import { readStorageConfig } from './bootstrap.js';
8
+ import { archiveRoot, cleanupArchivedSources } from './source-archive.js';
9
+ export class StorageCoordinator extends StoragePreflight {
10
+ configPath;
11
+ workspaceRoot;
12
+ currentVersion;
13
+ ports;
14
+ migrating = false;
15
+ requests = 0;
16
+ enterRequest() {
17
+ if (this.migrating)
18
+ throw Error('伙伴正在升级迁移,请稍后刷新');
19
+ this.requests++;
20
+ return () => { this.requests--; };
21
+ }
22
+ get running() { return this.migrating; }
23
+ constructor(configPath, workspaceRoot, currentVersion, ports) {
24
+ super(configPath, workspaceRoot, currentVersion, ports.snapshot);
25
+ this.configPath = configPath;
26
+ this.workspaceRoot = workspaceRoot;
27
+ this.currentVersion = currentVersion;
28
+ this.ports = ports;
29
+ }
30
+ async status() {
31
+ const config = await readStorageConfig(this.configPath, this.workspaceRoot);
32
+ let cleanupPending = 0, backupPath;
33
+ if (config.storageVersion === 1) {
34
+ backupPath = archiveRoot(this.configPath, config.transactionId);
35
+ try {
36
+ cleanupPending = JSON.parse(await readFile(join(backupPath, 'cleanup.json'), 'utf8')).pending;
37
+ }
38
+ catch {
39
+ cleanupPending = 1;
40
+ }
41
+ }
42
+ let lastError;
43
+ try {
44
+ const saved = JSON.parse(await readFile(join(dirname(this.configPath), 'storage-last-result.json'), 'utf8'));
45
+ if (saved.version === config.storageVersion)
46
+ lastError = saved.error;
47
+ }
48
+ catch { }
49
+ return { currentVersion: config.storageVersion, targetVersion: 1, running: this.migrating, backupPath, cleanupPending, lastError };
50
+ }
51
+ validate(expectedVersion) {
52
+ if (this.migrating)
53
+ throw Error('升级迁移正在执行,请勿重复提交');
54
+ if (this.requests > 1)
55
+ throw Error('还有页面请求正在处理,请稍后重试');
56
+ if (expectedVersion !== 0 || this.currentVersion !== expectedVersion)
57
+ throw Error('迁移版本已变化,请重新检查');
58
+ if (this.ports.busy())
59
+ throw Error('伙伴仍有会话、记忆整理或任务执行中,请结束后再迁移');
60
+ }
61
+ start(expectedVersion) {
62
+ this.validate(expectedVersion);
63
+ // Return HTTP 202 immediately; the runtime gate owns execution, not the
64
+ // lifetime of the browser/proxy request. Never start a second operation.
65
+ void this.migrate(expectedVersion).catch(error => this.ports.report(error));
66
+ }
67
+ startCleanup() {
68
+ if (this.migrating || this.requests > 1 || this.ports.busy())
69
+ throw Error('伙伴仍在执行或处理请求,请稍后清理');
70
+ if (this.currentVersion !== 1)
71
+ throw Error('尚未完成目录升级,不能清理');
72
+ this.migrating = true;
73
+ void (async () => {
74
+ await this.ports.quiesce();
75
+ const config = await readStorageConfig(this.configPath, this.workspaceRoot);
76
+ await cleanupArchivedSources(this.configPath, this.workspaceRoot, config.transactionId);
77
+ })().catch(error => this.ports.report(error)).finally(() => this.reload());
78
+ }
79
+ reload() { setTimeout(() => { void this.ports.restart().catch(error => this.ports.report(error)); }, 200); }
80
+ async migrate(expectedVersion) {
81
+ this.validate(expectedVersion);
82
+ this.migrating = true;
83
+ try {
84
+ await this.ports.quiesce();
85
+ const context = { statePath: this.configPath, root: this.workspaceRoot, state: this.ports.snapshot() };
86
+ await runMigrationPath(storageMigrations, 0, 1, context, (from, to) => commitLayoutVersion(context, from, to));
87
+ if (!context.result)
88
+ throw Error('迁移未返回结果');
89
+ return context.result;
90
+ }
91
+ catch (error) {
92
+ const config = await readStorageConfig(this.configPath, this.workspaceRoot).catch(() => undefined);
93
+ await atomicJson(join(dirname(this.configPath), 'storage-last-result.json'), { version: config?.storageVersion ?? this.currentVersion, error: error instanceof Error ? error.message : '迁移执行失败' }).catch(() => { });
94
+ throw error;
95
+ }
96
+ finally {
97
+ // Reload either the unchanged legacy layout or the committed new layout.
98
+ // Never resume old service objects after any migration failure.
99
+ this.reload();
100
+ }
101
+ }
102
+ }
103
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/storage/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Storage format versions are independent of package and PartnerState versions. */
2
+ export declare const TARGET_STORAGE_VERSION = 1;
3
+ export declare const READABLE_STORAGE_VERSION = 1;
4
+ export declare function storageVersion(value: unknown): number;
5
+ export declare function companionDirectory(root: string, id: string): string;
6
+ export declare function storageLayout(statePath: string, root: string): {
7
+ legacyPublic: string;
8
+ publicRoot: string;
9
+ legacySkills: string;
10
+ privateRoot: (id: string) => string;
11
+ legacyCompanion: (id: string) => string;
12
+ };
13
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/storage/layout.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,IAAI,CAAA;AACvC,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIrD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;sBAQvC,MAAM;0BACF,MAAM;EAE/B"}
@@ -0,0 +1,30 @@
1
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
2
+ /** Storage format versions are independent of package and PartnerState versions. */
3
+ export const TARGET_STORAGE_VERSION = 1;
4
+ export const READABLE_STORAGE_VERSION = 1;
5
+ export function storageVersion(value) {
6
+ if (value === undefined)
7
+ return 0;
8
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0)
9
+ throw new Error('storageVersion 必须是非负整数');
10
+ return value;
11
+ }
12
+ export function companionDirectory(root, id) {
13
+ if (!id || id === '.' || id === '..' || /[/\\\0:]/.test(id))
14
+ throw new Error('伙伴目录标识无效');
15
+ return join(resolve(root), 'partners', id);
16
+ }
17
+ export function storageLayout(statePath, root) {
18
+ // Relative paths must be resolved once at initialization, not per request.
19
+ if (!isAbsolute(statePath) || !isAbsolute(root))
20
+ throw new Error('存储检查要求绝对路径');
21
+ const legacyPublic = dirname(statePath);
22
+ return {
23
+ legacyPublic,
24
+ publicRoot: join(legacyPublic, 'storage-v1'),
25
+ legacySkills: join(root, 'partner-system', 'skills'),
26
+ privateRoot: (id) => join(companionDirectory(root, id), '.partner'),
27
+ legacyCompanion: (id) => companionDirectory(root, id),
28
+ };
29
+ }
30
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/storage/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE9D,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AACvC,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAEzC,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACrH,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,EAAU;IACzD,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;IACxF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAY;IAC3D,2EAA2E;IAC3E,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACvC,OAAO;QACL,YAAY;QACZ,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;QAC5C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC;QACpD,WAAW,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC;QAC3E,eAAe,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;KAC9D,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** OS-backed SQLite lock: another process/container cannot use the same plugin
2
+ * data concurrently; a process crash releases it without stale PID lock files.
3
+ */
4
+ export declare function acquireStorageLease(statePath: string): Promise<() => void>;
5
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../src/storage/lease.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAC,MAAM,GAAE,OAAO,CAAC,MAAI,IAAI,CAAC,CAO5E"}
@@ -0,0 +1,25 @@
1
+ import { mkdir, chmod } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { DatabaseSync } from 'node:sqlite';
4
+ /** OS-backed SQLite lock: another process/container cannot use the same plugin
5
+ * data concurrently; a process crash releases it without stale PID lock files.
6
+ */
7
+ export async function acquireStorageLease(statePath) {
8
+ const directory = dirname(resolve(statePath));
9
+ await mkdir(directory, { recursive: true, mode: 0o700 });
10
+ const path = join(directory, 'storage-runtime.sqlite'), db = new DatabaseSync(path);
11
+ try {
12
+ await chmod(path, 0o600);
13
+ db.exec('PRAGMA busy_timeout=0; BEGIN EXCLUSIVE');
14
+ }
15
+ catch {
16
+ db.close();
17
+ throw Error('该伙伴数据目录已被另一个插件实例使用,拒绝并发运行或迁移');
18
+ }
19
+ let closed = false;
20
+ return () => { if (!closed) {
21
+ closed = true;
22
+ db.close();
23
+ } };
24
+ }
25
+ //# sourceMappingURL=lease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.js","sourceRoot":"","sources":["../../src/storage/lease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAgB;IACxD,MAAM,SAAS,GAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAAA,MAAM,KAAK,CAAC,SAAS,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,CAAC,CAAA;IAC9F,MAAM,IAAI,GAAC,IAAI,CAAC,SAAS,EAAC,wBAAwB,CAAC,EAAC,EAAE,GAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;IAC7E,IAAI,CAAC;QAAA,MAAM,KAAK,CAAC,IAAI,EAAC,KAAK,CAAC,CAAC;QAAA,EAAE,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IAAA,CAAC;IAC/E,MAAK,CAAC;QAAA,EAAE,CAAC,KAAK,EAAE,CAAC;QAAA,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAAA,CAAC;IAC7D,IAAI,MAAM,GAAC,KAAK,CAAA;IAChB,OAAO,GAAE,EAAE,GAAC,IAAG,CAAC,MAAM,EAAC,CAAC;QAAA,MAAM,GAAC,IAAI,CAAC;QAAA,EAAE,CAAC,KAAK,EAAE,CAAA;IAAA,CAAC,CAAA,CAAC,CAAA;AAClD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const isLegacyMemoryBackup: (name: string) => boolean;
2
+ export declare function legacyMemoryBackups(root: string): Promise<string[]>;
3
+ //# sourceMappingURL=legacy-backups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-backups.d.ts","sourceRoot":"","sources":["../../src/storage/legacy-backups.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,OAAiF,CAAA;AACrI,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGzE"}
@@ -0,0 +1,14 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ // Only known legacy naming families; never sweep arbitrary user documents.
3
+ export const isLegacyMemoryBackup = (name) => /^memory[-_](?:backup|back)(?:[-_][a-z0-9][a-z0-9._-]*)?$/i.test(name);
4
+ export async function legacyMemoryBackups(root) {
5
+ try {
6
+ return (await readdir(root)).filter(isLegacyMemoryBackup).sort();
7
+ }
8
+ catch (error) {
9
+ if (error.code === 'ENOENT')
10
+ return [];
11
+ throw error;
12
+ }
13
+ }
14
+ //# sourceMappingURL=legacy-backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-backups.js","sourceRoot":"","sources":["../../src/storage/legacy-backups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,2DAA2D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrI,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,IAAI,CAAC;QAAC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAA;IAAC,CAAC;IACxE,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAAC,MAAM,KAAK,CAAA;IAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { PartnerState } from '../domain.js';
2
+ export interface MigrationResult {
3
+ storageVersion: number;
4
+ backupPath: string;
5
+ retainedLegacy: boolean;
6
+ cleanupPending?: number;
7
+ }
8
+ export interface LayoutMigrationContext {
9
+ statePath: string;
10
+ root: string;
11
+ state: PartnerState;
12
+ result?: MigrationResult;
13
+ }
14
+ /** Called only after every legacy writer has been stopped and drained. */
15
+ export declare function migrateLayout(statePath: string, root: string, state: PartnerState): Promise<MigrationResult>;
16
+ export declare function verifyInstalledLayout(context: LayoutMigrationContext): Promise<void>;
17
+ export declare function commitLayoutVersion(context: LayoutMigrationContext, expected: number, next: number): Promise<void>;
18
+ //# sourceMappingURL=migrate-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-layout.d.ts","sourceRoot":"","sources":["../../src/storage/migrate-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAYhD,MAAM,WAAW,eAAe;IAAG,cAAc,EAAC,MAAM,CAAC;IAAC,UAAU,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,OAAO,CAAC;IAAC,cAAc,CAAC,EAAC,MAAM,CAAA;CAAE;AAC7H,MAAM,WAAW,sBAAsB;IAAG,SAAS,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,YAAY,CAAC;IAAC,MAAM,CAAC,EAAC,eAAe,CAAA;CAAE;AACtH,0EAA0E;AAC1E,wBAAsB,aAAa,CAAC,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,YAAY,GAAE,OAAO,CAAC,eAAe,CAAC,CAkF5G;AACD,wBAAsB,qBAAqB,CAAC,OAAO,EAAC,sBAAsB,GAAE,OAAO,CAAC,IAAI,CAAC,CAUxF;AACD,wBAAsB,mBAAmB,CAAC,OAAO,EAAC,sBAAsB,EAAC,QAAQ,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,CAiBlH"}