@cpajs/cpa 0.0.1-alpha-2 → 0.0.1-alpha-3

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/README.md CHANGED
@@ -51,7 +51,12 @@ await server.stop();
51
51
  - `managementKey` is passed through `MANAGEMENT_PASSWORD`, so it never touches disk. Upstream treats that
52
52
  variable as also allowing remote management. The key, config secrets and `redact` values are masked in logs and
53
53
  errors.
54
- - `binaryPath` overrides the bundled binary. `args` adds CLI flags, for example `['-local-model']`.
54
+ - CLI flags are typed options:
55
+ - `localModel: true` → `-local-model`, which uses the embedded model catalogs.
56
+ - `home: { jwt, disableClusterDiscovery }` → Home mode. The JWT is passed through `HOME_JWT`, so it never appears in argv.
57
+
58
+ `args` is only for flags that plugins register. One-shot commands (`-*-login`, `-discover`, `-tui`, …) and flags that have a typed option are rejected.
59
+ - `binaryPath` overrides the bundled binary.
55
60
 
56
61
  ## Manage a server
57
62
 
@@ -136,7 +141,7 @@ Release tooling, all in `scripts/` and run directly with Node's type stripping:
136
141
  | `install-test.ts` | Install the tarballs through a local registry with npm, pnpm or bun, and run them. |
137
142
  | `trust-publishers.ts` | Configure npm trusted publishing for all packages (run locally after the first publish). |
138
143
 
139
- `.github/workflows/release.yml` runs these steps across the whole platform matrix and publishes on `v*` tags through npm trusted publishing (OIDC). Prerelease versions such as `0.0.1-alpha-1` go to a matching dist-tag (`alpha`). `trust-publishers.ts` configures trusted publishing for every package; npm only allows this once a package exists, so the very first release needs a temporary `NPM_TOKEN` secret.
144
+ `.github/workflows/release.yml` runs these steps across the whole platform matrix and publishes on `v*` tags through npm trusted publishing (OIDC). Prerelease versions such as `0.0.1-alpha-1` go to a matching dist-tag (`alpha`). There is no npm token; `trust-publishers.ts` configures the trusted publisher for every package. A newly added platform package has to exist on npm before it can be trusted.
140
145
 
141
146
  ## License
142
147
 
@@ -0,0 +1,4 @@
1
+ import type { StartServerOptions } from './types.ts';
2
+ /** CLI arguments after `-config <file>`: typed options first, then `args`. */
3
+ export declare function buildArgs(options: StartServerOptions): string[];
4
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/server/args.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmCrD,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAe/D"}
@@ -0,0 +1,54 @@
1
+ import { CpaStartError } from './errors.js';
2
+ // Flags that make cli-proxy-api run a one-shot command or an interactive UI instead of the server.
3
+ const COMMAND_FLAGS = new Set([
4
+ 'codex-login',
5
+ 'codex-device-login',
6
+ 'claude-login',
7
+ 'antigravity-login',
8
+ 'kimi-login',
9
+ 'kimi-ai-login',
10
+ 'xai-login',
11
+ 'devin-login',
12
+ 'meta-login',
13
+ 'discover',
14
+ 'discover-json',
15
+ 'vertex-import',
16
+ 'siwc-bind',
17
+ 'tui',
18
+ 'standalone',
19
+ 'management-base-url',
20
+ ]);
21
+ // Flags startServer sets itself.
22
+ const MANAGED_FLAGS = {
23
+ config: 'config / configPath',
24
+ 'local-model': 'localModel',
25
+ 'home-jwt': 'home.jwt',
26
+ 'home-disable-cluster-discovery': 'home.disableClusterDiscovery',
27
+ password: 'managementKey',
28
+ };
29
+ function flagName(arg) {
30
+ const match = /^--?([A-Za-z0-9][\w.-]*)(?:=.*)?$/.exec(arg);
31
+ return match?.[1];
32
+ }
33
+ /** CLI arguments after `-config <file>`: typed options first, then `args`. */
34
+ export function buildArgs(options) {
35
+ for (const arg of options.args ?? []) {
36
+ const name = flagName(arg);
37
+ if (name === undefined)
38
+ continue;
39
+ if (COMMAND_FLAGS.has(name)) {
40
+ throw new CpaStartError('invalid-options', `args must not contain -${name}: it runs a one-shot command instead of the server.`);
41
+ }
42
+ const option = MANAGED_FLAGS[name];
43
+ if (option)
44
+ throw new CpaStartError('invalid-options', `Use the ${option} option instead of passing -${name} in args.`);
45
+ }
46
+ const argv = [];
47
+ if (options.localModel)
48
+ argv.push('-local-model');
49
+ if (options.home?.disableClusterDiscovery)
50
+ argv.push('-home-disable-cluster-discovery');
51
+ argv.push(...(options.args ?? []));
52
+ return argv;
53
+ }
54
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/server/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,mGAAmG;AACnG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,aAAa;IACb,oBAAoB;IACpB,cAAc;IACd,mBAAmB;IACnB,YAAY;IACZ,eAAe;IACf,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,eAAe;IACf,eAAe;IACf,WAAW;IACX,KAAK;IACL,YAAY;IACZ,qBAAqB;CACtB,CAAC,CAAC;AACH,iCAAiC;AACjC,MAAM,aAAa,GAA2B;IAC5C,MAAM,EAAE,qBAAqB;IAC7B,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,UAAU;IACtB,gCAAgC,EAAE,8BAA8B;IAChE,QAAQ,EAAE,eAAe;CAC1B,CAAC;AAEF,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,OAA2B;IACnD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,0BAA0B,IAAI,qDAAqD,CAAC,CAAC;QAClI,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM;YAAE,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,WAAW,MAAM,+BAA+B,IAAI,WAAW,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,IAAI,EAAE,uBAAuB;QAAE,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACxF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAc,kBAAkB,EAA0B,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5E,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA2C3D;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAmGtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAc,kBAAkB,EAA0B,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5E,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA+C3D;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAoGtF"}
@@ -2,6 +2,7 @@ import { mkdir, mkdtemp, rm } from 'node:fs/promises';
2
2
  import { tmpdir } from 'node:os';
