@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,13 @@
1
+ //#region src/cli/env.d.ts
2
+ export declare const JUNIOR_LOCAL_DEV_INTERNAL_SECRET = "junior-local-dev-internal";
3
+ export declare const JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET = "junior-local-dev-heartbeat";
4
+ /** Apply global development defaults after env files have been loaded. */
5
+ export declare function applyJuniorDevelopmentDefaults(env: NodeJS.ProcessEnv, options?: {
6
+ baseUrl?: string;
7
+ }): void;
8
+ /**
9
+ * Load CLI env files from the nearest package root and workspace root so
10
+ * `pnpm exec junior ...` sees the same credentials as local repo scripts.
11
+ */
12
+ export declare function loadCliEnvFiles(cwd?: string): void;
13
+ //#endregion
package/dist/cli/env.js CHANGED
@@ -1,12 +1,63 @@
1
- import {
2
- JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET,
3
- JUNIOR_LOCAL_DEV_INTERNAL_SECRET,
4
- applyJuniorDevelopmentDefaults,
5
- loadCliEnvFiles
6
- } from "../chunk-UXPG6ZIN.js";
7
- export {
8
- JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET,
9
- JUNIOR_LOCAL_DEV_INTERNAL_SECRET,
10
- applyJuniorDevelopmentDefaults,
11
- loadCliEnvFiles
12
- };
1
+ import path from "node:path";
2
+ import fs from "node:fs";
3
+ //#region src/cli/env.ts
4
+ function envFileNames(nodeEnv) {
5
+ return [
6
+ `.env.${nodeEnv}.local`,
7
+ ...nodeEnv === "test" ? [] : [".env.local"],
8
+ `.env.${nodeEnv}`,
9
+ ".env",
10
+ ".env.example"
11
+ ];
12
+ }
13
+ const JUNIOR_LOCAL_DEV_INTERNAL_SECRET = "junior-local-dev-internal";
14
+ const JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET = "junior-local-dev-heartbeat";
15
+ function hasValue(value) {
16
+ return typeof value === "string" && value.trim() !== "";
17
+ }
18
+ /** Apply global development defaults after env files have been loaded. */
19
+ function applyJuniorDevelopmentDefaults(env, options = {}) {
20
+ if ((env.NODE_ENV ?? "development") !== "development") return;
21
+ if (!hasValue(env.JUNIOR_SECRET)) env.JUNIOR_SECRET = JUNIOR_LOCAL_DEV_INTERNAL_SECRET;
22
+ if (!hasValue(env.JUNIOR_STATE_ADAPTER)) env.JUNIOR_STATE_ADAPTER = "memory";
23
+ if (!hasValue(env.JUNIOR_SCHEDULER_SECRET) && !hasValue(env.CRON_SECRET)) env.JUNIOR_SCHEDULER_SECRET = JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET;
24
+ const baseUrl = options.baseUrl;
25
+ if (!hasValue(env.JUNIOR_BASE_URL) && hasValue(baseUrl)) env.JUNIOR_BASE_URL = baseUrl.trim();
26
+ }
27
+ function hasEnvRootMarker(dir) {
28
+ return fs.existsSync(path.join(dir, "package.json")) || fs.existsSync(path.join(dir, "pnpm-workspace.yaml"));
29
+ }
30
+ function resolveCliEnvRoots(cwd) {
31
+ const roots = [];
32
+ const seen = /* @__PURE__ */ new Set();
33
+ const addRoot = (candidate) => {
34
+ const resolved = path.resolve(candidate);
35
+ if (seen.has(resolved)) return;
36
+ seen.add(resolved);
37
+ roots.push(resolved);
38
+ };
39
+ let current = path.resolve(cwd);
40
+ addRoot(current);
41
+ while (true) {
42
+ if (hasEnvRootMarker(current)) addRoot(current);
43
+ const parent = path.dirname(current);
44
+ if (parent === current) break;
45
+ current = parent;
46
+ }
47
+ return roots;
48
+ }
49
+ /**
50
+ * Load CLI env files from the nearest package root and workspace root so
51
+ * `pnpm exec junior ...` sees the same credentials as local repo scripts.
52
+ */
53
+ function loadCliEnvFiles(cwd = process.cwd()) {
54
+ const nodeEnv = process.env.NODE_ENV ?? "development";
55
+ for (const root of resolveCliEnvRoots(cwd)) for (const envFile of envFileNames(nodeEnv)) {
56
+ const absolutePath = path.join(root, envFile);
57
+ if (!fs.existsSync(absolutePath)) continue;
58
+ process.loadEnvFile(absolutePath);
59
+ }
60
+ applyJuniorDevelopmentDefaults(process.env);
61
+ }
62
+ //#endregion
63
+ export { JUNIOR_LOCAL_DEV_HEARTBEAT_SECRET, JUNIOR_LOCAL_DEV_INTERNAL_SECRET, applyJuniorDevelopmentDefaults, loadCliEnvFiles };
@@ -0,0 +1,3 @@
1
+ //#region src/cli/init.d.ts
2
+ export declare function runInit(dir: string, log?: (line: string) => void): Promise<void>;
3
+ //#endregion
package/dist/cli/init.js CHANGED
@@ -1,14 +1,9 @@
1
- import {
2
- juniorVercelConfig
3
- } from "../chunk-Y7X25LFY.js";
4
-
5
- // src/cli/init.ts
6
- import fs from "fs";
7
- import path from "path";
1
+ import { juniorVercelConfig } from "../vercel.js";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ //#region src/cli/init.ts
8
5
  function writeServerEntry(targetDir) {
9
- fs.writeFileSync(
10
- path.join(targetDir, "server.ts"),
11
- `import { initSentry } from "@sentry/junior/instrumentation";
6
+ fs.writeFileSync(path.join(targetDir, "server.ts"), `import { initSentry } from "@sentry/junior/instrumentation";
12
7
 
13
8
  initSentry();
14
9
 
@@ -25,35 +20,26 @@ const app = await createApp({
25
20
  });
26
21
 
27
22
  export default app;
28
- `
29
- );
23
+ `);
30
24
  }
