@a5c-ai/tasks-adapter 5.1.1-staging.0007199a1cb2

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 (202) hide show
  1. package/README.md +125 -0
  2. package/dist/auth/forge-interface.d.ts +67 -0
  3. package/dist/auth/forge-interface.d.ts.map +1 -0
  4. package/dist/auth/forge-interface.js +69 -0
  5. package/dist/auth/github-app.d.ts +64 -0
  6. package/dist/auth/github-app.d.ts.map +1 -0
  7. package/dist/auth/github-app.js +141 -0
  8. package/dist/auth/github-oauth.d.ts +27 -0
  9. package/dist/auth/github-oauth.d.ts.map +1 -0
  10. package/dist/auth/github-oauth.js +89 -0
  11. package/dist/auth/index.d.ts +8 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +14 -0
  14. package/dist/auth/jwt.d.ts +24 -0
  15. package/dist/auth/jwt.d.ts.map +1 -0
  16. package/dist/auth/jwt.js +43 -0
  17. package/dist/auth/middleware.d.ts +22 -0
  18. package/dist/auth/middleware.d.ts.map +1 -0
  19. package/dist/auth/middleware.js +36 -0
  20. package/dist/auth/ssh-keys.d.ts +21 -0
  21. package/dist/auth/ssh-keys.d.ts.map +1 -0
  22. package/dist/auth/ssh-keys.js +59 -0
  23. package/dist/auth/types.d.ts +165 -0
  24. package/dist/auth/types.d.ts.map +1 -0
  25. package/dist/auth/types.js +53 -0
  26. package/dist/backend.d.ts +248 -0
  27. package/dist/backend.d.ts.map +1 -0
  28. package/dist/backend.js +40 -0
  29. package/dist/backends/adapters.d.ts +99 -0
  30. package/dist/backends/adapters.d.ts.map +1 -0
  31. package/dist/backends/adapters.js +308 -0
  32. package/dist/backends/external-tracker.d.ts +133 -0
  33. package/dist/backends/external-tracker.d.ts.map +1 -0
  34. package/dist/backends/external-tracker.js +731 -0
  35. package/dist/backends/git-native.d.ts +69 -0
  36. package/dist/backends/git-native.d.ts.map +1 -0
  37. package/dist/backends/git-native.js +797 -0
  38. package/dist/backends/github-issues.d.ts +78 -0
  39. package/dist/backends/github-issues.d.ts.map +1 -0
  40. package/dist/backends/github-issues.js +806 -0
  41. package/dist/backends/index.d.ts +52 -0
  42. package/dist/backends/index.d.ts.map +1 -0
  43. package/dist/backends/index.js +151 -0
  44. package/dist/backends/server.d.ts +42 -0
  45. package/dist/backends/server.d.ts.map +1 -0
  46. package/dist/backends/server.js +305 -0
  47. package/dist/cli/auth-store.d.ts +49 -0
  48. package/dist/cli/auth-store.d.ts.map +1 -0
  49. package/dist/cli/auth-store.js +150 -0
  50. package/dist/cli/client-config.d.ts +10 -0
  51. package/dist/cli/client-config.d.ts.map +1 -0
  52. package/dist/cli/client-config.js +87 -0
  53. package/dist/cli/commands/ask.d.ts +3 -0
  54. package/dist/cli/commands/ask.d.ts.map +1 -0
  55. package/dist/cli/commands/ask.js +171 -0
  56. package/dist/cli/commands/auth.d.ts +3 -0
  57. package/dist/cli/commands/auth.d.ts.map +1 -0
  58. package/dist/cli/commands/auth.js +510 -0
  59. package/dist/cli/commands/breakpoints.d.ts +3 -0
  60. package/dist/cli/commands/breakpoints.d.ts.map +1 -0
  61. package/dist/cli/commands/breakpoints.js +311 -0
  62. package/dist/cli/commands/responder-loop.d.ts +3 -0
  63. package/dist/cli/commands/responder-loop.d.ts.map +1 -0
  64. package/dist/cli/commands/responder-loop.js +78 -0
  65. package/dist/cli/commands/responders.d.ts +3 -0
  66. package/dist/cli/commands/responders.d.ts.map +1 -0
  67. package/dist/cli/commands/responders.js +157 -0
  68. package/dist/cli/commands/rules.d.ts +3 -0
  69. package/dist/cli/commands/rules.d.ts.map +1 -0
  70. package/dist/cli/commands/rules.js +105 -0
  71. package/dist/cli/commands/server.d.ts +3 -0
  72. package/dist/cli/commands/server.d.ts.map +1 -0
  73. package/dist/cli/commands/server.js +34 -0
  74. package/dist/cli/commands/tasks.d.ts +3 -0
  75. package/dist/cli/commands/tasks.d.ts.map +1 -0
  76. package/dist/cli/commands/tasks.js +281 -0
  77. package/dist/cli/commands/templates.d.ts +3 -0
  78. package/dist/cli/commands/templates.d.ts.map +1 -0
  79. package/dist/cli/commands/templates.js +100 -0
  80. package/dist/cli/index.d.ts +4 -0
  81. package/dist/cli/index.d.ts.map +1 -0
  82. package/dist/cli/index.js +9 -0
  83. package/dist/cli/output.d.ts +26 -0
  84. package/dist/cli/output.d.ts.map +1 -0
  85. package/dist/cli/output.js +143 -0
  86. package/dist/cli/program.d.ts +6 -0
  87. package/dist/cli/program.d.ts.map +1 -0
  88. package/dist/cli/program.js +38 -0
  89. package/dist/cli/tasks-adapter.d.ts +3 -0
  90. package/dist/cli/tasks-adapter.d.ts.map +1 -0
  91. package/dist/cli/tasks-adapter.js +4 -0
  92. package/dist/client/answer-poller.d.ts +52 -0
  93. package/dist/client/answer-poller.d.ts.map +1 -0
  94. package/dist/client/answer-poller.js +200 -0
  95. package/dist/client/auth-client.d.ts +200 -0
  96. package/dist/client/auth-client.d.ts.map +1 -0
  97. package/dist/client/auth-client.js +309 -0
  98. package/dist/client/breakpoint-router.d.ts +45 -0
  99. package/dist/client/breakpoint-router.d.ts.map +1 -0
  100. package/dist/client/breakpoint-router.js +45 -0
  101. package/dist/client/index.d.ts +17 -0
  102. package/dist/client/index.d.ts.map +1 -0
  103. package/dist/client/index.js +16 -0
  104. package/dist/client/profile-validator.d.ts +34 -0
  105. package/dist/client/profile-validator.d.ts.map +1 -0
  106. package/dist/client/profile-validator.js +89 -0
  107. package/dist/client/responder-client.d.ts +39 -0
  108. package/dist/client/responder-client.d.ts.map +1 -0
  109. package/dist/client/responder-client.js +72 -0
  110. package/dist/client/responder-matcher.d.ts +49 -0
  111. package/dist/client/responder-matcher.d.ts.map +1 -0
  112. package/dist/client/responder-matcher.js +226 -0
  113. package/dist/client/server-client.d.ts +124 -0
  114. package/dist/client/server-client.d.ts.map +1 -0
  115. package/dist/client/server-client.js +266 -0
  116. package/dist/client/timeout-manager.d.ts +47 -0
  117. package/dist/client/timeout-manager.d.ts.map +1 -0
  118. package/dist/client/timeout-manager.js +77 -0
  119. package/dist/config.d.ts +20 -0
  120. package/dist/config.d.ts.map +1 -0
  121. package/dist/config.js +93 -0
  122. package/dist/harness/index.d.ts +4 -0
  123. package/dist/harness/index.d.ts.map +1 -0
  124. package/dist/harness/index.js +2 -0
  125. package/dist/harness/interaction-provider.d.ts +71 -0
  126. package/dist/harness/interaction-provider.d.ts.map +1 -0
  127. package/dist/harness/interaction-provider.js +124 -0
  128. package/dist/harness/routing-rules.d.ts +7 -0
  129. package/dist/harness/routing-rules.d.ts.map +1 -0
  130. package/dist/harness/routing-rules.js +37 -0
  131. package/dist/index.d.ts +29 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +33 -0
  134. package/dist/mcp/backend-resolver.d.ts +43 -0
  135. package/dist/mcp/backend-resolver.d.ts.map +1 -0
  136. package/dist/mcp/backend-resolver.js +111 -0
  137. package/dist/mcp/http-transport.d.ts +37 -0
  138. package/dist/mcp/http-transport.d.ts.map +1 -0
  139. package/dist/mcp/http-transport.js +103 -0
  140. package/dist/mcp/index.d.ts +16 -0
  141. package/dist/mcp/index.d.ts.map +1 -0
  142. package/dist/mcp/index.js +12 -0
  143. package/dist/mcp/server.d.ts +20 -0
  144. package/dist/mcp/server.d.ts.map +1 -0
  145. package/dist/mcp/server.js +259 -0
  146. package/dist/mcp/tools/answer-breakpoint.d.ts +32 -0
  147. package/dist/mcp/tools/answer-breakpoint.d.ts.map +1 -0
  148. package/dist/mcp/tools/answer-breakpoint.js +45 -0
  149. package/dist/mcp/tools/ask-breakpoint.d.ts +58 -0
  150. package/dist/mcp/tools/ask-breakpoint.d.ts.map +1 -0
  151. package/dist/mcp/tools/ask-breakpoint.js +78 -0
  152. package/dist/mcp/tools/check-status.d.ts +16 -0
  153. package/dist/mcp/tools/check-status.d.ts.map +1 -0
  154. package/dist/mcp/tools/check-status.js +18 -0
  155. package/dist/mcp/tools/claim-breakpoint.d.ts +18 -0
  156. package/dist/mcp/tools/claim-breakpoint.d.ts.map +1 -0
  157. package/dist/mcp/tools/claim-breakpoint.js +28 -0
  158. package/dist/mcp/tools/list-breakpoints.d.ts +16 -0
  159. package/dist/mcp/tools/list-breakpoints.d.ts.map +1 -0
  160. package/dist/mcp/tools/list-breakpoints.js +14 -0
  161. package/dist/mcp/tools/list-responders.d.ts +18 -0
  162. package/dist/mcp/tools/list-responders.d.ts.map +1 -0
  163. package/dist/mcp/tools/list-responders.js +37 -0
  164. package/dist/mcp/tools/native-tasks.d.ts +270 -0
  165. package/dist/mcp/tools/native-tasks.d.ts.map +1 -0
  166. package/dist/mcp/tools/native-tasks.js +481 -0
  167. package/dist/mcp/tools/poll-breakpoints.d.ts +18 -0
  168. package/dist/mcp/tools/poll-breakpoints.d.ts.map +1 -0
  169. package/dist/mcp/tools/poll-breakpoints.js +36 -0
  170. package/dist/mcp/tools/verify-answer.d.ts +16 -0
  171. package/dist/mcp/tools/verify-answer.d.ts.map +1 -0
  172. package/dist/mcp/tools/verify-answer.js +38 -0
  173. package/dist/proven/index.d.ts +5 -0
  174. package/dist/proven/index.d.ts.map +1 -0
  175. package/dist/proven/index.js +3 -0
  176. package/dist/proven/keys.d.ts +33 -0
  177. package/dist/proven/keys.d.ts.map +1 -0
  178. package/dist/proven/keys.js +117 -0
  179. package/dist/proven/sign.d.ts +16 -0
  180. package/dist/proven/sign.d.ts.map +1 -0
  181. package/dist/proven/sign.js +60 -0
  182. package/dist/proven/types.d.ts +26 -0
  183. package/dist/proven/types.d.ts.map +1 -0
  184. package/dist/proven/types.js +5 -0
  185. package/dist/proven/verify.d.ts +6 -0
  186. package/dist/proven/verify.d.ts.map +1 -0
  187. package/dist/proven/verify.js +58 -0
  188. package/dist/responders/types.d.ts +38 -0
  189. package/dist/responders/types.d.ts.map +1 -0
  190. package/dist/responders/types.js +1 -0
  191. package/dist/router.d.ts +51 -0
  192. package/dist/router.d.ts.map +1 -0
  193. package/dist/router.js +200 -0
  194. package/dist/types.d.ts +7711 -0
  195. package/dist/types.d.ts.map +1 -0
  196. package/dist/types.js +479 -0
  197. package/package.json +96 -0
  198. package/responder/README.md +42 -0
  199. package/responder/backend-responder.json +9 -0
  200. package/responder/devops-responder.json +9 -0
  201. package/responder/frontend-responder.json +9 -0
  202. package/responder/schema.json +89 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=tasks-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-adapter.d.ts","sourceRoot":"","sources":["../../src/cli/tasks-adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ process.stderr.write('[adapters] "tasks-adapter" is deprecated, use "adapters-tasks" instead.\n');
