gsd-opencode 1.10.2 → 1.20.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.
- package/agents/gsd-codebase-mapper.md +29 -3
- package/agents/gsd-debugger.md +19 -21
- package/agents/gsd-executor.md +213 -528
- package/agents/gsd-integration-checker.md +20 -0
- package/agents/gsd-phase-researcher.md +189 -267
- package/agents/gsd-plan-checker.md +278 -279
- package/agents/gsd-planner.md +299 -490
- package/agents/gsd-project-researcher.md +103 -345
- package/agents/gsd-research-synthesizer.md +5 -22
- package/agents/gsd-roadmapper.md +43 -6
- package/agents/gsd-verifier.md +158 -377
- package/{lib → bin/dm/lib}/constants.js +10 -3
- package/{src → bin/dm/src}/commands/install.js +5 -4
- package/{src → bin/dm/src}/commands/uninstall.js +3 -1
- package/{src → bin/dm/src}/services/backup-manager.js +1 -1
- package/{src → bin/dm/src}/services/config.js +1 -1
- package/{src → bin/dm/src}/services/file-ops.js +20 -4
- package/{src → bin/dm/src}/services/health-checker.js +3 -1
- package/{src → bin/dm/src}/services/repair-service.js +3 -1
- package/{src → bin/dm/src}/services/settings.js +1 -1
- package/{src → bin/dm/src}/services/update-service.js +2 -2
- package/bin/gsd-install.js +0 -0
- package/bin/gsd.js +9 -9
- package/commands/gsd/gsd-add-phase.md +43 -0
- package/commands/gsd/gsd-add-todo.md +47 -0
- package/commands/gsd/gsd-audit-milestone.md +36 -0
- package/commands/gsd/gsd-check-todos.md +45 -0
- package/commands/gsd/gsd-cleanup.md +18 -0
- package/commands/gsd/{complete-milestone.md → gsd-complete-milestone.md} +1 -1
- package/commands/gsd/{debug.md → gsd-debug.md} +16 -21
- package/commands/gsd/{discuss-phase.md → gsd-discuss-phase.md} +6 -9
- package/commands/gsd/gsd-execute-phase.md +41 -0
- package/commands/gsd/gsd-health.md +22 -0
- package/commands/gsd/gsd-help.md +22 -0
- package/commands/gsd/gsd-insert-phase.md +32 -0
- package/commands/gsd/gsd-join-discord.md +18 -0
- package/commands/gsd/{list-phase-assumptions.md → gsd-list-phase-assumptions.md} +3 -7
- package/commands/gsd/{map-codebase.md → gsd-map-codebase.md} +3 -3
- package/commands/gsd/gsd-new-milestone.md +44 -0
- package/commands/gsd/gsd-new-project.md +42 -0
- package/commands/gsd/gsd-pause-work.md +38 -0
- package/commands/gsd/gsd-plan-milestone-gaps.md +34 -0
- package/commands/gsd/gsd-plan-phase.md +44 -0
- package/commands/gsd/gsd-progress.md +24 -0
- package/commands/gsd/gsd-quick.md +41 -0
- package/commands/gsd/gsd-reapply-patches.md +119 -0
- package/commands/gsd/gsd-remove-phase.md +31 -0
- package/commands/gsd/{research-phase.md → gsd-research-phase.md} +38 -49
- package/commands/gsd/{resume-work.md → gsd-resume-work.md} +2 -2
- package/commands/gsd/gsd-set-profile.md +34 -0
- package/commands/gsd/gsd-settings.md +36 -0
- package/commands/gsd/gsd-update.md +37 -0
- package/commands/gsd/gsd-verify-work.md +38 -0
- package/get-shit-done/bin/gsd-tools.cjs +553 -0
- package/get-shit-done/bin/gsd-tools.test.cjs +2346 -0
- package/get-shit-done/bin/lib/commands.cjs +556 -0
- package/get-shit-done/bin/lib/config.cjs +162 -0
- package/get-shit-done/bin/lib/core.cjs +377 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
- package/get-shit-done/bin/lib/init.cjs +694 -0
- package/get-shit-done/bin/lib/milestone.cjs +215 -0
- package/get-shit-done/bin/lib/phase.cjs +877 -0
- package/get-shit-done/bin/lib/roadmap.cjs +298 -0
- package/get-shit-done/bin/lib/state.cjs +490 -0
- package/get-shit-done/bin/lib/template.cjs +222 -0
- package/get-shit-done/bin/lib/verify.cjs +772 -0
- package/get-shit-done/references/checkpoints.md +62 -364
- package/get-shit-done/references/decimal-phase-calculation.md +65 -0
- package/get-shit-done/references/git-integration.md +10 -16
- package/get-shit-done/references/git-planning-commit.md +38 -0
- package/get-shit-done/references/model-profile-resolution.md +34 -0
- package/get-shit-done/references/model-profiles.md +54 -66
- package/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/get-shit-done/references/planning-config.md +112 -10
- package/get-shit-done/references/questioning.md +4 -0
- package/get-shit-done/references/ui-brand.md +1 -1
- package/get-shit-done/templates/UAT.md +1 -1
- package/get-shit-done/templates/VALIDATION.md +104 -0
- package/get-shit-done/templates/codebase/structure.md +6 -6
- package/get-shit-done/templates/config.json +37 -0
- package/get-shit-done/templates/context.md +2 -10
- package/get-shit-done/templates/continue-here.md +6 -6
- package/get-shit-done/templates/debug-subagent-prompt.md +2 -2
- package/get-shit-done/templates/discovery.md +6 -6
- package/get-shit-done/templates/milestone-archive.md +3 -3
- package/get-shit-done/templates/phase-prompt.md +9 -7
- package/get-shit-done/templates/planner-subagent-prompt.md +6 -6
- package/get-shit-done/templates/research-project/ARCHITECTURE.md +1 -1
- package/get-shit-done/templates/research.md +29 -6
- package/get-shit-done/templates/roadmap.md +1 -1
- package/get-shit-done/templates/state.md +0 -30
- package/get-shit-done/templates/summary-complex.md +59 -0
- package/get-shit-done/templates/summary-minimal.md +41 -0
- package/get-shit-done/templates/summary-standard.md +48 -0
- package/get-shit-done/templates/summary.md +16 -37
- package/get-shit-done/templates/user-setup.md +1 -13
- package/get-shit-done/templates/verification-report.md +5 -5
- package/get-shit-done/workflows/add-phase.md +111 -0
- package/{commands/gsd → get-shit-done/workflows}/add-todo.md +24 -60
- package/{commands/gsd → get-shit-done/workflows}/audit-milestone.md +83 -63
- package/{commands/gsd → get-shit-done/workflows}/check-todos.md +21 -73
- package/get-shit-done/workflows/cleanup.md +152 -0
- package/get-shit-done/workflows/complete-milestone.md +251 -312
- package/get-shit-done/workflows/diagnose-issues.md +6 -31
- package/get-shit-done/workflows/discovery-phase.md +11 -11
- package/get-shit-done/workflows/discuss-phase.md +156 -49
- package/get-shit-done/workflows/execute-phase.md +238 -396
- package/get-shit-done/workflows/execute-plan.md +180 -1609
- package/get-shit-done/workflows/health.md +156 -0
- package/{commands/gsd → get-shit-done/workflows}/help.md +33 -35
- package/get-shit-done/workflows/insert-phase.md +129 -0
- package/get-shit-done/workflows/list-phase-assumptions.md +3 -3
- package/get-shit-done/workflows/map-codebase.md +73 -80
- package/get-shit-done/workflows/new-milestone.md +382 -0
- package/{commands/gsd → get-shit-done/workflows}/new-project.md +281 -234
- package/get-shit-done/workflows/oc-set-profile.md +320 -0
- package/{commands/gsd → get-shit-done/workflows}/pause-work.md +31 -43
- package/{commands/gsd → get-shit-done/workflows}/plan-milestone-gaps.md +29 -50
- package/get-shit-done/workflows/plan-phase.md +478 -0
- package/{commands/gsd → get-shit-done/workflows}/progress.md +64 -47
- package/get-shit-done/workflows/quick.md +453 -0
- package/get-shit-done/workflows/remove-phase.md +154 -0
- package/get-shit-done/workflows/research-phase.md +73 -0
- package/get-shit-done/workflows/resume-project.md +17 -26
- package/get-shit-done/workflows/set-profile.md +80 -0
- package/get-shit-done/workflows/settings.md +213 -0
- package/get-shit-done/workflows/transition.md +84 -104
- package/{commands/gsd → get-shit-done/workflows}/update.md +70 -28
- package/get-shit-done/workflows/verify-phase.md +106 -492
- package/get-shit-done/workflows/verify-work.md +26 -53
- package/package.json +7 -4
- package/rules/gsd-oc-work-hard.md +36 -0
- package/skills/gsd-oc-select-model/SKILL.md +348 -0
- package/skills/gsd-oc-select-model/scripts/select-models.cjs +268 -0
- package/agents/gsd-set-model.md +0 -287
- package/agents/gsd-set-profile.md +0 -239
- package/agents/gsd-settings.md +0 -749
- package/bin/install.js +0 -323
- package/commands/gsd/add-phase.md +0 -207
- package/commands/gsd/execute-phase.md +0 -339
- package/commands/gsd/insert-phase.md +0 -227
- package/commands/gsd/new-milestone.md +0 -721
- package/commands/gsd/plan-phase.md +0 -525
- package/commands/gsd/quick.md +0 -309
- package/commands/gsd/remove-phase.md +0 -349
- package/commands/gsd/set-model.md +0 -77
- package/commands/gsd/set-profile.md +0 -46
- package/commands/gsd/settings.md +0 -33
- package/commands/gsd/verify-work.md +0 -219
- package/commands/gsd/whats-new.md +0 -124
- /package/{src → bin/dm/src}/commands/check.js +0 -0
- /package/{src → bin/dm/src}/commands/config.js +0 -0
- /package/{src → bin/dm/src}/commands/list.js +0 -0
- /package/{src → bin/dm/src}/commands/repair.js +0 -0
- /package/{src → bin/dm/src}/commands/update.js +0 -0
- /package/{src → bin/dm/src}/services/manifest-manager.js +0 -0
- /package/{src → bin/dm/src}/services/migration-service.js +0 -0
- /package/{src → bin/dm/src}/services/scope-manager.js +0 -0
- /package/{src → bin/dm/src}/services/structure-detector.js +0 -0
- /package/{src → bin/dm/src}/utils/hash.js +0 -0
- /package/{src → bin/dm/src}/utils/interactive.js +0 -0
- /package/{src → bin/dm/src}/utils/logger.js +0 -0
- /package/{src → bin/dm/src}/utils/npm-registry.js +0 -0
- /package/{src → bin/dm/src}/utils/path-resolver.js +0 -0
|
@@ -52,7 +52,13 @@ export const PATH_PATTERNS = {
|
|
|
52
52
|
* These are absolute references to the global config that need to be
|
|
53
53
|
* replaced for local installs.
|
|
54
54
|
*/
|
|
55
|
-
absoluteReference: /@~\/\.config\/opencode\//g
|
|
55
|
+
absoluteReference: /@~\/\.config\/opencode\//g,
|
|
56
|
+
/**
|
|
57
|
+
* Pattern to match bare ~/.config/opencode/ references (without @ prefix).
|
|
58
|
+
* These appear in workflow files that call gsd-tools.cjs directly.
|
|
59
|
+
* Must be replaced for both global and local installs to ensure correct paths.
|
|
60
|
+
*/
|
|
61
|
+
tildeConfigReference: /~\/\.config\/opencode\//g
|
|
56
62
|
};
|
|
57
63
|
|
|
58
64
|
/**
|
|
@@ -65,7 +71,7 @@ export const PATH_PATTERNS = {
|
|
|
65
71
|
*
|
|
66
72
|
* @type {string[]}
|
|
67
73
|
*/
|
|
68
|
-
export const DIRECTORIES_TO_COPY = ['agents', 'commands', 'get-shit-done'];
|
|
74
|
+
export const DIRECTORIES_TO_COPY = ['agents', 'commands', 'get-shit-done', 'rules', 'skills'];
|
|
69
75
|
|
|
70
76
|
/**
|
|
71
77
|
* Command directory mapping for source-to-destination path transformation.
|
|
@@ -149,6 +155,7 @@ export const ALLOWED_NAMESPACES = [
|
|
|
149
155
|
/^agents\/gsd-/, // agents/gsd-* directories
|
|
150
156
|
/^command\/gsd\//, // command/gsd/* files (legacy structure)
|
|
151
157
|
/^commands\/gsd\//, // commands/gsd/* files (new structure)
|
|
158
|
+
/^rules\/gsd-/, // rules/gsd-* directories
|
|
152
159
|
/^skills\/gsd-/, // skills/gsd-* directories
|
|
153
160
|
/^get-shit-done\// // get-shit-done/ directory - fully owned
|
|
154
161
|
];
|
|
@@ -180,7 +187,7 @@ export const ERROR_CODES = {
|
|
|
180
187
|
* Useful for importing all constants at once.
|
|
181
188
|
*
|
|
182
189
|
* @example
|
|
183
|
-
* import constants from './lib/constants.js';
|
|
190
|
+
* import constants from './dm/lib/constants.js';
|
|
184
191
|
* console.log(constants.DEFAULT_CONFIG_DIR);
|
|
185
192
|
*/
|
|
186
193
|
export default {
|
|
@@ -85,7 +85,7 @@ ${cyan} ██████╗ ███████╗██████╗
|
|
|
85
85
|
*/
|
|
86
86
|
async function getPackageVersion(sourceDir) {
|
|
87
87
|
try {
|
|
88
|
-
//
|
|
88
|
+
// read from the source directory's package.json
|
|
89
89
|
const packageJsonPath = path.join(sourceDir, "package.json");
|
|
90
90
|
|
|
91
91
|
const content = await fs.readFile(packageJsonPath, "utf-8");
|
|
@@ -106,10 +106,10 @@ async function getPackageVersion(sourceDir) {
|
|
|
106
106
|
function getSourceDirectory() {
|
|
107
107
|
const __filename = fileURLToPath(import.meta.url);
|
|
108
108
|
const __dirname = path.dirname(__filename);
|
|
109
|
-
const packageRoot = path.resolve(__dirname, "
|
|
109
|
+
const packageRoot = path.resolve(__dirname, "../../../..");
|
|
110
110
|
|
|
111
|
-
// Source is the package root directory
|
|
112
|
-
// This contains the distribution files (agents,
|
|
111
|
+
// Source is the package root directory (4 levels up from commands/ to gsd-opencode/)
|
|
112
|
+
// This contains the distribution files (agents, commands, get-shit-done, rules, skills)
|
|
113
113
|
return packageRoot;
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -315,6 +315,7 @@ async function cleanupEmptyDirectories(targetDir, namespaces, logger) {
|
|
|
315
315
|
"agents/gsd-roadmapper",
|
|
316
316
|
"agents/gsd-set-model",
|
|
317
317
|
"agents/gsd-verifier",
|
|
318
|
+
"skills/gsd-oc-select-model",
|
|
318
319
|
];
|
|
319
320
|
|
|
320
321
|
for (const dir of dirsToCheck) {
|
|
@@ -284,6 +284,7 @@ async function buildFallbackManifest(targetDir) {
|
|
|
284
284
|
"agents",
|
|
285
285
|
"command/gsd", // Old structure (singular)
|
|
286
286
|
"commands/gsd", // New structure (plural)
|
|
287
|
+
"rules",
|
|
287
288
|
"skills",
|
|
288
289
|
"get-shit-done",
|
|
289
290
|
];
|
|
@@ -392,12 +393,13 @@ async function categorizeItems(files, targetDir) {
|
|
|
392
393
|
}
|
|
393
394
|
|
|
394
395
|
// Ensure top-level directories in allowed namespaces are tracked for cleanup
|
|
395
|
-
// This includes get-shit-done, agents, command, commands, skills
|
|
396
|
+
// This includes get-shit-done, agents, command, commands, rules, skills
|
|
396
397
|
// Include both old (command) and new (commands) structures
|
|
397
398
|
const topLevelDirs = [
|
|
398
399
|
"agents",
|
|
399
400
|
"command",
|
|
400
401
|
"commands",
|
|
402
|
+
"rules",
|
|
401
403
|
"skills",
|
|
402
404
|
"get-shit-done",
|
|
403
405
|
];
|
|
@@ -211,7 +211,7 @@ export class BackupManager {
|
|
|
211
211
|
throw error;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
//
|
|
214
|
+
// read backup directory contents
|
|
215
215
|
const entries = await fs.readdir(this._backupDir, { withFileTypes: true });
|
|
216
216
|
|
|
217
217
|
// Filter for files (not directories) with date prefix
|
|
@@ -186,7 +186,7 @@ export class ConfigManager {
|
|
|
186
186
|
// Ensure target directory exists
|
|
187
187
|
await fs.mkdir(targetDir, { recursive: true });
|
|
188
188
|
|
|
189
|
-
//
|
|
189
|
+
// write version file
|
|
190
190
|
await fs.writeFile(versionPath, version.trim(), 'utf-8');
|
|
191
191
|
} catch (error) {
|
|
192
192
|
if (error.code === 'EACCES') {
|
|
@@ -471,7 +471,7 @@ export class FileOperations {
|
|
|
471
471
|
const isMarkdown = sourcePath.endsWith('.md');
|
|
472
472
|
|
|
473
473
|
if (isMarkdown) {
|
|
474
|
-
//
|
|
474
|
+
// read, replace, and write markdown content
|
|
475
475
|
let content = await fs.readFile(sourcePath, 'utf-8');
|
|
476
476
|
|
|
477
477
|
// Optimization: Skip files that don't contain any patterns needing replacement
|
|
@@ -481,8 +481,12 @@ export class FileOperations {
|
|
|
481
481
|
if (PATH_PATTERNS.absoluteReference) {
|
|
482
482
|
PATH_PATTERNS.absoluteReference.lastIndex = 0; // Reset regex
|
|
483
483
|
}
|
|
484
|
+
const hasTildeRef = PATH_PATTERNS.tildeConfigReference && PATH_PATTERNS.tildeConfigReference.test(content);
|
|
485
|
+
if (PATH_PATTERNS.tildeConfigReference) {
|
|
486
|
+
PATH_PATTERNS.tildeConfigReference.lastIndex = 0; // Reset regex
|
|
487
|
+
}
|
|
484
488
|
|
|
485
|
-
if (!hasGsdRef && !hasAbsRef) {
|
|
489
|
+
if (!hasGsdRef && !hasAbsRef && !hasTildeRef) {
|
|
486
490
|
await fs.copyFile(sourcePath, targetPath, fsConstants.COPYFILE_FICLONE);
|
|
487
491
|
return;
|
|
488
492
|
}
|
|
@@ -497,8 +501,18 @@ export class FileOperations {
|
|
|
497
501
|
() => targetDir + '/'
|
|
498
502
|
);
|
|
499
503
|
|
|
504
|
+
// Replace bare ~/.config/opencode/ references with actual path
|
|
505
|
+
// This handles workflow files that call: node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs
|
|
506
|
+
// This applies to BOTH global and local installs to ensure correct paths
|
|
507
|
+
if (PATH_PATTERNS.tildeConfigReference) {
|
|
508
|
+
content = content.replace(
|
|
509
|
+
PATH_PATTERNS.tildeConfigReference,
|
|
510
|
+
() => targetDir + '/'
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
|
|
500
514
|
// For local installs, also replace @~/.config/opencode/ with local path
|
|
501
|
-
// This handles files that have hardcoded global references
|
|
515
|
+
// This handles files that have hardcoded global references with @ prefix
|
|
502
516
|
if (this.scopeManager.scope === 'local' && PATH_PATTERNS.absoluteReference) {
|
|
503
517
|
content = content.replace(
|
|
504
518
|
PATH_PATTERNS.absoluteReference,
|
|
@@ -588,9 +602,11 @@ export class FileOperations {
|
|
|
588
602
|
// Cross-device move needed
|
|
589
603
|
this.logger.debug('Cross-device move detected, using copy+delete');
|
|
590
604
|
await this._crossDeviceMove(tempDir, targetDir);
|
|
591
|
-
} else if (error.code === 'ENOTEMPTY' || error.code === 'EEXIST') {
|
|
605
|
+
} else if (error.code === 'ENOTEMPTY' || error.code === 'EEXIST' || error.code === 'EPERM') {
|
|
592
606
|
// Target exists with other files - MERGE instead of replace
|
|
593
607
|
// This preserves existing opencode configuration
|
|
608
|
+
// NOTE: On Windows, fs.rename throws EPERM instead of ENOTEMPTY/EEXIST
|
|
609
|
+
// when target directory exists. Fixed: 2026-02-26
|
|
594
610
|
this.logger.debug('Target exists with existing files, merging contents');
|
|
595
611
|
await this._mergeDirectories(tempDir, targetDir);
|
|
596
612
|
// Clean up temp directory after merge
|
|
@@ -268,7 +268,9 @@ export class HealthChecker {
|
|
|
268
268
|
const sampleFiles = [
|
|
269
269
|
{ dir: 'agents', file: 'gsd-executor.md' },
|
|
270
270
|
{ dir: 'command', file: 'gsd/help.md' },
|
|
271
|
-
{ dir: 'get-shit-done', file: 'templates/summary.md' }
|
|
271
|
+
{ dir: 'get-shit-done', file: 'templates/summary.md' },
|
|
272
|
+
{ dir: 'rules', file: 'gsd-oc-work-hard.md' },
|
|
273
|
+
{ dir: 'skills', file: 'gsd-oc-select-model/SKILL.md' }
|
|
272
274
|
];
|
|
273
275
|
|
|
274
276
|
for (const { dir, file } of sampleFiles) {
|
|
@@ -418,7 +418,9 @@ export class RepairService {
|
|
|
418
418
|
const sampleFiles = [
|
|
419
419
|
{ dir: 'agents', file: 'gsd-executor.md' },
|
|
420
420
|
{ dir: 'command', file: 'gsd/help.md' },
|
|
421
|
-
{ dir: 'get-shit-done', file: 'templates/summary.md' }
|
|
421
|
+
{ dir: 'get-shit-done', file: 'templates/summary.md' },
|
|
422
|
+
{ dir: 'rules', file: 'gsd-oc-work-hard.md' },
|
|
423
|
+
{ dir: 'skills', file: 'gsd-oc-select-model/SKILL.md' }
|
|
422
424
|
];
|
|
423
425
|
|
|
424
426
|
const expectedPrefix = targetDir + '/';
|
|
@@ -355,7 +355,7 @@ export class SettingsManager {
|
|
|
355
355
|
* Saves configuration to disk atomically.
|
|
356
356
|
*
|
|
357
357
|
* Private method that writes configuration using the atomic write pattern:
|
|
358
|
-
* 1.
|
|
358
|
+
* 1. write to a temporary file
|
|
359
359
|
* 2. Rename temp file to final location
|
|
360
360
|
*
|
|
361
361
|
* This ensures that the configuration file is never in a partially written
|
|
@@ -404,7 +404,7 @@ export class UpdateService {
|
|
|
404
404
|
* Validates that the update can proceed by checking:
|
|
405
405
|
* - Installation exists (if required)
|
|
406
406
|
* - Target version exists
|
|
407
|
-
* -
|
|
407
|
+
* - write permissions are available
|
|
408
408
|
*
|
|
409
409
|
* @param {string|null} targetVersion - Specific version to validate (null for latest)
|
|
410
410
|
* @returns {Promise<Object>} Validation result
|
|
@@ -442,7 +442,7 @@ export class UpdateService {
|
|
|
442
442
|
} else if (error.code === 'ENOENT') {
|
|
443
443
|
// Directory doesn't exist, which is fine for new installs
|
|
444
444
|
} else {
|
|
445
|
-
errors.push(`
|
|
445
|
+
errors.push(`write permission check failed: ${error.message}`);
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
|
package/bin/gsd-install.js
CHANGED
|
File without changes
|
package/bin/gsd.js
CHANGED
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
|
|
21
21
|
import { Command } from 'commander';
|
|
22
22
|
import chalk from 'chalk';
|
|
23
|
-
import { installCommand } from '
|
|
24
|
-
import { listCommand } from '
|
|
25
|
-
import { uninstallCommand } from '
|
|
26
|
-
import { configGetCommand, configSetCommand, configResetCommand, configListCommand } from '
|
|
27
|
-
import { checkCommand } from '
|
|
28
|
-
import { repairCommand } from '
|
|
29
|
-
import { updateCommand } from '
|
|
30
|
-
import { logger, setVerbose } from '
|
|
31
|
-
import { ERROR_CODES } from '
|
|
23
|
+
import { installCommand } from './dm/src/commands/install.js';
|
|
24
|
+
import { listCommand } from './dm/src/commands/list.js';
|
|
25
|
+
import { uninstallCommand } from './dm/src/commands/uninstall.js';
|
|
26
|
+
import { configGetCommand, configSetCommand, configResetCommand, configListCommand } from './dm/src/commands/config.js';
|
|
27
|
+
import { checkCommand } from './dm/src/commands/check.js';
|
|
28
|
+
import { repairCommand } from './dm/src/commands/repair.js';
|
|
29
|
+
import { updateCommand } from './dm/src/commands/update.js';
|
|
30
|
+
import { logger, setVerbose } from './dm/src/utils/logger.js';
|
|
31
|
+
import { ERROR_CODES } from './dm/lib/constants.js';
|
|
32
32
|
import { readFileSync } from 'fs';
|
|
33
33
|
import { fileURLToPath } from 'url';
|
|
34
34
|
import path from 'path';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-add-phase
|
|
3
|
+
description: Add phase to end of current milestone in roadmap
|
|
4
|
+
argument-hint: <description>
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- write
|
|
8
|
+
- bash
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<objective>
|
|
12
|
+
Add a new integer phase to the end of the current milestone in the roadmap.
|
|
13
|
+
|
|
14
|
+
Routes to the add-phase workflow which handles:
|
|
15
|
+
- Phase number calculation (next sequential integer)
|
|
16
|
+
- Directory creation with slug generation
|
|
17
|
+
- Roadmap structure updates
|
|
18
|
+
- STATE.md roadmap evolution tracking
|
|
19
|
+
</objective>
|
|
20
|
+
|
|
21
|
+
<execution_context>
|
|
22
|
+
@~/.config/opencode/get-shit-done/workflows/add-phase.md
|
|
23
|
+
</execution_context>
|
|
24
|
+
|
|
25
|
+
<context>
|
|
26
|
+
Arguments: $ARGUMENTS (phase description)
|
|
27
|
+
|
|
28
|
+
Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
|
|
29
|
+
</context>
|
|
30
|
+
|
|
31
|
+
<process>
|
|
32
|
+
**Follow the add-phase workflow** from `@~/.config/opencode/get-shit-done/workflows/add-phase.md`.
|
|
33
|
+
|
|
34
|
+
The workflow handles all logic including:
|
|
35
|
+
1. Argument parsing and validation
|
|
36
|
+
2. Roadmap existence checking
|
|
37
|
+
3. Current milestone identification
|
|
38
|
+
4. Next phase number calculation (ignoring decimals)
|
|
39
|
+
5. Slug generation from description
|
|
40
|
+
6. Phase directory creation
|
|
41
|
+
7. Roadmap entry insertion
|
|
42
|
+
8. STATE.md updates
|
|
43
|
+
</process>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-add-todo
|
|
3
|
+
description: Capture idea or task as todo from current conversation context
|
|
4
|
+
argument-hint: [optional description]
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- write
|
|
8
|
+
- bash
|
|
9
|
+
- question
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<objective>
|
|
13
|
+
Capture an idea, task, or issue that surfaces during a GSD session as a structured todo for later work.
|
|
14
|
+
|
|
15
|
+
Routes to the add-todo workflow which handles:
|
|
16
|
+
- Directory structure creation
|
|
17
|
+
- Content extraction from arguments or conversation
|
|
18
|
+
- Area inference from file paths
|
|
19
|
+
- Duplicate detection and resolution
|
|
20
|
+
- Todo file creation with frontmatter
|
|
21
|
+
- STATE.md updates
|
|
22
|
+
- Git commits
|
|
23
|
+
</objective>
|
|
24
|
+
|
|
25
|
+
<execution_context>
|
|
26
|
+
@~/.config/opencode/get-shit-done/workflows/add-todo.md
|
|
27
|
+
</execution_context>
|
|
28
|
+
|
|
29
|
+
<context>
|
|
30
|
+
Arguments: $ARGUMENTS (optional todo description)
|
|
31
|
+
|
|
32
|
+
State is resolved in-workflow via `init todos` and targeted reads.
|
|
33
|
+
</context>
|
|
34
|
+
|
|
35
|
+
<process>
|
|
36
|
+
**Follow the add-todo workflow** from `@~/.config/opencode/get-shit-done/workflows/add-todo.md`.
|
|
37
|
+
|
|
38
|
+
The workflow handles all logic including:
|
|
39
|
+
1. Directory ensuring
|
|
40
|
+
2. Existing area checking
|
|
41
|
+
3. Content extraction (arguments or conversation)
|
|
42
|
+
4. Area inference
|
|
43
|
+
5. Duplicate checking
|
|
44
|
+
6. File creation with slug generation
|
|
45
|
+
7. STATE.md updates
|
|
46
|
+
8. Git commits
|
|
47
|
+
</process>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-audit-milestone
|
|
3
|
+
description: Audit milestone completion against original intent before archiving
|
|
4
|
+
argument-hint: "[version]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- glob
|
|
8
|
+
- grep
|
|
9
|
+
- bash
|
|
10
|
+
- task
|
|
11
|
+
- write
|
|
12
|
+
---
|
|
13
|
+
<objective>
|
|
14
|
+
Verify milestone achieved its definition of done. Check requirements coverage, cross-phase integration, and end-to-end flows.
|
|
15
|
+
|
|
16
|
+
**This command IS the orchestrator.** Reads existing VERIFICATION.md files (phases already verified during execute-phase), aggregates tech debt and deferred gaps, then spawns integration checker for cross-phase wiring.
|
|
17
|
+
</objective>
|
|
18
|
+
|
|
19
|
+
<execution_context>
|
|
20
|
+
@~/.config/opencode/get-shit-done/workflows/audit-milestone.md
|
|
21
|
+
</execution_context>
|
|
22
|
+
|
|
23
|
+
<context>
|
|
24
|
+
Version: $ARGUMENTS (optional — defaults to current milestone)
|
|
25
|
+
|
|
26
|
+
Core planning files are resolved in-workflow (`init milestone-op`) and loaded only as needed.
|
|
27
|
+
|
|
28
|
+
**Completed Work:**
|
|
29
|
+
glob: .planning/phases/*/*-SUMMARY.md
|
|
30
|
+
glob: .planning/phases/*/*-VERIFICATION.md
|
|
31
|
+
</context>
|
|
32
|
+
|
|
33
|
+
<process>
|
|
34
|
+
Execute the audit-milestone workflow from @~/.config/opencode/get-shit-done/workflows/audit-milestone.md end-to-end.
|
|
35
|
+
Preserve all workflow gates (scope determination, verification reading, integration check, requirements coverage, routing).
|
|
36
|
+
</process>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-check-todos
|
|
3
|
+
description: List pending todos and select one to work on
|
|
4
|
+
argument-hint: [area filter]
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- write
|
|
8
|
+
- bash
|
|
9
|
+
- question
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<objective>
|
|
13
|
+
List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
|
|
14
|
+
|
|
15
|
+
Routes to the check-todos workflow which handles:
|
|
16
|
+
- Todo counting and listing with area filtering
|
|
17
|
+
- Interactive selection with full context loading
|
|
18
|
+
- Roadmap correlation checking
|
|
19
|
+
- Action routing (work now, add to phase, brainstorm, create phase)
|
|
20
|
+
- STATE.md updates and git commits
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
@~/.config/opencode/get-shit-done/workflows/check-todos.md
|
|
25
|
+
</execution_context>
|
|
26
|
+
|
|
27
|
+
<context>
|
|
28
|
+
Arguments: $ARGUMENTS (optional area filter)
|
|
29
|
+
|
|
30
|
+
Todo state and roadmap correlation are loaded in-workflow using `init todos` and targeted reads.
|
|
31
|
+
</context>
|
|
32
|
+
|
|
33
|
+
<process>
|
|
34
|
+
**Follow the check-todos workflow** from `@~/.config/opencode/get-shit-done/workflows/check-todos.md`.
|
|
35
|
+
|
|
36
|
+
The workflow handles all logic including:
|
|
37
|
+
1. Todo existence checking
|
|
38
|
+
2. Area filtering
|
|
39
|
+
3. Interactive listing and selection
|
|
40
|
+
4. Full context loading with file summaries
|
|
41
|
+
5. Roadmap correlation checking
|
|
42
|
+
6. Action offering and execution
|
|
43
|
+
7. STATE.md updates
|
|
44
|
+
8. Git commits
|
|
45
|
+
</process>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-cleanup
|
|
3
|
+
description: Archive accumulated phase directories from completed milestones
|
|
4
|
+
---
|
|
5
|
+
<objective>
|
|
6
|
+
Archive phase directories from completed milestones into `.planning/milestones/v{X.Y}-phases/`.
|
|
7
|
+
|
|
8
|
+
Use when `.planning/phases/` has accumulated directories from past milestones.
|
|
9
|
+
</objective>
|
|
10
|
+
|
|
11
|
+
<execution_context>
|
|
12
|
+
@~/.config/opencode/get-shit-done/workflows/cleanup.md
|
|
13
|
+
</execution_context>
|
|
14
|
+
|
|
15
|
+
<process>
|
|
16
|
+
Follow the cleanup workflow at @~/.config/opencode/get-shit-done/workflows/cleanup.md.
|
|
17
|
+
Identify completed milestones, show a dry-run summary, and archive on confirmation.
|
|
18
|
+
</process>
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: gsd-debug
|
|
3
3
|
description: Systematic debugging with persistent state across context resets
|
|
4
4
|
argument-hint: [issue description]
|
|
5
|
-
tools:
|
|
5
|
+
allowed-tools:
|
|
6
6
|
- read
|
|
7
7
|
- bash
|
|
8
|
-
|
|
8
|
+
- task
|
|
9
9
|
- question
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -18,7 +18,7 @@ Debug issues using scientific method with subagent isolation.
|
|
|
18
18
|
</objective>
|
|
19
19
|
|
|
20
20
|
<context>
|
|
21
|
-
User's issue:
|
|
21
|
+
User's issue: $ARGUMENTS
|
|
22
22
|
|
|
23
23
|
Check for active sessions:
|
|
24
24
|
```bash
|
|
@@ -28,31 +28,24 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved | head -5
|
|
|
28
28
|
|
|
29
29
|
<process>
|
|
30
30
|
|
|
31
|
-
## 0.
|
|
32
|
-
|
|
33
|
-
read model profile for agent spawning:
|
|
31
|
+
## 0. Initialize Context
|
|
34
32
|
|
|
35
33
|
```bash
|
|
36
|
-
|
|
34
|
+
INIT=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state load)
|
|
37
35
|
```
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
| Agent | quality | balanced | budget |
|
|
44
|
-
|-------|---------|----------|--------|
|
|
45
|
-
| gsd-debugger | opus | sonnet | sonnet |
|
|
46
|
-
|
|
47
|
-
Store resolved model for use in Task calls below.
|
|
37
|
+
Extract `commit_docs` from init JSON. Resolve debugger model:
|
|
38
|
+
```bash
|
|
39
|
+
DEBUGGER_MODEL=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs resolve-model gsd-debugger --raw)
|
|
40
|
+
```
|
|
48
41
|
|
|
49
42
|
## 1. Check Active Sessions
|
|
50
43
|
|
|
51
|
-
If active sessions exist AND no
|
|
44
|
+
If active sessions exist AND no $ARGUMENTS:
|
|
52
45
|
- List sessions with status, hypothesis, next action
|
|
53
46
|
- User picks number to resume OR describes new issue
|
|
54
47
|
|
|
55
|
-
If
|
|
48
|
+
If $ARGUMENTS provided OR user describes new issue:
|
|
56
49
|
- Continue to symptom gathering
|
|
57
50
|
|
|
58
51
|
## 2. Gather Symptoms (if new issue)
|
|
@@ -97,7 +90,7 @@ Create: .planning/debug/{slug}.md
|
|
|
97
90
|
```
|
|
98
91
|
|
|
99
92
|
```
|
|
100
|
-
|
|
93
|
+
task(
|
|
101
94
|
prompt=filled_prompt,
|
|
102
95
|
subagent_type="gsd-debugger",
|
|
103
96
|
model="{debugger_model}",
|
|
@@ -136,7 +129,9 @@ Continue debugging {slug}. Evidence is in the debug file.
|
|
|
136
129
|
</objective>
|
|
137
130
|
|
|
138
131
|
<prior_state>
|
|
139
|
-
|
|
132
|
+
<files_to_read>
|
|
133
|
+
- .planning/debug/{slug}.md (Debug session state)
|
|
134
|
+
</files_to_read>
|
|
140
135
|
</prior_state>
|
|
141
136
|
|
|
142
137
|
<checkpoint_response>
|
|
@@ -150,7 +145,7 @@ goal: find_and_fix
|
|
|
150
145
|
```
|
|
151
146
|
|
|
152
147
|
```
|
|
153
|
-
|
|
148
|
+
task(
|
|
154
149
|
prompt=continuation_prompt,
|
|
155
150
|
subagent_type="gsd-debugger",
|
|
156
151
|
model="{debugger_model}",
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd-discuss-phase
|
|
3
3
|
description: Gather phase context through adaptive questioning before planning
|
|
4
|
-
argument-hint: "<phase>"
|
|
5
|
-
tools:
|
|
4
|
+
argument-hint: "<phase> [--auto]"
|
|
5
|
+
allowed-tools:
|
|
6
6
|
- read
|
|
7
7
|
- write
|
|
8
8
|
- bash
|
|
9
9
|
- glob
|
|
10
10
|
- grep
|
|
11
11
|
- question
|
|
12
|
+
- task
|
|
12
13
|
---
|
|
13
14
|
|
|
14
15
|
<objective>
|
|
@@ -20,7 +21,7 @@ Extract implementation decisions that downstream agents need — researcher and
|
|
|
20
21
|
3. Deep-dive each selected area until satisfied
|
|
21
22
|
4. Create CONTEXT.md with decisions that guide research and planning
|
|
22
23
|
|
|
23
|
-
**Output:** `{
|
|
24
|
+
**Output:** `{phase_num}-CONTEXT.md` — decisions clear enough that downstream agents can act without asking the user again
|
|
24
25
|
</objective>
|
|
25
26
|
|
|
26
27
|
<execution_context>
|
|
@@ -29,13 +30,9 @@ Extract implementation decisions that downstream agents need — researcher and
|
|
|
29
30
|
</execution_context>
|
|
30
31
|
|
|
31
32
|
<context>
|
|
32
|
-
Phase number:
|
|
33
|
+
Phase number: $ARGUMENTS (required)
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
@.planning/STATE.md
|
|
36
|
-
|
|
37
|
-
**Load roadmap:**
|
|
38
|
-
@.planning/ROADMAP.md
|
|
35
|
+
Context files are resolved in-workflow using `init phase-op` and roadmap/state tool calls.
|
|
39
36
|
</context>
|
|
40
37
|
|
|
41
38
|
<process>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-execute-phase
|
|
3
|
+
description: Execute all plans in a phase with wave-based parallelization
|
|
4
|
+
argument-hint: "<phase-number> [--gaps-only]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- write
|
|
8
|
+
- edit
|
|
9
|
+
- glob
|
|
10
|
+
- grep
|
|
11
|
+
- bash
|
|
12
|
+
- task
|
|
13
|
+
- todowrite
|
|
14
|
+
- question
|
|
15
|
+
---
|
|
16
|
+
<objective>
|
|
17
|
+
Execute all plans in a phase using wave-based parallel execution.
|
|
18
|
+
|
|
19
|
+
Orchestrator stays lean: discover plans, analyze dependencies, group into waves, spawn subagents, collect results. Each subagent loads the full execute-plan context and handles its own plan.
|
|
20
|
+
|
|
21
|
+
Context budget: ~15% orchestrator, 100% fresh per subagent.
|
|
22
|
+
</objective>
|
|
23
|
+
|
|
24
|
+
<execution_context>
|
|
25
|
+
@~/.config/opencode/get-shit-done/workflows/execute-phase.md
|
|
26
|
+
@~/.config/opencode/get-shit-done/references/ui-brand.md
|
|
27
|
+
</execution_context>
|
|
28
|
+
|
|
29
|
+
<context>
|
|
30
|
+
Phase: $ARGUMENTS
|
|
31
|
+
|
|
32
|
+
**Flags:**
|
|
33
|
+
- `--gaps-only` — Execute only gap closure plans (plans with `gap_closure: true` in frontmatter). Use after verify-work creates fix plans.
|
|
34
|
+
|
|
35
|
+
Context files are resolved inside the workflow via `gsd-tools init execute-phase` and per-subagent `<files_to_read>` blocks.
|
|
36
|
+
</context>
|
|
37
|
+
|
|
38
|
+
<process>
|
|
39
|
+
Execute the execute-phase workflow from @~/.config/opencode/get-shit-done/workflows/execute-phase.md end-to-end.
|
|
40
|
+
Preserve all workflow gates (wave execution, checkpoint handling, verification, state updates, routing).
|
|
41
|
+
</process>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd-health
|
|
3
|
+
description: Diagnose planning directory health and optionally repair issues
|
|
4
|
+
argument-hint: [--repair]
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- bash
|
|
8
|
+
- write
|
|
9
|
+
- question
|
|
10
|
+
---
|
|
11
|
+
<objective>
|
|
12
|
+
Validate `.planning/` directory integrity and report actionable issues. Checks for missing files, invalid configurations, inconsistent state, and orphaned plans.
|
|
13
|
+
</objective>
|
|
14
|
+
|
|
15
|
+
<execution_context>
|
|
16
|
+
@~/.config/opencode/get-shit-done/workflows/health.md
|
|
17
|
+
</execution_context>
|
|
18
|
+
|
|
19
|
+
<process>
|
|
20
|
+
Execute the health workflow from @~/.config/opencode/get-shit-done/workflows/health.md end-to-end.
|
|
21
|
+
Parse --repair flag from arguments and pass to workflow.
|
|
22
|
+
</process>
|