@projitive/mcp 1.0.5 → 1.0.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/README.md +4 -4
- package/output/package.json +1 -1
- package/output/source/design-context.js +4 -1
- package/output/source/index.js +10 -11
- package/output/source/projitive.js +3 -4
- package/output/source/tasks.js +2 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Language: English | [简体中文](README_CN.md)
|
|
4
4
|
|
|
5
|
-
**Current Spec Version: projitive-spec v1.0.0 | MCP Version: 1.0.
|
|
5
|
+
**Current Spec Version: projitive-spec v1.0.0 | MCP Version: 1.0.6**
|
|
6
6
|
|
|
7
7
|
Projitive MCP server (semantic interface edition) helps agents discover projects, select tasks, locate evidence, and execute under governance workflows.
|
|
8
8
|
|
|
@@ -149,7 +149,7 @@ npm run test
|
|
|
149
149
|
#### `projectInit`
|
|
150
150
|
|
|
151
151
|
- **Purpose**: manually initialize governance directory structure for a project (default `.projitive`).
|
|
152
|
-
- **Input**: `projectPath
|
|
152
|
+
- **Input**: `projectPath`, `governanceDir?`, `force?`
|
|
153
153
|
- **Output Example (Markdown)**:
|
|
154
154
|
|
|
155
155
|
```markdown
|
|
@@ -177,7 +177,7 @@ npm run test
|
|
|
177
177
|
#### `projectNext`
|
|
178
178
|
|
|
179
179
|
- **Purpose**: directly list recently actionable projects (ranked by actionable task count and recency).
|
|
180
|
-
- **Input**: `
|
|
180
|
+
- **Input**: `maxDepth?`, `limit?`
|
|
181
181
|
- **Output Example (Markdown)**:
|
|
182
182
|
|
|
183
183
|
```markdown
|
|
@@ -294,7 +294,7 @@ npm run test
|
|
|
294
294
|
#### `taskNext`
|
|
295
295
|
|
|
296
296
|
- **Purpose**: one-step workflow for project discovery + best task selection + evidence/read-order output.
|
|
297
|
-
- **Input**: `
|
|
297
|
+
- **Input**: `maxDepth?`, `topCandidates?`
|
|
298
298
|
- **Output Example (Markdown)**:
|
|
299
299
|
|
|
300
300
|
```markdown
|
package/output/package.json
CHANGED
|
@@ -84,8 +84,11 @@ export function registerDesignContextPrompts(server) {
|
|
|
84
84
|
text: [
|
|
85
85
|
"Execute Projitive task with minimal calls:",
|
|
86
86
|
"",
|
|
87
|
+
"Prerequisite:",
|
|
88
|
+
"- If target project has no `.projitive`, run: projectInit(projectPath=<project-dir>)",
|
|
89
|
+
"",
|
|
87
90
|
"STEP 1: Get task (1 call)",
|
|
88
|
-
"- Run: taskNext(
|
|
91
|
+
"- Run: taskNext()",
|
|
89
92
|
"- Result: selectedTaskId, suggestedReadOrder",
|
|
90
93
|
"",
|
|
91
94
|
"STEP 2: Load context (1-2 calls)",
|
package/output/source/index.js
CHANGED
|
@@ -47,7 +47,7 @@ function renderMethodCatalogMarkdown() {
|
|
|
47
47
|
"## Start Here",
|
|
48
48
|
"- Unknown project path: `projectScan` -> `projectLocate` -> `projectContext` -> `taskNext`.",
|
|
49
49
|
"- Known project path: `projectContext` -> `taskNext` (or `taskList`) -> `taskContext`.",
|
|
50
|
-
"- Need to bootstrap governance: call `projectInit` only when `.projitive` is missing.",
|
|
50
|
+
"- Need to bootstrap governance: call `projectInit(projectPath=\"<project-dir>\")` only when `.projitive` is missing.",
|
|
51
51
|
"",
|
|
52
52
|
"## Methods",
|
|
53
53
|
"| Order | Group | Method | Agent Use |",
|
|
@@ -61,7 +61,7 @@ function renderMethodCatalogMarkdown() {
|
|
|
61
61
|
"| 7 | Roadmap | roadmapList | inspect roadmap-task linkage |",
|
|
62
62
|
"| 8 | Roadmap | roadmapContext | inspect one roadmap with references |",
|
|
63
63
|
"| 9 | Project | projectNext | rank actionable projects across workspace |",
|
|
64
|
-
"| 10 | Project | projectInit | bootstrap governance files if missing |"
|
|
64
|
+
"| 10 | Project | projectInit | bootstrap governance files if missing |"
|
|
65
65
|
].join("\n");
|
|
66
66
|
}
|
|
67
67
|
function registerGovernanceResources() {
|
|
@@ -132,14 +132,13 @@ function registerGovernancePrompts() {
|
|
|
132
132
|
title: "Execute Task Workflow",
|
|
133
133
|
description: "Primary execution prompt: select one task, execute, and verify evidence consistency",
|
|
134
134
|
argsSchema: {
|
|
135
|
-
rootPath: z.string().optional(),
|
|
136
135
|
projectPath: z.string().optional(),
|
|
137
136
|
taskId: z.string().optional(),
|
|
138
137
|
},
|
|
139
|
-
}, async ({
|
|
138
|
+
}, async ({ projectPath, taskId }) => {
|
|
140
139
|
const taskEntry = taskId && projectPath
|
|
141
140
|
? `1) Run taskContext(projectPath=\"${projectPath}\", taskId=\"${taskId}\").`
|
|
142
|
-
:
|
|
141
|
+
: "1) Run taskNext().";
|
|
143
142
|
const text = [
|
|
144
143
|
"You are executing Projitive governance workflow in agent-first mode.",
|
|
145
144
|
"",
|
|
@@ -150,6 +149,7 @@ function registerGovernancePrompts() {
|
|
|
150
149
|
"4) Re-run taskContext for the selected task and verify references.",
|
|
151
150
|
"",
|
|
152
151
|
"Fallbacks:",
|
|
152
|
+
"- If `.projitive` is missing for a known project, run `projectInit(projectPath=\"<project-dir>\")` first.",
|
|
153
153
|
"- If taskNext returns no actionable task, follow its no-task checklist and create 1-3 TODO tasks.",
|
|
154
154
|
"- If project is unknown, run projectScan -> projectLocate -> projectContext before task tools.",
|
|
155
155
|
"",
|
|
@@ -189,17 +189,16 @@ function registerGovernancePrompts() {
|
|
|
189
189
|
server.registerPrompt("triageProjectGovernance", {
|
|
190
190
|
title: "Triage Project Governance",
|
|
191
191
|
description: "Discovery-first triage prompt to pick project and next executable task",
|
|
192
|
-
argsSchema: {
|
|
193
|
-
|
|
194
|
-
},
|
|
195
|
-
}, async ({ rootPath }) => {
|
|
192
|
+
argsSchema: {},
|
|
193
|
+
}, async () => {
|
|
196
194
|
const text = [
|
|
197
195
|
"Triage governance and pick one execution target quickly.",
|
|
198
196
|
"",
|
|
197
|
+
"0) If known project has no `.projitive`, run projectInit(projectPath=<project-dir>) first.",
|
|
199
198
|
"1) If project path is unknown, run projectScan() and pick one discovered project.",
|
|
200
|
-
|
|
199
|
+
"2) Run projectNext() to rank projects.",
|
|
201
200
|
"3) Run projectContext(projectPath=<selectedProject>).",
|
|
202
|
-
"4) Run taskNext(
|
|
201
|
+
"4) Run taskNext() for best actionable task.",
|
|
203
202
|
"5) If manual filtering is needed, run taskList(projectPath=<selectedProject>, status=IN_PROGRESS).",
|
|
204
203
|
"6) Continue with taskContext(projectPath=<selectedProject>, taskId=<selectedTaskId>).",
|
|
205
204
|
].join("\n");
|
|
@@ -276,7 +276,7 @@ export function registerProjectTools(server) {
|
|
|
276
276
|
title: "Project Init",
|
|
277
277
|
description: "Bootstrap governance files when a project has no .projitive yet",
|
|
278
278
|
inputSchema: {
|
|
279
|
-
projectPath: z.string()
|
|
279
|
+
projectPath: z.string(),
|
|
280
280
|
governanceDir: z.string().optional(),
|
|
281
281
|
force: z.boolean().optional(),
|
|
282
282
|
},
|
|
@@ -356,12 +356,11 @@ export function registerProjectTools(server) {
|
|
|
356
356
|
title: "Project Next",
|
|
357
357
|
description: "Rank actionable projects and return the best execution target",
|
|
358
358
|
inputSchema: {
|
|
359
|
-
rootPath: z.string().optional(),
|
|
360
359
|
maxDepth: z.number().int().min(0).max(8).optional(),
|
|
361
360
|
limit: z.number().int().min(1).max(50).optional(),
|
|
362
361
|
},
|
|
363
|
-
}, async ({
|
|
364
|
-
const root = resolveScanRoot(
|
|
362
|
+
}, async ({ maxDepth, limit }) => {
|
|
363
|
+
const root = resolveScanRoot();
|
|
365
364
|
const depth = resolveScanDepth(maxDepth);
|
|
366
365
|
const projects = await discoverProjects(root, depth);
|
|
367
366
|
const snapshots = await Promise.all(projects.map(async (governanceDir) => {
|
package/output/source/tasks.js
CHANGED
|
@@ -545,12 +545,11 @@ export function registerTaskTools(server) {
|
|
|
545
545
|
title: "Task Next",
|
|
546
546
|
description: "Start here to auto-select the highest-priority actionable task",
|
|
547
547
|
inputSchema: {
|
|
548
|
-
rootPath: z.string().optional(),
|
|
549
548
|
maxDepth: z.number().int().min(0).max(8).optional(),
|
|
550
549
|
topCandidates: z.number().int().min(1).max(20).optional(),
|
|
551
550
|
},
|
|
552
|
-
}, async ({
|
|
553
|
-
const root = resolveScanRoot(
|
|
551
|
+
}, async ({ maxDepth, topCandidates }) => {
|
|
552
|
+
const root = resolveScanRoot();
|
|
554
553
|
const depth = resolveScanDepth(maxDepth);
|
|
555
554
|
const projects = await discoverProjects(root, depth);
|
|
556
555
|
const rankedCandidates = rankActionableTaskCandidates(await readActionableTaskCandidates(projects));
|