@infinitedusky/indusk-mcp 1.14.0 → 1.14.1

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.
@@ -115,7 +115,18 @@ export async function extensionsEnable(projectRoot, names) {
115
115
  printMcpSetup(projectRoot, name);
116
116
  continue;
117
117
  }
118
- console.info(` ${name}: not found use 'extensions add ${name} --from <source>' for third-party`);
118
+ // Try npm as last resort
119
+ console.info(` ${name}: not built-in, trying npm...`);
120
+ try {
121
+ await extensionsAdd(projectRoot, name, name);
122
+ if (isEnabled(projectRoot, name)) {
123
+ continue;
124
+ }
125
+ }
126
+ catch {
127
+ // npm lookup failed, fall through
128
+ }
129
+ console.info(` ${name}: not found as built-in or npm package — use 'extensions add ${name} --from <source>' for third-party`);
119
130
  }
120
131
  }
121
132
  export async function extensionsDisable(projectRoot, names) {
@@ -190,13 +201,36 @@ export async function extensionsAdd(projectRoot, name, from) {
190
201
  }
191
202
  }
192
203
  else {
193
- // Local path
204
+ // Local path — or fall back to npm if file doesn't exist
194
205
  if (existsSync(from)) {
195
206
  manifestContent = readFileSync(from, "utf-8");
196
207
  }
197
208
  else {
198
- console.info(` ${name}: file not found at ${from}`);
199
- return;
209
+ // Try as npm package name
210
+ const pkg = from;
211
+ try {
212
+ const tmpDir = join(projectRoot, ".indusk/tmp");
213
+ mkdirSync(tmpDir, { recursive: true });
214
+ execSync(`npm pack ${pkg} --pack-destination "${tmpDir}"`, {
215
+ encoding: "utf-8",
216
+ timeout: 30000,
217
+ stdio: ["ignore", "pipe", "pipe"],
218
+ });
219
+ const tarballs = readdirSync(tmpDir).filter((f) => f.endsWith(".tgz"));
220
+ if (tarballs.length > 0) {
221
+ try {
222
+ manifestContent = execSync(`tar -xzf "${join(tmpDir, tarballs[tarballs.length - 1])}" -O package/indusk-extension.json`, { encoding: "utf-8", timeout: 10000 });
223
+ }
224
+ catch {
225
+ console.info(` ${name}: no indusk-extension.json found in npm package ${pkg}`);
226
+ }
227
+ }
228
+ rmSync(tmpDir, { recursive: true, force: true });
229
+ }
230
+ catch {
231
+ console.info(` ${name}: not found as local file or npm package: ${from}`);
232
+ return;
233
+ }
200
234
  }
201
235
  }
202
236
  if (!manifestContent)
@@ -99,7 +99,7 @@ export async function infraStart() {
99
99
  if (!hasImage) {
100
100
  console.error(`Docker image '${IMAGE_NAME}' not found.`);
101
101
  console.error("");
102
- console.error("Build it from the infinitedusky repo:");
102
+ console.error("Build it from the dusk repo:");
103
103
  console.error(" docker build -f docker/Dockerfile.infra -t indusk-infra .");
104
104
  console.error("");
105
105
  console.error("Or pull from GHCR (when published):");
@@ -34,7 +34,7 @@ Every episode belongs to a group. Groups isolate knowledge:
34
34
 
35
35
  | Group | Purpose | Example |
36
36
  |-------|---------|---------|
37
- | `{project-name}` | Project-specific knowledge | `infinitedusky`, `numero` |
37
+ | `{project-name}` | Project-specific knowledge | `dusk`, `numero` |
38
38
  | `shared` | Cross-project conventions | Developer preferences, universal patterns |
39
39
 
40
40
  When searching, always include both the project group and `shared` to get the full picture. Use `getProjectGroupId(projectRoot)` (from `apps/indusk-mcp/src/lib/config.ts`) to get the project group consistently — it reads `.indusk/config.json` `graphiti.groupId` if set, otherwise falls back to the project directory basename.
@@ -112,7 +112,7 @@ After a plan retrospective surfaces a useful insight, the retrospective skill ca
112
112
  mcp__graphiti__add_memory({
113
113
  name: "retro-gate-enforcement-1",
114
114
  episode_body: "Plan gates need hook-based enforcement, not just instructions. The agent skipped gates when they were advisory only. PreToolUse hooks that block phase transitions are the fix.",
115
- group_id: "infinitedusky",
115
+ group_id: "dusk",
116
116
  source: "text",
117
117
  source_description: "retrospective insight"
118
118
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinitedusky/indusk-mcp",
3
- "version": "1.14.0",
3
+ "version": "1.14.1",
4
4
  "description": "InDusk development system — skills, MCP tools, and CLI for structured AI-assisted development",
5
5
  "type": "module",
6
6
  "files": [