godpowers 3.0.0 → 3.0.2
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/CHANGELOG.md +46 -3
- package/README.md +28 -24
- package/RELEASE.md +31 -50
- package/SKILL.md +75 -113
- package/agents/god-archaeologist.md +11 -0
- package/agents/god-architect.md +12 -0
- package/agents/god-auditor.md +13 -0
- package/agents/god-automation-engineer.md +13 -0
- package/agents/god-browser-tester.md +15 -0
- package/agents/god-context-writer.md +14 -0
- package/agents/god-coordinator.md +14 -0
- package/agents/god-debt-assessor.md +11 -0
- package/agents/god-debugger.md +13 -0
- package/agents/god-deploy-engineer.md +13 -0
- package/agents/god-deps-auditor.md +13 -0
- package/agents/god-design-reviewer.md +14 -0
- package/agents/god-designer.md +15 -0
- package/agents/god-docs-writer.md +13 -0
- package/agents/god-executor.md +14 -0
- package/agents/god-explorer.md +14 -0
- package/agents/god-greenfieldifier.md +13 -0
- package/agents/god-harden-auditor.md +12 -0
- package/agents/god-incident-investigator.md +13 -0
- package/agents/god-launch-strategist.md +14 -0
- package/agents/god-migration-strategist.md +13 -0
- package/agents/god-observability-engineer.md +14 -0
- package/agents/god-orchestrator.md +16 -2
- package/agents/god-org-context-loader.md +11 -0
- package/agents/god-planner.md +11 -0
- package/agents/god-pm.md +14 -0
- package/agents/god-quality-reviewer.md +12 -0
- package/agents/god-reconciler.md +14 -1
- package/agents/god-reconstructor.md +16 -0
- package/agents/god-repo-scaffolder.md +11 -0
- package/agents/god-retrospective.md +11 -0
- package/agents/god-roadmap-reconciler.md +42 -87
- package/agents/god-roadmap-updater.md +11 -0
- package/agents/god-roadmapper.md +12 -0
- package/agents/god-spec-reviewer.md +14 -0
- package/agents/god-spike-runner.md +13 -0
- package/agents/god-stack-selector.md +12 -0
- package/agents/god-standards-check.md +13 -0
- package/agents/god-storyteller.md +14 -0
- package/agents/god-updater.md +14 -0
- package/bin/install.js +10 -0
- package/lib/README.md +4 -0
- package/lib/agent-validator.js +67 -2
- package/lib/cli-dispatch.js +40 -1
- package/lib/command-families.js +10 -2
- package/lib/install-profiles.js +4 -1
- package/lib/installer-args.js +22 -0
- package/lib/recipe-coverage-sync.js +1 -1
- package/lib/release-surface-sync.js +3 -0
- package/lib/repo-doc-sync.js +1 -1
- package/lib/repo-surface-sync.js +3 -3
- package/lib/route-quality-sync.js +2 -2
- package/lib/router.js +6 -0
- package/lib/surface-profile.js +168 -0
- package/package.json +2 -2
- package/references/orchestration/GOD-MODE-RUNBOOK.md +9 -14
- package/references/orchestration/GOD-ORCHESTRATOR-RUNBOOK.md +43 -81
- package/references/shared/DASHBOARD-CONTRACT.md +66 -29
- package/references/shared/README.md +1 -1
- package/routing/god-demo.yaml +35 -0
- package/routing/god-first-run.yaml +34 -0
- package/routing/god-roadmap-check.yaml +2 -2
- package/routing/god-surface.yaml +39 -0
- package/routing/recipes/try-safely.yaml +26 -0
- package/skills/god-agent-audit.md +17 -15
- package/skills/god-arch.md +1 -3
- package/skills/god-archaeology.md +5 -6
- package/skills/god-audit.md +6 -7
- package/skills/god-automation-setup.md +6 -7
- package/skills/god-automation-status.md +6 -7
- package/skills/god-build.md +1 -3
- package/skills/god-context-scan.md +7 -8
- package/skills/god-demo.md +53 -0
- package/skills/god-deploy.md +1 -3
- package/skills/god-design-impact.md +5 -6
- package/skills/god-design.md +9 -3
- package/skills/god-discuss.md +5 -6
- package/skills/god-docs.md +5 -10
- package/skills/god-doctor.md +8 -9
- package/skills/god-dogfood.md +7 -10
- package/skills/god-explore.md +5 -7
- package/skills/god-feature.md +1 -3
- package/skills/god-first-run.md +64 -0
- package/skills/god-harden.md +1 -3
- package/skills/god-help.md +77 -51
- package/skills/god-hotfix.md +1 -3
- package/skills/god-hygiene.md +5 -6
- package/skills/god-launch.md +1 -3
- package/skills/god-lifecycle.md +11 -13
- package/skills/god-link.md +1 -3
- package/skills/god-list-assumptions.md +7 -8
- package/skills/god-locate.md +7 -8
- package/skills/god-map-codebase.md +5 -6
- package/skills/god-migrate.md +7 -18
- package/skills/god-mode.md +5 -0
- package/skills/god-next.md +16 -17
- package/skills/god-observe.md +1 -3
- package/skills/god-prd.md +1 -3
- package/skills/god-preflight.md +7 -8
- package/skills/god-progress.md +7 -8
- package/skills/god-reconcile.md +9 -10
- package/skills/god-reconstruct.md +5 -7
- package/skills/god-redo.md +1 -3
- package/skills/god-refactor.md +7 -10
- package/skills/god-repair.md +1 -3
- package/skills/god-repo.md +1 -3
- package/skills/god-restore.md +1 -3
- package/skills/god-roadmap-check.md +10 -10
- package/skills/god-roadmap.md +1 -3
- package/skills/god-rollback.md +1 -3
- package/skills/god-scan.md +6 -12
- package/skills/god-skip.md +1 -3
- package/skills/god-spike.md +5 -6
- package/skills/god-stack.md +1 -3
- package/skills/god-standards.md +5 -6
- package/skills/god-status.md +12 -10
- package/skills/god-story-build.md +1 -3
- package/skills/god-story-close.md +1 -3
- package/skills/god-story.md +1 -3
- package/skills/god-surface.md +61 -0
- package/skills/god-sync.md +7 -13
- package/skills/god-tech-debt.md +5 -6
- package/skills/god-test-runtime.md +4 -8
- package/skills/god-undo.md +1 -3
- package/skills/god-update-deps.md +1 -3
- package/skills/god-upgrade.md +1 -3
- package/skills/god-version.md +1 -1
- package/skills/god.md +53 -52
package/lib/installer-args.js
CHANGED
|
@@ -11,6 +11,8 @@ const COMMANDS = new Set([
|
|
|
11
11
|
'automation-setup',
|
|
12
12
|
'dogfood',
|
|
13
13
|
'extension-scaffold',
|
|
14
|
+
'surface',
|
|
15
|
+
'demo',
|
|
14
16
|
'gate'
|
|
15
17
|
]);
|
|
16
18
|
|
|
@@ -21,6 +23,7 @@ function parseArgs(argv, cwd = process.cwd()) {
|
|
|
21
23
|
project: cwd,
|
|
22
24
|
json: false,
|
|
23
25
|
brief: false,
|
|
26
|
+
full: false,
|
|
24
27
|
stateAction: null,
|
|
25
28
|
step: null,
|
|
26
29
|
status: null,
|
|
@@ -30,6 +33,8 @@ function parseArgs(argv, cwd = process.cwd()) {
|
|
|
30
33
|
extensionAgent: null,
|
|
31
34
|
extensionWorkflow: null,
|
|
32
35
|
tier: null,
|
|
36
|
+
apply: false,
|
|
37
|
+
dryRun: false,
|
|
33
38
|
runtimes: [],
|
|
34
39
|
global: false,
|
|
35
40
|
local: false,
|
|
@@ -57,6 +62,21 @@ function parseArgs(argv, cwd = process.cwd()) {
|
|
|
57
62
|
case '--brief':
|
|
58
63
|
opts.brief = true;
|
|
59
64
|
break;
|
|
65
|
+
case '--full':
|
|
66
|
+
opts.full = true;
|
|
67
|
+
break;
|
|
68
|
+
case '--apply':
|
|
69
|
+
opts.apply = true;
|
|
70
|
+
break;
|
|
71
|
+
case '--dry-run':
|
|
72
|
+
opts.dryRun = true;
|
|
73
|
+
break;
|
|
74
|
+
case '--runtime':
|
|
75
|
+
if (args[i + 1]) {
|
|
76
|
+
opts.runtimes.push(args[i + 1]);
|
|
77
|
+
i++;
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
60
80
|
case '--tier':
|
|
61
81
|
if (args[i + 1]) {
|
|
62
82
|
opts.tier = args[i + 1];
|
|
@@ -122,6 +142,8 @@ function parseArgs(argv, cwd = process.cwd()) {
|
|
|
122
142
|
opts.extensionAgent = arg.slice('--agent='.length);
|
|
123
143
|
} else if (arg.startsWith('--workflow=')) {
|
|
124
144
|
opts.extensionWorkflow = arg.slice('--workflow='.length);
|
|
145
|
+
} else if (arg.startsWith('--runtime=')) {
|
|
146
|
+
opts.runtimes.push(arg.slice('--runtime='.length));
|
|
125
147
|
} else if (arg.startsWith('--tier=')) {
|
|
126
148
|
opts.tier = arg.slice('--tier='.length);
|
|
127
149
|
} else if (arg.startsWith('--step=')) {
|
|
@@ -92,7 +92,7 @@ function detect(projectRoot) {
|
|
|
92
92
|
matched.length > 0
|
|
93
93
|
? `Recipe coverage exists for ${required.description}.`
|
|
94
94
|
: `No recipe covers ${required.description} with ${required.commands.join(', ')}.`,
|
|
95
|
-
{ spawn: matched.length > 0 ? null : 'god-
|
|
95
|
+
{ spawn: matched.length > 0 ? null : 'god-reconciler' }
|
|
96
96
|
);
|
|
97
97
|
}
|
|
98
98
|
|
|
@@ -12,9 +12,12 @@ const path = require('path');
|
|
|
12
12
|
const LOG_PATH = '.godpowers/surface/RELEASE-SURFACE-SYNC.md';
|
|
13
13
|
|
|
14
14
|
const REQUIRED_PACKAGE_GUARDS = [
|
|
15
|
+
'lib/artifact-map.js',
|
|
16
|
+
'lib/cli-dispatch.js',
|
|
15
17
|
'lib/command-families.js',
|
|
16
18
|
'lib/dogfood-runner.js',
|
|
17
19
|
'lib/extension-authoring.js',
|
|
20
|
+
'lib/gate.js',
|
|
18
21
|
'lib/host-capabilities.js',
|
|
19
22
|
'lib/route-quality-sync.js',
|
|
20
23
|
'lib/recipe-coverage-sync.js',
|
package/lib/repo-doc-sync.js
CHANGED
|
@@ -371,7 +371,7 @@ function adjacentOpportunities() {
|
|
|
371
371
|
id: 'workflow-recipe-graph-sync',
|
|
372
372
|
trigger: '/god-next, /god-mode, /god-doctor',
|
|
373
373
|
behavior: 'compare workflow YAML, recipes, command flows, and orchestrator guidance',
|
|
374
|
-
escalation: 'spawn god-
|
|
374
|
+
escalation: 'spawn god-reconciler when lifecycle intent is ambiguous'
|
|
375
375
|
},
|
|
376
376
|
{
|
|
377
377
|
id: 'extension-pack-sync',
|
package/lib/repo-surface-sync.js
CHANGED
|
@@ -270,7 +270,7 @@ function workflowRecipeChecks(projectRoot) {
|
|
|
270
270
|
hasMetadata ? 'fresh' : 'stale',
|
|
271
271
|
workflow,
|
|
272
272
|
hasMetadata ? `${workflow} has metadata.` : `${workflow} is missing parseable metadata.`,
|
|
273
|
-
{ spawn: hasMetadata ? null : 'god-
|
|
273
|
+
{ spawn: hasMetadata ? null : 'god-reconciler' }
|
|
274
274
|
);
|
|
275
275
|
}
|
|
276
276
|
|
|
@@ -285,7 +285,7 @@ function workflowRecipeChecks(projectRoot) {
|
|
|
285
285
|
hasCommand ? 'fresh' : 'stale',
|
|
286
286
|
recipe,
|
|
287
287
|
hasCommand ? `${recipe} includes a slash-command route.` : `${recipe} has no slash-command route.`,
|
|
288
|
-
{ spawn: hasCommand ? null : 'god-
|
|
288
|
+
{ spawn: hasCommand ? null : 'god-reconciler' }
|
|
289
289
|
);
|
|
290
290
|
}
|
|
291
291
|
|
|
@@ -297,7 +297,7 @@ function workflowRecipeChecks(projectRoot) {
|
|
|
297
297
|
commandFlows.includes('/god-docs') && commandFlows.includes('/god-sync') ? 'fresh' : 'stale',
|
|
298
298
|
'docs/command-flows.md',
|
|
299
299
|
'docs/command-flows.md includes core docs and sync flows.',
|
|
300
|
-
{ spawn: 'god-
|
|
300
|
+
{ spawn: 'god-reconciler' }
|
|
301
301
|
);
|
|
302
302
|
}
|
|
303
303
|
return checks;
|
|
@@ -244,7 +244,7 @@ function detect(projectRoot) {
|
|
|
244
244
|
'stale',
|
|
245
245
|
routePath,
|
|
246
246
|
`${command} uses contextual next route ${next} without a typed success-path.outcome.`,
|
|
247
|
-
{ spawn: 'god-
|
|
247
|
+
{ spawn: 'god-reconciler' }
|
|
248
248
|
);
|
|
249
249
|
}
|
|
250
250
|
}
|
|
@@ -297,7 +297,7 @@ function detect(projectRoot) {
|
|
|
297
297
|
checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'stale' : 'fresh',
|
|
298
298
|
'routing/',
|
|
299
299
|
`${typedOutcomeCount} contextual route exits have typed outcomes and all other next routes are explicit.`,
|
|
300
|
-
{ spawn: checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'god-
|
|
300
|
+
{ spawn: checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'god-reconciler' : null }
|
|
301
301
|
);
|
|
302
302
|
addCheck(
|
|
303
303
|
checks,
|
package/lib/router.js
CHANGED
|
@@ -264,6 +264,11 @@ function getStandards(command) {
|
|
|
264
264
|
return routing.standards;
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
function getGateCommand(command) {
|
|
268
|
+
const standards = getStandards(command);
|
|
269
|
+
return standards && standards['gate-command'] ? standards['gate-command'] : null;
|
|
270
|
+
}
|
|
271
|
+
|
|
267
272
|
/**
|
|
268
273
|
* Get the list of agents this command spawns (primary + secondary).
|
|
269
274
|
*/
|
|
@@ -403,6 +408,7 @@ module.exports = {
|
|
|
403
408
|
getRouteOutcome,
|
|
404
409
|
getAlternatives,
|
|
405
410
|
getStandards,
|
|
411
|
+
getGateCommand,
|
|
406
412
|
getSpawnedAgents,
|
|
407
413
|
getCommandFamily: commandFamilies.familyForCommand,
|
|
408
414
|
resolveTrigger: commandFamilies.resolveTrigger,
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime surface profile preview and apply helper.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
const { resolveRuntime, runtimeKeys } = require('./installer-runtimes');
|
|
9
|
+
const profiles = require('./install-profiles');
|
|
10
|
+
const installer = require('./installer-core');
|
|
11
|
+
|
|
12
|
+
function availableSkillNames(srcDir) {
|
|
13
|
+
const skillsDir = path.join(srcDir, 'skills');
|
|
14
|
+
if (!fs.existsSync(skillsDir)) return [];
|
|
15
|
+
return fs.readdirSync(skillsDir)
|
|
16
|
+
.filter((file) => /^god.*\.md$/.test(file))
|
|
17
|
+
.map((file) => path.basename(file, '.md'))
|
|
18
|
+
.sort();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isRuntimeSkillName(name) {
|
|
22
|
+
return name === 'god' || name.startsWith('god-');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function installedSkillNames(runtime) {
|
|
26
|
+
const skillsDir = path.join(runtime.configDir, runtime.skillsDir);
|
|
27
|
+
if (!fs.existsSync(skillsDir)) return [];
|
|
28
|
+
const names = [];
|
|
29
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
const skillFile = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
32
|
+
if (fs.existsSync(skillFile) && isRuntimeSkillName(entry.name)) {
|
|
33
|
+
names.push(entry.name);
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
38
|
+
const name = path.basename(entry.name, '.md');
|
|
39
|
+
if (isRuntimeSkillName(name)) names.push(name);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return [...new Set(names)].sort();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function currentProfile(runtime) {
|
|
46
|
+
const marker = path.join(runtime.configDir, 'GODPOWERS_PROFILE');
|
|
47
|
+
if (!fs.existsSync(marker)) return 'unknown';
|
|
48
|
+
const text = fs.readFileSync(marker, 'utf8').trim();
|
|
49
|
+
return text || 'unknown';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function targetRuntimeKeys(opts = {}) {
|
|
53
|
+
if (opts.all) return runtimeKeys();
|
|
54
|
+
if (opts.runtimes && opts.runtimes.length > 0) return opts.runtimes.slice();
|
|
55
|
+
return runtimeKeys().filter((key) => {
|
|
56
|
+
const runtime = resolveRuntime(key, opts);
|
|
57
|
+
return runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function diffSkills(selected, installed) {
|
|
62
|
+
const selectedSet = new Set(selected);
|
|
63
|
+
const installedSet = new Set(installed);
|
|
64
|
+
return {
|
|
65
|
+
add: selected.filter((name) => !installedSet.has(name)),
|
|
66
|
+
remove: installed.filter((name) => !selectedSet.has(name))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function plan(srcDir = path.resolve(__dirname, '..'), opts = {}) {
|
|
71
|
+
const profileList = profiles.normalizeProfiles(opts.profile || 'core');
|
|
72
|
+
const profile = profileList.join(',');
|
|
73
|
+
const available = availableSkillNames(srcDir);
|
|
74
|
+
const selected = [...profiles.selectedSkillNames(profile, available)].sort();
|
|
75
|
+
const keys = targetRuntimeKeys(opts);
|
|
76
|
+
const targets = keys.map((key) => {
|
|
77
|
+
const runtime = resolveRuntime(key, opts);
|
|
78
|
+
const installed = runtime ? installedSkillNames(runtime) : [];
|
|
79
|
+
const diff = diffSkills(selected, installed);
|
|
80
|
+
return {
|
|
81
|
+
key,
|
|
82
|
+
name: runtime ? runtime.name : key,
|
|
83
|
+
configDir: runtime ? runtime.configDir : null,
|
|
84
|
+
skillsDir: runtime ? path.join(runtime.configDir, runtime.skillsDir) : null,
|
|
85
|
+
installed: Boolean(runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'))),
|
|
86
|
+
currentProfile: runtime ? currentProfile(runtime) : 'unknown',
|
|
87
|
+
currentCount: installed.length,
|
|
88
|
+
selectedCount: selected.length,
|
|
89
|
+
add: diff.add,
|
|
90
|
+
remove: diff.remove
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
profile,
|
|
96
|
+
description: profiles.describeProfiles(profile),
|
|
97
|
+
mode: opts.apply ? 'apply' : 'dry-run',
|
|
98
|
+
selectedCount: selected.length,
|
|
99
|
+
availableCount: available.length,
|
|
100
|
+
targets
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function apply(srcDir = path.resolve(__dirname, '..'), opts = {}) {
|
|
105
|
+
const keys = targetRuntimeKeys(opts);
|
|
106
|
+
if (keys.length === 0) {
|
|
107
|
+
throw new Error('surface apply requires an installed runtime, --all, or an explicit runtime flag');
|
|
108
|
+
}
|
|
109
|
+
const results = [];
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
const ok = installer.installForRuntime(key, srcDir, { ...opts, profile: opts.profile || 'core' });
|
|
112
|
+
results.push({ key, ok });
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function renderList(items, max = 6) {
|
|
118
|
+
if (!items || items.length === 0) return 'none';
|
|
119
|
+
const shown = items.slice(0, max).join(', ');
|
|
120
|
+
const remaining = items.length - max;
|
|
121
|
+
return remaining > 0 ? `${shown}, and ${remaining} more` : shown;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function render(report) {
|
|
125
|
+
const lines = [
|
|
126
|
+
'Godpowers Surface',
|
|
127
|
+
'',
|
|
128
|
+
`Profile: ${report.description}`,
|
|
129
|
+
`Mode: ${report.mode}`,
|
|
130
|
+
`Selected commands: ${report.selectedCount} of ${report.availableCount}`,
|
|
131
|
+
'',
|
|
132
|
+
'Runtime targets:'
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
if (report.targets.length === 0) {
|
|
136
|
+
lines.push(' none detected. Pass --claude, --codex, or --all.');
|
|
137
|
+
} else {
|
|
138
|
+
for (const target of report.targets) {
|
|
139
|
+
lines.push(` - ${target.name}: current ${target.currentProfile}, selected ${target.selectedCount} commands`);
|
|
140
|
+
lines.push(` Path: ${target.skillsDir}`);
|
|
141
|
+
lines.push(` Add: ${renderList(target.add)}`);
|
|
142
|
+
lines.push(` Remove: ${renderList(target.remove)}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
lines.push('');
|
|
147
|
+
lines.push('Next commands:');
|
|
148
|
+
if (report.targets.length === 0) {
|
|
149
|
+
lines.push('- godpowers surface --profile=core --codex --global --dry-run: Preview the core surface for Codex.');
|
|
150
|
+
} else if (report.mode === 'dry-run') {
|
|
151
|
+
const first = report.targets[0];
|
|
152
|
+
lines.push(`- godpowers surface --profile=${report.profile} --${first.key} --global --apply: Apply this profile to ${first.name}.`);
|
|
153
|
+
} else {
|
|
154
|
+
lines.push('- /god-help: Open the compact help view after the surface switch.');
|
|
155
|
+
}
|
|
156
|
+
lines.push('- /god-help all: Show the complete catalog when you need every command.');
|
|
157
|
+
|
|
158
|
+
return lines.join('\n');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
module.exports = {
|
|
162
|
+
availableSkillNames,
|
|
163
|
+
installedSkillNames,
|
|
164
|
+
targetRuntimeKeys,
|
|
165
|
+
plan,
|
|
166
|
+
apply,
|
|
167
|
+
render
|
|
168
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "AI-powered development system:
|
|
3
|
+
"version": "3.0.2",
|
|
4
|
+
"description": "AI-powered development system: 120 slash commands and 40 specialist agents that take a project from raw idea to hardened production. Runs inside Claude Code, Codex, Cursor, Windsurf, Gemini, and 10+ other AI coding tools.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"godpowers": "./bin/install.js"
|
|
7
7
|
},
|
|
@@ -10,8 +10,8 @@ Show:
|
|
|
10
10
|
- detected resume or project mode in plain language
|
|
11
11
|
- a compact "Next step" card before each visible phase or tier sub-step
|
|
12
12
|
- a compact "Step result" card after each visible phase or tier sub-step
|
|
13
|
-
-
|
|
14
|
-
|
|
13
|
+
- concise notes for automatic work that changes artifacts, review items, or
|
|
14
|
+
recommendations, with details written to logs
|
|
15
15
|
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
16
16
|
unexplained "arc" in visible output
|
|
17
17
|
- PRD and roadmap visibility in status and closeout blocks when artifacts
|
|
@@ -19,9 +19,8 @@ Show:
|
|
|
19
19
|
- short progress updates for phases, commands, validations, and file edits
|
|
20
20
|
- concise validation summaries instead of full command noise when possible
|
|
21
21
|
- final changed paths, validation results, and completion or pause status
|
|
22
|
-
- final
|
|
23
|
-
|
|
24
|
-
recommended next action
|
|
22
|
+
- final compact action brief from disk, with `/god-status --full` offered for
|
|
23
|
+
the complete dashboard
|
|
25
24
|
|
|
26
25
|
Hide:
|
|
27
26
|
- raw spawn input
|
|
@@ -272,15 +271,11 @@ Periodic hygiene:
|
|
|
272
271
|
Open items:
|
|
273
272
|
1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
|
|
274
273
|
|
|
275
|
-
Next:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
1. Review status: /god-status
|
|
281
|
-
2. Continue work: /god-next or describe the next intent
|
|
282
|
-
3. Commit release-ready changes: stage only the intended files, then commit
|
|
283
|
-
4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
|
|
274
|
+
Next commands:
|
|
275
|
+
- /god-status --full: Review the complete dashboard and proactive checks.
|
|
276
|
+
- /god-next: Continue with the safest state-derived next step.
|
|
277
|
+
- stage only the intended files, then commit: Commit release-ready changes.
|
|
278
|
+
- provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
|
|
284
279
|
```
|
|
285
280
|
|
|
286
281
|
If the run edited code but did not stage or commit, the completion block must
|
|
@@ -182,6 +182,7 @@ When deciding what to spawn next, query the routing definition:
|
|
|
182
182
|
- `execution.spawns` -> primary agent to spawn
|
|
183
183
|
- `execution.secondary-spawns` -> downstream agents (e.g., reviewers)
|
|
184
184
|
- `standards.have-nots` -> which have-nots to verify
|
|
185
|
+
- `standards.gate-command` -> executable artifact gate to run after output exists
|
|
185
186
|
- `success-path.next-recommended` -> what to suggest next
|
|
186
187
|
|
|
187
188
|
Before spawning a command, evaluate `lib/router.js checkPrerequisites(command,
|
|
@@ -197,6 +198,12 @@ the routing config has a `standards` section). Standards check uses fresh
|
|
|
197
198
|
context, independent of the producing agent, so it catches drift the
|
|
198
199
|
producing agent's own self-check would miss.
|
|
199
200
|
|
|
201
|
+
When `standards.gate-command` is present, run that exact command from the
|
|
202
|
+
project root after the producing tier skill returns and before any downstream
|
|
203
|
+
tier starts. A non-zero exit means the tier is not complete. Report the gate
|
|
204
|
+
output, repair the artifact, and rerun the gate before updating durable state
|
|
205
|
+
to done.
|
|
206
|
+
|
|
200
207
|
## Recipe-Driven Decisions (for fuzzy intent)
|
|
201
208
|
|
|
202
209
|
When the user describes intent in plain English instead of running a specific
|
|
@@ -217,7 +224,7 @@ with the "why" annotations for each step.
|
|
|
217
224
|
This is the third layer of decision support:
|
|
218
225
|
1. **Routing** (`<runtimeRoot>/routing/<command>.yaml`): structural prerequisites and gates
|
|
219
226
|
2. **Recipes** (`<runtimeRoot>/routing/recipes/<recipe>.yaml`): scenario-based sequences
|
|
220
|
-
3. **Standards** (god-standards-check): quality gates between stages
|
|
227
|
+
3. **Standards** (god-standards-check plus standards.gate-command): quality gates between stages
|
|
221
228
|
|
|
222
229
|
## Proactive Auto-Invoke Matrix
|
|
223
230
|
|
|
@@ -236,20 +243,20 @@ Use this trigger map:
|
|
|
236
243
|
|
|
237
244
|
| Trigger | Auto action | Visibility |
|
|
238
245
|
|---|---|---|
|
|
239
|
-
| `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` |
|
|
240
|
-
| code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout |
|
|
241
|
-
| durable artifact truth changed | run Pillars sync plan |
|
|
242
|
-
| AI tool instruction files changed | spawn or dry-run `god-context-writer` |
|
|
243
|
-
| `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` |
|
|
246
|
+
| `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` | log detail, concise note only when recommendation changes |
|
|
247
|
+
| code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout | concise sync note and log path |
|
|
248
|
+
| durable artifact truth changed | run Pillars sync plan | log detail, concise note only when pillar edits are proposed |
|
|
249
|
+
| AI tool instruction files changed | spawn or dry-run `god-context-writer` | concise note when files change |
|
|
250
|
+
| `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` | `Next commands:` |
|
|
244
251
|
| `DESIGN.md` or `PRODUCT.md` changed | spawn `god-design-reviewer` | gate card before propagation |
|
|
245
|
-
| docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` |
|
|
252
|
+
| docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` | concise note or `Next commands:` |
|
|
246
253
|
| frontend-visible files changed and a known URL exists | spawn `god-browser-tester` inside build, design, launch, harden, or explicit runtime workflows | runtime status card |
|
|
247
|
-
| frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL |
|
|
248
|
-
| security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` |
|
|
249
|
-
| dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` |
|
|
250
|
-
| host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` |
|
|
254
|
+
| frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL | `Next commands:` |
|
|
255
|
+
| security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` | `Next commands:` |
|
|
256
|
+
| dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` | `Next commands:` |
|
|
257
|
+
| host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` | `Next commands:` |
|
|
251
258
|
| user approves complex automation setup | spawn `god-automation-engineer` | approval card plus setup result |
|
|
252
|
-
| full project run complete or hygiene stale | suggest `/god-hygiene` |
|
|
259
|
+
| full project run complete or hygiene stale | suggest `/god-hygiene` | `Next commands:` |
|
|
253
260
|
|
|
254
261
|
Never use this matrix to auto-run Level 4 actions: deployed staging against a
|
|
255
262
|
guessed URL, production launch, provider dashboard access, broad dependency
|
|
@@ -258,8 +265,8 @@ git stage, commit, push, package, release, publish, schedule creation, routine
|
|
|
258
265
|
creation, background agent creation, API trigger creation, or CI workflow
|
|
259
266
|
creation without explicit user approval.
|
|
260
267
|
|
|
261
|
-
Every auto action must
|
|
262
|
-
|
|
268
|
+
Every auto action must either log details or emit a concise note when it
|
|
269
|
+
changes artifacts, review items, blockers, or the next recommendation.
|
|
263
270
|
|
|
264
271
|
## Detection-Driven Tier 1 Routing
|
|
265
272
|
|
|
@@ -479,7 +486,7 @@ requested or final sign-off begins.
|
|
|
479
486
|
4. Print the "Next step" card from the Step Narration Protocol
|
|
480
487
|
5. Spawn the appropriate specialist agent in a fresh context
|
|
481
488
|
6. Verify their output exists on disk
|
|
482
|
-
7. Run have-nots check on the artifact
|
|
489
|
+
7. Run have-nots check on the artifact and run `standards.gate-command` when configured
|
|
483
490
|
8. If pass: update PROGRESS.md, sync CHECKPOINT.md, run the proactive
|
|
484
491
|
auto-invoke sweep, print the "Step result" card, then move to next sub-step
|
|
485
492
|
9. If fail and repairable: print the failed result card, then enter the
|
|
@@ -633,18 +640,6 @@ After Launch completes, write a transition message:
|
|
|
633
640
|
```text
|
|
634
641
|
Godpowers project run complete.
|
|
635
642
|
|
|
636
|
-
Godpowers Dashboard
|
|
637
|
-
|
|
638
|
-
Source: runtime dashboard (lib/dashboard.js)
|
|
639
|
-
|
|
640
|
-
Current status:
|
|
641
|
-
State: complete
|
|
642
|
-
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
643
|
-
Step: <sub-step label> (step <n> of <total steps>)
|
|
644
|
-
Progress: <pct>% workflow progress (<done> of <total> tracked steps complete)
|
|
645
|
-
Worktree: <clean | modified files unstaged | staged changes | mixed>
|
|
646
|
-
Index: <untouched | staged files listed>
|
|
647
|
-
|
|
648
643
|
Action brief:
|
|
649
644
|
Next: <one command or user decision>
|
|
650
645
|
Why: <one sentence tied to disk state>
|
|
@@ -652,17 +647,6 @@ Action brief:
|
|
|
652
647
|
Attention: <none or top blockers>
|
|
653
648
|
Host guarantees: <full | degraded | unknown>
|
|
654
649
|
|
|
655
|
-
Planning visibility:
|
|
656
|
-
PRD: <done | pending | missing | deferred> <artifact path when present>
|
|
657
|
-
Roadmap: <done | pending | missing | deferred> <artifact path when present>
|
|
658
|
-
Current milestone: <roadmap milestone, tier, or next planning gate when known>
|
|
659
|
-
Completion basis: <state.json, PROGRESS.md, artifacts, or audit score source>
|
|
660
|
-
|
|
661
|
-
Deliverable progress:
|
|
662
|
-
Requirements: <done>/<total> done (<pct>%); <in-progress> in progress, <untouched> not started
|
|
663
|
-
Increments: <done> done, <building> building, <pending> pending
|
|
664
|
-
Ledger: .godpowers/REQUIREMENTS.md
|
|
665
|
-
|
|
666
650
|
What changed:
|
|
667
651
|
1. <highest-signal user-visible change>
|
|
668
652
|
2. <highest-signal user-visible change>
|
|
@@ -670,22 +654,6 @@ What changed:
|
|
|
670
654
|
Validation:
|
|
671
655
|
+ <command>: <result>
|
|
672
656
|
|
|
673
|
-
Proactive checks:
|
|
674
|
-
Checkpoint: <fresh | refreshed | stale>
|
|
675
|
-
Reviews: <none | N pending, suggest /god-review-changes>
|
|
676
|
-
Sync: <fresh | suggested | local helper ran>
|
|
677
|
-
Docs: <fresh | suggested | drift-check spawned>
|
|
678
|
-
Repo surface: <fresh | stale, suggest /god-doctor>
|
|
679
|
-
Host: <full | degraded | unknown>
|
|
680
|
-
Dogfood: <not-run | pass | fail | suggest /god-dogfood>
|
|
681
|
-
Runtime: <not-applicable | suggested | browser test spawned>
|
|
682
|
-
Security: <clear | suggested | harden spawned>
|
|
683
|
-
Dependencies: <clear | suggested | deps audit spawned>
|
|
684
|
-
Hygiene: <fresh | suggest /god-hygiene>
|
|
685
|
-
|
|
686
|
-
Open items:
|
|
687
|
-
1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
|
|
688
|
-
|
|
689
657
|
Project is now in steady state. From here, ongoing work uses these workflows:
|
|
690
658
|
|
|
691
659
|
Adding features: /god-feature
|
|
@@ -702,21 +670,18 @@ Periodic hygiene:
|
|
|
702
670
|
Health check: /god-hygiene (combines audit + deps + docs)
|
|
703
671
|
Deliverable status: /god-progress (requirements + increments done/left)
|
|
704
672
|
|
|
705
|
-
Next:
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
1. Review status: /god-status (pipeline) or /god-progress (deliverables)
|
|
711
|
-
2. Continue work: /god-next or describe the next intent
|
|
712
|
-
3. Commit release-ready changes: stage only the intended files, then commit
|
|
713
|
-
4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
|
|
673
|
+
Next commands:
|
|
674
|
+
- /god-status --full: Review the complete dashboard and proactive checks.
|
|
675
|
+
- /god-progress: Review deliverable progress.
|
|
676
|
+
- /god-next: Continue with the safest state-derived next step.
|
|
677
|
+
- provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
|
|
714
678
|
```
|
|
715
679
|
|
|
716
680
|
Generate the dashboard with `lib/dashboard.compute(projectRoot)` and
|
|
717
|
-
`lib/dashboard.render(result)` when the runtime bundle is
|
|
718
|
-
runtime module cannot be loaded,
|
|
719
|
-
`
|
|
681
|
+
`lib/dashboard.render(result, { brief: true })` when the runtime bundle is
|
|
682
|
+
available. If the runtime module cannot be loaded, use a manual disk scan
|
|
683
|
+
quietly and suggest `/god-doctor` only when the fallback changes the next
|
|
684
|
+
recommendation.
|
|
720
685
|
|
|
721
686
|
The dashboard `Progress` line is workflow progress only. Audit scores,
|
|
722
687
|
remediation scores, hygiene scores, and launch-readiness scores must be labeled
|
|
@@ -840,15 +805,14 @@ Show:
|
|
|
840
805
|
- concise phase status
|
|
841
806
|
- before each visible tier/sub-step, a short "what will happen" card
|
|
842
807
|
- after each visible tier/sub-step, a short "what happened" card
|
|
843
|
-
-
|
|
844
|
-
|
|
808
|
+
- concise notes for automatic work that changes artifacts, review items, or
|
|
809
|
+
recommendations, with details written to logs
|
|
845
810
|
- durable state detected from disk
|
|
846
811
|
- commands being run and whether they passed or failed
|
|
847
812
|
- scoped file changes
|
|
848
813
|
- final validation summary
|
|
849
|
-
- final
|
|
850
|
-
|
|
851
|
-
worktree/index state, and recommended next action
|
|
814
|
+
- final compact action brief from disk, with `/god-status --full` offered for
|
|
815
|
+
the complete dashboard
|
|
852
816
|
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
853
817
|
unexplained "arc" in visible output
|
|
854
818
|
- PRD and roadmap visibility when those artifacts exist or are expected
|
|
@@ -871,21 +835,17 @@ user-facing question. Do not expose the rule itself. Example: ask for
|
|
|
871
835
|
`STAGING_APP_URL=<deployed staging origin>` at final sign-off rather than
|
|
872
836
|
showing the Shipping Closure Protocol.
|
|
873
837
|
|
|
874
|
-
###
|
|
838
|
+
### Automatic Work Notes
|
|
875
839
|
|
|
876
840
|
Every automatic step that mutates state, writes artifacts, validates gates, or
|
|
877
|
-
spawns an agent must leave
|
|
841
|
+
spawns an agent must leave an accountable trace in logs. Show a concise note in
|
|
842
|
+
the transcript only when artifacts changed, review items were created, blockers
|
|
843
|
+
appeared, or the recommendation changed.
|
|
878
844
|
|
|
879
845
|
Use this shape:
|
|
880
846
|
|
|
881
847
|
```
|
|
882
|
-
|
|
883
|
-
Trigger: <event that caused the automatic step>
|
|
884
|
-
Agent: <agent name, or none, local runtime only>
|
|
885
|
-
Local syncs:
|
|
886
|
-
+ <helper>: <result>
|
|
887
|
-
Artifacts: <changed files, no-op, or deferred>
|
|
888
|
-
Log: <path, or none>
|
|
848
|
+
Synced project artifacts after the change. Details were written to .godpowers/SYNC-LOG.md.
|
|
889
849
|
```
|
|
890
850
|
|
|
891
851
|
Required auto-invoked cards:
|
|
@@ -1256,4 +1216,6 @@ For preflight auto-routing, append:
|
|
|
1256
1216
|
|
|
1257
1217
|
The canonical have-nots catalog lives at `references/HAVE-NOTS.md` (115 named
|
|
1258
1218
|
failure modes). When verifying an artifact, run the relevant tier's have-nots
|
|
1259
|
-
against it. When
|
|
1219
|
+
against it. When the route has `standards.gate-command`, run that exact command
|
|
1220
|
+
after have-nots and block on any non-zero exit. When in doubt, spawn
|
|
1221
|
+
god-auditor to do the check.
|