goalbuddy 0.3.0 → 0.3.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.
|
@@ -195,8 +195,8 @@ Usage:
|
|
|
195
195
|
Targets: by default, install/update prepares both Codex (~/.codex) and Claude Code (~/.claude). Use --target codex or --target claude to limit the command.
|
|
196
196
|
|
|
197
197
|
Default:
|
|
198
|
-
${canonicalCliName} Installs and enables Codex, then installs Claude Code skill + agents
|
|
199
|
-
${canonicalCliName} --target claude Installs ${canonicalProductName} for Claude Code (skill + agents
|
|
198
|
+
${canonicalCliName} Installs and enables Codex, then installs Claude Code skill + agents (skill surfaces /goal-prep).
|
|
199
|
+
${canonicalCliName} --target claude Installs ${canonicalProductName} for Claude Code (skill + agents; skill surfaces /goal-prep).
|
|
200
200
|
${canonicalCliName} --target codex Installs and enables the native Codex plugin.
|
|
201
201
|
|
|
202
202
|
Compatibility:
|
|
@@ -246,8 +246,8 @@ function claudeAgentsRoot() {
|
|
|
246
246
|
return join(claudeHome(), "agents");
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
function
|
|
250
|
-
return join(claudeHome(), "commands");
|
|
249
|
+
function legacyClaudeCommandPath() {
|
|
250
|
+
return join(claudeHome(), "commands", "goal-prep.md");
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
function installClaudeSkill({ quiet = false } = {}) {
|
|
@@ -311,30 +311,12 @@ function installClaudeAgents({ quiet = false } = {}) {
|
|
|
311
311
|
return results;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
|
-
function
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const results = [];
|
|
321
|
-
if (!existsSync(source)) return results;
|
|
322
|
-
for (const file of readdirSync(source)) {
|
|
323
|
-
if (!file.endsWith(".md")) continue;
|
|
324
|
-
const dest = join(target, file);
|
|
325
|
-
if (existsSync(dest) && !force) {
|
|
326
|
-
if (!quiet) console.log(`skip existing ${dest} (use --force to overwrite)`);
|
|
327
|
-
results.push({ file, status: "skipped", path: dest });
|
|
328
|
-
continue;
|
|
329
|
-
}
|
|
330
|
-
const sourceHash = sha256(readFileSync(join(source, file)));
|
|
331
|
-
const previousHash = existsSync(dest) ? sha256(readFileSync(dest)) : "";
|
|
332
|
-
cpSync(join(source, file), dest);
|
|
333
|
-
const status = previousHash ? previousHash === sourceHash ? "unchanged" : "updated" : "installed";
|
|
334
|
-
if (!quiet) console.log(`installed ${dest}`);
|
|
335
|
-
results.push({ file, status, path: dest });
|
|
336
|
-
}
|
|
337
|
-
return results;
|
|
314
|
+
function cleanupLegacyClaudeCommands({ quiet = false } = {}) {
|
|
315
|
+
const legacyPath = legacyClaudeCommandPath();
|
|
316
|
+
if (!existsSync(legacyPath)) return { removed: false, path: legacyPath };
|
|
317
|
+
rmSync(legacyPath, { force: true });
|
|
318
|
+
if (!quiet) console.log(`removed legacy ${legacyPath} (skill now surfaces /goal-prep)`);
|
|
319
|
+
return { removed: true, path: legacyPath };
|
|
338
320
|
}
|
|
339
321
|
|
|
340
322
|
async function buildClaudeInstallReport() {
|
|
@@ -349,7 +331,7 @@ async function buildClaudeInstallReport() {
|
|
|
349
331
|
claude_home: claudeHome(),
|
|
350
332
|
skill: installClaudeSkill({ quiet }),
|
|
351
333
|
agents: installClaudeAgents({ quiet }),
|
|
352
|
-
|
|
334
|
+
legacy_commands_cleanup: cleanupLegacyClaudeCommands({ quiet }),
|
|
353
335
|
extensions: await extensionDiscoverySummary(),
|
|
354
336
|
warnings: [],
|
|
355
337
|
};
|
|
@@ -408,7 +390,6 @@ async function installEverywhere() {
|
|
|
408
390
|
function doctorClaude() {
|
|
409
391
|
const skillPath = join(claudeSkillRoot(), "SKILL.md");
|
|
410
392
|
const agentsPath = claudeAgentsRoot();
|
|
411
|
-
const commandsPath = claudeCommandsRoot();
|
|
412
393
|
const installed = existsSync(skillPath);
|
|
413
394
|
const agents = existsSync(agentsPath)
|
|
414
395
|
? readdirSync(agentsPath).filter((file) => file.startsWith("goal-") && file.endsWith(".md"))
|
|
@@ -420,9 +401,8 @@ function doctorClaude() {
|
|
|
420
401
|
if (!existsSync(installedAgent) || !existsSync(bundledAgent)) return false;
|
|
421
402
|
return sha256(readFileSync(installedAgent)) !== sha256(readFileSync(bundledAgent));
|
|
422
403
|
});
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
: [];
|
|
404
|
+
const legacyCommandPath = legacyClaudeCommandPath();
|
|
405
|
+
const legacyCommandPresent = existsSync(legacyCommandPath);
|
|
426
406
|
|
|
427
407
|
console.log(JSON.stringify({
|
|
428
408
|
target: "claude",
|
|
@@ -432,10 +412,11 @@ function doctorClaude() {
|
|
|
432
412
|
installed_agents: agents,
|
|
433
413
|
missing_agents: missingAgents,
|
|
434
414
|
stale_agents: staleAgents,
|
|
435
|
-
|
|
415
|
+
legacy_command_present: legacyCommandPresent,
|
|
416
|
+
legacy_command_path: legacyCommandPath,
|
|
436
417
|
}, null, 2));
|
|
437
418
|
|
|
438
|
-
const installOk = installed && missingAgents.length === 0 && staleAgents.length === 0;
|
|
419
|
+
const installOk = installed && missingAgents.length === 0 && staleAgents.length === 0 && !legacyCommandPresent;
|
|
439
420
|
process.exit(installOk ? 0 : 1);
|
|
440
421
|
}
|
|
441
422
|
|
|
@@ -449,7 +430,9 @@ function printClaudeInstallReport(report) {
|
|
|
449
430
|
console.log("");
|
|
450
431
|
console.log(`Skill: ${report.skill.status} at ${report.skill.path}`);
|
|
451
432
|
console.log(`Agents: ${summarizeStatuses(report.agents)}`);
|
|
452
|
-
|
|
433
|
+
if (report.legacy_commands_cleanup?.removed) {
|
|
434
|
+
console.log(`Removed legacy command: ${report.legacy_commands_cleanup.path}`);
|
|
435
|
+
}
|
|
453
436
|
if (report.skill.preserved_extensions.length) {
|
|
454
437
|
console.log(`Preserved extensions: ${report.skill.preserved_extensions.join(", ")}`);
|
|
455
438
|
}
|
|
@@ -1593,7 +1576,9 @@ function printEverywhereInstallReport(report) {
|
|
|
1593
1576
|
} else if (report.claude) {
|
|
1594
1577
|
console.log(`Claude Code: skill ${report.claude.skill.status} at ${report.claude.skill.path}`);
|
|
1595
1578
|
console.log(`Claude Code agents: ${summarizeStatuses(report.claude.agents)}`);
|
|
1596
|
-
|
|
1579
|
+
if (report.claude.legacy_commands_cleanup?.removed) {
|
|
1580
|
+
console.log(`Claude Code: removed legacy command at ${report.claude.legacy_commands_cleanup.path}`);
|
|
1581
|
+
}
|
|
1597
1582
|
}
|
|
1598
1583
|
|
|
1599
1584
|
if (report.errors.length) {
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Prepare a GoalBuddy board for a broad, long-running, or ambiguous goal. Compiles intake, writes goal.md/state.yaml, and prints the /goal command to run next. Does not start /goal automatically.
|
|
3
|
-
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Invoke the GoalBuddy `goal-prep` skill to prepare a board for the user's goal.
|
|
7
|
-
|
|
8
|
-
Follow the canonical GoalBuddy invocation boundary: prepare intake, create or repair `docs/goals/<slug>/goal.md`, `state.yaml`, and `notes/`, optionally open a visual board, then print exactly `/goal Follow docs/goals/<slug>/goal.md.` and stop.
|
|
9
|
-
|
|
10
|
-
Do not perform the requested work during this turn, even if it looks read-only or obviously useful. Put implementation, research, asset generation, and named-skill loading into Scout, Judge, or Worker tasks for the later `/goal` run.
|
|
11
|
-
|
|
12
|
-
User goal: $ARGUMENTS
|