3
3
  import { join, resolve } from 'node:path';
4
4
  import { setTimeout as delay } from 'node:timers/promises';
5
+ import { buildArgs } from './args.js';
5
6
  import { resolveBinary } from './binary.js';
6
7
  import { inspectConfigFile, writeManagedConfig } from './config.js';
7
8
  import { CpaStartError } from './errors.js';
@@ -25,6 +26,9 @@ function validate(options) {
25
26
  if (options.configPath !== undefined && (options.host !== undefined || options.port !== undefined)) {
26
27
  throw new CpaStartError('invalid-options', 'host and port cannot be combined with configPath; set them in the file.');
27
28
  }
29
+ if (options.home !== undefined && !options.home.jwt) {
30
+ throw new CpaStartError('invalid-options', 'home.jwt must not be empty.');
31
+ }
28
32
  const { port } = options;
29
33
  if (port !== undefined && (!Number.isInteger(port) || port < 0 || port > 65_535)) {
30
34
  throw new CpaStartError('invalid-options', `Invalid port ${String(port)}.`);
@@ -40,6 +44,8 @@ function buildEnv(options) {
40
44
  }
41
45
  if (options.managementKey !== undefined)
42
46
  env.MANAGEMENT_PASSWORD = options.managementKey;
47
+ if (options.home !== undefined)
48
+ env.HOME_JWT = options.home.jwt;
43
49
  return env;
44
50
  }
45
51
  function configListen(options) {
@@ -74,6 +80,7 @@ export async function startServer(options = {}) {
74
80
  const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
75
81
  const deadline = Date.now() + startupTimeoutMs;
76
82
  const env = buildEnv(options);
83
+ const extraArgs = buildArgs(options);
77
84
  try {
78
85
  for (let attempt = 1;; attempt++) {
79
86
  let prepared;
@@ -90,14 +97,14 @@ export async function startServer(options = {}) {
90
97
  prepared = await writeManagedConfig(options.config ?? {}, stateDir, listen);
91
98
  }
92
99
  const { host, port, tls } = prepared.listen;
93
- const redact = createRedactor([options.managementKey, ...prepared.secrets, ...(options.redact ?? [])]);
100
+ const redact = createRedactor([options.managementKey, options.home?.jwt, ...prepared.secrets, ...(options.redact ?? [])]);
94
101
  if (!dynamicPort && !(await isPortFree(host, port))) {
95
102
  throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
96
103
  }
97
104
  const origin = formatOrigin(tls ? 'https' : 'http', connectHost(host), port);
98
105
  let proc;
99
106
  try {
100
- proc = new ManagedProcess(binary.path, ['-config', prepared.configPath, ...(options.args ?? [])], {
107
+ proc = new ManagedProcess(binary.path, ['-config', prepared.configPath, ...extraArgs], {
101
108
  cwd: stateDir,
102
109
  env,
103
110
  redact,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,16 @@ export interface LogLine {
5
5
  /** One line of output with secrets redacted and the trailing newline removed. */
6
6
  line: string;
7
7
  }
8
+ export interface HomeOptions {
9
+ /**
10
+ * Home control plane JWT (`-home-jwt`). It is passed through the `HOME_JWT`
11
+ * environment variable so it never appears in the process list, and it is
12
+ * redacted from logs.
13
+ */
14
+ jwt: string;
15
+ /** Keep using the JWT's address instead of discovering cluster nodes (`-home-disable-cluster-discovery`). */
16
+ disableClusterDiscovery?: boolean;
17
+ }
8
18
  interface CommonServerOptions {
9
19
  /** Use this executable instead of the bundled platform package. */
10
20
  binaryPath?: string;
@@ -19,7 +29,18 @@ interface CommonServerOptions {
19
29
  * as allowing remote management access regardless of `management.allow-remote`.
20
30
  */
21
31
  managementKey?: string;
22
- /** Extra CLI arguments, e.g. `['-local-model']`. Passed as an argv array, never through a shell. */
32
+ /**
33
+ * Use the model catalogs embedded in the binary instead of fetching them
34
+ * (`-local-model`). Explicit `models.*` config sources still win.
35
+ */
36
+ localModel?: boolean;
37
+ /** Run as a node of a CPA Home control plane. Home mode disables the local management API. */
38
+ home?: HomeOptions;
39
+ /**
40
+ * Extra CLI arguments, for flags that plugins register at runtime. Passed as
41
+ * an argv array, never through a shell. One-shot commands (`-*-login`,
42
+ * `-discover`, `-vertex-import`, `-siwc-bind`, `-tui`) and `-config` are rejected.
43
+ */
23
44
  args?: readonly string[];
24
45
  /** Environment for the child process. Defaults to `process.env`; entries set to `undefined` are removed. */
25
46
  env?: Readonly<Record<string, string | undefined>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,mBAAmB;IAC3B,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,4GAA4G;IAC5G,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,yDAAyD;IACzD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,qGAAqG;IACrG,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,0BAA0B,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,gFAAgF;IAChF,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAClD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cpajs/cpa",
3
- "version": "0.0.1-alpha-2",
3
+ "version": "0.0.1-alpha-3",
4
4
  "description": "Run the official CLIProxyAPI from JavaScript and talk to its v8 management API with a typed client",
5
5
  "license": "MIT",
6
6
  "author": "akarachen",
@@ -58,28 +58,28 @@
58
58
  "access": "public"
59
59
  },
60
60
  "optionalDependencies": {
61
- "@cpajs/darwin-x64": "0.0.1-alpha-2",
62
- "@cpajs/darwin-arm64": "0.0.1-alpha-2",
63
- "@cpajs/win32-x64": "0.0.1-alpha-2",
64
- "@cpajs/win32-arm64": "0.0.1-alpha-2",
65
- "@cpajs/win32-ia32": "0.0.1-alpha-2",
66
- "@cpajs/linux-x64-gnu": "0.0.1-alpha-2",
67
- "@cpajs/linux-arm64-gnu": "0.0.1-alpha-2",
68
- "@cpajs/linux-x64-musl": "0.0.1-alpha-2",
69
- "@cpajs/linux-arm64-musl": "0.0.1-alpha-2",
70
- "@cpajs/linux-arm": "0.0.1-alpha-2",
71
- "@cpajs/linux-ia32": "0.0.1-alpha-2",
72
- "@cpajs/linux-riscv64": "0.0.1-alpha-2",
73
- "@cpajs/linux-ppc64": "0.0.1-alpha-2",
74
- "@cpajs/linux-s390x": "0.0.1-alpha-2",
75
- "@cpajs/linux-loong64": "0.0.1-alpha-2",
76
- "@cpajs/linux-mips": "0.0.1-alpha-2",
77
- "@cpajs/linux-mipsel": "0.0.1-alpha-2",
78
- "@cpajs/freebsd-x64": "0.0.1-alpha-2",
79
- "@cpajs/freebsd-arm64": "0.0.1-alpha-2",
80
- "@cpajs/freebsd-ia32": "0.0.1-alpha-2",
81
- "@cpajs/openbsd-x64": "0.0.1-alpha-2",
82
- "@cpajs/openbsd-arm64": "0.0.1-alpha-2",
83
- "@cpajs/netbsd-x64": "0.0.1-alpha-2"
61
+ "@cpajs/darwin-x64": "0.0.1-alpha-3",
62
+ "@cpajs/darwin-arm64": "0.0.1-alpha-3",
63
+ "@cpajs/win32-x64": "0.0.1-alpha-3",
64
+ "@cpajs/win32-arm64": "0.0.1-alpha-3",
65
+ "@cpajs/win32-ia32": "0.0.1-alpha-3",
66
+ "@cpajs/linux-x64-gnu": "0.0.1-alpha-3",
67
+ "@cpajs/linux-arm64-gnu": "0.0.1-alpha-3",
68
+ "@cpajs/linux-x64-musl": "0.0.1-alpha-3",
69
+ "@cpajs/linux-arm64-musl": "0.0.1-alpha-3",
70
+ "@cpajs/linux-arm": "0.0.1-alpha-3",
71
+ "@cpajs/linux-ia32": "0.0.1-alpha-3",
72
+ "@cpajs/linux-riscv64": "0.0.1-alpha-3",
73
+ "@cpajs/linux-ppc64": "0.0.1-alpha-3",
74
+ "@cpajs/linux-s390x": "0.0.1-alpha-3",
75
+ "@cpajs/linux-loong64": "0.0.1-alpha-3",
76
+ "@cpajs/linux-mips": "0.0.1-alpha-3",
77
+ "@cpajs/linux-mipsel": "0.0.1-alpha-3",
78
+ "@cpajs/freebsd-x64": "0.0.1-alpha-3",
79
+ "@cpajs/freebsd-arm64": "0.0.1-alpha-3",
80
+ "@cpajs/freebsd-ia32": "0.0.1-alpha-3",
81
+ "@cpajs/openbsd-x64": "0.0.1-alpha-3",
82
+ "@cpajs/openbsd-arm64": "0.0.1-alpha-3",
83
+ "@cpajs/netbsd-x64": "0.0.1-alpha-3"
84
84
  }
85
85
  }
@@ -0,0 +1,53 @@
1
+ import { CpaStartError } from './errors.ts';
2
+ import type { StartServerOptions } from './types.ts';
3
+
4
+ // Flags that make cli-proxy-api run a one-shot command or an interactive UI instead of the server.
5
+ const COMMAND_FLAGS = new Set([
6
+ 'codex-login',
7
+ 'codex-device-login',
8
+ 'claude-login',
9
+ 'antigravity-login',
10
+ 'kimi-login',
11
+ 'kimi-ai-login',
12
+ 'xai-login',
13
+ 'devin-login',
14
+ 'meta-login',
15
+ 'discover',
16
+ 'discover-json',
17
+ 'vertex-import',
18
+ 'siwc-bind',
19
+ 'tui',
20
+ 'standalone',
21
+ 'management-base-url',
22
+ ]);
23
+ // Flags startServer sets itself.
24
+ const MANAGED_FLAGS: Record<string, string> = {
25
+ config: 'config / configPath',
26
+ 'local-model': 'localModel',
27
+ 'home-jwt': 'home.jwt',
28
+ 'home-disable-cluster-discovery': 'home.disableClusterDiscovery',
29
+ password: 'managementKey',
30
+ };
31
+
32
+ function flagName(arg: string): string | undefined {
33
+ const match = /^--?([A-Za-z0-9][\w.-]*)(?:=.*)?$/.exec(arg);
34
+ return match?.[1];
35
+ }
36
+
37
+ /** CLI arguments after `-config <file>`: typed options first, then `args`. */
38
+ export function buildArgs(options: StartServerOptions): string[] {
39
+ for (const arg of options.args ?? []) {
40
+ const name = flagName(arg);
41
+ if (name === undefined) continue;
42
+ if (COMMAND_FLAGS.has(name)) {
43
+ throw new CpaStartError('invalid-options', `args must not contain -${name}: it runs a one-shot command instead of the server.`);
44
+ }
45
+ const option = MANAGED_FLAGS[name];
46
+ if (option) throw new CpaStartError('invalid-options', `Use the ${option} option instead of passing -${name} in args.`);
47
+ }
48
+ const argv: string[] = [];
49
+ if (options.localModel) argv.push('-local-model');
50
+ if (options.home?.disableClusterDiscovery) argv.push('-home-disable-cluster-discovery');
51
+ argv.push(...(options.args ?? []));
52
+ return argv;
53
+ }
@@ -2,6 +2,7 @@ import { mkdir, mkdtemp, rm } from 'node:fs/promises';
2
2
  import { tmpdir } from 'node:os';
3
3
  import { join, resolve } from 'node:path';
4
4
  import { setTimeout as delay } from 'node:timers/promises';
5
+ import { buildArgs } from './args.ts';
5
6
  import { resolveBinary } from './binary.ts';
6
7
  import { inspectConfigFile, writeManagedConfig, type PreparedConfig } from './config.ts';
7
8
  import { CpaStartError } from './errors.ts';
@@ -34,6 +35,9 @@ function validate(options: StartServerOptions): void {
34
35
  if (options.configPath !== undefined && (options.host !== undefined || options.port !== undefined)) {
35
36
  throw new CpaStartError('invalid-options', 'host and port cannot be combined with configPath; set them in the file.');
36
37
  }
38
+ if (options.home !== undefined && !options.home.jwt) {
39
+ throw new CpaStartError('invalid-options', 'home.jwt must not be empty.');
40
+ }
37
41
  const { port } = options;
38
42
  if (port !== undefined && (!Number.isInteger(port) || port < 0 || port > 65_535)) {
39
43
  throw new CpaStartError('invalid-options', `Invalid port ${String(port)}.`);
@@ -47,6 +51,7 @@ function buildEnv(options: StartServerOptions): NodeJS.ProcessEnv {
47
51
  else env[key] = value;
48
52
  }
49
53
  if (options.managementKey !== undefined) env.MANAGEMENT_PASSWORD = options.managementKey;
54
+ if (options.home !== undefined) env.HOME_JWT = options.home.jwt;
50
55
  return env;
51
56
  }
52
57
 
@@ -83,6 +88,7 @@ export async function startServer(options: StartServerOptions = {}): Promise<Cpa
83
88
  const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
84
89
  const deadline = Date.now() + startupTimeoutMs;
85
90
  const env = buildEnv(options);
91
+ const extraArgs = buildArgs(options);
86
92
 
87
93
  try {
88
94
  for (let attempt = 1; ; attempt++) {
@@ -100,7 +106,7 @@ export async function startServer(options: StartServerOptions = {}): Promise<Cpa
100
106
  }
101
107
 
102
108
  const { host, port, tls } = prepared.listen;
103
- const redact = createRedactor([options.managementKey, ...prepared.secrets, ...(options.redact ?? [])]);
109
+ const redact = createRedactor([options.managementKey, options.home?.jwt, ...prepared.secrets, ...(options.redact ?? [])]);
104
110
  if (!dynamicPort && !(await isPortFree(host, port))) {
105
111
  throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
106
112
  }
@@ -108,7 +114,7 @@ export async function startServer(options: StartServerOptions = {}): Promise<Cpa
108
114
  const origin = formatOrigin(tls ? 'https' : 'http', connectHost(host), port);
109
115
  let proc: ManagedProcess;
110
116
  try {
111
- proc = new ManagedProcess(binary.path, ['-config', prepared.configPath, ...(options.args ?? [])], {
117
+ proc = new ManagedProcess(binary.path, ['-config', prepared.configPath, ...extraArgs], {
112
118
  cwd: stateDir,
113
119
  env,
114
120
  redact,
@@ -7,6 +7,17 @@ export interface LogLine {
7
7
  line: string;
8
8
  }
9
9
 
10
+ export interface HomeOptions {
11
+ /**
12
+ * Home control plane JWT (`-home-jwt`). It is passed through the `HOME_JWT`
13
+ * environment variable so it never appears in the process list, and it is
14
+ * redacted from logs.
15
+ */
16
+ jwt: string;
17
+ /** Keep using the JWT's address instead of discovering cluster nodes (`-home-disable-cluster-discovery`). */
18
+ disableClusterDiscovery?: boolean;
19
+ }
20
+
10
21
  interface CommonServerOptions {
11
22
  /** Use this executable instead of the bundled platform package. */
12
23
  binaryPath?: string;
@@ -21,7 +32,18 @@ interface CommonServerOptions {
21
32
  * as allowing remote management access regardless of `management.allow-remote`.
22
33
  */
23
34
  managementKey?: string;
24
- /** Extra CLI arguments, e.g. `['-local-model']`. Passed as an argv array, never through a shell. */
35
+ /**
36
+ * Use the model catalogs embedded in the binary instead of fetching them
37
+ * (`-local-model`). Explicit `models.*` config sources still win.
38
+ */
39
+ localModel?: boolean;
40
+ /** Run as a node of a CPA Home control plane. Home mode disables the local management API. */
41
+ home?: HomeOptions;
42
+ /**
43
+ * Extra CLI arguments, for flags that plugins register at runtime. Passed as
44
+ * an argv array, never through a shell. One-shot commands (`-*-login`,
45
+ * `-discover`, `-vertex-import`, `-siwc-bind`, `-tui`) and `-config` are rejected.
46
+ */
25
47
  args?: readonly string[];
26
48
  /** Environment for the child process. Defaults to `process.env`; entries set to `undefined` are removed. */
27
49
  env?: Readonly<Record<string, string | undefined>>;