@sapiom/harness 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/README.md +36 -0
  3. package/dist/cli/bin.js +26 -2
  4. package/dist/cli/bin.js.map +1 -1
  5. package/dist/cli/consent.d.ts +29 -1
  6. package/dist/cli/consent.d.ts.map +1 -1
  7. package/dist/cli/consent.js +33 -11
  8. package/dist/cli/consent.js.map +1 -1
  9. package/dist/core/adapters/adapter.d.ts +72 -0
  10. package/dist/core/adapters/adapter.d.ts.map +1 -0
  11. package/dist/core/adapters/adapter.js +18 -0
  12. package/dist/core/adapters/adapter.js.map +1 -0
  13. package/dist/core/adapters/claude-code-info.d.ts +11 -0
  14. package/dist/core/adapters/claude-code-info.d.ts.map +1 -0
  15. package/dist/core/adapters/claude-code-info.js +27 -0
  16. package/dist/core/adapters/claude-code-info.js.map +1 -0
  17. package/dist/core/adapters/claude-code.d.ts.map +1 -1
  18. package/dist/core/adapters/claude-code.js +9 -8
  19. package/dist/core/adapters/claude-code.js.map +1 -1
  20. package/dist/core/adapters/codex-info.d.ts +10 -0
  21. package/dist/core/adapters/codex-info.d.ts.map +1 -0
  22. package/dist/core/adapters/codex-info.js +32 -0
  23. package/dist/core/adapters/codex-info.js.map +1 -0
  24. package/dist/core/adapters/conductor.d.ts +8 -0
  25. package/dist/core/adapters/conductor.d.ts.map +1 -0
  26. package/dist/core/adapters/conductor.js +57 -0
  27. package/dist/core/adapters/conductor.js.map +1 -0
  28. package/dist/core/adapters/detect.d.ts +15 -0
  29. package/dist/core/adapters/detect.d.ts.map +1 -0
  30. package/dist/core/adapters/detect.js +62 -0
  31. package/dist/core/adapters/detect.js.map +1 -0
  32. package/dist/core/adapters/opencode.d.ts +8 -0
  33. package/dist/core/adapters/opencode.d.ts.map +1 -0
  34. package/dist/core/adapters/opencode.js +35 -0
  35. package/dist/core/adapters/opencode.js.map +1 -0
  36. package/dist/core/adapters/pi.d.ts +8 -0
  37. package/dist/core/adapters/pi.d.ts.map +1 -0
  38. package/dist/core/adapters/pi.js +24 -0
  39. package/dist/core/adapters/pi.js.map +1 -0
  40. package/dist/core/adapters/registry.d.ts +42 -0
  41. package/dist/core/adapters/registry.d.ts.map +1 -0
  42. package/dist/core/adapters/registry.js +67 -0
  43. package/dist/core/adapters/registry.js.map +1 -0
  44. package/dist/core/canvas-enrich.d.ts +9 -0
  45. package/dist/core/canvas-enrich.d.ts.map +1 -1
  46. package/dist/core/canvas-enrich.js +8 -0
  47. package/dist/core/canvas-enrich.js.map +1 -1
  48. package/dist/core/collector/analytics-emitter.d.ts +57 -0
  49. package/dist/core/collector/analytics-emitter.d.ts.map +1 -0
  50. package/dist/core/collector/analytics-emitter.js +131 -0
  51. package/dist/core/collector/analytics-emitter.js.map +1 -0
  52. package/dist/core/collector/identity-migration.d.ts +25 -0
  53. package/dist/core/collector/identity-migration.d.ts.map +1 -0
  54. package/dist/core/collector/identity-migration.js +68 -0
  55. package/dist/core/collector/identity-migration.js.map +1 -0
  56. package/dist/core/collector/store-retention.d.ts +51 -0
  57. package/dist/core/collector/store-retention.d.ts.map +1 -0
  58. package/dist/core/collector/store-retention.js +117 -0
  59. package/dist/core/collector/store-retention.js.map +1 -0
  60. package/dist/core/collector/store.d.ts +17 -1
  61. package/dist/core/collector/store.d.ts.map +1 -1
  62. package/dist/core/collector/store.js +24 -3
  63. package/dist/core/collector/store.js.map +1 -1
  64. package/dist/core/errors.d.ts +71 -0
  65. package/dist/core/errors.d.ts.map +1 -0
  66. package/dist/core/errors.js +86 -0
  67. package/dist/core/errors.js.map +1 -0
  68. package/dist/core/inject/claude-settings.d.ts +3 -1
  69. package/dist/core/inject/claude-settings.d.ts.map +1 -1
  70. package/dist/core/inject/claude-settings.js +3 -1
  71. package/dist/core/inject/claude-settings.js.map +1 -1
  72. package/dist/core/inject/skills-plugin.d.ts +44 -0
  73. package/dist/core/inject/skills-plugin.d.ts.map +1 -0
  74. package/dist/core/inject/skills-plugin.js +146 -0
  75. package/dist/core/inject/skills-plugin.js.map +1 -0
  76. package/dist/core/macro-runner.d.ts.map +1 -1
  77. package/dist/core/macro-runner.js +20 -1
  78. package/dist/core/macro-runner.js.map +1 -1
  79. package/dist/core/macros.d.ts.map +1 -1
  80. package/dist/core/macros.js +3 -0
  81. package/dist/core/macros.js.map +1 -1
  82. package/dist/core/session-manager.d.ts +37 -18
  83. package/dist/core/session-manager.d.ts.map +1 -1
  84. package/dist/core/session-manager.js +100 -35
  85. package/dist/core/session-manager.js.map +1 -1
  86. package/dist/core/task-manager.d.ts +25 -4
  87. package/dist/core/task-manager.d.ts.map +1 -1
  88. package/dist/core/task-manager.js +118 -6
  89. package/dist/core/task-manager.js.map +1 -1
  90. package/dist/core/workflow-registry.d.ts +7 -0
  91. package/dist/core/workflow-registry.d.ts.map +1 -1
  92. package/dist/core/workflow-registry.js +74 -50
  93. package/dist/core/workflow-registry.js.map +1 -1
  94. package/dist/core/workspace-watcher.d.ts +13 -1
  95. package/dist/core/workspace-watcher.d.ts.map +1 -1
  96. package/dist/core/workspace-watcher.js +78 -4
  97. package/dist/core/workspace-watcher.js.map +1 -1
  98. package/dist/index.d.ts +3 -0
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +2 -0
  101. package/dist/index.js.map +1 -1
  102. package/dist/server/index.d.ts +16 -1
  103. package/dist/server/index.d.ts.map +1 -1
  104. package/dist/server/index.js +0 -0
  105. package/dist/server/index.js.map +1 -1
  106. package/dist/server/ingest.d.ts +8 -0
  107. package/dist/server/ingest.d.ts.map +1 -1
  108. package/dist/server/ingest.js +4 -0
  109. package/dist/server/ingest.js.map +1 -1
  110. package/dist/server/macros.d.ts +5 -2
  111. package/dist/server/macros.d.ts.map +1 -1
  112. package/dist/server/macros.js +5 -2
  113. package/dist/server/macros.js.map +1 -1
  114. package/dist/server/rest.d.ts +26 -1
  115. package/dist/server/rest.d.ts.map +1 -1
  116. package/dist/server/rest.js +139 -6
  117. package/dist/server/rest.js.map +1 -1
  118. package/dist/server/skills.d.ts +51 -0
  119. package/dist/server/skills.d.ts.map +1 -0
  120. package/dist/server/skills.js +312 -0
  121. package/dist/server/skills.js.map +1 -0
  122. package/dist/shared/types.d.ts +75 -2
  123. package/dist/shared/types.d.ts.map +1 -1
  124. package/dist/shared/types.js +12 -1
  125. package/dist/shared/types.js.map +1 -1
  126. package/dist/web/assets/index-BTm-QNRt.css +32 -0
  127. package/dist/web/assets/index-CvNiFngP.js +204 -0
  128. package/dist/web/index.html +2 -2
  129. package/package.json +19 -7
  130. package/dist/core/collector/batcher.d.ts +0 -57
  131. package/dist/core/collector/batcher.d.ts.map +0 -1
  132. package/dist/core/collector/batcher.js +0 -143
  133. package/dist/core/collector/batcher.js.map +0 -1
  134. package/dist/web/assets/index-B9R4TzH7.css +0 -32
  135. package/dist/web/assets/index-Dh97QAgq.js +0 -192
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Typed errors for session and spawn failures. Each carries a stable `code`
3
+ * so callers can react programmatically to specific failure modes instead of
4
+ * parsing error message strings.
5
+ *
6
+ * HTTP mappings (server/rest.ts, server/macros.ts):
7
+ * UnknownSessionError → 404
8
+ * SessionNotReadyError → 409
9
+ * SessionAlreadyLiveError → 409
10
+ * SessionNotResumeableError → 409
11
+ * AdapterNotFoundError → 400
12
+ */
13
+ /** Base class for all typed harness errors. */
14
+ export class HarnessError extends Error {
15
+ constructor(code, message, cause) {
16
+ super(message);
17
+ this.code = code;
18
+ this.cause = cause;
19
+ // Ensure instanceof checks survive transpilation to ES5-style output.
20
+ this.name = new.target.name;
21
+ Object.setPrototypeOf(this, new.target.prototype);
22
+ }
23
+ }
24
+ /**
25
+ * Thrown when an operation references a session id that does not exist in the
26
+ * registry. Maps to HTTP 404.
27
+ */
28
+ export class UnknownSessionError extends HarnessError {
29
+ constructor(id) {
30
+ super("UNKNOWN_SESSION", `Unknown session "${id}"`);
31
+ }
32
+ }
33
+ /**
34
+ * Thrown by `submitInput()` when a session's pty is alive but never became
35
+ * interactive within the grace period — the trust-dialog race this readiness
36
+ * mechanism exists to catch. Maps to HTTP 409.
37
+ */
38
+ export class SessionNotReadyError extends HarnessError {
39
+ constructor(id) {
40
+ super("SESSION_NOT_READY", `Session "${id}" is not ready yet — check the terminal, it may be asking to trust the folder.`);
41
+ }
42
+ }
43
+ /**
44
+ * Thrown by `resume()` when the session record has no `agentSessionId` to
45
+ * resume from (it was never fully started, or is history-only with no
46
+ * recorded session). Maps to HTTP 409.
47
+ */
48
+ export class SessionNotResumeableError extends HarnessError {
49
+ constructor(id) {
50
+ super("SESSION_NOT_RESUMEABLE", `Session "${id}" has no agentSessionId to resume from`);
51
+ }
52
+ }
53
+ /**
54
+ * Thrown by `resume()` when the session already has a live pty — double-resume
55
+ * is a no-op caller error. Maps to HTTP 409.
56
+ */
57
+ export class SessionAlreadyLiveError extends HarnessError {
58
+ constructor(id) {
59
+ super("SESSION_ALREADY_LIVE", `Session "${id}" already has a live pty`);
60
+ }
61
+ }
62
+ /**
63
+ * Thrown when an operation requires a harness adapter that has not been
64
+ * registered. Maps to HTTP 400.
65
+ */
66
+ export class AdapterNotFoundError extends HarnessError {
67
+ constructor(harness) {
68
+ super("ADAPTER_NOT_FOUND", `No adapter registered for harness "${harness}"`);
69
+ }
70
+ }
71
+ /**
72
+ * Thrown when a spawn or send operation is attempted on an external-mode
73
+ * harness adapter (e.g. Conductor) whose sessions are managed by its own
74
+ * companion app — the harness cannot spawn or inject into them. Maps to
75
+ * HTTP 409.
76
+ *
77
+ * The `harness` field names the adapter so the UI can show a targeted message
78
+ * (e.g. "Conductor sessions are managed by the Conductor app").
79
+ */
80
+ export class ExternalHarnessError extends HarnessError {
81
+ constructor(harness, label) {
82
+ super("HARNESS_EXTERNAL", `${label} sessions are managed by the ${label} app — spawn and send are not available.`);
83
+ this.harness = harness;
84
+ }
85
+ }
86
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+CAA+C;AAC/C,MAAM,OAAO,YAAa,SAAQ,KAAK;IAMrC,YAAY,IAAY,EAAE,OAAe,EAAE,KAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,sEAAsE;QACtE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,EAAU;QACpB,KAAK,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,EAAU;QACpB,KAAK,CACH,mBAAmB,EACnB,YAAY,EAAE,gFAAgF,CAC/F,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACzD,YAAY,EAAU;QACpB,KAAK,CAAC,wBAAwB,EAAE,YAAY,EAAE,wCAAwC,CAAC,CAAC;IAC1F,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IACvD,YAAY,EAAU;QACpB,KAAK,CAAC,sBAAsB,EAAE,YAAY,EAAE,0BAA0B,CAAC,CAAC;IAC1E,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,mBAAmB,EAAE,sCAAsC,OAAO,GAAG,CAAC,CAAC;IAC/E,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IAGpD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CACH,kBAAkB,EAClB,GAAG,KAAK,gCAAgC,KAAK,0CAA0C,CACxF,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -6,7 +6,9 @@
6
6
  * written under the harness's generated-config directory and passed to
