@nocobase/app-plugin-agents 0.1.0-beta.4 → 0.1.0-beta.5

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 (67) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +5 -3
  3. package/dist/client/lib/install.js +1 -1
  4. package/dist/client/lib/tool-policy.d.ts +0 -2
  5. package/dist/client/lib/tool-policy.d.ts.map +1 -1
  6. package/dist/client/lib/tool-policy.js +1 -6
  7. package/dist/client/lib/tool-policy.js.map +1 -1
  8. package/dist/client/locales/en-US.d.ts +0 -9
  9. package/dist/client/locales/en-US.d.ts.map +1 -1
  10. package/dist/client/locales/en-US.js +0 -9
  11. package/dist/client/locales/en-US.js.map +1 -1
  12. package/dist/client/locales/runtimes.en-US.d.ts +1 -0
  13. package/dist/client/locales/runtimes.en-US.d.ts.map +1 -1
  14. package/dist/client/locales/runtimes.en-US.js +3 -2
  15. package/dist/client/locales/runtimes.en-US.js.map +1 -1
  16. package/dist/client/locales/runtimes.zh-CN.d.ts.map +1 -1
  17. package/dist/client/locales/runtimes.zh-CN.js +3 -2
  18. package/dist/client/locales/runtimes.zh-CN.js.map +1 -1
  19. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  20. package/dist/client/locales/zh-CN.js +0 -9
  21. package/dist/client/locales/zh-CN.js.map +1 -1
  22. package/dist/client/pages/agents/agent-model.d.ts +0 -4
  23. package/dist/client/pages/agents/agent-model.d.ts.map +1 -1
  24. package/dist/client/pages/agents/agent-model.js +0 -19
  25. package/dist/client/pages/agents/agent-model.js.map +1 -1
  26. package/dist/client/pages/agents/detail/index.d.ts.map +1 -1
  27. package/dist/client/pages/agents/detail/index.js +2 -2
  28. package/dist/client/pages/agents/detail/index.js.map +1 -1
  29. package/dist/client/pages/agents/detail/sections.d.ts +0 -1
  30. package/dist/client/pages/agents/detail/sections.d.ts.map +1 -1
  31. package/dist/client/pages/agents/detail/sections.js +2 -33
  32. package/dist/client/pages/agents/detail/sections.js.map +1 -1
  33. package/dist/client/pages/runtimes/connect.js +1 -1
  34. package/dist/client/pages/runtimes/connect.js.map +1 -1
  35. package/dist/package.json +1 -1
  36. package/dist/server/distribution/dist.service.d.ts +27 -5
  37. package/dist/server/distribution/dist.service.d.ts.map +1 -1
  38. package/dist/server/distribution/dist.service.js +41 -5
  39. package/dist/server/distribution/dist.service.js.map +1 -1
  40. package/dist/server/distribution/download-tokens.d.ts +1 -1
  41. package/dist/server/distribution/download-tokens.d.ts.map +1 -1
  42. package/dist/server/distribution/download-tokens.js +7 -4
  43. package/dist/server/distribution/download-tokens.js.map +1 -1
  44. package/dist/server/distribution/index.d.ts +11 -3
  45. package/dist/server/distribution/index.d.ts.map +1 -1
  46. package/dist/server/distribution/index.js +31 -8
  47. package/dist/server/distribution/index.js.map +1 -1
  48. package/dist/server/routes/runners/dist.d.ts +5 -1
  49. package/dist/server/routes/runners/dist.d.ts.map +1 -1
  50. package/dist/server/routes/runners/dist.js +36 -9
  51. package/dist/server/routes/runners/dist.js.map +1 -1
  52. package/dist/server/routes/runners/install.d.ts.map +1 -1
  53. package/dist/server/routes/runners/install.js +98 -15
  54. package/dist/server/routes/runners/install.js.map +1 -1
  55. package/dist/server/routes/runners/runner.js +4 -4
  56. package/dist/server/routes/runners/runner.js.map +1 -1
  57. package/dist/server/routes/schemas.d.ts +1 -0
  58. package/dist/server/routes/schemas.d.ts.map +1 -1
  59. package/dist/server/routes/schemas.js +6 -1
  60. package/dist/server/routes/schemas.js.map +1 -1
  61. package/dist/server/tokens.d.ts +1 -1
  62. package/dist/server/tokens.d.ts.map +1 -1
  63. package/dist/server/tokens.js.map +1 -1
  64. package/package.json +5 -5
  65. package/skills/nocobase-app-plugin-agents/SKILL.md +1 -1
  66. package/skills/nocobase-app-plugin-agents/references/distribution.md +21 -4
  67. package/skills/nocobase-app-plugin-agents/references/setup-and-config.md +2 -0
@@ -57,11 +57,14 @@ export function createDownloadTokenService(deps) {
57
57
  downloads >= DOWNLOAD_TOKEN_MAX_DOWNLOADS)
58
58
  throw spent();
59
59
  const { target } = request;
60
- if (target === undefined)
60
+ if (target === undefined && !request.download)
61
61
  return;
