craftar 0.36.0 → 0.37.1
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/README.md +53 -4
- package/dist/cli.js +20 -13
- package/dist/cli.js.map +1 -1
- package/dist/core/doctor.js +49 -10
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/mcp-server.js +42 -0
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/core/report.js +12 -0
- package/dist/core/report.js.map +1 -1
- package/dist/core/write-actions.js +20 -11
- package/dist/core/write-actions.js.map +1 -1
- package/dist/emitters/claude-code.js +3 -3
- package/dist/emitters/claude-code.js.map +1 -1
- package/dist/emitters/kiro.js +3 -3
- package/dist/emitters/kiro.js.map +1 -1
- package/dist/emitters/shared.js +5 -0
- package/dist/emitters/shared.js.map +1 -1
- package/dist/importers/claude-code.js +4 -1
- package/dist/importers/claude-code.js.map +1 -1
- package/dist/ui/page.js +115 -10
- package/dist/ui/page.js.map +1 -1
- package/dist/ui/routes.js +129 -8
- package/dist/ui/routes.js.map +1 -1
- package/dist/ui/server.js +121 -34
- package/dist/ui/server.js.map +1 -1
- package/package.json +1 -1
package/dist/ui/page.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* is a by-hand run.
|
|
7
7
|
*/
|
|
8
8
|
import { diffShows } from "../core/report.js";
|
|
9
|
+
import { EXAMPLE_SETTINGS } from "../emitters/shared.js";
|
|
9
10
|
export const PAGE_HTML = `<!doctype html>
|
|
10
11
|
<html lang="en">
|
|
11
12
|
<head>
|
|
@@ -58,6 +59,17 @@ dd { margin: 0; overflow-wrap: anywhere; }
|
|
|
58
59
|
ul { margin: 4px 0; padding-left: 18px; }
|
|
59
60
|
code.cmd { background: var(--soft); border: 1px solid var(--line); border-radius: 4px; padding: 1px 6px; user-select: all; }
|
|
60
61
|
`;
|
|
62
|
+
/** CSS rules for the confirmation overlay, added only when writes is true. */
|
|
63
|
+
const CONFIRM_CSS = `
|
|
64
|
+
.confirm-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; }
|
|
65
|
+
.confirm-box { background: var(--bg); border: 1px solid var(--line); border-radius: 8px; padding: 16px 20px; max-width: 500px; }
|
|
66
|
+
.confirm-box p { margin: 0 0 12px; }
|
|
67
|
+
.confirm-box button { margin-right: 8px; }
|
|
68
|
+
`;
|
|
69
|
+
/** Builds the page's stylesheet. When `writes` is false, the result is the read-only page; when true, it adds confirmation box styles. */
|
|
70
|
+
export function pageCss(writes) {
|
|
71
|
+
return writes ? PAGE_CSS + CONFIRM_CSS : PAGE_CSS;
|
|
72
|
+
}
|
|
61
73
|
/**
|
|
62
74
|
* How the page lists each file state — a `Record` over every `FileState`, so a new state does not compile until it is placed here,
|
|
63
75
|
* as `FILE_STATE_ORDER_MAP` does for the CLI: `order` on the page, `syncActs` (sync writes or removes it without a flag, so the page
|
|
@@ -73,7 +85,98 @@ export const PAGE_STATES = {
|
|
|
73
85
|
"orphan-drift": { order: 6, syncActs: false, diff: diffShows("orphan-drift") },
|
|
74
86
|
unchanged: { order: 7, syncActs: false, diff: diffShows("unchanged") },
|
|
75
87
|
};
|
|
76
|
-
|
|
88
|
+
/** Builds the page's script. When `writes` is false, the result is the read-only page; when true, it adds Sync and Discard edit. */
|
|
89
|
+
export function pageJs(writes) {
|
|
90
|
+
// Writing code interpolated only when `writes` is true; otherwise yields ""
|
|
91
|
+
const W_WRITES_VAR = writes ? `\n var writes = false;` : "";
|
|
92
|
+
const W_POST_FN = writes
|
|
93
|
+
? `
|
|
94
|
+
function post(path, body) {
|
|
95
|
+
return fetch(path, { method: "POST", headers: { Authorization: "Bearer " + token, "Content-Type": "application/json" }, body: JSON.stringify(body), cache: "no-store" }).then(function (res) {
|
|
96
|
+
return res.json().then(
|
|
97
|
+
function (b) { return { status: res.status, body: b }; },
|
|
98
|
+
function () { return { status: res.status, body: null }; }
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
}`
|
|
102
|
+
: "";
|
|
103
|
+
const W_CONFIRM_FN = writes
|
|
104
|
+
? `
|
|
105
|
+
function confirmBox(message, onConfirm) {
|
|
106
|
+
var overlay = el("div", "confirm-overlay");
|
|
107
|
+
var box = el("div", "confirm-box");
|
|
108
|
+
add(box, el("p", "", message));
|
|
109
|
+
add(box, button("Confirm", function () { overlay.parentNode.removeChild(overlay); onConfirm(); }));
|
|
110
|
+
add(box, button("Cancel", function () { overlay.parentNode.removeChild(overlay); }));
|
|
111
|
+
add(overlay, box);
|
|
112
|
+
add(document.body, overlay);
|
|
113
|
+
}`
|
|
114
|
+
: "";
|
|
115
|
+
const W_RESULT_FN = writes
|
|
116
|
+
? `
|
|
117
|
+
function showWriteResult(into, w, answer) {
|
|
118
|
+
clear(into);
|
|
119
|
+
if (answer.status !== 200 || answer.body === null) return problem(into, answer);
|
|
120
|
+
var b = answer.body;
|
|
121
|
+
var wrote = (b.written || []).length;
|
|
122
|
+
var removed = (b.removed || []).length;
|
|
123
|
+
var skipped = (b.skipped || []).length;
|
|
124
|
+
var said = ["wrote " + wrote + ", removed " + removed + ", skipped " + skipped];
|
|
125
|
+
if (b.registry === "not updated") said.push("the registry was not updated");
|
|
126
|
+
showWorkspace(w, "files", said);
|
|
127
|
+
}`
|
|
128
|
+
: "";
|
|
129
|
+
const W_STORE_WRITES = writes ? `\n writes = doc.writes;` : "";
|
|
130
|
+
const W_SYNC_BTN = writes
|
|
131
|
+
? `
|
|
132
|
+
/* Sync button: shown only when the workspace can be synced from the page. */
|
|
133
|
+
if (writes && doc.digest && !doc.unsetParams.length && doc.forge.kind !== "remote" && doc.statuses.some(function (s) { return SYNC_ACTS[s.state]; })) {
|
|
134
|
+
var countA = doc.statuses.filter(function (s) { return s.state === "new" || s.state === "update" || s.state === "adopt"; }).length;
|
|
135
|
+
var countR = doc.statuses.filter(function (s) { return s.state === "orphan"; }).length;
|
|
136
|
+
var countK = doc.statuses.filter(function (s) { return s.state === "drift" || s.state === "orphan-drift" || s.state === "collision"; }).length;
|
|
137
|
+
var syncMsg = "Sync writes " + countA + " and removes " + countR + "; " + countK + " hand-edited or colliding file(s) are kept.";
|
|
138
|
+
add(body, button("Sync", function () {
|
|
139
|
+
confirmBox(syncMsg, function () {
|
|
140
|
+
var result = el("div");
|
|
141
|
+
add(body, result);
|
|
142
|
+
add(clear(result), el("p", "dim", "syncing…"));
|
|
143
|
+
post("/api/workspaces/" + w.id + "/sync", { digest: doc.digest }).then(
|
|
144
|
+
function (answer) { showWriteResult(result, w, answer); },
|
|
145
|
+
function () { unreachable(result); }
|
|
146
|
+
);
|
|
147
|
+
});
|
|
148
|
+
}));
|
|
149
|
+
}`
|
|
150
|
+
: "";
|
|
151
|
+
// showDiff needs w, doc and f for the Discard edit button.
|
|
152
|
+
const W_SHOWDIFF_EXTRA_ARGS = writes ? ", w, doc, f" : "";
|
|
153
|
+
// showWorkspace takes an optional said array (lines to show after facts) only in writes mode.
|
|
154
|
+
const W_SHOWWORKSPACE_SAID_PARAM = writes ? ", said" : "";
|
|
155
|
+
const W_SHOWWORKSPACE_DRAW_SAID = writes
|
|
156
|
+
? `
|
|
157
|
+
if (said && said.length) said.forEach(function (line) { add(body, note(line)); });`
|
|
158
|
+
: "";
|
|
159
|
+
const W_DISCARD_IN_DIFF = writes
|
|
160
|
+
? `
|
|
161
|
+
/* Discard edit button: only for drift or orphan-drift, not the example file, and the same gates as Sync. */
|
|
162
|
+
if (writes && doc.digest && !doc.unsetParams.length && doc.forge.kind !== "remote" && (f.state === "drift" || f.state === "orphan-drift") && f.path !== ${JSON.stringify(EXAMPLE_SETTINGS)} && !d.hidden) {
|
|
163
|
+
var discardMsg = f.state === "drift"
|
|
164
|
+
? "The hand edit of " + f.path + " is lost; the Forge's version is written."
|
|
165
|
+
: "The hand edit of " + f.path + " is lost; the file is removed.";
|
|
166
|
+
add(into, button("Discard edit", function () {
|
|
167
|
+
confirmBox(discardMsg, function () {
|
|
168
|
+
var result = el("div");
|
|
169
|
+
add(into, result);
|
|
170
|
+
add(clear(result), el("p", "dim", "discarding…"));
|
|
171
|
+
post("/api/workspaces/" + w.id + "/discard", { digest: doc.digest, path: f.path }).then(
|
|
172
|
+
function (answer) { showWriteResult(result, w, answer); },
|
|
173
|
+
function () { unreachable(result); }
|
|
174
|
+
);
|
|
175
|
+
});
|
|
176
|
+
}));
|
|
177
|
+
}`
|
|
178
|
+
: "";
|
|
179
|
+
return String.raw `"use strict";
|
|
77
180
|
(function () {
|
|
78
181
|
var NO_TOKEN = "open the address printed by craftar ui — this tab has no token";
|
|
79
182
|
var KEY = "craftar-ui-token";
|
|
@@ -84,7 +187,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
84
187
|
var SYNC_ACTS = ${JSON.stringify(Object.fromEntries(Object.entries(PAGE_STATES).filter(([, v]) => v.syncActs).map(([k]) => [k, true])))};
|
|
85
188
|
var HAS_DIFF = ${JSON.stringify(Object.fromEntries(Object.entries(PAGE_STATES).map(([k, v]) => [k, v.diff])))};
|
|
86
189
|
var app = document.getElementById("app");
|
|
87
|
-
var table = null
|
|
190
|
+
var table = null;${W_WRITES_VAR}
|
|
88
191
|
|
|
89
192
|
var fromHash = location.hash.slice(1);
|
|
90
193
|
var token = fromHash;
|
|
@@ -162,7 +265,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
162
265
|
function () { return { status: res.status, body: null }; }
|
|
163
266
|
);
|
|
164
267
|
});
|
|
165
|
-
}
|
|
268
|
+
}${W_POST_FN}${W_CONFIRM_FN}${W_RESULT_FN}
|
|
166
269
|
|
|
167
270
|
/* What the page says for an answer that is not 200. asked: the file's path when the request named one. */
|
|
168
271
|
function problem(into, answer, asked) {
|
|
@@ -205,7 +308,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
205
308
|
add(app, head, add(el("div", "bar"), button("Refresh", showWorkspaces)), body);
|
|
206
309
|
if (!token) return add(clear(body), note(NO_TOKEN, "bad"));
|
|
207
310
|
load("/api/workspaces", body, undefined, function (doc) {
|
|
208
|
-
table = doc
|
|
311
|
+
table = doc;${W_STORE_WRITES}
|
|
209
312
|
add(head, el("p", "dim", "craftar " + doc.version + " · registry " + doc.registry));
|
|
210
313
|
if (!doc.workspaces.length) {
|
|
211
314
|
add(body, note("no workspace is registered on this machine yet — run craftar sync in one"));
|
|
@@ -255,7 +358,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
255
358
|
if (kind === "remote") add(into, el("p", "dim", "read from the cached copy of the Forge — not fetched"));
|
|
256
359
|
}
|
|
257
360
|
|
|
258
|
-
function showWorkspace(w, tab) {
|
|
361
|
+
function showWorkspace(w, tab${W_SHOWWORKSPACE_SAID_PARAM}) {
|
|
259
362
|
var body = frame(w, tab);
|
|
260
363
|
if (!token) return add(body, note(NO_TOKEN, "bad"));
|
|
261
364
|
if (tab === "forge") return showForge(w, body);
|
|
@@ -269,7 +372,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
269
372
|
["forge", forgeLine(doc.forge)],
|
|
270
373
|
["lock", doc.forge.lockCommit ? "generated from " + short(doc.forge.lockCommit) : "records no commit"]
|
|
271
374
|
].forEach(function (pair) { add(facts, el("dt", "", pair[0]), el("dd", "", pair[1])); });
|
|
272
|
-
add(body, facts)
|
|
375
|
+
add(body, facts);${W_SHOWWORKSPACE_DRAW_SAID}
|
|
273
376
|
if (doc.unsetParams.length) {
|
|
274
377
|
add(body, note(doc.refused, "bad"));
|
|
275
378
|
add(body, list(doc.unsetParams.map(function (u) {
|
|
@@ -277,7 +380,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
277
380
|
})));
|
|
278
381
|
}
|
|
279
382
|
if (doc.warnings.length) add(body, el("h3", "", "warnings"), list(doc.warnings));
|
|
280
|
-
if (!doc.statuses.length) add(body, note("the Forge produces no file for this workspace"))
|
|
383
|
+
if (!doc.statuses.length) add(body, note("the Forge produces no file for this workspace"));${W_SYNC_BTN}
|
|
281
384
|
STATES.concat(doc.statuses.map(function (s) { return s.state; }).filter(function (s, i, all) { return STATES.indexOf(s) === -1 && all.indexOf(s) === i; })).forEach(function (state) {
|
|
282
385
|
var files = doc.statuses.filter(function (s) { return s.state === state; });
|
|
283
386
|
if (!files.length) return;
|
|
@@ -301,7 +404,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
301
404
|
if (HAS_DIFF[f.state] !== false) {
|
|
302
405
|
add(bar, button("diff", function () {
|
|
303
406
|
detail.hidden = false;
|
|
304
|
-
load("/api/workspaces/" + w.id + "/diff" + query, detail, f.path, function (d) { showDiff(detail, d); });
|
|
407
|
+
load("/api/workspaces/" + w.id + "/diff" + query, detail, f.path, function (d) { showDiff(detail${W_SHOWDIFF_EXTRA_ARGS}, d); });
|
|
305
408
|
}));
|
|
306
409
|
}
|
|
307
410
|
if (f.state !== "orphan" && f.state !== "orphan-drift") {
|
|
@@ -314,7 +417,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
314
417
|
return add(box, bar, detail);
|
|
315
418
|
}
|
|
316
419
|
|
|
317
|
-
function showDiff(into, d) {
|
|
420
|
+
function showDiff(into${W_SHOWDIFF_EXTRA_ARGS}, d) {
|
|
318
421
|
if (d.from) add(into, el("p", "mono dim", "--- " + d.from));
|
|
319
422
|
if (d.to) add(into, el("p", "mono dim", "+++ " + d.to));
|
|
320
423
|
if (d.note) add(into, note(d.note, d.hidden ? "warn" : ""));
|
|
@@ -330,7 +433,7 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
330
433
|
add(pre, el("span", kind, line), document.createTextNode("\n"));
|
|
331
434
|
});
|
|
332
435
|
add(into, pre);
|
|
333
|
-
if (lines.length > MAX_DIFF_LINES) add(into, el("p", "dim", "… " + (lines.length - MAX_DIFF_LINES) + " more lines"))
|
|
436
|
+
if (lines.length > MAX_DIFF_LINES) add(into, el("p", "dim", "… " + (lines.length - MAX_DIFF_LINES) + " more lines"));${W_DISCARD_IN_DIFF}
|
|
334
437
|
}
|
|
335
438
|
|
|
336
439
|
function showExplain(into, x) {
|
|
@@ -390,4 +493,6 @@ export const PAGE_JS = String.raw `"use strict";
|
|
|
390
493
|
showWorkspaces();
|
|
391
494
|
})();
|
|
392
495
|
`;
|
|
496
|
+
}
|
|
497
|
+
export const PAGE_JS = pageJs(false);
|
|
393
498
|
//# sourceMappingURL=page.js.map
|
package/dist/ui/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAaxB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCvB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,WAAW,GAAG;;;;;CAKnB,CAAC;AAEF,0IAA0I;AAC1I,MAAM,UAAU,OAAO,CAAC,MAAe;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2E;IACjG,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE;IACzD,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;IAC/D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;IAC7D,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;IAC9D,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE;IACtE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;IAC/D,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE;IAC9E,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE;CACvE,CAAC;AAEF,oIAAoI;AACpI,MAAM,UAAU,MAAM,CAAC,MAAe;IACpC,4EAA4E;IAC5E,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC;;;;;;;;IAQF;QACA,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,YAAY,GAAG,MAAM;QACzB,CAAC,CAAC;;;;;;;;;IASF;QACA,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,MAAM;QACxB,CAAC,CAAC;;;;;;;;;;;IAWF;QACA,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC;;;;;;;;;;;;;;;;;;QAkBE;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,2DAA2D;IAC3D,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,8FAA8F;IAC9F,MAAM,0BAA0B,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,MAAM,yBAAyB,GAAG,MAAM;QACtC,CAAC,CAAC;yFACmF;QACrF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,iBAAiB,GAAG,MAAM;QAC9B,CAAC,CAAC;;kKAE4J,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;UAexL;QACN,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;cAKL,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;;oBAGrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;mBACtH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;qBAE1F,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8E5B,SAAS,GAAG,YAAY,GAAG,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA2CvB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAkDD,0BAA0B;;;;;;;;;;;;;;yBAclC,yBAAyB;;;;;;;;mGAQiD,UAAU;;;;;;;;;;;;;;;;;;;;;;;;0GAwBH,qBAAqB;;;;;;;;;;;;;0BAarG,qBAAqB;;;;;;;;;;;;;;;;2HAgB4E,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D3I,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/ui/routes.js
CHANGED
|
@@ -3,12 +3,22 @@ import { renderDiff } from "../core/diff.js";
|
|
|
3
3
|
import { oneLine } from "../core/doctor.js";
|
|
4
4
|
import { isMissing, listWorkspaces, readRegistry } from "../core/registry.js";
|
|
5
5
|
import { credentialFault, CREDENTIAL_HIDDEN, refHoldsCredentials } from "../core/remote.js";
|
|
6
|
-
import { EXAMPLE_CONTENT_HIDDEN, diffReport, explainFile, statusReport } from "../core/report.js";
|
|
7
|
-
import {
|
|
6
|
+
import { EXAMPLE_CONTENT_HIDDEN, diffReport, explainFile, orphanDriftBody, statusReport } from "../core/report.js";
|
|
7
|
+
import { statusDigest, syncToolResult, syncWorkspace } from "../core/write-actions.js";
|
|
8
|
+
import { EXAMPLE_SETTINGS } from "../emitters/shared.js";
|
|
9
|
+
import { loadWorkspace, plan, readLock, status, unsetDeclared, unsetSummary } from "../core/sync.js";
|
|
8
10
|
import { hashNormalized } from "../core/text.js";
|
|
9
11
|
export const NOT_FOUND = { error: "not found" };
|
|
10
12
|
export const PATH_REQUIRED = { error: "path is required, once" };
|
|
11
13
|
export const MISSING = "the directory or its craftar.yaml is gone — craftar workspaces prune";
|
|
14
|
+
/** The two write route patterns (spec 40 §6.2). */
|
|
15
|
+
export const WRITE_PATTERNS = ["/api/workspaces/<id>/sync", "/api/workspaces/<id>/discard"];
|
|
16
|
+
/** 409 for a remote Forge (spec 40 §6.4 step 2). */
|
|
17
|
+
export const REMOTE_FORGE = "writes from the page need a path Forge — run craftar sync";
|
|
18
|
+
/** 409 when the digest does not match (spec 40 §6.4 step 4). */
|
|
19
|
+
export const STALE_DIGEST = "the workspace changed since the page showed it — refresh";
|
|
20
|
+
/** 409 when the path is not a drift or orphan-drift file, or is the example settings file (spec 40 §6.4 step 5). */
|
|
21
|
+
export const NOT_HAND_EDITED = "not a hand-edited file";
|
|
12
22
|
/** A workspace's id in a URL: 16 hex characters of the hash of its registered path — the path itself never travels. */
|
|
13
23
|
export const workspaceId = (registeredPath) => hashNormalized(registeredPath).slice("sha256:".length, "sha256:".length + 16);
|
|
14
24
|
/** Why a workspace cannot be shown, in one line — the wording `doctor` uses, so the table and a 409 agree. */
|
|
@@ -19,9 +29,40 @@ export function routeReason(e) {
|
|
|
19
29
|
export function routePattern(path) {
|
|
20
30
|
if (path === "/api/workspaces")
|
|
21
31
|
return path;
|
|
22
|
-
const m = /^\/api\/workspaces\/[0-9a-f]{16}(\/(diff|explain|recipes|ingredients))?$/.exec(path);
|
|
32
|
+
const m = /^\/api\/workspaces\/[0-9a-f]{16}(\/(diff|explain|recipes|ingredients|sync|discard))?$/.exec(path);
|
|
23
33
|
return m ? `/api/workspaces/<id>${m[1] ?? ""}` : null;
|
|
24
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* A write route's body, checked strictly: `digest` 64 lowercase hex; `path` a string, required for discard and
|
|
37
|
+
* refused for sync; no other key. Null when it does not read.
|
|
38
|
+
*/
|
|
39
|
+
export function parseWriteBody(action, text) {
|
|
40
|
+
let parsed;
|
|
41
|
+
try {
|
|
42
|
+
parsed = JSON.parse(text);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
48
|
+
return null;
|
|
49
|
+
const obj = parsed;
|
|
50
|
+
const allowed = action === "sync" ? ["digest"] : ["digest", "path"];
|
|
51
|
+
if (Object.keys(obj).some((k) => !allowed.includes(k)))
|
|
52
|
+
return null;
|
|
53
|
+
if (typeof obj.digest !== "string" || !/^[0-9a-f]{64}$/.test(obj.digest))
|
|
54
|
+
return null;
|
|
55
|
+
if (action === "sync") {
|
|
56
|
+
if ("path" in obj)
|
|
57
|
+
return null;
|
|
58
|
+
return { digest: obj.digest };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (!("path" in obj) || typeof obj.path !== "string")
|
|
62
|
+
return null;
|
|
63
|
+
return { digest: obj.digest, path: obj.path };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
25
66
|
/** The query's `path`, given exactly once and decoded once (`+` is not a space) — or null. */
|
|
26
67
|
function onePath(query) {
|
|
27
68
|
const given = query.split("&").filter((kv) => kv === "path" || kv.startsWith("path="));
|
|
@@ -52,12 +93,23 @@ export async function route(req, deps) {
|
|
|
52
93
|
const pattern = routePattern(req.path);
|
|
53
94
|
if (pattern === null)
|
|
54
95
|
return { status: 404, body: NOT_FOUND };
|
|
96
|
+
const method = req.method;
|
|
97
|
+
const isWritePattern = WRITE_PATTERNS.includes(pattern);
|
|
98
|
+
// A POST to a reading route, a GET to a write route, or any POST without allowWrites → 404 (the server refuses earlier with 405)
|
|
99
|
+
if (method === "POST" && !isWritePattern)
|
|
100
|
+
return { status: 404, body: NOT_FOUND };
|
|
101
|
+
if (method === "GET" && isWritePattern)
|
|
102
|
+
return { status: 404, body: NOT_FOUND };
|
|
103
|
+
if (method === "POST" && !deps.allowWrites)
|
|
104
|
+
return { status: 404, body: NOT_FOUND };
|
|
105
|
+
if (isWritePattern && !req.body)
|
|
106
|
+
return { status: 400, body: { error: "bad request" } };
|
|
55
107
|
if (pattern === "/api/workspaces") {
|
|
56
108
|
const t = await listWorkspaces(deps.home, { fetch: false, reason: routeReason });
|
|
57
109
|
const rows = t.rows.map(servedRow);
|
|
58
110
|
return {
|
|
59
111
|
status: 200,
|
|
60
|
-
body: { version: deps.version, registry: t.registry, fetch: false, workspaces: rows, warnings: t.warnings },
|
|
112
|
+
body: { version: deps.version, registry: t.registry, fetch: false, writes: deps.allowWrites === true, workspaces: rows, warnings: t.warnings },
|
|
61
113
|
};
|
|
62
114
|
}
|
|
63
115
|
const [, , , id, what] = req.path.split("/");
|
|
@@ -80,8 +132,14 @@ export async function route(req, deps) {
|
|
|
80
132
|
let p;
|
|
81
133
|
let lock;
|
|
82
134
|
let st;
|
|
135
|
+
let digest;
|
|
83
136
|
try {
|
|
84
|
-
|
|
137
|
+
// A write refuses a remote Forge as the configuration names it, before anything is fetched (spec 40 §6.4).
|
|
138
|
+
ws = await loadWorkspace(entry.path, {
|
|
139
|
+
mode: "no-fetch",
|
|
140
|
+
home: deps.home,
|
|
141
|
+
...(isWritePattern ? { refuseRemote: () => REMOTE_FORGE } : {}),
|
|
142
|
+
});
|
|
85
143
|
if (what === "recipes" || what === "ingredients") {
|
|
86
144
|
// The catalogue resolves and never plans; it does not read the lock either.
|
|
87
145
|
const context = catalogueContext(ws.forge, { kind: "workspace", config: ws.config });
|
|
@@ -91,16 +149,61 @@ export async function route(req, deps) {
|
|
|
91
149
|
p = await plan(ws);
|
|
92
150
|
lock = await readLock(ws.root);
|
|
93
151
|
st = await status(ws, p, lock);
|
|
152
|
+
// Read here so that a disk error is the workspace's state (409).
|
|
153
|
+
if (isWritePattern || (what === undefined && deps.allowWrites)) {
|
|
154
|
+
digest = await statusDigest(ws, st);
|
|
155
|
+
}
|
|
94
156
|
}
|
|
95
157
|
catch (e) {
|
|
158
|
+
// refuseRemote's own words, not doctor's.
|
|
159
|
+
if (e instanceof Error && e.message === REMOTE_FORGE) {
|
|
160
|
+
return { status: 409, body: { error: REMOTE_FORGE, warnings: [] } };
|
|
161
|
+
}
|
|
96
162
|
return { status: 409, body: { error: routeReason(e), warnings: ws?.warnings ?? [] } };
|
|
97
163
|
}
|
|
164
|
+
// Write routes: digest → (discard) path → unset → sync → answer (spec 40 §6.4).
|
|
165
|
+
if (isWritePattern) {
|
|
166
|
+
const body = req.body;
|
|
167
|
+
const action = what;
|
|
168
|
+
if (digest !== body.digest) {
|
|
169
|
+
return { status: 409, body: { error: STALE_DIGEST, warnings: [] } };
|
|
170
|
+
}
|
|
171
|
+
let row;
|
|
172
|
+
if (action === "discard") {
|
|
173
|
+
row = st.find((s) => s.path === body.path);
|
|
174
|
+
if (!row || (row.state !== "drift" && row.state !== "orphan-drift") || row.path === EXAMPLE_SETTINGS) {
|
|
175
|
+
return { status: 409, body: { error: NOT_HAND_EDITED, warnings: [] } };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const unset = unsetDeclared(p);
|
|
179
|
+
if (unset.length) {
|
|
180
|
+
return { status: 409, body: { error: unsetSummary(unset), warnings: [] } };
|
|
181
|
+
}
|
|
182
|
+
const outcome = await syncWorkspace(ws, p, st, lock, {
|
|
183
|
+
home: deps.home,
|
|
184
|
+
registryOff: false,
|
|
185
|
+
...(action === "discard" && row ? { overwritePaths: new Set([row.path]) } : {}),
|
|
186
|
+
});
|
|
187
|
+
return { status: 200, body: syncToolResult(ws, p, st, outcome, false, action === "discard" && row ? row.path : undefined) };
|
|
188
|
+
}
|
|
98
189
|
if (what === undefined) {
|
|
99
190
|
const report = statusReport(ws, p, lock, st);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
191
|
+
const base = {
|
|
192
|
+
id,
|
|
193
|
+
path: entry.path,
|
|
194
|
+
profile: ws.config.profile,
|
|
195
|
+
recipes: p.resolution.recipes,
|
|
196
|
+
targets: p.resolution.targets,
|
|
197
|
+
...report,
|
|
198
|
+
refused: report.unsetParams.length ? unsetSummary(report.unsetParams) : null,
|
|
103
199
|
};
|
|
200
|
+
if (deps.allowWrites) {
|
|
201
|
+
return {
|
|
202
|
+
status: 200,
|
|
203
|
+
body: { ...base, digest },
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return { status: 200, body: base };
|
|
104
207
|
}
|
|
105
208
|
if (what === "explain") {
|
|
106
209
|
// Never `notProduced`'s message: it quotes the path asked.
|
|
@@ -111,6 +214,24 @@ export async function route(req, deps) {
|
|
|
111
214
|
const row = st.find((s) => s.path === wanted);
|
|
112
215
|
if (!row)
|
|
113
216
|
return { status: 404, body: NOT_FOUND };
|
|
217
|
+
// For orphan-drift, under allowWrites, return the file's body as a diff (spec 40 §6.5)
|
|
218
|
+
if (row.state === "orphan-drift" && deps.allowWrites) {
|
|
219
|
+
const { body: fileBody, note } = await orphanDriftBody(ws.root, row);
|
|
220
|
+
const from = `${row.path} (disk, ${row.state})`;
|
|
221
|
+
const to = `${row.path} (forge: no longer produced — discard removes it)`;
|
|
222
|
+
return {
|
|
223
|
+
status: 200,
|
|
224
|
+
body: {
|
|
225
|
+
path: row.path,
|
|
226
|
+
state: row.state,
|
|
227
|
+
from,
|
|
228
|
+
to,
|
|
229
|
+
hidden: note !== null,
|
|
230
|
+
note,
|
|
231
|
+
diff: fileBody === null ? null : renderDiff(fileBody, ""),
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
114
235
|
const [d] = await diffReport(ws, [row], { withholdMcp: false });
|
|
115
236
|
if (!d)
|
|
116
237
|
return { status: 200, body: { path: row.path, state: row.state, from: null, to: null, hidden: false, note: null, diff: null } };
|
package/dist/ui/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/ui/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/ui/routes.ts"],"names":[],"mappings":"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"}
|