@projitive/mcp 1.0.4 → 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.
Files changed (55) hide show
  1. package/README.md +4 -4
  2. package/output/package.json +4 -5
  3. package/output/source/design-context.js +515 -0
  4. package/output/source/index.js +50 -41
  5. package/output/source/projitive.js +8 -9
  6. package/output/source/roadmap.js +2 -2
  7. package/output/source/tasks.js +5 -6
  8. package/package.json +4 -5
  9. package/output/designs.js +0 -38
  10. package/output/helpers/artifacts/artifacts.js +0 -10
  11. package/output/helpers/artifacts/artifacts.test.js +0 -18
  12. package/output/helpers/artifacts/index.js +0 -1
  13. package/output/helpers/catch/catch.js +0 -48
  14. package/output/helpers/catch/catch.test.js +0 -43
  15. package/output/helpers/catch/index.js +0 -1
  16. package/output/helpers/files/files.js +0 -62
  17. package/output/helpers/files/files.test.js +0 -32
  18. package/output/helpers/files/index.js +0 -1
  19. package/output/helpers/index.js +0 -6
  20. package/output/helpers/linter/codes.js +0 -25
  21. package/output/helpers/linter/index.js +0 -2
  22. package/output/helpers/linter/linter.js +0 -6
  23. package/output/helpers/linter/linter.test.js +0 -16
  24. package/output/helpers/markdown/index.js +0 -1
  25. package/output/helpers/markdown/markdown.js +0 -33
  26. package/output/helpers/markdown/markdown.test.js +0 -36
  27. package/output/helpers/response/index.js +0 -1
  28. package/output/helpers/response/response.js +0 -73
  29. package/output/helpers/response/response.test.js +0 -50
  30. package/output/hooks.js +0 -49
  31. package/output/hooks.test.js +0 -40
  32. package/output/index.js +0 -227
  33. package/output/projitive.js +0 -488
  34. package/output/projitive.test.js +0 -75
  35. package/output/prompts.js +0 -87
  36. package/output/readme.js +0 -26
  37. package/output/rendering-input-guard.test.js +0 -20
  38. package/output/reports.js +0 -36
  39. package/output/resources.js +0 -95
  40. package/output/roadmap.js +0 -165
  41. package/output/roadmap.test.js +0 -11
  42. package/output/smoke-reports/2026-02-18T13-18-19-740Z/projectContext.md +0 -48
  43. package/output/smoke-reports/2026-02-18T13-18-19-740Z/projectInit.md +0 -40
  44. package/output/smoke-reports/2026-02-18T13-18-19-740Z/projectLocate.md +0 -22
  45. package/output/smoke-reports/2026-02-18T13-18-19-740Z/projectNext.md +0 -31
  46. package/output/smoke-reports/2026-02-18T13-18-19-740Z/projectScan.md +0 -28
  47. package/output/smoke-reports/2026-02-18T13-18-19-740Z/roadmapContext.md +0 -33
  48. package/output/smoke-reports/2026-02-18T13-18-19-740Z/roadmapList.md +0 -25
  49. package/output/smoke-reports/2026-02-18T13-18-19-740Z/summary.json +0 -90
  50. package/output/smoke-reports/2026-02-18T13-18-19-740Z/summary.md +0 -17
  51. package/output/smoke-reports/2026-02-18T13-18-19-740Z/taskContext.md +0 -47
  52. package/output/smoke-reports/2026-02-18T13-18-19-740Z/taskList.md +0 -27
  53. package/output/smoke-reports/2026-02-18T13-18-19-740Z/taskNext.md +0 -64
  54. package/output/tasks.js +0 -762
  55. package/output/tasks.test.js +0 -152
