@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/agents/AGENTS.md +1 -1
- package/bridge/AGENTS.md +1 -1
- package/bridge/codex-server.cjs +2 -2
- package/bridge/gemini-server.cjs +1 -1
- package/bridge/mcp-server.cjs +17 -1
- package/commands/AGENTS.md +1 -1
- package/dist/cli/utils/setup.d.ts.map +1 -1
- package/dist/cli/utils/setup.js +19 -1
- package/dist/cli/utils/setup.js.map +1 -1
- package/dist/cli/utils/update.d.ts.map +1 -1
- package/dist/cli/utils/update.js +3 -1
- package/dist/cli/utils/update.js.map +1 -1
- package/dist/features/mcp-autodiscovery/capability-matcher.d.ts +17 -0
- package/dist/features/mcp-autodiscovery/capability-matcher.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/capability-matcher.js +26 -0
- package/dist/features/mcp-autodiscovery/capability-matcher.js.map +1 -0
- package/dist/features/mcp-autodiscovery/config-injector.d.ts +11 -0
- package/dist/features/mcp-autodiscovery/config-injector.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/config-injector.js +28 -0
- package/dist/features/mcp-autodiscovery/config-injector.js.map +1 -0
- package/dist/features/mcp-autodiscovery/index.d.ts +6 -0
- package/dist/features/mcp-autodiscovery/index.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/index.js +5 -0
- package/dist/features/mcp-autodiscovery/index.js.map +1 -0
- package/dist/features/mcp-autodiscovery/installer.d.ts +10 -0
- package/dist/features/mcp-autodiscovery/installer.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/installer.js +21 -0
- package/dist/features/mcp-autodiscovery/installer.js.map +1 -0
- package/dist/features/mcp-autodiscovery/registry-client.d.ts +9 -0
- package/dist/features/mcp-autodiscovery/registry-client.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/registry-client.js +34 -0
- package/dist/features/mcp-autodiscovery/registry-client.js.map +1 -0
- package/dist/features/mcp-autodiscovery/types.d.ts +19 -0
- package/dist/features/mcp-autodiscovery/types.d.ts.map +1 -0
- package/dist/features/mcp-autodiscovery/types.js +2 -0
- package/dist/features/mcp-autodiscovery/types.js.map +1 -0
- package/dist/features/unified-context/context-manager.d.ts +24 -0
- package/dist/features/unified-context/context-manager.d.ts.map +1 -0
- package/dist/features/unified-context/context-manager.js +59 -0
- package/dist/features/unified-context/context-manager.js.map +1 -0
- package/dist/features/unified-context/index.d.ts +3 -0
- package/dist/features/unified-context/index.d.ts.map +1 -0
- package/dist/features/unified-context/index.js +3 -0
- package/dist/features/unified-context/index.js.map +1 -0
- package/dist/features/unified-context/mcp-memory-client.d.ts +14 -0
- package/dist/features/unified-context/mcp-memory-client.d.ts.map +1 -0
- package/dist/features/unified-context/mcp-memory-client.js +68 -0
- package/dist/features/unified-context/mcp-memory-client.js.map +1 -0
- package/dist/lib/atomic-write.d.ts.map +1 -1
- package/dist/lib/atomic-write.js +21 -2
- package/dist/lib/atomic-write.js.map +1 -1
- package/dist/lib/upgrade.d.ts +12 -0
- package/dist/lib/upgrade.d.ts.map +1 -0
- package/dist/lib/upgrade.js +119 -0
- package/dist/lib/upgrade.js.map +1 -0
- package/dist/mcp/adapters/memory-adapter.d.ts +2 -2
- package/dist/mcp/adapters/state-adapter.d.ts +4 -4
- package/dist/mcp/adapters/trace-adapter.d.ts +1 -1
- package/dist/team/message-router.d.ts +2 -2
- package/dist/team/message-router.d.ts.map +1 -1
- package/dist/team/message-router.js +4 -4
- package/dist/team/message-router.js.map +1 -1
- package/dist/team/task-router.d.ts +1 -1
- package/dist/team/task-router.d.ts.map +1 -1
- package/dist/team/task-router.js +2 -2
- package/dist/team/task-router.js.map +1 -1
- package/dist/team/unified-team.d.ts +4 -1
- package/dist/team/unified-team.d.ts.map +1 -1
- package/dist/team/unified-team.js +17 -8
- package/dist/team/unified-team.js.map +1 -1
- package/docs/AGENTS.md +4 -3
- package/docs/CLAUDE.md +1 -1
- package/docs/INSTALL.md +47 -7
- package/docs/REFERENCE.md +1 -1
- package/docs/UPGRADE.md +88 -0
- package/docs/UPGRADE_VERIFICATION.md +6 -6
- package/docs/dev-standards/AGENTS.md +68 -0
- package/docs/mcp-intelligent-orchestration.md +302 -0
- package/docs/migration/v6.0.0.md +2 -2
- package/docs/plans/2026-03-14-mcp-intelligent-orchestration.md +679 -0
- package/docs/standards/README.md +1 -1
- package/hooks/AGENTS.md +1 -1
- package/package.json +1 -1
- package/scripts/AGENTS.md +1 -1
- package/scripts/plugin-setup.mjs +23 -22
- package/scripts/upgrade-complete.sh +34 -0
- package/scripts/upgrade.mjs +158 -0
- package/skills/AGENTS.md +3 -2
- package/templates/AGENTS.md +1 -1
- package/templates/hooks/session-start.mjs +2 -2
package/bridge/mcp-server.cjs
CHANGED
|
@@ -20198,7 +20198,23 @@ function atomicWriteFileSync(filePath, content) {
|
|
|
20198
20198
|
fsSync.fsyncSync(fd);
|
|
20199
20199
|
fsSync.closeSync(fd);
|
|
20200
20200
|
fd = null;
|
|
20201
|
-
|
|
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");
|
package/commands/AGENTS.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/setup.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/cli/utils/setup.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/cli/utils/update.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { performUpgrade } from '../../lib/upgrade.js';
|
|
1
2
|
export async function updateCommand() {
|
|
2
|
-
|
|
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,
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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,
|
|
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"}
|
package/dist/lib/atomic-write.js
CHANGED
|
@@ -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
|
|
173
|
-
|
|
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 {
|