@prismer/runtime 2.0.3 → 2.0.4

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/dist/cli.cjs CHANGED
@@ -1934,7 +1934,7 @@ var require_package = __commonJS({
1934
1934
  "package.json"(exports2, module2) {
1935
1935
  module2.exports = {
1936
1936
  name: "@prismer/runtime",
1937
- version: "2.0.3",
1937
+ version: "2.0.4",
1938
1938
  description: "Prismer Cloud daemon runtime \u2014 TS-only adapter host for hosted IM agents",
1939
1939
  type: "module",
1940
1940
  main: "dist/index.js",
@@ -2223,11 +2223,39 @@ async function syncAllAgentSkills(profiles, cloud, options = {}) {
2223
2223
  }
2224
2224
  async function syncInstalledSkillsForDispatch(profile, agentImUserId, cloud, signal) {
2225
2225
  if (!agentImUserId) return { synced: 0, skipped: 0, unchanged: 0 };
2226
- const data = await cloud.get(
2226
+ let data = await cloud.get(
2227
2227
  `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
2228
2228
  { signal }
2229
2229
  );
2230
- const entries = normalizeInstalledSkills(data);
2230
+ let entries = normalizeInstalledSkills(data);
2231
+ if (entries.length === 0 && (profile.adapterName === "hermes" || profile.adapterName === "openclaw")) {
2232
+ try {
2233
+ const backfill = await cloud.request(
2234
+ "POST",
2235
+ `/api/im/agents/${encodeURIComponent(agentImUserId)}/skills/install-builtins`,
2236
+ { body: {}, signal }
2237
+ );
2238
+ if (backfill.ok && backfill.data && typeof backfill.data === "object" && "data" in backfill.data) {
2239
+ const installed = backfill.data.data?.installed ?? 0;
2240
+ if (installed > 0) {
2241
+ process.stdout.write(
2242
+ `[daemon] skill sync: backfilled ${installed} built-in skills for agent ${agentImUserId.slice(-8)}
2243
+ `
2244
+ );
2245
+ data = await cloud.get(
2246
+ `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
2247
+ { signal }
2248
+ );
2249
+ entries = normalizeInstalledSkills(data);
2250
+ }
2251
+ }
2252
+ } catch (err) {
2253
+ process.stderr.write(
2254
+ `[daemon] skill sync: backfill skipped for ${agentImUserId.slice(-8)}: ${err.message}
2255
+ `
2256
+ );
2257
+ }
2258
+ }
2231
2259
  const skillsRoot = resolveSkillsRoot(profile);
2232
2260
  if (!skillsRoot) return { synced: 0, skipped: 0, unchanged: 0 };
2233
2261
  let synced = 0;
@@ -14993,7 +15021,7 @@ async function readResponseError(res) {
14993
15021
 
14994
15022
  // src/cli/index.ts
14995
15023
  init_ui();
14996
- var VERSION = "2.0.3";
15024
+ var VERSION = "2.0.4";
14997
15025
  function buildProgram() {
14998
15026
  const program = new import_commander20.Command("prismer").description("Prismer Cloud daemon CLI (TS-only).").version(VERSION);
14999
15027
  program.addCommand(buildBannerCommand());
package/dist/cli.js CHANGED
@@ -1911,7 +1911,7 @@ var require_package = __commonJS({
1911
1911
  "package.json"(exports, module) {
1912
1912
  module.exports = {
1913
1913
  name: "@prismer/runtime",
1914
- version: "2.0.3",
1914
+ version: "2.0.4",
1915
1915
  description: "Prismer Cloud daemon runtime \u2014 TS-only adapter host for hosted IM agents",
1916
1916
  type: "module",
1917
1917
  main: "dist/index.js",
@@ -2203,11 +2203,39 @@ async function syncAllAgentSkills(profiles, cloud, options = {}) {
2203
2203
  }
2204
2204
  async function syncInstalledSkillsForDispatch(profile, agentImUserId, cloud, signal) {
2205
2205
  if (!agentImUserId) return { synced: 0, skipped: 0, unchanged: 0 };
2206
- const data = await cloud.get(
2206
+ let data = await cloud.get(
2207
2207
  `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
2208
2208
  { signal }
2209
2209
  );
2210
- const entries = normalizeInstalledSkills(data);
2210
+ let entries = normalizeInstalledSkills(data);
2211
+ if (entries.length === 0 && (profile.adapterName === "hermes" || profile.adapterName === "openclaw")) {
2212
+ try {
2213
+ const backfill = await cloud.request(
2214
+ "POST",
2215
+ `/api/im/agents/${encodeURIComponent(agentImUserId)}/skills/install-builtins`,
2216
+ { body: {}, signal }
2217
+ );
2218
+ if (backfill.ok && backfill.data && typeof backfill.data === "object" && "data" in backfill.data) {
2219
+ const installed = backfill.data.data?.installed ?? 0;
2220
+ if (installed > 0) {
2221
+ process.stdout.write(
2222
+ `[daemon] skill sync: backfilled ${installed} built-in skills for agent ${agentImUserId.slice(-8)}
2223
+ `
2224
+ );
2225
+ data = await cloud.get(
2226
+ `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
2227
+ { signal }
2228
+ );
2229
+ entries = normalizeInstalledSkills(data);
2230
+ }
2231
+ }
2232
+ } catch (err) {
2233
+ process.stderr.write(
2234
+ `[daemon] skill sync: backfill skipped for ${agentImUserId.slice(-8)}: ${err.message}
2235
+ `
2236
+ );
2237
+ }
2238
+ }
2211
2239
  const skillsRoot = resolveSkillsRoot(profile);
2212
2240
  if (!skillsRoot) return { synced: 0, skipped: 0, unchanged: 0 };
2213
2241
  let synced = 0;
@@ -14976,7 +15004,7 @@ async function readResponseError(res) {
14976
15004
 
14977
15005
  // src/cli/index.ts
14978
15006
  init_ui();
14979
- var VERSION = "2.0.3";
15007
+ var VERSION = "2.0.4";
14980
15008
  function buildProgram() {
14981
15009
  const program = new Command20("prismer").description("Prismer Cloud daemon CLI (TS-only).").version(VERSION);
14982
15010
  program.addCommand(buildBannerCommand());
package/dist/index.cjs CHANGED
@@ -1545,11 +1545,39 @@ async function syncAllAgentSkills(profiles, cloud, options = {}) {
1545
1545
  }
1546
1546
  async function syncInstalledSkillsForDispatch(profile, agentImUserId, cloud, signal) {
1547
1547
  if (!agentImUserId) return { synced: 0, skipped: 0, unchanged: 0 };
1548
- const data = await cloud.get(
1548
+ let data = await cloud.get(
1549
1549
  `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
1550
1550
  { signal }
1551
1551
  );
1552
- const entries = normalizeInstalledSkills(data);
1552
+ let entries = normalizeInstalledSkills(data);
1553
+ if (entries.length === 0 && (profile.adapterName === "hermes" || profile.adapterName === "openclaw")) {
1554
+ try {
1555
+ const backfill = await cloud.request(
1556
+ "POST",
1557
+ `/api/im/agents/${encodeURIComponent(agentImUserId)}/skills/install-builtins`,
1558
+ { body: {}, signal }
1559
+ );
1560
+ if (backfill.ok && backfill.data && typeof backfill.data === "object" && "data" in backfill.data) {
1561
+ const installed = backfill.data.data?.installed ?? 0;
1562
+ if (installed > 0) {
1563
+ process.stdout.write(
1564
+ `[daemon] skill sync: backfilled ${installed} built-in skills for agent ${agentImUserId.slice(-8)}
1565
+ `
1566
+ );
1567
+ data = await cloud.get(
1568
+ `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
1569
+ { signal }
1570
+ );
1571
+ entries = normalizeInstalledSkills(data);
1572
+ }
1573
+ }
1574
+ } catch (err) {
1575
+ process.stderr.write(
1576
+ `[daemon] skill sync: backfill skipped for ${agentImUserId.slice(-8)}: ${err.message}
1577
+ `
1578
+ );
1579
+ }
1580
+ }
1553
1581
  const skillsRoot = resolveSkillsRoot(profile);
1554
1582
  if (!skillsRoot) return { synced: 0, skipped: 0, unchanged: 0 };
1555
1583
  let synced = 0;
@@ -2295,7 +2323,7 @@ var require_package = __commonJS({
2295
2323
  "package.json"(exports2, module2) {
2296
2324
  module2.exports = {
2297
2325
  name: "@prismer/runtime",
2298
- version: "2.0.3",
2326
+ version: "2.0.4",
2299
2327
  description: "Prismer Cloud daemon runtime \u2014 TS-only adapter host for hosted IM agents",
2300
2328
  type: "module",
2301
2329
  main: "dist/index.js",
@@ -15166,7 +15194,7 @@ async function readResponseError(res) {
15166
15194
 
15167
15195
  // src/cli/index.ts
15168
15196
  init_ui();
15169
- var VERSION = "2.0.3";
15197
+ var VERSION = "2.0.4";
15170
15198
  function buildProgram() {
15171
15199
  const program = new import_commander20.Command("prismer").description("Prismer Cloud daemon CLI (TS-only).").version(VERSION);
15172
15200
  program.addCommand(buildBannerCommand());
package/dist/index.js CHANGED
@@ -1525,11 +1525,39 @@ async function syncAllAgentSkills(profiles, cloud, options = {}) {
1525
1525
  }
1526
1526
  async function syncInstalledSkillsForDispatch(profile, agentImUserId, cloud, signal) {
1527
1527
  if (!agentImUserId) return { synced: 0, skipped: 0, unchanged: 0 };
1528
- const data = await cloud.get(
1528
+ let data = await cloud.get(
1529
1529
  `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
1530
1530
  { signal }
1531
1531
  );
1532
- const entries = normalizeInstalledSkills(data);
1532
+ let entries = normalizeInstalledSkills(data);
1533
+ if (entries.length === 0 && (profile.adapterName === "hermes" || profile.adapterName === "openclaw")) {
1534
+ try {
1535
+ const backfill = await cloud.request(
1536
+ "POST",
1537
+ `/api/im/agents/${encodeURIComponent(agentImUserId)}/skills/install-builtins`,
1538
+ { body: {}, signal }
1539
+ );
1540
+ if (backfill.ok && backfill.data && typeof backfill.data === "object" && "data" in backfill.data) {
1541
+ const installed = backfill.data.data?.installed ?? 0;
1542
+ if (installed > 0) {
1543
+ process.stdout.write(
1544
+ `[daemon] skill sync: backfilled ${installed} built-in skills for agent ${agentImUserId.slice(-8)}
1545
+ `
1546
+ );
1547
+ data = await cloud.get(
1548
+ `/api/im/skills/installed?agentId=${encodeURIComponent(agentImUserId)}`,
1549
+ { signal }
1550
+ );
1551
+ entries = normalizeInstalledSkills(data);
1552
+ }
1553
+ }
1554
+ } catch (err) {
1555
+ process.stderr.write(
1556
+ `[daemon] skill sync: backfill skipped for ${agentImUserId.slice(-8)}: ${err.message}
1557
+ `
1558
+ );
1559
+ }
1560
+ }
1533
1561
  const skillsRoot = resolveSkillsRoot(profile);
1534
1562
  if (!skillsRoot) return { synced: 0, skipped: 0, unchanged: 0 };
1535
1563
  let synced = 0;
@@ -2271,7 +2299,7 @@ var require_package = __commonJS({
2271
2299
  "package.json"(exports, module) {
2272
2300
  module.exports = {
2273
2301
  name: "@prismer/runtime",
2274
- version: "2.0.3",
2302
+ version: "2.0.4",
2275
2303
  description: "Prismer Cloud daemon runtime \u2014 TS-only adapter host for hosted IM agents",
2276
2304
  type: "module",
2277
2305
  main: "dist/index.js",
@@ -15098,7 +15126,7 @@ async function readResponseError(res) {
15098
15126
 
15099
15127
  // src/cli/index.ts
15100
15128
  init_ui();
15101
- var VERSION = "2.0.3";
15129
+ var VERSION = "2.0.4";
15102
15130
  function buildProgram() {
15103
15131
  const program = new Command20("prismer").description("Prismer Cloud daemon CLI (TS-only).").version(VERSION);
15104
15132
  program.addCommand(buildBannerCommand());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismer/runtime",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "Prismer Cloud daemon runtime — TS-only adapter host for hosted IM agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",