@@ -1,20 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import { describe, expect, it } from "vitest";
4
- const MODULE_FILES = [
5
- "tasks.ts",
6
- "roadmap.ts",
7
- "projitive.ts",
8
- ];
9
- const INVALID_LITERAL_PATTERN = /["'`]\s*-\s+(#{1,6}\s|>\s*|```)/g;
10
- describe("rendering input guard", () => {
11
- it("does not contain accidental bullet-prefixed markdown literals in module outputs", async () => {
12
- const sourceDir = path.resolve(import.meta.dirname);
13
- for (const file of MODULE_FILES) {
14
- const filePath = path.join(sourceDir, file);
15
- const content = await fs.readFile(filePath, "utf-8");
16
- const matches = content.match(INVALID_LITERAL_PATTERN) ?? [];
17
- expect(matches, `invalid literals in ${filePath}`).toHaveLength(0);
18
- }
19
- });
20
- });
package/output/reports.js DELETED
@@ -1,36 +0,0 @@
1
- import { isValidRoadmapId } from "./roadmap.js";
2
- import { isValidTaskId } from "./tasks.js";
3
- export function parseReportMetadata(markdown) {
4
- const lines = markdown.split(/\r?\n/);
5
- const metadata = {};
6
- for (const line of lines) {
7
- const [rawKey, ...rawValue] = line.split(":");
8
- if (!rawKey || rawValue.length === 0) {
9
- continue;
10
- }
11
- const key = rawKey.trim().toLowerCase();
12
- const value = rawValue.join(":").trim();
13
- if (key === "task")
14
- metadata.task = value;
15
- if (key === "roadmap")
16
- metadata.roadmap = value;
17
- if (key === "owner")
18
- metadata.owner = value;
19
- if (key === "date")
20
- metadata.date = value;
21
- }
22
- return metadata;
23
- }
24
- export function validateReportMetadata(metadata) {
25
- const errors = [];
26
- if (!metadata.task) {
27
- errors.push("Missing Task metadata");
28
- }
29
- else if (!isValidTaskId(metadata.task)) {
30
- errors.push(`Invalid Task metadata format: ${metadata.task}`);
31
- }
32
- if (metadata.roadmap && !isValidRoadmapId(metadata.roadmap)) {
33
- errors.push(`Invalid Roadmap metadata format: ${metadata.roadmap}`);
34
- }
35
- return { ok: errors.length === 0, errors };
36
- }
@@ -1,95 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const currentFilePath = fileURLToPath(import.meta.url);
5
- const sourceDir = path.dirname(currentFilePath);
6
- const repoRoot = path.resolve(sourceDir, "..", "..", "..");
7
- function resolveRepoFile(relativePath) {
8
- return path.join(repoRoot, relativePath);
9
- }
10
- async function readMarkdownOrFallback(relativePath, fallbackTitle) {
11
- const absolutePath = resolveRepoFile(relativePath);
12
- const content = await fs.readFile(absolutePath, "utf-8").catch(() => undefined);
13
- if (typeof content === "string" && content.trim().length > 0) {
14
- return content;
15
- }
16
- return [
17
- `# ${fallbackTitle}`,
18
- "",
19
- `- file: ${relativePath}`,
20
- "- status: missing-or-empty",
21
- "- next: create this file or ensure it has readable markdown content",
22
- ].join("\n");
23
- }
24
- function renderMethodCatalogMarkdown() {
25
- return [
26
- "# MCP Method Catalog",
27
- "",
28
- "## Core Pattern",
29
- "- Prefer List/Context for primary discovery/detail flows.",
30
- "- Use Next/Scan/Locate for acceleration and bootstrapping.",
31
- "",
32
- "## Methods",
33
- "| Group | Method | Role |",
34
- "|---|---|---|",
35
- "| Project | projectScan | discover governance projects by marker |",
36
- "| Project | projectNext | rank actionable projects |",
37
- "| Project | projectLocate | resolve nearest governance root |",
38
- "| Project | projectContext | summarize project governance context |",
39
- "| Task | taskList | list tasks with optional filters |",
40
- "| Task | taskNext | select top actionable task |",
41
- "| Task | taskContext | inspect one task with references |",
42
- "| Roadmap | roadmapList | list roadmap IDs and linked tasks |",
43
- "| Roadmap | roadmapContext | inspect one roadmap with references |",
44
- ].join("\n");
45
- }
46
- export function registerGovernanceResources(server) {
47
- server.registerResource("governanceWorkspace", "projitive://governance/workspace", {
48
- title: "Governance Workspace",
49
- description: "Primary governance README under .projitive",
50
- mimeType: "text/markdown",
51
- }, async () => ({
52
- contents: [
53
- {
54
- uri: "projitive://governance/workspace",
55
- text: await readMarkdownOrFallback(".projitive/README.md", "Governance Workspace"),
56
- },
57
- ],
58
- }));
59
- server.registerResource("governanceTasks", "projitive://governance/tasks", {
60
- title: "Governance Tasks",
61
- description: "Current task pool and status under .projitive/tasks.md",
62
- mimeType: "text/markdown",
63
- }, async () => ({
64
- contents: [
65
- {
66
- uri: "projitive://governance/tasks",
67
- text: await readMarkdownOrFallback(".projitive/tasks.md", "Governance Tasks"),
68
- },
69
- ],
70
- }));
71
- server.registerResource("governanceRoadmap", "projitive://governance/roadmap", {
72
- title: "Governance Roadmap",
73
- description: "Current roadmap under .projitive/roadmap.md",
74
- mimeType: "text/markdown",
75
- }, async () => ({
76
- contents: [
77
- {
78
- uri: "projitive://governance/roadmap",
79
- text: await readMarkdownOrFallback(".projitive/roadmap.md", "Governance Roadmap"),
80
- },
81
- ],
82
- }));
83
- server.registerResource("mcpMethodCatalog", "projitive://mcp/method-catalog", {
84
- title: "MCP Method Catalog",
85
- description: "Method naming and purpose map for agent routing",
86
- mimeType: "text/markdown",
87
- }, async () => ({
88
- contents: [
89
- {
90
- uri: "projitive://mcp/method-catalog",
91
- text: renderMethodCatalogMarkdown(),
92
- },
93
- ],
94
- }));
95
- }
package/output/roadmap.js DELETED
@@ -1,165 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path from "node:path";
3
- import { z } from "zod";
4
- import { candidateFilesFromArtifacts } from "./helpers/artifacts/index.js";
5
- import { discoverGovernanceArtifacts } from "./helpers/files/index.js";
6
- import { ROADMAP_LINT_CODES, renderLintSuggestions } from "./helpers/linter/index.js";
7
- import { findTextReferences } from "./helpers/markdown/index.js";
8
- import { asText, evidenceSection, guidanceSection, lintSection, nextCallSection, renderErrorMarkdown, renderToolResponseMarkdown, summarySection, } from "./helpers/response/index.js";
9
- import { resolveGovernanceDir } from "./projitive.js";
10
- import { loadTasks } from "./tasks.js";
11
- export const ROADMAP_ID_REGEX = /^ROADMAP-\d{4}$/;
12
- function collectRoadmapLintSuggestionItems(roadmapIds, tasks) {
13
- const suggestions = [];
14
- if (roadmapIds.length === 0) {
15
- suggestions.push({
16
- code: ROADMAP_LINT_CODES.IDS_EMPTY,
17
- message: "No roadmap IDs found in roadmap.md.",
18
- fixHint: "Add at least one ROADMAP-xxxx milestone.",
19
- });
20
- }
21
- if (tasks.length === 0) {
22
- suggestions.push({
23
- code: ROADMAP_LINT_CODES.TASKS_EMPTY,
24
- message: "No tasks found in tasks.md.",
25
- fixHint: "Add task cards and bind roadmapRefs for traceability.",
26
- });
27
- return suggestions;
28
- }
29
- const roadmapSet = new Set(roadmapIds);
30
- const unboundTasks = tasks.filter((task) => task.roadmapRefs.length === 0);
31
- if (unboundTasks.length > 0) {
32
- suggestions.push({
33
- code: ROADMAP_LINT_CODES.TASK_REFS_EMPTY,
34
- message: `${unboundTasks.length} task(s) have empty roadmapRefs.`,
35
- fixHint: "Bind ROADMAP-xxxx where applicable.",
36
- });
37
- }
38
- const unknownRefs = Array.from(new Set(tasks.flatMap((task) => task.roadmapRefs).filter((id) => !roadmapSet.has(id))));
39
- if (unknownRefs.length > 0) {
40
- suggestions.push({
41
- code: ROADMAP_LINT_CODES.UNKNOWN_REFS,
42
- message: `Unknown roadmapRefs detected: ${unknownRefs.join(", ")}.`,
43
- fixHint: "Add missing roadmap IDs or fix task references.",
44
- });
45
- }
46
- const noLinkedRoadmaps = roadmapIds.filter((id) => !tasks.some((task) => task.roadmapRefs.includes(id)));
47
- if (noLinkedRoadmaps.length > 0) {
48
- suggestions.push({
49
- code: ROADMAP_LINT_CODES.ZERO_LINKED_TASKS,
50
- message: `${noLinkedRoadmaps.length} roadmap ID(s) have zero linked tasks.`,
51
- fixHint: `Consider binding tasks to: ${noLinkedRoadmaps.slice(0, 3).join(", ")}${noLinkedRoadmaps.length > 3 ? ", ..." : ""}.`,
52
- });
53
- }
54
- return suggestions;
55
- }
56
- export function collectRoadmapLintSuggestions(roadmapIds, tasks) {
57
- return renderLintSuggestions(collectRoadmapLintSuggestionItems(roadmapIds, tasks));
58
- }
59
- export function isValidRoadmapId(id) {
60
- return ROADMAP_ID_REGEX.test(id);
61
- }
62
- async function readRoadmapIds(governanceDir) {
63
- const roadmapPath = path.join(governanceDir, "roadmap.md");
64
- try {
65
- const markdown = await fs.readFile(roadmapPath, "utf-8");
66
- const matches = markdown.match(/ROADMAP-\d{4}/g) ?? [];
67
- return Array.from(new Set(matches));
68
- }
69
- catch {
70
- return [];
71
- }
72
- }
73
- export function registerRoadmapTools(server) {
74
- server.registerTool("roadmapList", {
75
- title: "Roadmap List",
76
- description: "List roadmap IDs and related tasks for project planning",
77
- inputSchema: {
78
- projectPath: z.string(),
79
- },
80
- }, async ({ projectPath }) => {
81
- const governanceDir = await resolveGovernanceDir(projectPath);
82
- const roadmapIds = await readRoadmapIds(governanceDir);
83
- const { tasks } = await loadTasks(governanceDir);
84
- const lintSuggestions = collectRoadmapLintSuggestions(roadmapIds, tasks);
85
- const markdown = renderToolResponseMarkdown({
86
- toolName: "roadmapList",
87
- sections: [
88
- summarySection([
89
- `- governanceDir: ${governanceDir}`,
90
- `- roadmapCount: ${roadmapIds.length}`,
91
- ]),
92
- evidenceSection([
93
- "- roadmaps:",
94
- ...roadmapIds.map((id) => {
95
- const linkedTasks = tasks.filter((task) => task.roadmapRefs.includes(id));
96
- return `- ${id} | linkedTasks=${linkedTasks.length}`;
97
- }),
98
- ]),
99
- guidanceSection(["- Pick one roadmap ID and call `roadmapContext`."]),
100
- lintSection(lintSuggestions),
101
- nextCallSection(roadmapIds[0]
102
- ? `roadmapContext(projectPath=\"${governanceDir}\", roadmapId=\"${roadmapIds[0]}\")`
103
- : undefined),
104
- ],
105
- });
106
- return asText(markdown);
107
- });
108
- server.registerTool("roadmapContext", {
109
- title: "Roadmap Context",
110
- description: "Get one roadmap with related tasks, references, and execution context",
111
- inputSchema: {
112
- projectPath: z.string(),
113
- roadmapId: z.string(),
114
- },
115
- }, async ({ projectPath, roadmapId }) => {
116
- if (!isValidRoadmapId(roadmapId)) {
117
- return {
118
- ...asText(renderErrorMarkdown("roadmapContext", `Invalid roadmap ID format: ${roadmapId}`, ["expected format: ROADMAP-0001", "retry with a valid roadmap ID"], `roadmapContext(projectPath=\"${projectPath}\", roadmapId=\"ROADMAP-0001\")`)),
119
- isError: true,
120
- };
121
- }
122
- const governanceDir = await resolveGovernanceDir(projectPath);
123
- const artifacts = await discoverGovernanceArtifacts(governanceDir);
124
- const fileCandidates = candidateFilesFromArtifacts(artifacts);
125
- const referenceLocations = (await Promise.all(fileCandidates.map((file) => findTextReferences(file, roadmapId)))).flat();
126
- const { tasks } = await loadTasks(governanceDir);
127
- const relatedTasks = tasks.filter((task) => task.roadmapRefs.includes(roadmapId));
128
- const roadmapIds = await readRoadmapIds(governanceDir);
129
- const lintSuggestionItems = collectRoadmapLintSuggestionItems(roadmapIds, tasks);
130
- if (relatedTasks.length === 0) {
131
- lintSuggestionItems.push({
132
- code: ROADMAP_LINT_CODES.CONTEXT_RELATED_TASKS_EMPTY,
133
- message: `relatedTasks=0 for ${roadmapId}.`,
134
- fixHint: "Batch bind task roadmapRefs to improve execution traceability.",
135
- });
136
- }
137
- const lintSuggestions = renderLintSuggestions(lintSuggestionItems);
138
- const markdown = renderToolResponseMarkdown({
139
- toolName: "roadmapContext",
140
- sections: [
141
- summarySection([
142
- `- governanceDir: ${governanceDir}`,
143
- `- roadmapId: ${roadmapId}`,
144
- `- relatedTasks: ${relatedTasks.length}`,
145
- `- references: ${referenceLocations.length}`,
146
- ]),
147
- evidenceSection([
148
- "### Related Tasks",
149
- ...relatedTasks.map((task) => `- ${task.id} | ${task.status} | ${task.title}`),
150
- "",
151
- "### Reference Locations",
152
- ...referenceLocations.map((item) => `- ${item.filePath}#L${item.line}: ${item.text}`),
153
- ]),
154
- guidanceSection([
155
- "- Read roadmap references first, then related tasks.",
156
- "- Keep ROADMAP/TASK IDs unchanged while updating markdown files.",
157
- "- Re-run `roadmapContext` after edits to confirm references remain consistent.",
158
- ]),
159
- lintSection(lintSuggestions),
160
- nextCallSection(`roadmapContext(projectPath=\"${governanceDir}\", roadmapId=\"${roadmapId}\")`),
161
- ],
162
- });
163
- return asText(markdown);
164
- });
165
- }
@@ -1,11 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { collectRoadmapLintSuggestions } from "./roadmap.js";
3
- import { normalizeTask } from "./tasks.js";
4
- describe("roadmap lint rendering alignment", () => {
5
- it("renders roadmap lint in code-prefixed markdown lines", () => {
6
- const lint = collectRoadmapLintSuggestions(["ROADMAP-0001"], [
7
- normalizeTask({ id: "TASK-0001", title: "x", status: "TODO", roadmapRefs: [] }),
8
- ]);
9
- expect(lint.some((line) => line.startsWith("- [ROADMAP_TASK_REFS_EMPTY]"))).toBe(true);
10
- });
11
- });
@@ -1,48 +0,0 @@
1
- # projectContext
2
-
3
- - passed: true
4
- - args: {"projectPath":"/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive"}
5
-
6
- ## Output
7
-
8
- # projectContext
9
-
10
- ## Summary
11
- - governanceDir: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
12
- - tasksFile: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/tasks.md
13
- - roadmapIds: 1
14
-
15
- ## Evidence
16
- ### Task Summary
17
- - total: 1
18
- - TODO: 1
19
- - IN_PROGRESS: 0
20
- - BLOCKED: 0
21
- - DONE: 0
22
-
23
- ### Artifacts
24
- - ✅ README.md
25
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/README.md
26
- lineCount: 8
27
- - ✅ roadmap.md
28
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/roadmap.md
29
- lineCount: 4
30
- - ✅ tasks.md
31
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/tasks.md
32
- lineCount: 11
33
- - ✅ designs/
34
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/designs
35
- - ✅ reports/
36
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/reports
37
- - ✅ hooks/
38
- path: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/hooks
39
-
40
- ## Agent Guidance
41
- - Start from `taskList` to choose a target task.
42
- - Then call `taskContext` with a task ID to retrieve evidence locations and reading order.
43
-
44
- ## Lint Suggestions
45
- - (none)
46
-
47
- ## Next Call
48
- - taskList(projectPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive")
@@ -1,40 +0,0 @@
1
- # projectInit
2
-
3
- - passed: true
4
- - args: {"rootPath":"/Users/yinxulai/Documents/Github/projitive-mcp-smoke","governanceDir":".projitive","force":true}
5
-
6
- ## Output
7
-
8
- # projectInit
9
-
10
- ## Summary
11
- - rootPath: /Users/yinxulai/Documents/Github/projitive-mcp-smoke
12
- - governanceDir: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
13
- - markerPath: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/.projitive
14
- - force: true
15
-
16
- ## Evidence
17
- - createdFiles: 4
18
- - updatedFiles: 0
19
- - skippedFiles: 0
20
- - directories:
21
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
22
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/designs
23
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/reports
24
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/hooks
25
- - files:
26
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/.projitive
27
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/README.md
28
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/roadmap.md
29
- - created: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/tasks.md
30
-
31
- ## Agent Guidance
32
- - If files were skipped and you want to overwrite templates, rerun with force=true.
33
- - Continue with projectContext and taskList for execution.
34
-
35
- ## Lint Suggestions
36
- - After init, fill owner/roadmapRefs/links in tasks.md before marking DONE.
37
- - Keep task source-of-truth inside marker block only.
38
-
39
- ## Next Call
40
- - projectContext(projectPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive")
@@ -1,22 +0,0 @@
1
- # projectLocate
2
-
3
- - passed: true
4
- - args: {"inputPath":"/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/designs"}
5
-
6
- ## Output
7
-
8
- # projectLocate
9
-
10
- ## Summary
11
- - resolvedFrom: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/designs
12
- - governanceDir: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
13
- - markerPath: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/.projitive
14
-
15
- ## Agent Guidance
16
- - Call `projectContext` with this governanceDir to get task and roadmap summaries.
17
-
18
- ## Lint Suggestions
19
- - Run `projectContext` to get governance/module lint suggestions for this project.
20
-
21
- ## Next Call
22
- - projectContext(projectPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive")
@@ -1,31 +0,0 @@
1
- # projectNext
2
-
3
- - passed: true
4
- - args: {"rootPath":"/Users/yinxulai/Documents/Github","maxDepth":2,"limit":5}
5
-
6
- ## Output
7
-
8
- # projectNext
9
-
10
- ## Summary
11
- - rootPath: /Users/yinxulai/Documents/Github
12
- - maxDepth: 2
13
- - matchedProjects: 2
14
- - actionableProjects: 2
15
- - limit: 5
16
-
17
- ## Evidence
18
- - rankedProjects:
19
- 1. /Users/yinxulai/Documents/Github/projitive/.projitive | actionable=3 | in_progress=1 | todo=2 | blocked=0 | done=0 | latest=2026-02-17T23:50:00.000Z | tasksPath=/Users/yinxulai/Documents/Github/projitive/.projitive/tasks.md
20
- 2. /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive | actionable=1 | in_progress=0 | todo=1 | blocked=0 | done=0 | latest=2026-02-18T13:18:19.890Z | tasksPath=/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/tasks.md
21
-
22
- ## Agent Guidance
23
- - Pick top 1 project and call `projectContext` with its governanceDir.
24
- - Then call `taskList` and `taskContext` to continue execution.
25
- - If `tasksPath` is missing, create tasks.md using project convention before task-level operations.
26
-
27
- ## Lint Suggestions
28
- - (none)
29
-
30
- ## Next Call
31
- - projectContext(projectPath="/Users/yinxulai/Documents/Github/projitive/.projitive")
@@ -1,28 +0,0 @@
1
- # projectScan
2
-
3
- - passed: true
4
- - args: {"rootPath":"/Users/yinxulai/Documents/Github","maxDepth":2}
5
-
6
- ## Output
7
-
8
- # projectScan
9
-
10
- ## Summary
11
- - rootPath: /Users/yinxulai/Documents/Github
12
- - maxDepth: 2
13
- - discoveredCount: 2
14
-
15
- ## Evidence
16
- - projects:
17
- 1. /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
18
- 2. /Users/yinxulai/Documents/Github/projitive/.projitive
19
-
20
- ## Agent Guidance
21
- - Use one discovered project path and call `projectLocate` to lock governance root.
22
- - Then call `projectContext` to inspect current governance state.
23
-
24
- ## Lint Suggestions
25
- - Run `projectContext` on a discovered project to receive module-level lint suggestions.
26
-
27
- ## Next Call
28
- - projectLocate(inputPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive")
@@ -1,33 +0,0 @@
1
- # roadmapContext
2
-
3
- - passed: true
4
- - args: {"projectPath":"/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive","roadmapId":"ROADMAP-0001"}
5
-
6
- ## Output
7
-
8
- # roadmapContext
9
-
10
- ## Summary
11
- - governanceDir: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
12
- - roadmapId: ROADMAP-0001
13
- - relatedTasks: 1
14
- - references: 2
15
-
16
- ## Evidence
17
- ### Related Tasks
18
- - TASK-0001 | TODO | Bootstrap governance workspace
19
-
20
- ### Reference Locations
21
- - /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/roadmap.md#L4: - [ ] ROADMAP-0001: Bootstrap governance baseline (time: 2026-Q1)
22
- - /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/tasks.md#L9: - roadmapRefs: ROADMAP-0001
23
-
24
- ## Agent Guidance
25
- - Read roadmap references first, then related tasks.
26
- - Keep ROADMAP/TASK IDs unchanged while updating markdown files.
27
- - Re-run `roadmapContext` after edits to confirm references remain consistent.
28
-
29
- ## Lint Suggestions
30
- - (none)
31
-
32
- ## Next Call
33
- - roadmapContext(projectPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive", roadmapId="ROADMAP-0001")
@@ -1,25 +0,0 @@
1
- # roadmapList
2
-
3
- - passed: true
4
- - args: {"projectPath":"/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive","limit":5}
5
-
6
- ## Output
7
-
8
- # roadmapList
9
-
10
- ## Summary
11
- - governanceDir: /Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive
12
- - roadmapCount: 1
13
-
14
- ## Evidence
15
- - roadmaps:
16
- - ROADMAP-0001 | linkedTasks=1
17
-
18
- ## Agent Guidance
19
- - Pick one roadmap ID and call `roadmapContext`.
20
-
21
- ## Lint Suggestions
22
- - (none)
23
-
24
- ## Next Call
25
- - roadmapContext(projectPath="/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive", roadmapId="ROADMAP-0001")
@@ -1,90 +0,0 @@
1
- {
2
- "root": "/Users/yinxulai/Documents/Github",
3
- "workspace": "/Users/yinxulai/Documents/Github/projitive",
4
- "sandbox": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke",
5
- "reportDir": "/Users/yinxulai/Documents/Github/projitive/packages/mcp/output/smoke-reports/2026-02-18T13-18-19-740Z",
6
- "generatedAt": "2026-02-18T13:18:20.412Z",
7
- "results": [
8
- {
9
- "methodName": "projectInit",
10
- "passed": true,
11
- "args": {
12
- "rootPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke",
13
- "governanceDir": ".projitive",
14
- "force": true
15
- }
16
- },
17
- {
18
- "methodName": "projectScan",
19
- "passed": true,
20
- "args": {
21
- "rootPath": "/Users/yinxulai/Documents/Github",
22
- "maxDepth": 2
23
- }
24
- },
25
- {
26
- "methodName": "projectNext",
27
- "passed": true,
28
- "args": {
29
- "rootPath": "/Users/yinxulai/Documents/Github",
30
- "maxDepth": 2,
31
- "limit": 5
32
- }
33
- },
34
- {
35
- "methodName": "projectLocate",
36
- "passed": true,
37
- "args": {
38
- "inputPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive/designs"
39
- }
40
- },
41
- {
42
- "methodName": "projectContext",
43
- "passed": true,
44
- "args": {
45
- "projectPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive"
46
- }
47
- },
48
- {
49
- "methodName": "taskList",
50
- "passed": true,
51
- "args": {
52
- "projectPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive",
53
- "limit": 5
54
- }
55
- },
56
- {
57
- "methodName": "taskNext",
58
- "passed": true,
59
- "args": {
60
- "rootPath": "/Users/yinxulai/Documents/Github",
61
- "maxDepth": 2,
62
- "topCandidates": 5
63
- }
64
- },
65
- {
66
- "methodName": "taskContext",
67
- "passed": true,
68
- "args": {
69
- "projectPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive",
70
- "taskId": "TASK-0001"
71
- }
72
- },
73
- {
74
- "methodName": "roadmapList",
75
- "passed": true,
76
- "args": {
77
- "projectPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive",
78
- "limit": 5
79
- }
80
- },
81
- {
82
- "methodName": "roadmapContext",
83
- "passed": true,
84
- "args": {
85
- "projectPath": "/Users/yinxulai/Documents/Github/projitive-mcp-smoke/.projitive",
86
- "roadmapId": "ROADMAP-0001"
87
- }
88
- }
89
- ]
90
- }
@@ -1,17 +0,0 @@
1
- # MCP Smoke Summary
2
-
3
- - root: /Users/yinxulai/Documents/Github
4
- - workspace: /Users/yinxulai/Documents/Github/projitive
5
- - sandbox: /Users/yinxulai/Documents/Github/projitive-mcp-smoke
6
-
7
- ## Results
8
- - PASS | projectInit
9
- - PASS | projectScan
10
- - PASS | projectNext
11
- - PASS | projectLocate
12
- - PASS | projectContext
13
- - PASS | taskList
14
- - PASS | taskNext
15
- - PASS | taskContext
16
- - PASS | roadmapList
17
- - PASS | roadmapContext