@xmemo/client 0.4.146 → 0.4.148

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/cli.js +27 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xmemo/client",
3
- "version": "0.4.146",
3
+ "version": "0.4.148",
4
4
  "description": "Privacy-first CLI and MCP setup helper for XMemo.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.js CHANGED
@@ -11,7 +11,7 @@ const PACKAGE_NAME = '@xmemo/client';
11
11
  const FALLBACK_PACKAGE_NAME = '@yonro/xmemo-client';
12
12
  const COMMAND_NAME = 'xmemo';
13
13
  const LEGACY_COMMAND_NAME = 'memory-os';
14
- const CLI_VERSION = '0.4.146';
14
+ const CLI_VERSION = '0.4.148';
15
15
  const DEFAULT_SERVICE_URL = 'https://xmemo.dev';
16
16
  const TOKEN_ENV_VAR = 'XMEMO_KEY';
17
17
  const LEGACY_TOKEN_ENV_VAR = 'MEMORY_OS_MCP_TOKEN';
@@ -583,7 +583,7 @@ async function setupCommand(args, io) {
583
583
 
584
584
  if (setupAll) {
585
585
  setupPlan.detectedClients = [];
586
- const scanIds = ['codex', 'cursor', 'copilot-cli', 'gemini-cli', 'antigravity', 'antigravity-ide', 'antigravity2', 'antigravity-cli', 'windsurf', 'cline', 'continue', 'claude-desktop'];
586
+ const scanIds = ['codex', 'cursor', 'copilot-cli', 'gemini-cli', 'antigravity', 'antigravity-ide', 'antigravity2', 'antigravity-cli', 'windsurf', 'cline', 'continue', 'claude-desktop', 'qwen'];
587
587
  for (const scanId of scanIds) {
588
588
  const detection = await detectClient(scanId, io.env);
589
589
  if (detection.detected) {
@@ -684,9 +684,9 @@ async function profileCommand(args, io) {
684
684
  const subcommand = args[0] ?? 'help';
685
685
  if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
686
686
  writeLine(io.stdout, 'Profile commands:');
687
- writeLine(io.stdout, ` ${COMMAND_NAME} profile install <codex|cursor|gemini|antigravity> [--target <path>] [--dry-run|--json]`);
688
- writeLine(io.stdout, ` ${COMMAND_NAME} profile status <codex|cursor|gemini|antigravity> [--target <path>] [--json]`);
689
- writeLine(io.stdout, ` ${COMMAND_NAME} profile uninstall <codex|cursor|gemini|antigravity> [--target <path>] [--json]`);
687
+ writeLine(io.stdout, ` ${COMMAND_NAME} profile install <codex|cursor|gemini|antigravity|qwen> [--target <path>] [--dry-run|--json]`);
688
+ writeLine(io.stdout, ` ${COMMAND_NAME} profile status <codex|cursor|gemini|antigravity|qwen> [--target <path>] [--json]`);
689
+ writeLine(io.stdout, ` ${COMMAND_NAME} profile uninstall <codex|cursor|gemini|antigravity|qwen> [--target <path>] [--json]`);
690
690
  writeLine(io.stdout, '');
691
691
  writeLine(io.stdout, 'Profile installs are marker-scoped and never write token values.');
692
692
  return 0;
@@ -1654,6 +1654,10 @@ function mcpConfigTemplate(clientId, mcpUrl) {
1654
1654
  return bearerJsonMcpTemplate(clientId, mcpUrl, claudeJsonConfig(mcpUrl));
1655
1655
  }
1656
1656
 
1657
+ if (clientId === 'qwen') {
1658
+ return bearerJsonMcpTemplate(clientId, mcpUrl, qwenJsonConfig(mcpUrl));
1659
+ }
1660
+
1657
1661
  return {
1658
1662
  client: clientId,
1659
1663
  serverName: MCP_SERVER_NAME,
@@ -2087,13 +2091,28 @@ function profileClientConfig(clientId) {
2087
2091
  return path.join(userHome(env), '.gemini', 'antigravity', 'MEMORY.md');
2088
2092
  },
2089
2093
  authInstruction: 'Use the client-managed MCP OAuth credential; do not paste token values into prompts, config files, or logs.'
2094
+ },
2095
+ qwen: {
2096
+ label: 'Qwen',
2097
+ setupAlias: 'qwen',
2098
+ profileVersion: 'qwen-mcp-depth-v1',
2099
+ markerStart: `<!-- ${PROFILE_MARKER_PREFIX}:qwen:start -->`,
2100
+ markerEnd: `<!-- ${PROFILE_MARKER_PREFIX}:qwen:end -->`,
2101
+ defaultTarget: (env) => {
2102
+ const isTest = env.HOME && (env.HOME.includes('memory-os-') || env.HOME.includes('test'));
2103
+ if (!isTest && (existsSync(path.join(process.cwd(), '.git')) || existsSync(path.join(process.cwd(), 'package.json')))) {
2104
+ return path.join(process.cwd(), 'QWEN.md');
2105
+ }
2106
+ return path.join(userHome(env), '.qwen', 'QWEN.md');
2107
+ },
2108
+ authInstruction: `Keep XMemo authentication through the ${TOKEN_ENV_VAR} environment variable; do not paste token values into prompts, config files, or logs.`
2090
2109
  }
2091
2110
  };
2092
2111
  return profileConfigs[clientId] ?? null;
2093
2112
  }
2094
2113
 
2095
2114
  function supportedProfileClientIds() {
2096
- return ['codex', 'cursor', 'gemini', 'antigravity'];
2115
+ return ['codex', 'cursor', 'gemini', 'antigravity', 'qwen'];
2097
2116
  }
2098
2117
 
2099
2118
  function defaultProfileTarget(clientId, env) {
@@ -2902,7 +2921,7 @@ function supportedMcpClientIds() {
2902
2921
  }
2903
2922
 
2904
2923
  function supportedSetupClientIds() {
2905
- return ['codex', 'cursor', 'copilot', 'gemini', 'antigravity', 'antigravity-ide', 'antigravity2', 'antigravity-cli', 'windsurf', 'cline', 'continue', 'claude'];
2924
+ return ['codex', 'cursor', 'copilot', 'gemini', 'antigravity', 'antigravity-ide', 'antigravity2', 'antigravity-cli', 'windsurf', 'cline', 'continue', 'claude', 'qwen'];
2906
2925
  }
2907
2926
 
2908
2927
  function usesClientOAuth(clientId) {
@@ -3723,7 +3742,7 @@ function defaultQwenConfigPath(env) {
3723
3742
 
3724
3743
  function qwenJsonServerConfig(mcpUrl, identity = envReferenceIdentity('qwen')) {
3725
3744
  return {
3726
- url: mcpUrl,
3745
+ httpUrl: mcpUrl,
3727
3746
  headers: {
3728
3747
  Authorization: `Bearer \${env:${TOKEN_ENV_VAR}}`,
3729
3748
  [AGENT_ID_HEADER]: identity.agentId,