@dunnewold-labs/mr-manager 0.4.9 → 0.4.14

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 (2) hide show
  1. package/dist/index.mjs +20 -10
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -185,7 +185,7 @@ import { fileURLToPath } from "url";
185
185
  // cli/package.json
186
186
  var package_default = {
187
187
  name: "@dunnewold-labs/mr-manager",
188
- version: "0.4.9",
188
+ version: "0.4.14",
189
189
  description: "Mr. Manager - Task and project management CLI",
190
190
  bin: {
191
191
  mr: "./dist/index.mjs"
@@ -1000,6 +1000,7 @@ var NON_CODE_TASK_PATTERNS = [
1000
1000
  ];
1001
1001
  function taskLikelyDoesNotNeedCodeChanges(task) {
1002
1002
  if (task.mode && task.mode !== "development") return true;
1003
+ if (task.mode === "development") return false;
1003
1004
  const haystack = normalizeWhitespace(
1004
1005
  [task.title, task.notes, task.prdContent].filter(Boolean).join(" ").toLowerCase()
1005
1006
  );
@@ -2193,7 +2194,7 @@ function buildIdeaPrompt(idea, repoDir) {
2193
2194
  `- Do NOT exit until both files have been written and verified`
2194
2195
  ].join("\n");
2195
2196
  }
2196
- function buildAgentArgs(agent, prompt2, mode, sessionId, name, resumeSession = false, systemPrompt) {
2197
+ function buildAgentArgs(agent, prompt2, mode, sessionId, name, resumeSession = false, systemPrompt, maxTurns) {
2197
2198
  if (agent === "codex") {
2198
2199
  const args = [];
2199
2200
  if (mode === "execute") {
@@ -2222,10 +2223,11 @@ ${systemPrompt}` : prompt2;
2222
2223
  const sessionArgs = sessionId ? resumeSession ? ["--resume", sessionId] : ["--session-id", sessionId] : [];
2223
2224
  const nameArgs = name ? ["--name", name] : [];
2224
2225
  const systemArgs = systemPrompt ? ["--append-system-prompt", systemPrompt] : [];
2226
+ const turnsArgs = maxTurns ? ["--max-turns", String(maxTurns)] : [];
2225
2227
  if (mode === "plan") {
2226
- return { bin: "claude", args: [...sessionArgs, ...nameArgs, ...systemArgs, "--permission-mode", "plan", "-p", prompt2] };
2228
+ return { bin: "claude", args: [...sessionArgs, ...nameArgs, ...systemArgs, ...turnsArgs, "--permission-mode", "plan", "-p", prompt2] };
2227
2229
  }
2228
- return { bin: "claude", args: [...sessionArgs, ...nameArgs, ...systemArgs, "-p", "--dangerously-skip-permissions", prompt2] };
2230
+ return { bin: "claude", args: [...sessionArgs, ...nameArgs, ...systemArgs, ...turnsArgs, "-p", "--dangerously-skip-permissions", prompt2] };
2229
2231
  }
2230
2232
  function commandExists(cmd) {
2231
2233
  return new Promise((resolve8) => {
@@ -2280,10 +2282,10 @@ function askYesNo(question) {
2280
2282
  });
2281
2283
  });
2282
2284
  }
2283
- function spawnAgent(agent, repoDir, prompt2, prefix, onActivity, sessionId, name, resumeSession = false, onSpawnError, systemPrompt) {
2285
+ function spawnAgent(agent, repoDir, prompt2, prefix, onActivity, sessionId, name, resumeSession = false, onSpawnError, systemPrompt, maxTurns) {
2284
2286
  const jobLabel = name ?? "unknown";
2285
2287
  console.log(`${timestamp()} ${prefix} ${paint("dim", tokenLogLine("agent", jobLabel, prompt2, systemPrompt))}`);
2286
- const { bin, args } = buildAgentArgs(agent, prompt2, "execute", sessionId, name, resumeSession, systemPrompt);
2288
+ const { bin, args } = buildAgentArgs(agent, prompt2, "execute", sessionId, name, resumeSession, systemPrompt, maxTurns);
2287
2289
  const child = spawn4(bin, args, { cwd: repoDir, stdio: ["ignore", "pipe", "pipe"] });
2288
2290
  child.on("error", (err) => {
2289
2291
  logError(prefix, `Failed to spawn ${agent}: ${err.message}`);
@@ -2621,7 +2623,9 @@ var watchCommand = new Command8("watch").description(
2621
2623
  ...prUrl ? { link: prUrl } : {}
2622
2624
  });
2623
2625
  logSuccess(prefix, `"${paint("bold", task.title)}" marked ready for review`);
2624
- await postTaskUpdate(task.id, noMrRequested ? `Task marked ready for review \u2014 no ${prLabel} needed: ${noMrDescription}` : "Task marked ready for review", "system");
2626
+ if (noMrRequested) {
2627
+ await postTaskUpdate(task.id, `No ${prLabel} required: ${noMrDescription}`, "system");
2628
+ }
2625
2629
  } catch (err) {
2626
2630
  logError(prefix, `Failed to update task: ${err.message}`);
2627
2631
  }
@@ -2766,7 +2770,7 @@ var watchCommand = new Command8("watch").description(
2766
2770
  ...prdContent ? { prdContent } : {}
2767
2771
  });
2768
2772
  logSuccess(prefix, `"${paint("bold", task.title)}" PRD generated and marked ready for review`);
2769
- await postTaskUpdate(task.id, "PRD generated \u2014 ready for review", "system");
2773
+ await postTaskUpdate(task.id, "PRD generated", "system");
2770
2774
  } catch (err) {
2771
2775
  logError(prefix, `Failed to update task: ${err.message}`);
2772
2776
  }
@@ -2949,7 +2953,10 @@ var watchCommand = new Command8("watch").description(
2949
2953
  false,
2950
2954
  (err) => {
2951
2955
  spawnFailureReason = err.message;
2952
- }
2956
+ },
2957
+ void 0,
2958
+ 25
2959
+ // max turns — prevent the agent from looping internally
2953
2960
  );
2954
2961
  activeEntry.process = child;
2955
2962
  activeEntry.currentAgent = attemptAgent;
@@ -2975,11 +2982,14 @@ var watchCommand = new Command8("watch").description(
2975
2982
  logSuccess(prefix, `"${paint("bold", project.name)}" repo creation complete`);
2976
2983
  try {
2977
2984
  await api.patch(`/api/projects/${project.id}`, { repoCreationStatus: "created" });
2978
- } catch {
2985
+ } catch (err) {
2986
+ logError(prefix, `Failed to mark repo as created: ${err.message}`);
2987
+ failed.set(key, "status update failed after successful creation");
2979
2988
  }
2980
2989
  } else {
2981
2990
  const failureDetail = spawnFailureReason ?? `exit code ${code}`;
2982
2991
  logError(prefix, `"${paint("bold", project.name)}" repo creation failed via ${attemptAgent} (${failureDetail})`);
2992
+ failed.set(key, failureDetail);
2983
2993
  try {
2984
2994
  await api.patch(`/api/projects/${project.id}`, { repoCreationStatus: "failed" });
2985
2995
  } catch {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dunnewold-labs/mr-manager",
3
- "version": "0.4.9",
3
+ "version": "0.4.14",
4
4
  "description": "Mr. Manager - Task and project management CLI",
5
5
  "bin": {
6
6
  "mr": "./dist/index.mjs"