@sdods/cli 0.16.0 → 0.17.0

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.
@@ -145,7 +145,7 @@ export async function initWorkspace(target, flags) {
145
145
  // Optional in @sdods/core (a11y/audit.ts imports it lazily), but the demo project this
146
146
  // scaffolds has an @a11y scenario, which failed on every fresh workspace without it.
147
147
  // Same pin as packages/core.
148
- '@axe-core/playwright': '4.13.0',
148
+ '@axe-core/playwright': '4.14.0',
149
149
  },
150
150
  devDependencies: {
151
151
  '@types/node': '^22.20.2',
@@ -1,5 +1,6 @@
1
1
  import pc from 'picocolors';
2
2
  import { SdodsError } from '@sdods/core';
3
+ import { secretEquals } from '@sdods/contracts';
3
4
  import { ALL_CAPABILITIES, DEFAULT_CAPABILITIES, MCP_CLIENTS } from '@sdods/mcp';
4
5
  import { createContext } from '../context.js';
5
6
  import { json, ok, out } from '../ui.js';
@@ -65,7 +66,7 @@ export function register(program) {
65
66
  caps,
66
67
  port: Number(opts.port),
67
68
  host: opts.host,
68
- authenticate: (t) => (t === token ? { name: 'token', scopes: ['*'], via: 'http' } : null),
69
+ authenticate: (t) => secretEquals(t, token) ? { name: 'token', scopes: ['*'], via: 'http' } : null,
69
70
  });
70
71
  ok(`SDODS MCP over HTTP at http://${opts.host}:${srv.port}/mcp (Ctrl+C to stop)`);
71
72
  await new Promise((resolve) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdods/cli",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "SDODS command line: run, record, analyze, agents, MCP server, scheduler and the web server.",
5
5
  "license": "Apache-2.0",
6
6
  "funding": "https://sdods.com/sponsor/",
@@ -26,22 +26,22 @@
26
26
  "node": ">=22"
27
27
  },
28
28
  "dependencies": {
29
- "@sdods/contracts": "0.16.0",
30
- "@sdods/core": "0.16.0",
29
+ "@sdods/contracts": "0.17.0",
30
+ "@sdods/core": "0.17.0",
31
31
  "commander": "^15.0.0",
32
- "execa": "^10.1.0",
32
+ "execa": "^10.2.1",
33
33
  "picocolors": "^1.1.1",
34
34
  "semver": "^7.8.5",
35
35
  "yaml": "^2.9.1",
36
- "zod": "^4.6.5",
36
+ "zod": "^4.6.7",
37
37
  "@playwright/test": "^1.64.0",
38
38
  "playwright-core": "^1.64.0",
39
- "@sdods/integrations": "0.16.0",
40
- "@sdods/mcp": "0.16.0",
41
- "@sdods/agents": "0.16.0",
42
- "@sdods/db": "0.16.0",
39
+ "@sdods/integrations": "0.17.0",
40
+ "@sdods/mcp": "0.17.0",
41
+ "@sdods/agents": "0.17.0",
42
+ "@sdods/db": "0.17.0",
43
43
  "csv-parse": "^7.0.3",
44
- "@sdods/server": "0.16.0"
44
+ "@sdods/server": "0.17.0"
45
45
  },
46
46
  "homepage": "https://sdods.com",
47
47
  "bugs": {
@@ -75,11 +75,11 @@
75
75
  },
76
76
  {
77
77
  "name": "report-to",
78
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=oHfl8ARb7EdmL4dg%2FBv%2BJaimIZJDqoVMY8jzQ%2BysA%2B8%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788499001\"}],\"max_age\":3600}"
78
+ "value": "[stripped: Heroku NEL reporting endpoint]"
79
79
  },
80
80
  {
81
81
  "name": "reporting-endpoints",
82
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=oHfl8ARb7EdmL4dg%2FBv%2BJaimIZJDqoVMY8jzQ%2BysA%2B8%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788499001\""
82
+ "value": "[stripped: Heroku NEL reporting endpoint]"
83
83
  },
84
84
  {
85
85
  "name": "server",
@@ -216,11 +216,11 @@
216
216
  },