62
- if (record.target !== null && record.target !== target)
62
+ if (target !== undefined &&
63
+ record.target !== null &&
64
+ record.target !== target)
63
65
  throw invalid(`This download token is for ${record.target}, not ${target}.`);
64
- if (record.target === target && !request.download)
66
+ if ((target === undefined || record.target === target) &&
67
+ !request.download)
65
68
  return;
66
69
  // Binds the platform and counts the download; a concurrent request that changed the row first wins.
67
70
  const updated = await tokens.updateMany({
@@ -70,7 +73,7 @@ export function createDownloadTokenService(deps) {
70
73
  f.number('downloads').eq(downloads),
71
74
  ]),
72
75
  values: {
73
- target,
76
+ target: target ?? record.target,
74
77
  downloads: request.download ? downloads + 1 : downloads,
75
78
  },
76
79
  });
@@ -1 +1 @@
1
- {"version":3,"file":"download-tokens.js","sourceRoot":"","sources":["../../../server/distribution/download-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-tokens.js","sourceRoot":"","sources":["../../../server/distribution/download-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,OAAO,EAAE,KAAK,EAAc,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAI7B,8CAA8C;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAW,EAAE,GAAG,MAAM,CAAC;AAEzD,wFAAwF;AACxF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAY9C,SAAS,kBAAkB,CACzB,IAAwB;IAExB,OAAO,IAAI,CAAC,UAAU,CAAsB,kBAAkB,CAAC,CAAC;AAClE,CAAC;AAyBD,MAAM,UAAU,0BAA0B,CACxC,IAA8B;IAE9B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,OAAe,EAAiB,EAAE,CACjD,IAAI,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,GAAkB,EAAE,CAChC,OAAO,CACL,uFAAuF,CACxF,CAAC;IAEJ,OAAO;QACL,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CACtB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YACpD,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gBACvC,MAAM,EAAE;oBACN,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE;oBACd,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC;oBAChC,WAAW;oBACX,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,CAAC;oBACZ,SAAS;oBACT,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;iBAC7B;aACF,CAAC,CAAC;YACH,OAAO;gBACL,KAAK;gBACL,SAAS;gBACT,YAAY,EAAE,4BAA4B;aAC3C,CAAC;QACJ,CAAC,CAAC;QAEJ,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACxB,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YACxB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO;gBAC9D,MAAM,OAAO,CAAC,mCAAmC,OAAO,GAAG,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC;oBACnB,MAAM,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;iBAC7C,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;YACjD,IACE,CAAC,MAAM;gBACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;gBACrD,SAAS,IAAI,4BAA4B;gBAEzC,MAAM,KAAK,EAAE,CAAC;YAChB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAC3B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;YACtD,IACE,MAAM,KAAK,SAAS;gBACpB,MAAM,CAAC,MAAM,KAAK,IAAI;gBACtB,MAAM,CAAC,MAAM,KAAK,MAAM;gBAExB,MAAM,OAAO,CACX,8BAA8B,MAAM,CAAC,MAAM,SAAS,MAAM,GAAG,CAC9D,CAAC;YACJ,IACE,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;gBAClD,CAAC,OAAO,CAAC,QAAQ;gBAEjB,OAAO;YACT,oGAAoG;YACpG,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;gBACtC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,CAAC,GAAG,CAAC;oBACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;iBACpC,CAAC;gBACJ,MAAM,EAAE;oBACN,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM;oBAC/B,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;iBACxD;aACF,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;gBAAE,MAAM,KAAK,EAAE,CAAC;QAChD,CAAC,CAAC;KACL,CAAC;AACJ,CAAC"}
@@ -1,14 +1,22 @@
1
- import { type UpgradeNotice } from '@nocobase/agent-protocol';
1
+ import { type HeartbeatResponse, type NpmUpgradeNotice, type UpgradeNotice } from '@nocobase/agent-protocol';
2
2
  import type { Runner } from '../../shared/runners.js';
3
3
  import type { DistService } from './dist.service.js';
4
4
  export { createDownloadTokenService, DOWNLOAD_TOKEN_MAX_DOWNLOADS, DOWNLOAD_TOKEN_TTL_MS, type DownloadRequest, type DownloadTokenService, } from './download-tokens.js';
5
- export { createDistService, DEFAULT_CHANNEL, type DistConfig, type DistFile, type DistService, } from './dist.service.js';
5
+ export { createDistService, DEFAULT_CHANNEL, type DistConfig, type DistFile, type DistNpmSource, type DistService, } from './dist.service.js';
6
6
  /** The platform a runner reported, as the tarballs name it. */
7
7
  export declare function runnerTarget(runner: Pick<Runner, 'os' | 'arch'>): string;
8
+ /** An update for a runner: a tarball the application serves, or a package to install from npm. */
9
+ export type RunnerUpgrade = UpgradeNotice | NpmUpgradeNotice;
8
10
  /**
9
11
  * A newer version of the product `runner` runs as (`nocobase-runner`, or a CLI that carries the runner) that the
10
12
  * application serves for its platform, if there is one. A runner that reported no product is offered none: it may be
11
13
  * carried by a CLI that no longer carries it.
14
+ *
15
+ * The tarball is offered whenever there is one. Only when the application has none of the product, and names it on npm
16
+ * (`agents.dist.npm`), is the package offered, and then only to a runner with the `npm` feature: any other runner is
17
+ * offered nothing, as before.
12
18
  */
13
- export declare function upgradeFor(dist: DistService, runner: Pick<Runner, 'os' | 'arch' | 'version' | 'product'>): Promise<UpgradeNotice | undefined>;
19
+ export declare function upgradeFor(dist: DistService, runner: Pick<Runner, 'os' | 'arch' | 'version' | 'product' | 'features'>): Promise<RunnerUpgrade | undefined>;
20
+ /** Where an update goes in a heartbeat answer: a tarball in `upgrade`, an npm package in `npmUpgrade`. */
21
+ export declare function upgradeFields(upgrade: RunnerUpgrade | undefined): Pick<HeartbeatResponse, 'upgrade' | 'npmUpgrade'>;
14
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/distribution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,MAAM,CAExE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,GAC1D,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAapC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/distribution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,MAAM,CAExE;AAED,kGAAkG;AAClG,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,GACvE,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAwBpC;AAED,0GAA0G;AAC1G,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,GAAG,SAAS,GACjC,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,YAAY,CAAC,CAGnD"}
@@ -1,4 +1,4 @@
1
- import { compareVersions } from '@nocobase/agent-protocol';
1
+ import { compareVersions, NPM_UPGRADE_FEATURE, } from '@nocobase/agent-protocol';
2
2
  export { createDownloadTokenService, DOWNLOAD_TOKEN_MAX_DOWNLOADS, DOWNLOAD_TOKEN_TTL_MS, } from './download-tokens.js';
3
3
  export { createDistService, DEFAULT_CHANNEL, } from './dist.service.js';
4
4
  /** The platform a runner reported, as the tarballs name it. */
@@ -9,20 +9,43 @@ export function runnerTarget(runner) {
9
9
  * A newer version of the product `runner` runs as (`nocobase-runner`, or a CLI that carries the runner) that the
10
10
  * application serves for its platform, if there is one. A runner that reported no product is offered none: it may be
11
11
  * carried by a CLI that no longer carries it.
12
+ *
13
+ * The tarball is offered whenever there is one. Only when the application has none of the product, and names it on npm
14
+ * (`agents.dist.npm`), is the package offered, and then only to a runner with the `npm` feature: any other runner is
15
+ * offered nothing, as before.
12
16
  */
13
17
  export async function upgradeFor(dist, runner) {
14
18
  if (runner.product === null)
15
19
  return undefined;
16
20
  const latest = await dist.find(runner.product, runnerTarget(runner));
17
- if (!latest || compareVersions(latest.version, runner.version) <= 0)
21
+ if (latest) {
22
+ if (compareVersions(latest.version, runner.version) <= 0)
23
+ return undefined;
24
+ return {
25
+ minVersion: '0.0.0',
26
+ latestVersion: latest.version,
27
+ downloadUrl: latest.url,
28
+ sha256: latest.sha256,
29
+ channel: latest.channel,
30
+ reason: `The application serves ${latest.product} ${latest.version} on the ${latest.channel} channel.`,
31
+ };
32
+ }
33
+ if (!runner.features.includes(NPM_UPGRADE_FEATURE))
34
+ return undefined;
35
+ const npm = await dist.npmPackage(runner.product);
36
+ if (!npm || compareVersions(npm.version, runner.version) <= 0)
18
37
  return undefined;
19
38
  return {
20
- minVersion: '0.0.0',
21
- latestVersion: latest.version,
22
- downloadUrl: latest.url,
23
- sha256: latest.sha256,
24
- channel: latest.channel,
25
- reason: `The application serves ${latest.product} ${latest.version} on the ${latest.channel} channel.`,
39
+ latestVersion: npm.version,
40
+ package: npm.package,
41
+ channel: npm.channel,
42
+ reason: `The application runs ${npm.product} ${npm.version}: install ${npm.package}@${npm.version} from npm.`,
26
43
  };
27
44
  }
45
+ /** Where an update goes in a heartbeat answer: a tarball in `upgrade`, an npm package in `npmUpgrade`. */
46
+ export function upgradeFields(upgrade) {
47
+ if (upgrade === undefined)
48
+ return {};
49
+ return 'downloadUrl' in upgrade ? { upgrade } : { npmUpgrade: upgrade };
50
+ }
28
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/distribution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAI/E,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,GAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAIhB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,MAAmC;IAC9D,OAAO,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAiB,EACjB,MAA2D;IAE3D,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QACjE,OAAO,SAAS,CAAC;IACnB,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,MAAM,CAAC,OAAO;QAC7B,WAAW,EAAE,MAAM,CAAC,GAAG;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,0BAA0B,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,OAAO,WAAW;KACvG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/distribution/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,GAIpB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,qBAAqB,GAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAKhB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,MAAmC;IAC9D,OAAO,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAKD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAiB,EACjB,MAAwE;IAExE,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3E,OAAO;YACL,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,WAAW,EAAE,MAAM,CAAC,GAAG;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,0BAA0B,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,OAAO,WAAW;SACvG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,OAAO;QAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,wBAAwB,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,aAAa,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,YAAY;KAC9G,CAAC;AACJ,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,aAAa,CAC3B,OAAkC;IAElC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC1E,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type DistArtifact } from '@nocobase/agent-protocol';
1
+ import { type DistArtifact, type DistNpmPackage, type DistResolution } from '@nocobase/agent-protocol';
2
2
  import type { Hono, MiddlewareHandler } from 'hono';
3
3
  import type { Agents } from '../../composition.js';
4
4
  import type { AdminEnv } from './admin.js';
@@ -16,5 +16,9 @@ export interface DistRoutesOptions {
16
16
  }
17
17
  /** `key=value` lines a POSIX shell reads without a JSON parser. Values never contain a newline. */
18
18
  export declare function artifactEnv(artifact: DistArtifact): string;
19
+ /** The same lines for an npm answer, led by `kind=npm`; only a caller that sent `accept=npm` reads them. */
20
+ export declare function npmPackageEnv(npm: DistNpmPackage): string;
21
+ /** `artifactEnv` or `npmPackageEnv`, whichever the answer is. */
22
+ export declare function resolutionEnv(resolution: DistResolution): string;
19
23
  export declare function createDistRoutes(services: Pick<Agents, 'runners' | 'dist' | 'downloadTokens'>, options?: DistRoutesOptions): Hono;
20
24
  //# sourceMappingURL=dist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist.d.ts","sourceRoot":"","sources":["../../../../server/routes/runners/dist.ts"],"names":[],"mappings":"AAeA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,KAAK,EAAW,IAAI,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;CAC/C;AAED,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAY1D;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAC7D,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CAmNN"}
1
+ {"version":3,"file":"dist.d.ts","sourceRoot":"","sources":["../../../../server/routes/runners/dist.ts"],"names":[],"mappings":"AAeA,OAAO,EAWL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,KAAK,EAAW,IAAI,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;CAC/C;AAED,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAc1D;AAED,4GAA4G;AAC5G,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAUzD;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAIhE;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAC7D,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CA4NN"}
@@ -12,7 +12,7 @@
12
12
  * signed in yet install the CLI, after which `acme login` signs it in as that person.
13
13
  */
14
14
  import { Readable } from 'node:stream';
15
- import { DistArtifactSchema, DistManifestSchema, HEADERS, ProtocolError, } from '@nocobase/agent-protocol';
15
+ import { DIST_ACCEPT_NPM, DIST_TARGET_PATTERN, distAccepts, DistArtifactSchema, DistManifestSchema, DistNpmPackageSchema, DistResolutionSchema, HEADERS, isDistNpmPackage, ProtocolError, UNIVERSAL_TARGET, } from '@nocobase/agent-protocol';
16
16
  import { apiErrorResponse, apiErrorResponses, apiValidator, dataResponse, cliRoute, describeRoute, resolver, } from '@nocobase/app-server/router';
17
17
  import { z } from 'zod';
18
18
  import { domainRouter } from '../../kernel/http.js';
@@ -29,9 +29,29 @@ export function artifactEnv(artifact) {
29
29
  `sha256=${parsed.sha256}`,
30
30
  `size=${parsed.size}`,
31
31
  `channel=${parsed.channel}`,
32
+ // Only for the universal tarball, so the answer for a tarball built for the platform stays as it was.
33
+ ...(parsed.universal === true ? ['universal=true'] : []),
32
34
  '',
33
35
  ].join('\n');
34
36
  }
37
+ /** The same lines for an npm answer, led by `kind=npm`; only a caller that sent `accept=npm` reads them. */
38
+ export function npmPackageEnv(npm) {
39
+ const parsed = DistNpmPackageSchema.parse(npm);
40
+ return [
41
+ `kind=${parsed.kind}`,
42
+ `product=${parsed.product}`,
43
+ `version=${parsed.version}`,
44
+ `package=${parsed.package}`,
45
+ `channel=${parsed.channel}`,
46
+ '',
47
+ ].join('\n');
48
+ }
49
+ /** `artifactEnv` or `npmPackageEnv`, whichever the answer is. */
50
+ export function resolutionEnv(resolution) {
51
+ return isDistNpmPackage(resolution)
52
+ ? npmPackageEnv(resolution)
53
+ : artifactEnv(resolution);
54
+ }
35
55
  export function createDistRoutes(services, options = {}) {
36
56
  const router = domainRouter();
37
57
  /** What a download token is asked for on this request: the manifest, a platform, or a tarball (which counts). */
@@ -41,9 +61,10 @@ export function createDistRoutes(services, options = {}) {
41
61
  // Checked before the file is looked up, so an invalid token learns nothing about which files there are.
42
62
  await services.downloadTokens.admit(token, { product });
43
63
  const found = await services.dist.file(product, version, file);
64
+ // The universal tarball serves every platform, so it downloads under whichever one the token is bound to.
44
65
  await services.downloadTokens.admit(token, {
45
66
  product,
46
- target: found.target,
67
+ ...(found.target === UNIVERSAL_TARGET ? {} : { target: found.target }),
47
68
  download: true,
48
69
  });
49
70
  return;
@@ -117,14 +138,14 @@ export function createDistRoutes(services, options = {}) {
117
138
  operationId: 'agentsResolveDistArtifact',
118
139
  // Plumbing: the runner, its install script and `acme` itself download from here.
119
140
  ...cliRoute(false),
120
- description: `The current version of \`product\` (the application's CLI, which carries the runner, or \`nocobase-runner\`) for \`target\` (such as \`darwin-arm64\` or \`linux-x64\`), with its download path and SHA-256. \`format=env\` answers the same as \`key=value\` lines a POSIX shell reads, as the install script does. Never cached. ${credentials}`,
141
+ description: `The current version of \`product\` (the application's CLI, which carries the runner, or \`nocobase-runner\`) for \`target\` (such as \`darwin-arm64\` or \`linux-x64\`), with its download path and SHA-256: the tarball built for that platform, else the universal one (\`universal: true\`), which carries no Node and needs Node.js 24 or newer on the machine. \`format=env\` answers the same as \`key=value\` lines a POSIX shell reads, as the install script does. With \`accept=npm\`, a product the application has no tarball of but names on npm (\`agents.dist.npm\`) is answered as \`{ kind: 'npm', product, version, package, channel }\`, the package and exact version to install with Node.js 24 or later, for every platform; without it such a product is 404 as before. A product with a tarball is answered the same either way. Never cached. ${credentials}`,
121
142
  security: downloadSecurity,
122
143
  responses: {
123
144
  200: {
124
- description: 'The artifact: `{ data }` in JSON, or with `format=env` the lines `product=`, `version=`, `target=`, `url=`, `sha256=`, `size=` and `channel=` as `text/plain`.',
145
+ description: 'The artifact: `{ data }` in JSON, or with `format=env` the lines `product=`, `version=`, `target=`, `url=`, `sha256=`, `size=` and `channel=` as `text/plain`, and `universal=true` when the platform gets the universal tarball, which needs Node.js 24 or newer on the machine. An npm answer (only with `accept=npm`) is `{ data: { kind: \'npm\', ... } }`, or the lines `kind=npm`, `product=`, `version=`, `package=` and `channel=`.',
125
146
  content: {
126
147
  'application/json': {
127
- schema: resolver(z.object({ data: DistArtifactSchema })),
148
+ schema: resolver(z.object({ data: DistResolutionSchema })),
128
149
  },
129
150
  'text/plain': {
130
151
  schema: {
@@ -139,12 +160,18 @@ export function createDistRoutes(services, options = {}) {
139
160
  },
140
161
  }), apiValidator('param', DistTargetParams), apiValidator('query', DistTargetQuery), async (context) => {
141
162
  const { product, target } = context.req.valid('param');
142
- const artifact = await services.dist.resolve(product, target);
143
- if (context.req.valid('query').format === 'env')
144
- return context.text(artifactEnv(artifact), 200, {
163
+ const query = context.req.valid('query');
164
+ // An npm answer only to a caller that asked for it: everyone else is answered exactly as before it existed.
165
+ const npm = distAccepts(query.accept, DIST_ACCEPT_NPM) &&
166
+ DIST_TARGET_PATTERN.test(target)
167
+ ? await services.dist.npmPackage(product)
168
+ : null;
169
+ const resolution = npm ?? (await services.dist.resolve(product, target));
170
+ if (query.format === 'env')
171
+ return context.text(resolutionEnv(resolution), 200, {
145
172
  'cache-control': 'no-store',
146
173
  });
147
- return context.json({ data: artifact }, 200, {
174
+ return context.json({ data: resolution }, 200, {
148
175
  'cache-control': 'no-store',
149
176
  });
150
177
  });
@@ -1 +1 @@
1
- {"version":3,"file":"dist.js","sourceRoot":"","sources":["../../../../server/routes/runners/dist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dist.js","sourceRoot":"","sources":["../../../../server/routes/runners/dist.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../../server/routes/runners/install.ts"],"names":[],"mappings":"AA6CA,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAO1C,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,oGAAoG;IACpG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CASnE;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,gBAAgB,CAAM,GAC1E,MAAM,CA2BR;AA0PD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAuCvE"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../../server/routes/runners/install.ts"],"names":[],"mappings":"AA2DA,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAO1C,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,oGAAoG;IACpG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CASnE;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,gBAAgB,CAAM,GAC1E,MAAM,CA2BR;AA+TD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAuCvE"}
@@ -14,13 +14,26 @@
14
14
  * for each product it:
15
15
  *
16
16
  * 1. asks the application which version it serves for this platform (`DIST_ROUTES.resolve`), sending the token;
17
- * 2. downloads that standalone tarball (it bundles Node, so nothing needs to be installed first), checks its SHA-256,
18
- * and unpacks it into `<prefix>/versions/<version>`, pointing `<prefix>/current` at it and `<bin-dir>/<command>`
17
+ * 2. downloads that tarball, checks its SHA-256, and unpacks it into `<prefix>/versions/<version>`, pointing `<prefix>/current` at it and `<bin-dir>/<command>`
19
18
  * at `<prefix>/current/bin/<command>`, and records the installation in `<prefix>/install.json` (`mode`: `cli` for
20
- * the CLI, `runner` for the runner), which `<cli> update` and the runner's self-update read.
19
+ * the CLI, `runner` for the runner), which `<cli> update` and the runner's self-update read. A tarball built for the
20
+ * platform bundles its Node. The universal one (`universal=true` in the answer) carries none: before downloading
21
+ * it the script checks that `node` on PATH is Node.js 24 or newer, failing with how to install it otherwise, and
22
+ * once it is unpacked links `<prefix>/node` to that `node`, which the package's launcher runs it with, so a user
23
+ * service started without the shell's PATH (launchd, systemd) still finds it.
21
24
  *
22
- * With `--runner` it then registers the runner with the token (`nocobase-runner register`), installs and starts the
23
- * user service (`nocobase-runner service install`: a launchd agent or a systemd user unit), and waits until it runs.
25
+ * The script asks with `accept=npm`, so an application that serves no tarball of a product and names its npm package
26
+ * instead (`DistNpmPackage`, `kind=npm` in the answer) is followed too: after the same Node.js 24 check, and a check
27
+ * that `npm` is on PATH (or `NOCOBASE_NPM`), it runs `npm install --prefix <prefix>/versions/<version>.partial
28
+ * --no-save --no-audit --no-fund --omit=optional <package>@<version>` with the npm configuration of the person running
29
+ * it, writes `bin/<command>` beside `node_modules` (the launcher of `npmLauncherScript`, which starts
30
+ * `node_modules/.bin/<command>` with the Node it finds as the universal launcher does), renames the directory to
31
+ * `<prefix>/versions/<version>`, and links `<prefix>/node` as for a universal tarball. Everything after that, from
32
+ * `current` to the service, is the same for both.
33
+ *
34
+ * With `--runner` it warns when `pnpm` is not on PATH, suggesting `corepack enable`, and carries on. It then registers
35
+ * the runner with the token (`nocobase-runner register`), installs and starts the user service
36
+ * (`nocobase-runner service install`: a launchd agent or a systemd user unit), and waits until it runs.
24
37
  * An application that serves no CLI still gets its runtime: the CLI is skipped with a note.
25
38
  *
26
39
  * The script is served with the server's address it was requested from as its default `--server`, so the CLI-only
@@ -32,6 +45,7 @@
32
45
  * runner's state as it does for the runner itself. `nocobase-runner uninstall` undoes the runner's part.
33
46
  */
34
47
  import { CREDENTIAL_PREFIXES, DIST_PRODUCT_PATTERN, DIST_ROUTES, HEADERS, RUNNER_PRODUCT, } from '@nocobase/agent-protocol';
48
+ import { npmLauncherScript } from '@nocobase/app-cli-client/install';
35
49
  import { apiErrorResponse, cliRoute, describeRoute, } from '@nocobase/app-server/router';
36
50
  import { Hono } from 'hono';
37
51
  import { tags } from '../openapi.js';
@@ -185,6 +199,10 @@ else
185
199
  fail "sha256sum or shasum is required to check the download."
186
200
  fi
187
201
 
202
+ if [ "$runner" = 1 ] && ! command -v pnpm >/dev/null 2>&1; then
203
+ printf '%s\\n' "Note: pnpm is not on PATH. Runs that install a project's dependencies use it; run \\"corepack enable\\" (it comes with Node.js) to get it. Continuing." >&2
204
+ fi
205
+
188
206
  tmp="$(mktemp -d)"
189
207
  trap 'rm -rf "$tmp"' EXIT INT TERM
190
208
  runner_bin="$runner_prefix/current/bin/$runner_cmd"
@@ -196,6 +214,35 @@ registered() {
196
214
 
197
215
  field() { sed -n "s/^$1=//p" "$tmp/resolve" | head -n 1; }
198
216
 
217
+ # A universal package carries no Node: sets node_bin to the node on PATH when it is Node.js 24 or newer, and fails
218
+ # saying how to install one otherwise. require_node <command>.
219
+ require_node() {
220
+ node_hint="Install Node.js 24 or newer (https://nodejs.org/en/download, or with a version manager: nvm install 24), open a new shell so that node is on PATH, and run this command again."
221
+ node_bin="$(command -v node 2>/dev/null || true)"
222
+ [ -n "$node_bin" ] || fail "$1 needs Node.js 24 or newer, and node is not on PATH. $node_hint"
223
+ node_version="$("$node_bin" -p 'process.versions.node' 2>/dev/null || true)"
224
+ case "$node_version" in
225
+ ''|*[!0-9.]*) fail "$1 needs Node.js 24 or newer, and $node_bin does not say its version. $node_hint" ;;
226
+ esac
227
+ [ "\${node_version%%.*}" -ge 24 ] || fail "$1 needs Node.js 24 or newer; $node_bin is $node_version. $node_hint"
228
+ }
229
+
230
+ # A package the application names on npm is installed with npm: sets npm_bin to NOCOBASE_NPM or the npm on PATH, and
231
+ # fails saying how to get one otherwise. require_npm <command>.
232
+ require_npm() {
233
+ npm_bin="\${NOCOBASE_NPM:-$(command -v npm 2>/dev/null || true)}"
234
+ if [ -z "$npm_bin" ] || [ ! -x "$npm_bin" ]; then
235
+ fail "$1 is installed from npm, and npm is not on PATH. npm comes with Node.js: install Node.js 24 or newer from https://nodejs.org/en/download (a version manager such as nvm installs npm too), or set NOCOBASE_NPM to its path, and run this command again."
236
+ fi
237
+ }
238
+
239
+ # The launcher of a version installed from npm: <version>/bin/<command> starts node_modules/.bin/<command> with the
240
+ # first Node.js 24 or newer it finds, as the universal tarball's launcher does.
241
+ write_npm_launcher() {
242
+ cat <<'LAUNCHER'
243
+ ${npmLauncherScript()}LAUNCHER
244
+ }
245
+
199
246
  # Installs one product: install_product <command> <prefix> <mode>. Sets "installed" to what happened: "new", "kept"
200
247
  # (the token was not accepted, but the CLI is installed), "used" (the token was used, by the runner registered here)
201
248
  # or "missing" (the application serves no CLI; with --runner the runtime is installed without it).
@@ -206,7 +253,7 @@ install_product() {
206
253
  installed=new
207
254
  status="$(curl -sS -o "$tmp/resolve" -w '%{http_code}' \\
208
255
  -H "$header: $token" \\
209
- "$server/api/agents/dist/products/$product/targets/$target?format=env")" ||
256
+ "$server/api/agents/dist/products/$product/targets/$target?format=env&accept=npm")" ||
210
257
  fail "Could not reach $server."
211
258
  if [ "$status" = 401 ] && [ "$runner" = 1 ] && registered; then
212
259
  installed=used
@@ -223,23 +270,54 @@ install_product() {
223
270
  message="$(sed -n 's/.*"message":"\\([^"]*\\)".*/\\1/p' "$tmp/resolve")"
224
271
  fail "$server answered $status: \${message:-$(cat "$tmp/resolve")}"
225
272
  fi
273
+ kind="$(field kind)"
226
274
  version="$(field version)"
227
- url="$(field url)"
228
- checksum="$(field sha256)"
229
275
  case "$version" in
230
276
  ''|*[!0-9A-Za-z.+-]*) fail "The server named an unexpected version: $version" ;;
231
277
  esac
232
- case "$url" in
233
- /*) ;;
234
- *) fail "The server named an unexpected download: $url" ;;
235
- esac
236
- case "$checksum" in
237
- *[!0-9a-f]*|'') fail "The server named an unexpected checksum: $checksum" ;;
238
- esac
278
+ universal=""
279
+ if [ "$kind" = npm ]; then
280
+ package="$(field package)"
281
+ case "$package" in
282
+ ''|*[!0-9a-z@/._~-]*) fail "The server named an unexpected npm package: $package" ;;
283
+ esac
284
+ require_node "$product"
285
+ require_npm "$product"
286
+ say "$product $version comes from npm ($package@$version) and runs on this machine's Node.js $node_version ($node_bin)."
287
+ else
288
+ url="$(field url)"
289
+ checksum="$(field sha256)"
290
+ case "$url" in
291
+ /*) ;;
292
+ *) fail "The server named an unexpected download: $url" ;;
293
+ esac
294
+ case "$checksum" in
295
+ *[!0-9a-f]*|'') fail "The server named an unexpected checksum: $checksum" ;;
296
+ esac
297
+ universal="$(field universal)"
298
+ if [ "$universal" = true ]; then
299
+ require_node "$product"
300
+ say "$product $version runs on this machine's Node.js $node_version ($node_bin)."
301
+ fi
302
+ fi
239
303
 
240
304
  dest="$dir/versions/$version"
241
305
  if [ -x "$dest/bin/$product" ]; then
242
306
  say "$product $version for $target is already installed in $dest."
307
+ elif [ "$kind" = npm ]; then
308
+ say "Installing $package@$version with npm ..."
309
+ run rm -rf "$dest.partial"
310
+ run mkdir -p "$dest.partial"
311
+ # No optional dependencies: the coding tools' SDKs list one package per platform, each carrying a binary the
312
+ # runner never starts.
313
+ run "$npm_bin" install --prefix "$dest.partial" --no-save --no-audit --no-fund --omit=optional "$package@$version"
314
+ if [ "$dry_run" = 0 ]; then
315
+ [ -e "$dest.partial/node_modules/.bin/$product" ] || fail "$package@$version provides no $product command."
316
+ mkdir -p "$dest.partial/bin"
317
+ write_npm_launcher >"$dest.partial/bin/$product"
318
+ chmod 755 "$dest.partial/bin/$product"
319
+ fi
320
+ run mv "$dest.partial" "$dest"
243
321
  else
244
322
  say "Downloading $product $version for $target from $server ..."
245
323
  run curl -fSL --progress-bar -H "$header: $token" -o "$tmp/$product.tar.gz" "$server$url"
@@ -254,6 +332,10 @@ install_product() {
254
332
  run mv "$dest.partial" "$dest"
255
333
  fi
256
334
  run ln -sfn "versions/$version" "$dir/current"
335
+ if [ "$universal" = true ] || [ "$kind" = npm ]; then
336
+ # The launcher's first choice, so a service that does not have this shell's PATH runs the same Node.
337
+ run ln -sfn "$node_bin" "$dir/node"
338
+ fi
257
339
  run mkdir -p "$bin_dir"
258
340
  run ln -sfn "$dir/current/bin/$product" "$bin_dir/$product"
259
341
  if [ "$dry_run" = 0 ]; then
@@ -308,6 +390,7 @@ if [ "$runner" = 1 ]; then
308
390
  else
309
391
  say "Registered. Start the runner with: $runner_bin start"
310
392
  fi
393
+ say "Note: agents run with full access as $(id -un), with this user's home and credentials. The runner is not a security boundary: run it as a dedicated user, in a container or in a VM."
311
394
  else
312
395
  say "$cli is installed: $bin_dir/$cli"
313
396
  fi
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../server/routes/runners/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../server/routes/runners/install.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@
17
17
  import { ClaimRequestSchema, ClaimResponseSchema, EventsResponseSchema, HEADERS, HeartbeatRequestSchema, HeartbeatResponseSchema, JobFinishResponseSchema, JobLeaseResponseSchema, JobStatusResponseSchema, JobCancelAckRequestSchema, JobCompleteRequestSchema, JobEventsRequestSchema, JobFailRequestSchema, JobStartRequestSchema, ActiveJobSchema, ActiveRunSchema, isProtocolSupported, LeaseRequestSchema, MIN_PROTOCOL_VERSION, PROTOCOL_VERSION, ProtocolError, RegisterRequestSchema, RegisterResponseSchema, RunnerFeatureSchema, RunnerPolicySchema, TIMINGS, ReportedToolInfoSchema, WorkspacesRequestSchema, WorkspacesResponseSchema, } from '@nocobase/agent-protocol';
18
18
  import { apiErrorResponse, apiValidator, dataResponse, cliRoute, describeRoute, parseApiInput, } from '@nocobase/app-server/router';
19
19
  import { z } from 'zod';
20
- import { upgradeFor } from '../../distribution/index.js';
20
+ import { upgradeFields, upgradeFor } from '../../distribution/index.js';
21
21
  import { domainRouter } from '../../kernel/http.js';
22
22
  import { upgradeRequiredOf } from '../../runners/index.js';
23
23
  import { ClaimQuery, JobParams } from '../schemas.js';
@@ -142,7 +142,7 @@ export function createRunnerRoutes(services, options = {}) {
142
142
  operationId: 'agentsRunnerHeartbeat',
143
143
  // Runner protocol: only a runner calls it.
144
144
  ...cliRoute(false),
145
- description: "Reports what the runner holds and its load, every `heartbeatIntervalMs`, and answers which runs and jobs to cancel or release, and whether an upgrade is available. A runner of a protocol this application does not serve is answered with `compatibility` and told to release everything it holds. The body is validated in the handler, against what the runner's protocol allows.",
145
+ description: "Reports what the runner holds and its load, every `heartbeatIntervalMs`, and answers which runs and jobs to cancel or release, and whether an upgrade is available: a tarball in `upgrade`, or, only to a runner with the `npm` feature when the application has no tarball of its product, a package to install from npm in `npmUpgrade`. A runner of a protocol this application does not serve is answered with `compatibility` and told to release everything it holds. The body is validated in the handler, against what the runner's protocol allows.",
146
146
  security: runnerKeySecurity,
147
147
  parameters: [protocolHeader],
148
148
  requestBody: jsonRequestBody(HeartbeatRequestSchema),
@@ -161,7 +161,7 @@ export function createRunnerRoutes(services, options = {}) {
161
161
  const response = {
162
162
  ok: true,
163
163
  serverTime: services.clock.now().toISOString(),
164
- ...(upgrade ? { upgrade } : {}),
164
+ ...upgradeFields(upgrade),
165
165
  compatibility: upgradeRequiredOf(runner.protocolVersion),
166
166
  cancelRequested: [],
167
167
  release: request.active.map((run) => run.runId),
@@ -186,7 +186,7 @@ export function createRunnerRoutes(services, options = {}) {
186
186
  const response = {
187
187
  ok: true,
188
188
  serverTime: services.clock.now().toISOString(),
189
- ...(upgrade ? { upgrade } : {}),
189
+ ...upgradeFields(upgrade),
190
190
  cancelRequested,
191
191
  release,
192
192
  ...(jobs ? { jobs } : {}),