@sentropic/h2a 0.97.3 → 0.97.4

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 (62) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/dist/cli.d.ts +13 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +86 -40
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/mcp.d.ts +1 -1
  9. package/dist/mcp.d.ts.map +1 -1
  10. package/dist/mcp.js +1 -0
  11. package/dist/mcp.js.map +1 -1
  12. package/dist/runtime/identity/bindings.d.ts +33 -0
  13. package/dist/runtime/identity/bindings.d.ts.map +1 -1
  14. package/dist/runtime/identity/bindings.js +49 -1
  15. package/dist/runtime/identity/bindings.js.map +1 -1
  16. package/dist/runtime/identity/index.d.ts +4 -4
  17. package/dist/runtime/identity/index.d.ts.map +1 -1
  18. package/dist/runtime/identity/index.js +2 -2
  19. package/dist/runtime/identity/index.js.map +1 -1
  20. package/dist/runtime/identity/live.d.ts +63 -0
  21. package/dist/runtime/identity/live.d.ts.map +1 -1
  22. package/dist/runtime/identity/live.js +339 -64
  23. package/dist/runtime/identity/live.js.map +1 -1
  24. package/dist/runtime/identity/worker.d.ts +19 -0
  25. package/dist/runtime/identity/worker.d.ts.map +1 -0
  26. package/dist/runtime/identity/worker.js +189 -0
  27. package/dist/runtime/identity/worker.js.map +1 -0
  28. package/dist/runtime/local-files/locks.d.ts +14 -0
  29. package/dist/runtime/local-files/locks.d.ts.map +1 -1
  30. package/dist/runtime/local-files/locks.js +13 -0
  31. package/dist/runtime/local-files/locks.js.map +1 -1
  32. package/dist/runtime/local-files/store.d.ts +21 -0
  33. package/dist/runtime/local-files/store.d.ts.map +1 -1
  34. package/dist/runtime/local-files/store.js +37 -6
  35. package/dist/runtime/local-files/store.js.map +1 -1
  36. package/dist/runtime/mcp/identity-state.d.ts +131 -0
  37. package/dist/runtime/mcp/identity-state.d.ts.map +1 -0
  38. package/dist/runtime/mcp/identity-state.js +288 -0
  39. package/dist/runtime/mcp/identity-state.js.map +1 -0
  40. package/dist/runtime/mcp/index.d.ts +1 -0
  41. package/dist/runtime/mcp/index.d.ts.map +1 -1
  42. package/dist/runtime/mcp/index.js +1 -0
  43. package/dist/runtime/mcp/index.js.map +1 -1
  44. package/dist/runtime/mcp/server.d.ts +23 -0
  45. package/dist/runtime/mcp/server.d.ts.map +1 -1
  46. package/dist/runtime/mcp/server.js +105 -2
  47. package/dist/runtime/mcp/server.js.map +1 -1
  48. package/dist/runtime/mcp/sessions.d.ts +12 -2
  49. package/dist/runtime/mcp/sessions.d.ts.map +1 -1
  50. package/dist/runtime/mcp/sessions.js +15 -3
  51. package/dist/runtime/mcp/sessions.js.map +1 -1
  52. package/dist/runtime/mcp/stdio.d.ts +21 -0
  53. package/dist/runtime/mcp/stdio.d.ts.map +1 -1
  54. package/dist/runtime/mcp/stdio.js +203 -84
  55. package/dist/runtime/mcp/stdio.js.map +1 -1
  56. package/dist/runtime/mcp/tools.d.ts.map +1 -1
  57. package/dist/runtime/mcp/tools.js +16 -0
  58. package/dist/runtime/mcp/tools.js.map +1 -1
  59. package/dist/runtime/mcp-http/readonly-allowlist.d.ts.map +1 -1
  60. package/dist/runtime/mcp-http/readonly-allowlist.js +3 -0
  61. package/dist/runtime/mcp-http/readonly-allowlist.js.map +1 -1
  62. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "h2a",
