@ozzylabs/feedradar 0.2.1 → 0.2.2

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 (164) hide show
  1. package/README.ja.md +51 -13
  2. package/README.md +51 -13
  3. package/dist/agents/_boundary.d.ts +21 -0
  4. package/dist/agents/_boundary.d.ts.map +1 -1
  5. package/dist/agents/_boundary.js +34 -0
  6. package/dist/agents/_boundary.js.map +1 -1
  7. package/dist/agents/claude-code.d.ts.map +1 -1
  8. package/dist/agents/claude-code.js +14 -6
  9. package/dist/agents/claude-code.js.map +1 -1
  10. package/dist/agents/codex-cli.d.ts.map +1 -1
  11. package/dist/agents/codex-cli.js +13 -7
  12. package/dist/agents/codex-cli.js.map +1 -1
  13. package/dist/agents/copilot.d.ts.map +1 -1
  14. package/dist/agents/copilot.js +13 -6
  15. package/dist/agents/copilot.js.map +1 -1
  16. package/dist/agents/gemini-cli.d.ts.map +1 -1
  17. package/dist/agents/gemini-cli.js +13 -6
  18. package/dist/agents/gemini-cli.js.map +1 -1
  19. package/dist/agents/types.d.ts +26 -0
  20. package/dist/agents/types.d.ts.map +1 -1
  21. package/dist/claude-skills/dismiss/SKILL.md +4 -4
  22. package/dist/claude-skills/research/SKILL.md +2 -3
  23. package/dist/claude-skills/review/SKILL.md +2 -2
  24. package/dist/claude-skills/update/SKILL.md +7 -7
  25. package/dist/cli/_locale.d.ts +96 -0
  26. package/dist/cli/_locale.d.ts.map +1 -0
  27. package/dist/cli/_locale.js +130 -0
  28. package/dist/cli/_locale.js.map +1 -0
  29. package/dist/cli/_progress.d.ts +30 -1
  30. package/dist/cli/_progress.d.ts.map +1 -1
  31. package/dist/cli/_progress.js +9 -1
  32. package/dist/cli/_progress.js.map +1 -1
  33. package/dist/cli/dismiss.d.ts.map +1 -1
  34. package/dist/cli/dismiss.js +61 -54
  35. package/dist/cli/dismiss.js.map +1 -1
  36. package/dist/cli/doctor.d.ts +8 -0
  37. package/dist/cli/doctor.d.ts.map +1 -1
  38. package/dist/cli/doctor.js +91 -60
  39. package/dist/cli/doctor.js.map +1 -1
  40. package/dist/cli/index.d.ts +36 -1
  41. package/dist/cli/index.d.ts.map +1 -1
  42. package/dist/cli/index.js +79 -18
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/init.d.ts +15 -0
  45. package/dist/cli/init.d.ts.map +1 -1
  46. package/dist/cli/init.js +149 -51
  47. package/dist/cli/init.js.map +1 -1
  48. package/dist/cli/items.d.ts.map +1 -1
  49. package/dist/cli/items.js +51 -30
  50. package/dist/cli/items.js.map +1 -1
  51. package/dist/cli/research.d.ts.map +1 -1
  52. package/dist/cli/research.js +138 -109
  53. package/dist/cli/research.js.map +1 -1
  54. package/dist/cli/review.d.ts.map +1 -1
  55. package/dist/cli/review.js +114 -92
  56. package/dist/cli/review.js.map +1 -1
  57. package/dist/cli/routine/fire.d.ts +3 -2
  58. package/dist/cli/routine/fire.d.ts.map +1 -1
  59. package/dist/cli/routine/fire.js +30 -25
  60. package/dist/cli/routine/fire.js.map +1 -1
  61. package/dist/cli/routine/generate-pipeline.d.ts +11 -4
  62. package/dist/cli/routine/generate-pipeline.d.ts.map +1 -1
  63. package/dist/cli/routine/generate-pipeline.js +137 -77
  64. package/dist/cli/routine/generate-pipeline.js.map +1 -1
  65. package/dist/cli/routine/generate-watch.d.ts +10 -1
  66. package/dist/cli/routine/generate-watch.d.ts.map +1 -1
  67. package/dist/cli/routine/generate-watch.js +49 -42
  68. package/dist/cli/routine/generate-watch.js.map +1 -1
  69. package/dist/cli/routine.d.ts.map +1 -1
  70. package/dist/cli/routine.js +28 -24
  71. package/dist/cli/routine.js.map +1 -1
  72. package/dist/cli/source.d.ts.map +1 -1
  73. package/dist/cli/source.js +206 -182
  74. package/dist/cli/source.js.map +1 -1
  75. package/dist/cli/triage.d.ts.map +1 -1
  76. package/dist/cli/triage.js +146 -130
  77. package/dist/cli/triage.js.map +1 -1
  78. package/dist/cli/undismiss.d.ts.map +1 -1
  79. package/dist/cli/undismiss.js +32 -25
  80. package/dist/cli/undismiss.js.map +1 -1
  81. package/dist/cli/update.d.ts.map +1 -1
  82. package/dist/cli/update.js +77 -61
  83. package/dist/cli/update.js.map +1 -1
  84. package/dist/cli/watch.d.ts.map +1 -1
  85. package/dist/cli/watch.js +71 -31
  86. package/dist/cli/watch.js.map +1 -1
  87. package/dist/cli/workflow/generate-combined-with-triage.d.ts +9 -2
  88. package/dist/cli/workflow/generate-combined-with-triage.d.ts.map +1 -1
  89. package/dist/cli/workflow/generate-combined-with-triage.js +120 -71
  90. package/dist/cli/workflow/generate-combined-with-triage.js.map +1 -1
  91. package/dist/cli/workflow/generate-combined.d.ts +8 -1
  92. package/dist/cli/workflow/generate-combined.d.ts.map +1 -1
  93. package/dist/cli/workflow/generate-combined.js +39 -33
  94. package/dist/cli/workflow/generate-combined.js.map +1 -1
  95. package/dist/cli/workflow/generate-watch.d.ts +10 -1
  96. package/dist/cli/workflow/generate-watch.d.ts.map +1 -1
  97. package/dist/cli/workflow/generate-watch.js +37 -30
  98. package/dist/cli/workflow/generate-watch.js.map +1 -1
  99. package/dist/cli/workflow.d.ts.map +1 -1
  100. package/dist/cli/workflow.js +28 -23
  101. package/dist/cli/workflow.js.map +1 -1
  102. package/dist/core/config.d.ts +2 -1
  103. package/dist/core/config.d.ts.map +1 -1
  104. package/dist/core/config.js +14 -4
  105. package/dist/core/config.js.map +1 -1
  106. package/dist/core/feeds/html-js.d.ts.map +1 -1
  107. package/dist/core/feeds/html-js.js +16 -9
  108. package/dist/core/feeds/html-js.js.map +1 -1
  109. package/dist/core/feeds/types.d.ts +9 -0
  110. package/dist/core/feeds/types.d.ts.map +1 -1
  111. package/dist/core/locale.d.ts +69 -0
  112. package/dist/core/locale.d.ts.map +1 -0
  113. package/dist/core/locale.js +74 -0
  114. package/dist/core/locale.js.map +1 -0
  115. package/dist/core/watcher.d.ts +11 -0
  116. package/dist/core/watcher.d.ts.map +1 -1
  117. package/dist/core/watcher.js +21 -5
  118. package/dist/core/watcher.js.map +1 -1
  119. package/dist/i18n/index.d.ts +57 -0
  120. package/dist/i18n/index.d.ts.map +1 -0
  121. package/dist/i18n/index.js +49 -0
  122. package/dist/i18n/index.js.map +1 -0
  123. package/dist/i18n/messages/en.d.ts +993 -0
  124. package/dist/i18n/messages/en.d.ts.map +1 -0
  125. package/dist/i18n/messages/en.js +1096 -0
  126. package/dist/i18n/messages/en.js.map +1 -0
  127. package/dist/i18n/messages/ja.d.ts +13 -0
  128. package/dist/i18n/messages/ja.d.ts.map +1 -0
  129. package/dist/i18n/messages/ja.js +970 -0
  130. package/dist/i18n/messages/ja.js.map +1 -0
  131. package/dist/schemas/config.d.ts +7 -0
  132. package/dist/schemas/config.d.ts.map +1 -1
  133. package/dist/schemas/config.js +5 -0
  134. package/dist/schemas/config.js.map +1 -1
  135. package/dist/schemas/recipe.d.ts +1 -1
  136. package/dist/schemas/source.d.ts +3 -3
  137. package/dist/skills/research/SKILL.md +13 -12
  138. package/dist/skills/review/SKILL.md +13 -12
  139. package/dist/skills/update/SKILL.md +19 -19
  140. package/dist/templates/en/agents/AGENTS.md +284 -0
  141. package/dist/templates/en/claude/CLAUDE.md +5 -0
  142. package/dist/templates/en/default.md +16 -0
  143. package/dist/templates/en/digest.md +66 -0
  144. package/dist/templates/en/feedradar.md +235 -0
  145. package/dist/templates/{routines → en/routines}/pipeline.yaml.tmpl +18 -20
  146. package/dist/templates/{routines → en/routines}/watch-daily.yaml +12 -15
  147. package/dist/templates/{routines → en/routines}/watch.yaml.tmpl +11 -14
  148. package/dist/templates/{workflows → en/workflows}/combined-with-triage.template.yaml.tmpl +3 -3
  149. package/dist/templates/{workflows → en/workflows}/combined.template.yaml.tmpl +6 -6
  150. package/dist/templates/{workflows → en/workflows}/watch.template.yaml.tmpl +8 -8
  151. package/dist/templates/{workflows → en/workflows}/watch.yaml +3 -3
  152. package/dist/templates/{agents → ja/agents}/AGENTS.md +16 -16
  153. package/dist/templates/{digest.md → ja/digest.md} +5 -6
  154. package/dist/templates/{feedradar.md → ja/feedradar.md} +12 -12
  155. package/dist/templates/ja/routines/pipeline.yaml.tmpl +211 -0
  156. package/dist/templates/ja/routines/watch-daily.yaml +151 -0
  157. package/dist/templates/ja/routines/watch.yaml.tmpl +145 -0
  158. package/dist/templates/ja/workflows/combined-with-triage.template.yaml.tmpl +123 -0
  159. package/dist/templates/ja/workflows/combined.template.yaml.tmpl +109 -0
  160. package/dist/templates/ja/workflows/watch.template.yaml.tmpl +100 -0
  161. package/dist/templates/ja/workflows/watch.yaml +73 -0
  162. package/package.json +1 -1
  163. /package/dist/templates/{claude → ja/claude}/CLAUDE.md +0 -0
  164. /package/dist/templates/{default.md → ja/default.md} +0 -0
