@sentry/junior 0.203.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 +8 -8
  92. package/dist/agent-hooks-GB2VPTNA.js +0 -51
  93. package/dist/catalog-runtime-UBLIWD3O.js +0 -14
  94. package/dist/chunk-2LYHWMR4.js +0 -46
  95. package/dist/chunk-352OWAZH.js +0 -320
  96. package/dist/chunk-3Y47VMHV.js +0 -6
  97. package/dist/chunk-3YJSKOWF.js +0 -164
  98. package/dist/chunk-4KSSKTQ5.js +0 -229
  99. package/dist/chunk-4UO6FK4G.js +0 -64
  100. package/dist/chunk-5AHX53NQ.js +0 -717
  101. package/dist/chunk-5J3E5FWA.js +0 -700
  102. package/dist/chunk-5PDAG6O3.js +0 -206
  103. package/dist/chunk-6Y5B5PEX.js +0 -80
  104. package/dist/chunk-7GWQ5S5R.js +0 -2086
  105. package/dist/chunk-7H2VZTWN.js +0 -103
  106. package/dist/chunk-7NL7T6VU.js +0 -406
  107. package/dist/chunk-A5L27LE4.js +0 -387
  108. package/dist/chunk-ADIAWL34.js +0 -81
  109. package/dist/chunk-ASTEMBKJ.js +0 -519
  110. package/dist/chunk-CEMMLV5L.js +0 -98
  111. package/dist/chunk-CM5HNV2W.js +0 -131
  112. package/dist/chunk-CRTRBBRI.js +0 -105
  113. package/dist/chunk-DA2KGZZI.js +0 -13
  114. package/dist/chunk-DIB4GX3G.js +0 -8
  115. package/dist/chunk-DKIJ2RP5.js +0 -68
  116. package/dist/chunk-DWPN6SCH.js +0 -172
  117. package/dist/chunk-EDKUFGPL.js +0 -64
  118. package/dist/chunk-ENY6SKIU.js +0 -1228
  119. package/dist/chunk-F4MGCZOX.js +0 -2943
  120. package/dist/chunk-FA6POGLH.js +0 -70
  121. package/dist/chunk-FSUR7GTG.js +0 -20475
  122. package/dist/chunk-GKEOHJL5.js +0 -1856
  123. package/dist/chunk-GMCB6W5Y.js +0 -333
  124. package/dist/chunk-IE2VPG7O.js +0 -1135
  125. package/dist/chunk-IZ5B5IHQ.js +0 -3656
  126. package/dist/chunk-JAL3CH4G.js +0 -27
  127. package/dist/chunk-KIIEUXD3.js +0 -1764
  128. package/dist/chunk-KXU4NIL7.js +0 -692
  129. package/dist/chunk-MTM5IFCY.js +0 -1190
  130. package/dist/chunk-N7TMSOZH.js +0 -235
  131. package/dist/chunk-NCEBK6PH.js +0 -36
  132. package/dist/chunk-NHJU2ZAL.js +0 -56
  133. package/dist/chunk-P6KTRNVC.js +0 -321
  134. package/dist/chunk-PDO5BLNM.js +0 -22
  135. package/dist/chunk-PDRNLLFT.js +0 -3295
  136. package/dist/chunk-PEQXYSSE.js +0 -45
  137. package/dist/chunk-PKEX2AQX.js +0 -198
  138. package/dist/chunk-PSJCGIGO.js +0 -1163
  139. package/dist/chunk-PZUSUL55.js +0 -506
  140. package/dist/chunk-R45M4TUS.js +0 -37
  141. package/dist/chunk-RC745GGZ.js +0 -122
  142. package/dist/chunk-SP3QKZXJ.js +0 -820
  143. package/dist/chunk-TXKUKMVO.js +0 -417
  144. package/dist/chunk-UE4GPWSD.js +0 -931
  145. package/dist/chunk-UIE3R5XU.js +0 -17
  146. package/dist/chunk-UXPG6ZIN.js +0 -84
  147. package/dist/chunk-VFUK3X5B.js +0 -50
  148. package/dist/chunk-VNMJWREK.js +0 -787
  149. package/dist/chunk-VZ7CSOX2.js +0 -706
  150. package/dist/chunk-WCNQJKFT.js +0 -10
  151. package/dist/chunk-WDZR3QQM.js +0 -135
  152. package/dist/chunk-WLYVJCHV.js +0 -1433
  153. package/dist/chunk-WS7NAFTM.js +0 -1520
  154. package/dist/chunk-X6GDDWQH.js +0 -60
  155. package/dist/chunk-XPDEYNQI.js +0 -102
  156. package/dist/chunk-XRW44VGM.js +0 -58
  157. package/dist/chunk-Y2CM7HXH.js +0 -111
  158. package/dist/chunk-Y7X25LFY.js +0 -15
  159. package/dist/conversation-work-VIOQ5ZF3.js +0 -54
  160. package/dist/db-NGDJV7YH.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-YFY7YEGK.js +0 -243
  164. package/dist/oauth-relay-5XPVRPYB.js +0 -8
  165. package/dist/plugins-YTYJMMJF.js +0 -14
  166. package/dist/runner-ORTNSB2Q.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-H376WQOH.js +0 -27
  170. package/dist/spawn-T43WHLOS.js +0 -42
  171. package/dist/task-runner-LBZWF32V.js +0 -36
  172. package/dist/validation-REJLRKI6.js +0 -17
  173. package/dist/work-3KJ3RE76.js +0 -51
  174. package/dist/worker-QFEBU72E.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-FSUR7GTG.js";
