@hydranium/cli 1.0.0-next.267 → 1.0.0-next.269

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 (49) hide show
  1. package/lib/cli.js +2 -1
  2. package/lib/cli.js.map +1 -1
  3. package/lib/commands/ast-ground-truth-driver.js +2 -1
  4. package/lib/commands/ast-ground-truth-driver.js.map +1 -1
  5. package/lib/commands/generate-transfer-model-config.d.ts.map +1 -1
  6. package/lib/commands/generate-transfer-model-config.js +3 -2
  7. package/lib/commands/generate-transfer-model-config.js.map +1 -1
  8. package/lib/commands/generate-transfer-model.d.ts.map +1 -1
  9. package/lib/commands/generate-transfer-model.js +2 -1
  10. package/lib/commands/generate-transfer-model.js.map +1 -1
  11. package/lib/commands/harness-args.js +26 -2
  12. package/lib/commands/harness-args.js.map +1 -1
  13. package/lib/commands/init-templates.d.ts.map +1 -1
  14. package/lib/commands/init-templates.js +16 -13
  15. package/lib/commands/init-templates.js.map +1 -1
  16. package/lib/commands/lint-grammar-driver.js +2 -1
  17. package/lib/commands/lint-grammar-driver.js.map +1 -1
  18. package/lib/commands/measure-memory-args.d.ts.map +1 -1
  19. package/lib/commands/measure-memory-args.js +2 -1
  20. package/lib/commands/measure-memory-args.js.map +1 -1
  21. package/lib/commands/measure-memory-driver.js +2 -1
  22. package/lib/commands/measure-memory-driver.js.map +1 -1
  23. package/lib/commands/model-docs-driver.js +2 -1
  24. package/lib/commands/model-docs-driver.js.map +1 -1
  25. package/lib/commands/reflect-driver.js +2 -1
  26. package/lib/commands/reflect-driver.js.map +1 -1
  27. package/lib/commands/save.d.ts +1 -1
  28. package/lib/commands/save.d.ts.map +1 -1
  29. package/lib/commands/save.js +4 -4
  30. package/lib/commands/save.js.map +1 -1
  31. package/lib/commands/validate-driver.js +2 -1
  32. package/lib/commands/validate-driver.js.map +1 -1
  33. package/lib/testing/echo-server.js +2 -1
  34. package/lib/testing/echo-server.js.map +1 -1
  35. package/package.json +10 -10
  36. package/src/cli.ts +2 -1
  37. package/src/commands/ast-ground-truth-driver.ts +2 -1
  38. package/src/commands/generate-transfer-model-config.ts +3 -2
  39. package/src/commands/generate-transfer-model.ts +2 -1
  40. package/src/commands/harness-args.ts +3 -3
  41. package/src/commands/init-templates.ts +16 -13
  42. package/src/commands/lint-grammar-driver.ts +2 -1
  43. package/src/commands/measure-memory-args.ts +2 -1
  44. package/src/commands/measure-memory-driver.ts +2 -1
  45. package/src/commands/model-docs-driver.ts +2 -1
  46. package/src/commands/reflect-driver.ts +2 -1
  47. package/src/commands/save.ts +4 -6
  48. package/src/commands/validate-driver.ts +2 -1
  49. package/src/testing/echo-server.ts +2 -1
@@ -14,6 +14,7 @@
14
14
  * services module and runs the framework's `measureModelMemory`, streaming the
15
15
  * baseline / after-build / churn lines to stdout. Never imported — only spawned.
16
16
  */
17
+ import { describeError } from '@hydranium/protocol';
17
18
  import { loadHeadlessContext } from './headless-harness.js';
18
19
  import { parseProfileDimensions } from './measure-memory.js';