3
3
  "description": "H2A coordination with one MCP endpoint (including Track read tools) and the H2A, Track, and Harness operating skills.",
4
- "version": "0.97.3",
4
+ "version": "0.97.4",
5
5
  "author": {
6
6
  "name": "Fabien Antoine"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "h2a",
3
- "version": "0.97.3",
3
+ "version": "0.97.4",
4
4
  "description": "Coordinate Claude, Codex and other CLI agents through the local h2a bus, objective loops and track system of record.",
5
5
  "author": {
6
6
  "name": "Fabien Antoine"
package/dist/cli.d.ts CHANGED
@@ -38,6 +38,7 @@
38
38
  */
39
39
  import type { H2AWorkspaceRef } from "@sentropic/h2a";
40
40
  import { type HostInstallationDoctorOptions, type HostInstallationDoctorReport } from "./hosts/installation-doctor.js";
41
+ import { type McpIdentityRequest } from "./runtime/mcp/index.js";
41
42
  import { type MirrorPushDaemonOptions } from "./runtime/mirror/index.js";
42
43
  import { type H2ADrumbeatEntry } from "./runtime/drumbeat/index.js";
43
44
  import { type H2ADriveInstructionPayload } from "./runtime/drive/index.js";
@@ -59,11 +60,23 @@ export declare function renderCliHelp(): string;
59
60
  * (write-only) cannot express a readable stdin; tests cover `runMcpStdio`
60
61
  * with `PassThrough` streams instead of going through this verb.
61
62
  */
63
+ /**
64
+ * L2: build the DEFERRED identity request from `mcp-serve` flags — pure, total,
65
+ * and lock-free (no key read, no registry parse, no lock wait). The transport
66
+ * hands this to a child worker that resolves identity OFF the MCP event loop, so
67
+ * `initialize` / `tools/list` / `h2a_identity_status` answer immediately. The
68
+ * synchronous {@link resolveAutoOpen} is kept unchanged for existing consumers.
69
+ */
70
+ export declare function buildMcpIdentityRequest(flags: Record<string, string>, cwd: () => string): McpIdentityRequest;
62
71
  /**
63
72
  * DEC-105 (EVO-6): resolve the auto-open session config from `mcp-serve` flags.
64
73
  * `--auto-open` enables it; the instance is `--instance <id>` or, if absent,
65
74
  * `<host>:<cwd-leaf>` (host = `--host` or "agent"). Pure + total so it can be
66
75
  * unit-tested without spawning the server. Returns undefined when not enabled.
76
+ *
77
+ * NOTE (L2): `mcp-serve` no longer calls this on its boot path — it defers
78
+ * identity via {@link buildMcpIdentityRequest}. This stays exported for the CLI
79
+ * consumers and tests that resolve identity synchronously.
67
80
  */
68
81
  export declare function resolveAutoOpen(flags: Record<string, string>, cwd: () => string): {
69
82
  instance: string;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAwEH,OAAO,KAAK,EAOV,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EAIL,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EAClC,MAAM,gCAAgC,CAAC;AAuCxC,OAAO,EAUL,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAeL,KAAK,gBAAgB,EAItB,MAAM,6BAA6B,CAAC;AAYrC,OAAO,EAUL,KAAK,0BAA0B,EAGhC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAQL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAkFpC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACrC;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CACjC,OAAO,EAAE,6BAA6B,KACnC,4BAA4B,CAAC;CACnC;AAWD,wBAAgB,aAAa,IAAI,MAAM,CA8ItC;AA6qCD;;;;;GAKG;AACH;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,MAAM,MAAM,GAChB;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC9C,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,IAAI,CAAC;CAC3B,GAAG,SAAS,CAwDZ;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAyBR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,GACrB,MAAM,CAkBR;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gFAAgF;IAChF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,WAAW,CAAC;CAKtB,GACA,OAAO,CAAC,MAAM,CAAC,CAiNjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACO,GAC7B,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CAKtB,GACA,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,GACrD,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAChB,OAAO,EAAE,0BAA0B,EACnC,UAAU,EAAE,MAAM,KACf,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAkCD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,EACtD,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,GAAE,aAAkE,GAC1E,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,GACrD,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,GAAE,aAAkE,EAC3E,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,GAAE,sBAA2B,GACrC,OAAO,CAAC,MAAM,CAAC,CAoDjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,uBAAuB,EACvB,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,kBAAkB,GAAG,UAAU,GAAG,KAAK,CAChG,CAAC;AA6UF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAyDjB;AAiED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAqLD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAkH9E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAsGhF;AA4dD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAGrF,GACA,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,GACjF,MAAM,EAAE,CAIV;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAG3G,GACA,OAAO,CAAC,MAAM,CAAC,CAkKjB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAGrF,GACA,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAyjCD;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM,CA8FR;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE;IACL,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,sCAAsC,EAAE,0BAA0B,CAAC;CAC3F,GACA,MAAM,CAuIR;AAg7CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB/D;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAKD,eAAO,MAAM,kBAAkB,aAG7B,CAAC;AAoBH,eAAO,MAAM,2BAA2B,aAA2C,CAAC;AAKpF,eAAO,MAAM,wBAAwB,aAGnC,CAAC;AAKH,eAAO,MAAM,kBAAkB,aAG7B,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAE5E,GACA,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAoID,wBAAgB,MAAM,CACpB,IAAI,GAAE,SAAS,MAAM,EAA0B,EAC/C,OAAO,GAAE,aAGR,EACD,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA4KR"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAwEH,OAAO,KAAK,EAOV,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EAIL,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EAClC,MAAM,gCAAgC,CAAC;AA6BxC,OAAO,EAKL,KAAK,kBAAkB,EAGxB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAUL,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAeL,KAAK,gBAAgB,EAItB,MAAM,6BAA6B,CAAC;AAYrC,OAAO,EAUL,KAAK,0BAA0B,EAGhC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAQL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAkFpC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACrC;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CACjC,OAAO,EAAE,6BAA6B,KACnC,4BAA4B,CAAC;CACnC;AAWD,wBAAgB,aAAa,IAAI,MAAM,CA8ItC;AA6qCD;;;;;GAKG;AACH;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,MAAM,MAAM,GAChB,kBAAkB,CAWpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,MAAM,MAAM,GAChB;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC9C,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,IAAI,CAAC;CAC3B,GAAG,SAAS,CAwDZ;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAyBR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,GACrB,MAAM,CAkBR;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gFAAgF;IAChF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,WAAW,CAAC;CAKtB,GACA,OAAO,CAAC,MAAM,CAAC,CA2OjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACO,GAC7B,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CAKtB,GACA,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,GACrD,OAAO,CAAC,MAAM,CAAC,CAgCjB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAChB,OAAO,EAAE,0BAA0B,EACnC,UAAU,EAAE,MAAM,KACf,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAkCD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,EACtD,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,GAAE,aAAkE,GAC1E,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IACF,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACP,GACrD,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,GAAE,aAAkE,EAC3E,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,GAAE,sBAA2B,GACrC,OAAO,CAAC,MAAM,CAAC,CAoDjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,uBAAuB,EACvB,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,kBAAkB,GAAG,UAAU,GAAG,KAAK,CAChG,CAAC;AA6UF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAyDjB;AAiED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAqLD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAkH9E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAsGhF;AA4dD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAGrF,GACA,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,GACjF,MAAM,EAAE,CAIV;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAG3G,GACA,OAAO,CAAC,MAAM,CAAC,CAkKjB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAGrF,GACA,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAyjCD;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM,CA8FR;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE;IACL,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,sCAAsC,EAAE,0BAA0B,CAAC;CAC3F,GACA,MAAM,CAuIR;AAg7CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB/D;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAKD,eAAO,MAAM,kBAAkB,aAG7B,CAAC;AAoBH,eAAO,MAAM,2BAA2B,aAA2C,CAAC;AAKpF,eAAO,MAAM,wBAAwB,aAGnC,CAAC;AAKH,eAAO,MAAM,kBAAkB,aAG7B,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,EAAE,GAAE;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAE5E,GACA,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAoID,wBAAgB,MAAM,CACpB,IAAI,GAAE,SAAS,MAAM,EAA0B,EAC/C,OAAO,GAAE,aAGR,EACD,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA4KR"}
package/dist/cli.js CHANGED
@@ -1330,11 +1330,34 @@ function cmdComprehension(argv, streams) {
1330
1330
  * (write-only) cannot express a readable stdin; tests cover `runMcpStdio`
1331
1331
  * with `PassThrough` streams instead of going through this verb.
1332
1332
  */
1333
+ /**
1334
+ * L2: build the DEFERRED identity request from `mcp-serve` flags — pure, total,
1335
+ * and lock-free (no key read, no registry parse, no lock wait). The transport
1336
+ * hands this to a child worker that resolves identity OFF the MCP event loop, so
1337
+ * `initialize` / `tools/list` / `h2a_identity_status` answer immediately. The
1338
+ * synchronous {@link resolveAutoOpen} is kept unchanged for existing consumers.
1339
+ */
1340
+ export function buildMcpIdentityRequest(flags, cwd) {
1341
+ const host = flags.host ?? "agent";
1342
+ return {
1343
+ root: resolveRoot(flags, cwd),
1344
+ host,
1345
+ cwd: cwd(),
1346
+ declaredCapabilities: [...H2A_CLI_DECLARED_CAPABILITIES],
1347
+ ...(flags.instance !== undefined ? { explicitInstance: flags.instance } : {}),
1348
+ ...(flags.name !== undefined ? { name: flags.name } : {}),
1349
+ ...(flags.scope !== undefined ? { scopes: [flags.scope] } : {})
1350
+ };
1351
+ }
1333
1352
  /**
1334
1353
  * DEC-105 (EVO-6): resolve the auto-open session config from `mcp-serve` flags.
1335
1354
  * `--auto-open` enables it; the instance is `--instance <id>` or, if absent,
1336
1355
  * `<host>:<cwd-leaf>` (host = `--host` or "agent"). Pure + total so it can be
1337
1356
  * unit-tested without spawning the server. Returns undefined when not enabled.
1357
+ *
1358
+ * NOTE (L2): `mcp-serve` no longer calls this on its boot path — it defers
1359
+ * identity via {@link buildMcpIdentityRequest}. This stays exported for the CLI
1360
+ * consumers and tests that resolve identity synchronously.
1338
1361
  */
1339
1362
  export function resolveAutoOpen(flags, cwd) {
1340
1363
  if (flags["auto-open"] === undefined)
@@ -1454,12 +1477,13 @@ export async function runMcpServe(flags, io = {
1454
1477
  const root = trace
1455
1478
  ? trace.span("root_resolve", () => resolveRoot(flags, cwd))
1456
1479
  : resolveRoot(flags, cwd);
1457
- // Identity/auto-open resolution reads keys, binds and registers — the deep
1458
- // spans (provider, key read, lock wait, registry parse) are emitted from
1459
- // live.ts / bindings.ts / locks.ts / store.ts under this same attempt.
1460
- const autoOpen = trace
1461
- ? trace.span("identity_resolve", () => resolveAutoOpen(flags, cwd))
1462
- : resolveAutoOpen(flags, cwd);
1480
+ // L2: identity is resolved ASYNCHRONOUSLY in a dedicated child worker so
1481
+ // `initialize` / `tools/list` / `h2a_identity_status` answer immediately even
1482
+ // under a live lock. Here we ONLY capture the deferred request — no key read,
1483
+ // no lock wait, no ~17 MB registry parse on this event loop (the #249
1484
+ // "move-don't-shrink" trap is avoided by not resolving synchronously at all).
1485
+ // `--auto-open` absent → no identity (the explicit mode, unchanged).
1486
+ const identityRequest = flags["auto-open"] !== undefined ? buildMcpIdentityRequest(flags, cwd) : undefined;
1463
1487
  const readinessEnv = io.env ?? process.env;
1464
1488
  const readyFile = readinessEnv[H2A_MCP_READY_FILE_ENV];
1465
1489
  const readyNonce = readinessEnv[H2A_MCP_READY_NONCE_ENV];
@@ -1565,55 +1589,79 @@ try {
1565
1589
  }
1566
1590
  }
1567
1591
  // EVO-1 inbox wake (bug #3): --wake <driver-kind> injects a signed wake on
1568
- // inbox arrival (requires --auto-open + a resolvable private key).
1592
+ // inbox arrival (requires --auto-open + a resolvable private key). The KIND is
1593
+ // validated eagerly; the driver is BUILT only after asynchronous activation,
1594
+ // when the resolved private key is available (deferred `buildWake`).
1569
1595
  const WAKE_KINDS = ["logging", "native", "local-tmux", "headless", "auto"];
1570
1596
  const nativeSessionId = nativePtyWakeTarget(readinessEnv);
1571
- let identityPrivateKeyPem;
1572
- if (autoOpen?.privateKeyPath) {
1573
- try {
1574
- identityPrivateKeyPem = readFileSync(autoOpen.privateKeyPath, "utf8");
1575
- }
1576
- catch (err) {
1577
- io.stderr.write(`h2a mcp-serve: local signing unavailable (cannot read key): ${err.message}\n`);
1578
- }
1579
- }
1580
- let wake;
1597
+ let wakeKind;
1581
1598
  if (flags.wake !== undefined && !WAKE_KINDS.includes(flags.wake)) {
1582
1599
  io.stderr.write("h2a mcp-serve: --wake must be one of logging|native|local-tmux|headless|auto; ignored\n");
1583
1600
  }
1584
1601
  else if (flags.wake === "headless") {
1585
- // A self-wake must NEVER spawn a new agent. headless does exactly that.
1586
1602
  io.stderr.write("h2a mcp-serve: --wake headless is unsafe (it would spawn a NEW agent on inbox arrival, not wake this one); use auto. ignored\n");
1587
1603
  }
1588
- else if (flags.wake !== undefined && autoOpen?.privateKeyPath && identityPrivateKeyPem) {
1604
+ else if (flags.wake !== undefined && identityRequest === undefined) {
1605
+ io.stderr.write("h2a mcp-serve: --wake requires --auto-open; ignored\n");
1606
+ }
1607
+ else if (flags.wake !== undefined) {
1608
+ wakeKind = flags.wake;
1609
+ }
1610
+ // L2 activation wiring: turn the ASYNC-resolved identity into the presence
1611
+ // config + wake driver + live signer. Runs only once identity is really bound.
1612
+ const buildAutoOpen = (identity) => {
1613
+ const host = flags.host;
1614
+ if (identity.migrationNotice) {
1615
+ io.stderr.write(`h2a mcp-serve: ${identity.migrationNotice}\n`);
1616
+ }
1617
+ // §D1b: follow the host title only when the name was implicit and a real
1618
+ // provider session id was readable, and only for a host we can re-read.
1619
+ const refreshableHost = host === "claude" || host === "codex";
1620
+ const refreshDisplayName = flags.name === undefined && identity.providerSessionId !== undefined && refreshableHost
1621
+ ? createHostSessionNameRefresher({
1622
+ host,
1623
+ cwd: cwd(),
1624
+ sessionId: identity.providerSessionId
1625
+ })
1626
+ : undefined;
1627
+ // The worker sends the real workspace object over IPC (typed `unknown` there
1628
+ // because IPC carries no nominal types); it is an H2AWorkspaceRef at runtime.
1629
+ const workspace = identity.workspace;
1630
+ return {
1631
+ instance: identity.instance,
1632
+ ...(host ? { host } : {}),
1633
+ ...(workspace !== undefined ? { workspace } : {}),
1634
+ ...(identity.name !== undefined ? { name: identity.name } : {}),
1635
+ ...(refreshDisplayName ? { refreshDisplayName } : {}),
1636
+ ...(flags.scope ? { scopes: [flags.scope] } : {}),
1637
+ // An explicit --instance is an operator label, not an owned identity: it
1638
+ // may open presence but never attributes an h2a_run delegation.
1639
+ ...(flags.instance === undefined ? { delegationEligible: true } : {})
1640
+ };
1641
+ };
1642
+ const buildWake = (privateKeyPem, _instance, host) => {
1643
+ if (wakeKind === undefined)
1644
+ return undefined;
1589
1645
  try {
1590
1646
  const log = (line) => io.stderr.write(`${line}\n`);
1591
- // `auto` for a self-wake is native→local-tmux ONLY (no headless leg — its
1592
- // fallback spawns a new agent, wrong for waking yourself).
1593
- // The shared `--wake auto` configuration stays bounded here: its native
1594
- // launcher marker chooses the backchannel first, with tmux as fallback.
1595
- const driver = flags.wake === "auto"
1647
+ const driver = wakeKind === "auto"
1596
1648
  ? chainDriver(nativePtyBackchannelDriver(log), localTmuxDriver({ log }))
1597
- : buildDriveDriver(nativeSessionId !== undefined && flags.wake === "local-tmux"
1649
+ : buildDriveDriver(nativeSessionId !== undefined && wakeKind === "local-tmux"
1598
1650
  ? "native"
1599
- : flags.wake, log);
1600
- wake = {
1651
+ : wakeKind, log);
1652
+ void host;
1653
+ return {
1601
1654
  driver,
1602
- privateKeyPem: identityPrivateKeyPem,
1655
+ privateKeyPem,
1603
1656
  ...(nativeSessionId !== undefined ? { nativeSessionId } : {})
1604
1657
  };
1605
1658
  }
1606
1659
  catch (err) {
1607
- io.stderr.write(`h2a mcp-serve: --wake disabled (cannot read key): ${err.message}\n`);
1660
+ io.stderr.write(`h2a mcp-serve: --wake disabled: ${err.message}\n`);
1661
+ return undefined;
1608
1662
  }
1609
- }
1610
- else if (flags.wake !== undefined && !autoOpen) {
1611
- io.stderr.write("h2a mcp-serve: --wake requires --auto-open; ignored\n");
1612
- }
1663
+ };
1613
1664
  try {
1614
- if (autoOpen?.migrationNotice) {
1615
- io.stderr.write(`h2a mcp-serve: ${autoOpen.migrationNotice}\n`);
1616
- }
1617
1665
  trace?.phase("transport_enter");
1618
1666
  await runMcpStdio({
1619
1667
  root,
@@ -1621,12 +1669,10 @@ try {
1621
1669
  stdin: io.stdin,
1622
1670
  stdout: io.stdout,
1623
1671
  stderr: io.stderr,
1624
- ...(autoOpen ? { autoOpen } : {}),
1625
- ...(autoOpen && identityPrivateKeyPem
1626
- ? { sendContext: { instance: autoOpen.instance, privateKeyPem: identityPrivateKeyPem } }
1672
+ ...(identityRequest
1673
+ ? { identityRequest, identityActivation: { buildAutoOpen, buildWake } }
1627
1674
  : {}),
1628
1675
  ...(readiness ? { readiness } : {}),
1629
- ...(wake ? { wake } : {}),
1630
1676
  ...(io.signal ? { signal: io.signal } : {})
1631
1677
  });
1632
1678
  return 0;