217
217
  {
218
218
  "name": "report-to",
219
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=yQ%2BGeQXvjW3HcVsmYDYj76FwPI07zsD5WHxIrh%2Flq8M%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1786047986\"}],\"max_age\":3600}"
219
+ "value": "[stripped: Heroku NEL reporting endpoint]"
220
220
  },
221
221
  {
222
222
  "name": "reporting-endpoints",
223
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=yQ%2BGeQXvjW3HcVsmYDYj76FwPI07zsD5WHxIrh%2Flq8M%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1786047986\""
223
+ "value": "[stripped: Heroku NEL reporting endpoint]"
224
224
  },
225
225
  {
226
226
  "name": "server",
@@ -365,11 +365,11 @@
365
365
  },
366
366
  {
367
367
  "name": "report-to",
368
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=p%2BmRI34XUMkCjVop%2FyO1eSdv%2BDQ8TZltj1FUj3RgzMY%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1787455844\"}],\"max_age\":3600}"
368
+ "value": "[stripped: Heroku NEL reporting endpoint]"
369
369
  },
370
370
  {
371
371
  "name": "reporting-endpoints",
372
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=p%2BmRI34XUMkCjVop%2FyO1eSdv%2BDQ8TZltj1FUj3RgzMY%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1787455844\""
372
+ "value": "[stripped: Heroku NEL reporting endpoint]"
373
373
  },
374
374
  {
375
375
  "name": "server",
@@ -510,11 +510,11 @@
510
510
  },
511
511
  {
512
512
  "name": "report-to",
513
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=MeG579JOmuvHz%2FtBVhggXGLi0HOUw9kpT%2BAJPEHhY5o%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1787961776\"}],\"max_age\":3600}"
513
+ "value": "[stripped: Heroku NEL reporting endpoint]"
514
514
  },
515
515
  {
516
516
  "name": "reporting-endpoints",
517
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=MeG579JOmuvHz%2FtBVhggXGLi0HOUw9kpT%2BAJPEHhY5o%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1787961776\""
517
+ "value": "[stripped: Heroku NEL reporting endpoint]"
518
518
  },
519
519
  {
520
520
  "name": "server",
@@ -671,11 +671,11 @@
671
671
  },
672
672
  {
673
673
  "name": "report-to",
674
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=fVwtXVwcWqxpQXtq9DxY2fd2dF5VtlG0SExGgRTygjg%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788483191\"}],\"max_age\":3600}"
674
+ "value": "[stripped: Heroku NEL reporting endpoint]"
675
675
  },
676
676
  {
677
677
  "name": "reporting-endpoints",
678
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=fVwtXVwcWqxpQXtq9DxY2fd2dF5VtlG0SExGgRTygjg%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788483191\""
678
+ "value": "[stripped: Heroku NEL reporting endpoint]"
679
679
  },
680
680
  {
681
681
  "name": "server",
@@ -808,11 +808,11 @@
808
808
  },
809
809
  {
810
810
  "name": "report-to",
811
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=k7G0r%2BSuP7FlmD1NnrPmgPmZcE%2BoZip8n0taiIgsABc%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788509604\"}],\"max_age\":3600}"
811
+ "value": "[stripped: Heroku NEL reporting endpoint]"
812
812
  },
813
813
  {
814
814
  "name": "reporting-endpoints",
815
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=k7G0r%2BSuP7FlmD1NnrPmgPmZcE%2BoZip8n0taiIgsABc%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788509604\""
815
+ "value": "[stripped: Heroku NEL reporting endpoint]"
816
816
  },
817
817
  {
818
818
  "name": "server",
@@ -957,11 +957,11 @@
957
957
  },
958
958
  {
959
959
  "name": "report-to",
960
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=nsXjmwl7IIg0XdHfUHOSS%2BJAyM%2BuOYHaS57Qdnm4du8%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788483192\"}],\"max_age\":3600}"
960
+ "value": "[stripped: Heroku NEL reporting endpoint]"
961
961
  },
962
962
  {
963
963
  "name": "reporting-endpoints",
964
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=nsXjmwl7IIg0XdHfUHOSS%2BJAyM%2BuOYHaS57Qdnm4du8%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788483192\""
964
+ "value": "[stripped: Heroku NEL reporting endpoint]"
965
965
  },
