pmpt-cli 1.14.18 → 1.14.21
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/dist/commands/clone.js +11 -4
- package/dist/commands/init.js +4 -1
- package/dist/commands/remix.js +7 -3
- package/dist/lib/config.js +83 -1
- package/dist/lib/plan.js +7 -5
- package/package.json +1 -1
package/dist/commands/clone.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import { join, dirname, resolve, sep } from 'path';
|
|
3
3
|
import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
|
|
4
|
-
import { isInitialized, getConfigDir, getHistoryDir, getDocsDir, initializeProject } from '../lib/config.js';
|
|
4
|
+
import { isInitialized, getConfigDir, getHistoryDir, getDocsDir, initializeProject, ensurePmptClaudeMd, ensureMcpJson } from '../lib/config.js';
|
|
5
5
|
import { validatePmptFile, isSafeFilename } from '../lib/pmptFile.js';
|
|
6
6
|
import { fetchPmptFile, trackClone } from '../lib/api.js';
|
|
7
7
|
import { copyToClipboard } from '../lib/clipboard.js';
|
|
@@ -112,6 +112,9 @@ export async function cmdClone(slug) {
|
|
|
112
112
|
const docsDir = getDocsDir(projectPath);
|
|
113
113
|
// History is not restored — user's journey starts fresh from v1.
|
|
114
114
|
// The version summary is embedded in pmpt.ai.md for AI reference.
|
|
115
|
+
// Add pmpt MCP instructions to CLAUDE.md and register .mcp.json for Claude Code
|
|
116
|
+
ensurePmptClaudeMd(projectPath);
|
|
117
|
+
ensureMcpJson(projectPath);
|
|
115
118
|
if (pmptData.docs) {
|
|
116
119
|
restoreDocs(docsDir, pmptData.docs);
|
|
117
120
|
}
|
|
@@ -161,9 +164,13 @@ export async function cmdClone(slug) {
|
|
|
161
164
|
`- When requirements change or new decisions are made`,
|
|
162
165
|
'',
|
|
163
166
|
`Keep the Progress and Snapshot Log sections in pmpt.md up to date.`,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
+
`**Always save proactively after milestones — do not wait for the user to ask.**`,
|
|
168
|
+
``,
|
|
169
|
+
`Try the pmpt MCP tool first:`,
|
|
170
|
+
`- Claude Code: call \`mcp__pmpt__pmpt_save\` with a descriptive \`summary\``,
|
|
171
|
+
`- Other MCP clients: call \`pmpt_save\` with a descriptive \`summary\``,
|
|
172
|
+
``,
|
|
173
|
+
`If no MCP tool is available, run \`pmpt save\` in terminal.`,
|
|
167
174
|
'',
|
|
168
175
|
'---',
|
|
169
176
|
'',
|
package/dist/commands/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
3
3
|
import { resolve, basename, join } from 'path';
|
|
4
|
-
import { initializeProject, isInitialized, getDocsDir } from '../lib/config.js';
|
|
4
|
+
import { initializeProject, isInitialized, getDocsDir, ensurePmptClaudeMd, ensureMcpJson } from '../lib/config.js';
|
|
5
5
|
import { isGitRepo, getGitInfo, formatGitInfo, getCommitCount } from '../lib/git.js';
|
|
6
6
|
import { cmdPlan } from './plan.js';
|
|
7
7
|
import { scanProject, scanResultToAnswers } from '../lib/scanner.js';
|
|
@@ -97,6 +97,9 @@ export async function cmdInit(path, options) {
|
|
|
97
97
|
gitCommitsAtInit: isGit ? gitCommits : undefined,
|
|
98
98
|
});
|
|
99
99
|
s.stop('Initialized');
|
|
100
|
+
// Add pmpt MCP instructions to CLAUDE.md and register .mcp.json for Claude Code
|
|
101
|
+
ensurePmptClaudeMd(projectPath);
|
|
102
|
+
ensureMcpJson(projectPath);
|
|
100
103
|
// Build folder structure display
|
|
101
104
|
const notes = [
|
|
102
105
|
`Path: ${config.projectPath}`,
|
package/dist/commands/remix.js
CHANGED
|
@@ -114,9 +114,13 @@ When you make progress, update \`.pmpt/docs/pmpt.md\`:
|
|
|
114
114
|
- When a feature is implemented (mark as done)
|
|
115
115
|
- When a development phase is completed
|
|
116
116
|
|
|
117
|
-
Keep the Snapshot Log up to date.
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
Keep the Snapshot Log up to date. **Always save proactively after milestones — do not wait for the user to ask.**
|
|
118
|
+
|
|
119
|
+
Try the pmpt MCP tool first:
|
|
120
|
+
- Claude Code: call \`mcp__pmpt__pmpt_save\` with a descriptive \`summary\`
|
|
121
|
+
- Other MCP clients: call \`pmpt_save\` with a descriptive \`summary\`
|
|
122
|
+
|
|
123
|
+
If no MCP tool is available, run \`pmpt save\` in terminal.
|
|
120
124
|
|
|
121
125
|
---
|
|
122
126
|
|
package/dist/lib/config.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
3
4
|
const CONFIG_DIR = '.pmpt';
|
|
4
5
|
const CONFIG_FILE = 'config.json';
|
|
5
6
|
const DEFAULT_DOCS_DIR = 'docs';
|
|
@@ -61,6 +62,87 @@ export function saveConfig(projectPath, config) {
|
|
|
61
62
|
const configPath = join(getConfigDir(projectPath), CONFIG_FILE);
|
|
62
63
|
writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
63
64
|
}
|
|
65
|
+
const PMPT_CLAUDE_SECTION = `
|
|
66
|
+
<!-- pmpt -->
|
|
67
|
+
## pmpt MCP Tools
|
|
68
|
+
|
|
69
|
+
This project uses [pmpt](https://pmptwiki.com) to track development progress.
|
|
70
|
+
|
|
71
|
+
**If pmpt MCP is available in this session**, use these tools proactively — do not wait for the user to ask:
|
|
72
|
+
- \`mcp__pmpt__pmpt_save\` — save a snapshot after milestones (always include a \`summary\`)
|
|
73
|
+
- \`mcp__pmpt__pmpt_status\` — check project status
|
|
74
|
+
- \`mcp__pmpt__pmpt_read_context\` — read project context at session start
|
|
75
|
+
|
|
76
|
+
Save after: feature completion, architecture decisions, bug fixes, or any significant progress.
|
|
77
|
+
|
|
78
|
+
If pmpt MCP is not available, run \`pmpt save\` in terminal instead.
|
|
79
|
+
<!-- /pmpt -->
|
|
80
|
+
`;
|
|
81
|
+
/**
|
|
82
|
+
* Add pmpt MCP instructions to CLAUDE.md in the project root.
|
|
83
|
+
* Creates the file if it doesn't exist; appends the section if not already present.
|
|
84
|
+
*/
|
|
85
|
+
export function ensurePmptClaudeMd(projectPath) {
|
|
86
|
+
const claudeMdPath = join(projectPath, 'CLAUDE.md');
|
|
87
|
+
const marker = '<!-- pmpt -->';
|
|
88
|
+
if (existsSync(claudeMdPath)) {
|
|
89
|
+
const content = readFileSync(claudeMdPath, 'utf-8');
|
|
90
|
+
if (content.includes(marker))
|
|
91
|
+
return; // already has pmpt section
|
|
92
|
+
writeFileSync(claudeMdPath, content.trimEnd() + '\n' + PMPT_CLAUDE_SECTION, 'utf-8');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
writeFileSync(claudeMdPath, '# Project Instructions\n' + PMPT_CLAUDE_SECTION, 'utf-8');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function detectPmptMcpPath() {
|
|
99
|
+
// Strategy 1: sibling to the current pmpt binary
|
|
100
|
+
try {
|
|
101
|
+
const pmptBin = process.argv[1];
|
|
102
|
+
const siblingPath = join(dirname(pmptBin), 'pmpt-mcp');
|
|
103
|
+
if (existsSync(siblingPath))
|
|
104
|
+
return siblingPath;
|
|
105
|
+
}
|
|
106
|
+
catch { /* skip */ }
|
|
107
|
+
// Strategy 2: which / where command
|
|
108
|
+
try {
|
|
109
|
+
const cmd = process.platform === 'win32' ? 'where pmpt-mcp' : 'which pmpt-mcp';
|
|
110
|
+
const result = execSync(cmd, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
111
|
+
const firstLine = result.split('\n')[0].trim();
|
|
112
|
+
if (firstLine && existsSync(firstLine))
|
|
113
|
+
return firstLine;
|
|
114
|
+
}
|
|
115
|
+
catch { /* not in PATH */ }
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create or update .mcp.json in the project root to register the pmpt MCP server.
|
|
120
|
+
* Skips silently if pmpt-mcp binary cannot be found.
|
|
121
|
+
*/
|
|
122
|
+
export function ensureMcpJson(projectPath) {
|
|
123
|
+
const mcpJsonPath = join(projectPath, '.mcp.json');
|
|
124
|
+
const mcpPath = detectPmptMcpPath();
|
|
125
|
+
if (!mcpPath)
|
|
126
|
+
return; // can't detect binary — skip silently
|
|
127
|
+
let config = {};
|
|
128
|
+
if (existsSync(mcpJsonPath)) {
|
|
129
|
+
try {
|
|
130
|
+
config = JSON.parse(readFileSync(mcpJsonPath, 'utf-8'));
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
config = {};
|
|
134
|
+
}
|
|
135
|
+
// Already registered — don't overwrite
|
|
136
|
+
const servers = config.mcpServers;
|
|
137
|
+
if (servers?.pmpt)
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
141
|
+
config.mcpServers = {};
|
|
142
|
+
}
|
|
143
|
+
config.mcpServers.pmpt = { command: mcpPath };
|
|
144
|
+
writeFileSync(mcpJsonPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
145
|
+
}
|
|
64
146
|
const PMPT_README = `# .pmpt — Your Project's Development Journal
|
|
65
147
|
|
|
66
148
|
This folder is managed by [pmpt](https://pmptwiki.com). It records your product development journey with AI.
|
package/dist/lib/plan.js
CHANGED
|
@@ -102,17 +102,19 @@ After significant milestones, save a snapshot using the method below.
|
|
|
102
102
|
|
|
103
103
|
### Saving Snapshots
|
|
104
104
|
|
|
105
|
-
**
|
|
106
|
-
Call the \`pmpt_save\` MCP tool directly with a descriptive summary. Do this proactively after milestones — do not wait for the user to ask.
|
|
105
|
+
**Always save proactively after milestones — do not wait for the user to ask.**
|
|
107
106
|
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
Try the pmpt MCP tool first:
|
|
108
|
+
- Claude Code: call \`mcp__pmpt__pmpt_save\` with a descriptive \`summary\`
|
|
109
|
+
- Other MCP clients: call \`pmpt_save\` with a descriptive \`summary\`
|
|
110
|
+
|
|
111
|
+
If no MCP tool is available, run \`pmpt save\` in the terminal.
|
|
110
112
|
|
|
111
113
|
### Per-Feature Checklist
|
|
112
114
|
After completing each feature above:
|
|
113
115
|
1. Mark the feature done in \`.pmpt/docs/pmpt.md\` (change \`- [ ]\` to \`- [x]\`)
|
|
114
116
|
2. Add a brief note to the Snapshot Log section
|
|
115
|
-
3.
|
|
117
|
+
3. Call \`mcp__pmpt__pmpt_save\` (or \`pmpt save\` in terminal) with a summary
|
|
116
118
|
|
|
117
119
|
### What to Record in pmpt.md
|
|
118
120
|
|