4
- import "../chunk-352OWAZH.js";
5
- import "../chunk-6Y5B5PEX.js";
6
- import "../chunk-DIB4GX3G.js";
7
- import "../chunk-PSJCGIGO.js";
8
- import {
9
- createAgentRunner
10
- } from "../chunk-UE4GPWSD.js";
11
- import "../chunk-5PDAG6O3.js";
12
- import "../chunk-F4MGCZOX.js";
13
- import "../chunk-2LYHWMR4.js";
14
- import "../chunk-WLYVJCHV.js";
15
- import "../chunk-XPDEYNQI.js";
16
- import "../chunk-KIIEUXD3.js";
17
- import "../chunk-DA2KGZZI.js";
18
- import "../chunk-GMCB6W5Y.js";
19
- import "../chunk-VZ7CSOX2.js";
20
- import "../chunk-PDO5BLNM.js";
21
- import "../chunk-UIE3R5XU.js";
22
- import "../chunk-X6GDDWQH.js";
23
- import "../chunk-NCEBK6PH.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-IZ5B5IHQ.js";
31
- import "../chunk-3Y47VMHV.js";
32
- import "../chunk-GKEOHJL5.js";
33
- import "../chunk-IE2VPG7O.js";
34
- import "../chunk-5AHX53NQ.js";
35
- import "../chunk-P6KTRNVC.js";
36
- import "../chunk-7NL7T6VU.js";
37
- import "../chunk-VFUK3X5B.js";
38
- import "../chunk-ENY6SKIU.js";
39
- import "../chunk-NHJU2ZAL.js";
40
- import "../chunk-PKEX2AQX.js";
41
- import "../chunk-A5L27LE4.js";
42
- import "../chunk-WCNQJKFT.js";
43
- import "../chunk-7GWQ5S5R.js";
44
- import "../chunk-CEMMLV5L.js";
45
- import "../chunk-N7TMSOZH.js";
46
- import "../chunk-DWPN6SCH.js";
47
- import "../chunk-TXKUKMVO.js";
48
- import "../chunk-WS7NAFTM.js";
49
- import "../chunk-PEQXYSSE.js";
50
- import "../chunk-WDZR3QQM.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-GB2VPTNA.js"),
173
- import("../catalog-runtime-UBLIWD3O.js"),
174
- import("../validation-REJLRKI6.js"),
175
- import("../db-NGDJV7YH.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-ORTNSB2Q.js");
242
- const { startLocalOAuthCallbackServer } = await import("../oauth-callback-server-YFY7YEGK.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-T43WHLOS.js");
246
- const { createAgentInvocationWorker, routeAgentInvocationWork } = await import("../work-3KJ3RE76.js");
247
- const { createLocalConversationWork } = await import("../conversation-work-VIOQ5ZF3.js");
248
- const { processConversationWork } = await import("../worker-QFEBU72E.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