@somewhere-tech/cli 0.31.20 → 0.31.22

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 (53) hide show
  1. package/README.md +0 -59
  2. package/dist/commands/browser.js +2 -3
  3. package/dist/commands/browser.js.map +1 -1
  4. package/dist/commands/check.js +1 -1
  5. package/dist/commands/check.js.map +1 -1
  6. package/dist/commands/deploy.js +5 -0
  7. package/dist/commands/deploy.js.map +1 -1
  8. package/dist/commands/init.js +1 -1
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/typecheck.js +7 -7
  11. package/dist/commands/typecheck.js.map +1 -1
  12. package/dist/index.js +4 -11
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/init-agent-guide.js +4 -4
  15. package/dist/lib/init-install.js +12 -15
  16. package/dist/lib/init-install.js.map +1 -1
  17. package/dist/lib/notify/index.js +5 -8
  18. package/dist/lib/notify/index.js.map +1 -1
  19. package/dist/lib/temp-auth.js +1 -1
  20. package/npm-shrinkwrap.json +3 -5
  21. package/package.json +2 -4
  22. package/bin/swpm.js +0 -9
  23. package/bin/swpx.js +0 -9
  24. package/dist/commands/swpx.js +0 -43
  25. package/dist/commands/swpx.js.map +0 -1
  26. package/dist/lib/notify/providers/advisory.js +0 -30
  27. package/dist/lib/notify/providers/advisory.js.map +0 -1
  28. package/dist/swpm-bin.js +0 -11
  29. package/dist/swpm-bin.js.map +0 -1
  30. package/dist/swpx/check.js +0 -80
  31. package/dist/swpx/check.js.map +0 -1
  32. package/dist/swpx/enforce.js +0 -57
  33. package/dist/swpx/enforce.js.map +0 -1
  34. package/dist/swpx/registry.js +0 -68
  35. package/dist/swpx/registry.js.map +0 -1
  36. package/dist/swpx/render.js +0 -363
  37. package/dist/swpx/render.js.map +0 -1
  38. package/dist/swpx/run-common.js +0 -24
  39. package/dist/swpx/run-common.js.map +0 -1
  40. package/dist/swpx/run-swpm.js +0 -163
  41. package/dist/swpx/run-swpm.js.map +0 -1
  42. package/dist/swpx/run-swpx.js +0 -102
  43. package/dist/swpx/run-swpx.js.map +0 -1
  44. package/dist/swpx/spawn.js +0 -30
  45. package/dist/swpx/spawn.js.map +0 -1
  46. package/dist/swpx/tree.js +0 -101
  47. package/dist/swpx/tree.js.map +0 -1
  48. package/dist/swpx/types.js +0 -14
  49. package/dist/swpx/types.js.map +0 -1
  50. package/dist/swpx/verdict-client.js +0 -165
  51. package/dist/swpx/verdict-client.js.map +0 -1
  52. package/dist/swpx-bin.js +0 -20
  53. package/dist/swpx-bin.js.map +0 -1
package/dist/index.js CHANGED
@@ -28,7 +28,6 @@ import { registerCheck } from './commands/check.js';
28
28
  import { registerApi } from './commands/api.js';
29
29
  import { registerFs } from './commands/fs.js';
30
30
  import { registerMcp } from './commands/mcp.js';
31
- import { registerSwpx } from './commands/swpx.js';
32
31
  import { registerUpdate } from './commands/update.js';
33
32
  import { registerCall } from './commands/call.js';
34
33
  import { registerTasks } from './commands/tasks.js';
@@ -47,15 +46,14 @@ const program = new Command()
47
46
  .name('somewhere')
48
47
  .description('CLI for somewhere.tech')
49
48
  .version(pkg.version);
50
- const passThroughCommand = process.argv[2] === 'npx' || process.argv[2] === 'npm';
51
49
  recordLastRun(process.argv.slice(2));
52
- const jsonOutputRequested = !passThroughCommand && process.argv.includes('--json');
50
+ const jsonOutputRequested = process.argv.includes('--json');
53
51
  setJsonOutputMode(jsonOutputRequested);
54
52
  // First output of every interactive command — see lib/startup-notice.ts.
