@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 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.0"
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.0",
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.0",
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.0",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knowsuchagency/fulcrum",
3
- "version": "5.1.0",
3
+ "version": "5.1.1",
4
4
  "description": "Harness Attention. Orchestrate Agents. Ship.",
5
5
  "license": "PolyForm-Perimeter-1.0.0",
6
6
  "repository": {
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 trustFlag = trust ? "--trust " : "";
1223494
- execSync8(`uvx copier copy --data-file "${answersFile}" --force --vcs-ref HEAD ${trustFlag}"${templatePath}" "${fullOutputPath}"`, {
1223495
- encoding: "utf-8",
1223496
- stdio: "pipe",
1223497
- timeout: 120000
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 error = err;
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
- execSync8("git init", {
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
- encoding: "utf-8",
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.0"
1266343
+ version: "5.1.1"
1266316
1266344
  });
1266317
1266345
  const client3 = new FulcrumClient(`http://localhost:${port}`);
1266318
1266346
  registerTools(server2, client3);