@nextclaw/service 0.2.5 → 0.2.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace-install-state.store.d.ts","names":[],"sources":["../../../../../src/cli/commands/skills/stores/marketplace-install-state.store.ts"],"mappings":";KAIY,4BAAA;AAAA,cAEC,8BAAA;AAAA,KAGD,qCAAA;EACV,IAAA;EACA,MAAA;AAAA;AAAA,KAGU,4BAAA;EACV,aAAA;EACA,IAAA;EACA,MAAA;EACA,IAAA;EACA,WAAA;EACA,UAAA;EACA,WAAA;EACA,oBAAA;EACA,KAAA,EAAO,qCAAA;AAAA;AAAA,iBAGO,wBAAA,CAAyB,KAAA,EAAO,MAAA;AAAA,iBAIhC,kCAAA,CAAmC,IAAA;AAAA,iBAKnC,iCAAA,CAAkC,MAAA;EAChD,IAAA;IACE,IAAA;IACA,WAAA;IACA,SAAA;EAAA;EAEF,OAAA;EACA,KAAA,EAAO,qCAAA;AAAA,IACL,4BAAA;AAAA,iBAeY,iCAAA,CAAkC,MAAA;EAChD,cAAA;EACA,KAAA,EAAO,4BAAA;AAAA;AAAA,iBASO,gCAAA,CAAiC,cAAA,WAAyB,4BAAA;AAAA,iBAyB1D,6BAAA,CAA8B,cAAA,UAAwB,KAAA,EAAO,4BAAA;AAAA,iBAU7D,mCAAA,CACd,KAAA,EAAO,4BAAA,SACP,eAAA,uBACC,4BAAA"}
1
+ {"version":3,"file":"marketplace-install-state.store.d.ts","names":[],"sources":["../../../../../src/cli/commands/skills/stores/marketplace-install-state.store.ts"],"mappings":";KAIY,4BAAA;AAAA,cAEC,8BAAA;AAAA,KAED,qCAAA;EACV,IAAA;EACA,MAAA;AAAA;AAAA,KAGU,4BAAA;EACV,aAAA;EACA,IAAA;EACA,MAAA;EACA,IAAA;EACA,WAAA;EACA,UAAA;EACA,WAAA;EACA,oBAAA;EACA,KAAA,EAAO,qCAAA;AAAA;AAAA,iBAGO,wBAAA,CAAyB,KAAA,EAAO,MAAA;AAAA,iBAIhC,kCAAA,CAAmC,IAAA;AAAA,iBAInC,iCAAA,CAAkC,MAAA;EAChD,IAAA;IACE,IAAA;IACA,WAAA;IACA,SAAA;EAAA;EAEF,OAAA;EACA,KAAA,EAAO,qCAAA;AAAA,IACL,4BAAA;AAAA,iBAeY,iCAAA,CAAkC,MAAA;EAChD,cAAA;EACA,KAAA,EAAO,4BAAA;AAAA;AAAA,iBASO,gCAAA,CAAiC,cAAA,WAAyB,4BAAA;AAAA,iBAuB1D,6BAAA,CAA8B,cAAA,UAAwB,KAAA,EAAO,4BAAA;AAAA,iBAU7D,mCAAA,CACd,KAAA,EAAO,4BAAA,SACP,eAAA,uBACC,4BAAA"}
@@ -3,13 +3,11 @@ import { join, resolve } from "node:path";
3
3
  import { createHash } from "node:crypto";
4
4
  //#region src/cli/commands/skills/stores/marketplace-install-state.store.ts
5
5
  const MARKETPLACE_INSTALL_STATE_FILE = ".nextclaw-install.json";
6
- const LEGACY_MARKETPLACE_INSTALL_STATE_FILE = ".nextclaw-marketplace.json";
7
6
  function hashMarketplaceFileBytes(bytes) {
8
7
  return createHash("sha256").update(bytes).digest("hex");
9
8
  }
10
9
  function isLocalMarketplaceInstallStateFile(path) {
11
- const normalized = normalizeMarketplaceRelativePath(path);
12
- return normalized === ".nextclaw-install.json" || normalized === LEGACY_MARKETPLACE_INSTALL_STATE_FILE;
10
+ return normalizeMarketplaceRelativePath(path) === MARKETPLACE_INSTALL_STATE_FILE;
13
11
  }
