@sentry/junior 0.202.0 → 0.204.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 (174) hide show
  1. package/dist/agent-CMyTD4DD.js +17509 -0
  2. package/dist/agent-hooks-Bbcp9e33.js +4040 -0
  3. package/dist/agent-runner-DNb1A49M.js +678 -0
  4. package/dist/api/schema.d.ts +2728 -2639
  5. package/dist/api/schema.js +4 -169
  6. package/dist/api.d.ts +23 -17
  7. package/dist/api.js +3881 -5326
  8. package/dist/app-B1TOqBI8.d.ts +246 -0
  9. package/dist/app.d.ts +4 -520
  10. package/dist/app.js +9522 -11875
  11. package/dist/auth-pause-state-DosEalIG.js +168 -0
  12. package/dist/catalog-runtime-BReos-D4.js +7 -0
  13. package/dist/checkpoint-CNrPyRJN.js +2450 -0
  14. package/dist/cli/chat.d.ts +20 -0
  15. package/dist/cli/chat.js +229 -336
  16. package/dist/cli/check.d.ts +8 -0
  17. package/dist/cli/check.js +513 -806
  18. package/dist/cli/env.d.ts +13 -0
  19. package/dist/cli/env.js +63 -12
  20. package/dist/cli/init.d.ts +3 -0
  21. package/dist/cli/init.js +90 -159
  22. package/dist/cli/main.d.ts +6 -0
  23. package/dist/cli/main.js +43 -64
  24. package/dist/cli/plugins.d.ts +13 -0
  25. package/dist/cli/plugins.js +148 -227
  26. package/dist/cli/run.d.ts +16 -0
  27. package/dist/cli/run.js +52 -8
  28. package/dist/cli/snapshot-create.d.ts +4 -0
  29. package/dist/cli/snapshot-create.js +71 -125
  30. package/dist/cli/upgrade.d.ts +15 -0
  31. package/dist/cli/upgrade.js +232 -335
  32. package/dist/config-nGCW1OTG.js +941 -0
  33. package/dist/context-B45_WqVX.js +298 -0
  34. package/dist/conversation-privacy-B4voFRSm.js +182 -0
  35. package/dist/conversation-work-C6y3T5Hx.js +51 -0
  36. package/dist/credential-sync-kXr1hvO1.js +2660 -0
  37. package/dist/db-BeyXKJOI.d.ts +5 -0
  38. package/dist/destinations-BeBiJeEM.js +29 -0
  39. package/dist/execution-stats-DWfSihcH.js +373 -0
  40. package/dist/executor-DcMSlI5c.js +721 -0
  41. package/dist/experimental-CIXf7Uye.js +46 -0
  42. package/dist/history-ClE4toxe.d.ts +32 -0
  43. package/dist/history-CqTuSAdI.js +441 -0
  44. package/dist/instrumentation.d.ts +3 -3
  45. package/dist/instrumentation.js +130 -176
  46. package/dist/job-queue-Drn_LXlM.js +63 -0
  47. package/dist/logging-BzAk1S_s.js +1210 -0
  48. package/dist/model-profile-CZmVoGdX.js +49 -0
  49. package/dist/nitro.d.ts +31 -36
  50. package/dist/nitro.js +275 -456
  51. package/dist/oauth-callback-server-JiftokvA.js +130 -0
  52. package/dist/oauth-relay-CdCnu80W.js +62 -0
  53. package/dist/package-discovery-7a9YqLhE.js +455 -0
  54. package/dist/pending-auth-CWmSdZVg.js +185 -0
  55. package/dist/plugin-module-BKGOXca2.js +81 -0
  56. package/dist/plugins-BI9A1vKA.d.ts +95 -0
  57. package/dist/plugins-egKWjgue.js +99 -0
  58. package/dist/private-trace-result-BLvBjy_e.js +16 -0
  59. package/dist/profile-CrT5nXbw.js +861 -0
  60. package/dist/registry-DH1xUo2N.js +1419 -0
  61. package/dist/reporting-schema-DosTN__Q.js +105 -0
  62. package/dist/resolve-CZHnfxaS.js +546 -0
  63. package/dist/rolldown-runtime-B4FMCO8f.js +28 -0
  64. package/dist/runner-CZV2sC46.js +392 -0
  65. package/dist/sandbox-egress-signals-bHZfmhbd.js +46 -0
  66. package/dist/schema-Rn8-XEaN.js +1140 -0
  67. package/dist/sentry-CD3SdJl-.js +26 -0
  68. package/dist/skills-CIcDQSgM.js +316 -0
  69. package/dist/spawn-DdkUFRmq.js +29 -0
  70. package/dist/stats-DTUbAb88.js +2634 -0
  71. package/dist/store-C5qxF2ac.d.ts +208 -0
  72. package/dist/task-queue-CJIR4RF7.js +136 -0
  73. package/dist/task-runner-D-O3A-Cp.js +639 -0
  74. package/dist/thread-state-CRc9jTJS.js +431 -0
  75. package/dist/turn-execution-BkinIdJF.js +47 -0
  76. package/dist/turn-lifecycle-DQV19VTW.js +54 -0
  77. package/dist/usage-D3EbSO7w.js +296 -0
  78. package/dist/usage-schema-CKaDkH_j.js +20 -0
  79. package/dist/validation-C2CR-OX3.js +40 -0
  80. package/dist/vercel-queue-DIkVcfK4.js +167 -0
  81. package/dist/vercel.d.ts +6 -6
  82. package/dist/vercel.js +14 -6
  83. package/dist/version-CnXZ614E.d.ts +5 -0
  84. package/dist/version-DxcWdoKa.js +8 -0
  85. package/dist/version.d.ts +2 -4
  86. package/dist/version.js +2 -6
  87. package/dist/web-authorization-RMBxAR_t.js +76 -0
  88. package/dist/web-input-3EPfpf55.js +494 -0
  89. package/dist/work-fGofI7Op.js +509 -0
  90. package/dist/worker-CsOLq-mR.js +625 -0
  91. package/package.json +9 -9
  92. package/dist/agent-hooks-UXITLYOK.js +0 -51
  93. package/dist/catalog-runtime-BG3JLLK2.js +0 -14
  94. package/dist/chunk-2LYHWMR4.js +0 -46
  95. package/dist/chunk-2MK3QBGA.js +0 -321
  96. package/dist/chunk-3PGQSKJV.js +0 -692
  97. package/dist/chunk-3UI3WFTX.js +0 -519
  98. package/dist/chunk-3Y47VMHV.js +0 -6
  99. package/dist/chunk-4UO6FK4G.js +0 -64
  100. package/dist/chunk-5NOPO64K.js +0 -198
  101. package/dist/chunk-5PKWYPFT.js +0 -2943
  102. package/dist/chunk-63NKKFJL.js +0 -1228
  103. package/dist/chunk-6AYH6252.js +0 -787
  104. package/dist/chunk-6Y5B5PEX.js +0 -80
  105. package/dist/chunk-7DHZP5KJ.js +0 -333
  106. package/dist/chunk-7H2VZTWN.js +0 -103
  107. package/dist/chunk-7NL7T6VU.js +0 -406
  108. package/dist/chunk-A76OIMYN.js +0 -102
  109. package/dist/chunk-AWMS3SPP.js +0 -58
  110. package/dist/chunk-B3LY5RCL.js +0 -229
  111. package/dist/chunk-BD2KT3OB.js +0 -36
  112. package/dist/chunk-BXCX5QKA.js +0 -2086
  113. package/dist/chunk-C6VVF43U.js +0 -81
  114. package/dist/chunk-CEMMLV5L.js +0 -98
  115. package/dist/chunk-CM5HNV2W.js +0 -131
  116. package/dist/chunk-DA2KGZZI.js +0 -13
  117. package/dist/chunk-DBVY6HLX.js +0 -64
  118. package/dist/chunk-DIB4GX3G.js +0 -8
  119. package/dist/chunk-DKIJ2RP5.js +0 -68
  120. package/dist/chunk-DL2KLKVH.js +0 -931
  121. package/dist/chunk-DWPN6SCH.js +0 -172
  122. package/dist/chunk-ELWOYVOY.js +0 -206
  123. package/dist/chunk-EWT7H65X.js +0 -506
  124. package/dist/chunk-FA6POGLH.js +0 -70
  125. package/dist/chunk-HMREVIO2.js +0 -135
  126. package/dist/chunk-IIWUT4FO.js +0 -820
  127. package/dist/chunk-JAL3CH4G.js +0 -27
  128. package/dist/chunk-JSJQEWBJ.js +0 -3295
  129. package/dist/chunk-KHKKHDLD.js +0 -387
  130. package/dist/chunk-LA6R4A7Q.js +0 -706
  131. package/dist/chunk-LOOU2DUR.js +0 -20428
  132. package/dist/chunk-M6FHWXE3.js +0 -700
  133. package/dist/chunk-M76HMB7M.js +0 -1856
  134. package/dist/chunk-MAGNK5J4.js +0 -1520
  135. package/dist/chunk-MTM5IFCY.js +0 -1190
  136. package/dist/chunk-N7TMSOZH.js +0 -235
  137. package/dist/chunk-NHJU2ZAL.js +0 -56
  138. package/dist/chunk-NSXKRGRT.js +0 -717
  139. package/dist/chunk-OWMPFXJA.js +0 -1764
  140. package/dist/chunk-PDO5BLNM.js +0 -22
  141. package/dist/chunk-PEQXYSSE.js +0 -45
  142. package/dist/chunk-PW4P4JYF.js +0 -1135
  143. package/dist/chunk-QB54UQUS.js +0 -320
  144. package/dist/chunk-QP3OGJXF.js +0 -105
  145. package/dist/chunk-RC745GGZ.js +0 -122
  146. package/dist/chunk-REOIRYPR.js +0 -37
  147. package/dist/chunk-SCOZRLZ4.js +0 -164
  148. package/dist/chunk-TXJSXBV5.js +0 -1433
  149. package/dist/chunk-TXKUKMVO.js +0 -417
  150. package/dist/chunk-U2GPUYAL.js +0 -3656
  151. package/dist/chunk-UIE3R5XU.js +0 -17
  152. package/dist/chunk-UXPG6ZIN.js +0 -84
  153. package/dist/chunk-VFUK3X5B.js +0 -50
  154. package/dist/chunk-WQSHDTTI.js +0 -1163
  155. package/dist/chunk-X6GDDWQH.js +0 -60
  156. package/dist/chunk-Y2CM7HXH.js +0 -111
  157. package/dist/chunk-Y7X25LFY.js +0 -15
  158. package/dist/chunk-YDUR3ZYW.js +0 -10
  159. package/dist/conversation-work-VIOQ5ZF3.js +0 -54
  160. package/dist/db-3L2MCVRI.js +0 -26
  161. package/dist/discovery-DWVDM7UK.js +0 -44
  162. package/dist/experimental-P5FZM4CU.js +0 -12
  163. package/dist/oauth-callback-server-YVV6C6T2.js +0 -243
  164. package/dist/oauth-relay-5XPVRPYB.js +0 -8
  165. package/dist/plugins-YTYJMMJF.js +0 -14
  166. package/dist/runner-LQ7RETDP.js +0 -522
  167. package/dist/sandbox-egress-signals-FIL7EGPR.js +0 -73
  168. package/dist/sentry-MB3NL3IR.js +0 -42
  169. package/dist/skills-XRWYEDCD.js +0 -27
  170. package/dist/spawn-RC6SJUAI.js +0 -42
  171. package/dist/task-runner-7DY7ARYH.js +0 -36
  172. package/dist/validation-7MNQGCJA.js +0 -17
  173. package/dist/work-COALHUCG.js +0 -51
  174. package/dist/worker-6MURZIPD.js +0 -24
