@infinitedusky/indusk-mcp 1.2.8 → 1.3.0
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.
|
@@ -204,6 +204,10 @@ export async function extensionsAdd(projectRoot, name, from) {
|
|
|
204
204
|
catch {
|
|
205
205
|
// leave as-is if parsing fails
|
|
206
206
|
}
|
|
207
|
+
// If source is npm, install the underlying package
|
|
208
|
+
if (from.startsWith("npm:")) {
|
|
209
|
+
installNpmPackage(projectRoot, name, from.slice(4));
|
|
210
|
+
}
|
|
207
211
|
const targetPath = join(extensionsDir(projectRoot), `${name}.json`);
|
|
208
212
|
writeFileSync(targetPath, manifestContent);
|
|
209
213
|
console.info(` ${name}: added from ${from}`);
|
|
@@ -230,6 +234,31 @@ export async function extensionsAdd(projectRoot, name, from) {
|
|
|
230
234
|
// ignore parse errors
|
|
231
235
|
}
|
|
232
236
|
}
|
|
237
|
+
function installNpmPackage(projectRoot, extName, pkg) {
|
|
238
|
+
const pm = existsSync(join(projectRoot, "pnpm-lock.yaml"))
|
|
239
|
+
? "pnpm"
|
|
240
|
+
: existsSync(join(projectRoot, "yarn.lock"))
|
|
241
|
+
? "yarn"
|
|
242
|
+
: "npm";
|
|
243
|
+
const isWorkspace = existsSync(join(projectRoot, "pnpm-workspace.yaml"));
|
|
244
|
+
const addCmd = pm === "pnpm"
|
|
245
|
+
? `pnpm add -D ${isWorkspace ? "-w " : ""}${pkg}@latest`
|
|
246
|
+
: pm === "yarn"
|
|
247
|
+
? `yarn add -D ${pkg}@latest`
|
|
248
|
+
: `npm install -D ${pkg}@latest`;
|
|
249
|
+
console.info(` ${extName}: running ${addCmd}...`);
|
|
250
|
+
try {
|
|
251
|
+
execSync(addCmd, {
|
|
252
|
+
cwd: projectRoot,
|
|
253
|
+
timeout: 60000,
|
|
254
|
+
encoding: "utf-8",
|
|
255
|
+
});
|
|
256
|
+
console.info(` ${extName}: package installed`);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
console.info(` ${extName}: auto-install failed. Run manually: ${addCmd}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
233
262
|
export async function extensionsRemove(projectRoot, names) {
|
|
234
263
|
for (const name of names) {
|
|
235
264
|
const enPath = join(extensionsDir(projectRoot), `${name}.json`);
|
|
@@ -278,31 +307,7 @@ export async function extensionsUpdate(projectRoot, names) {
|
|
|
278
307
|
console.info(` ${name}: updating from ${source}...`);
|
|
279
308
|
// If source is npm, update the installed package FIRST so we get the latest
|
|
280
309
|
if (source.startsWith("npm:")) {
|
|
281
|
-
|
|
282
|
-
// Detect package manager
|
|
283
|
-
const pm = existsSync(join(projectRoot, "pnpm-lock.yaml"))
|
|
284
|
-
? "pnpm"
|
|
285
|
-
: existsSync(join(projectRoot, "yarn.lock"))
|
|
286
|
-
? "yarn"
|
|
287
|
-
: "npm";
|
|
288
|
-
const isWorkspace = existsSync(join(projectRoot, "pnpm-workspace.yaml"));
|
|
289
|
-
const addCmd = pm === "pnpm"
|
|
290
|
-
? `pnpm add -D ${isWorkspace ? "-w " : ""}${pkg}@latest`
|
|
291
|
-
: pm === "yarn"
|
|
292
|
-
? `yarn add -D ${pkg}@latest`
|
|
293
|
-
: `npm install -D ${pkg}@latest`;
|
|
294
|
-
console.info(` ${name}: running ${addCmd}...`);
|
|
295
|
-
try {
|
|
296
|
-
execSync(addCmd, {
|
|
297
|
-
cwd: projectRoot,
|
|
298
|
-
timeout: 60000,
|
|
299
|
-
encoding: "utf-8",
|
|
300
|
-
});
|
|
301
|
-
console.info(` ${name}: package updated`);
|
|
302
|
-
}
|
|
303
|
-
catch {
|
|
304
|
-
console.info(` ${name}: auto-update failed. Run manually: ${addCmd}`);
|
|
305
|
-
}
|
|
310
|
+
installNpmPackage(projectRoot, name, source.slice(4));
|
|
306
311
|
}
|
|
307
312
|
// Then fetch the latest manifest (from the now-updated package)
|
|
308
313
|
await extensionsAdd(projectRoot, name, source);
|
|
@@ -231,6 +231,12 @@ Architecture decision records for ${projectName}. Each decision documents what w
|
|
|
231
231
|
writeFileSync(join(docsDir, "src/lessons/index.md"), `# Lessons Learned
|
|
232
232
|
|
|
233
233
|
Insights from building ${projectName}. Each lesson captures what we learned, what surprised us, and what we'd do differently.
|
|
234
|
+
`);
|
|
235
|
+
writeFileSync(join(docsDir, "src/changelog.md"), `# Changelog
|
|
236
|
+
|
|
237
|
+
All notable changes to ${projectName} are documented here. Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
238
|
+
|
|
239
|
+
## [Unreleased]
|
|
234
240
|
`);
|
|
235
241
|
// Dockerfile for local dev
|
|
236
242
|
const dockerDir = join(projectRoot, "docker");
|
package/package.json
CHANGED
package/skills/document.md
CHANGED
|
@@ -60,7 +60,8 @@ apps/indusk-docs/src/
|
|
|
60
60
|
│ ├── skills/ # One page per skill
|
|
61
61
|
│ └── tools/ # One page per tool (Biome, CGC, composable.env)
|
|
62
62
|
├── decisions/ # Distilled from ADRs during retrospective/archival
|
|
63
|
-
|
|
63
|
+
├── lessons/ # Distilled from retrospective insights during archival
|
|
64
|
+
└── changelog.md # Version history — Added, Changed, Fixed, etc.
|
|
64
65
|
```
|
|
65
66
|
|
|
66
67
|
**CRITICAL: Every new page must be added to the sidebar.** The sidebar is configured in a single file: `apps/indusk-docs/src/.vitepress/config.ts` under `themeConfig.sidebar`. If you create a page but don't add it to the sidebar, it is invisible — users cannot navigate to it. This is the most common documentation mistake.
|
|
@@ -79,11 +80,29 @@ Never consider a documentation item complete until the sidebar entry exists.
|
|
|
79
80
|
|
|
80
81
|
| What changed | Where to document | Doc type |
|
|
81
82
|
|---|---|---|
|
|
82
|
-
| New feature or tool | `reference/` | Reference page |
|
|
83
|
-
| New workflow or process | `guide/` | How-to guide |
|
|
84
|
-
| Configuration change | `reference/` (update existing
|
|
85
|
-
|
|
|
86
|
-
|
|
|
83
|
+
| New feature or tool | `reference/` + changelog | Reference page + Added |
|
|
84
|
+
| New workflow or process | `guide/` + changelog | How-to guide + Added |
|
|
85
|
+
| Configuration change | `reference/` (update existing) + changelog | Reference update + Changed |
|
|
86
|
+
| Bug fix | Existing page (if relevant) + changelog | Fixed |
|
|
87
|
+
| Architecture change | `reference/` + diagram + changelog | Reference + diagram + Changed |
|
|
88
|
+
| Nothing user-facing | Skip changelog | — |
|
|
89
|
+
|
|
90
|
+
### Changelog
|
|
91
|
+
|
|
92
|
+
The changelog lives at `changelog.md` in the docs site. It uses [Keep a Changelog](https://keepachangelog.com) categories:
|
|
93
|
+
|
|
94
|
+
- **Added** — new features (from `feature` workflow plans)
|
|
95
|
+
- **Changed** — changes to existing functionality (from `refactor` workflows)
|
|
96
|
+
- **Fixed** — bug fixes (from `bugfix` workflows)
|
|
97
|
+
- **Deprecated** — soon to be removed
|
|
98
|
+
- **Removed** — removed features
|
|
99
|
+
- **Security** — vulnerability fixes
|
|
100
|
+
|
|
101
|
+
**When to write:** During the Document gate of each phase that changes user-facing behavior. Add the entry under `## [Unreleased]`. At publish time, move Unreleased entries into a versioned section.
|
|
102
|
+
|
|
103
|
+
**What to write:** One line per change. Human-readable — what users gain, not what code changed. The workflow type from the impl frontmatter tells you the category (feature → Added, bugfix → Fixed, refactor → Changed).
|
|
104
|
+
|
|
105
|
+
**During planning:** The ADR's Documentation Plan section should include planned changelog entries. This forces you to think about user impact during planning, not after.
|
|
87
106
|
|
|
88
107
|
### Decisions and Lessons
|
|
89
108
|
|