31
25
  function writeInstrumentFile(targetDir) {
32
- fs.writeFileSync(
33
- path.join(targetDir, "instrument.mjs"),
34
- `import { initSentry } from "@sentry/junior/instrumentation";
26
+ fs.writeFileSync(path.join(targetDir, "instrument.mjs"), `import { initSentry } from "@sentry/junior/instrumentation";
35
27
 
36
28
  initSentry();
37
- `
38
- );
29
+ `);
39
30
  }
40
31
  function writePluginsFile(targetDir) {
41
- fs.writeFileSync(
42
- path.join(targetDir, "plugins.ts"),
43
- `import { defineJuniorPlugins } from "@sentry/junior";
32
+ fs.writeFileSync(path.join(targetDir, "plugins.ts"), `import { defineJuniorPlugins } from "@sentry/junior";
44
33
  import { memoryPlugin } from "@sentry/junior-memory";
45
34
 
46
35
  export const plugins = defineJuniorPlugins([
47
36
  memoryPlugin(),
48
37
  "@sentry/junior-maintenance",
49
38
  ]);
50
- `
51
- );
39
+ `);
52
40
  }
53
41
  function writeNitroConfig(targetDir) {
54
- fs.writeFileSync(
55
- path.join(targetDir, "nitro.config.ts"),
56
- `import { withSentryConfig } from "@sentry/nitro";
42
+ fs.writeFileSync(path.join(targetDir, "nitro.config.ts"), `import { withSentryConfig } from "@sentry/nitro";
57
43
  import { defineConfig } from "nitro";
58
44
  import { juniorNitro } from "@sentry/junior/nitro";
59
45
 
@@ -74,47 +60,29 @@ export default withSentryConfig(config, {
74
60
  org: process.env.SENTRY_ORG,
75
61
  project: process.env.SENTRY_PROJECT,
76
62
  });
77
- `
78
- );
63
+ `);
79
64
  }
80
65
  function writeTsConfig(targetDir) {
81
- fs.writeFileSync(
82
- path.join(targetDir, "tsconfig.json"),
83
- `${JSON.stringify(
84
- {
85
- extends: "nitro/tsconfig",
86
- compilerOptions: {}
87
- },
88
- null,
89
- 2
90
- )}
91
- `
92
- );
66
+ fs.writeFileSync(path.join(targetDir, "tsconfig.json"), `${JSON.stringify({
67
+ extends: "nitro/tsconfig",
68
+ compilerOptions: {}
69
+ }, null, 2)}\n`);
93
70
  }
