@liangjie559567/ultrapower 7.2.0 → 7.4.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 (92) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/agents/AGENTS.md +1 -1
  4. package/bridge/AGENTS.md +1 -1
  5. package/bridge/codex-server.cjs +2 -2
  6. package/bridge/gemini-server.cjs +1 -1
  7. package/bridge/mcp-server.cjs +17 -1
  8. package/commands/AGENTS.md +1 -1
  9. package/dist/cli/utils/setup.d.ts.map +1 -1
  10. package/dist/cli/utils/setup.js +19 -1
  11. package/dist/cli/utils/setup.js.map +1 -1
  12. package/dist/cli/utils/update.d.ts.map +1 -1
  13. package/dist/cli/utils/update.js +3 -1
  14. package/dist/cli/utils/update.js.map +1 -1
  15. package/dist/features/mcp-autodiscovery/capability-matcher.d.ts +17 -0
  16. package/dist/features/mcp-autodiscovery/capability-matcher.d.ts.map +1 -0
  17. package/dist/features/mcp-autodiscovery/capability-matcher.js +26 -0
  18. package/dist/features/mcp-autodiscovery/capability-matcher.js.map +1 -0
  19. package/dist/features/mcp-autodiscovery/config-injector.d.ts +11 -0
  20. package/dist/features/mcp-autodiscovery/config-injector.d.ts.map +1 -0
  21. package/dist/features/mcp-autodiscovery/config-injector.js +28 -0
  22. package/dist/features/mcp-autodiscovery/config-injector.js.map +1 -0
  23. package/dist/features/mcp-autodiscovery/index.d.ts +6 -0
  24. package/dist/features/mcp-autodiscovery/index.d.ts.map +1 -0
  25. package/dist/features/mcp-autodiscovery/index.js +5 -0
  26. package/dist/features/mcp-autodiscovery/index.js.map +1 -0
  27. package/dist/features/mcp-autodiscovery/installer.d.ts +10 -0
  28. package/dist/features/mcp-autodiscovery/installer.d.ts.map +1 -0
  29. package/dist/features/mcp-autodiscovery/installer.js +21 -0
  30. package/dist/features/mcp-autodiscovery/installer.js.map +1 -0
  31. package/dist/features/mcp-autodiscovery/registry-client.d.ts +9 -0
  32. package/dist/features/mcp-autodiscovery/registry-client.d.ts.map +1 -0
  33. package/dist/features/mcp-autodiscovery/registry-client.js +34 -0
  34. package/dist/features/mcp-autodiscovery/registry-client.js.map +1 -0
  35. package/dist/features/mcp-autodiscovery/types.d.ts +19 -0
  36. package/dist/features/mcp-autodiscovery/types.d.ts.map +1 -0
  37. package/dist/features/mcp-autodiscovery/types.js +2 -0
  38. package/dist/features/mcp-autodiscovery/types.js.map +1 -0
  39. package/dist/features/unified-context/context-manager.d.ts +24 -0
  40. package/dist/features/unified-context/context-manager.d.ts.map +1 -0
  41. package/dist/features/unified-context/context-manager.js +59 -0
  42. package/dist/features/unified-context/context-manager.js.map +1 -0
  43. package/dist/features/unified-context/index.d.ts +3 -0
  44. package/dist/features/unified-context/index.d.ts.map +1 -0
  45. package/dist/features/unified-context/index.js +3 -0
  46. package/dist/features/unified-context/index.js.map +1 -0
  47. package/dist/features/unified-context/mcp-memory-client.d.ts +14 -0
  48. package/dist/features/unified-context/mcp-memory-client.d.ts.map +1 -0
  49. package/dist/features/unified-context/mcp-memory-client.js +68 -0
  50. package/dist/features/unified-context/mcp-memory-client.js.map +1 -0
  51. package/dist/lib/atomic-write.d.ts.map +1 -1
  52. package/dist/lib/atomic-write.js +21 -2
  53. package/dist/lib/atomic-write.js.map +1 -1
  54. package/dist/lib/upgrade.d.ts +12 -0
  55. package/dist/lib/upgrade.d.ts.map +1 -0
  56. package/dist/lib/upgrade.js +119 -0
  57. package/dist/lib/upgrade.js.map +1 -0
  58. package/dist/mcp/adapters/memory-adapter.d.ts +2 -2
  59. package/dist/mcp/adapters/state-adapter.d.ts +4 -4
  60. package/dist/mcp/adapters/trace-adapter.d.ts +1 -1
  61. package/dist/team/message-router.d.ts +2 -2
  62. package/dist/team/message-router.d.ts.map +1 -1
  63. package/dist/team/message-router.js +4 -4
  64. package/dist/team/message-router.js.map +1 -1
  65. package/dist/team/task-router.d.ts +1 -1
  66. package/dist/team/task-router.d.ts.map +1 -1
  67. package/dist/team/task-router.js +2 -2
  68. package/dist/team/task-router.js.map +1 -1
  69. package/dist/team/unified-team.d.ts +4 -1
  70. package/dist/team/unified-team.d.ts.map +1 -1
  71. package/dist/team/unified-team.js +17 -8
  72. package/dist/team/unified-team.js.map +1 -1
  73. package/docs/AGENTS.md +4 -3
  74. package/docs/CLAUDE.md +1 -1
  75. package/docs/INSTALL.md +47 -7
  76. package/docs/REFERENCE.md +1 -1
  77. package/docs/UPGRADE.md +88 -0
  78. package/docs/UPGRADE_VERIFICATION.md +6 -6
  79. package/docs/dev-standards/AGENTS.md +68 -0
  80. package/docs/mcp-intelligent-orchestration.md +302 -0
  81. package/docs/migration/v6.0.0.md +2 -2
  82. package/docs/plans/2026-03-14-mcp-intelligent-orchestration.md +679 -0
  83. package/docs/standards/README.md +1 -1
  84. package/hooks/AGENTS.md +1 -1
  85. package/package.json +1 -1
  86. package/scripts/AGENTS.md +1 -1
  87. package/scripts/plugin-setup.mjs +23 -22
  88. package/scripts/upgrade-complete.sh +34 -0
  89. package/scripts/upgrade.mjs +158 -0
  90. package/skills/AGENTS.md +3 -2
  91. package/templates/AGENTS.md +1 -1
  92. package/templates/hooks/session-start.mjs +2 -2
