@dotobokuri/fleet-console 1.51.0 → 1.52.0
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/AGENTS.md +10 -5
- package/README.md +10 -8
- package/dist/cli.d.ts +3 -0
- package/dist/cli.mjs +8473 -8345
- package/dist/client/assets/{_baseUniq-DFtleNrY.js → _baseUniq-CYpcPDgB.js} +1 -1
- package/dist/client/assets/{arc-CZWcxz4p.js → arc-BuehZLUz.js} +1 -1
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-CoLGMUbn.js → architectureDiagram-Q4EWVU46-Bqn18zpp.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-d4tcUrvS.js → blockDiagram-DXYQGD6D-DmtLdC53.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-CcDJVtsE.js → c4Diagram-AHTNJAMY-BEBhZ5GG.js} +1 -1
- package/dist/client/assets/channel-BQlgz3sc.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-BxQcCCSB.js → chunk-4BX2VUAB-B8PizWjA.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-C1iJwPC-.js → chunk-4TB4RGXK-C1ofR8zt.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-Du7lkUwv.js → chunk-55IACEB6-CbKQ3d6C.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-Chblko53.js → chunk-EDXVE4YY-DU-bru4J.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-B4fgWiDf.js → chunk-FMBD7UC4-DD9GbN05.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-BXyyJDJI.js → chunk-OYMX7WX6-DZKa6Wtf.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BXAPpxgc.js → chunk-QZHKN3VN-fK2o17Jf.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-BuEMjN4I.js → chunk-YZCP3GAM-z-7p86Bc.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-CQs4cWly.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-CQs4cWly.js +1 -0
- package/dist/client/assets/clone-B5bOHdOg.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-Bk4ys4DX.js → cose-bilkent-S5V4N54A-x5L9kNFv.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-8e2uOIAZ.js → dagre-KV5264BT-944maqqT.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-BUaee6EH.js → diagram-5BDNPKRD-PV4GQ8C6.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-Y0F_eev2.js → diagram-G4DWMVQ6-GcoFZYg0.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-DeqlMgQv.js → diagram-MMDJMWI5-8cIlnSEJ.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-DqtnAuqr.js → diagram-TYMM5635-BlIMSlQ5.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-BBGN7fOL.js → erDiagram-SMLLAGMA-KjlbhDy3.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-C0WwXtcb.js → flowDiagram-DWJPFMVM-DqYNn08z.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-D00_-gLK.js → ganttDiagram-T4ZO3ILL-BplrlRlU.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-D9-J9LVn.js → gitGraphDiagram-UUTBAWPF-CISgtHAu.js} +1 -1
- package/dist/client/assets/{graph-DbpxB806.js → graph-DaTRgbvC.js} +1 -1
- package/dist/client/assets/index-DVQ5EO_a.css +1 -0
- package/dist/client/assets/index-alR6ElCr.js +479 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-CoV_lg2_.js → infoDiagram-42DDH7IO-BbFeDUi-.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DV9-YHTX.js → ishikawaDiagram-UXIWVN3A-BQTo9ri4.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-CFY3HNeL.js → journeyDiagram-VCZTEJTY-CiRkOhp8.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-BsN5X8OC.js → kanban-definition-6JOO6SKY-IIn_MSzy.js} +1 -1
- package/dist/client/assets/{layout-EvZfc466.js → layout-Cr58D4FS.js} +1 -1
- package/dist/client/assets/{linear-ConFN_kQ.js → linear-DNaIPcgl.js} +1 -1
- package/dist/client/assets/{mermaid.core-q1Rp6XrX.js → mermaid.core-Dq_ukAsT.js} +4 -4
- package/dist/client/assets/{min-CgGOD4w3.js → min-DpLyTgPW.js} +1 -1
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-CLvM_zrO.js → mindmap-definition-QFDTVHPH-C2DLYGq2.js} +1 -1
- package/dist/client/assets/{pieDiagram-DEJITSTG-Bw7QTbiY.js → pieDiagram-DEJITSTG-C3Cxmz-n.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-CJZW6aCq.js → quadrantDiagram-34T5L4WZ-CEdmiODY.js} +1 -1
- package/dist/client/assets/{requirementDiagram-MS252O5E-CMUb9ODK.js → requirementDiagram-MS252O5E-B-Vj0Wyw.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-DnjQJPPQ.js → sankeyDiagram-XADWPNL6-CyvEd7TA.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-BQLWPMCP.js → sequenceDiagram-FGHM5R23-B2MiPHOT.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-CYUxN4zL.js → stateDiagram-FHFEXIEX-Dsa-VSCx.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BKHWSGsO.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-DakKVVdc.js → timeline-definition-GMOUNBTQ-B9p0xkPR.js} +1 -1
- package/dist/client/assets/{vennDiagram-DHZGUBPP-CjJALOSl.js → vennDiagram-DHZGUBPP-DeU4CNd8.js} +1 -1
- package/dist/client/assets/{wardley-RL74JXVD-DNN6iyI_.js → wardley-RL74JXVD-BQyG38I_.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CuoFFC8W.js → wardleyDiagram-NUSXRM2D-DjrdDkEs.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-CLeb77Ra.js → xychartDiagram-5P7HB3ND-CG0KUfn_.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/fleet-plugins/ledger/routes.mjs +40 -16487
- package/dist/fleet-plugins/quota/routes.mjs +352 -95
- package/dist/fleet-plugins/repository/routes.mjs +63 -7
- package/dist/fleet-plugins/scuttlebutt/routes.mjs +4954 -6895
- package/dist/fleet-plugins/skills/routes.mjs +58 -16505
- package/dist/fleet-plugins/terminal/routes.mjs +22555 -33426
- package/dist/fleet.mjs +54671 -0
- package/package.json +6 -4
- package/dist/client/assets/channel-BkjngaUP.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-Bcn4Byd0.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-Bcn4Byd0.js +0 -1
- package/dist/client/assets/clone-HJ2xLTt3.js +0 -1
- package/dist/client/assets/index-BhOzl99v.css +0 -1
- package/dist/client/assets/index-Bnx3O7Op.js +0 -482
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BqJUiDHN.js +0 -1
|
@@ -36,6 +36,7 @@ var GitExecutorError = class extends Error {
|
|
|
36
36
|
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
37
37
|
var DEFAULT_MAX_BUFFER = 8 * 1024 * 1024;
|
|
38
38
|
var STDERR_MAX_BUFFER = 1024 * 1024;
|
|
39
|
+
var PROBE_TIMEOUT_MS = 5e3;
|
|
39
40
|
var GIT_HARDENING_PREFIX = ["-c", "core.fsmonitor=false", "--no-optional-locks"];
|
|
40
41
|
function sanitizeGitEnvironment(environment) {
|
|
41
42
|
const sanitized = {};
|
|
@@ -130,8 +131,13 @@ function runGit(args, opts) {
|
|
|
130
131
|
resolve({ stdout: stdout2, stderr, truncated, stderrTruncated });
|
|
131
132
|
return;
|
|
132
133
|
}
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
if (stderr.toLowerCase().includes("not a git repository")) {
|
|
135
|
+
reject(new GitExecutorError("no_git_repo", stderr, code ?? void 0));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
isInsideRepository(opts.cwd).then((inside) => {
|
|
139
|
+
reject(new GitExecutorError(inside ? "non_zero_exit" : "no_git_repo", stderr, code ?? void 0));
|
|
140
|
+
});
|
|
135
141
|
return;
|
|
136
142
|
}
|
|
137
143
|
const stdout = Buffer.concat(stdoutChunks).toString("utf8");
|
|
@@ -139,6 +145,40 @@ function runGit(args, opts) {
|
|
|
139
145
|
});
|
|
140
146
|
});
|
|
141
147
|
}
|
|
148
|
+
function isInsideRepository(cwd) {
|
|
149
|
+
return new Promise((resolve) => {
|
|
150
|
+
let settled = false;
|
|
151
|
+
const done = (inside) => {
|
|
152
|
+
if (settled) return;
|
|
153
|
+
settled = true;
|
|
154
|
+
resolve(inside);
|
|
155
|
+
};
|
|
156
|
+
try {
|
|
157
|
+
const probeOptions = {
|
|
158
|
+
cwd,
|
|
159
|
+
env: sanitizeGitEnvironment(process.env),
|
|
160
|
+
stdio: "ignore",
|
|
161
|
+
shell: false
|
|
162
|
+
};
|
|
163
|
+
const probe = spawn("git", [...GIT_HARDENING_PREFIX, "rev-parse", "--git-dir"], withHidden(probeOptions));
|
|
164
|
+
const timer = setTimeout(() => {
|
|
165
|
+
probe.kill("SIGKILL");
|
|
166
|
+
done(true);
|
|
167
|
+
}, PROBE_TIMEOUT_MS);
|
|
168
|
+
timer.unref?.();
|
|
169
|
+
probe.on("error", () => {
|
|
170
|
+
clearTimeout(timer);
|
|
171
|
+
done(true);
|
|
172
|
+
});
|
|
173
|
+
probe.on("close", (code) => {
|
|
174
|
+
clearTimeout(timer);
|
|
175
|
+
done(code === 0);
|
|
176
|
+
});
|
|
177
|
+
} catch {
|
|
178
|
+
done(true);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
142
182
|
function isPathContained(root, candidate) {
|
|
143
183
|
const relative = path3.relative(root, candidate);
|
|
144
184
|
return relative === "" || !path3.isAbsolute(relative) && relative !== ".." && !relative.startsWith(`..${path3.sep}`);
|
|
@@ -1051,6 +1091,14 @@ async function handleRepositoryFetch(req, res, ctx) {
|
|
|
1051
1091
|
var WORKTREE_SHA_RE = /^[0-9a-f]{40}$/;
|
|
1052
1092
|
var CANONICAL_REF_RE = /^refs\/(?:heads|remotes|tags)\//;
|
|
1053
1093
|
var REF_METACHAR_RE = /[~^:?*\[\\\s\x00-\x1f\x7f]/;
|
|
1094
|
+
var LOG_PRETTY_FORMAT = "--pretty=format:%x1e%H%x00%h%x00%s%x00%an%x00%ar%x00%at%x00%D%x00%P%x00%<(8,trunc)%b";
|
|
1095
|
+
var LOG_FIELD_COUNT = 9;
|
|
1096
|
+
var FULL_HASH_RE = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
1097
|
+
var LOG_ORDER_ARGS = { topo: "--topo-order", date: "--date-order" };
|
|
1098
|
+
function resolveLogOrder(requested) {
|
|
1099
|
+
if (requested === void 0) return "topo";
|
|
1100
|
+
return requested === "topo" || requested === "date" ? requested : null;
|
|
1101
|
+
}
|
|
1054
1102
|
function isPlainObject7(value) {
|
|
1055
1103
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1056
1104
|
}
|
|
@@ -1074,9 +1122,10 @@ function parseLogOutput(stdout) {
|
|
|
1074
1122
|
const authorAt = Number.parseInt(fields[5] ?? "0", 10);
|
|
1075
1123
|
const refsRaw = fields[6] ?? "";
|
|
1076
1124
|
const parentsRaw = fields[7] ?? "";
|
|
1077
|
-
if (!fullHash) continue;
|
|
1125
|
+
if (fields.length < LOG_FIELD_COUNT || !FULL_HASH_RE.test(fullHash)) continue;
|
|
1078
1126
|
const refs = refsRaw.split(",").map((r) => r.trim()).filter(Boolean);
|
|
1079
1127
|
const parents = parentsRaw.split(" ").map((p) => p.trim()).filter(Boolean);
|
|
1128
|
+
const hasBody = (fields[8] ?? "").trim() !== "";
|
|
1080
1129
|
commits.push({
|
|
1081
1130
|
shortHash,
|
|
1082
1131
|
fullHash,
|
|
@@ -1086,7 +1135,8 @@ function parseLogOutput(stdout) {
|
|
|
1086
1135
|
authorAt: Number.isFinite(authorAt) ? authorAt : 0,
|
|
1087
1136
|
refs,
|
|
1088
1137
|
parents,
|
|
1089
|
-
onHead: true
|
|
1138
|
+
onHead: true,
|
|
1139
|
+
hasBody
|
|
1090
1140
|
});
|
|
1091
1141
|
}
|
|
1092
1142
|
return commits;
|
|
@@ -1185,6 +1235,11 @@ async function handleRepositoryLog(req, res, ctx) {
|
|
|
1185
1235
|
ctx.host.http.writeJson(res, 400, { error: "invalid_request" });
|
|
1186
1236
|
return;
|
|
1187
1237
|
}
|
|
1238
|
+
const order = resolveLogOrder(body.order);
|
|
1239
|
+
if (order === null) {
|
|
1240
|
+
ctx.host.http.writeJson(res, 400, { error: "invalid_request" });
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1188
1243
|
const limit = body.limit === void 0 ? 200 : body.limit;
|
|
1189
1244
|
const skip = body.skip === void 0 ? 0 : body.skip;
|
|
1190
1245
|
if (!Number.isInteger(limit) || typeof limit !== "number" || limit < 1 || limit > 500 || !Number.isInteger(skip) || typeof skip !== "number" || skip < 0) {
|
|
@@ -1225,13 +1280,14 @@ async function handleRepositoryLog(req, res, ctx) {
|
|
|
1225
1280
|
const [realGitCwd, realToplevel] = await Promise.all([normalizeWorktreePath(gitCwd), normalizeWorktreePath(currentWorktreePath)]);
|
|
1226
1281
|
const scopePathspec = realToplevel !== "" && realGitCwd === realToplevel ? [] : ["."];
|
|
1227
1282
|
const skipArg = skip > 0 ? [`--skip=${skip}`] : [];
|
|
1228
|
-
const
|
|
1283
|
+
const orderArg = LOG_ORDER_ARGS[order];
|
|
1284
|
+
const result = resolvedRef ? await runGit(["log", resolvedRef, orderArg, "-n", String(limit + 1), ...skipArg, "--decorate=full", LOG_PRETTY_FORMAT, "--", ...scopePathspec], { cwd: gitCwd }) : await runGit(
|
|
1229
1285
|
// --all은 refs/stash·refs/notes까지 그래프에 유입시키므로 브랜치/태그/원격 + 현재 HEAD + 워크트리 HEAD로 한정한다
|
|
1230
|
-
["log", "--branches", "--tags", "--remotes",
|
|
1286
|
+
["log", "--branches", "--tags", "--remotes", orderArg, "-n", String(limit + 1), ...skipArg, "--decorate=full", LOG_PRETTY_FORMAT, ...headRevs, ...worktreeRevs, "--", ...scopePathspec],
|
|
1231
1287
|
{ cwd: gitCwd }
|
|
1232
1288
|
);
|
|
1233
1289
|
const parsedCommits = parseLogOutput(result.stdout);
|
|
1234
|
-
const hasMore = parsedCommits.length > limit;
|
|
1290
|
+
const hasMore = parsedCommits.length > limit || result.truncated && parsedCommits.length > 0;
|
|
1235
1291
|
const commits = annotateHeadReachability(parsedCommits.slice(0, limit), headRevList);
|
|
1236
1292
|
ctx.host.http.writeJson(res, 200, { commits, checkouts, hasMore, ...result.truncated ? { truncated: true } : {} });
|
|
1237
1293
|
} catch (error) {
|