94
71
  function writePnpmWorkspace(targetDir) {
95
- fs.writeFileSync(
96
- path.join(targetDir, "pnpm-workspace.yaml"),
97
- `minimumReleaseAge: 1440
72
+ fs.writeFileSync(path.join(targetDir, "pnpm-workspace.yaml"), `minimumReleaseAge: 1440
98
73
  minimumReleaseAgeExclude:
99
74
  - "@sentry/*"
100
75
  allowBuilds:
101
76
  "@sentry/cli": true
102
- `
103
- );
77
+ `);
104
78
  }
105
79
  function writeVercelJson(targetDir) {
106
- fs.writeFileSync(
107
- path.join(targetDir, "vercel.json"),
108
- `${JSON.stringify(juniorVercelConfig(), null, 2)}
109
- `
110
- );
80
+ fs.writeFileSync(path.join(targetDir, "vercel.json"), `${JSON.stringify(juniorVercelConfig(), null, 2)}\n`);
111
81
  }
112
82
  function writeGitHubWorkflow(targetDir) {
113
- const workflowDir = path.join(targetDir, ".github", "workflows");
114
- fs.mkdirSync(workflowDir, { recursive: true });
115
- fs.writeFileSync(
116
- path.join(workflowDir, "ci.yml"),
117
- `name: CI
83
+ const workflowDir = path.join(targetDir, ".github", "workflows");
84
+ fs.mkdirSync(workflowDir, { recursive: true });
85
+ fs.writeFileSync(path.join(workflowDir, "ci.yml"), `name: CI
118
86
 
119
87
  on:
120
88
  push:
@@ -136,101 +104,66 @@ jobs:
136
104
  - run: pnpm install
137
105
  - run: pnpm check
138
106
  - run: pnpm build
139
- `
140
- );
107
+ `);
141
108
  }