@@ -0,0 +1,20 @@
1
+ import { n as JuniorPluginSet } from "../plugins-BI9A1vKA.js";
2
+ //#region src/cli/chat.d.ts
3
+ export declare const CHAT_USAGE = "usage: junior chat\n junior chat -p <message>";
4
+ export type ChatCommandOptions = {
5
+ mode: "interactive";
6
+ } | {
7
+ message: string;
8
+ mode: "prompt";
9
+ };
10
+ export interface ChatIo {
11
+ error: (line: string) => Promise<void> | void;
12
+ input: NodeJS.ReadableStream;
13
+ output: NodeJS.WritableStream;
14
+ write: (text: string) => Promise<void> | void;
15
+ }
16
+ /** Run the local Junior chat command. */
17
+ export declare function runChat(argv: string[], io?: ChatIo, deps?: {
18
+ pluginSet?: JuniorPluginSet | null;
19
+ }): Promise<number>;
20
+ //#endregion
package/dist/cli/chat.js CHANGED
@@ -1,380 +1,273 @@
1
- import {
2
- executeAgentRun
3
- } from "../chunk-LOOU2DUR.js";
4
- import "../chunk-QB54UQUS.js";
5
- import "../chunk-6Y5B5PEX.js";
6
- import "../chunk-DIB4GX3G.js";
7
- import "../chunk-WQSHDTTI.js";
8
- import {
9
- createAgentRunner
10
- } from "../chunk-DL2KLKVH.js";
11
- import "../chunk-ELWOYVOY.js";
12
- import "../chunk-5PKWYPFT.js";
13
- import "../chunk-2LYHWMR4.js";
14
- import "../chunk-TXJSXBV5.js";
15
- import "../chunk-A76OIMYN.js";
16
- import "../chunk-OWMPFXJA.js";
17
- import "../chunk-DA2KGZZI.js";
18
- import "../chunk-7DHZP5KJ.js";
19
- import "../chunk-LA6R4A7Q.js";
20
- import "../chunk-PDO5BLNM.js";
21
- import "../chunk-UIE3R5XU.js";
22
- import "../chunk-X6GDDWQH.js";
23
- import "../chunk-BD2KT3OB.js";
24
- import "../chunk-DKIJ2RP5.js";
25
- import "../chunk-JAL3CH4G.js";
26
- import "../chunk-7H2VZTWN.js";
27
- import {
28
- loadAppPluginSet
29
- } from "../chunk-Y2CM7HXH.js";
30
- import "../chunk-U2GPUYAL.js";
31
- import "../chunk-3Y47VMHV.js";
32
- import "../chunk-M76HMB7M.js";
33
- import "../chunk-PW4P4JYF.js";
34
- import "../chunk-NSXKRGRT.js";
35
- import "../chunk-2MK3QBGA.js";
36
- import "../chunk-7NL7T6VU.js";
37
- import "../chunk-VFUK3X5B.js";
38
- import "../chunk-63NKKFJL.js";
39
- import "../chunk-NHJU2ZAL.js";
40
- import "../chunk-5NOPO64K.js";
41
- import "../chunk-KHKKHDLD.js";
42
- import "../chunk-YDUR3ZYW.js";
43
- import "../chunk-BXCX5QKA.js";
44
- import "../chunk-CEMMLV5L.js";
45
- import "../chunk-N7TMSOZH.js";
46
- import "../chunk-DWPN6SCH.js";
47
- import "../chunk-TXKUKMVO.js";
48
- import "../chunk-MAGNK5J4.js";
49
- import "../chunk-PEQXYSSE.js";
50
- import "../chunk-HMREVIO2.js";
51
-
52
- // src/cli/chat.ts
53
- import {
54
- stdin as defaultStdin,
55
- stderr as defaultStderr,
56
- stdout as defaultStdout
57
- } from "process";
58
- import { randomUUID } from "crypto";
59
- import * as readline from "readline/promises";
1
+ import { t as executeAgentRun } from "../agent-CMyTD4DD.js";
2
+ import { t as createAgentRunner } from "../agent-runner-DNb1A49M.js";
3
+ import { t as loadAppPluginSet } from "../plugin-module-BKGOXca2.js";
4
+ import path from "node:path";
5
+ import { createHash, randomUUID } from "node:crypto";
6
+ import { stderr, stdin, stdout } from "node:process";
60
7
  import { createJiti } from "jiti";