19
20
  function parseArgs(argv) {
@@ -105,7 +106,7 @@ async function main(argv) {
105
106
  main(process.argv.slice(2))
106
107
  .then(() => process.exit(0))
107
108
  .catch((error) => {
108
- console.error(error instanceof Error ? error.message : String(error));
109
+ console.error(describeError(error));
109
110
  process.exit(1);
110
111
  });
111
112
  //# sourceMappingURL=measure-memory-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure-memory-driver.js","sourceRoot":"","sources":["../../src/commands/measure-memory-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure-memory-driver.js","sourceRoot":"","sources":["../../src/commands/measure-memory-driver.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@
14
14
  * reference to stdout or the named file. Read-only — exits 0 unless booting the
15
15
  * head throws. Never imported — only spawned.
16
16
  */
17
+ import { describeError } from '@hydranium/protocol';
17
18
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
18
19
  import { formatModelDocs } from './model-docs-report.js';
19
20
  function parseArgs(argv) {
@@ -55,7 +56,7 @@ async function main(argv) {
55
56
  main(process.argv.slice(2))
56
57
  .then(code => process.exit(code))
57
58
  .catch((error) => {
58
- console.error(error instanceof Error ? error.message : String(error));
59
+ console.error(describeError(error));
59
60
  process.exit(1);
60
61
  });
61
62
  //# sourceMappingURL=model-docs-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-docs-driver.js","sourceRoot":"","sources":["../../src/commands/model-docs-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD,SAAS,SAAS,CAAC,IAAc;IAC9B,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBACzB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACL,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACZ,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"model-docs-driver.js","sourceRoot":"","sources":["../../src/commands/model-docs-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD,SAAS,SAAS,CAAC,IAAc;IAC9B,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;gBACzB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACL,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1B,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACZ,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
@@ -14,6 +14,7 @@
14
14
  * the named file. Read-only — exits 0 unless booting the head throws. Never
15
15
  * imported — only spawned.
16
16
  */
17
+ import { describeError } from '@hydranium/protocol';
17
18
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
18
19
  import { formatReflectionReport } from './reflect-report.js';
19
20
  function parseArgs(argv) {
@@ -60,7 +61,7 @@ async function main(argv) {
60
61
  main(process.argv.slice(2))
61
62
  .then(code => process.exit(code))
62
63
  .catch((error) => {
63
- console.error(error instanceof Error ? error.message : String(error));
64
+ console.error(describeError(error));
64
65
  process.exit(1);
65
66
  });
66
67
  //# sourceMappingURL=reflect-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reflect-driver.js","sourceRoot":"","sources":["../../src/commands/reflect-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAQ7D,SAAS,SAAS,CAAC,IAAc;IAC9B,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,GAAW,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,KAAK,CAAC;QAChB,CAAC,CAAC;QACF,QAAQ,IAAI,EAAE,CAAC;YACZ,KAAK,YAAY;gBACd,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,CAAC;gBAC/B,MAAM;YACT,KAAK,QAAQ;gBACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,MAAM;YACT,KAAK,aAAa;gBACf,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;gBACxB,MAAM;YACT;gBACG,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9E,OAAO,CAAC,CAAC;AACZ,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"reflect-driver.js","sourceRoot":"","sources":["../../src/commands/reflect-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAQ7D,SAAS,SAAS,CAAC,IAAc;IAC9B,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,GAAW,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,KAAK,CAAC;QAChB,CAAC,CAAC;QACF,QAAQ,IAAI,EAAE,CAAC;YACZ,KAAK,YAAY;gBACd,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,CAAC;gBAC/B,MAAM;YACT,KAAK,QAAQ;gBACV,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnB,MAAM;YACT,KAAK,aAAa;gBACf,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;gBACxB,MAAM;YACT;gBACG,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9E,OAAO,CAAC,CAAC;AACZ,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import type { TransferElement } from '@hydranium/protocol';
9
+ import { type TransferElement } from '@hydranium/protocol';
10
10
  import type { DataServerProtocol } from '@hydranium/protocol/data';
11
11
  import { type LogOptions } from '../log-level.js';
12
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC9D,sFAAsF;IACtF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBxE"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC9D,sFAAsF;IACtF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBxE"}
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
+ import { describeError } from '@hydranium/protocol';
9
10
  import * as fs from 'node:fs/promises';
10
11
  import { logEnv } from '../log-level.js';
11
12
  import { withDataServer } from '../spawn-data-server.js';
@@ -39,7 +40,9 @@ async function saveOpened(server, uri, clientId, model) {
39
40
  // client has it open; anything else is opened. An open that fails
40
41
  // reports why the create failed too, since that may be the real cause.
41
42
  await server.createModelDocument({ uri, clientId, text: model }).catch((created) => server.openModelDocument({ uri, clientId }).catch((opened) => {
42
- throw new Error(`Cannot save ${uri}: ${describe(opened)} (creating it failed first: ${describe(created)})`, { cause: created });
43
+ throw new Error(`Cannot save ${uri}: ${describeError(opened)} (creating it failed first: ${describeError(created)})`, {
44
+ cause: created
45
+ });
43
46
  }));
44
47
  saved = await server.saveModelDocument({ uri, clientId, model, baseVersion: 'any' });
45
48
  }
@@ -50,9 +53,6 @@ async function saveOpened(server, uri, clientId, model) {
50
53
  await server.closeSession({ clientId });
51
54
  return saved;
52
55
  }
53
- function describe(error) {
54
- return error instanceof Error ? error.message : String(error);
55
- }
56
56
  /**
57
57
  * Resolve the `--content` argument to its textual form. The `@<path>`
58
58
  * prefix reads from a file (parses as UTF-8); anything else is taken
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@
14
14
  * stdout or the named file, and exits with the gate code (non-zero on errors;
15
15
  * `--strict` also fails on warnings). Never imported — only spawned.
16
16
  */
17
+ import { describeError } from '@hydranium/protocol';
17
18
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
18
19
  import { formatValidationReport, validationExitCode } from './validate-report.js';
19
20
  function parseArgs(argv) {
@@ -66,7 +67,7 @@ async function main(argv) {
66
67
  main(process.argv.slice(2))
67
68
  .then(code => process.exit(code))
68
69
  .catch((error) => {
69
- console.error(error instanceof Error ? error.message : String(error));
70
+ console.error(describeError(error));
70
71
  process.exit(1);
71
72
  });
72
73
  //# sourceMappingURL=validate-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-driver.js","sourceRoot":"","sources":["../../src/commands/validate-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-driver.js","sourceRoot":"","sources":["../../src/commands/validate-driver.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { DataServer } from '@hydranium/data-server';
20
20
  import { makeTestServices } from '@hydranium/core/testing';
21
+ import { describeErrorWithStack } from '@hydranium/protocol';
21
22
  import { StreamMessageReader, StreamMessageWriter, createMessageConnection } from 'vscode-jsonrpc/node';
22
23
  import { STDERR_CONNECTION_LOGGER } from '../stderr-connection-logger.js';
23
24
  function parseFakeRoot(text) {
@@ -66,7 +67,7 @@ function main() {
66
67
  if (process.argv.includes('--send-response-without-id')) {
67
68
  // A response the parent cannot match to a request, for its connection to log.
68
69
  const response = { jsonrpc: '2.0', id: null, result: null };
69
- writer.write(response).catch((error) => STDERR_CONNECTION_LOGGER.error(String(error)));
70
+ writer.write(response).catch((error) => STDERR_CONNECTION_LOGGER.error(describeErrorWithStack(error)));
70
71
  }
71
72
  if (process.argv.includes('--exit-on-request')) {
72
73
  // Fail-fast fixture mode: read a full request (the reader parses the whole
@@ -1 +1 @@
1
- {"version":3,"file":"echo-server.js","sourceRoot":"","sources":["../../src/testing/echo-server.ts"],"names":[],"mappings":";AACA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAwB,MAAM,qBAAqB,CAAC;AAC9H,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO1E,SAAS,aAAa,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAc,CAAC;AAChF,CAAC;AAED,SAAS,IAAI;IACV,MAAM,MAAM,GAAG,gBAAgB,CAA4B;QACxD,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE;QAC9C,aAAa,EAAE;YACZ;gBACG,GAAG,EAAE,wBAAwB;gBAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAc;aAC1D;YACD;gBACG,kEAAkE;gBAClE,iEAAiE;gBACjE,0DAA0D;gBAC1D,GAAG,EAAE,0BAA0B;gBAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,EAAc;aAC3F;SACH;QACD,YAAY,EAAE;YACX,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE;YAC5F,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE;SACrG;KACH,CAAC,CAAC;IAEH,gFAAgF;IAChF,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,4CAA4C;IAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,KAAK,EAAE,OAAc,EAAE,OAAc,EAAE,EAAE;QACtE,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;YACjG,IAAI,MAAM,EAAE,CAAC;gBACV,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,CAAC;QACJ,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAErH,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE,CAAC;QACvD,8EAA8E;QAC9E,MAAM,QAAQ,GAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,2EAA2E;QAC3E,6EAA6E;QAC7E,8EAA8E;QAC9E,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;IACV,CAAC;IAED,IAAI,UAAU,CAAW,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,UAAU,CAAC,MAAM,EAAE,CAAC;IACpB,sEAAsE;IACtE,qEAAqE;IACrE,6CAA6C;AAChD,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"echo-server.js","sourceRoot":"","sources":["../../src/testing/echo-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydranium/cli",
3
- "version": "1.0.0-next.267",
3
+ "version": "1.0.0-next.269",
4
4
  "description": "Build-time codegen tools + data-server subcommands for the hydranium framework.",
5
5
  "keywords": [
6
6
  "cli",
@@ -71,11 +71,11 @@
71
71
  "devDependencies": {
72
72
  "@eclipse-glsp/graph": "2.7.0",
73
73
  "@eclipse-glsp/server": "2.7.0",
74
- "@hydranium/core": "1.0.0-next.267",
75
- "@hydranium/data-server": "1.0.0-next.267",
76
- "@hydranium/glsp-server": "1.0.0-next.267",
77
- "@hydranium/langium": "1.0.0-next.267",
78
- "@hydranium/protocol": "1.0.0-next.267",
74
+ "@hydranium/core": "1.0.0-next.269",
75
+ "@hydranium/data-server": "1.0.0-next.269",
76
+ "@hydranium/glsp-server": "1.0.0-next.269",
77
+ "@hydranium/langium": "1.0.0-next.269",
78
+ "@hydranium/protocol": "1.0.0-next.269",
79
79
  "@types/node": "^22.0.0",
80
80
  "inversify": "6.2.2",
81
81
  "langium": "4.3.1",
@@ -89,10 +89,10 @@
89
89
  "vscode-languageserver-protocol": "3.18.1"
90
90
  },
91
91
  "peerDependencies": {
92
- "@hydranium/core": "1.0.0-next.267",
93
- "@hydranium/data-server": "1.0.0-next.267",
94
- "@hydranium/langium": "1.0.0-next.267",
95
- "@hydranium/protocol": "1.0.0-next.267",
92
+ "@hydranium/core": "1.0.0-next.269",
93
+ "@hydranium/data-server": "1.0.0-next.269",
94
+ "@hydranium/langium": "1.0.0-next.269",
95
+ "@hydranium/protocol": "1.0.0-next.269",
96
96
  "@memlab/core": "^2.0.3",
97
97
  "@memlab/heap-analysis": "^2.0.3",
98
98
  "vscode-jsonrpc": "^9.0.0"
package/src/cli.ts CHANGED
@@ -9,6 +9,7 @@
9
9
  ********************************************************************************/
10
10
 
11
11
  import { Command } from 'commander';
12
+ import { describeError } from '@hydranium/protocol';
12
13
  import { readCliVersion } from './cli-version.js';
13
14
  import { runAnalyzeHeapCommand } from './commands/analyze-heap-args.js';
14
15
  import { runAstGroundTruthCommand } from './commands/ast-ground-truth-args.js';
@@ -134,6 +135,6 @@ main(process.argv.slice(2)).catch(err => {
134
135
  if (err instanceof InitWizardCancelled) {
135
136
  process.exit(130);
136
137
  }
137
- console.error(err instanceof Error ? err.message : String(err));
138
+ console.error(describeError(err));
138
139
  process.exit(1);
139
140
  });
@@ -16,6 +16,7 @@
16
16
  */
17
17
 
18
18
  import * as fs from 'node:fs';
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
20
21
 
21
22
  interface DriverArgs {
@@ -76,6 +77,6 @@ async function main(argv: string[]): Promise<void> {
76
77
  main(process.argv.slice(2))
77
78
  .then(() => process.exit(0))
78
79
  .catch((error: unknown) => {
79
- console.error(error instanceof Error ? error.message : String(error));
80
+ console.error(describeError(error));
80
81
  process.exit(1);
81
82
  });
@@ -9,6 +9,7 @@
9
9
 
10
10
  import * as fs from 'node:fs';
11
11
  import * as path from 'node:path';
12
+ import { describeError } from '@hydranium/protocol';
12
13
  import type { GenerateTransferModelOptions } from './generate-transfer-model.js';
13
14
 
14
15
  /** Path-valued option keys — resolved relative to a config/langium-config file's directory. */
@@ -31,7 +32,7 @@ export function loadTransferModelConfig(configPath: string): Partial<GenerateTra
31
32
  try {
32
33
  raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
33
34
  } catch (error: unknown) {
34
- throw new Error(`Cannot read transfer-model config '${configPath}': ${error instanceof Error ? error.message : String(error)}`);
35
+ throw new Error(`Cannot read transfer-model config '${configPath}': ${describeError(error)}`);
35
36
  }
36
37
  if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
37
38
  throw new Error(`Transfer-model config '${configPath}' must be a JSON object.`);
@@ -75,7 +76,7 @@ export function deriveAstFileFromLangiumConfig(langiumConfigPath: string): strin
75
76
  try {
76
77
  raw = JSON.parse(fs.readFileSync(langiumConfigPath, 'utf-8'));
77
78
  } catch (error: unknown) {
78
- throw new Error(`Cannot read langium-config '${langiumConfigPath}': ${error instanceof Error ? error.message : String(error)}`);
79
+ throw new Error(`Cannot read langium-config '${langiumConfigPath}': ${describeError(error)}`);
79
80
  }
80
81
  const out = (raw as { out?: unknown })?.out;
81
82
  if (typeof out !== 'string') {
@@ -19,6 +19,7 @@ import {
19
19
  type InterfaceDeclaration,
20
20
  type SourceFile
21
21
  } from 'ts-morph';
22
+ import { describeError } from '@hydranium/protocol';
22
23
 
23
24
  /**
24
25
  * Options for the transfer-model generator.
@@ -109,7 +110,7 @@ export function watchTransferModel(options: GenerateTransferModelOptions, contex
109
110
  try {
110
111
  generateTransferModel(options);
111
112
  } catch (error: unknown) {
112
- console.error(`Transfer-model generation failed: ${error instanceof Error ? error.message : String(error)}`);
113
+ console.error(`Transfer-model generation failed: ${describeError(error)}`);
113
114
  }
114
115
  };
115
116
  runSafely();
@@ -31,7 +31,7 @@
31
31
  * parser rejects is an invocation that fails for no visible reason.
32
32
  */
33
33
 
34
- import type { LogThreshold } from '@hydranium/protocol';
34
+ import { describeError, type LogThreshold } from '@hydranium/protocol';
35
35
  import { statSync } from 'node:fs';
36
36
  import * as path from 'node:path';
37
37
  import { fileURLToPath } from 'node:url';
@@ -303,7 +303,7 @@ export function resolveWorkspaceArgument(workspace: string, commandName: string,
303
303
  try {
304
304
  stats = statSync(resolved, { throwIfNoEntry: false });
305
305
  } catch (err: unknown) {
306
- const detail = err instanceof Error ? err.message : String(err);
306
+ const detail = describeError(err);
307
307
  onError(`<workspace> is not reachable: '${workspace}' resolved to ${resolved} (${detail}) ${help}`);
308
308
  }
309
309
  if (stats === undefined) {
@@ -322,7 +322,7 @@ function toWorkspacePath(workspace: string, commandName: string, onError: UsageE
322
322
  try {
323
323
  return fileURLToPath(workspace);
324
324
  } catch (err: unknown) {
325
- const detail = err instanceof Error ? err.message : String(err);
325
+ const detail = describeError(err);
326
326
  onError(`<workspace> is not a usable file URI: '${workspace}' (${detail}) (hydranium-cli ${commandName} --help)`);
327
327
  }
328
328
  }
@@ -1068,19 +1068,22 @@ const dataServer = startSocketServer({ port: 0, logTag: 'ModelServer', logger: s
1068
1068
  return { dispose: () => undefined };
1069
1069
  });
1070
1070
  dataServer.started
1071
- .then(() => {
1072
- const { port } = dataServer;
1073
- if (port === undefined) {
1074
- // \`started\` resolves only once the address is resolved, so this is
1075
- // unreachable; a non-null assertion in its place would publish
1076
- // \`undefined\`, which the host cannot tell from an unreachable port.
1077
- throw new Error('the data head started without a resolved port');
1078
- }
1079
- publishPortOnLspConnection(shared.lsp.Connection, ${upper}_DATA_SERVER_PORT_COMMAND, port);
1080
- })
1071
+ .then(
1072
+ () => {
1073
+ const { port } = dataServer;
1074
+ if (port === undefined) {
1075
+ // \`started\` resolves only once the address is resolved, so this is
1076
+ // unreachable; a non-null assertion in its place would publish
1077
+ // \`undefined\`, which the host cannot tell from an unreachable port.
1078
+ throw new Error('the data head started without a resolved port');
1079
+ }
1080
+ publishPortOnLspConnection(shared.lsp.Connection, ${upper}_DATA_SERVER_PORT_COMMAND, port);
1081
+ },
1082
+ // The launcher logged its own bind failure; the rejection is control flow.
1083
+ () => undefined
1084
+ )
1081
1085
  .catch((error: unknown) => {
1082
- const reason = error instanceof Error ? error.message : String(error);
1083
- shared.Logger.error(\`[ModelServer] Could not publish the data-server port: \${reason}\`);
1086
+ shared.Logger.error(\`[ModelServer] Could not publish the data-server port: \${describeErrorWithStack(error)}\`);
1084
1087
  });
1085
1088
  `
1086
1089
  : '';
@@ -1127,7 +1130,7 @@ void glspServer;
1127
1130
  // than a library entry — import \`./index.js\` instead to compose the language.
1128
1131
 
1129
1132
  ${reflectImport}${glspImports}${importList(coreNodeSymbols, '@hydranium/core/node', columns)}
1130
- ${data ? "import { DataServer } from '@hydranium/data-server';\n" : ''}// The framework's entry point, NOT Langium's \`@hydranium/langium/lsp\` one. It is
1133
+ ${data ? "import { DataServer } from '@hydranium/data-server';\nimport { describeErrorWithStack } from '@hydranium/protocol';\n" : ''}// The framework's entry point, NOT Langium's \`@hydranium/langium/lsp\` one. It is
1131
1134
  // signature-compatible and delegates straight through; what it adds first is
1132
1135
  // \`assertLspHeadComposed\`, which fails the start if the LSP head's SHARED module
1133
1136
  // was never composed. Reaching for Langium's is the natural mistake and it is
@@ -16,6 +16,7 @@
16
16
  * only spawned.
17
17
  */
18
18
 
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { loadHeadlessContext } from './headless-harness.js';
20
21
  import { formatLintReport, lintExitCode } from './lint-grammar-report.js';
21
22
 
@@ -78,6 +79,6 @@ async function main(argv: string[]): Promise<number> {
78
79
  main(process.argv.slice(2))
79
80
  .then(code => process.exit(code))
80
81
  .catch((error: unknown) => {
81
- console.error(error instanceof Error ? error.message : String(error));
82
+ console.error(describeError(error));
82
83
  process.exit(1);
83
84
  });
@@ -7,6 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
 
10
+ import { describeError } from '@hydranium/protocol';
10
11
  import {
11
12
  exitWithUsage,
12
13
  HARNESS_VALUE_FLAGS,
@@ -97,7 +98,7 @@ function validatedProfile(csv: string | undefined, onError: UsageError): string
97
98
  try {
98
99
  parseProfileDimensions(csv);
99
100
  } catch (err: unknown) {
100
- onError(`Option --profile: ${err instanceof Error ? err.message : String(err)}`);
101
+ onError(`Option --profile: ${describeError(err)}`);
101
102
  }
102
103
  return csv;
103
104
  }
@@ -16,6 +16,7 @@
16
16
  * baseline / after-build / churn lines to stdout. Never imported — only spawned.
17
17
  */
18
18
 
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { loadHeadlessContext } from './headless-harness.js';
20
21
  import { parseProfileDimensions } from './measure-memory.js';
21
22
 
@@ -124,6 +125,6 @@ async function main(argv: string[]): Promise<void> {
124
125
  main(process.argv.slice(2))
125
126
  .then(() => process.exit(0))
126
127
  .catch((error: unknown) => {
127
- console.error(error instanceof Error ? error.message : String(error));
128
+ console.error(describeError(error));
128
129
  process.exit(1);
129
130
  });
@@ -16,6 +16,7 @@
16
16
  * head throws. Never imported — only spawned.
17
17
  */
18
18
 
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
20
21
  import { formatModelDocs } from './model-docs-report.js';
21
22
 
@@ -63,6 +64,6 @@ async function main(argv: string[]): Promise<number> {
63
64
  main(process.argv.slice(2))
64
65
  .then(code => process.exit(code))
65
66
  .catch((error: unknown) => {
66
- console.error(error instanceof Error ? error.message : String(error));
67
+ console.error(describeError(error));
67
68
  process.exit(1);
68
69
  });
@@ -16,6 +16,7 @@
16
16
  * imported — only spawned.
17
17
  */
18
18
 
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
20
21
  import { formatReflectionReport } from './reflect-report.js';
21
22
 
@@ -71,6 +72,6 @@ async function main(argv: string[]): Promise<number> {
71
72
  main(process.argv.slice(2))
72
73
  .then(code => process.exit(code))
73
74
  .catch((error: unknown) => {
74
- console.error(error instanceof Error ? error.message : String(error));
75
+ console.error(describeError(error));
75
76
  process.exit(1);
76
77
  });
@@ -7,7 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
 
10
- import type { TransferElement } from '@hydranium/protocol';
10
+ import { describeError, type TransferElement } from '@hydranium/protocol';
11
11
  import type { DataServerProtocol } from '@hydranium/protocol/data';
12
12
  import * as fs from 'node:fs/promises';
13
13
  import { logEnv, type LogOptions } from '../log-level.js';
@@ -88,7 +88,9 @@ async function saveOpened(
88
88
  // reports why the create failed too, since that may be the real cause.
89
89
  await server.createModelDocument({ uri, clientId, text: model }).catch((created: unknown) =>
90
90
  server.openModelDocument({ uri, clientId }).catch((opened: unknown) => {
91
- throw new Error(`Cannot save ${uri}: ${describe(opened)} (creating it failed first: ${describe(created)})`, { cause: created });
91
+ throw new Error(`Cannot save ${uri}: ${describeError(opened)} (creating it failed first: ${describeError(created)})`, {
92
+ cause: created
93
+ });
92
94
  })
93
95
  );
94
96
  saved = await server.saveModelDocument({ uri, clientId, model, baseVersion: 'any' });
@@ -100,10 +102,6 @@ async function saveOpened(
100
102
  return saved;
101
103
  }
102
104
 
103
- function describe(error: unknown): string {
104
- return error instanceof Error ? error.message : String(error);
105
- }
106
-
107
105
  /**
108
106
  * Resolve the `--content` argument to its textual form. The `@<path>`
109
107
  * prefix reads from a file (parses as UTF-8); anything else is taken
@@ -16,6 +16,7 @@
16
16
  * `--strict` also fails on warnings). Never imported — only spawned.
17
17
  */
18
18
 
19
+ import { describeError } from '@hydranium/protocol';
19
20
  import { emitReport, loadHeadlessContext, OUT_FILE_FLAG } from './headless-harness.js';
20
21
  import { formatValidationReport, validationExitCode } from './validate-report.js';
21
22
 
@@ -79,6 +80,6 @@ async function main(argv: string[]): Promise<number> {
79
80
  main(process.argv.slice(2))
80
81
  .then(code => process.exit(code))
81
82
  .catch((error: unknown) => {
82
- console.error(error instanceof Error ? error.message : String(error));
83
+ console.error(describeError(error));
83
84
  process.exit(1);
84
85
  });
@@ -20,6 +20,7 @@
20
20
 
21
21
  import { DataServer } from '@hydranium/data-server';
22
22
  import { makeTestServices } from '@hydranium/core/testing';
23
+ import { describeErrorWithStack } from '@hydranium/protocol';
23
24
  import type { AstNode, URI } from '@hydranium/langium';
24
25
  import { StreamMessageReader, StreamMessageWriter, createMessageConnection, type ResponseMessage } from 'vscode-jsonrpc/node';
25
26
  import { STDERR_CONNECTION_LOGGER } from '../stderr-connection-logger.js';
@@ -79,7 +80,7 @@ function main(): void {
79
80
  if (process.argv.includes('--send-response-without-id')) {
80
81
  // A response the parent cannot match to a request, for its connection to log.
81
82
  const response: ResponseMessage = { jsonrpc: '2.0', id: null, result: null };
82
- writer.write(response).catch((error: unknown) => STDERR_CONNECTION_LOGGER.error(String(error)));
83
+ writer.write(response).catch((error: unknown) => STDERR_CONNECTION_LOGGER.error(describeErrorWithStack(error)));
83
84
  }
84
85
 
85
86
  if (process.argv.includes('--exit-on-request')) {