@agents-ensemble/core 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/conductor/conductor-send-reconnect.d.ts +3 -0
  2. package/dist/conductor/conductor-send-reconnect.d.ts.map +1 -1
  3. package/dist/conductor/conductor-send-reconnect.js +7 -1
  4. package/dist/conductor/conductor-send-reconnect.js.map +1 -1
  5. package/dist/conductor/conductor-session-driver.d.ts +6 -0
  6. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  7. package/dist/conductor/conductor-session-driver.js +17 -1
  8. package/dist/conductor/conductor-session-driver.js.map +1 -1
  9. package/dist/conductor/conductor-session.d.ts +4 -0
  10. package/dist/conductor/conductor-session.d.ts.map +1 -1
  11. package/dist/conductor/conductor-session.js +329 -49
  12. package/dist/conductor/conductor-session.js.map +1 -1
  13. package/dist/conductor/session/session-logger.d.ts +1 -0
  14. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  15. package/dist/conductor/session/session-logger.js +4 -0
  16. package/dist/conductor/session/session-logger.js.map +1 -1
  17. package/dist/conductor/submit-operator-input.d.ts +4 -1
  18. package/dist/conductor/submit-operator-input.d.ts.map +1 -1
  19. package/dist/conductor/submit-operator-input.js +4 -1
  20. package/dist/conductor/submit-operator-input.js.map +1 -1
  21. package/dist/dispatch/report-session-state-tool.d.ts +3 -1
  22. package/dist/dispatch/report-session-state-tool.d.ts.map +1 -1
  23. package/dist/dispatch/report-session-state-tool.js +2 -1
  24. package/dist/dispatch/report-session-state-tool.js.map +1 -1
  25. package/dist/escalation/apply-operator-message.d.ts +2 -0
  26. package/dist/escalation/apply-operator-message.d.ts.map +1 -1
  27. package/dist/escalation/apply-operator-message.js +2 -0
  28. package/dist/escalation/apply-operator-message.js.map +1 -1
  29. package/dist/escalation/open-question.d.ts +1 -0
  30. package/dist/escalation/open-question.d.ts.map +1 -1
  31. package/dist/escalation/open-question.js +1 -1
  32. package/dist/escalation/open-question.js.map +1 -1
  33. package/dist/escalation/record-open-question-answer.d.ts +1 -0
  34. package/dist/escalation/record-open-question-answer.d.ts.map +1 -1
  35. package/dist/escalation/record-open-question-answer.js +1 -0
  36. package/dist/escalation/record-open-question-answer.js.map +1 -1
  37. package/dist/github/register-github-watch-tool.d.ts +4 -1
  38. package/dist/github/register-github-watch-tool.d.ts.map +1 -1
  39. package/dist/github/register-github-watch-tool.js +17 -1
  40. package/dist/github/register-github-watch-tool.js.map +1 -1
  41. package/dist/github/unregister-github-watch-tool.d.ts +4 -1
  42. package/dist/github/unregister-github-watch-tool.d.ts.map +1 -1
  43. package/dist/github/unregister-github-watch-tool.js +14 -3
  44. package/dist/github/unregister-github-watch-tool.js.map +1 -1
  45. package/dist/operator-runtime.d.ts +6 -2
  46. package/dist/operator-runtime.d.ts.map +1 -1
  47. package/dist/operator-runtime.js +4 -1
  48. package/dist/operator-runtime.js.map +1 -1
  49. package/dist/session/index.d.ts +5 -1
  50. package/dist/session/index.d.ts.map +1 -1
  51. package/dist/session/index.js +2 -0
  52. package/dist/session/index.js.map +1 -1
  53. package/dist/session/open-question-control.d.ts +53 -0
  54. package/dist/session/open-question-control.d.ts.map +1 -0
  55. package/dist/session/open-question-control.js +410 -0
  56. package/dist/session/open-question-control.js.map +1 -0
  57. package/dist/session/open-questions-store.d.ts.map +1 -1
  58. package/dist/session/open-questions-store.js +6 -3
  59. package/dist/session/open-questions-store.js.map +1 -1
  60. package/dist/session/session-sidecar.d.ts +5 -0
  61. package/dist/session/session-sidecar.d.ts.map +1 -1
  62. package/dist/session/session-sidecar.js +24 -3
  63. package/dist/session/session-sidecar.js.map +1 -1
  64. package/dist/session/session-state-store.d.ts +21 -0
  65. package/dist/session/session-state-store.d.ts.map +1 -0
  66. package/dist/session/session-state-store.js +131 -0
  67. package/dist/session/session-state-store.js.map +1 -0
  68. package/package.json +1 -1
