@knowsuchagency/fulcrum 4.4.4 → 4.4.6
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 +89 -5
- package/package.json +1 -1
- package/server/index.js +9592 -8452
package/bin/fulcrum.js
CHANGED
|
@@ -1729,6 +1729,19 @@ class FulcrumClient {
|
|
|
1729
1729
|
const query = params.toString() ? `?${params.toString()}` : "";
|
|
1730
1730
|
return this.fetch(`/api/jobs/${encodeURIComponent(name)}/run${query}`, { method: "POST" });
|
|
1731
1731
|
}
|
|
1732
|
+
async listTemplates() {
|
|
1733
|
+
const repos = await this.listRepositories();
|
|
1734
|
+
return repos.filter((r3) => r3.isCopierTemplate);
|
|
1735
|
+
}
|
|
1736
|
+
async getTemplateQuestions(source) {
|
|
1737
|
+
return this.fetch(`/api/copier/questions?source=${encodeURIComponent(source)}`);
|
|
1738
|
+
}
|
|
1739
|
+
async createFromTemplate(data) {
|
|
1740
|
+
return this.fetch("/api/copier/create", {
|
|
1741
|
+
method: "POST",
|
|
1742
|
+
body: JSON.stringify(data)
|
|
1743
|
+
});
|
|
1744
|
+
}
|
|
1732
1745
|
async search(input) {
|
|
1733
1746
|
const params = new URLSearchParams({ q: input.query });
|
|
1734
1747
|
if (input.entities?.length)
|
|
@@ -43997,6 +44010,27 @@ var init_registry = __esm(() => {
|
|
|
43997
44010
|
keywords: ["repository", "repo", "unlink", "project", "disconnect", "detach"],
|
|
43998
44011
|
defer_loading: true
|
|
43999
44012
|
},
|
|
44013
|
+
{
|
|
44014
|
+
name: "list_templates",
|
|
44015
|
+
description: "List available Copier project templates",
|
|
44016
|
+
category: "repositories",
|
|
44017
|
+
keywords: ["template", "copier", "scaffold", "boilerplate", "list"],
|
|
44018
|
+
defer_loading: true
|
|
44019
|
+
},
|
|
44020
|
+
{
|
|
44021
|
+
name: "get_template_questions",
|
|
44022
|
+
description: "Get questions/prompts defined by a Copier template",
|
|
44023
|
+
category: "repositories",
|
|
44024
|
+
keywords: ["template", "copier", "questions", "prompts", "answers", "scaffold"],
|
|
44025
|
+
defer_loading: true
|
|
44026
|
+
},
|
|
44027
|
+
{
|
|
44028
|
+
name: "create_from_template",
|
|
44029
|
+
description: "Create a new project from a Copier template",
|
|
44030
|
+
category: "repositories",
|
|
44031
|
+
keywords: ["template", "copier", "create", "scaffold", "project", "boilerplate", "generate"],
|
|
44032
|
+
defer_loading: true
|
|
44033
|
+
},
|
|
44000
44034
|
{
|
|
44001
44035
|
name: "list_exec_sessions",
|
|
44002
44036
|
description: "List active command execution sessions",
|
|
@@ -45219,6 +45253,54 @@ var init_repositories = __esm(() => {
|
|
|
45219
45253
|
init_utils();
|
|
45220
45254
|
});
|
|
45221
45255
|
|
|
45256
|
+
// cli/src/mcp/tools/copier.ts
|
|
45257
|
+
var registerCopierTools = (server, client) => {
|
|
45258
|
+
server.tool("list_templates", "List available Copier project templates. Returns repositories marked as Copier templates.", {}, async () => {
|
|
45259
|
+
try {
|
|
45260
|
+
const templates = await client.listTemplates();
|
|
45261
|
+
return formatSuccess(templates);
|
|
45262
|
+
} catch (err) {
|
|
45263
|
+
return handleToolError(err);
|
|
45264
|
+
}
|
|
45265
|
+
});
|
|
45266
|
+
server.tool("get_template_questions", "Get the questions/prompts defined by a Copier template. Use this before create_from_template to discover required answers.", {
|
|
45267
|
+
source: exports_external.string().describe("Template source: a repository ID, local path, or git URL")
|
|
45268
|
+
}, async ({ source }) => {
|
|
45269
|
+
try {
|
|
45270
|
+
const result = await client.getTemplateQuestions(source);
|
|
45271
|
+
return formatSuccess(result);
|
|
45272
|
+
} catch (err) {
|
|
45273
|
+
return handleToolError(err);
|
|
45274
|
+
}
|
|
45275
|
+
});
|
|
45276
|
+
server.tool("create_from_template", "Create a new project from a Copier template. Call get_template_questions first to discover required answers.", {
|
|
45277
|
+
templateSource: exports_external.string().describe("Template source: a repository ID, local path, or git URL"),
|
|
45278
|
+
outputPath: exports_external.string().describe("Absolute path where the new project will be created"),
|
|
45279
|
+
projectName: exports_external.string().describe("Name for the new project"),
|
|
45280
|
+
answers: exports_external.record(exports_external.unknown()).describe("Answers to the template questions (from get_template_questions)"),
|
|
45281
|
+
trust: exports_external.optional(exports_external.boolean()).describe("Trust template for unsafe features like tasks and migrations (default: true)"),
|
|
45282
|
+
existingProjectId: exports_external.optional(exports_external.string()).describe("Link to an existing project instead of creating a new one")
|
|
45283
|
+
}, async ({ templateSource, outputPath, projectName, answers, trust, existingProjectId }) => {
|
|
45284
|
+
try {
|
|
45285
|
+
const result = await client.createFromTemplate({
|
|
45286
|
+
templateSource,
|
|
45287
|
+
outputPath,
|
|
45288
|
+
projectName,
|
|
45289
|
+
answers,
|
|
45290
|
+
trust: trust ?? true,
|
|
45291
|
+
existingProjectId
|
|
45292
|
+
});
|
|
45293
|
+
return formatSuccess(result);
|
|
45294
|
+
} catch (err) {
|
|
45295
|
+
return handleToolError(err);
|
|
45296
|
+
}
|
|
45297
|
+
});
|
|
45298
|
+
};
|
|
45299
|
+
var init_copier = __esm(() => {
|
|
45300
|
+
init_zod2();
|
|
45301
|
+
init_utils();
|
|
45302
|
+
});
|
|
45303
|
+
|
|
45222
45304
|
// cli/src/mcp/tools/notifications.ts
|
|
45223
45305
|
var registerNotificationTools = (server, client) => {
|
|
45224
45306
|
server.tool("send_notification", "Send a notification to all enabled notification channels", {
|
|
@@ -46689,6 +46771,7 @@ function registerTools(server, client) {
|
|
|
46689
46771
|
registerCoreTools(server, client);
|
|
46690
46772
|
registerTaskTools(server, client);
|
|
46691
46773
|
registerRepositoryTools(server, client);
|
|
46774
|
+
registerCopierTools(server, client);
|
|
46692
46775
|
registerNotificationTools(server, client);
|
|
46693
46776
|
registerExecTools(server, client);
|
|
46694
46777
|
registerProjectTools(server, client);
|
|
@@ -46710,6 +46793,7 @@ var init_tools = __esm(() => {
|
|
|
46710
46793
|
init_core5();
|
|
46711
46794
|
init_tasks();
|
|
46712
46795
|
init_repositories();
|
|
46796
|
+
init_copier();
|
|
46713
46797
|
init_notifications();
|
|
46714
46798
|
init_exec();
|
|
46715
46799
|
init_projects();
|
|
@@ -46744,7 +46828,7 @@ async function runMcpServer(urlOverride, portOverride) {
|
|
|
46744
46828
|
const client = new FulcrumClient(urlOverride, portOverride);
|
|
46745
46829
|
const server = new McpServer({
|
|
46746
46830
|
name: "fulcrum",
|
|
46747
|
-
version: "4.4.
|
|
46831
|
+
version: "4.4.6"
|
|
46748
46832
|
});
|
|
46749
46833
|
registerTools(server, client);
|
|
46750
46834
|
const transport = new StdioServerTransport;
|
|
@@ -49093,7 +49177,7 @@ var marketplace_default = `{
|
|
|
49093
49177
|
"name": "fulcrum",
|
|
49094
49178
|
"source": "./",
|
|
49095
49179
|
"description": "Task orchestration for Claude Code",
|
|
49096
|
-
"version": "4.4.
|
|
49180
|
+
"version": "4.4.6",
|
|
49097
49181
|
"skills": [
|
|
49098
49182
|
"./skills/fulcrum"
|
|
49099
49183
|
],
|
|
@@ -49116,7 +49200,7 @@ var marketplace_default = `{
|
|
|
49116
49200
|
var plugin_default = `{
|
|
49117
49201
|
"name": "fulcrum",
|
|
49118
49202
|
"description": "Fulcrum task orchestration for Claude Code",
|
|
49119
|
-
"version": "4.4.
|
|
49203
|
+
"version": "4.4.6",
|
|
49120
49204
|
"author": {
|
|
49121
49205
|
"name": "Fulcrum"
|
|
49122
49206
|
},
|
|
@@ -50221,7 +50305,7 @@ function compareVersions(v1, v2) {
|
|
|
50221
50305
|
var package_default = {
|
|
50222
50306
|
name: "@knowsuchagency/fulcrum",
|
|
50223
50307
|
private: true,
|
|
50224
|
-
version: "4.4.
|
|
50308
|
+
version: "4.4.6",
|
|
50225
50309
|
description: "Harness Attention. Orchestrate Agents. Ship.",
|
|
50226
50310
|
license: "PolyForm-Perimeter-1.0.0",
|
|
50227
50311
|
type: "module",
|
|
@@ -50237,7 +50321,7 @@ var package_default = {
|
|
|
50237
50321
|
"db:studio": "drizzle-kit studio"
|
|
50238
50322
|
},
|
|
50239
50323
|
dependencies: {
|
|
50240
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.
|
|
50324
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.50",
|
|
50241
50325
|
"@atlaskit/pragmatic-drag-and-drop": "^1.7.7",
|
|
50242
50326
|
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
|
|
50243
50327
|
"@azurity/pure-nerd-font": "^3.0.5",
|