@ordewell/cli 0.4.14 → 0.4.15

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/main.js +35 -3
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -376,6 +376,14 @@ var import_http2 = __toESM(require("http"));
376
376
  var import_ws = __toESM(require("ws"));
377
377
  var import_core3 = require("@ordewell/core");
378
378
  var DEFAULT_HTTP_TIMEOUT_MS = 15 * 60 * 1e3;
379
+ var WorkspaceInitNeededError = class extends Error {
380
+ constructor(message, workspace) {
381
+ super(message);
382
+ this.workspace = workspace;
383
+ this.name = "WorkspaceInitNeededError";
384
+ }
385
+ workspace;
386
+ };
379
387
  var ApiClient = class {
380
388
  port;
381
389
  constructor(port) {
@@ -446,13 +454,17 @@ var ApiClient = class {
446
454
  * the verify toggle, so the returned plan may be a question
447
455
  * (empty `tasks`, last word in `conversationHistory`) rather than a committed plan.
448
456
  */
449
- async startConversation(sessionId, goal, runners2, workspace) {
457
+ async startConversation(sessionId, goal, runners2, workspace, allowInit) {
450
458
  const res = await this.httpRequest("POST", `/api/plans/${sessionId}/converse/start`, {
451
459
  goal,
452
460
  runners: runners2 || void 0,
453
- workspace
461
+ workspace,
462
+ allowInit
454
463
  });
455
464
  if (res.status !== 200) {
465
+ if (res.data?.code === "workspace_not_a_project") {
466
+ throw new WorkspaceInitNeededError(res.data.error || "Not a project directory", res.data.workspace || workspace || "");
467
+ }
456
468
  throw new Error(res.data?.error || "Planning failed");
457
469
  }
458
470
  return res.data.plan;
@@ -4133,6 +4145,19 @@ function reduce(state, action) {
4133
4145
  }, ["set-planner", "set-task-runner"]));
4134
4146
  case "failed":
4135
4147
  return step({ ...say(state, "error", action.message), status: "idle", busyLabel: "", thinkingLine: "" });
4148
+ case "workspaceNeedsInit":
4149
+ return step({
4150
+ ...state,
4151
+ status: "idle",
4152
+ busyLabel: "",
4153
+ thinkingLine: "",
4154
+ overlay: {
4155
+ kind: "confirm",
4156
+ title: "Initialize new workspace?",
4157
+ message: `"${action.workspace}" isn't a recognized project yet (no .git or manifest found). Start a new ordewell workspace here?`,
4158
+ action: { kind: "init-workspace", goal: action.goal, workspace: action.workspace }
4159
+ }
4160
+ });
4136
4161
  case "notice":
4137
4162
  return step(say(state, "system", action.message));
4138
4163
  case "resize": {
@@ -4561,6 +4586,9 @@ function handleConfirmKey(state, overlay, key) {
4561
4586
  if (!state.sessionId) return step(closed);
4562
4587
  return step(closed, [{ type: "removeTask", sessionId: state.sessionId, taskId: overlay.action.taskId }]);
4563
4588
  }
4589
+ if (overlay.action.kind === "init-workspace") {
4590
+ return step({ ...closed, status: "planning" }, [{ type: "startConversation", goal: overlay.action.goal, allowInit: true }]);
4591
+ }
4564
4592
  return step(closed);
4565
4593
  }
4566
4594
  function handleHelpKey(state, scroll, key) {
@@ -5431,9 +5459,13 @@ async function perform(effect, deps) {
5431
5459
  const sessionId = deps.newSessionId();
5432
5460
  dispatch({ type: "sessionStarted", sessionId, goal: effect.goal });
5433
5461
  try {
5434
- await converse(deps, sessionId, () => api.startConversation(sessionId, effect.goal, void 0, workspace));
5462
+ await converse(deps, sessionId, () => api.startConversation(sessionId, effect.goal, void 0, workspace, effect.allowInit));
5435
5463
  } catch (err) {
5436
5464
  dispatch({ type: "sessionCleared" });
5465
+ if (err instanceof WorkspaceInitNeededError && !effect.allowInit) {
5466
+ dispatch({ type: "workspaceNeedsInit", goal: effect.goal, workspace: err.workspace });
5467
+ return;
5468
+ }
5437
5469
  throw err;
5438
5470
  }
5439
5471
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ordewell/cli",
3
- "version": "0.4.14",
3
+ "version": "0.4.15",
4
4
  "description": "Ordewell CLI and TUI — plan, run and verify coding-agent tasks from the terminal.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Alessandro Costanzo Ciano",