@@ -20198,7 +20198,23 @@ function atomicWriteFileSync(filePath, content) {
20198
20198
  fsSync.fsyncSync(fd);
20199
20199
  fsSync.closeSync(fd);
20200
20200
  fd = null;
20201
- fsSync.renameSync(tempPath, filePath);
20201
+ let renamed = false;
20202
+ for (let attempt = 0; attempt < 3 && !renamed; attempt++) {
20203
+ try {
20204
+ fsSync.renameSync(tempPath, filePath);
20205
+ renamed = true;
20206
+ } catch (err) {
20207
+ const error2 = err;
20208
+ if (error2.code === "EPERM" && attempt < 2) {
20209
+ const delayMs = 50 * (attempt + 1);
20210
+ const start = Date.now();
20211
+ while (Date.now() - start < delayMs) {
20212
+ }
20213
+ } else {
20214
+ throw err;
20215
+ }
20216
+ }
20217
+ }
20202
20218
  success = true;
20203
20219
  try {
20204
20220
  const dirFd = fsSync.openSync(dir, "r");
@@ -1,5 +1,5 @@
1
1
  <!-- Parent: ../AGENTS.md -->
2
- <!-- Generated: 2026-02-27 | Updated: 2026-02-27 -->
2
+ <!-- Generated: 2026-03-14 | Updated: 2026-03-14 -->
3
3
 
4
4
  # commands/
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/setup.ts"],"names":[],"mappings":"AAAA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/setup.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBlD"}
@@ -1,4 +1,22 @@
1
+ import { install } from '../../installer/index.js';
2
+ import { createLogger } from '../../lib/unified-logger.js';
3
+ const logger = createLogger('cli:setup');
1
4
  export async function setupCommand() {
2
- console.log('Setup command - implementation pending');
5
+ logger.info('Syncing OMC components...');
6
+ const result = install({
7
+ force: true,
8
+ verbose: true,
9
+ skipClaudeCheck: true
10
+ });
11
+ if (result.success) {
12
+ logger.info('✓ Setup complete');
13
+ }
14
+ else {
15
+ logger.error('Setup failed:', result.message);
16
+ if (result.errors.length > 0) {
17
+ result.errors.forEach(err => logger.error(' -', err));
18
+ }
19
+ process.exit(1);
20
+ }
3
21
  }
4
22
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/utils/setup.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/utils/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC;QACrB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/update.ts"],"names":[],"mappings":"AAAA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/update.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD"}
@@ -1,4 +1,6 @@
1
+ import { performUpgrade } from '../../lib/upgrade.js';
1
2
  export async function updateCommand() {
2
- console.log('Update command - implementation pending');
3
+ const result = await performUpgrade();
4
+ console.log(`\n✅ ${result.message}`);
3
5
  }
4
6
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/utils/update.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/utils/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { MCPServerDescriptor } from './types.js';
2
+ interface TaskRequirement {
3
+ taskDescription: string;
4
+ requiredCapabilities: string[];
5
+ }
6
+ interface Match {
7
+ server: MCPServerDescriptor;
8
+ confidence: number;
9
+ matchedCapabilities: string[];
10
+ }
11
+ export declare class CapabilityMatcher {
12
+ private registryClient;
13
+ constructor();
14
+ findMatches(requirement: TaskRequirement): Promise<Match[]>;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=capability-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-matcher.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/capability-matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,UAAU,eAAe;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,UAAU,KAAK;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAoB;;IAMpC,WAAW,CAAC,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAuBlE"}
@@ -0,0 +1,26 @@
1
+ import { MCPRegistryClient } from './registry-client.js';
2
+ export class CapabilityMatcher {
3
+ registryClient;
4
+ constructor() {
5
+ this.registryClient = new MCPRegistryClient();
6
+ }
7
+ async findMatches(requirement) {
8
+ const allServers = await this.registryClient.listServers();
9
+ const matches = [];
10
+ for (const server of allServers) {
11
+ if (!server.capabilities || server.capabilities.length === 0)
12
+ continue;
13
+ const matchedCaps = requirement.requiredCapabilities.filter(cap => server.capabilities.some(sc => sc.includes(cap) || cap.includes(sc)));
14
+ if (matchedCaps.length > 0) {
15
+ const confidence = matchedCaps.length / requirement.requiredCapabilities.length;
16
+ matches.push({
17
+ server,
18
+ confidence,
19
+ matchedCapabilities: matchedCaps
20
+ });
21
+ }
22
+ }
23
+ return matches.sort((a, b) => b.confidence - a.confidence);
24
+ }
25
+ }
26
+ //# sourceMappingURL=capability-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-matcher.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/capability-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAczD,MAAM,OAAO,iBAAiB;IACpB,cAAc,CAAoB;IAE1C;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAA4B;QAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAY,EAAE,CAAC;QAE5B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEvE,MAAM,WAAW,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,CACzD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC5E,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM;oBACN,UAAU;oBACV,mBAAmB,EAAE,WAAW;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { MCPServerDescriptor } from './types.js';
2
+ interface MCPConfig {
3
+ command: string;
4
+ args: string[];
5
+ env?: Record<string, string>;
6
+ }
7
+ export declare class ConfigInjector {
8
+ generateConfig(server: Pick<MCPServerDescriptor, 'id' | 'name' | 'package'>): MCPConfig;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=config-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-injector.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/config-injector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAID,qBAAa,cAAc;IACzB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS;CA4BxF"}
@@ -0,0 +1,28 @@
1
+ const PACKAGE_NAME_REGEX = /^[@a-z0-9-_./]+$/i;
2
+ export class ConfigInjector {
3
+ generateConfig(server) {
4
+ if (!server.package) {
5
+ throw new Error('Package info required');
6
+ }
7
+ if (!PACKAGE_NAME_REGEX.test(server.package.name)) {
8
+ throw new Error(`Invalid package name: ${server.package.name}`);
9
+ }
10
+ if (server.package.type === 'uvx') {
11
+ return {
12
+ command: 'uvx',
13
+ args: [server.package.name]
14
+ };
15
+ }
16
+ if (server.package.type === 'npm') {
17
+ return {
18
+ command: 'node',
19
+ args: [server.package.name]
20
+ };
21
+ }
22
+ return {
23
+ command: 'docker',
24
+ args: ['run', server.package.name]
25
+ };
26
+ }
27
+ }
28
+ //# sourceMappingURL=config-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-injector.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/config-injector.ts"],"names":[],"mappings":"AAQA,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAE/C,MAAM,OAAO,cAAc;IACzB,cAAc,CAAC,MAA4D;QACzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC5B,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aAC5B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export { MCPRegistryClient } from './registry-client.js';
2
+ export { CapabilityMatcher } from './capability-matcher.js';
3
+ export { MCPInstaller } from './installer.js';
4
+ export { ConfigInjector } from './config-injector.js';
5
+ export type { MCPServerDescriptor, CapabilityQuery } from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { MCPRegistryClient } from './registry-client.js';
2
+ export { CapabilityMatcher } from './capability-matcher.js';
3
+ export { MCPInstaller } from './installer.js';
4
+ export { ConfigInjector } from './config-injector.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface PackageInfo {
2
+ type: 'npm' | 'uvx' | 'docker';
3
+ name: string;
4
+ }
5
+ export declare class MCPInstaller {
6
+ isOfficialServer(packageName: string): boolean;
7
+ getInstallCommand(pkg: PackageInfo): string;
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/installer.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,YAAY;IACvB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAI9C,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM;CAS5C"}
@@ -0,0 +1,21 @@
1
+ const OFFICIAL_SERVERS = [
2
+ '@modelcontextprotocol/server-memory',
3
+ '@modelcontextprotocol/server-filesystem',
4
+ 'mcp-server-fetch',
5
+ 'mcp-server-git'
6
+ ];
7
+ export class MCPInstaller {
8
+ isOfficialServer(packageName) {
9
+ return OFFICIAL_SERVERS.includes(packageName);
10
+ }
11
+ getInstallCommand(pkg) {
12
+ if (pkg.type === 'npm') {
13
+ return `npm install -g ${pkg.name}`;
14
+ }
15
+ if (pkg.type === 'uvx') {
16
+ return `uvx ${pkg.name}`;
17
+ }
18
+ return `docker pull ${pkg.name}`;
19
+ }
20
+ }
21
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/installer.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG;IACvB,qCAAqC;IACrC,yCAAyC;IACzC,kBAAkB;IAClB,gBAAgB;CACjB,CAAC;AAOF,MAAM,OAAO,YAAY;IACvB,gBAAgB,CAAC,WAAmB;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,iBAAiB,CAAC,GAAgB;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,kBAAkB,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { MCPServerDescriptor, CapabilityQuery } from './types.js';
2
+ export declare class MCPRegistryClient {
3
+ private cache;
4
+ private cacheExpiry;
5
+ listServers(query?: CapabilityQuery): Promise<MCPServerDescriptor[]>;
6
+ searchByCapability(capability: string): Promise<MCPServerDescriptor[]>;
7
+ getServerById(id: string): Promise<MCPServerDescriptor | null>;
8
+ }
9
+ //# sourceMappingURL=registry-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/registry-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIvE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,WAAW,CAAW;IAExB,WAAW,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAsBpE,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAItE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;CAIrE"}
@@ -0,0 +1,34 @@
1
+ const REGISTRY_API = 'https://registry.modelcontextprotocol.io/v0.1';
2
+ export class MCPRegistryClient {
3
+ cache = new Map();
4
+ cacheExpiry = 3600000; // 1 hour
5
+ async listServers(query) {
6
+ const cacheKey = JSON.stringify(query || {});
7
+ const cached = this.cache.get(cacheKey);
8
+ if (cached)
9
+ return cached;
10
+ const params = new URLSearchParams();
11
+ if (query?.capability)
12
+ params.set('capability', query.capability);
13
+ if (query?.search)
14
+ params.set('search', query.search);
15
+ if (query?.official !== undefined)
16
+ params.set('official', String(query.official));
17
+ const response = await fetch(`${REGISTRY_API}/servers?${params}`);
18
+ if (!response.ok) {
19
+ throw new Error(`Registry API error: ${response.status} ${response.statusText}`);
20
+ }
21
+ const data = await response.json();
22
+ this.cache.set(cacheKey, data.servers);
23
+ setTimeout(() => this.cache.delete(cacheKey), this.cacheExpiry);
24
+ return data.servers;
25
+ }
26
+ async searchByCapability(capability) {
27
+ return this.listServers({ capability });
28
+ }
29
+ async getServerById(id) {
30
+ const servers = await this.listServers();
31
+ return servers.find(s => s.id === id) || null;
32
+ }
33
+ }
34
+ //# sourceMappingURL=registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/registry-client.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,+CAA+C,CAAC;AAErE,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAuC,IAAI,GAAG,EAAE,CAAC;IACtD,WAAW,GAAG,OAAO,CAAC,CAAC,SAAS;IAExC,KAAK,CAAC,WAAW,CAAC,KAAuB;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,EAAE,UAAU;YAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAClE,IAAI,KAAK,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAElF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,YAAY,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwC,CAAC;QAEzE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export interface MCPServerDescriptor {
2
+ id: string;
3
+ name: string;
4
+ version: string;
5
+ description: string;
6
+ capabilities: string[];
7
+ repository?: string;
8
+ package?: {
9
+ type: 'npm' | 'uvx' | 'docker';
10
+ name: string;
11
+ };
12
+ official: boolean;
13
+ }
14
+ export interface CapabilityQuery {
15
+ capability?: string;
16
+ search?: string;
17
+ official?: boolean;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/features/mcp-autodiscovery/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ interface AgentContext {
2
+ [key: string]: unknown;
3
+ }
4
+ interface Relation {
5
+ from: string;
6
+ type: string;
7
+ to: string;
8
+ }
9
+ export declare class UnifiedContextManager {
10
+ private memoryClient;
11
+ private initialized;
12
+ private contextCache;
13
+ private relationsCache;
14
+ constructor();
15
+ initialize(): Promise<void>;
16
+ setAgentContext(agentId: string, context: AgentContext): Promise<void>;
17
+ getSharedContext(): Promise<Record<string, AgentContext>>;
18
+ getAllAgentContexts(): Promise<AgentContext[]>;
19
+ createRelation(from: string, type: string, to: string): Promise<void>;
20
+ getRelations(entityId: string): Promise<Relation[]>;
21
+ shutdown(): Promise<void>;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=context-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../../../src/features/unified-context/context-manager.ts"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,cAAc,CAAsC;;IAMtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IASzD,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAK9C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKnD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAMhC"}
@@ -0,0 +1,59 @@
1
+ import { MCPMemoryClient } from './mcp-memory-client.js';
2
+ export class UnifiedContextManager {
3
+ memoryClient;
4
+ initialized = false;
5
+ contextCache = new Map();
6
+ relationsCache = new Map();
7
+ constructor() {
8
+ this.memoryClient = new MCPMemoryClient();
9
+ }
10
+ async initialize() {
11
+ await this.memoryClient.connect();
12
+ this.initialized = true;
13
+ }
14
+ async setAgentContext(agentId, context) {
15
+ if (!this.initialized)
16
+ throw new Error('Not initialized');
17
+ await this.memoryClient.storeContext(`agent-context-${agentId}`, context);
18
+ this.contextCache.set(agentId, context);
19
+ }
20
+ async getSharedContext() {
21
+ if (!this.initialized)
22
+ throw new Error('Not initialized');
23
+ const result = {};
24
+ for (const [agentId, context] of this.contextCache.entries()) {
25
+ result[agentId] = context;
26
+ }
27
+ return result;
28
+ }
29
+ async getAllAgentContexts() {
30
+ if (!this.initialized)
31
+ throw new Error('Not initialized');
32
+ return Array.from(this.contextCache.values());
33
+ }
34
+ async createRelation(from, type, to) {
35
+ if (!this.initialized)
36
+ throw new Error('Not initialized');
37
+ await this.memoryClient.createEntity({
38
+ name: `relation-${from}-${to}`,
39
+ type: 'relation',
40
+ observations: [JSON.stringify({ from, type, to })]
41
+ });
42
+ if (!this.relationsCache.has(from)) {
43
+ this.relationsCache.set(from, []);
44
+ }
45
+ this.relationsCache.get(from).push({ from, type, to });
46
+ }
47
+ async getRelations(entityId) {
48
+ if (!this.initialized)
49
+ throw new Error('Not initialized');
50
+ return this.relationsCache.get(entityId) || [];
51
+ }
52
+ async shutdown() {
53
+ await this.memoryClient.disconnect();
54
+ this.initialized = false;
55
+ this.contextCache.clear();
56
+ this.relationsCache.clear();
57
+ }
58
+ }
59
+ //# sourceMappingURL=context-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../../src/features/unified-context/context-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { MCPMemoryClient } from './mcp-memory-client.js';
2
+ export { UnifiedContextManager } from './context-manager.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/unified-context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MCPMemoryClient } from './mcp-memory-client.js';
2
+ export { UnifiedContextManager } from './context-manager.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/unified-context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare class MCPMemoryClient {
2
+ private client;
3
+ private transport;
4
+ connect(): Promise<void>;
5
+ storeContext(key: string, value: unknown): Promise<void>;
6
+ getContext(key: string): Promise<unknown>;
7
+ createEntity(entity: {
8
+ name: string;
9
+ type: string;
10
+ observations: string[];
11
+ }): Promise<string>;
12
+ disconnect(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=mcp-memory-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-memory-client.d.ts","sourceRoot":"","sources":["../../../src/features/unified-context/mcp-memory-client.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IAEhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAexD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAezC,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAMlC"}
@@ -0,0 +1,68 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ export class MCPMemoryClient {
4
+ client = null;
5
+ transport = null;
6
+ async connect() {
7
+ this.transport = new StdioClientTransport({
8
+ command: 'npx',
9
+ args: ['-y', '@modelcontextprotocol/server-memory']
10
+ });
11
+ this.client = new Client({
12
+ name: 'ultrapower-memory-client',
13
+ version: '1.0.0'
14
+ }, {
15
+ capabilities: {}
16
+ });
17
+ await this.client.connect(this.transport);
18
+ }
19
+ async storeContext(key, value) {
20
+ if (!this.client)
21
+ throw new Error('Not connected');
22
+ await this.client.callTool({
23
+ name: 'create_entities',
24
+ arguments: {
25
+ entities: [{
26
+ name: key,
27
+ entityType: 'context',
28
+ observations: [JSON.stringify(value)]
29
+ }]
30
+ }
31
+ });
32
+ }
33
+ async getContext(key) {
34
+ if (!this.client)
35
+ throw new Error('Not connected');
36
+ const result = await this.client.callTool({
37
+ name: 'search_nodes',
38
+ arguments: { query: key }
39
+ });
40
+ const structured = result.structuredContent;
41
+ if (structured?.entities?.[0]?.observations?.[0]) {
42
+ return JSON.parse(structured.entities[0].observations[0]);
43
+ }
44
+ return null;
45
+ }
46
+ async createEntity(entity) {
47
+ if (!this.client)
48
+ throw new Error('Not connected');
49
+ await this.client.callTool({
50
+ name: 'create_entities',
51
+ arguments: {
52
+ entities: [{
53
+ name: entity.name,
54
+ entityType: entity.type,
55
+ observations: entity.observations
56
+ }]
57
+ }
58
+ });
59
+ return entity.name;
60
+ }
61
+ async disconnect() {
62
+ if (this.client) {
63
+ await this.client.close();
64
+ this.client = null;
65
+ }
66
+ }
67
+ }
68
+ //# sourceMappingURL=mcp-memory-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-memory-client.js","sourceRoot":"","sources":["../../../src/features/unified-context/mcp-memory-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,MAAM,OAAO,eAAe;IAClB,MAAM,GAAkB,IAAI,CAAC;IAC7B,SAAS,GAAgC,IAAI,CAAC;IAEtD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACxC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,qCAAqC,CAAC;SACpD,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,OAAO;SACjB,EAAE;YACD,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,KAAc;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE;gBACT,QAAQ,EAAE,CAAC;wBACT,IAAI,EAAE,GAAG;wBACT,UAAU,EAAE,SAAS;wBACrB,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;qBACtC,CAAC;aACH;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACxC,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SAC1B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAkF,CAAC;QAC7G,IAAI,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAIlB;QACC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzB,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE;gBACT,QAAQ,EAAE,CAAC;wBACT,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;wBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;qBAClC,CAAC;aACH;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../../src/lib/atomic-write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAe/C;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA+CvE;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA2D3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAGzE;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAmBzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,UAAU,SAAI,GACb,IAAI,CAiBN"}
1
+ {"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../../src/lib/atomic-write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAe/C;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA+CvE;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA4E3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAGzE;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAmBzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,UAAU,SAAI,GACb,IAAI,CAiBN"}
@@ -169,8 +169,27 @@ export function atomicWriteFileSync(filePath, content) {
169
169
  // Close before rename
170
170
  fsSync.closeSync(fd);
171
171
  fd = null;
172
- // Atomic rename - replaces target file if it exists
173
- fsSync.renameSync(tempPath, filePath);
172
+ // Atomic rename with retry on Windows EPERM
173
+ let renamed = false;
174
+ for (let attempt = 0; attempt < 3 && !renamed; attempt++) {
175
+ try {
176
+ fsSync.renameSync(tempPath, filePath);
177
+ renamed = true;
178
+ }
179
+ catch (err) {
180
+ const error = err;
181
+ if (error.code === 'EPERM' && attempt < 2) {
182
+ const delayMs = 50 * (attempt + 1);
183
+ const start = Date.now();
184
+ while (Date.now() - start < delayMs) {
185
+ // Busy wait for Windows file lock retry
186
+ }
187
+ }
188
+ else {
189
+ throw err;
190
+ }
191
+ }
192
+ }
174
193
  success = true;
175
194
  // Best-effort directory fsync to ensure rename is durable
176
195
  try {