14
12
  function buildMarketplaceSkillInstallState(params) {
15
13
  const { apiBase, files, item } = params;
@@ -30,8 +28,8 @@ function writeMarketplaceSkillInstallState(params) {
30
28
  writeFileSync(join(destinationDir, MARKETPLACE_INSTALL_STATE_FILE), `${JSON.stringify(state, null, 2)}\n`);
31
29
  }
32
30
  function readMarketplaceSkillInstallState(destinationDir) {
33
- const statePath = [MARKETPLACE_INSTALL_STATE_FILE, LEGACY_MARKETPLACE_INSTALL_STATE_FILE].map((file) => join(destinationDir, file)).find((path) => existsSync(path));
34
- if (!statePath) return null;
31
+ const statePath = join(destinationDir, MARKETPLACE_INSTALL_STATE_FILE);
32
+ if (!existsSync(statePath)) return null;
35
33
  try {
36
34
  const parsed = JSON.parse(readFileSync(statePath, "utf8"));
37
35
  if (parsed.schemaVersion !== 1 || parsed.type !== "skill" || parsed.source !== "marketplace" || typeof parsed.slug !== "string" || !Array.isArray(parsed.files)) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace-install-state.store.js","names":[],"sources":["../../../../../src/cli/commands/skills/stores/marketplace-install-state.store.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\nexport type MarketplaceSkillUpdateStatus = \"outdated\" | \"up-to-date\" | \"unknown\";\n\nexport const MARKETPLACE_INSTALL_STATE_FILE = \".nextclaw-install.json\";\nconst LEGACY_MARKETPLACE_INSTALL_STATE_FILE = \".nextclaw-marketplace.json\";\n\nexport type MarketplaceSkillInstallStateFileEntry = {\n path: string;\n sha256: string;\n};\n\nexport type MarketplaceSkillInstallState = {\n schemaVersion: 1;\n type: \"skill\";\n source: \"marketplace\";\n slug: string;\n packageName?: string;\n apiBaseUrl: string;\n installedAt: string;\n marketplaceUpdatedAt?: string;\n files: MarketplaceSkillInstallStateFileEntry[];\n};\n\nexport function hashMarketplaceFileBytes(bytes: Buffer): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nexport function isLocalMarketplaceInstallStateFile(path: string): boolean {\n const normalized = normalizeMarketplaceRelativePath(path);\n return normalized === MARKETPLACE_INSTALL_STATE_FILE || normalized === LEGACY_MARKETPLACE_INSTALL_STATE_FILE;\n}\n\nexport function buildMarketplaceSkillInstallState(params: {\n item: {\n slug: string;\n packageName?: string;\n updatedAt?: string;\n };\n apiBase: string;\n files: MarketplaceSkillInstallStateFileEntry[];\n}): MarketplaceSkillInstallState {\n const { apiBase, files, item } = params;\n return {\n schemaVersion: 1,\n type: \"skill\",\n source: \"marketplace\",\n slug: item.slug,\n packageName: item.packageName,\n apiBaseUrl: apiBase,\n installedAt: new Date().toISOString(),\n marketplaceUpdatedAt: item.updatedAt,\n files,\n };\n}\n\nexport function writeMarketplaceSkillInstallState(params: {\n destinationDir: string;\n state: MarketplaceSkillInstallState;\n}): void {\n const { destinationDir, state } = params;\n writeFileSync(\n join(destinationDir, MARKETPLACE_INSTALL_STATE_FILE),\n `${JSON.stringify(state, null, 2)}\\n`\n );\n}\n\nexport function readMarketplaceSkillInstallState(destinationDir: string): MarketplaceSkillInstallState | null {\n const statePath = [MARKETPLACE_INSTALL_STATE_FILE, LEGACY_MARKETPLACE_INSTALL_STATE_FILE]\n .map((file) => join(destinationDir, file))\n .find((path) => existsSync(path));\n if (!statePath) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(readFileSync(statePath, \"utf8\")) as Partial<MarketplaceSkillInstallState>;\n if (\n parsed.schemaVersion !== 1\n || parsed.type !== \"skill\"\n || parsed.source !== \"marketplace\"\n || typeof parsed.slug !== \"string\"\n || !Array.isArray(parsed.files)\n ) {\n return null;\n }\n return parsed as MarketplaceSkillInstallState;\n } catch {\n return null;\n }\n}\n\nexport function hasLocalMarketplaceSkillDrift(destinationDir: string, state: MarketplaceSkillInstallState): boolean {\n return state.files.some((file) => {\n const targetPath = resolve(destinationDir, ...file.path.split(\"/\"));\n if (!existsSync(targetPath)) {\n return true;\n }\n return hashMarketplaceFileBytes(readFileSync(targetPath)) !== file.sha256;\n });\n}\n\nexport function resolveMarketplaceSkillUpdateStatus(\n state: MarketplaceSkillInstallState | null,\n remoteUpdatedAt: string | undefined\n): MarketplaceSkillUpdateStatus {\n if (!state || !state.marketplaceUpdatedAt || !remoteUpdatedAt) {\n return \"unknown\";\n }\n return Date.parse(remoteUpdatedAt) > Date.parse(state.marketplaceUpdatedAt)\n ? \"outdated\"\n : \"up-to-date\";\n}\n\nfunction normalizeMarketplaceRelativePath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n"],"mappings":";;;;AAMA,MAAa,iCAAiC;AAC9C,MAAM,wCAAwC;AAmB9C,SAAgB,yBAAyB,OAAuB;AAC9D,QAAO,WAAW,SAAS,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM;;AAGzD,SAAgB,mCAAmC,MAAuB;CACxE,MAAM,aAAa,iCAAiC,KAAK;AACzD,QAAO,eAAA,4BAAiD,eAAe;;AAGzE,SAAgB,kCAAkC,QAQjB;CAC/B,MAAM,EAAE,SAAS,OAAO,SAAS;AACjC,QAAO;EACL,eAAe;EACf,MAAM;EACN,QAAQ;EACR,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,YAAY;EACZ,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,sBAAsB,KAAK;EAC3B;EACD;;AAGH,SAAgB,kCAAkC,QAGzC;CACP,MAAM,EAAE,gBAAgB,UAAU;AAClC,eACE,KAAK,gBAAgB,+BAA+B,EACpD,GAAG,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC,IACnC;;AAGH,SAAgB,iCAAiC,gBAA6D;CAC5G,MAAM,YAAY,CAAC,gCAAgC,sCAAsC,CACtF,KAAK,SAAS,KAAK,gBAAgB,KAAK,CAAC,CACzC,MAAM,SAAS,WAAW,KAAK,CAAC;AACnC,KAAI,CAAC,UACH,QAAO;AAGT,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,aAAa,WAAW,OAAO,CAAC;AAC1D,MACE,OAAO,kBAAkB,KACtB,OAAO,SAAS,WAChB,OAAO,WAAW,iBAClB,OAAO,OAAO,SAAS,YACvB,CAAC,MAAM,QAAQ,OAAO,MAAM,CAE/B,QAAO;AAET,SAAO;SACD;AACN,SAAO;;;AAIX,SAAgB,8BAA8B,gBAAwB,OAA8C;AAClH,QAAO,MAAM,MAAM,MAAM,SAAS;EAChC,MAAM,aAAa,QAAQ,gBAAgB,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC;AACnE,MAAI,CAAC,WAAW,WAAW,CACzB,QAAO;AAET,SAAO,yBAAyB,aAAa,WAAW,CAAC,KAAK,KAAK;GACnE;;AAGJ,SAAgB,oCACd,OACA,iBAC8B;AAC9B,KAAI,CAAC,SAAS,CAAC,MAAM,wBAAwB,CAAC,gBAC5C,QAAO;AAET,QAAO,KAAK,MAAM,gBAAgB,GAAG,KAAK,MAAM,MAAM,qBAAqB,GACvE,aACA;;AAGN,SAAS,iCAAiC,MAAsB;AAC9D,QAAO,KAAK,QAAQ,OAAO,IAAI"}
1
+ {"version":3,"file":"marketplace-install-state.store.js","names":[],"sources":["../../../../../src/cli/commands/skills/stores/marketplace-install-state.store.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\nexport type MarketplaceSkillUpdateStatus = \"outdated\" | \"up-to-date\" | \"unknown\";\n\nexport const MARKETPLACE_INSTALL_STATE_FILE = \".nextclaw-install.json\";\n\nexport type MarketplaceSkillInstallStateFileEntry = {\n path: string;\n sha256: string;\n};\n\nexport type MarketplaceSkillInstallState = {\n schemaVersion: 1;\n type: \"skill\";\n source: \"marketplace\";\n slug: string;\n packageName?: string;\n apiBaseUrl: string;\n installedAt: string;\n marketplaceUpdatedAt?: string;\n files: MarketplaceSkillInstallStateFileEntry[];\n};\n\nexport function hashMarketplaceFileBytes(bytes: Buffer): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nexport function isLocalMarketplaceInstallStateFile(path: string): boolean {\n return normalizeMarketplaceRelativePath(path) === MARKETPLACE_INSTALL_STATE_FILE;\n}\n\nexport function buildMarketplaceSkillInstallState(params: {\n item: {\n slug: string;\n packageName?: string;\n updatedAt?: string;\n };\n apiBase: string;\n files: MarketplaceSkillInstallStateFileEntry[];\n}): MarketplaceSkillInstallState {\n const { apiBase, files, item } = params;\n return {\n schemaVersion: 1,\n type: \"skill\",\n source: \"marketplace\",\n slug: item.slug,\n packageName: item.packageName,\n apiBaseUrl: apiBase,\n installedAt: new Date().toISOString(),\n marketplaceUpdatedAt: item.updatedAt,\n files,\n };\n}\n\nexport function writeMarketplaceSkillInstallState(params: {\n destinationDir: string;\n state: MarketplaceSkillInstallState;\n}): void {\n const { destinationDir, state } = params;\n writeFileSync(\n join(destinationDir, MARKETPLACE_INSTALL_STATE_FILE),\n `${JSON.stringify(state, null, 2)}\\n`\n );\n}\n\nexport function readMarketplaceSkillInstallState(destinationDir: string): MarketplaceSkillInstallState | null {\n const statePath = join(destinationDir, MARKETPLACE_INSTALL_STATE_FILE);\n if (!existsSync(statePath)) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(readFileSync(statePath, \"utf8\")) as Partial<MarketplaceSkillInstallState>;\n if (\n parsed.schemaVersion !== 1\n || parsed.type !== \"skill\"\n || parsed.source !== \"marketplace\"\n || typeof parsed.slug !== \"string\"\n || !Array.isArray(parsed.files)\n ) {\n return null;\n }\n return parsed as MarketplaceSkillInstallState;\n } catch {\n return null;\n }\n}\n\nexport function hasLocalMarketplaceSkillDrift(destinationDir: string, state: MarketplaceSkillInstallState): boolean {\n return state.files.some((file) => {\n const targetPath = resolve(destinationDir, ...file.path.split(\"/\"));\n if (!existsSync(targetPath)) {\n return true;\n }\n return hashMarketplaceFileBytes(readFileSync(targetPath)) !== file.sha256;\n });\n}\n\nexport function resolveMarketplaceSkillUpdateStatus(\n state: MarketplaceSkillInstallState | null,\n remoteUpdatedAt: string | undefined\n): MarketplaceSkillUpdateStatus {\n if (!state || !state.marketplaceUpdatedAt || !remoteUpdatedAt) {\n return \"unknown\";\n }\n return Date.parse(remoteUpdatedAt) > Date.parse(state.marketplaceUpdatedAt)\n ? \"outdated\"\n : \"up-to-date\";\n}\n\nfunction normalizeMarketplaceRelativePath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n"],"mappings":";;;;AAMA,MAAa,iCAAiC;AAmB9C,SAAgB,yBAAyB,OAAuB;AAC9D,QAAO,WAAW,SAAS,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM;;AAGzD,SAAgB,mCAAmC,MAAuB;AACxE,QAAO,iCAAiC,KAAK,KAAK;;AAGpD,SAAgB,kCAAkC,QAQjB;CAC/B,MAAM,EAAE,SAAS,OAAO,SAAS;AACjC,QAAO;EACL,eAAe;EACf,MAAM;EACN,QAAQ;EACR,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,YAAY;EACZ,8BAAa,IAAI,MAAM,EAAC,aAAa;EACrC,sBAAsB,KAAK;EAC3B;EACD;;AAGH,SAAgB,kCAAkC,QAGzC;CACP,MAAM,EAAE,gBAAgB,UAAU;AAClC,eACE,KAAK,gBAAgB,+BAA+B,EACpD,GAAG,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC,IACnC;;AAGH,SAAgB,iCAAiC,gBAA6D;CAC5G,MAAM,YAAY,KAAK,gBAAgB,+BAA+B;AACtE,KAAI,CAAC,WAAW,UAAU,CACxB,QAAO;AAGT,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,aAAa,WAAW,OAAO,CAAC;AAC1D,MACE,OAAO,kBAAkB,KACtB,OAAO,SAAS,WAChB,OAAO,WAAW,iBAClB,OAAO,OAAO,SAAS,YACvB,CAAC,MAAM,QAAQ,OAAO,MAAM,CAE/B,QAAO;AAET,SAAO;SACD;AACN,SAAO;;;AAIX,SAAgB,8BAA8B,gBAAwB,OAA8C;AAClH,QAAO,MAAM,MAAM,MAAM,SAAS;EAChC,MAAM,aAAa,QAAQ,gBAAgB,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC;AACnE,MAAI,CAAC,WAAW,WAAW,CACzB,QAAO;AAET,SAAO,yBAAyB,aAAa,WAAW,CAAC,KAAK,KAAK;GACnE;;AAGJ,SAAgB,oCACd,OACA,iBAC8B;AAC9B,KAAI,CAAC,SAAS,CAAC,MAAM,wBAAwB,CAAC,gBAC5C,QAAO;AAET,QAAO,KAAK,MAAM,gBAAgB,GAAG,KAAK,MAAM,MAAM,qBAAqB,GACvE,aACA;;AAGN,SAAS,iCAAiC,MAAsB;AAC9D,QAAO,KAAK,QAAQ,OAAO,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/service",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "private": false,
5
5
  "description": "NextClaw long-running service host and runtime lifecycle.",
6
6
  "type": "module",
@@ -42,30 +42,30 @@
42
42
  "chokidar": "^3.6.0",
43
43
  "commander": "^12.1.0",
44
44
  "jszip": "^3.10.1",
45
- "@nextclaw/channel-extension-dingtalk": "0.1.9",
46
- "@nextclaw/channel-extension-email": "0.1.9",
47
- "@nextclaw/channel-extension-feishu": "0.1.17",
48
- "@nextclaw/channel-extension-discord": "0.1.9",
49
- "@nextclaw/channel-extension-qq": "0.1.14",
50
- "@nextclaw/channel-extension-slack": "0.1.9",
51
- "@nextclaw/channel-extension-telegram": "0.1.9",
52
- "@nextclaw/channel-extension-weixin": "0.1.21",
53
- "@nextclaw/channel-extension-wecom": "0.1.9",
54
- "@nextclaw/channel-extension-whatsapp": "0.1.9",
55
- "@nextclaw/core": "0.13.5",
56
- "@nextclaw/kernel": "0.2.5",
57
- "@nextclaw/ncp": "0.5.25",
58
- "@nextclaw/ncp-mcp": "0.1.100",
59
- "@nextclaw/ncp-toolkit": "0.5.30",
60
- "@nextclaw/nextclaw-hermes-acp-bridge": "0.2.5",
61
- "@nextclaw/mcp": "0.2.5",
62
- "@nextclaw/nextclaw-ncp-runtime-stdio-client": "0.2.5",
63
- "@nextclaw/remote": "0.2.5",
64
- "@nextclaw/ncp-agent-runtime": "0.3.36",
65
- "@nextclaw/runtime": "0.3.5",
66
- "@nextclaw/shared": "0.2.5",
67
- "@nextclaw/server": "0.13.5",
68
- "@nextclaw/nextclaw-ncp-runtime-http-client": "0.2.5"
45
+ "@nextclaw/channel-extension-dingtalk": "0.1.10",
46
+ "@nextclaw/channel-extension-discord": "0.1.10",
47
+ "@nextclaw/channel-extension-qq": "0.1.15",
48
+ "@nextclaw/channel-extension-slack": "0.1.10",
49
+ "@nextclaw/channel-extension-email": "0.1.10",
50
+ "@nextclaw/channel-extension-whatsapp": "0.1.10",
51
+ "@nextclaw/channel-extension-telegram": "0.1.10",
52
+ "@nextclaw/channel-extension-wecom": "0.1.10",
53
+ "@nextclaw/channel-extension-feishu": "0.1.18",
54
+ "@nextclaw/kernel": "0.3.0",
55
+ "@nextclaw/channel-extension-weixin": "0.1.22",
56
+ "@nextclaw/ncp-toolkit": "0.5.31",
57
+ "@nextclaw/core": "0.13.6",
58
+ "@nextclaw/mcp": "0.2.6",
59
+ "@nextclaw/ncp-mcp": "0.1.101",
60
+ "@nextclaw/nextclaw-ncp-runtime-http-client": "0.2.6",
61
+ "@nextclaw/nextclaw-hermes-acp-bridge": "0.2.6",
62
+ "@nextclaw/nextclaw-ncp-runtime-stdio-client": "0.2.6",
63
+ "@nextclaw/ncp-agent-runtime": "0.3.37",
64
+ "@nextclaw/ncp": "0.5.26",
65
+ "@nextclaw/runtime": "0.3.6",
66
+ "@nextclaw/shared": "0.2.6",
67
+ "@nextclaw/remote": "0.2.6",
68
+ "@nextclaw/server": "0.13.6"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@types/node": "^20.17.6",