@@ -4,7 +4,10 @@ export interface UnregisterGitHubWatchToolOptions {
4
4
  issueUrl: string;
5
5
  /** The mutable session cursor that is persisted by the conductor session. */
6
6
  getCursor: () => GitHubMonitorCursor;
7
- /** Called only when a PR was explicitly registered and is now removed. */
7
+ /**
8
+ * Called when an unregistration must be persisted, including after a failed
9
+ * attempt.
10
+ */
8
11
  onUnregistered?: (prNumber: number) => void | Promise<void>;
9
12
  }
10
13
  export declare function createUnregisterGitHubWatchTool(options: UnregisterGitHubWatchToolOptions): ConductorToolSet;
@@ -1 +1 @@
1
- {"version":3,"file":"unregister-github-watch-tool.d.ts","sourceRoot":"","sources":["../../src/github/unregister-github-watch-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,mBAAmB,CAAC;IACrC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,gBAAgB,CAsDlB"}
1
+ {"version":3,"file":"unregister-github-watch-tool.d.ts","sourceRoot":"","sources":["../../src/github/unregister-github-watch-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,mBAAmB,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,gBAAgB,CAmElB"}
@@ -1,6 +1,7 @@
1
1
  import { yamlToolResult } from '../dispatch/yaml-tool-result.js';
2
2
  import { parseGitHubWatchTarget, } from './register-github-watch-tool.js';
3
3
  export function createUnregisterGitHubWatchTool(options) {
4
+ const pendingPersistence = new Set();
4
5
  return {
5
6
  unregister_github_watch: {
6
7
  name: 'unregister_github_watch',
@@ -29,7 +30,8 @@ export function createUnregisterGitHubWatchTool(options) {
29
30
  const cursor = options.getCursor();
30
31
  const key = String(target.prNumber);
31
32
  const explicitPullRequests = cursor.explicitPullRequests;
32
- if (!explicitPullRequests?.[key]) {
33
+ const wasRegistered = Boolean(explicitPullRequests?.[key]);
34
+ if (!wasRegistered && !pendingPersistence.has(key)) {
33
35
  return yamlToolResult('unregister_github_watch', {
34
36
  ok: false,
35
37
  prNumber: target.prNumber,
@@ -37,8 +39,17 @@ export function createUnregisterGitHubWatchTool(options) {
37
39
  message: 'Pull request is not explicitly registered for the harness GitHub monitor',
38
40
  });
39
41
  }
40
- delete explicitPullRequests[key];
41
- await options.onUnregistered?.(target.prNumber);
42
+ if (wasRegistered) {
43
+ delete explicitPullRequests[key];
44
+ if (options.onUnregistered)
45
+ pendingPersistence.add(key);
46
+ }
47
+ if (pendingPersistence.has(key)) {
48
+ // Preserve the retry marker if persistence rejects after the cursor
49
+ // has already been updated in memory.
50
+ await options.onUnregistered?.(target.prNumber);
51
+ pendingPersistence.delete(key);
52
+ }
42
53
  return yamlToolResult('unregister_github_watch', {
43
54
  ok: true,
44
55
  prNumber: target.prNumber,
@@ -1 +1 @@
1
- {"version":3,"file":"unregister-github-watch-tool.js","sourceRoot":"","sources":["../../src/github/unregister-github-watch-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,iCAAiC,CAAC;AAWzC,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,OAAO;QACL,uBAAuB,EAAE;YACvB,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE;gBACX,4EAA4E;gBAC5E,0FAA0F;gBAC1F,uGAAuG;gBACvG,sFAAsF;aACvF,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,WAAW,EAAE,6CAA6C;qBAC3D;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oDAAoD;qBAClE;iBACF;aACF;YACD,KAAK,CAAC,OAAO,CAAC,IAAI;gBAChB,MAAM,MAAM,GAAsB,sBAAsB,CACtD,OAAO,CAAC,QAAQ,EAChB,IAAI,EACJ,yBAAyB,CAC1B,CAAC;gBACF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBACzD,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,OAAO,cAAc,CAAC,yBAAyB,EAAE;wBAC/C,EAAE,EAAE,KAAK;wBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,OAAO,EACL,0EAA0E;qBAC7E,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO,cAAc,CAAC,yBAAyB,EAAE;oBAC/C,EAAE,EAAE,IAAI;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,0CAA0C;iBACpD,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"unregister-github-watch-tool.js","sourceRoot":"","sources":["../../src/github/unregister-github-watch-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,iCAAiC,CAAC;AAczC,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE7C,OAAO;QACL,uBAAuB,EAAE;YACvB,IAAI,EAAE,yBAAyB;YAC/B,WAAW,EAAE;gBACX,4EAA4E;gBAC5E,0FAA0F;gBAC1F,uGAAuG;gBACvG,sFAAsF;aACvF,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,CAAC;wBACV,WAAW,EAAE,6CAA6C;qBAC3D;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oDAAoD;qBAClE;iBACF;aACF;YACD,KAAK,CAAC,OAAO,CAAC,IAAI;gBAChB,MAAM,MAAM,GAAsB,sBAAsB,CACtD,OAAO,CAAC,QAAQ,EAChB,IAAI,EACJ,yBAAyB,CAC1B,CAAC;gBACF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBACzD,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnD,OAAO,cAAc,CAAC,yBAAyB,EAAE;wBAC/C,EAAE,EAAE,KAAK;wBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,OAAO,EACL,0EAA0E;qBAC7E,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,oBAAqB,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,OAAO,CAAC,cAAc;wBAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1D,CAAC;gBAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,oEAAoE;oBACpE,sCAAsC;oBACtC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAChD,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC;gBAED,OAAO,cAAc,CAAC,yBAAyB,EAAE;oBAC/C,EAAE,EAAE,IAAI;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,0CAA0C;iBACpD,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -15,6 +15,10 @@ export type { ResolvedProfile, ResolvedProfileMaterial, } from './profile/types.
15
15
  export { filterMaterialsForKind, resolveAgentPromptModule, sessionStateFromProfile, } from './profile/types.js';
16
16
  export { profilePromptModule } from './prompt/modules/shared/profile-prompt-module.js';
17
17
  export { renderCompiledPrompt } from './prompt/render-compiled-prompt.js';
18
- export { listSessionSidecars } from './session/session-sidecar.js';
19
- export type { SessionSidecar } from './session/session-sidecar.js';
18
+ export { loadSessionSidecar, listSessionSidecars, type SessionLifecycle, type SessionSidecar, } from './session/session-sidecar.js';
19
+ export { OPEN_QUESTION_CONTROL_METHODS, OpenQuestionControlRemoteError, OpenQuestionControlTransportError, sendOpenQuestionControlRequest, } from './session/open-question-control.js';
20
+ export type { OpenQuestionControlAnswerResult, OpenQuestionControlErrorData, OpenQuestionControlListItem, } from './session/open-question-control.js';
21
+ export { loadSessionStateStore, sessionStateStorePath, type SessionStateStore, type SessionStatusLine, } from './session/session-state-store.js';
22
+ export { parseIssueUrl } from './issue/issue-ref.js';
23
+ export type { IssueRef } from './issue/issue-ref.js';
20
24
  //# sourceMappingURL=operator-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"operator-runtime.d.ts","sourceRoot":"","sources":["../src/operator-runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,YAAY,EACV,cAAc,EACd,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EACV,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"operator-runtime.d.ts","sourceRoot":"","sources":["../src/operator-runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AACrF,YAAY,EACV,cAAc,EACd,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EACV,eAAe,EACf,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,+BAA+B,EAC/B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
@@ -10,5 +10,8 @@ export { loadProfile } from './profile/load-profile.js';
10
10
  export { filterMaterialsForKind, resolveAgentPromptModule, sessionStateFromProfile, } from './profile/types.js';
11
11
  export { profilePromptModule } from './prompt/modules/shared/profile-prompt-module.js';
12
12
  export { renderCompiledPrompt } from './prompt/render-compiled-prompt.js';
13
- export { listSessionSidecars } from './session/session-sidecar.js';
13
+ export { loadSessionSidecar, listSessionSidecars, } from './session/session-sidecar.js';
14
+ export { OPEN_QUESTION_CONTROL_METHODS, OpenQuestionControlRemoteError, OpenQuestionControlTransportError, sendOpenQuestionControlRequest, } from './session/open-question-control.js';
15
+ export { loadSessionStateStore, sessionStateStorePath, } from './session/session-state-store.js';
16
+ export { parseIssueUrl } from './issue/issue-ref.js';
14
17
  //# sourceMappingURL=operator-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"operator-runtime.js","sourceRoot":"","sources":["../src/operator-runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAYrF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"operator-runtime.js","sourceRoot":"","sources":["../src/operator-runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAYrF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAGpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,5 +1,9 @@
1
1
  export { SESSION_SIDECAR_VERSION, assertSessionSidecarMatches, findLatestSessionSidecarForIssue, listSessionSidecars, loadSessionSidecar, requireSessionSidecarForResume, saveSessionSidecar, sessionSidecarDir, sessionSidecarPath, SessionSidecarNotFoundError, } from './session-sidecar.js';
2
- export type { FindLatestSessionSidecarInput, SessionSidecar, WorkerSessionSidecar, } from './session-sidecar.js';
2
+ export type { FindLatestSessionSidecarInput, SessionLifecycle, SessionSidecar, WorkerSessionSidecar, } from './session-sidecar.js';
3
3
  export { loadOpenQuestionsStore, OPEN_QUESTIONS_STORE_VERSION, openQuestionsStorePath, saveOpenQuestionsStore, } from './open-questions-store.js';
4
4
  export type { OpenQuestionsStoreDocument } from './open-questions-store.js';
5
+ export { OPEN_QUESTION_CONTROL_METHODS, OpenQuestionControlOperationError, OpenQuestionControlRemoteError, OpenQuestionControlTransportError, sendOpenQuestionControlRequest, startOpenQuestionControlServer, } from './open-question-control.js';
6
+ export type { OpenQuestionControlAnswerResult, OpenQuestionControlAnswer, OpenQuestionControlErrorData, OpenQuestionControlListItem, OpenQuestionControlServer, OpenQuestionControlServerOptions, } from './open-question-control.js';
7
+ export { loadSessionStateStore, saveSessionStatusLine, SESSION_STATE_STORE_MAX_BYTES, SESSION_STATE_STORE_VERSION, SESSION_STATUS_HISTORY_MAX_ENTRIES, SESSION_STATUS_LINE_MAX_LENGTH, sessionStateStorePath, } from './session-state-store.js';
8
+ export type { SessionStateStore, SessionStatePathOptions, SessionStatusLine, } from './session-state-store.js';
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,kCAAkC,EAClC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { SESSION_SIDECAR_VERSION, assertSessionSidecarMatches, findLatestSessionSidecarForIssue, listSessionSidecars, loadSessionSidecar, requireSessionSidecarForResume, saveSessionSidecar, sessionSidecarDir, sessionSidecarPath, SessionSidecarNotFoundError, } from './session-sidecar.js';
2
2
  export { loadOpenQuestionsStore, OPEN_QUESTIONS_STORE_VERSION, openQuestionsStorePath, saveOpenQuestionsStore, } from './open-questions-store.js';
3
+ export { OPEN_QUESTION_CONTROL_METHODS, OpenQuestionControlOperationError, OpenQuestionControlRemoteError, OpenQuestionControlTransportError, sendOpenQuestionControlRequest, startOpenQuestionControlServer, } from './open-question-control.js';
4
+ export { loadSessionStateStore, saveSessionStatusLine, SESSION_STATE_STORE_MAX_BYTES, SESSION_STATE_STORE_VERSION, SESSION_STATUS_HISTORY_MAX_ENTRIES, SESSION_STATUS_LINE_MAX_LENGTH, sessionStateStorePath, } from './session-state-store.js';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,mBAAmB,EACnB,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,iCAAiC,EACjC,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AASpC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,kCAAkC,EAClC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { OpenQuestion } from '../escalation/open-question.js';
2
+ export declare const OPEN_QUESTION_CONTROL_METHODS: {
3
+ readonly list: "open_questions.list";
4
+ readonly answer: "open_questions.answer";
5
+ };
6
+ export interface OpenQuestionControlAnswer {
7
+ questionId: string;
8
+ answer: string;
9
+ }
10
+ export type OpenQuestionControlListItem = Pick<OpenQuestion, 'id' | 'question' | 'responseType' | 'source' | 'askedAt'> & Partial<Pick<OpenQuestion, 'choices' | 'context' | 'relatedPermissionId'>>;
11
+ export interface OpenQuestionControlAnswerResult {
12
+ question: Pick<OpenQuestion, 'id' | 'status'> & Partial<Pick<OpenQuestion, 'answeredBy' | 'approved'>>;
13
+ }
14
+ export interface OpenQuestionControlErrorData {
15
+ outcome: 'unknown';
16
+ answerStatus: 'recorded';
17
+ dispatchStatus: 'unknown';
18
+ }
19
+ export interface OpenQuestionControlServerOptions {
20
+ listOpenQuestions: () => OpenQuestion[];
21
+ answerOpenQuestion: (input: OpenQuestionControlAnswer) => Promise<OpenQuestion>;
22
+ }
23
+ export interface OpenQuestionControlServer {
24
+ socketPath: string;
25
+ hasInFlightRequests: () => boolean;
26
+ /** Stop accepting requests and wait for accepted requests to settle. */
27
+ quiesce: () => Promise<void>;
28
+ close: () => Promise<void>;
29
+ }
30
+ export declare class OpenQuestionControlTransportError extends Error {
31
+ readonly outcome: 'not_sent' | 'unknown';
32
+ constructor(message: string, outcome: 'not_sent' | 'unknown');
33
+ }
34
+ export declare class OpenQuestionControlOperationError extends Error {
35
+ readonly rpcCode: number;
36
+ readonly data?: OpenQuestionControlErrorData | undefined;
37
+ constructor(rpcCode: number, message: string, data?: OpenQuestionControlErrorData | undefined);
38
+ }
39
+ export declare class OpenQuestionControlRemoteError extends Error {
40
+ readonly rpcCode: number;
41
+ readonly data?: OpenQuestionControlErrorData | undefined;
42
+ constructor(rpcCode: number, message: string, data?: OpenQuestionControlErrorData | undefined);
43
+ }
44
+ /**
45
+ * Start a one-request-per-connection JSON-RPC server on a private Unix socket.
46
+ * Request and response payloads are deliberately not logged.
47
+ */
48
+ export declare function startOpenQuestionControlServer(options: OpenQuestionControlServerOptions): Promise<OpenQuestionControlServer>;
49
+ export declare function sendOpenQuestionControlRequest<T>(socketPath: string, input: {
50
+ method: string;
51
+ params?: Record<string, unknown>;
52
+ }): Promise<T>;
53
+ //# sourceMappingURL=open-question-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-question-control.d.ts","sourceRoot":"","sources":["../../src/session/open-question-control.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,eAAO,MAAM,6BAA6B;;;CAGhC,CAAC;AAMX,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,YAAY,EACZ,IAAI,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAC1D,GACC,OAAO,CACL,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,qBAAqB,CAAC,CAClE,CAAC;AAEJ,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,QAAQ,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,EAAE,UAAU,CAAC;IACzB,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,gCAAgC;IAC/C,iBAAiB,EAAE,MAAM,YAAY,EAAE,CAAC;IACxC,kBAAkB,EAAE,CAClB,KAAK,EAAE,yBAAyB,KAC7B,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qBAAa,iCAAkC,SAAQ,KAAK;aAGxC,OAAO,EAAE,UAAU,GAAG,SAAS;gBAD/C,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,UAAU,GAAG,SAAS;CAKlD;AAED,qBAAa,iCAAkC,SAAQ,KAAK;aAExC,OAAO,EAAE,MAAM;aAEf,IAAI,CAAC,EAAE,4BAA4B;gBAFnC,OAAO,EAAE,MAAM,EAC/B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,4BAA4B,YAAA;CAKtD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;aAErC,OAAO,EAAE,MAAM;aAEf,IAAI,CAAC,EAAE,4BAA4B;gBAFnC,OAAO,EAAE,MAAM,EAC/B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,4BAA4B,YAAA;CAKtD;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CA+GpC;AAED,wBAAsB,8BAA8B,CAAC,CAAC,EACpD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE;IACL,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GACA,OAAO,CAAC,CAAC,CAAC,CAgIZ"}
@@ -0,0 +1,410 @@
1
+ import { chmod, mkdtemp, rm } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import net from 'node:net';
5
+ export const OPEN_QUESTION_CONTROL_METHODS = {
6
+ list: 'open_questions.list',
7
+ answer: 'open_questions.answer',
8
+ };
9
+ const JSON_RPC_VERSION = '2.0';
10
+ const MAX_MESSAGE_BYTES = 1_048_576;
11
+ const SOCKET_TIMEOUT_MS = 30_000;
12
+ export class OpenQuestionControlTransportError extends Error {
13
+ outcome;
14
+ constructor(message, outcome) {
15
+ super(message);
16
+ this.outcome = outcome;
17
+ this.name = 'OpenQuestionControlTransportError';
18
+ }
19
+ }
20
+ export class OpenQuestionControlOperationError extends Error {
21
+ rpcCode;
22
+ data;
23
+ constructor(rpcCode, message, data) {
24
+ super(message);
25
+ this.rpcCode = rpcCode;
26
+ this.data = data;
27
+ this.name = 'OpenQuestionControlOperationError';
28
+ }
29
+ }
30
+ export class OpenQuestionControlRemoteError extends Error {
31
+ rpcCode;
32
+ data;
33
+ constructor(rpcCode, message, data) {
34
+ super(message);
35
+ this.rpcCode = rpcCode;
36
+ this.data = data;
37
+ this.name = 'OpenQuestionControlRemoteError';
38
+ }
39
+ }
40
+ /**
41
+ * Start a one-request-per-connection JSON-RPC server on a private Unix socket.
42
+ * Request and response payloads are deliberately not logged.
43
+ */
44
+ export async function startOpenQuestionControlServer(options) {
45
+ const runtimeDirectory = await mkdtemp(join(tmpdir(), 'ens-oq-'));
46
+ const socketPath = join(runtimeDirectory, 's.sock');
47
+ const sockets = new Set();
48
+ const processingSockets = new Set();
49
+ const activeRequests = new Set();
50
+ let closing = false;
51
+ let quiescePromise;
52
+ let closePromise;
53
+ let server;
54
+ try {
55
+ await chmod(runtimeDirectory, 0o700);
56
+ server = net.createServer((socket) => {
57
+ if (closing) {
58
+ socket.destroy();
59
+ return;
60
+ }
61
+ sockets.add(socket);
62
+ socket.setTimeout(SOCKET_TIMEOUT_MS, () => socket.destroy());
63
+ socket.on('close', () => sockets.delete(socket));
64
+ // A client may close its write side after sending a request while it
65
+ // continues to wait for the response.
66
+ socket.on('error', () => { });
67
+ let buffer = Buffer.alloc(0);
68
+ let handled = false;
69
+ socket.on('data', (chunk) => {
70
+ if (handled)
71
+ return;
72
+ buffer = Buffer.concat([buffer, chunk]);
73
+ if (buffer.byteLength > MAX_MESSAGE_BYTES) {
74
+ handled = true;
75
+ writeResponse(socket, errorResponse(null, -32600, 'Request is too large.'));
76
+ return;
77
+ }
78
+ const newlineIndex = buffer.indexOf(0x0a);
79
+ if (newlineIndex < 0)
80
+ return;
81
+ handled = true;
82
+ socket.setTimeout(0);
83
+ const line = buffer.subarray(0, newlineIndex).toString('utf8');
84
+ const trailing = buffer.subarray(newlineIndex + 1);
85
+ if (trailing.some((byte) => !isJsonWhitespace(byte))) {
86
+ writeResponse(socket, errorResponse(null, -32600, 'Expected one request per connection.'));
87
+ return;
88
+ }
89
+ processingSockets.add(socket);
90
+ const activeRequest = handleRequest(line, options)
91
+ .catch(() => errorResponse(null, -32603, 'Open Question operation failed.'))
92
+ .then((response) => writeResponse(socket, response))
93
+ .finally(() => {
94
+ processingSockets.delete(socket);
95
+ activeRequests.delete(activeRequest);
96
+ });
97
+ activeRequests.add(activeRequest);
98
+ });
99
+ });
100
+ await listen(server, socketPath);
101
+ await chmod(socketPath, 0o600);
102
+ }
103
+ catch (error) {
104
+ if (server?.listening) {
105
+ await closeServer(server, sockets, processingSockets, activeRequests).catch(() => { });
106
+ }
107
+ await rm(runtimeDirectory, { recursive: true, force: true }).catch(() => { });
108
+ throw error;
109
+ }
110
+ const activeServer = server;
111
+ return {
112
+ socketPath,
113
+ hasInFlightRequests: () => activeRequests.size > 0,
114
+ quiesce: () => {
115
+ if (quiescePromise)
116
+ return quiescePromise;
117
+ closing = true;
118
+ quiescePromise = closeServer(activeServer, sockets, processingSockets, activeRequests);
119
+ return quiescePromise;
120
+ },
121
+ close: () => {
122
+ if (closePromise)
123
+ return closePromise;
124
+ closePromise = (async () => {
125
+ try {
126
+ await (quiescePromise ??
127
+ (quiescePromise = closeServer(activeServer, sockets, processingSockets, activeRequests)));
128
+ }
129
+ finally {
130
+ await rm(runtimeDirectory, { recursive: true, force: true });
131
+ }
132
+ })();
133
+ return closePromise;
134
+ },
135
+ };
136
+ }
137
+ export async function sendOpenQuestionControlRequest(socketPath, input) {
138
+ const requestId = 1;
139
+ const request = JSON.stringify({
140
+ jsonrpc: JSON_RPC_VERSION,
141
+ id: requestId,
142
+ method: input.method,
143
+ ...(input.params ? { params: input.params } : {}),
144
+ });
145
+ if (Buffer.byteLength(request) > MAX_MESSAGE_BYTES) {
146
+ throw new Error('Open Question control request is too large.');
147
+ }
148
+ return new Promise((resolve, reject) => {
149
+ const socket = net.createConnection(socketPath);
150
+ let settled = false;
151
+ let requestSent = false;
152
+ socket.setTimeout(SOCKET_TIMEOUT_MS, () => {
153
+ finishWithTransportError('Open Question control request timed out.');
154
+ });
155
+ let buffer = Buffer.alloc(0);
156
+ const cleanup = () => {
157
+ socket.setTimeout(0);
158
+ socket.off('connect', onConnect);
159
+ socket.off('data', onData);
160
+ socket.off('end', onEnd);
161
+ socket.off('close', onClose);
162
+ socket.off('error', onError);
163
+ };
164
+ const settle = (callback) => {
165
+ if (settled)
166
+ return;
167
+ settled = true;
168
+ cleanup();
169
+ callback();
170
+ socket.destroy();
171
+ };
172
+ const finishWithTransportError = (message) => {
173
+ settle(() => {
174
+ reject(new OpenQuestionControlTransportError(requestSent
175
+ ? `${message} The request outcome is unknown. If this was an answer, inspect the live session before taking further action.`
176
+ : message, requestSent ? 'unknown' : 'not_sent'));
177
+ });
178
+ };
179
+ const onConnect = () => {
180
+ requestSent = true;
181
+ socket.write(`${request}\n`, (error) => {
182
+ if (error) {
183
+ finishWithTransportError(`Open Question control request could not be sent: ${error.message}`);
184
+ }
185
+ });
186
+ };
187
+ const onEnd = () => {
188
+ finishWithTransportError('Open Question control connection ended before a complete response.');
189
+ };
190
+ const onClose = () => {
191
+ finishWithTransportError('Open Question control connection closed before a complete response.');
192
+ };
193
+ const onError = (error) => {
194
+ finishWithTransportError(`Open Question control connection failed: ${error.message}`);
195
+ };
196
+ const onData = (chunk) => {
197
+ buffer = Buffer.concat([buffer, chunk]);
198
+ if (buffer.byteLength > MAX_MESSAGE_BYTES) {
199
+ settle(() => {
200
+ reject(new Error('Open Question control response is too large.'));
201
+ socket.destroy();
202
+ });
203
+ return;
204
+ }
205
+ const newlineIndex = buffer.indexOf(0x0a);
206
+ if (newlineIndex < 0)
207
+ return;
208
+ const line = buffer.subarray(0, newlineIndex).toString('utf8');
209
+ try {
210
+ const response = JSON.parse(line);
211
+ if (response.jsonrpc !== JSON_RPC_VERSION ||
212
+ response.id !== requestId) {
213
+ settle(() => reject(new Error('Invalid Open Question control response.')));
214
+ return;
215
+ }
216
+ if (response.error && typeof response.error === 'object') {
217
+ const error = response.error;
218
+ settle(() => reject(new OpenQuestionControlRemoteError(typeof error.code === 'number' ? error.code : -32603, typeof error.message === 'string'
219
+ ? error.message
220
+ : 'Open Question control request failed.', parseOpenQuestionControlErrorData(error.data))));
221
+ return;
222
+ }
223
+ if (!Object.hasOwn(response, 'result')) {
224
+ settle(() => reject(new Error('Invalid Open Question control response.')));
225
+ return;
226
+ }
227
+ settle(() => resolve(response.result));
228
+ }
229
+ catch (error) {
230
+ settle(() => reject(error instanceof Error
231
+ ? error
232
+ : new Error('Invalid Open Question control response.')));
233
+ }
234
+ };
235
+ socket.on('connect', onConnect);
236
+ socket.on('data', onData);
237
+ socket.on('end', onEnd);
238
+ socket.on('close', onClose);
239
+ socket.on('error', onError);
240
+ });
241
+ }
242
+ async function handleRequest(line, options) {
243
+ let value;
244
+ try {
245
+ value = JSON.parse(line);
246
+ }
247
+ catch {
248
+ return errorResponse(null, -32700, 'Parse error.');
249
+ }
250
+ if (!isRecord(value)) {
251
+ return errorResponse(null, -32600, 'Invalid request.');
252
+ }
253
+ const requestId = value.id;
254
+ if (value.jsonrpc !== JSON_RPC_VERSION ||
255
+ !isRequestId(requestId) ||
256
+ typeof value.method !== 'string' ||
257
+ value.method.length === 0 ||
258
+ (value.params !== undefined && !isRecord(value.params))) {
259
+ return errorResponse(isRequestId(requestId) ? requestId : null, -32600, 'Invalid request.');
260
+ }
261
+ const params = (value.params ?? {});
262
+ try {
263
+ switch (value.method) {
264
+ case OPEN_QUESTION_CONTROL_METHODS.list:
265
+ return successResponse(requestId, {
266
+ questions: options.listOpenQuestions().map(toListItem),
267
+ });
268
+ case OPEN_QUESTION_CONTROL_METHODS.answer: {
269
+ const questionId = typeof params.questionId === 'string' ? params.questionId.trim() : '';
270
+ const answer = typeof params.answer === 'string' ? params.answer.trim() : '';
271
+ if (!questionId || !answer) {
272
+ return errorResponse(requestId, -32602, 'questionId and a non-empty answer are required.');
273
+ }
274
+ const question = await options.answerOpenQuestion({
275
+ questionId,
276
+ answer,
277
+ });
278
+ return successResponse(requestId, toAnswerResult(question));
279
+ }
280
+ default:
281
+ return errorResponse(requestId, -32601, 'Method not found.');
282
+ }
283
+ }
284
+ catch (error) {
285
+ if (error instanceof OpenQuestionControlOperationError) {
286
+ return errorResponse(requestId, error.rpcCode, error.message, error.data);
287
+ }
288
+ return errorResponse(requestId, -32603, 'Open Question operation failed.');
289
+ }
290
+ }
291
+ function toListItem(question) {
292
+ return {
293
+ id: question.id,
294
+ question: question.question,
295
+ responseType: question.responseType,
296
+ ...(question.choices
297
+ ? { choices: question.choices.map((choice) => ({ ...choice })) }
298
+ : {}),
299
+ ...(question.context === undefined ? {} : { context: question.context }),
300
+ askedAt: question.askedAt,
301
+ source: question.source,
302
+ ...(question.relatedPermissionId === undefined
303
+ ? {}
304
+ : { relatedPermissionId: question.relatedPermissionId }),
305
+ };
306
+ }
307
+ function toAnswerResult(question) {
308
+ return {
309
+ question: {
310
+ id: question.id,
311
+ status: question.status,
312
+ ...(question.answeredBy === undefined
313
+ ? {}
314
+ : { answeredBy: question.answeredBy }),
315
+ ...(question.approved === undefined
316
+ ? {}
317
+ : { approved: question.approved }),
318
+ },
319
+ };
320
+ }
321
+ function successResponse(id, result) {
322
+ return { jsonrpc: JSON_RPC_VERSION, id, result };
323
+ }
324
+ function errorResponse(id, code, message, data) {
325
+ return {
326
+ jsonrpc: JSON_RPC_VERSION,
327
+ id,
328
+ error: { code, message, ...(data ? { data } : {}) },
329
+ };
330
+ }
331
+ function parseOpenQuestionControlErrorData(value) {
332
+ if (!isRecord(value) ||
333
+ value.outcome !== 'unknown' ||
334
+ value.answerStatus !== 'recorded' ||
335
+ value.dispatchStatus !== 'unknown') {
336
+ return undefined;
337
+ }
338
+ return {
339
+ outcome: 'unknown',
340
+ answerStatus: 'recorded',
341
+ dispatchStatus: 'unknown',
342
+ };
343
+ }
344
+ function writeResponse(socket, response) {
345
+ if (socket.destroyed)
346
+ return Promise.resolve();
347
+ const serialized = JSON.stringify(response) ?? '';
348
+ if (Buffer.byteLength(serialized) > MAX_MESSAGE_BYTES) {
349
+ return endSocket(socket, `${JSON.stringify(errorResponse(response.id, -32603, 'Response is too large.'))}\n`);
350
+ }
351
+ return endSocket(socket, `${serialized}\n`);
352
+ }
353
+ function listen(server, socketPath) {
354
+ return new Promise((resolve, reject) => {
355
+ const onError = (error) => {
356
+ server.off('listening', onListening);
357
+ reject(error);
358
+ };
359
+ const onListening = () => {
360
+ server.off('error', onError);
361
+ resolve();
362
+ };
363
+ server.once('error', onError);
364
+ server.once('listening', onListening);
365
+ server.listen(socketPath);
366
+ });
367
+ }
368
+ function closeServer(server, sockets, processingSockets, activeRequests) {
369
+ const closed = new Promise((resolve, reject) => {
370
+ server.close((error) => (error ? reject(error) : resolve()));
371
+ });
372
+ for (const socket of sockets) {
373
+ if (!processingSockets.has(socket))
374
+ socket.destroy();
375
+ }
376
+ return Promise.all([closed, ...activeRequests]).then(() => { });
377
+ }
378
+ function endSocket(socket, data) {
379
+ return new Promise((resolve) => {
380
+ if (socket.destroyed) {
381
+ resolve();
382
+ return;
383
+ }
384
+ let settled = false;
385
+ const finish = () => {
386
+ if (settled)
387
+ return;
388
+ settled = true;
389
+ socket.off('finish', finish);
390
+ socket.off('close', finish);
391
+ socket.off('error', finish);
392
+ resolve();
393
+ };
394
+ socket.once('finish', finish);
395
+ socket.once('close', finish);
396
+ socket.once('error', finish);
397
+ socket.end(data, finish);
398
+ });
399
+ }
400
+ function isRecord(value) {
401
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
402
+ }
403
+ function isRequestId(value) {
404
+ return (typeof value === 'string' ||
405
+ (typeof value === 'number' && Number.isFinite(value)));
406
+ }
407
+ function isJsonWhitespace(byte) {
408
+ return byte === 0x20 || byte === 0x09 || byte === 0x0d || byte === 0x0a;
409
+ }
410
+ //# sourceMappingURL=open-question-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-question-control.js","sourceRoot":"","sources":["../../src/session/open-question-control.ts"],"names":[],"mappings":"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"}