55
53
  const notice = startupNotice(pkg.version, {
56
54
  isTTY: Boolean(process.stdout.isTTY),
57
55
  jsonOutput: jsonOutputRequested,
58
- passThrough: passThroughCommand,
56
+ passThrough: false,
59
57
  });
60
58
  if (notice)
61
59
  process.stderr.write(notice + '\n');
@@ -63,10 +61,6 @@ if (jsonOutputRequested) {
63
61
  program.exitOverride();
64
62
  program.configureOutput({ writeErr: () => { } });
65
63
  }
66
- // Required so the npx/npm pass-through commands can forward unknown flags to the
67
- // wrapped tool (passThroughOptions). Only affects program-level option ordering
68
- // (global -V/--version/--help still work); each subcommand parses as before.
69
- program.enablePositionalOptions();
70
64
  registerAuth(program);
71
65
  registerInit(program);
72
66
  registerLink(program);
@@ -94,7 +88,6 @@ registerCheck(program);
94
88
  registerApi(program);
95
89
  registerFs(program);
96
90
  registerMcp(program);
97
- registerSwpx(program);
98
91
  registerUpdate(program);
99
92
  registerCall(program);
100
93
  registerTasks(program);
@@ -106,8 +99,8 @@ registerCron(program);
106
99
  registerEmail(program);
107
100
  // User-notification pipeline (update-available, advisories, announcements…).
108
101
  // Centrally gated to interactive, non-CI, non-pass-through commands and emitted to
109
- // STDERR as a parting line AFTER the command — never stdout, agent, or swpx/swpm
110
- // safety output. Fail-open: collectNotices swallows all errors.
102
+ // STDERR as a parting line AFTER the command, never stdout or agent output.
103
+ // Fail-open: collectNotices swallows all errors.
111
104
  //
112
105
  // Do NOT await this before parsing — the once-a-day cache-refresh fetch would add
113
106
  // startup latency to every command. Kick it off, parse immediately; if it resolves
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -37,10 +37,10 @@ export default async function (_req, sw) {
37
37
  }