966
966
  {
967
967
  "name": "server",
@@ -1106,11 +1106,11 @@
1106
1106
  },
1107
1107
  {
1108
1108
  "name": "report-to",
1109
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=nsXjmwl7IIg0XdHfUHOSS%2BJAyM%2BuOYHaS57Qdnm4du8%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788483192\"}],\"max_age\":3600}"
1109
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1110
1110
  },
1111
1111
  {
1112
1112
  "name": "reporting-endpoints",
1113
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=nsXjmwl7IIg0XdHfUHOSS%2BJAyM%2BuOYHaS57Qdnm4du8%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788483192\""
1113
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1114
1114
  },
1115
1115
  {
1116
1116
  "name": "server",
@@ -1247,11 +1247,11 @@
1247
1247
  },
1248
1248
  {
1249
1249
  "name": "report-to",
1250
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788526718\"}],\"max_age\":3600}"
1250
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1251
1251
  },
1252
1252
  {
1253
1253
  "name": "reporting-endpoints",
1254
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788526718\""
1254
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1255
1255
  },
1256
1256
  {
1257
1257
  "name": "server",
@@ -1384,11 +1384,11 @@
1384
1384
  },
1385
1385
  {
1386
1386
  "name": "report-to",
1387
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=afpprPi0fn7e2R1bKaJuNz5g8gxEN5q%2Ft0dfvxtXADs%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788506124\"}],\"max_age\":3600}"
1387
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1388
1388
  },
1389
1389
  {
1390
1390
  "name": "reporting-endpoints",
1391
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=afpprPi0fn7e2R1bKaJuNz5g8gxEN5q%2Ft0dfvxtXADs%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788506124\""
1391
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1392
1392
  },
1393
1393
  {
1394
1394
  "name": "server",
@@ -1525,11 +1525,11 @@
1525
1525
  },
1526
1526
  {
1527
1527
  "name": "report-to",
1528
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=hj6IH34eOfRxPIU6MTKrpBkT9IYsvOX%2BDaQN0US29Ro%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1787090270\"}],\"max_age\":3600}"
1528
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1529
1529
  },
1530
1530
  {
1531
1531
  "name": "reporting-endpoints",
1532
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=hj6IH34eOfRxPIU6MTKrpBkT9IYsvOX%2BDaQN0US29Ro%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1787090270\""
1532
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1533
1533
  },
1534
1534
  {
1535
1535
  "name": "server",
@@ -1678,11 +1678,11 @@
1678
1678
  },
1679
1679
  {
1680
1680
  "name": "report-to",
1681
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788526718\"}],\"max_age\":3600}"
1681
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1682
1682
  },
1683
1683
  {
1684
1684
  "name": "reporting-endpoints",
1685
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788526718\""
1685
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1686
1686
  },
1687
1687
  {
1688
1688
  "name": "server",
@@ -1835,11 +1835,11 @@
1835
1835
  },
1836
1836
  {
1837
1837
  "name": "report-to",
1838
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=kf25B5VLNgR5zd6EvH3jPJBPDV%2FxQnwc0WRaVMyMOEA%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788526717\"}],\"max_age\":3600}"
1838
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1839
1839
  },
1840
1840
  {
1841
1841
  "name": "reporting-endpoints",
1842
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=kf25B5VLNgR5zd6EvH3jPJBPDV%2FxQnwc0WRaVMyMOEA%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788526717\""
1842
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1843
1843
  },
1844
1844
  {
1845
1845
  "name": "server",
@@ -1980,11 +1980,11 @@
1980
1980
  },
1981
1981
  {
1982
1982
  "name": "report-to",
1983
- "value": "{\"group\":\"heroku-nel\",\"endpoints\":[{\"url\":\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D\\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\\u0026ts=1788526718\"}],\"max_age\":3600}"
1983
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1984
1984
  },
1985
1985
  {
1986
1986
  "name": "reporting-endpoints",
1987
- "value": "heroku-nel=\"https://nel.heroku.com/reports?s=t%2Bo3NZSkf65otRcfWFAtOnaCeAbP%2FMuqUxuZZeHyZgA%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1788526718\""
1987
+ "value": "[stripped: Heroku NEL reporting endpoint]"
1988
1988
  },
1989
1989
  {
1990
1990
  "name": "server",