@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.
- package/dist/main.js +35 -3
- 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