7
7
  * `claude` via `--settings <path>` for the lifetime of one session.
8
8
  */
9
- /** The six Claude Code hook events the harness listens for. */
9
+ /**
10
+ * The Claude Code hook events the harness listens for.
11
+ */
10
12
  declare const HOOK_EVENTS: readonly ["SessionStart", "UserPromptSubmit", "PreToolUse", "PostToolUse", "Stop", "SessionEnd"];
11
13
  export type ClaudeHookEvent = (typeof HOOK_EVENTS)[number];
12
14
  export interface GenerateClaudeSettingsOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,+DAA+D;AAC/D,QAAA,MAAM,WAAW,kGAOP,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,6BAA6B;IAC5C,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB;AA0GD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
1
+ {"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;GAEG;AACH,QAAA,MAAM,WAAW,kGAOP,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,6BAA6B;IAC5C,wDAAwD;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB;AA0GD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
@@ -10,7 +10,9 @@ import * as fs from "node:fs/promises";
10
10
  import * as path from "node:path";
11
11
  import { HARNESS_PATHS } from "../../shared/types.js";
12
12
  import { expandHome } from "../paths.js";
13
- /** The six Claude Code hook events the harness listens for. */
13
+ /**
14
+ * The Claude Code hook events the harness listens for.
15
+ */
14
16
  const HOOK_EVENTS = [
15
17
  "SessionStart",
16
18
  "UserPromptSubmit",
@@ -1 +1 @@
1
- {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,+DAA+D;AAC/D,MAAM,WAAW,GAAG;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,YAAY;CACJ,CAAC;AAsBX;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B,CAAC;AAEF,SAAS,cAAc,CAAC,IAAY,EAAE,gBAAwB;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG;YACb;gBACE,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,QAAQ,cAAc,IAAI,KAAK,EAAE;qBAC3C;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAEpF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/core/inject/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,YAAY;CACJ,CAAC;AAsBX;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF1B,CAAC;AAEF,SAAS,cAAc,CAAC,IAAY,EAAE,gBAAwB;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG;YACb;gBACE,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,QAAQ,cAAc,IAAI,KAAK,EAAE;qBAC3C;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAEpF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * skills-plugin — generate a per-session --plugin-dir for Sapiom's bundled skills.
3
+ *
4
+ * claude-code auto-discovers `<plugin-dir>/skills/<name>/SKILL.md` when launched
5
+ * with `--plugin-dir <path>`. A plugin-provided skill registers as a
6
+ * PLUGIN-NAMESPACED slash command `/<plugin-name>:<name>` — NOT a bare
7
+ * `/<name>` (verified against claude-code 2.1.x; bare names are reserved for
8
+ * personal/project skills). The plugin name comes from plugin.json ("sapiom"
9
+ * here), so the sapiom-agent-authoring skill surfaces as
10
+ * `/sapiom:sapiom-agent-authoring`. The skill is also exposed to the agent's
11
+ * model-driven Skill tool, so it can be auto-invoked by relevance without the
12
+ * user typing the command at all.
13
+ * This module writes the required layout under a per-session subdirectory of
14
+ * `generatedRoot` so sessions never share or race on config files.
15
+ *
16
+ * Source of skills: the installed @sapiom/agent-core package ships a `skills/`
17
+ * directory alongside its dist. We resolve it via the package's own
18
+ * package.json, then copy each `<name>/SKILL.md` into the plugin layout.
19
+ *
20
+ * The copy is session-scoped and non-mutating: nothing is written to the user's
21
+ * own ~/.claude or the project repository. Retention (exit-time delete + sweep)
22
+ * is handled by the same mechanism that cleans up mcp-config and settings files.
23
+ *
24
+ * Graceful no-op: if @sapiom/agent-core's skills directory is absent or
25
+ * unresolvable, the function returns undefined rather than throwing — the
26
+ * session still launches normally, just without the --plugin-dir flag.
27
+ */
28
+ export interface SkillsPluginOptions {
29
+ /** Root directory generated configs live under. Defaults to HARNESS_PATHS.generated. */
30
+ generatedRoot?: string;
31
+ }
32
+ /**
33
+ * Generate the per-session --plugin-dir for Sapiom's bundled skills.
34
+ *
35
+ * Creates:
36
+ * <generatedRoot>/<harnessSessionId>/skills-plugin/
37
+ * .claude-plugin/plugin.json
38
+ * skills/<name>/SKILL.md (one entry per skill in agent-core's skills/)
39
+ *
40
+ * Returns the plugin dir path (`<generatedRoot>/<harnessSessionId>/skills-plugin`)
41
+ * on success, or undefined when no skills are found or agent-core is not resolvable.
42
+ */
43
+ export declare function generateSkillsPlugin(harnessSessionId: string, options?: SkillsPluginOptions): Promise<string | undefined>;
44
+ //# sourceMappingURL=skills-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-plugin.d.ts","sourceRoot":"","sources":["../../../src/core/inject/skills-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAUH,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4DD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgD7B"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * skills-plugin — generate a per-session --plugin-dir for Sapiom's bundled skills.
3
+ *
4
+ * claude-code auto-discovers `<plugin-dir>/skills/<name>/SKILL.md` when launched
5
+ * with `--plugin-dir <path>`. A plugin-provided skill registers as a
6
+ * PLUGIN-NAMESPACED slash command `/<plugin-name>:<name>` — NOT a bare
7
+ * `/<name>` (verified against claude-code 2.1.x; bare names are reserved for
8
+ * personal/project skills). The plugin name comes from plugin.json ("sapiom"
9
+ * here), so the sapiom-agent-authoring skill surfaces as
10
+ * `/sapiom:sapiom-agent-authoring`. The skill is also exposed to the agent's
11
+ * model-driven Skill tool, so it can be auto-invoked by relevance without the
12
+ * user typing the command at all.
13
+ * This module writes the required layout under a per-session subdirectory of
14
+ * `generatedRoot` so sessions never share or race on config files.
15
+ *
16
+ * Source of skills: the installed @sapiom/agent-core package ships a `skills/`
17
+ * directory alongside its dist. We resolve it via the package's own
18
+ * package.json, then copy each `<name>/SKILL.md` into the plugin layout.
19
+ *
20
+ * The copy is session-scoped and non-mutating: nothing is written to the user's
21
+ * own ~/.claude or the project repository. Retention (exit-time delete + sweep)
22
+ * is handled by the same mechanism that cleans up mcp-config and settings files.
23
+ *
24
+ * Graceful no-op: if @sapiom/agent-core's skills directory is absent or
25
+ * unresolvable, the function returns undefined rather than throwing — the
26
+ * session still launches normally, just without the --plugin-dir flag.
27
+ */
28
+ import * as fs from "node:fs/promises";
29
+ import { readFileSync } from "node:fs";
30
+ import * as path from "node:path";
31
+ import { createRequire } from "node:module";
32
+ import { HARNESS_PATHS } from "../../shared/types.js";
33
+ import { expandHome } from "../../cli/paths.js";
34
+ /**
35
+ * Resolve the `skills/` directory from the installed @sapiom/agent-core package.
36
+ * Returns null when the package or its skills directory is unresolvable.
37
+ *
38
+ * Two strategies, in order:
39
+ * 1. Resolve the package's own package.json directly. Clean, but only works
40
+ * when agent-core's `exports` map exposes `./package.json` — older versions
41
+ * don't, and `require.resolve` then throws ERR_PACKAGE_PATH_NOT_EXPORTED.
42
+ * 2. Fallback: resolve the package's main entry (its `.` export, always
43
+ * defined) and walk up to the package root — the first ancestor whose
44
+ * package.json `name` is "@sapiom/agent-core". Robust to both the exports
45
+ * map and the dual dist layout (dist/esm, dist/cjs).
46
+ *
47
+ * Strategy 2 alone would suffice; strategy 1 is kept as the fast path for
48
+ * agent-core versions that do expose ./package.json. The fallback is what keeps
49
+ * a published harness working regardless of which agent-core version resolves
50
+ * at install time — this exact seam silently no-op'd once (the skill never
51
+ * loaded) precisely because only strategy 1 existed and its throw was swallowed.
52
+ */
53
+ function resolveAgentCoreSkillsDir() {
54
+ const require = createRequire(import.meta.url);
55
+ // Strategy 1: direct package.json resolution (clean path).
56
+ try {
57
+ const pkgJsonPath = require.resolve("@sapiom/agent-core/package.json");
58
+ return path.join(path.dirname(pkgJsonPath), "skills");
59
+ }
60
+ catch {
61
+ // exports map may not expose ./package.json — fall through to strategy 2.
62
+ }
63
+ // Strategy 2: resolve the main entry and walk up to the package root.
64
+ try {
65
+ const entry = require.resolve("@sapiom/agent-core");
66
+ let dir = path.dirname(entry);
67
+ // Bounded climb: main entry (e.g. dist/esm/index.js) sits a handful of
68
+ // levels below the package root; the guard prevents an unbounded walk to
69
+ // the filesystem root if the layout is ever unexpected.
70
+ for (let i = 0; i < 8; i++) {
71
+ try {
72
+ const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
73
+ if (pkg.name === "@sapiom/agent-core")
74
+ return path.join(dir, "skills");
75
+ }
76
+ catch {
77
+ // No package.json here (or unparseable / a nested type-marker without a
78
+ // name field) — keep climbing.
79
+ }
80
+ const parent = path.dirname(dir);
81
+ if (parent === dir)
82
+ break;
83
+ dir = parent;
84
+ }
85
+ }
86
+ catch {
87
+ // agent-core not installed at all.
88
+ }
89
+ return null;
90
+ }
91
+ /**
92
+ * Generate the per-session --plugin-dir for Sapiom's bundled skills.
93
+ *
94
+ * Creates:
95
+ * <generatedRoot>/<harnessSessionId>/skills-plugin/
96
+ * .claude-plugin/plugin.json
97
+ * skills/<name>/SKILL.md (one entry per skill in agent-core's skills/)
98
+ *
99
+ * Returns the plugin dir path (`<generatedRoot>/<harnessSessionId>/skills-plugin`)
100
+ * on success, or undefined when no skills are found or agent-core is not resolvable.
101
+ */
102
+ export async function generateSkillsPlugin(harnessSessionId, options = {}) {
103
+ const agentCoreSkillsDir = resolveAgentCoreSkillsDir();
104
+ if (!agentCoreSkillsDir)
105
+ return undefined;
106
+ // Check the skills directory exists and has content.
107
+ let skillDirs;
108
+ try {
109
+ const entries = await fs.readdir(agentCoreSkillsDir, { withFileTypes: true });
110
+ skillDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
111
+ }
112
+ catch {
113
+ // skills/ directory absent or unreadable — graceful no-op.
114
+ return undefined;
115
+ }
116
+ if (skillDirs.length === 0)
117
+ return undefined;
118
+ const generatedRoot = expandHome(options.generatedRoot ?? HARNESS_PATHS.generated);
119
+ const pluginDir = path.join(generatedRoot, harnessSessionId, "skills-plugin");
120
+ // Write the .claude-plugin/plugin.json manifest.
121
+ const pluginJsonDir = path.join(pluginDir, ".claude-plugin");
122
+ await fs.mkdir(pluginJsonDir, { recursive: true });
123
+ // Plugin name is user-visible: it namespaces every skill's slash command as
124
+ // `/<name>:<skill>`, so "sapiom" yields `/sapiom:sapiom-agent-authoring`.
125
+ await fs.writeFile(path.join(pluginJsonDir, "plugin.json"), JSON.stringify({ name: "sapiom" }, null, 2) + "\n", "utf8");
126
+ // Copy each skill's SKILL.md into skills/<name>/SKILL.md.
127
+ let copiedAny = false;
128
+ for (const skillName of skillDirs) {
129
+ const sourceMd = path.join(agentCoreSkillsDir, skillName, "SKILL.md");
130
+ try {
131
+ await fs.access(sourceMd);
132
+ }
133
+ catch {
134
+ // No SKILL.md for this entry — skip.
135
+ continue;
136
+ }
137
+ const destDir = path.join(pluginDir, "skills", skillName);
138
+ await fs.mkdir(destDir, { recursive: true });
139
+ await fs.copyFile(sourceMd, path.join(destDir, "SKILL.md"));
140
+ copiedAny = true;
141
+ }
142
+ if (!copiedAny)
143
+ return undefined;
144
+ return pluginDir;
145
+ }
146
+ //# sourceMappingURL=skills-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-plugin.js","sourceRoot":"","sources":["../../../src/core/inject/skills-plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"macro-runner.d.ts","sourceRoot":"","sources":["../../src/core/macro-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE9B,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAoDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,GAAG,mBAAmB,CAiBpF"}
1
+ {"version":3,"file":"macro-runner.d.ts","sourceRoot":"","sources":["../../src/core/macro-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE9B,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAwED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,GAAG,mBAAmB,CAiBpF"}
@@ -5,9 +5,28 @@ export class MacroValidationError extends Error {
5
5
  }
6
6
  }
7
7
  const PLACEHOLDER_PATTERN = /\{\{[a-zA-Z.]+\}\}/g;
8
+ /**
9
+ * POSIX single-quote escaping for shell arguments.
10
+ *
11
+ * Single-quoting is the only quoting form that stops ALL special characters
12
+ * (dollar signs, backticks, backslashes, embedded double-quotes, etc.).
13
+ * Double-quotes DO NOT protect against `$(...)` or backtick expansion, which
14
+ * makes them unsafe for untrusted, user-supplied paths.
15
+ *
16
+ * The only character that cannot appear inside single quotes is `'` itself;
17
+ * we close the quote, insert `'\''`, and reopen: `a'b` → `'a'\''b'`.
18
+ */
19
+ function shellQuote(p) {
20
+ return "'" + p.replace(/'/g, "'\\''") + "'";
21
+ }
8
22
  function placeholderTable(ctx) {
9
23
  return {
10
- "{{workflow.path}}": { available: ctx.workflow != null, value: ctx.workflow?.path ?? "" },
24
+ // Shell-quoted so that paths with spaces, dollar signs, backticks, or
25
+ // embedded quotes cannot execute arbitrary commands in the agent's shell.
26
+ "{{workflow.path}}": {
27
+ available: ctx.workflow != null,
28
+ value: ctx.workflow != null ? shellQuote(ctx.workflow.path) : "",
29
+ },
11
30
  "{{workflow.name}}": { available: ctx.workflow != null, value: ctx.workflow?.name ?? "" },
12
31
  "{{workflow.definitionId}}": {
13
32
  available: ctx.workflow?.definitionId != null,
@@ -1 +1 @@
1
- {"version":3,"file":"macro-runner.js","sourceRoot":"","sources":["../../src/core/macro-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"macro-runner.js","sourceRoot":"","sources":["../../src/core/macro-runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../../src/core/macros.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,QAAQ,EAyDpC,CAAC"}
1
+ {"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../../src/core/macros.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,QAAQ,EA4DpC,CAAC"}
@@ -7,6 +7,9 @@ export const DEFAULT_MACROS = [
7
7
  action: {
8
8
  kind: "inject",
9
9
  submit: true,
10
+ // {{workflow.path}} is POSIX single-quoted at resolution time (macro-runner.ts
11
+ // shellQuote), which stops spaces, dollar signs, backticks, and embedded
12
+ // double-quotes from being interpreted by the shell.
10
13
  text: "cd {{workflow.path}} && sapiom agents run --target local",
11
14
  },
12
15
  },
@@ -1 +1 @@
1
- {"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/core/macros.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,MAAM;QACZ,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,0DAA0D;SACjE;KACF;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,OAAO;QACb,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,8CAA8C;SACrD;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,KAAK;QACX,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,yDAAyD;SAChE;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,2DAA2D;SACjE;KACF;IACD;QACE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,sEAAsE;QACtE,qEAAqE;QACrE,yEAAyE;QACzE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;KAClC;CACF,CAAC"}
1
+ {"version":3,"file":"macros.js","sourceRoot":"","sources":["../../src/core/macros.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,MAAM;QACZ,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,+EAA+E;YAC/E,yEAAyE;YACzE,qDAAqD;YACrD,IAAI,EAAE,0DAA0D;SACjE;KACF;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,OAAO;QACb,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,8CAA8C;SACrD;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,KAAK;QACX,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,yDAAyD;SAChE;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,2DAA2D;SACjE;KACF;IACD;QACE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,sEAAsE;QACtE,qEAAqE;QACrE,yEAAyE;QACzE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;KAClC;CACF,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * server restarts, even though the ptys themselves do not.
6
6
  */
7
7
  import { type CreateSessionRequest, type HarnessAdapter, type HarnessKind, type HarnessSession, type LaunchOpts } from "../shared/types.js";
8
+ export { AdapterNotFoundError, ExternalHarnessError, SessionAlreadyLiveError, SessionNotReadyError, SessionNotResumeableError, UnknownSessionError, } from "./errors.js";
8
9
  type IPty = import("node-pty").IPty;
9
10
  type PtyForkOptions = import("node-pty").IPtyForkOptions;
10
11
  export type PtySpawnFn = (file: string, args: string[], options: PtyForkOptions) => IPty;
@@ -20,17 +21,6 @@ export type PtySpawnFn = (file: string, args: string[], options: PtyForkOptions)
20
21
  * instead of duplicating it.
21
22
  */
22
23
  export declare function ensureSpawnHelperExecutable(): Promise<void>;
23
- /**
24
- * Thrown by `submitInput()` when a session's pty is alive but never became
25
- * ready (see `HarnessSession.ready`) within `READY_GRACE_MS` — the trust-
26
- * dialog race this whole readiness mechanism exists to catch. Callers
27
- * (rest.ts, macros.ts) catch this specifically and surface it as a 409 with
28
- * a UI-visible reason, rather than letting it fall into a generic 500 or
29
- * (worse, the bug this fixes) silently writing into a non-interactive TUI.
30
- */
31
- export declare class SessionNotReadyError extends Error {
32
- constructor(id: string);
33
- }
34
24
  export type SessionStatusListener = (session: HarnessSession) => void;
35
25
  export type SessionDataListener = (chunk: string) => void;
36
26
  /** See `onActivity()`. */
@@ -146,12 +136,42 @@ export declare class SessionManager {
146
136
  lastActiveAt: string;
147
137
  }): HarnessSession;
148
138
  resume(id: string): Promise<HarnessSession>;
149
- kill(id: string): boolean;
150
- /** Kills every currently-live pty. Call this on server shutdown without
151
- * it, spawned agent processes (claude/codex) outlive the harness server
152
- * itself, e.g. after Ctrl+C, since closing the HTTP/WS server doesn't
153
- * touch unrelated child processes on its own. */
154
- killAll(): void;
139
+ /**
140
+ * Signals the session's pty to exit and returns a Promise that resolves
141
+ * once the process is **actually gone** not fire-and-forget.
142
+ *
143
+ * Resolution source (either one unblocks the promise):
144
+ * 1. node-pty's own `onExit` event → markExited() → `handle.exited` resolves.
145
+ * 2. Synthesized exit: kill()'s escalation fallback (SIGTERM → SIGKILL →
146
+ * pid liveness check) → markExited() → `handle.exited` resolves.
147
+ * 3. Synthesized exit from an external `sweepDeadSessions()` call that
148
+ * happens to run during the escalation window → same path.
149
+ *
150
+ * The promise is bounded: after `KILL_ESCALATION_MS` the escalation sends
151
+ * SIGKILL; after a further `KILL_ESCALATION_CONFIRM_MS` it synthesizes the
152
+ * exit from an OS-level pid check regardless of node-pty's event. So the
153
+ * worst-case resolution time is `KILL_ESCALATION_MS + KILL_ESCALATION_CONFIRM_MS`
154
+ * (2500 ms at current constants), never infinite.
155
+ *
156
+ * Existing fire-and-forget callers keep working: an unawaited Promise is
157
+ * fine and produces no floating-promise lint warnings when suppressed with
158
+ * `void`.
159
+ *
160
+ * Returns false (resolved immediately) when the session has no live pty.
161
+ * Returns true (resolved on actual death) when a pty was signalled.
162
+ */
163
+ kill(id: string): Promise<boolean>;
164
+ /**
165
+ * Kills every currently-live pty and returns a Promise that resolves when
166
+ * all of them have actually exited (real or synthesized). Bounded by the
167
+ * same escalation window as `kill()` — never hangs.
168
+ *
169
+ * Call this on server shutdown so the process actually exits instead of
170
+ * waiting on orphaned claude/codex children. A bounded timeout can be layered
171
+ * on top via `Promise.race` when callers need a hard deadline:
172
+ * `await Promise.race([sessionManager.killAll(), sleep(5_000)])`
173
+ */
174
+ killAll(): Promise<void>;
155
175
  /**
156
176
  * Defensive liveness backstop, run periodically by the server: any
157
177
  * non-exited session whose pty process is provably gone gets its exit
@@ -271,5 +291,4 @@ export declare class SessionManager {
271
291
  * corrupt the registry file; a failed write doesn't poison later ones. */
272
292
  private persist;
273
293
  }
274
- export {};
275
294
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}