3
+ await import('./index.js');
4
+ export {};
@@ -0,0 +1,52 @@
1
+ import type { BreakpointWaitResult } from "../types.js";
2
+ import type { BreakpointBackend } from "../backend.js";
3
+ import { ServerClient } from "./server-client.js";
4
+ /**
5
+ * Options for waiting for an answer via the client-side poller.
6
+ */
7
+ export interface PollerWaitForAnswerOptions {
8
+ /** Maximum time to wait in milliseconds. Defaults to DEFAULT_TIMEOUT_MS (30 min). */
9
+ timeoutMs?: number;
10
+ /** Polling interval in milliseconds when using HTTP polling. Defaults to DEFAULT_POLL_INTERVAL_MS (3s). */
11
+ pollIntervalMs?: number;
12
+ /** Whether to use SSE for real-time updates. Falls back to polling if false or on error. */
13
+ useSSE?: boolean;
14
+ /** AbortSignal for external cancellation. */
15
+ signal?: AbortSignal;
16
+ }
17
+ /**
18
+ * Waits for answers to breakpoints using either SSE streaming or HTTP polling.
19
+ *
20
+ * Accepts either a ServerClient (legacy) or a BreakpointBackend.
21
+ * When a BreakpointBackend is passed, delegates to its waitForAnswer method.
22
+ * When a ServerClient is passed, uses the existing SSE/polling logic.
23
+ */
24
+ export declare class AnswerPoller {
25
+ private readonly client;
26
+ private readonly backend;
27
+ constructor(clientOrBackend: ServerClient | BreakpointBackend);
28
+ /**
29
+ * Wait for an answer to a breakpoint.
30
+ *
31
+ * Resolves when:
32
+ * - An answer is received (status becomes "answered" or "completed")
33
+ * - The breakpoint expires or is cancelled
34
+ * - The timeout is reached
35
+ * - The operation is aborted via AbortSignal
36
+ */
37
+ waitForAnswer(breakpointId: string, options?: PollerWaitForAnswerOptions): Promise<BreakpointWaitResult>;
38
+ /**
39
+ * Wait for an answer using SSE streaming.
40
+ */
41
+ private waitViaSSE;
42
+ /**
43
+ * Wait for an answer using HTTP polling.
44
+ */
45
+ private waitViaPolling;
46
+ /**
47
+ * Fetch the current breakpoint state and build a BreakpointWaitResult.
48
+ */
49
+ private buildResult;
50
+ private breakpointToResult;
51
+ }
52
+ //# sourceMappingURL=answer-poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-poller.d.ts","sourceRoot":"","sources":["../../src/client/answer-poller.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2GAA2G;IAC3G,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAEvC,eAAe,EAAE,YAAY,GAAG,iBAAiB;IAU7D;;;;;;;;OAQG;IACG,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,oBAAoB,CAAC;IAmDhC;;OAEG;IACH,OAAO,CAAC,UAAU;IAkElB;;OAEG;YACW,cAAc;IA+B5B;;OAEG;YACW,WAAW;IA8BzB,OAAO,CAAC,kBAAkB;CAe3B"}
@@ -0,0 +1,200 @@
1
+ import { BreakpointSchema, DEFAULT_TIMEOUT_MS, DEFAULT_POLL_INTERVAL_MS, } from "../types.js";
2
+ import { ServerClient } from "./server-client.js";
3
+ /**
4
+ * Waits for answers to breakpoints using either SSE streaming or HTTP polling.
5
+ *
6
+ * Accepts either a ServerClient (legacy) or a BreakpointBackend.
7
+ * When a BreakpointBackend is passed, delegates to its waitForAnswer method.
8
+ * When a ServerClient is passed, uses the existing SSE/polling logic.
9
+ */
10
+ export class AnswerPoller {
11
+ client;
12
+ backend;
13
+ constructor(clientOrBackend) {
14
+ if (clientOrBackend instanceof ServerClient) {
15
+ this.client = clientOrBackend;
16
+ this.backend = null;
17
+ }
18
+ else {
19
+ this.client = null;
20
+ this.backend = clientOrBackend;
21
+ }
22
+ }
23
+ /**
24
+ * Wait for an answer to a breakpoint.
25
+ *
26
+ * Resolves when:
27
+ * - An answer is received (status becomes "answered" or "completed")
28
+ * - The breakpoint expires or is cancelled
29
+ * - The timeout is reached
30
+ * - The operation is aborted via AbortSignal
31
+ */
32
+ async waitForAnswer(breakpointId, options = {}) {
33
+ // When using a BreakpointBackend, delegate entirely to its waitForAnswer
34
+ if (this.backend) {
35
+ return this.backend.waitForAnswer(breakpointId, {
36
+ timeoutMs: options.timeoutMs,
37
+ pollIntervalMs: options.pollIntervalMs,
38
+ preferStreaming: options.useSSE,
39
+ signal: options.signal,
40
+ });
41
+ }
42
+ const { timeoutMs = DEFAULT_TIMEOUT_MS, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS, useSSE = true, signal, } = options;
43
+ const startTime = Date.now();
44
+ // Set up abort handling
45
+ const controller = new AbortController();
46
+ if (signal) {
47
+ if (signal.aborted) {
48
+ return this.buildResult(breakpointId, startTime);
49
+ }
50
+ signal.addEventListener("abort", () => controller.abort(), { once: true });
51
+ }
52
+ // Set up timeout
53
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
54
+ try {
55
+ if (useSSE) {
56
+ try {
57
+ return await this.waitViaSSE(breakpointId, startTime, controller.signal);
58
+ }
59
+ catch {
60
+ // If SSE fails and we're not aborted, fall back to polling
61
+ if (controller.signal.aborted) {
62
+ return this.buildResult(breakpointId, startTime);
63
+ }
64
+ // Fallback to polling
65
+ }
66
+ }
67
+ return await this.waitViaPolling(breakpointId, pollIntervalMs, startTime, controller.signal);
68
+ }
69
+ finally {
70
+ clearTimeout(timeoutId);
71
+ }
72
+ }
73
+ /**
74
+ * Wait for an answer using SSE streaming.
75
+ */
76
+ waitViaSSE(breakpointId, startTime, signal) {
77
+ return new Promise((resolve, reject) => {
78
+ if (signal.aborted) {
79
+ void this.buildResult(breakpointId, startTime).then(resolve, reject);
80
+ return;
81
+ }
82
+ const stream = this.client.getBreakpointStream(breakpointId, signal);
83
+ const cleanup = () => {
84
+ stream.close();
85
+ };
86
+ signal.addEventListener("abort", () => {
87
+ cleanup();
88
+ void this.buildResult(breakpointId, startTime).then(resolve, reject);
89
+ }, { once: true });
90
+ stream.on("answer", (data) => {
91
+ cleanup();
92
+ try {
93
+ const breakpoint = JSON.parse(data);
94
+ const elapsed = Date.now() - startTime;
95
+ const answer = breakpoint.answers[breakpoint.answers.length - 1];
96
+ resolve({
97
+ answered: true,
98
+ breakpoint,
99
+ answer,
100
+ allAnswers: breakpoint.answers,
101
+ resolution: "answered",
102
+ elapsedMs: elapsed,
103
+ });
104
+ }
105
+ catch {
106
+ // If we can't parse the SSE data, fetch from server
107
+ void this.buildResult(breakpointId, startTime).then(resolve, reject);
108
+ }
109
+ });
110
+ stream.on("status", (data) => {
111
+ try {
112
+ const payload = JSON.parse(data);
113
+ if (payload.status === "expired" || payload.status === "cancelled") {
114
+ cleanup();
115
+ void this.buildResult(breakpointId, startTime).then(resolve, reject);
116
+ }
117
+ }
118
+ catch {
119
+ // Ignore parse errors for status events
120
+ }
121
+ });
122
+ stream.on("completed", () => {
123
+ cleanup();
124
+ void this.buildResult(breakpointId, startTime).then(resolve, reject);
125
+ });
126
+ stream.onError((err) => {
127
+ cleanup();
128
+ reject(err);
129
+ });
130
+ });
131
+ }
132
+ /**
133
+ * Wait for an answer using HTTP polling.
134
+ */
135
+ async waitViaPolling(breakpointId, pollIntervalMs, startTime, signal) {
136
+ while (!signal.aborted) {
137
+ const breakpoint = await this.client.getBreakpoint(breakpointId);
138
+ if (isTerminalStatus(breakpoint.status)) {
139
+ return this.breakpointToResult(breakpoint, startTime);
140
+ }
141
+ // Wait for the next poll interval or until aborted
142
+ await new Promise((resolve) => {
143
+ const timer = setTimeout(resolve, pollIntervalMs);
144
+ signal.addEventListener("abort", () => {
145
+ clearTimeout(timer);
146
+ resolve();
147
+ }, { once: true });
148
+ });
149
+ }
150
+ // Aborted - fetch final state
151
+ return this.buildResult(breakpointId, startTime);
152
+ }
153
+ /**
154
+ * Fetch the current breakpoint state and build a BreakpointWaitResult.
155
+ */
156
+ async buildResult(breakpointId, startTime) {
157
+ try {
158
+ const breakpoint = await this.client.getBreakpoint(breakpointId);
159
+ return this.breakpointToResult(breakpoint, startTime);
160
+ }
161
+ catch (e) {
162
+ process.stderr.write(`[tasks-adapter] breakpoint final state fetch failed: ${e instanceof Error ? e.message : String(e)}, returning expired\n`);
163
+ // If we can't even fetch the breakpoint, return a minimal result
164
+ return {
165
+ answered: false,
166
+ breakpoint: BreakpointSchema.parse({
167
+ id: breakpointId,
168
+ text: "",
169
+ context: { description: "", codeSnippets: [], fileReferences: [], tags: [] },
170
+ status: "expired",
171
+ routing: { strategy: "single", targetResponders: [], timeoutMs: 0, presentToUser: false },
172
+ answers: [],
173
+ createdAt: new Date().toISOString(),
174
+ updatedAt: new Date().toISOString(),
175
+ expiresAt: new Date().toISOString(),
176
+ }),
177
+ allAnswers: [],
178
+ resolution: "error",
179
+ elapsedMs: Date.now() - startTime,
180
+ };
181
+ }
182
+ }
183
+ breakpointToResult(breakpoint, startTime) {
184
+ const answered = breakpoint.status === "answered" || breakpoint.status === "completed";
185
+ const answer = answered
186
+ ? breakpoint.answers[breakpoint.answers.length - 1]
187
+ : undefined;
188
+ return {
189
+ answered,
190
+ breakpoint,
191
+ answer,
192
+ allAnswers: breakpoint.answers,
193
+ resolution: breakpoint.status,
194
+ elapsedMs: Date.now() - startTime,
195
+ };
196
+ }
197
+ }
198
+ function isTerminalStatus(status) {
199
+ return ["answered", "completed", "expired", "cancelled"].includes(status);
200
+ }
@@ -0,0 +1,200 @@
1
+ import type { Breakpoint, BreakpointAnswer, BreakpointBrowserSession, BreakpointSessionView, Project, ProjectSummary, GitHubRepo, KnownUser, Team } from "../types.js";
2
+ import type { User, AuthToken, SSHKeyPair } from "../auth/types.js";
3
+ /**
4
+ * Information about an SSH key stored on the server.
5
+ */
6
+ export interface SSHKeyInfo {
7
+ id: string;
8
+ fingerprint: string;
9
+ algorithm: string;
10
+ createdAt: string;
11
+ label?: string;
12
+ }
13
+ /**
14
+ * Options for constructing an AuthClient.
15
+ */
16
+ export interface AuthClientOptions {
17
+ /** Base URL of the BMUX server (defaults to https://tasks-adapter.a5c.ai/api/v1). */
18
+ serverUrl?: string;
19
+ /** Static access token. */
20
+ token?: string;
21
+ /** Async function that provides a fresh access token on each call. */
22
+ tokenProvider?: () => Promise<string>;
23
+ /** Refresh token used to automatically renew expired access tokens. */
24
+ refreshToken?: string;
25
+ /** Callback invoked when tokens are refreshed (e.g. to persist them). */
26
+ onTokenRefresh?: (tokens: {
27
+ accessToken: string;
28
+ refreshToken: string;
29
+ }) => void;
30
+ }
31
+ /**
32
+ * Authenticated client that wraps ServerClient, automatically injecting
33
+ * Authorization headers and handling token refresh on 401 responses.
34
+ */
35
+ export declare class AuthClient {
36
+ private serverClient;
37
+ private token;
38
+ private refreshTokenValue;
39
+ private tokenProvider;
40
+ private onTokenRefresh;
41
+ constructor(options: AuthClientOptions);
42
+ /**
43
+ * Returns true if a token or token provider is available.
44
+ */
45
+ isAuthenticated(): boolean;
46
+ /**
47
+ * Fetch the authenticated user's profile.
48
+ */
49
+ getUser(): Promise<User>;
50
+ /**
51
+ * Exchange an OAuth authorization code for auth tokens.
52
+ */
53
+ login(code: string, codeVerifier?: string): Promise<AuthToken>;
54
+ /**
55
+ * Log out, clearing local token state.
56
+ */
57
+ logout(): Promise<void>;
58
+ /**
59
+ * List breakpoints with optional filters, authenticated.
60
+ */
61
+ listBreakpoints(filters?: Record<string, string>): Promise<Breakpoint[]>;
62
+ /**
63
+ * Get a single breakpoint by ID, authenticated.
64
+ */
65
+ getBreakpoint(id: string): Promise<Breakpoint>;
66
+ /**
67
+ * Submit a new breakpoint, authenticated.
68
+ */
69
+ submitBreakpoint(text: string, context: Breakpoint["context"], routing: Breakpoint["routing"], options: {
70
+ projectId: string;
71
+ repoId: string;
72
+ }): Promise<Breakpoint>;
73
+ /**
74
+ * Submit an answer to a breakpoint, authenticated.
75
+ */
76
+ submitAnswer(breakpointId: string, answer: {
77
+ responderId: string;
78
+ responderName: string;
79
+ text: string;
80
+ confidence?: number;
81
+ references?: string[];
82
+ followUpQuestions?: string[];
83
+ }): Promise<BreakpointAnswer>;
84
+ createBrowserSession(breakpointId: string, options?: {
85
+ mode?: "same-user" | "responder";
86
+ responderId?: string;
87
+ responderName?: string;
88
+ }): Promise<BreakpointBrowserSession>;
89
+ getBreakpointSession(authToken: string): Promise<BreakpointSessionView>;
90
+ submitSessionAnswer(authToken: string, answer: {
91
+ text: string;
92
+ confidence?: number;
93
+ references?: string[];
94
+ followUpQuestions?: string[];
95
+ }): Promise<BreakpointAnswer>;
96
+ /**
97
+ * Generate a new SSH key pair on the server.
98
+ */
99
+ generateKey(): Promise<SSHKeyPair>;
100
+ /**
101
+ * List SSH keys associated with the authenticated user.
102
+ */
103
+ listKeys(): Promise<SSHKeyInfo[]>;
104
+ /**
105
+ * Push an SSH public key to a repository via pull request.
106
+ */
107
+ pushKey(keyId: string, owner: string, repo: string): Promise<{
108
+ prUrl: string;
109
+ }>;
110
+ /**
111
+ * List all projects the authenticated user has access to.
112
+ */
113
+ listProjects(): Promise<ProjectSummary[]>;
114
+ listTeams(): Promise<Team[]>;
115
+ getTeam(id: string): Promise<Team>;
116
+ createTeam(name: string, description: string): Promise<Team>;
117
+ listTeamProjects(teamId: string): Promise<Project[]>;
118
+ inviteTeamMember(teamId: string, login: string): Promise<Team>;
119
+ acceptTeamInvitation(token: string): Promise<Team>;
120
+ /**
121
+ * Find known users for project membership and sharing flows.
122
+ */
123
+ searchUsers(query?: string, limit?: number): Promise<KnownUser[]>;
124
+ /**
125
+ * Get a single project by ID.
126
+ */
127
+ getProject(id: string): Promise<Project>;
128
+ /**
129
+ * Create a new project.
130
+ */
131
+ createProject(name: string, description: string, options?: {
132
+ teamId?: string;
133
+ }): Promise<Project>;
134
+ /**
135
+ * Update an existing project.
136
+ */
137
+ updateProject(id: string, updates: {
138
+ name?: string;
139
+ description?: string;
140
+ teamId?: string;
141
+ }): Promise<Project>;
142
+ /**
143
+ * Delete a project by ID.
144
+ */
145
+ deleteProject(id: string): Promise<void>;
146
+ /**
147
+ * Add a GitHub repository to a project.
148
+ */
149
+ addRepoToProject(projectId: string, repo: {
150
+ owner: string;
151
+ name: string;
152
+ fullName?: string;
153
+ description?: string;
154
+ url?: string;
155
+ defaultBranch?: string;
156
+ language?: string | null;
157
+ isPrivate?: boolean;
158
+ repoRoot?: string;
159
+ configRoot?: string;
160
+ responderDir?: string;
161
+ isConfigSource?: boolean;
162
+ }): Promise<Project>;
163
+ /**
164
+ * Remove a repository from a project.
165
+ */
166
+ removeRepoFromProject(projectId: string, repoId: string): Promise<Project>;
167
+ /**
168
+ * List breakpoints associated with a project.
169
+ */
170
+ listProjectBreakpoints(projectId: string): Promise<Breakpoint[]>;
171
+ /**
172
+ * List GitHub repositories available to the authenticated user.
173
+ */
174
+ listGitHubRepos(): Promise<GitHubRepo[]>;
175
+ /**
176
+ * Build the Authorization header from the current token or provider.
177
+ */
178
+ private getAuthHeaders;
179
+ /**
180
+ * Attempt to refresh the access token using the stored refresh token.
181
+ */
182
+ private refreshAccessToken;
183
+ /**
184
+ * Perform an authenticated GET request with automatic 401 retry.
185
+ */
186
+ private authenticatedGet;
187
+ /**
188
+ * Perform an authenticated POST request with automatic 401 retry.
189
+ */
190
+ private authenticatedPost;
191
+ /**
192
+ * Perform an authenticated PUT request with automatic 401 retry.
193
+ */
194
+ private authenticatedPut;
195
+ /**
196
+ * Perform an authenticated DELETE request with automatic 401 retry.
197
+ */
198
+ private authenticatedDelete;
199
+ }
200
+ //# sourceMappingURL=auth-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-client.d.ts","sourceRoot":"","sources":["../../src/client/auth-client.ts"],"names":[],"mappings":"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"}