61
-
62
- // src/chat/local/conversation.ts
63
- import { createHash } from "crypto";
64
- import path from "path";
65
- var LOCAL_CONVERSATION_ALIAS_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
8
+ import * as readline from "node:readline/promises";
9
+ //#region src/chat/local/conversation.ts
10
+ const LOCAL_CONVERSATION_ALIAS_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
66
11
  function slugifyConversationAlias(alias) {
67
- const trimmed = alias.trim();
68
- if (!LOCAL_CONVERSATION_ALIAS_PATTERN.test(trimmed)) {
69
- return void 0;
70
- }
71
- return trimmed.toLowerCase().replaceAll(".", "-");
12
+ const trimmed = alias.trim();
13
+ if (!LOCAL_CONVERSATION_ALIAS_PATTERN.test(trimmed)) return;
14
+ return trimmed.toLowerCase().replaceAll(".", "-");
72
15
  }
16
+ /** Hash the resolved cwd into the stable workspace segment of local conversation ids. */
73
17
  function workspaceKey(cwd) {
74
- return createHash("sha256").update(path.resolve(cwd)).digest("hex").slice(0, 12);
18
+ return createHash("sha256").update(path.resolve(cwd)).digest("hex").slice(0, 12);
75
19
  }
20
+ /** Normalize a local CLI conversation alias into the durable conversation id. */
76
21
  function normalizeLocalConversationId(input) {
77
- const slug = slugifyConversationAlias(input.alias);
78
- if (!slug) {
79
- return void 0;
80
- }
81
- return `local:${workspaceKey(input.cwd ?? process.cwd())}:${slug}`;
22
+ const slug = slugifyConversationAlias(input.alias);
23
+ if (!slug) return;
24
+ return `local:${workspaceKey(input.cwd ?? process.cwd())}:${slug}`;
82
25
  }