142
109
  async function runInit(dir, log = console.log) {
143
- const targetDir = dir.trim();
144
- if (!targetDir) {
145
- throw new Error("usage: junior init <dir>");
146
- }
147
- const target = path.resolve(targetDir);
148
- if (fs.existsSync(target)) {
149
- const stat = fs.statSync(target);
150
- if (!stat.isDirectory()) {
151
- throw new Error(`refusing to initialize non-directory path: ${target}`);
152
- }
153
- if (fs.readdirSync(target).length > 0) {
154
- throw new Error(`refusing to initialize non-empty directory: ${target}`);
155
- }
156
- } else {
157
- fs.mkdirSync(target, { recursive: true });
158
- }
159
- const name = path.basename(target);
160
- const pkg = {
161
- name,
162
- version: "0.1.0",
163
- private: true,
164
- type: "module",
165
- scripts: {
166
- dev: "cross-env NODE_OPTIONS=--import=./instrument.mjs nitro dev",
167
- check: "junior check",
168
- build: "junior snapshot create && nitro build",
169
- preview: "cross-env NODE_OPTIONS=--import=./instrument.mjs nitro preview",
170
- typecheck: "tsc --noEmit"
171
- },
172
- dependencies: {
173
- "@opentelemetry/api": "1.9.1",
174
- "@opentelemetry/core": "2.9.0",
175
- "@sentry/junior": "latest",
176
- "@sentry/junior-memory": "latest",
177
- "@sentry/junior-maintenance": "latest",
178
- "@sentry/nitro": "10.65.0",
179
- hono: "^4.12.27"
180
- },
181
- devDependencies: {
182
- "@types/node": "^25.9.1",
183
- "cross-env": "^10.1.0",
184
- jiti: "^2.7.0",
185
- nitro: "3.0.260522-beta",
186
- typescript: "^6.0.3"
187
- }
188
- };
189
- fs.writeFileSync(
190
- path.join(target, "package.json"),
191
- `${JSON.stringify(pkg, null, 2)}
192
- `
193
- );
194
- const appDir = path.join(target, "app");
195
- fs.mkdirSync(appDir, { recursive: true });
196
- fs.writeFileSync(
197
- path.join(appDir, "SOUL.md"),
198
- `# ${name}
199
-
200
- You are ${name}, a helpful assistant.
201
- `
202
- );
203
- fs.writeFileSync(
204
- path.join(appDir, "WORLD.md"),
205
- `# ${name} World
206
-
207
- Operational context and domain knowledge for ${name}.
208
- `
209
- );
210
- fs.writeFileSync(
211
- path.join(appDir, "DESCRIPTION.md"),
212
- `${name} helps your team make progress directly in Slack.
213
- `
214
- );
215
- const skillsDir = path.join(appDir, "skills");
216
- fs.mkdirSync(skillsDir, { recursive: true });
217
- fs.writeFileSync(path.join(skillsDir, ".gitkeep"), "");
218
- const pluginsDir = path.join(appDir, "plugins");
219
- fs.mkdirSync(pluginsDir, { recursive: true });
220
- fs.writeFileSync(path.join(pluginsDir, ".gitkeep"), "");
221
- fs.writeFileSync(
222
- path.join(target, ".gitignore"),
223
- `node_modules/
110
+ const targetDir = dir.trim();
111
+ if (!targetDir) throw new Error("usage: junior init <dir>");
112
+ const target = path.resolve(targetDir);
113
+ if (fs.existsSync(target)) {
114
+ if (!fs.statSync(target).isDirectory()) throw new Error(`refusing to initialize non-directory path: ${target}`);
115
+ if (fs.readdirSync(target).length > 0) throw new Error(`refusing to initialize non-empty directory: ${target}`);
116
+ } else fs.mkdirSync(target, { recursive: true });
117
+ const name = path.basename(target);
118
+ const pkg = {
119
+ name,
120
+ version: "0.1.0",
121
+ private: true,
122
+ type: "module",
123
+ scripts: {
124
+ dev: "cross-env NODE_OPTIONS=--import=./instrument.mjs nitro dev",
125
+ check: "junior check",
126
+ build: "junior snapshot create && nitro build",
127
+ preview: "cross-env NODE_OPTIONS=--import=./instrument.mjs nitro preview",
128
+ typecheck: "tsc --noEmit"
129
+ },
130
+ dependencies: {
131
+ "@opentelemetry/api": "1.9.1",
132
+ "@opentelemetry/core": "2.9.0",
133
+ "@sentry/junior": "latest",
134
+ "@sentry/junior-memory": "latest",
135
+ "@sentry/junior-maintenance": "latest",
136
+ "@sentry/nitro": "10.65.0",
137
+ hono: "^4.12.27"
138
+ },
139
+ devDependencies: {
140
+ "@types/node": "^25.9.1",
141
+ "cross-env": "^10.1.0",
142
+ jiti: "^2.7.0",
143
+ nitro: "3.0.260522-beta",
144
+ typescript: "^6.0.3"
145
+ }
146
+ };
147
+ fs.writeFileSync(path.join(target, "package.json"), `${JSON.stringify(pkg, null, 2)}\n`);
148
+ const appDir = path.join(target, "app");
149
+ fs.mkdirSync(appDir, { recursive: true });
150
+ fs.writeFileSync(path.join(appDir, "SOUL.md"), `# ${name}\n\nYou are ${name}, a helpful assistant.\n`);
151
+ fs.writeFileSync(path.join(appDir, "WORLD.md"), `# ${name} World\n\nOperational context and domain knowledge for ${name}.\n`);
152
+ fs.writeFileSync(path.join(appDir, "DESCRIPTION.md"), `${name} helps your team make progress directly in Slack.\n`);
153
+ const skillsDir = path.join(appDir, "skills");
154
+ fs.mkdirSync(skillsDir, { recursive: true });
155
+ fs.writeFileSync(path.join(skillsDir, ".gitkeep"), "");
156
+ const pluginsDir = path.join(appDir, "plugins");
157
+ fs.mkdirSync(pluginsDir, { recursive: true });
158
+ fs.writeFileSync(path.join(pluginsDir, ".gitkeep"), "");
159
+ fs.writeFileSync(path.join(target, ".gitignore"), `node_modules/
224
160
  .vercel/
225
161
  .output/
226
162
  .nitro/
227
163
  .env
228
164
  .env.local
229
- `
230
- );
231
- fs.writeFileSync(
232
- path.join(target, ".env.example"),
233
- `SLACK_BOT_TOKEN=
165
+ `);
166
+ fs.writeFileSync(path.join(target, ".env.example"), `SLACK_BOT_TOKEN=
234
167
  SLACK_SIGNING_SECRET=
235
168
  JUNIOR_SECRET=
236
169
  JUNIOR_BOT_NAME=
@@ -257,21 +190,19 @@ SENTRY_ORG=
257
190
  SENTRY_ORG_SLUG=
258
191
  SENTRY_PROJECT=
259
192
  SENTRY_AUTH_TOKEN=
260
- `
261
- );
262
- writeServerEntry(target);
263
- writeInstrumentFile(target);
264
- writePluginsFile(target);
265
- writeNitroConfig(target);
266
- writeTsConfig(target);
267
- writePnpmWorkspace(target);
268
- writeVercelJson(target);
269
- writeGitHubWorkflow(target);
270
- log(`Created ${name} at ${target}`);
271
- log("");
272
- log(` cd ${targetDir} && pnpm install && pnpm dev`);
273
- log("");
193
+ `);
194
+ writeServerEntry(target);
195
+ writeInstrumentFile(target);
196
+ writePluginsFile(target);
197
+ writeNitroConfig(target);
198
+ writeTsConfig(target);
199
+ writePnpmWorkspace(target);
200
+ writeVercelJson(target);
201
+ writeGitHubWorkflow(target);
202
+ log(`Created ${name} at ${target}`);
203
+ log("");
204
+ log(` cd ${targetDir} && pnpm install && pnpm dev`);
205
+ log("");
274
206
  }
275
- export {
276
- runInit
277
- };
207
+ //#endregion
208
+ export { runInit };
@@ -0,0 +1,6 @@
1
+ //#region src/cli/main.d.ts
2
+ /** Run the packaged CLI entrypoint with plugin command bootstrap enabled. */
3
+ export declare function runMain(argv: string[], options?: {
4
+ instrument?: boolean;
5
+ }): Promise<void>;
6
+ //#endregion
package/dist/cli/main.js CHANGED
@@ -1,83 +1,62 @@
1
- import {
2
- loadCliEnvFiles
3
- } from "../chunk-UXPG6ZIN.js";
4
- import {
5
- runCli
6
- } from "../chunk-4UO6FK4G.js";
7
-
8
- // src/cli/main.ts
9
- import { pathToFileURL } from "url";
10
- var SENTRY_FLUSH_TIMEOUT_MS = 2e3;
1
+ import { loadCliEnvFiles } from "./env.js";
2
+ import { runCli } from "./run.js";
3
+ import { pathToFileURL } from "node:url";
4
+ //#region src/cli/main.ts
5
+ const SENTRY_FLUSH_TIMEOUT_MS = 2e3;
11
6
  async function flushSentry() {
12
- const mod = await import("../sentry-MB3NL3IR.js");
13
- await mod.flush(SENTRY_FLUSH_TIMEOUT_MS);
7
+ await (await import("../sentry-CD3SdJl-.js").then((n) => n.u)).flush(SENTRY_FLUSH_TIMEOUT_MS);
14
8
  }
15
9
  async function initSentry() {
16
- const mod = await import("../instrumentation.js");
17
- mod.initSentry();
10
+ (await import("../instrumentation.js")).initSentry();
18
11
  }
19
12
  async function runInit(dir) {
20
- const mod = await import("./init.js");
21
- await mod.runInit(dir);
13
+ await (await import("./init.js")).runInit(dir);
22
14
  }
23
15
  async function runSnapshotCreate() {
24
- const mod = await import("./snapshot-create.js");
25
- await mod.runSnapshotCreate();
16
+ await (await import("./snapshot-create.js")).runSnapshotCreate();
26
17
  }
27
18
  async function runCheck(dir) {
28
- const mod = await import("./check.js");
29
- await mod.runCheck(dir);
19
+ await (await import("./check.js")).runCheck(dir);
30
20
  }
31
21
  async function runUpgrade(pluginSet) {
32
- const mod = await import("./upgrade.js");
33
- await mod.runUpgrade(void 0, { pluginSet });
22
+ await (await import("./upgrade.js")).runUpgrade(void 0, { pluginSet });
34
23
  }
35
24
  async function runChat(argv, pluginSet) {
36
- const mod = await import("./chat.js");
37
- return await mod.runChat(argv, void 0, { pluginSet });
25
+ return await (await import("./chat.js")).runChat(argv, void 0, { pluginSet });
38
26
  }
39
27
  function topLevelCommand(argv) {
40
- const normalized = argv[0] === "--" ? argv.slice(1) : argv;
41
- return normalized[0];
28
+ return (argv[0] === "--" ? argv.slice(1) : argv)[0];
42
29
  }
30
+ /** Run the packaged CLI entrypoint with plugin command bootstrap enabled. */
43
31
  async function runMain(argv, options = {}) {
44
- loadCliEnvFiles();
45
- const instrument = options.instrument ?? true;
46
- if (instrument) {
47
- await initSentry();
48
- }
49
- const command = topLevelCommand(argv);
50
- const cliPluginsModule = command && command !== "init" ? await import("./plugins.js") : void 0;
51
- const pluginSet = cliPluginsModule ? await cliPluginsModule.loadCliPluginSet() ?? null : void 0;
52
- const pluginCommands = cliPluginsModule ? await cliPluginsModule.loadCliPluginCommands(pluginSet) : void 0;
53
- const exitCode = await runCli(argv, {
54
- runChat: async (chatArgv) => await runChat(chatArgv, pluginSet),
55
- runInit,
56
- runSnapshotCreate,
57
- runCheck,
58
- runUpgrade: async () => await runUpgrade(pluginSet),
59
- ...pluginCommands ? { runPluginCommand: pluginCommands.run } : void 0
60
- });
61
- if (instrument) {
62
- await flushSentry();
63
- }
64
- process.exit(exitCode);
32
+ loadCliEnvFiles();
33
+ const instrument = options.instrument ?? true;
34
+ if (instrument) await initSentry();
35
+ const command = topLevelCommand(argv);
36
+ const cliPluginsModule = command && command !== "init" ? await import("./plugins.js") : void 0;
37
+ const pluginSet = cliPluginsModule ? await cliPluginsModule.loadCliPluginSet() ?? null : void 0;
38
+ const pluginCommands = cliPluginsModule ? await cliPluginsModule.loadCliPluginCommands(pluginSet) : void 0;
39
+ const exitCode = await runCli(argv, {
40
+ runChat: async (chatArgv) => await runChat(chatArgv, pluginSet),
41
+ runInit,
42
+ runSnapshotCreate,
43
+ runCheck,
44
+ runUpgrade: async () => await runUpgrade(pluginSet),
45
+ ...pluginCommands ? { runPluginCommand: pluginCommands.run } : void 0
46
+ });
47
+ if (instrument) await flushSentry();
48
+ process.exit(exitCode);
65
49
  }
66
50
  function isDirectCliEntry() {
67
- return Boolean(
68
- process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href
69
- );
70
- }
71
- if (isDirectCliEntry()) {
72
- runMain(process.argv.slice(2)).catch((error) => {
73
- void (async () => {
74
- const message = error instanceof Error ? error.message : String(error);
75
- console.error(`junior command failed: ${message}`);
76
- await flushSentry();
77
- process.exit(1);
78
- })();
79
- });
80
- }
81
- export {
82
- runMain
83
- };
51
+ return Boolean(process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href);
52
+ }
53
+ if (isDirectCliEntry()) runMain(process.argv.slice(2)).catch((error) => {
54
+ (async () => {
55
+ const message = error instanceof Error ? error.message : String(error);
56
+ console.error(`junior command failed: ${message}`);
57
+ await flushSentry();
58
+ process.exit(1);
59
+ })();
60
+ });
61
+ //#endregion
62
+ export { runMain };
@@ -0,0 +1,13 @@
1
+ import { n as JuniorPluginSet } from "../plugins-BI9A1vKA.js";
2
+ import { PluginCliIo } from "@sentry/junior-plugin-api";
3
+ //#region src/cli/plugins.d.ts
4
+ export type PluginCommandIo = PluginCliIo;
5
+ export interface CliPluginCommandDispatcher {
6
+ commandNames: string[];
7
+ run(commandName: string, argv: string[], io?: PluginCommandIo): Promise<number | undefined>;
8
+ }
9
+ /** Load the app plugin set once for one CLI process. */
10
+ export declare function loadCliPluginSet(): Promise<JuniorPluginSet | undefined>;
11
+ /** Import configured app plugins and build the plugin CLI command dispatcher. */
12
+ export declare function loadCliPluginCommands(pluginSet?: JuniorPluginSet | null): Promise<CliPluginCommandDispatcher>;
13
+ //#endregion