38
38
  \`\`\`
39
39
 
40
- Ask \`somewhere advisor "<question>"\` first for guidance. Then use
41
- \`somewhere docs <topic>\` for contracts or \`https://somewhere.tech/start.txt\`
42
- for quickstart. Without a shell: MCP \`advisor({ question })\`, then
43
- \`docs({ topic })\`; \`catalog\` finds tools.
40
+ Ordinary lookups: \`somewhere docs <topic>\` or
41
+ \`https://somewhere.tech/start.txt\`; uncertain architecture or composition:
42
+ \`somewhere advisor "<question>"\`. Without a shell: MCP \`docs({ topic })\`,
43
+ \`advisor({ question })\`; \`catalog\` finds tools.
44
44
 
45
45
  No account yet? \`npx @somewhere-tech/cli deploy\` publishes a temporary app and
46
46
  prints its live URL, claim URL, and expiry. On a hosted VM, after consent,
@@ -1,21 +1,18 @@
1
1
  import { spawn } from 'node:child_process';
2
- /**
3
- * Run the same guarded install exposed as `somewhere npm install`. Re-entering
4
- * the current CLI keeps init on the swpm verdict path without assuming where a
5
- * globally or locally installed `somewhere` binary lives.
6
- */
2
+ export function initInstallSpawnSpec(platform) {
3
+ return {
4
+ command: platform === 'win32' ? 'npm.cmd' : 'npm',
5
+ args: ['install', '--no-audit', '--no-fund'],
6
+ shell: platform === 'win32',
7
+ };
8
+ }
9
+ /** Install the generated starter with the system npm executable. */
7
10
  export function runInitInstall({ cwd, quiet }) {
8
11
  return new Promise((resolve) => {
9
- const child = spawn(process.execPath, [
10
- ...process.execArgv,
11
- process.argv[1],
12
- 'npm',
13
- 'install',
14
- '--no-audit',
15
- '--no-fund',
16
- ], {
12
+ const spec = initInstallSpawnSpec(process.platform);
13
+ const child = spawn(spec.command, spec.args, {
17
14
  cwd,
18
- shell: false,
15
+ shell: spec.shell,
19
16
  stdio: quiet ? 'ignore' : 'inherit',
20
17
  });
21
18
  child.once('error', () => resolve(127));
@@ -26,7 +23,7 @@ export async function installInitDependencies(options, runner = runInitInstall)
26
23
  const exitCode = await runner(options);
27
24
  if (exitCode !== 0) {
28
25
  throw new Error(`Starter files were written, but dependency installation exited ${exitCode}. ` +
29
- 'Run `somewhere npm install` in this directory, then try again.');
26
+ 'Run `npm install` in this directory, then try again.');
30
27
  }
31
28
  }
32
29
  //# sourceMappingURL=init-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-install.js","sourceRoot":"","sources":["../../src/lib/init-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAS3C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,EAAsB;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,CAAC,QAAQ,EAChB;YACE,GAAG,OAAO,CAAC,QAAQ;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACf,KAAK;YACL,SAAS;YACT,YAAY;YACZ,WAAW;SACZ,EACD;YACE,GAAG;YACH,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpC,CACF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA2B,EAC3B,SAA4B,cAAc;IAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,kEAAkE,QAAQ,IAAI;YAC5E,gEAAgE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init-install.js","sourceRoot":"","sources":["../../src/lib/init-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAe3C,MAAM,UAAU,oBAAoB,CAAC,QAAyB;IAC5D,OAAO;QACL,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;QACjD,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC;QAC5C,KAAK,EAAE,QAAQ,KAAK,OAAO;KAC5B,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,EAAE,GAAG,EAAE,KAAK,EAAsB;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YAC3C,GAAG;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA2B,EAC3B,SAA4B,cAAc;IAE1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,kEAAkE,QAAQ,IAAI;YAC5E,sDAAsD,CACzD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -2,17 +2,14 @@ import { readFileSync } from 'node:fs';
2
2
  import { dirname, join } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { updateProvider } from './providers/update.js';
5
- // import { advisoryProvider } from './providers/advisory.js'; // dormant — see that file
6
5
  /** Registered notice sources. Add a provider here to surface a new kind of notice;
7
6
  * it inherits the gate + stderr emission below, so it can never reach stdout,
8
- * agent/piped output, or swpx/swpm verdict grading. */
7
+ * or agent/piped output. */
9
8
  const PROVIDERS = [updateProvider];
10
- /** `somewhere <sub>` forms that must stay silent: the verdict/safety pass-throughs
11
- * (their own bins already bypass this entry, but `somewhere swpx …` reaches here)
12
- * and the machine-oriented npx/npm aliases. */
13
- const SKIP_SUBCOMMANDS = new Set(['swpx', 'swpm', 'x', 'm', 'npx', 'npm', 'update']);
14
- /** Commands that own their output or run in a safety-sensitive pass-through
15
- * stay silent. In particular, an `update` process keeps its old in-memory
9
+ /** Commands that manage the CLI update own their terminal output. */
10
+ const SKIP_SUBCOMMANDS = new Set(['update']);
11
+ /** Commands that own their output stay silent. In particular, an `update`
12
+ * process keeps its old in-memory
16
13
  * version after installing the new package, so its generic exit notice would
17
14
  * otherwise repeat the update that just succeeded. */
18
15
  export function subcommandSuppressesNotifications(argv) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/notify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,yFAAyF;AAEzF;;wDAEwD;AACxD,MAAM,SAAS,GAAqB,CAAC,cAAc,CAAC,CAAC;AAErD;;gDAEgD;AAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAErF;;;sDAGsD;AACtD,MAAM,UAAU,iCAAiC,CAAC,IAAc;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC/E,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;+DAE+D;AAC/D,SAAS,oBAAoB,CAAC,IAAc;IAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,kCAAkC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,CAAC,UAAU;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QAAE,OAAO,KAAK,CAAC,CAAC,iBAAiB;IAC3E,IAAI,iCAAiC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6DAE6D;AAC7D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,IAAI,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,oDAAoD;IACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/notify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;6BAE6B;AAC7B,MAAM,SAAS,GAAqB,CAAC,cAAc,CAAC,CAAC;AAErD,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE7C;;;sDAGsD;AACtD,MAAM,UAAU,iCAAiC,CAAC,IAAc;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC/E,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;+DAE+D;AAC/D,SAAS,oBAAoB,CAAC,IAAc;IAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,kCAAkC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,CAAC,UAAU;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QAAE,OAAO,KAAK,CAAC,CAAC,iBAAiB;IAC3E,IAAI,iCAAiC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6DAE6D;AAC7D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,IAAI,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,oDAAoD;IACjE,CAAC;AACH,CAAC"}
@@ -41,7 +41,7 @@ export function solvePow(nonce, difficulty) {
41
41
  }
42
42
  /** Mint a temporary, no-login developer credential: GET the PoW challenge,
43
43
  * solve it locally, POST the solution for a bearer key. `fetchImpl` is
44
- * injectable (same DI seam as src/swpx/run-common.ts) so tests never touch
44
+ * injectable so tests never touch
45
45
  * the network. Throws a clear Error — including the server's own message
46
46
  * where available — on any failure at either step. */
47
47
  export async function mintTempAccount(fetchImpl = globalThis.fetch) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.31.20",
3
+ "version": "0.31.22",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@somewhere-tech/cli",
9
- "version": "0.31.20",
9
+ "version": "0.31.22",
10
10
  "bundleDependencies": [
11
11
  "@modelcontextprotocol/sdk",
12
12
  "chokidar",
@@ -31,9 +31,7 @@
31
31
  "bin": {
32
32
  "cli": "bin/somewhere.js",
33
33
  "somewhere": "bin/somewhere.js",
34
- "sw": "bin/somewhere.js",
35
- "swpm": "bin/swpm.js",
36
- "swpx": "bin/swpx.js"
34
+ "sw": "bin/somewhere.js"
37
35
  },
38
36
  "devDependencies": {
39
37
  "@types/node": "^22.19.21",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.31.20",
3
+ "version": "0.31.22",
4
4
  "description": "CLI for somewhere.tech — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
5
5
  "keywords": [
6
6
  "somewhere",
@@ -23,9 +23,7 @@
23
23
  "bin": {
24
24
  "cli": "bin/somewhere.js",
25
25
  "somewhere": "bin/somewhere.js",
26
- "sw": "bin/somewhere.js",
27
- "swpx": "bin/swpx.js",
28
- "swpm": "bin/swpm.js"
26
+ "sw": "bin/somewhere.js"
29
27
  },
30
28
  "files": [
31
29
  "LICENSE",
package/bin/swpm.js DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import { main } from '../dist/swpm-bin.js';
3
-
4
- main(process.argv.slice(2))
5
- .then((code) => process.exit(code))
6
- .catch((err) => {
7
- console.error(err instanceof Error ? err.message : String(err));
8
- process.exit(1);
9
- });
package/bin/swpx.js DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import { main } from '../dist/swpx-bin.js';
3
-
4
- main(process.argv.slice(2))
5
- .then((code) => process.exit(code))
6
- .catch((err) => {
7
- console.error(err instanceof Error ? err.message : String(err));
8
- process.exit(1);
9
- });
@@ -1,43 +0,0 @@
1
- /** `somewhere npx`, `somewhere npm`, and `somewhere check` — the verdict layer
2
- * surfaced as subcommands of the main CLI (the same logic ships as the
3
- * standalone `swpx` / `swpm` bins). npx/npm are pass-through wrappers, so they
4
- * declare a variadic arg and let unknown flags flow to the target tool
5
- * (passThroughOptions, enabled by program.enablePositionalOptions() in
6
- * index.ts). Each action exits with the gate's own code. */
7
- import { runSwpx } from '../swpx/run-swpx.js';
8
- import { runSwpm } from '../swpx/run-swpm.js';
9
- import { runCheck } from '../swpx/check.js';
10
- export function registerSwpx(program) {
11
- program
12
- .command('npx [args...]')
13
- .description('Run a package with npx after a verdict check (swpx). Verified passes ' +
14
- 'through; flagged stops with evidence; confirmed malware is blocked; if ' +
15
- 'the verdict service is down, falls back to plain npx.')
16
- .allowUnknownOption()
17
- .passThroughOptions()
18
- .action(async (args = []) => {
19
- const { exitCode } = await runSwpx(args);
20
- process.exit(exitCode);
21
- });
22
- program
23
- .command('npm [args...]')
24
- .description('Run npm with an install-time verdict check (swpm). install/add/ci are ' +
25
- 'gated — confirmed malware halts the install; other npm commands pass ' +
26
- 'straight through.')
27
- .allowUnknownOption()
28
- .passThroughOptions()
29
- .action(async (args = []) => {
30
- const { exitCode } = await runSwpm(args);
31
- process.exit(exitCode);
32
- });
33
- program
34
- .command('check [package]')
35
- .description('Check an npm package against the verdict database without running or ' +
36
- 'installing it. Exit code: 0 verified, 1 unverified, 2 blocked, 3 unknown.')
37
- .option('--json', 'Print the raw verdict object (for agents / CI)')
38
- .action(async (pkg, opts) => {
39
- const code = await runCheck(pkg, { json: opts.json === true });
40
- process.exit(code);
41
- });
42
- }
43
- //# sourceMappingURL=swpx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swpx.js","sourceRoot":"","sources":["../../src/commands/swpx.ts"],"names":[],"mappings":"AAAA;;;;;6DAK6D;AAG7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,uEAAuE;QACrE,yEAAyE;QACzE,uDAAuD,CAC1D;SACA,kBAAkB,EAAE;SACpB,kBAAkB,EAAE;SACpB,MAAM,CAAC,KAAK,EAAE,OAAiB,EAAE,EAAE,EAAE;QACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,wEAAwE;QACtE,uEAAuE;QACvE,mBAAmB,CACtB;SACA,kBAAkB,EAAE;SACpB,kBAAkB,EAAE;SACpB,MAAM,CAAC,KAAK,EAAE,OAAiB,EAAE,EAAE,EAAE;QACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CACV,uEAAuE;QACrE,2EAA2E,CAC9E;SACA,MAAM,CAAC,QAAQ,EAAE,gDAAgD,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,GAAuB,EAAE,IAAwB,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,30 +0,0 @@
1
- /** DORMANT — the pipe for "a package you previously ran through swpx/swpm now has
2
- * a security advisory." Not registered in ../index.ts yet; wire it when we want it.
3
- *
4
- * How to turn it on (kept separate from the verdict path so it can never affect
5
- * safety grading):
6
- *
7
- * 1. RECORD USAGE — in the swpx/swpm bins, after a run resolves, append
8
- * {name, version, ts} to ~/.somewhere/used-packages.json. This write MUST be
9
- * fail-open and off the critical path (a try/catch around an async write); it
10
- * must never block the install or change the verdict output.
11
- *
12
- * 2. CHECK HERE — read that file, throttle (e.g. a `checkedAt` stamp, once / 6h),
13
- * batch-query the verdict API for those package@versions, and return a notice
14
- * if any flipped to suspicious/blocked SINCE the user used them (compare
15
- * against a stored last-seen verdict so we only alert on the transition, not
16
- * every run). Keep it to one line, e.g.:
17
- * "⚠ A package you used (foo@1.2.3) now has an advisory. swpx check foo@1.2.3"
18
- *
19
- * 3. REGISTER — add `advisoryProvider` to PROVIDERS in ../index.ts.
20
- *
21
- * It inherits the central gate, so it's already stderr-only, interactive-only,
22
- * and silent during swpx/swpm runs — it surfaces as ambient awareness on normal
23
- * `somewhere` usage, never inline with a live verdict. */
24
- export const advisoryProvider = {
25
- id: 'pkg-advisory',
26
- async getNotice() {
27
- return null; // pipe laid; dormant until the steps above are built
28
- },
29
- };
30
- //# sourceMappingURL=advisory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advisory.js","sourceRoot":"","sources":["../../../../src/lib/notify/providers/advisory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;2DAsB2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,EAAE,EAAE,cAAc;IAClB,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,CAAC,qDAAqD;IACpE,CAAC;CACF,CAAC"}
package/dist/swpm-bin.js DELETED
@@ -1,11 +0,0 @@
1
- /** Entry for the standalone `swpm` binary (and `somewhere npm`).
2
- *
3
- * Every arg goes to runSwpm, which gates install-family subcommands and passes
4
- * everything else straight through to npm. `main` is side-effect-free (deps
5
- * injectable) so it's unit-tested; bin/swpm.js does the process.exit. */
6
- import { runSwpm } from './swpx/run-swpm.js';
7
- export async function main(argv, deps = {}) {
8
- const { exitCode } = await runSwpm(argv, deps);
9
- return exitCode;
10
- }
11
- //# sourceMappingURL=swpm-bin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swpm-bin.js","sourceRoot":"","sources":["../src/swpm-bin.ts"],"names":[],"mappings":"AAAA;;;;0EAI0E;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc,EAAE,OAAgB,EAAE;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,80 +0,0 @@
1
- /** `somewhere check <pkg>[@version] [--json]` (also `swpx check …`) — inspect a
2
- * package WITHOUT running or installing anything. Prints the same verdict block
3
- * as swpx, or the stable `--json` projection for agents.
4
- *
5
- * Exit code is a severity ladder so it composes in CI / agent loops:
6
- * 0 verified · 1 unverified/suspicious · 2 blocked · 3 couldn't determine
7
- * (unresolvable name or verdict service unreachable). Output is the command's
8
- * product, so it goes to STDOUT (errors/unavailability to stderr). */
9
- import { parseSpec } from './registry.js';
10
- import { renderSingle, toJsonVerdict } from './render.js';
11
- import { bindDeps, msg } from './run-common.js';
12
- import { VerdictUnavailable } from './verdict-client.js';
13
- import { dim, yellow } from '../lib/output.js';
14
- function exitForLevel(level) {
15
- if (level === 'verified')
16
- return 0;
17
- if (level === 'blocked')
18
- return 2;
19
- return 1; // unverified | suspicious
20
- }
21
- export async function runCheck(specArg, opts = {}, deps = {}) {
22
- const d = bindDeps(deps);
23
- if (!specArg) {
24
- if (opts.json) {
25
- d.log(JSON.stringify({ ok: false, error: 'PACKAGE_REQUIRED', message: 'A package name is required.' }, null, 2));
26
- return 3;
27
- }
28
- d.errLog('Usage: somewhere check <package>[@version] [--json]');
29
- return 3;
30
- }
31
- const spec = parseSpec(specArg);
32
- let version;
33
- try {
34
- version = await d.resolveVersion(spec.name, spec.version);
35
- }
36
- catch (err) {
37
- if (opts.json) {
38
- d.log(JSON.stringify({
39
- ok: false,
40
- error: 'PACKAGE_RESOLUTION_FAILED',
41
- message: `Could not resolve ${spec.name}: ${msg(err)}`,
42
- }, null, 2));
43
- return 3;
44
- }
45
- d.errLog(`Could not resolve ${spec.name}: ${msg(err)}`);
46
- return 3;
47
- }
48
- let verdict;
49
- try {
50
- verdict = await d.getVerdict(spec.name, version);
51
- }
52
- catch (err) {
53
- const rl = err instanceof VerdictUnavailable && err.rateLimited;
54
- if (opts.json) {
55
- d.log(JSON.stringify({
56
- ok: false,
57
- error: rl ? 'RATE_LIMITED' : 'VERDICT_UNAVAILABLE',
58
- message: rl
59
- ? `Rate limited while checking ${spec.name}. Wait a moment and retry.`
60
- : `Could not verify ${spec.name}@${version}: ${msg(err)}`,
61
- }, null, 2));
62
- return 3;
63
- }
64
- d.errLog(rl
65
- ? `${yellow('⚠')} Rate limited — couldn't check ${spec.name}. Wait a moment and retry.`
66
- : `${yellow('⚠')} Could not verify ${spec.name}@${version} — the verdict service was unreachable.`);
67
- if (!rl)
68
- d.errLog(` ${dim(`Reason: ${err instanceof Error ? err.message : String(err)}`)}`);
69
- return 3;
70
- }
71
- if (opts.json) {
72
- d.log(JSON.stringify(toJsonVerdict(verdict), null, 2));
73
- }
74
- else {
75
- for (const l of renderSingle(verdict))
76
- d.log(l);
77
- }
78
- return exitForLevel(verdict.verdict);
79
- }
80
- //# sourceMappingURL=check.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/swpx/check.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- /** Fail-open policy for swpx / swpm.
2
- *
3
- * Default is fail-OPEN (the verdict service being down must never break a
4
- * build) — but never SILENTLY: when we can't verify, we print a loud warning so
5
- * the developer always knows the check didn't run (a blocked check can be an
6
- * attacker hiding malware, not just an outage). `enforce` flips it to
7
- * fail-CLOSED for CI / security-conscious users. Precedence:
8
- * --enforce / --no-enforce > SWPX_ENFORCE env > config.enforce > false */
9
- import { loadConfig } from '../lib/config.js';
10
- import { red, yellow, dim } from '../lib/output.js';
11
- const OWN_FLAGS = new Set(['--enforce', '--no-enforce']);
12
- /** Strip our own flags so they're never forwarded to npx/npm. */
13
- export function stripEnforceFlags(args) {
14
- return args.filter((a) => !OWN_FLAGS.has(a));
15
- }
16
- export function resolveEnforce(args) {
17
- if (args.includes('--no-enforce'))
18
- return false;
19
- if (args.includes('--enforce'))
20
- return true;
21
- const env = process.env.SWPX_ENFORCE;
22
- if (env === '1' || env === 'true')
23
- return true;
24
- if (env === '0' || env === 'false')
25
- return false;
26
- try {
27
- return loadConfig()?.enforce === true;
28
- }
29
- catch {
30
- return false;
31
- }
32
- }
33
- /** The LOUD "couldn't verify" block — printed to stderr, never silent. `cause` is
34
- * the underlying reason (timeout / HTTP status / network error / bad body); we
35
- * surface it so a timeout is distinguishable from an outage or a tamper — the
36
- * thing this banner claims to care about must itself be debuggable. */
37
- export function loudUnavailable(emit, pkg, rateLimited, cause) {
38
- emit('');
39
- if (rateLimited) {
40
- emit(`${yellow('⚠')} Rate limited checking ${pkg} — the verdict service is throttling.`);
41
- emit(` ${dim('Wait a moment and retry.')}`);
42
- }
43
- else {
44
- emit(`${red('⚠')} COULD NOT VERIFY ${pkg} — the verdict service was unreachable.`);
45
- emit(` ${dim('Running UNCHECKED (like plain npx/npm). Usually an outage — but a blocked')}`);
46
- emit(` ${dim("check can also be malware hiding. If you didn't expect this, stop and retry.")}`);
47
- if (cause)
48
- emit(` ${dim(`Reason: ${cause}`)}`);
49
- }
50
- emit('');
51
- }
52
- /** Message when refusing to proceed under enforce (fail-closed). */
53
- export function refused(emit, pkg, tool) {
54
- emit(`${red('✖')} Refusing: could not verify ${pkg} and enforce is on.`);
55
- emit(` ${dim(`Run real \`${tool}\` yourself to override, or set --no-enforce.`)}`);
56
- }
57
- //# sourceMappingURL=enforce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce.js","sourceRoot":"","sources":["../../src/swpx/enforce.ts"],"names":[],"mappings":"AAAA;;;;;;;mFAOmF;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AAEzD,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,UAAU,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;wEAGwE;AACxE,MAAM,UAAU,eAAe,CAC7B,IAAyB,EACzB,GAAW,EACX,WAAoB,EACpB,KAAc;IAEd,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,GAAG,uCAAuC,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAsB,GAAG,yCAAyC,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,GAAG,CAAC,2EAA2E,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,GAAG,CAAC,8EAA8E,CAAC,EAAE,CAAC,CAAC;QAClG,IAAI,KAAK;YAAE,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACX,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,OAAO,CAAC,IAAyB,EAAE,GAAW,EAAE,IAAmB;IACjF,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,+BAA+B,GAAG,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,GAAG,CAAC,cAAc,IAAI,+CAA+C,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC"}
@@ -1,68 +0,0 @@
1
- /** npm registry resolution for swpx / swpm.
2
- *
3
- * We never download tarballs — npm's CDN does that (the whole point of the
4
- * notary architecture). We only resolve a user-typed spec (`foo`, `foo@1.2.3`,
5
- * `foo@^1`, `@scope/name@next`) to ONE concrete version so we can ask the
6
- * verdict API about it. Resolution uses the abbreviated packument
7
- * (application/vnd.npm.install-v1+json) and semver — npm's own resolver — so a
8
- * range picks the same version npm would install.
9
- *
10
- * All network goes through an injectable `FetchLike` so the pure parsing and
11
- * version-selection logic is unit-tested without hitting the registry. */
12
- import semver from 'semver';
13
- const REGISTRY = process.env.SWPX_REGISTRY?.replace(/\/$/, '') || 'https://registry.npmjs.org';
14
- const defaultFetch = (url, init) => fetch(url, init);
15
- /** Split a CLI spec into name + optional version/range/tag, handling scoped
16
- * packages. `@scope/name@1.2.3` → { name: '@scope/name', version: '1.2.3' }. */
17
- export function parseSpec(arg) {
18
- const split = (at) => {
19
- const version = arg.slice(at + 1);
20
- return version ? { name: arg.slice(0, at), version } : { name: arg.slice(0, at) };
21
- };
22
- if (arg.startsWith('@')) {
23
- const slash = arg.indexOf('/');
24
- if (slash === -1)
25
- return { name: arg }; // malformed scope — pass through
26
- const at = arg.indexOf('@', slash + 1);
27
- return at === -1 ? { name: arg } : split(at);
28
- }
29
- const at = arg.indexOf('@');
30
- return at <= 0 ? { name: arg } : split(at);
31
- }
32
- /** Registry path segment for a package name (scoped slash → %2f, @ kept). */
33
- function registryName(name) {
34
- return name.startsWith('@') ? name.replace('/', '%2f') : name;
35
- }
36
- export async function fetchPackument(name, fetchImpl = defaultFetch) {
37
- const res = await fetchImpl(`${REGISTRY}/${registryName(name)}`, {
38
- headers: { Accept: 'application/vnd.npm.install-v1+json' },
39
- });
40
- if (!res.ok)
41
- throw new Error(`npm registry returned ${res.status} for ${name}`);
42
- return (await res.json());
43
- }
44
- /** Resolve a spec's version field to a single concrete version.
45
- * - exact valid version → returned as-is (no network).
46
- * - undefined → the `latest` dist-tag.
47
- * - a dist-tag (next, beta…) → that tag's version.
48
- * - a range (^1, ~2.3, >=1 <2) → the greatest published version that satisfies. */
49
- export async function resolveVersion(name, version, fetchImpl = defaultFetch) {
50
- if (version && semver.valid(version))
51
- return version;
52
- const pack = await fetchPackument(name, fetchImpl);
53
- const tags = pack['dist-tags'] ?? {};
54
- const versions = Object.keys(pack.versions ?? {});
55
- if (!version) {
56
- const latest = tags.latest ?? semver.maxSatisfying(versions, '*', { includePrerelease: false });
57
- if (!latest)
58
- throw new Error(`no published versions for ${name}`);
59
- return latest;
60
- }
61
- if (tags[version])
62
- return tags[version];
63
- const match = semver.maxSatisfying(versions, version, { includePrerelease: false });
64
- if (match)
65
- return match;
66
- throw new Error(`no version of ${name} satisfies "${version}"`);
67
- }
68
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/swpx/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;2EAU2E;AAE3E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,4BAA4B,CAAC;AAmB/F,MAAM,YAAY,GAAc,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC5C,KAAK,CAAC,GAAG,EAAE,IAAmB,CAAsC,CAAC;AAOvE;iFACiF;AACjF,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAW,EAAE;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,CAAC,CAAC;IACF,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,iCAAiC;QACzE,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACvC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,6EAA6E;AAC7E,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,YAAuB,YAAY;IACpF,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE;QAC/D,OAAO,EAAE,EAAE,MAAM,EAAE,qCAAqC,EAAE;KAC3D,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,QAAQ,IAAI,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAc,CAAC;AACzC,CAAC;AAED;;;;oFAIoF;AACpF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,OAA2B,EAC3B,YAAuB,YAAY;IAEnC,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAErD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,eAAe,OAAO,GAAG,CAAC,CAAC;AAClE,CAAC"}