@@ -1,6 +1,8 @@
1
1
  import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
+ import { createTranslator } from "../../i18n/index.js";
5
+ import { LangFlagError, parseLangFlag, resolveWorkspaceLocale } from "../_locale.js";
4
6
  import { collectSourceHosts, isSafeRoutinePath, isSubHourlyCron, isValidCron, renderNetworkAccessBlock, SUPPORTED_MODELS, } from "./generate-watch.js";
5
7
  /**
6
8
  * `radar routine generate pipeline` (ADR-0020 D5 `pipeline`).
@@ -60,7 +62,7 @@ export const OUTPUT_MODES = ["pr", "auto-merge"];
60
62
  * step (the placeholder sits where the step body starts). Exported for unit
61
63
  * testing (mirrors the GHA generator's `buildFinalStep`).
62
64
  */
63
- export function buildPipelineLandingStep(mode) {
65
+ export function buildPipelineLandingStep(mode, locale = "en") {
64
66
  // The `${...}` / `$(...)` tokens below are bash expansions in the GENERATED
65
67
  // YAML, not JS template placeholders, so they are assembled by concatenation
66
68
  // to keep biome's noTemplateCurlyInString quiet (same convention as the GHA
@@ -77,27 +79,54 @@ export function buildPipelineLandingStep(mode) {
77
79
  ` gh pr create --fill --base main --head "${BR}" || true`,
78
80
  ];
79
81
  if (mode === "auto-merge") {
82
+ const prose = locale === "ja"
83
+ ? [
84
+ " 6. `items/`・`state/`・`research/` が変わったら、それらを `claude/*` ブランチへ",
85
+ " コミットし、プルリクエストを開き、`main` へ squash-merge する(auto-merge は",
86
+ " ここではオプトイン — 手順 5 のレビューが PR をレビュー完了にする):",
87
+ ]
88
+ : [
89
+ " 6. If `items/`, `state/`, or `research/` changed, commit them to a `claude/*`",
90
+ " branch, open a pull request, then squash-merge it to `main` (auto-merge is",
91
+ " opt-in here — the step-5 review makes the PR review-complete):",
92
+ ];
93
+ const mergeComment = locale === "ja"
94
+ ? [
95
+ " # マージを堅牢にするため --delete-branch の前に head ブランチから離れ、",
96
+ " # 即座に squash-merge する(--auto ではない: 必須チェックのない repo では",
97
+ " # --auto は決してマージしない)。一時的なマージ失敗で実行を中断せず PR を",
98
+ " # 開いたまま残すよう fail-soft にする。",
99
+ ]
100
+ : [
101
+ " # Switch off the head branch before --delete-branch so the merge is",
102
+ " # robust, then squash-merge immediately (NOT --auto: on a repo with no",
103
+ " # required checks --auto never merges). Fail-soft so a transient merge",
104
+ " # failure leaves the PR open rather than aborting the run.",
105
+ ];
80
106
  return [
81
- " 6. If `items/`, `state/`, or `research/` changed, commit them to a `claude/*`",
82
- " branch, open a pull request, then squash-merge it to `main` (auto-merge is",
83
- " opt-in here — the step-5 review makes the PR review-complete):",
107
+ ...prose,
84
108
  "",
85
109
  " ```bash",
86
110
  " if ! git diff --quiet items/ state/ research/; then",
87
111
  ...common,
88
- " # Switch off the head branch before --delete-branch so the merge is",
89
- " # robust, then squash-merge immediately (NOT --auto: on a repo with no",
90
- " # required checks --auto never merges). Fail-soft so a transient merge",
91
- " # failure leaves the PR open rather than aborting the run.",
112
+ ...mergeComment,
92
113
  " git switch main",
93
114
  ` gh pr merge "${BR}" --squash --delete-branch || true`,
94
115
  " fi",
95
116
  " ```",
96
117
  ].join("\n");
97
118
  }
119
+ const prose = locale === "ja"
120
+ ? [
121
+ " 6. `items/`・`state/`・`research/` が変わったら、それらを `claude/*` ブランチへ",
122
+ " コミットし、プルリクエストを開く(`main` へは push しない):",
123
+ ]
124
+ : [
125
+ " 6. If `items/`, `state/`, or `research/` changed, commit them to a `claude/*`",
126
+ " branch and open a pull request (do NOT push to `main`):",
127
+ ];
98
128
  return [
99
- " 6. If `items/`, `state/`, or `research/` changed, commit them to a `claude/*`",
100
- " branch and open a pull request (do NOT push to `main`):",
129
+ ...prose,
101
130
  "",
102
131
  " ```bash",
103
132
  " if ! git diff --quiet items/ state/ research/; then",
@@ -118,35 +147,62 @@ export function buildPipelineLandingStep(mode) {
118
147
  *
119
148
  * Exported for unit testing (mirrors the GHA generator's exported builders).
120
149
  */
121
- export function buildOutputGateConstraint(mode) {
150
+ export function buildOutputGateConstraint(mode, locale = "en") {
122
151
  if (mode === "auto-merge") {
152
+ if (locale === "ja") {
153
+ return [
154
+ " - auto-merge はここでは意図的: この routine は `claude/pipeline/...` PR を開いてから",
155
+ " `main` へ squash-merge する。手順 5 のレビューが PR をレビュー完了にする。",
156
+ ].join("\n");
157
+ }
123
158
  return [
124
159
  " - Auto-merge is intentional here: this routine opens a `claude/pipeline/...`",
125
160
  " PR then squash-merges it to `main`. The step-5 review makes the PR",
126
- " review-complete (ADR-0020 D3a opt-in auto-merge).",
161
+ " review-complete.",
162
+ ].join("\n");
163
+ }
164
+ if (locale === "ja") {
165
+ return [
166
+ " - `main` へ直接 push しない。常に `claude/pipeline/...` ブランチと PR を使う",
167
+ " (出力ゲート。auto-merge なし)。",
127
168
  ].join("\n");
128
169
  }
129
170
  return [
130
171
  " - Do NOT push to `main` directly. Always use a `claude/pipeline/...` branch",
131
- " and a PR (ADR-0020 D3a output gate; no auto-merge).",
172
+ " and a PR (output gate; no auto-merge).",
132
173
  ].join("\n");
133
174
  }
134
175
  /**
135
176
  * Build the `notes:` output-gate sentence for the given output mode. Mirrors
136
177
  * `buildOutputGateConstraint` but phrased for the ops `notes` block.
137
178
  */
138
- export function buildOutputGateNote(mode) {
179
+ export function buildOutputGateNote(mode, locale = "en") {
139
180
  if (mode === "auto-merge") {
181
+ if (locale === "ja") {
182
+ return [
183
+ " 出力は `claude/*` ブランチ / PR にコミットされ、その後 main へ squash-merge される",
184
+ " (auto-merge はオプトイン。手順 5 のレビューが PR をレビュー完了にする)。",
185
+ " 単一の Claude セッション、spawn なし: GHA パイプラインのクロスエージェント",
186
+ " レビューはここには存在しない。",
187
+ ].join("\n");
188
+ }
140
189
  return [
141
190
  " Output is committed to a `claude/*` branch / PR, then squash-merged to main",
142
- " (auto-merge is opt-in; the step-5 review makes the PR review-complete",
143
- " ADR-0020 D3a). Single Claude session, no spawn (D2): the cross-agent review",
191
+ " (auto-merge is opt-in; the step-5 review makes the PR review-complete).",
192
+ " Single Claude session, no spawn: the cross-agent review",
144
193
  " of the GHA pipeline is NOT present here.",
145
194
  ].join("\n");
146
195
  }
196
+ if (locale === "ja") {
197
+ return [
198
+ " 出力は `claude/*` ブランチ / PR のみにコミットされる(main へ直接ではない)。",
199
+ " 単一の Claude セッション、spawn なし: GHA パイプラインのクロスエージェント",
200
+ " レビューはここには存在しない。",
201
+ ].join("\n");
202
+ }
147
203
  return [
148
- " Output is committed to a `claude/*` branch / PR only (never main directly;",
149
- " ADR-0020 D3a). Single Claude session, no spawn (D2): the cross-agent review",
204
+ " Output is committed to a `claude/*` branch / PR only (never main directly).",
205
+ " Single Claude session, no spawn: the cross-agent review",
150
206
  " of the GHA pipeline is NOT present here.",
151
207
  ].join("\n");
152
208
  }
@@ -208,6 +264,8 @@ export function renderPipelineRoutineTemplate(template, values) {
208
264
  */
209
265
  export async function generatePipelineRoutine(options) {
210
266
  const { cwd, name, repository, cron, timezone, model, maxItems, outputMode, output, force } = options;
267
+ const locale = options.locale ?? "en";
268
+ const t = createTranslator(locale);
211
269
  const log = options.io?.log ?? ((m) => console.log(m));
212
270
  const warn = options.io?.warn ?? ((m) => console.warn(m));
213
271
  if (!OUTPUT_MODES.includes(outputMode)) {
@@ -231,7 +289,7 @@ export async function generatePipelineRoutine(options) {
231
289
  throw new Error(`invalid --repo '${repository}' (expected owner/repo)`);
232
290
  }
233
291
  const templatesRoot = options.templatesRoot ?? (await resolveTemplatesRoot());
234
- const templatePath = join(templatesRoot, "routines", "pipeline.yaml.tmpl");
292
+ const templatePath = join(templatesRoot, locale, "routines", "pipeline.yaml.tmpl");
235
293
  if (!(await pathExists(templatePath))) {
236
294
  throw new Error(`bundled template not found: ${templatePath}`);
237
295
  }
@@ -245,9 +303,9 @@ export async function generatePipelineRoutine(options) {
245
303
  model,
246
304
  maxItems,
247
305
  networkAccessBlock: renderNetworkAccessBlock(hosts),
248
- landingStep: buildPipelineLandingStep(outputMode),
249
- outputGateConstraint: buildOutputGateConstraint(outputMode),
250
- outputGateNote: buildOutputGateNote(outputMode),
306
+ landingStep: buildPipelineLandingStep(outputMode, locale),
307
+ outputGateConstraint: buildOutputGateConstraint(outputMode, locale),
308
+ outputGateNote: buildOutputGateNote(outputMode, locale),
251
309
  allowUnrestrictedGitPush: outputMode === "auto-merge",
252
310
  });
253
311
  const destAbs = isAbsolute(output) ? output : join(cwd, output);
@@ -256,44 +314,47 @@ export async function generatePipelineRoutine(options) {
256
314
  throw new Error(`output file already exists: ${destRel} (use --force to overwrite)`);
257
315
  }
258
316
  if ((await pathExists(destAbs)) && force) {
259
- warn(`routine generate pipeline: overwriting existing file ${destRel}`);
317
+ warn(t("cli.routine.generatePipelineOverwriting", { path: destRel }));
260
318
  }
261
319
  await mkdir(dirname(destAbs), { recursive: true });
262
320
  await writeFile(destAbs, rendered, "utf8");
263
- log(`routine generate pipeline: wrote ${destRel}`);
264
- log(`routine generate pipeline: name='${name}', repo='${repository}', cron='${cron}', model='${model}', max-items=${maxItems}, output-mode='${outputMode}'`);
321
+ log(t("cli.routine.generatePipelineWrote", { path: destRel }));
322
+ log(t("cli.routine.generatePipelineSummary", {
323
+ name,
324
+ repo: repository,
325
+ cron,
326
+ model,
327
+ maxItems,
328
+ outputMode,
329
+ }));
265
330
  if (outputMode === "auto-merge") {
266
- warn("routine generate pipeline: --output-mode auto-merge sets " +
267
- "`allow_unrestricted_git_push: true`, but that is NECESSARY, NOT SUFFICIENT — " +
268
- "you must ALSO turn ON the Web UI 'Allow unrestricted branch pushes' toggle " +
269
- "(the RemoteTrigger API does not accept this field). Note that unattended AI " +
270
- "output then lands on the default branch with NO human review.");
331
+ warn(t("cli.routine.autoMergeWarning", { cmd: "routine generate pipeline" }));
271
332
  }
272
333
  log("");
273
- log("Routines has no declarative apply API — paste this routine into the Web UI by hand:");
274
- log(" 1. Open https://claude.ai/code/routines and click New routine.");
275
- log(" 2. Fill the form fields from the YAML (Name / Model / Repositories / Trigger / Permissions).");
276
- log(" 3. For the multi-line Instructions and Setup script fields, extract them with yq:");
277
- log(` yq -r '.instructions' ${destRel}`);
278
- log(` yq -r '.environment.setup_script' ${destRel}`);
279
- log(" 4. After registering, copy the issued routine_id (trig_xxxx) back into the YAML and set status: active.");
334
+ log(t("cli.routine.pasteNoApi"));
335
+ log(t("cli.routine.pasteStep1"));
336
+ log(t("cli.routine.pasteStep2"));
337
+ log(t("cli.routine.pasteStep3"));
338
+ log(t("cli.routine.pasteYqInstructions", { path: destRel }));
339
+ log(t("cli.routine.pasteYqSetupScript", { path: destRel }));
340
+ log(t("cli.routine.pasteStep4"));
280
341
  log("");
281
- log("Note on /schedule (Claude Code): it is conversational — `/schedule <description>`");
282
- log("to create one, plus `list` / `update` / `run` subcommands. There is no flag-based");
283
- log("form (no `--name` / `--cron` / `--repo` arguments). It also cannot ingest this YAML");
284
- log("verbatim, so for the long Instructions field the Web UI paste flow above (yq");
285
- log("extraction) is the practical path. Finally, the unrestricted-git-push permission an");
286
- log("auto-merge routine needs is set only via the Web UI 'Allow unrestricted branch");
287
- log("pushes' toggle — /schedule cannot configure it.");
342
+ log(t("cli.routine.scheduleNote1"));
343
+ log(t("cli.routine.scheduleNote2"));
344
+ log(t("cli.routine.scheduleNote3"));
345
+ log(t("cli.routine.scheduleNote4"));
346
+ log(t("cli.routine.scheduleNote5"));
347
+ log(t("cli.routine.scheduleNote6"));
348
+ log(t("cli.routine.scheduleNote7"));
288
349
  log("");
289
- log("Single Claude session, no spawn (ADR-0020 D2): unlike the GHA combined-with-triage");
290
- log("workflow, there is NO cross-agent review here — one Claude does every step.");
291
- log(`Item caps are CLI-enforced (ADR-0020 D3e): triage --max-items ${maxItems} / items --limit ${maxItems}.`);
350
+ log(t("cli.routine.pipelineNoSpawn1"));
351
+ log(t("cli.routine.pipelineNoSpawn2"));
352
+ log(t("cli.routine.pipelineItemCaps", { maxItems }));
292
353
  if (outputMode === "auto-merge") {
293
- log("Output gate (ADR-0020 D3a): this routine opens a claude/* PR then squash-merges it to main (review-complete via step 5).");
354
+ log(t("cli.routine.outputGateAutoMerge"));
294
355
  }
295
356
  else {
296
- log("Output gate (ADR-0020 D3a): this routine writes to a claude/* branch / PR only — never main directly.");
357
+ log(t("cli.routine.outputGateBranchPr"));
297
358
  }
298
359
  return { outputPath: destRel };
299
360
  }
@@ -408,32 +469,11 @@ export function parseGeneratePipelineRoutineArgs(args) {
408
469
  help,
409
470
  };
410
471
  }
411
- export function printGeneratePipelineRoutineHelp(log) {
412
- log("Usage: radar routine generate pipeline [options]");
413
- log("");
414
- log("Generates a Claude Code Routine YAML whose single session runs the FULL");
415
- log("pipeline — `radar watch run` -> triage -> research -> review — IN SEQUENCE,");
416
- log("processing items ONE AT A TIME (ADR-0020 D5 `pipeline`). It does NOT spawn");
417
- log("other agents (D2), so the cross-agent review of the GHA combined-with-triage");
418
- log("workflow is NOT present. Per-run item count is bounded by CLI flags (D3e).");
419
- log("");
420
- log("Options:");
421
- log(' --name <name> Routine name (default: "feedradar-pipeline")');
422
- log(" Also the default output filename.");
423
- log(" --repo <owner/repo> Target repository (default: <owner>/<repo>)");
424
- log(' --cron <expression> 5-field cron, min interval 1 HOUR (default: "0 * * * *")');
425
- log(' Sub-hourly (e.g. "*/5 * * * *") is rejected.');
426
- log(' --timezone <tz> Schedule timezone (default: "UTC")');
427
- log(` --model <name> ${SUPPORTED_MODELS.join(" | ")}`);
428
- log(" (default: claude-sonnet-4-6)");
429
- log(` --max-items N Hard cap on items triaged/researched/reviewed per run`);
430
- log(` (default: ${PIPELINE_DEFAULT_MAX_ITEMS}). Drives triage --max-items and items --limit.`);
431
- log(" --output-mode <mode> pr | auto-merge (default: pr). 'auto-merge' squash-merges");
432
- log(" the routine's own PR to main (requires the Web UI 'Allow");
433
- log(" unrestricted branch pushes' toggle).");
434
- log(" --output <path> Output file under .claude/routines/");
435
- log(" (default: .claude/routines/<name>.yaml)");
436
- log(" --force, -f Overwrite existing output file");
472
+ export function printGeneratePipelineRoutineHelp(t, log) {
473
+ log(t("cli.routine.generatePipelineHelp", {
474
+ models: SUPPORTED_MODELS.join(" | "),
475
+ maxItems: PIPELINE_DEFAULT_MAX_ITEMS,
476
+ }));
437
477
  }
438
478
  /**
439
479
  * Entry point invoked by `runRoutine` (in `src/cli/routine.ts`) when the user
@@ -444,16 +484,35 @@ export function printGeneratePipelineRoutineHelp(log) {
444
484
  export async function runGeneratePipelineRoutine(args, io = {}, cwd = process.cwd()) {
445
485
  const log = io.log ?? ((m) => console.log(m));
446
486
  const error = io.error ?? ((m) => console.error(m));
487
+ // Strip `--lang <en|ja>` before the type parser sees argv (mirrors `init`).
488
+ let langFlag;
489
+ let rest;
490
+ try {
491
+ const langState = parseLangFlag(args);
492
+ langFlag = langState.flag;
493
+ rest = langState.rest;
494
+ }
495
+ catch (e) {
496
+ if (e instanceof LangFlagError) {
497
+ error(`routine generate pipeline: ${e.message}`);
498
+ return 2;
499
+ }
500
+ throw e;
501
+ }
447
502
  let parsed;
448
503
  try {
449
- parsed = parseGeneratePipelineRoutineArgs(args);
504
+ parsed = parseGeneratePipelineRoutineArgs(rest);
450
505
  }
451
506
  catch (e) {
452
507
  error(`routine generate pipeline: ${e instanceof Error ? e.message : String(e)}`);
453
508
  return 2;
454
509
  }
510
+ // Resolve the locale before the help branch so `--help` honors --lang / env /
511
+ // config (the per-type help is now sourced from the i18n catalog, #337).
512
+ const locale = await resolveWorkspaceLocale({ flag: langFlag, cwd, warn: error });
513
+ const t = createTranslator(locale);
455
514
  if (parsed.help) {
456
- printGeneratePipelineRoutineHelp(log);
515
+ printGeneratePipelineRoutineHelp(t, log);
457
516
  return 0;
458
517
  }
459
518
  try {
@@ -468,6 +527,7 @@ export async function runGeneratePipelineRoutine(args, io = {}, cwd = process.cw
468
527
  outputMode: parsed.outputMode,
469
528
  output: parsed.output,
470
529
  force: parsed.force,
530
+ locale,
471
531
  io,
472
532
  });
473
533
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"generate-pipeline.js","sourceRoot":"","sources":["../../../src/cli/routine/generate-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,WAAW,EAEX,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,YAAY,CAAU,CAAC;AAG1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAgB;IACvD,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,CAAC;IAC5B,MAAM,WAAW,GAAG,GAAG,GAAG,wBAAwB,CAAC;IACnD,MAAM,WAAW,GAAG,GAAG,GAAG,qBAAqB,CAAC;IAChD,MAAM,MAAM,GAAG;QACb,kCAAkC,WAAW,GAAG;QAChD,yBAAyB,EAAE,GAAG;QAC9B,wCAAwC;QACxC,iEAAiE,WAAW,GAAG;QAC/E,8BAA8B,EAAE,GAAG;QACnC,kDAAkD,EAAE,WAAW;KAChE,CAAC;IACF,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO;YACL,iFAAiF;YACjF,iFAAiF;YACjF,qEAAqE;YACrE,EAAE;YACF,cAAc;YACd,0DAA0D;YAC1D,GAAG,MAAM;YACT,4EAA4E;YAC5E,+EAA+E;YAC/E,+EAA+E;YAC/E,mEAAmE;YACnE,wBAAwB;YACxB,uBAAuB,EAAE,oCAAoC;YAC7D,SAAS;YACT,UAAU;SACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,iFAAiF;QACjF,8DAA8D;QAC9D,EAAE;QACF,cAAc;QACd,0DAA0D;QAC1D,GAAG,MAAM;QACT,SAAS;QACT,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAgB;IACxD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO;YACL,gFAAgF;YAChF,wEAAwE;YACxE,uDAAuD;SACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,+EAA+E;QAC/E,yDAAyD;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO;YACL,+EAA+E;YAC/E,2EAA2E;YAC3E,+EAA+E;YAC/E,4CAA4C;SAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,8EAA8E;QAC9E,+EAA+E;QAC/E,4CAA4C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,oBAAoB;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAgB,EAChB,MAYC;IAED,OAAO,QAAQ;SACZ,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;SACrC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC;SACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;SACrC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC;SAC7C,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC;SACvC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACrD,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,kBAAkB,CAAC;SACjE,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC;SACnD,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,oBAAoB,CAAC;SACrE,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,cAAc,CAAC;SACzD,OAAO,CAAC,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC3F,CAAC;AAwBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GACzF,OAAO,CAAC;IACV,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,0BAA0B,UAAU,uBAAuB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,mDAAmD,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,0DAA0D;YAC/E,qEAAqE;YACrE,qEAAqE,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,iCAAiC,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,qEAAqE,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,yBAAyB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,EAAE;QACvD,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,kBAAkB,EAAE,wBAAwB,CAAC,KAAK,CAAC;QACnD,WAAW,EAAE,wBAAwB,CAAC,UAAU,CAAC;QACjD,oBAAoB,EAAE,yBAAyB,CAAC,UAAU,CAAC;QAC3D,cAAc,EAAE,mBAAmB,CAAC,UAAU,CAAC;QAC/C,wBAAwB,EAAE,UAAU,KAAK,YAAY;KACtD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpE,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,6BAA6B,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,wDAAwD,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3C,GAAG,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IACnD,GAAG,CACD,oCAAoC,IAAI,YAAY,UAAU,YAAY,IAAI,aAAa,KAAK,gBAAgB,QAAQ,kBAAkB,UAAU,GAAG,CACxJ,CAAC;IACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,IAAI,CACF,2DAA2D;YACzD,+EAA+E;YAC/E,6EAA6E;YAC7E,8EAA8E;YAC9E,+DAA+D,CAClE,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,qFAAqF,CAAC,CAAC;IAC3F,GAAG,CAAC,kEAAkE,CAAC,CAAC;IACxE,GAAG,CACD,gGAAgG,CACjG,CAAC;IACF,GAAG,CAAC,qFAAqF,CAAC,CAAC;IAC3F,GAAG,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IAC3D,GAAG,CACD,2GAA2G,CAC5G,CAAC;IACF,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACzF,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACzF,GAAG,CAAC,qFAAqF,CAAC,CAAC;IAC3F,GAAG,CAAC,8EAA8E,CAAC,CAAC;IACpF,GAAG,CAAC,qFAAqF,CAAC,CAAC;IAC3F,GAAG,CAAC,gFAAgF,CAAC,CAAC;IACtF,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACvD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,oFAAoF,CAAC,CAAC;IAC1F,GAAG,CAAC,6EAA6E,CAAC,CAAC;IACnF,GAAG,CACD,iEAAiE,QAAQ,oBAAoB,QAAQ,GAAG,CACzG,CAAC;IACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,GAAG,CACD,0HAA0H,CAC3H,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,GAAG,CACD,uGAAuG,CACxG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,IAAc;IAC7D,IAAI,IAAI,GAAG,oBAAoB,CAAC;IAChC,IAAI,UAAU,GAAG,gBAAgB,CAAC;IAClC,IAAI,IAAI,GAAG,WAAW,CAAC,CAAC,0CAA0C;IAClE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,KAAK,GAAmB,mBAAmB,CAAC;IAChD,IAAI,QAAQ,GAAG,0BAA0B,CAAC;IAC1C,IAAI,UAAU,GAAe,IAAI,CAAC;IAClC,IAAI,MAA0B,CAAC;IAC/B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,GAAG,KAAK,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,UAAU,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,GAAG,KAAK,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CACb,kCAAkC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,CACjF,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,KAAuB,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,GAAG,CAAC,CAAC;YACnF,CAAC;YACD,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,wCAAwC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,CACnF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,KAAmB,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,UAAU;QACV,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC;QAC7D,KAAK;QACL,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,GAAwB;IACvE,GAAG,CAAC,kDAAkD,CAAC,CAAC;IACxD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,yEAAyE,CAAC,CAAC;IAC/E,GAAG,CAAC,6EAA6E,CAAC,CAAC;IACnF,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAClF,GAAG,CAAC,8EAA8E,CAAC,CAAC;IACpF,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAClF,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,UAAU,CAAC,CAAC;IAChB,GAAG,CAAC,sEAAsE,CAAC,CAAC;IAC5E,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACjE,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAC3E,GAAG,CAAC,kFAAkF,CAAC,CAAC;IACxF,GAAG,CAAC,sEAAsE,CAAC,CAAC;IAC5E,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAClE,GAAG,CAAC,2BAA2B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAC5D,GAAG,CAAC,+EAA+E,CAAC,CAAC;IACrF,GAAG,CACD,qCAAqC,0BAA0B,iDAAiD,CACjH,CAAC;IACF,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACzF,GAAG,CAAC,kFAAkF,CAAC,CAAC;IACxF,GAAG,CAAC,8DAA8D,CAAC,CAAC;IACpE,GAAG,CAAC,6DAA6D,CAAC,CAAC;IACnE,GAAG,CAAC,iEAAiE,CAAC,CAAC;IACvE,GAAG,CAAC,wDAAwD,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAc,EACd,KAAgB,EAAE,EAClB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,gCAAgC,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC;YAC5B,GAAG;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,EAAE;SACH,CAAC,CAAC;QACH,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"generate-pipeline.js","sourceRoot":"","sources":["../../../src/cli/routine/generate-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,WAAW,EAEX,wBAAwB,EACxB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,YAAY,CAAU,CAAC;AAG1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAgB,EAAE,SAAiB,IAAI;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,CAAC;IAC5B,MAAM,WAAW,GAAG,GAAG,GAAG,wBAAwB,CAAC;IACnD,MAAM,WAAW,GAAG,GAAG,GAAG,qBAAqB,CAAC;IAChD,MAAM,MAAM,GAAG;QACb,kCAAkC,WAAW,GAAG;QAChD,yBAAyB,EAAE,GAAG;QAC9B,wCAAwC;QACxC,iEAAiE,WAAW,GAAG;QAC/E,8BAA8B,EAAE,GAAG;QACnC,kDAAkD,EAAE,WAAW;KAChE,CAAC;IACF,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,KAAK,GACT,MAAM,KAAK,IAAI;YACb,CAAC,CAAC;gBACE,iEAAiE;gBACjE,6DAA6D;gBAC7D,8CAA8C;aAC/C;YACH,CAAC,CAAC;gBACE,iFAAiF;gBACjF,iFAAiF;gBACjF,qEAAqE;aACtE,CAAC;QACR,MAAM,YAAY,GAChB,MAAM,KAAK,IAAI;YACb,CAAC,CAAC;gBACE,yDAAyD;gBACzD,6DAA6D;gBAC7D,oDAAoD;gBACpD,mCAAmC;aACpC;YACH,CAAC,CAAC;gBACE,4EAA4E;gBAC5E,+EAA+E;gBAC/E,+EAA+E;gBAC/E,mEAAmE;aACpE,CAAC;QACR,OAAO;YACL,GAAG,KAAK;YACR,EAAE;YACF,cAAc;YACd,0DAA0D;YAC1D,GAAG,MAAM;YACT,GAAG,YAAY;YACf,wBAAwB;YACxB,uBAAuB,EAAE,oCAAoC;YAC7D,SAAS;YACT,UAAU;SACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GACT,MAAM,KAAK,IAAI;QACb,CAAC,CAAC;YACE,iEAAiE;YACjE,4CAA4C;SAC7C;QACH,CAAC,CAAC;YACE,iFAAiF;YACjF,8DAA8D;SAC/D,CAAC;IACR,OAAO;QACL,GAAG,KAAK;QACR,EAAE;QACF,cAAc;QACd,0DAA0D;QAC1D,GAAG,MAAM;QACT,SAAS;QACT,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAgB,EAAE,SAAiB,IAAI;IAC/E,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO;gBACL,uEAAuE;gBACvE,yDAAyD;aAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO;YACL,gFAAgF;YAChF,wEAAwE;YACxE,sBAAsB;SACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,+DAA+D;YAC/D,4BAA4B;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,+EAA+E;QAC/E,4CAA4C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgB,EAAE,SAAiB,IAAI;IACzE,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO;gBACL,gEAAgE;gBAChE,kDAAkD;gBAClD,mDAAmD;gBACnD,mBAAmB;aACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO;YACL,+EAA+E;YAC/E,2EAA2E;YAC3E,2DAA2D;YAC3D,4CAA4C;SAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO;YACL,sDAAsD;YACtD,mDAAmD;YACnD,mBAAmB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,+EAA+E;QAC/E,2DAA2D;QAC3D,4CAA4C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,oBAAoB;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAgB,EAChB,MAYC;IAED,OAAO,QAAQ;SACZ,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;SACrC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC;SACjD,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC;SACrC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC;SAC7C,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC;SACvC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACrD,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,kBAAkB,CAAC;SACjE,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC;SACnD,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,oBAAoB,CAAC;SACrE,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,cAAc,CAAC;SACzD,OAAO,CAAC,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC3F,CAAC;AA6BD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GACzF,OAAO,CAAC;IACV,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IAC9C,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,0BAA0B,UAAU,uBAAuB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,mDAAmD,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,0DAA0D;YAC/E,qEAAqE;YACrE,qEAAqE,CACxE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,iCAAiC,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,qEAAqE,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,yBAAyB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,MAAM,oBAAoB,EAAE,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACnF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,EAAE;QACvD,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,kBAAkB,EAAE,wBAAwB,CAAC,KAAK,CAAC;QACnD,WAAW,EAAE,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC;QACzD,oBAAoB,EAAE,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC;QACnE,cAAc,EAAE,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC;QACvD,wBAAwB,EAAE,UAAU,KAAK,YAAY;KACtD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpE,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,6BAA6B,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,yCAAyC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE3C,GAAG,CAAC,CAAC,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/D,GAAG,CACD,CAAC,CAAC,qCAAqC,EAAE;QACvC,IAAI;QACJ,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,UAAU;KACX,CAAC,CACH,CAAC;IACF,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,CAAC,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,IAAc;IAC7D,IAAI,IAAI,GAAG,oBAAoB,CAAC;IAChC,IAAI,UAAU,GAAG,gBAAgB,CAAC;IAClC,IAAI,IAAI,GAAG,WAAW,CAAC,CAAC,0CAA0C;IAClE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,KAAK,GAAmB,mBAAmB,CAAC;IAChD,IAAI,QAAQ,GAAG,0BAA0B,CAAC;IAC1C,IAAI,UAAU,GAAe,IAAI,CAAC;IAClC,IAAI,MAA0B,CAAC;IAC/B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,GAAG,KAAK,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,UAAU,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,GAAG,KAAK,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CACb,kCAAkC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,CACjF,CAAC;YACJ,CAAC;YACD,KAAK,GAAG,KAAuB,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,uDAAuD,KAAK,GAAG,CAAC,CAAC;YACnF,CAAC;YACD,QAAQ,GAAG,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,wCAAwC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,GAAG,CACnF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,KAAmB,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACzE,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,UAAU;QACV,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC;QAC7D,KAAK;QACL,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,CAAa,EAAE,GAAwB;IACtF,GAAG,CACD,CAAC,CAAC,kCAAkC,EAAE;QACpC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC,QAAQ,EAAE,0BAA0B;KACrC,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAc,EACd,KAAgB,EAAE,EAClB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,4EAA4E;IAC5E,IAAI,QAA4B,CAAC;IACjC,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;QAC1B,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;YAC/B,KAAK,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,gCAAgC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC;YAC5B,GAAG;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM;YACN,EAAE;SACH,CAAC,CAAC;QACH,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -1,3 +1,5 @@
1
+ import type { Locale } from "../../core/locale.js";
2
+ import { type Translator } from "../../i18n/index.js";
1
3
  /**
2
4
  * Sinks for the `routine generate watch` command's user-facing output.
3
5
  *
@@ -126,6 +128,13 @@ export interface GenerateWatchRoutineOptions {
126
128
  model: SupportedModel;
127
129
  output: string;
128
130
  force: boolean;
131
+ /**
132
+ * UI locale selecting the per-locale template subtree
133
+ * (`<templatesRoot>/<locale>/routines/`). Defaults to `en` (#315). Only the
134
+ * `notes:` / `instructions:` prose and comments differ; the cron / model /
135
+ * network_access functional fields are identical across locales.
136
+ */
137
+ locale?: Locale;
129
138
  /** Test seam: override the templates root location. */
130
139
  templatesRoot?: string;
131
140
  io?: RoutineIO;
@@ -162,7 +171,7 @@ interface ParsedFlags {
162
171
  * AFTER the loop once `--name` is known (a `--output` flag, if given, wins).
163
172
  */
164
173
  export declare function parseGenerateWatchRoutineArgs(args: string[]): ParsedFlags;
165
- export declare function printGenerateWatchRoutineHelp(log: (m: string) => void): void;
174
+ export declare function printGenerateWatchRoutineHelp(t: Translator, log: (m: string) => void): void;
166
175
  /**
167
176
  * Entry point invoked by `runRoutine` (in `src/cli/routine.ts`) when the user
168
177
  * types `radar routine generate watch`. Translates parsed flags into
@@ -1 +1 @@
1
- {"version":3,"file":"generate-watch.d.ts","sourceRoot":"","sources":["../../../src/cli/routine/generate-watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-watch.d.ts","sourceRoot":"","sources":["../../../src/cli/routine/generate-watch.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { dirname, isAbsolute, join, normalize, relative, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { loadSources } from "../../core/watcher.js";
5
+ import { createTranslator } from "../../i18n/index.js";
6
+ import { LangFlagError, parseLangFlag, resolveWorkspaceLocale } from "../_locale.js";
5
7
  /**
6
8
  * Models supported by `--model`. Claude Routines run on the subscription
7
9
  * Claude session (ADR-0020 D2), so the only valid models are Claude family
@@ -74,8 +76,8 @@ export function renderNetworkAccessBlock(hosts) {
74
76
  " # Trusted (Default): only a curated host allowlist; ANY other host gets",
75
77
  " # 403 (x-deny-reason: host_not_allowed) — so it CANNOT fetch arbitrary feeds.",
76
78
  " # Custom: you supply the allowlist — use this, scoped to your subscribed feeds.",
77
- " # Full: unrestricted egress — NOT used (ADR-0020 D3c / ADR-0009 D5b limit",
78
- " # outbound to sources/*.yaml hosts; never open the routine to any host).",
79
+ " # Full: unrestricted egress — NOT used (outbound is limited to",
80
+ " # sources/*.yaml hosts; never open the routine to any host).",
79
81
  ];
80
82
  if (hosts.length > 0) {
81
83
  lines.push(" # Register these subscribed-feed hosts (from sources/*.yaml) in the Web UI", " # Custom network access allowlist:");
@@ -238,6 +240,8 @@ export function renderWatchRoutineTemplate(template, values) {
238
240
  */
239
241
  export async function generateWatchRoutine(options) {
240
242
  const { cwd, name, repository, cron, timezone, model, output, force } = options;
243
+ const locale = options.locale ?? "en";
244
+ const t = createTranslator(locale);
241
245
  const log = options.io?.log ?? ((m) => console.log(m));
242
246
  const warn = options.io?.warn ?? ((m) => console.warn(m));
243
247
  if (!isValidCron(cron)) {
@@ -255,7 +259,7 @@ export async function generateWatchRoutine(options) {
255
259
  throw new Error(`invalid --repo '${repository}' (expected owner/repo)`);
256
260
  }
257
261
  const templatesRoot = options.templatesRoot ?? (await resolveTemplatesRoot());
258
- const templatePath = join(templatesRoot, "routines", "watch.yaml.tmpl");
262
+ const templatePath = join(templatesRoot, locale, "routines", "watch.yaml.tmpl");
259
263
  if (!(await pathExists(templatePath))) {
260
264
  throw new Error(`bundled template not found: ${templatePath}`);
261
265
  }
@@ -275,30 +279,30 @@ export async function generateWatchRoutine(options) {
275
279
  throw new Error(`output file already exists: ${destRel} (use --force to overwrite)`);
276
280
  }
277
281
  if ((await pathExists(destAbs)) && force) {
278
- warn(`routine generate watch: overwriting existing file ${destRel}`);
282
+ warn(t("cli.routine.generateWatchOverwriting", { path: destRel }));
279
283
  }
280
284
  await mkdir(dirname(destAbs), { recursive: true });
281
285
  await writeFile(destAbs, rendered, "utf8");
282
- log(`routine generate watch: wrote ${destRel}`);
283
- log(`routine generate watch: name='${name}', repo='${repository}', cron='${cron}', model='${model}'`);
286
+ log(t("cli.routine.generateWatchWrote", { path: destRel }));
287
+ log(t("cli.routine.generateWatchSummary", { name, repo: repository, cron, model }));
284
288
  log("");
285
- log("Routines has no declarative apply API — paste this routine into the Web UI by hand:");
286
- log(" 1. Open https://claude.ai/code/routines and click New routine.");
287
- log(" 2. Fill the form fields from the YAML (Name / Model / Repositories / Trigger / Permissions).");
288
- log(" 3. For the multi-line Instructions and Setup script fields, extract them with yq:");
289
- log(` yq -r '.instructions' ${destRel}`);
290
- log(` yq -r '.environment.setup_script' ${destRel}`);
291
- log(" 4. After registering, copy the issued routine_id (trig_xxxx) back into the YAML and set status: active.");
289
+ log(t("cli.routine.pasteNoApi"));
290
+ log(t("cli.routine.pasteStep1"));
291
+ log(t("cli.routine.pasteStep2"));
292
+ log(t("cli.routine.pasteStep3"));
293
+ log(t("cli.routine.pasteYqInstructions", { path: destRel }));
294
+ log(t("cli.routine.pasteYqSetupScript", { path: destRel }));
295
+ log(t("cli.routine.pasteStep4"));
292
296
  log("");
293
- log("Note on /schedule (Claude Code): it is conversational — `/schedule <description>`");
294
- log("to create one, plus `list` / `update` / `run` subcommands. There is no flag-based");
295
- log("form (no `--name` / `--cron` / `--repo` arguments). It also cannot ingest this YAML");
296
- log("verbatim, so for the long Instructions field the Web UI paste flow above (yq");
297
- log("extraction) is the practical path. Finally, the unrestricted-git-push permission an");
298
- log("auto-merge routine needs is set only via the Web UI 'Allow unrestricted branch");
299
- log("pushes' toggle — /schedule cannot configure it.");
297
+ log(t("cli.routine.scheduleNote1"));
298
+ log(t("cli.routine.scheduleNote2"));
299
+ log(t("cli.routine.scheduleNote3"));
300
+ log(t("cli.routine.scheduleNote4"));
301
+ log(t("cli.routine.scheduleNote5"));
302
+ log(t("cli.routine.scheduleNote6"));
303
+ log(t("cli.routine.scheduleNote7"));
300
304
  log("");
301
- log("Output gate (ADR-0020 D3a): this routine writes to a claude/* branch / PR only — never main directly.");
305
+ log(t("cli.routine.outputGateBranchPr"));
302
306
  return { outputPath: destRel };
303
307
  }
304
308
  /**
@@ -387,25 +391,8 @@ export function parseGenerateWatchRoutineArgs(args) {
387
391
  help,
388
392
  };
389
393
  }
390
- export function printGenerateWatchRoutineHelp(log) {
391
- log("Usage: radar routine generate watch [options]");
392
- log("");
393
- log("Generates a Claude Code Routine YAML that runs `radar watch run` on a schedule");
394
- log("and commits detected items/state to a claude/* branch (ADR-0020 D5 `watch`).");
395
- log("The routine completes in one Claude session — it does NOT spawn other agents.");
396
- log("");
397
- log("Options:");
398
- log(' --name <name> Routine name (default: "feedradar-watch")');
399
- log(" Also the default output filename.");
400
- log(" --repo <owner/repo> Target repository (default: <owner>/<repo>)");
401
- log(' --cron <expression> 5-field cron, min interval 1 HOUR (default: "0 * * * *")');
402
- log(' Sub-hourly (e.g. "*/5 * * * *") is rejected.');
403
- log(' --timezone <tz> Schedule timezone (default: "UTC")');
404
- log(` --model <name> ${SUPPORTED_MODELS.join(" | ")}`);
405
- log(" (default: claude-sonnet-4-6)");
406
- log(" --output <path> Output file under .claude/routines/");
407
- log(" (default: .claude/routines/<name>.yaml)");
408
- log(" --force, -f Overwrite existing output file");
394
+ export function printGenerateWatchRoutineHelp(t, log) {
395
+ log(t("cli.routine.generateWatchHelp", { models: SUPPORTED_MODELS.join(" | ") }));
409
396
  }
410
397
  /**
411
398
  * Entry point invoked by `runRoutine` (in `src/cli/routine.ts`) when the user
@@ -416,16 +403,35 @@ export function printGenerateWatchRoutineHelp(log) {
416
403
  export async function runGenerateWatchRoutine(args, io = {}, cwd = process.cwd()) {
417
404
  const log = io.log ?? ((m) => console.log(m));
418
405
  const error = io.error ?? ((m) => console.error(m));
406
+ // Strip `--lang <en|ja>` before the type parser sees argv (mirrors `init`).
407
+ let langFlag;
408
+ let rest;
409
+ try {
410
+ const langState = parseLangFlag(args);
411
+ langFlag = langState.flag;
412
+ rest = langState.rest;
413
+ }
414
+ catch (e) {
415
+ if (e instanceof LangFlagError) {
416
+ error(`routine generate watch: ${e.message}`);
417
+ return 2;
418
+ }
419
+ throw e;
420
+ }
419
421
  let parsed;
420
422
  try {
421
- parsed = parseGenerateWatchRoutineArgs(args);
423
+ parsed = parseGenerateWatchRoutineArgs(rest);
422
424
  }
423
425
  catch (e) {
424
426
  error(`routine generate watch: ${e instanceof Error ? e.message : String(e)}`);
425
427
  return 2;
426
428
  }
429
+ // Resolve the locale before the help branch so `--help` honors --lang / env /
430
+ // config (the per-type help is now sourced from the i18n catalog, #337).
431
+ const locale = await resolveWorkspaceLocale({ flag: langFlag, cwd, warn: error });
432
+ const t = createTranslator(locale);
427
433
  if (parsed.help) {
428
- printGenerateWatchRoutineHelp(log);
434
+ printGenerateWatchRoutineHelp(t, log);
429
435
  return 0;
430
436
  }
431
437
  try {
@@ -438,6 +444,7 @@ export async function runGenerateWatchRoutine(args, io = {}, cwd = process.cwd()
438
444
  model: parsed.model,
439
445
  output: parsed.output,
440
446
  force: parsed.force,
447
+ locale,
441
448
  io,
442
449
  });
443
450
  return 0;