@knowsuchagency/fulcrum 5.1.0 → 5.1.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/bin/fulcrum.js +4 -4
- package/package.json +1 -1
- package/server/index.js +45 -17
package/bin/fulcrum.js
CHANGED
|
@@ -46838,7 +46838,7 @@ async function runMcpServer(urlOverride, portOverride) {
|
|
|
46838
46838
|
const client = new FulcrumClient(urlOverride, portOverride);
|
|
46839
46839
|
const server = new McpServer({
|
|
46840
46840
|
name: "fulcrum",
|
|
46841
|
-
version: "5.1.
|
|
46841
|
+
version: "5.1.1"
|
|
46842
46842
|
});
|
|
46843
46843
|
registerTools(server, client);
|
|
46844
46844
|
const transport = new StdioServerTransport;
|
|
@@ -49187,7 +49187,7 @@ var marketplace_default = `{
|
|
|
49187
49187
|
"name": "fulcrum",
|
|
49188
49188
|
"source": "./",
|
|
49189
49189
|
"description": "Task orchestration for Claude Code",
|
|
49190
|
-
"version": "5.1.
|
|
49190
|
+
"version": "5.1.1",
|
|
49191
49191
|
"skills": [
|
|
49192
49192
|
"./skills/fulcrum"
|
|
49193
49193
|
],
|
|
@@ -49210,7 +49210,7 @@ var marketplace_default = `{
|
|
|
49210
49210
|
var plugin_default = `{
|
|
49211
49211
|
"name": "fulcrum",
|
|
49212
49212
|
"description": "Fulcrum task orchestration for Claude Code",
|
|
49213
|
-
"version": "5.1.
|
|
49213
|
+
"version": "5.1.1",
|
|
49214
49214
|
"author": {
|
|
49215
49215
|
"name": "Fulcrum"
|
|
49216
49216
|
},
|
|
@@ -50227,7 +50227,7 @@ function compareVersions(v1, v2) {
|
|
|
50227
50227
|
var package_default = {
|
|
50228
50228
|
name: "@knowsuchagency/fulcrum",
|
|
50229
50229
|
private: true,
|
|
50230
|
-
version: "5.1.
|
|
50230
|
+
version: "5.1.1",
|
|
50231
50231
|
description: "Harness Attention. Orchestrate Agents. Ship.",
|
|
50232
50232
|
license: "PolyForm-Perimeter-1.0.0",
|
|
50233
50233
|
type: "module",
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -1223326,6 +1223326,31 @@ import { join as join31 } from "path";
|
|
|
1223326
1223326
|
import { tmpdir as tmpdir4 } from "os";
|
|
1223327
1223327
|
import { execSync as execSync8 } from "child_process";
|
|
1223328
1223328
|
var app10 = new Hono2;
|
|
1223329
|
+
async function runCommand(cmd, opts = {}) {
|
|
1223330
|
+
const { cwd, timeoutMs = 120000 } = opts;
|
|
1223331
|
+
const proc2 = Bun.spawn(cmd, { cwd, stdout: "pipe", stderr: "pipe" });
|
|
1223332
|
+
let timedOut = false;
|
|
1223333
|
+
const timer = setTimeout(() => {
|
|
1223334
|
+
timedOut = true;
|
|
1223335
|
+
proc2.kill();
|
|
1223336
|
+
}, timeoutMs);
|
|
1223337
|
+
try {
|
|
1223338
|
+
const [stdout, stderr] = await Promise.all([
|
|
1223339
|
+
new Response(proc2.stdout).text(),
|
|
1223340
|
+
new Response(proc2.stderr).text()
|
|
1223341
|
+
]);
|
|
1223342
|
+
const code = await proc2.exited;
|
|
1223343
|
+
if (timedOut) {
|
|
1223344
|
+
throw new Error(`Command timed out after ${timeoutMs}ms: ${cmd.join(" ")}`);
|
|
1223345
|
+
}
|
|
1223346
|
+
if (code !== 0) {
|
|
1223347
|
+
throw new Error(stderr.trim() || `${cmd[0]} exited with code ${code}`);
|
|
1223348
|
+
}
|
|
1223349
|
+
return { stdout, stderr };
|
|
1223350
|
+
} finally {
|
|
1223351
|
+
clearTimeout(timer);
|
|
1223352
|
+
}
|
|
1223353
|
+
}
|
|
1223329
1223354
|
function isUvInstalled() {
|
|
1223330
1223355
|
try {
|
|
1223331
1223356
|
execSync8("uv --version", { stdio: "pipe" });
|
|
@@ -1223490,30 +1223515,33 @@ app10.post("/create", async (c2) => {
|
|
|
1223490
1223515
|
answersFile = join31(tmpdir4(), `copier-answers-${crypto.randomUUID()}.json`);
|
|
1223491
1223516
|
writeFileSync8(answersFile, JSON.stringify(filteredAnswers));
|
|
1223492
1223517
|
try {
|
|
1223493
|
-
const
|
|
1223494
|
-
|
|
1223495
|
-
|
|
1223496
|
-
|
|
1223497
|
-
|
|
1223498
|
-
|
|
1223518
|
+
const copierArgs = [
|
|
1223519
|
+
"uvx",
|
|
1223520
|
+
"copier",
|
|
1223521
|
+
"copy",
|
|
1223522
|
+
"--data-file",
|
|
1223523
|
+
answersFile,
|
|
1223524
|
+
"--force",
|
|
1223525
|
+
"--vcs-ref",
|
|
1223526
|
+
"HEAD",
|
|
1223527
|
+
...trust ? ["--trust"] : [],
|
|
1223528
|
+
templatePath,
|
|
1223529
|
+
fullOutputPath
|
|
1223530
|
+
];
|
|
1223531
|
+
await runCommand(copierArgs, { timeoutMs: 180000 });
|
|
1223499
1223532
|
} catch (err) {
|
|
1223500
|
-
const
|
|
1223501
|
-
const errorMessage = error.stderr || error.message || "Copier execution failed";
|
|
1223533
|
+
const errorMessage = err instanceof Error ? err.message : "Copier execution failed";
|
|
1223502
1223534
|
log2.api.error("Copier execution failed", { templatePath, outputPath: fullOutputPath, error: errorMessage });
|
|
1223503
1223535
|
return c2.json({ error: errorMessage }, 500);
|
|
1223504
1223536
|
}
|
|
1223505
1223537
|
const gitPath = join31(fullOutputPath, ".git");
|
|
1223506
1223538
|
if (!existsSync23(gitPath)) {
|
|
1223507
1223539
|
try {
|
|
1223508
|
-
|
|
1223540
|
+
await runCommand(["git", "init"], { cwd: fullOutputPath, timeoutMs: 15000 });
|
|
1223541
|
+
await runCommand(["git", "add", "-A"], { cwd: fullOutputPath, timeoutMs: 30000 });
|
|
1223542
|
+
await runCommand(["git", "commit", "-m", "Initial commit from template"], {
|
|
1223509
1223543
|
cwd: fullOutputPath,
|
|
1223510
|
-
|
|
1223511
|
-
stdio: "pipe"
|
|
1223512
|
-
});
|
|
1223513
|
-
execSync8('git add -A && git commit -m "Initial commit from template"', {
|
|
1223514
|
-
cwd: fullOutputPath,
|
|
1223515
|
-
encoding: "utf-8",
|
|
1223516
|
-
stdio: "pipe"
|
|
1223544
|
+
timeoutMs: 30000
|
|
1223517
1223545
|
});
|
|
1223518
1223546
|
log2.api.info("Initialized git repository", { path: fullOutputPath });
|
|
1223519
1223547
|
} catch (gitErr) {
|
|
@@ -1266312,7 +1266340,7 @@ mcpRoutes.all("/", async (c2) => {
|
|
|
1266312
1266340
|
});
|
|
1266313
1266341
|
const server2 = new McpServer({
|
|
1266314
1266342
|
name: "fulcrum",
|
|
1266315
|
-
version: "5.1.
|
|
1266343
|
+
version: "5.1.1"
|
|
1266316
1266344
|
});
|
|
1266317
1266345
|
const client3 = new FulcrumClient(`http://localhost:${port}`);
|
|
1266318
1266346
|
registerTools(server2, client3);
|