83
-
84
- // src/cli/chat.ts
85
- var CHAT_USAGE = "usage: junior chat\n junior chat -p <message>";
86
- var DEFAULT_IO = {
87
- error: (line) => writeStream(defaultStderr, `${line}
88
- `),
89
- input: defaultStdin,
90
- output: defaultStdout,
91
- write: (text) => writeStream(defaultStdout, text)
26
+ //#endregion
27
+ //#region src/cli/chat.ts
28
+ /**
29
+ * Local chat CLI command.
30
+ *
31
+ * This module owns terminal argument parsing and output delivery for `junior
32
+ * chat`; the agent runtime stays behind the local runner, and invalid CLI input
33
+ * must fail before conversation state is created.
34
+ */
35
+ const CHAT_USAGE = "usage: junior chat\n junior chat -p <message>";
36
+ const DEFAULT_IO = {
37
+ error: (line) => writeStream(stderr, `${line}\n`),
38
+ input: stdin,
39
+ output: stdout,
40
+ write: (text) => writeStream(stdout, text)
92
41
  };
93
- var localPluginLoader = createJiti(import.meta.url, { moduleCache: false });
42
+ const localPluginLoader = createJiti(import.meta.url, { moduleCache: false });
94
43
  var ChatOutputError = class extends Error {
95
- constructor(error) {
96
- super(errorMessage(error));
97
- this.name = "ChatOutputError";
98
- }
44
+ constructor(error) {
45
+ super(errorMessage(error));
46
+ this.name = "ChatOutputError";
47
+ }
99
48
  };
100
49
  function errorMessage(error) {
101
- return error instanceof Error ? error.message : String(error);
50
+ return error instanceof Error ? error.message : String(error);
102
51
  }
52
+ /** Deliver text-only local replies. */
103
53
  async function deliverReply(io, reply) {
104
- try {
105
- await io.write(formatReply(reply));
106
- } catch (error) {
107
- throw new ChatOutputError(error);
108
- }
54
+ try {
55
+ await io.write(formatReply(reply));
56
+ } catch (error) {
57
+ throw new ChatOutputError(error);
58
+ }
109
59
  }
110
60
  async function reportStatus(io, status) {
111
- try {
112
- await io.error(status);
113
- } catch (error) {
114
- throw new ChatOutputError(error);
115
- }
61
+ try {
62
+ await io.error(status);
63
+ } catch (error) {
64
+ throw new ChatOutputError(error);
65
+ }
116
66
  }
117
67
  function formatToolPayload(payload) {
118
- if (payload && typeof payload === "object" && !Array.isArray(payload) && Object.keys(payload).length === 0) {
119
- return "";
120
- }
121
- const rendered = JSON.stringify(payload);
122
- if (rendered.length <= 500) {
123
- return ` ${rendered}`;
124
- }
125
- return ` ${rendered.slice(0, 497)}...`;
68
+ if (payload && typeof payload === "object" && !Array.isArray(payload) && Object.keys(payload).length === 0) return "";
69
+ const rendered = JSON.stringify(payload);
70
+ if (rendered.length <= 500) return ` ${rendered}`;
71
+ return ` ${rendered.slice(0, 497)}...`;
126
72
  }
127
73
  async function reportToolResult(io, result) {
128
- if (!result.ok) {
129
- await reportStatus(
130
- io,
131
- `tool: ${result.toolName} error ${result.error ?? "Tool execution failed"}`
132
- );
133
- return;
134
- }
135
- await reportStatus(
136
- io,
137
- `tool: ${result.toolName} ok${formatToolPayload(result.result ?? {})}`
138
- );
74
+ if (!result.ok) {
75
+ await reportStatus(io, `tool: ${result.toolName} error ${result.error ?? "Tool execution failed"}`);
76
+ return;
77
+ }
78
+ await reportStatus(io, `tool: ${result.toolName} ok${formatToolPayload(result.result ?? {})}`);
139
79
  }
140
80
  function writeStream(stream, text) {
141
- return new Promise((resolve, reject) => {
142
- stream.write(text, (error) => {
143
- if (error) {
144
- reject(error);
145
- return;
146
- }
147
- resolve();
148
- });
149
- });
81
+ return new Promise((resolve, reject) => {
82
+ stream.write(text, (error) => {
83
+ if (error) {
84
+ reject(error);
85
+ return;
86
+ }
87
+ resolve();
88
+ });
89
+ });
150
90
  }
91
+ /** Keep local chat ephemeral by default; Redis is opt-in via an explicit adapter. */
151
92
  function defaultStateAdapterForLocalChat() {
152
- if (process.env.JUNIOR_STATE_ADAPTER) {
153
- return;
154
- }
155
- process.env.JUNIOR_STATE_ADAPTER = "memory";
93
+ if (process.env.JUNIOR_STATE_ADAPTER) return;
94
+ process.env.JUNIOR_STATE_ADAPTER = "memory";
156
95
  }
96
+ /** Load the app plugin module so source-mode local chat matches server wiring. */
157
97
  async function loadLocalPluginSet() {
158
- return await loadAppPluginSet(
159
- process.cwd(),
160
- async (moduleRef) => localPluginLoader.import(moduleRef.importPath)
161
- );
98
+ return await loadAppPluginSet(process.cwd(), async (moduleRef) => localPluginLoader.import(moduleRef.importPath));
162
99
  }
100
+ /** Configure plugin hooks after local chat has selected its state adapter. */
163
101
  async function configureLocalChatPlugins(pluginSet) {
164
- const [
165
- pluginsModule,
166
- agentHooksModule,
167
- catalogRuntimeModule,
168
- validationModule,
169
- databaseModule
170
- ] = await Promise.all([
171
- import("../plugins-YTYJMMJF.js"),
172
- import("../agent-hooks-UXITLYOK.js"),
173
- import("../catalog-runtime-BG3JLLK2.js"),
174
- import("../validation-7MNQGCJA.js"),
175
- import("../db-3L2MCVRI.js")
176
- ]);
177
- const resolvedPluginSet = pluginSet === void 0 ? await loadLocalPluginSet() : pluginSet ?? void 0;
178
- const plugins = pluginsModule.pluginRuntimeRegistrationsFromPluginSet(resolvedPluginSet);
179
- const pluginConfig = resolvedPluginSet ? pluginsModule.pluginCatalogConfigFromPluginSet(resolvedPluginSet) : pluginsModule.pluginCatalogConfigFromEnv();
180
- const shouldValidatePluginCatalog = Boolean(pluginConfig) || Boolean(resolvedPluginSet?.registrations.length);
181
- agentHooksModule.validatePlugins(plugins);
182
- const previousPluginCatalogConfig = catalogRuntimeModule.pluginCatalogRuntime.setConfig(pluginConfig);
183
- try {
184
- if (shouldValidatePluginCatalog) {
185
- catalogRuntimeModule.pluginCatalogRuntime.getSignature();
186
- validationModule.validatePluginRegistrations(
187
- resolvedPluginSet?.registrations ?? []
188
- );
189
- validationModule.validatePluginEgressCredentialHooks(
190
- resolvedPluginSet?.registrations ?? []
191
- );
192
- }
193
- databaseModule.getDb();
194
- agentHooksModule.setPlugins(plugins);
195
- } catch (error) {
196
- catalogRuntimeModule.pluginCatalogRuntime.setConfig(
197
- previousPluginCatalogConfig
198
- );
199
- throw error;
200
- }
102
+ const [pluginsModule, agentHooksModule, catalogRuntimeModule, validationModule, databaseModule] = await Promise.all([
103
+ import("../plugins-egKWjgue.js").then((n) => n.o),
104
+ import("../agent-hooks-Bbcp9e33.js").then((n) => n.t),
105
+ import("../catalog-runtime-BReos-D4.js").then((n) => n.t),
106
+ import("../validation-C2CR-OX3.js").then((n) => n.r),
107
+ import("../agent-hooks-Bbcp9e33.js").then((n) => n.St)
108
+ ]);
109
+ const resolvedPluginSet = pluginSet === void 0 ? await loadLocalPluginSet() : pluginSet ?? void 0;
110
+ const plugins = pluginsModule.pluginRuntimeRegistrationsFromPluginSet(resolvedPluginSet);
111
+ const pluginConfig = resolvedPluginSet ? pluginsModule.pluginCatalogConfigFromPluginSet(resolvedPluginSet) : pluginsModule.pluginCatalogConfigFromEnv();
112
+ const shouldValidatePluginCatalog = Boolean(pluginConfig) || Boolean(resolvedPluginSet?.registrations.length);
113
+ agentHooksModule.validatePlugins(plugins);
114
+ const previousPluginCatalogConfig = catalogRuntimeModule.pluginCatalogRuntime.setConfig(pluginConfig);
115
+ try {
116
+ if (shouldValidatePluginCatalog) {
117
+ catalogRuntimeModule.pluginCatalogRuntime.getSignature();
118
+ validationModule.validatePluginRegistrations(resolvedPluginSet?.registrations ?? []);
119
+ validationModule.validatePluginEgressCredentialHooks(resolvedPluginSet?.registrations ?? []);
120
+ }
121
+ databaseModule.getDb();
122
+ agentHooksModule.setPlugins(plugins);
123
+ } catch (error) {
124
+ catalogRuntimeModule.pluginCatalogRuntime.setConfig(previousPluginCatalogConfig);
125
+ throw error;
126
+ }
201
127
  }
202
128
  function parseChatArgs(argv) {
203
- if (argv.length === 0) {
204
- return { mode: "interactive" };
205
- }
206
- if (argv[0] !== "-p") {
207
- return void 0;
208
- }
209
- const message = argv.slice(1).join(" ").trim();
210
- if (!message) {
211
- return void 0;
212
- }
213
- return { message, mode: "prompt" };
129
+ if (argv.length === 0) return { mode: "interactive" };
130
+ if (argv[0] !== "-p") return;
131
+ const message = argv.slice(1).join(" ").trim();
132
+ if (!message) return;
133
+ return {
134
+ message,
135
+ mode: "prompt"
136
+ };
214
137
  }
215
138
  function formatReply(reply) {
216
- const lines = [];
217
- const text = reply.text.trim();
218
- if (text) {
219
- lines.push(text);
220
- }
221
- return `${lines.join("\n") || "[empty response]"}
222
- `;
139
+ const lines = [];
140
+ const text = reply.text.trim();
141
+ if (text) lines.push(text);
142
+ return `${lines.join("\n") || "[empty response]"}\n`;
223
143
  }
144
+ /** Create a fresh local conversation id for one CLI process invocation. */
224
145
  function newRunConversationId() {
225
- const conversationId = normalizeLocalConversationId({
226
- alias: `run-${randomUUID()}`
227
- });
228
- if (!conversationId) {
229
- throw new Error("Invalid local conversation name");
230
- }
231
- return conversationId;
146
+ const conversationId = normalizeLocalConversationId({ alias: `run-${randomUUID()}` });
147
+ if (!conversationId) throw new Error("Invalid local conversation name");
148
+ return conversationId;
232
149
  }
233
150
  function localDevServerUrl() {
234
- return `http://127.0.0.1:${process.env.PORT?.trim() || "3000"}`;
151
+ return `http://127.0.0.1:${process.env.PORT?.trim() || "3000"}`;
235
152
  }
153
+ /** Wire the shared local-turn setup so prompt and interactive runs stay identical. */
236
154
  async function prepareLocalChatRun(io, pluginSet) {
237
- defaultStateAdapterForLocalChat();
238
- await configureLocalChatPlugins(pluginSet);
239
- const { setExperimentalFeatures } = await import("../experimental-P5FZM4CU.js");
240
- setExperimentalFeatures({ subagents: true });
241
- const { runLocalAgentTurn } = await import("../runner-LQ7RETDP.js");
242
- const { startLocalOAuthCallbackServer } = await import("../oauth-callback-server-YVV6C6T2.js");
243
- const { createLocalOAuthState } = await import("../oauth-relay-5XPVRPYB.js");
244
- const { createLocalSandboxEgressSignalTransport } = await import("../sandbox-egress-signals-FIL7EGPR.js");
245
- const { bindSpawnAgent } = await import("../spawn-RC6SJUAI.js");
246
- const { createAgentInvocationWorker, routeAgentInvocationWork } = await import("../work-COALHUCG.js");
247
- const { createLocalConversationWork } = await import("../conversation-work-VIOQ5ZF3.js");
248
- const { processConversationWork } = await import("../worker-6MURZIPD.js");
249
- let agentRunner;
250
- const localConversationWork = createLocalConversationWork(async (message) => {
251
- if (!agentRunner) {
252
- throw new Error("Local agent runner is not ready");
253
- }
254
- const run = routeAgentInvocationWork({
255
- fallbackWorker: async () => {
256
- throw new Error("Local child queue received non-invocation work");
257
- },
258
- invocationWorker: createAgentInvocationWorker(agentRunner)
259
- });
260
- await processConversationWork(message, {
261
- queue: localConversationWork.queue,
262
- run
263
- });
264
- });
265
- agentRunner = createAgentRunner(executeAgentRun, {
266
- bindSpawnAgent: (request) => bindSpawnAgent(request, { queue: localConversationWork.queue })
267
- });
268
- const oauthCallback = await startLocalOAuthCallbackServer(agentRunner);
269
- const deps = {
270
- agentRunner,
271
- authorization: {
272
- cancel: oauthCallback.cancelAuthorization,
273
- createState: async () => await createLocalOAuthState(oauthCallback.port),
274
- deliver: async (request) => {
275
- oauthCallback.beginAuthorization(request.authorizationUrl);
276
- await reportStatus(
277
- io,
278
- `${request.label}:
279
- ${request.authorizationUrl}
280
- ${request.completionText}`
281
- );
282
- },
283
- wait: oauthCallback.waitForAuthorization
284
- },
285
- sandboxEgressSignals: createLocalSandboxEgressSignalTransport(localDevServerUrl()),
286
- deliverReply: async (reply) => {
287
- await deliverReply(io, reply);
288
- },
289
- onStatus: async (status) => {
290
- await reportStatus(io, status);
291
- },
292
- onToolResult: async (result) => {
293
- await reportToolResult(io, result);
294
- }
295
- };
296
- return {
297
- close: async () => {
298
- try {
299
- await localConversationWork.drain();
300
- } finally {
301
- await oauthCallback.close();
302
- }
303
- },
304
- conversationId: newRunConversationId(),
305
- runLocalAgentTurn,
306
- deps
307
- };
155
+ defaultStateAdapterForLocalChat();
156
+ await configureLocalChatPlugins(pluginSet);
157
+ const { setExperimentalFeatures } = await import("../experimental-CIXf7Uye.js").then((n) => n.t);
158
+ setExperimentalFeatures({ subagents: true });
159
+ const { runLocalAgentTurn } = await import("../runner-CZV2sC46.js");
160
+ const { startLocalOAuthCallbackServer } = await import("../oauth-callback-server-JiftokvA.js");
161
+ const { createLocalOAuthState } = await import("../oauth-relay-CdCnu80W.js").then((n) => n.t);
162
+ const { createLocalSandboxEgressSignalTransport } = await import("../sandbox-egress-signals-bHZfmhbd.js");
163
+ const { bindSpawnAgent } = await import("../spawn-DdkUFRmq.js").then((n) => n.n);
164
+ const { createAgentInvocationWorker, routeAgentInvocationWork } = await import("../work-fGofI7Op.js").then((n) => n.a);
165
+ const { createLocalConversationWork } = await import("../conversation-work-C6y3T5Hx.js");
166
+ const { processConversationWork } = await import("../worker-CsOLq-mR.js").then((n) => n.n);
167
+ let agentRunner;
168
+ const localConversationWork = createLocalConversationWork(async (message) => {
169
+ if (!agentRunner) throw new Error("Local agent runner is not ready");
170
+ const run = routeAgentInvocationWork({
171
+ fallbackWorker: async () => {
172
+ throw new Error("Local child queue received non-invocation work");
173
+ },
174
+ invocationWorker: createAgentInvocationWorker(agentRunner)
175
+ });
176
+ await processConversationWork(message, {
177
+ queue: localConversationWork.queue,
178
+ run
179
+ });
180
+ });
181
+ agentRunner = createAgentRunner(executeAgentRun, { bindSpawnAgent: (request) => bindSpawnAgent(request, { queue: localConversationWork.queue }) });
182
+ const oauthCallback = await startLocalOAuthCallbackServer(agentRunner);
183
+ const deps = {
184
+ agentRunner,
185
+ authorization: {
186
+ cancel: oauthCallback.cancelAuthorization,
187
+ createState: async () => await createLocalOAuthState(oauthCallback.port),
188
+ deliver: async (request) => {
189
+ oauthCallback.beginAuthorization(request.authorizationUrl);
190
+ await reportStatus(io, `${request.label}:\n${request.authorizationUrl}\n${request.completionText}`);
191
+ },
192
+ wait: oauthCallback.waitForAuthorization
193
+ },
194
+ sandboxEgressSignals: createLocalSandboxEgressSignalTransport(localDevServerUrl()),
195
+ deliverReply: async (reply) => {
196
+ await deliverReply(io, reply);
197
+ },
198
+ onStatus: async (status) => {
199
+ await reportStatus(io, status);
200
+ },
201
+ onToolResult: async (result) => {
202
+ await reportToolResult(io, result);
203
+ }
204
+ };
205
+ return {
206
+ close: async () => {
207
+ try {
208
+ await localConversationWork.drain();
209
+ } finally {
210
+ await oauthCallback.close();
211
+ }
212
+ },
213
+ conversationId: newRunConversationId(),
214
+ runLocalAgentTurn,
215
+ deps
216
+ };
308
217
  }
309
218
  async function runPrompt(options, io, pluginSet) {
310
- const { close, conversationId, runLocalAgentTurn, deps } = await prepareLocalChatRun(io, pluginSet);
311
- try {
312
- const result = await runLocalAgentTurn(
313
- {
314
- conversationId,
315
- message: options.message
316
- },
317
- deps
318
- );
319
- return result.outcome === "success" ? 0 : 1;
320
- } finally {
321
- await close();
322
- }
219
+ const { close, conversationId, runLocalAgentTurn, deps } = await prepareLocalChatRun(io, pluginSet);
220
+ try {
221
+ return (await runLocalAgentTurn({
222
+ conversationId,
223
+ message: options.message
224
+ }, deps)).outcome === "success" ? 0 : 1;
225
+ } finally {
226
+ await close();
227
+ }
323
228
  }
324
229
  async function runInteractive(io, pluginSet) {
325
- const { close, conversationId, runLocalAgentTurn, deps } = await prepareLocalChatRun(io, pluginSet);
326
- const rl = readline.createInterface({
327
- input: io.input,
328
- output: io.output,
329
- terminal: true
330
- });
331
- try {
332
- while (true) {
333
- const message = (await rl.question("junior> ")).trim();
334
- if (!message) {
335
- continue;
336
- }
337
- if (message === "/exit" || message === "/quit") {
338
- break;
339
- }
340
- try {
341
- await runLocalAgentTurn(
342
- {
343
- conversationId,
344
- message
345
- },
346
- deps
347
- );
348
- } catch (error) {
349
- if (error instanceof ChatOutputError) {
350
- throw error;
351
- }
352
- await reportStatus(io, errorMessage(error));
353
- }
354
- }
355
- } finally {
356
- rl.close();
357
- await close();
358
- }
230
+ const { close, conversationId, runLocalAgentTurn, deps } = await prepareLocalChatRun(io, pluginSet);
231
+ const rl = readline.createInterface({
232
+ input: io.input,
233
+ output: io.output,
234
+ terminal: true
235
+ });
236
+ try {
237
+ while (true) {
238
+ const message = (await rl.question("junior> ")).trim();
239
+ if (!message) continue;
240
+ if (message === "/exit" || message === "/quit") break;
241
+ try {
242
+ await runLocalAgentTurn({
243
+ conversationId,
244
+ message
245
+ }, deps);
246
+ } catch (error) {
247
+ if (error instanceof ChatOutputError) throw error;
248
+ await reportStatus(io, errorMessage(error));
249
+ }
250
+ }
251
+ } finally {
252
+ rl.close();
253
+ await close();
254
+ }
359
255
  }
256
+ /** Run the local Junior chat command. */
360
257
  async function runChat(argv, io = DEFAULT_IO, deps = {}) {
361
- const options = parseChatArgs(argv);
362
- if (!options) {
363
- await io.error(CHAT_USAGE);
364
- return 1;
365
- }
366
- try {
367
- if (options.mode === "prompt") {
368
- return await runPrompt(options, io, deps.pluginSet);
369
- }
370
- await runInteractive(io, deps.pluginSet);
371
- return 0;
372
- } catch (error) {
373
- await io.error(errorMessage(error));
374
- return 1;
375
- }
258
+ const options = parseChatArgs(argv);
259
+ if (!options) {
260
+ await io.error(CHAT_USAGE);
261
+ return 1;
262
+ }
263
+ try {
264
+ if (options.mode === "prompt") return await runPrompt(options, io, deps.pluginSet);
265
+ await runInteractive(io, deps.pluginSet);
266
+ return 0;
267
+ } catch (error) {
268
+ await io.error(errorMessage(error));
269
+ return 1;
270
+ }
376
271
  }
377
- export {
378
- CHAT_USAGE,
379
- runChat
380
- };
272
+ //#endregion
273
+ export { CHAT_USAGE, runChat };
@@ -0,0 +1,8 @@
1
+ //#region src/cli/check.d.ts
2
+ export interface ValidationIo {
3
+ info: (line: string) => void;
4
+ warn: (line: string) => void;
5
+ error: (line: string) => void;
6
+ }
7
+ export declare function runCheck(rootDir?: string, io?: ValidationIo): Promise<void>;
8
+ //#endregion