@rudinmax87/united-we-stand 0.1.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/.united-we-stand/README.md +523 -0
- package/.united-we-stand/agents/0-status-checker.md +65 -0
- package/.united-we-stand/agents/1-initializer.md +48 -0
- package/.united-we-stand/agents/2-planner.md +44 -0
- package/.united-we-stand/agents/3-designer.md +50 -0
- package/.united-we-stand/agents/4-implementer.md +56 -0
- package/.united-we-stand/agents/5-code-reviewer.md +51 -0
- package/.united-we-stand/agents/6-finalizer.md +53 -0
- package/.united-we-stand/agents/accessibility-reviewer.md +15 -0
- package/.united-we-stand/agents/api-contract-writer.md +15 -0
- package/.united-we-stand/agents/data-modeler.md +15 -0
- package/.united-we-stand/agents/debugger.md +15 -0
- package/.united-we-stand/agents/documentation-writer.md +15 -0
- package/.united-we-stand/agents/migration-planner.md +15 -0
- package/.united-we-stand/agents/observability-reviewer.md +15 -0
- package/.united-we-stand/agents/performance-reviewer.md +15 -0
- package/.united-we-stand/agents/project-manager.md +15 -0
- package/.united-we-stand/agents/refactorer.md +15 -0
- package/.united-we-stand/agents/release-coordinator.md +15 -0
- package/.united-we-stand/agents/sql-database-designer.md +24 -0
- package/.united-we-stand/agents/test-strategist.md +15 -0
- package/.united-we-stand/agents/web-designer.md +19 -0
- package/.united-we-stand/agents-md-block.md +153 -0
- package/.united-we-stand/antigravity-workflow.md +15 -0
- package/.united-we-stand/copilot-instructions.md +15 -0
- package/.united-we-stand/cursor-rule.mdc +18 -0
- package/.united-we-stand/framework/00-index.md +53 -0
- package/.united-we-stand/framework/01-core-rules.md +157 -0
- package/.united-we-stand/framework/02-state-model.md +143 -0
- package/.united-we-stand/framework/03-stage-lifecycle.md +67 -0
- package/.united-we-stand/framework/04-command-routing.md +258 -0
- package/.united-we-stand/framework/05-conflict-resolution.md +41 -0
- package/.united-we-stand/framework/06-spec-writing-standard.md +156 -0
- package/.united-we-stand/framework/07-definition-of-done.md +52 -0
- package/.united-we-stand/framework/08-skip-force-policy.md +51 -0
- package/.united-we-stand/framework/09-traceability-model.md +37 -0
- package/.united-we-stand/framework/10-review-model.md +67 -0
- package/.united-we-stand/framework/11-glossary.md +16 -0
- package/.united-we-stand/framework/profiles/00-profile-selection.md +21 -0
- package/.united-we-stand/framework/profiles/api-service.md +11 -0
- package/.united-we-stand/framework/profiles/cli-tool.md +9 -0
- package/.united-we-stand/framework/profiles/csharp.md +10 -0
- package/.united-we-stand/framework/profiles/data-pipeline.md +9 -0
- package/.united-we-stand/framework/profiles/generic.md +37 -0
- package/.united-we-stand/framework/profiles/go.md +12 -0
- package/.united-we-stand/framework/profiles/java.md +11 -0
- package/.united-we-stand/framework/profiles/javascript-typescript.md +51 -0
- package/.united-we-stand/framework/profiles/library-package.md +10 -0
- package/.united-we-stand/framework/profiles/mobile-app.md +9 -0
- package/.united-we-stand/framework/profiles/php.md +10 -0
- package/.united-we-stand/framework/profiles/python.md +16 -0
- package/.united-we-stand/framework/profiles/ruby.md +10 -0
- package/.united-we-stand/framework/profiles/rust.md +11 -0
- package/.united-we-stand/framework/profiles/web-app.md +11 -0
- package/.united-we-stand/playbooks/00-index.md +19 -0
- package/.united-we-stand/playbooks/api-change.md +3 -0
- package/.united-we-stand/playbooks/bugfix.md +3 -0
- package/.united-we-stand/playbooks/data-model-change.md +3 -0
- package/.united-we-stand/playbooks/docs-only-change.md +3 -0
- package/.united-we-stand/playbooks/existing-feature-enhancement.md +3 -0
- package/.united-we-stand/playbooks/greenfield-feature.md +3 -0
- package/.united-we-stand/playbooks/migration.md +3 -0
- package/.united-we-stand/playbooks/refactor.md +3 -0
- package/.united-we-stand/playbooks/release-preparation.md +3 -0
- package/.united-we-stand/playbooks/security-hotfix.md +3 -0
- package/.united-we-stand/playbooks/ui-ux-change.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/00-current-status.md +46 -0
- package/.united-we-stand/spec-driven/branch-template/01-init.md +24 -0
- package/.united-we-stand/spec-driven/branch-template/02-plan.md +19 -0
- package/.united-we-stand/spec-driven/branch-template/03-design.md +22 -0
- package/.united-we-stand/spec-driven/branch-template/04-implementation.md +19 -0
- package/.united-we-stand/spec-driven/branch-template/05-code-review.md +16 -0
- package/.united-we-stand/spec-driven/branch-template/06-finalization.md +22 -0
- package/.united-we-stand/spec-driven/branch-template/07-decisions.md +10 -0
- package/.united-we-stand/spec-driven/branch-template/08-traceability.md +7 -0
- package/.united-we-stand/spec-driven/branch-template/09-risks-issues.md +10 -0
- package/.united-we-stand/spec-driven/branch-template/10-test-strategy.md +16 -0
- package/.united-we-stand/spec-driven/branch-template/11-change-log.md +5 -0
- package/.united-we-stand/spec-driven/branch-template/12-handoff.md +10 -0
- package/.united-we-stand/spec-driven/branch-template/13-retrospective.md +10 -0
- package/.united-we-stand/spec-driven/branch-template/api/auth-boundaries.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/api/contracts.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/api/endpoints.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/data/data-boundaries.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/data/migrations.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/data/schema-notes.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/modules/example-module.md +12 -0
- package/.united-we-stand/spec-driven/branch-template/ux/copy-notes.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/ux/screen-states.md +3 -0
- package/.united-we-stand/spec-driven/branch-template/ux/user-flows.md +3 -0
- package/.united-we-stand/steering/00-index.md +15 -0
- package/.united-we-stand/steering/architecture-steering.md +13 -0
- package/.united-we-stand/steering/coding-steering.md +77 -0
- package/.united-we-stand/steering/data-steering.md +31 -0
- package/.united-we-stand/steering/documentation-steering.md +11 -0
- package/.united-we-stand/steering/observability-steering.md +11 -0
- package/.united-we-stand/steering/product-steering.md +16 -0
- package/.united-we-stand/steering/repo-conventions.md +12 -0
- package/.united-we-stand/steering/security-steering.md +12 -0
- package/.united-we-stand/steering/testing-steering.md +11 -0
- package/.united-we-stand/steering/ux-steering.md +26 -0
- package/LICENSE +21 -0
- package/README.md +595 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +96 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/branch-init.d.ts +16 -0
- package/dist/commands/branch-init.d.ts.map +1 -0
- package/dist/commands/branch-init.js +337 -0
- package/dist/commands/branch-init.js.map +1 -0
- package/dist/commands/doctor.d.ts +17 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +527 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.d.ts +18 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +127 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/refresh.d.ts +17 -0
- package/dist/commands/refresh.d.ts.map +1 -0
- package/dist/commands/refresh.js +69 -0
- package/dist/commands/refresh.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/branch-routing.d.ts +14 -0
- package/dist/lib/branch-routing.d.ts.map +1 -0
- package/dist/lib/branch-routing.js +62 -0
- package/dist/lib/branch-routing.js.map +1 -0
- package/dist/lib/branch.d.ts +12 -0
- package/dist/lib/branch.d.ts.map +1 -0
- package/dist/lib/branch.js +19 -0
- package/dist/lib/branch.js.map +1 -0
- package/dist/lib/fs.d.ts +37 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +123 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/git.d.ts +20 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +87 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts +13 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +105 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/logger.d.ts +26 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +37 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/markers.d.ts +25 -0
- package/dist/lib/markers.d.ts.map +1 -0
- package/dist/lib/markers.js +60 -0
- package/dist/lib/markers.js.map +1 -0
- package/dist/lib/package-version.d.ts +6 -0
- package/dist/lib/package-version.d.ts.map +1 -0
- package/dist/lib/package-version.js +18 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/runtime-state.d.ts +35 -0
- package/dist/lib/runtime-state.d.ts.map +1 -0
- package/dist/lib/runtime-state.js +131 -0
- package/dist/lib/runtime-state.js.map +1 -0
- package/dist/lib/templates.d.ts +88 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +213 -0
- package/dist/lib/templates.js.map +1 -0
- package/package.json +57 -0
- package/public/united-we-stand-logo.png +0 -0
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor command: checks repository health and reports missing files.
|
|
3
|
+
*
|
|
4
|
+
* Separates checks into framework-level (set up by `install`) and
|
|
5
|
+
* branch-level (set up by `branch-init`) with targeted recommendations.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { isGitRepository, tryGetCurrentBranchName } from '../lib/git.js';
|
|
9
|
+
import { sanitizeBranchName } from '../lib/branch.js';
|
|
10
|
+
import { doesFileExist, readFileOrNull } from '../lib/fs.js';
|
|
11
|
+
import { hasManagedBlock } from '../lib/markers.js';
|
|
12
|
+
import { createLogger } from '../lib/logger.js';
|
|
13
|
+
import { readBranchRoutingMap, resolveBranchMemoryFolderName } from '../lib/branch-routing.js';
|
|
14
|
+
import { parseBranchRuntimeState, validateBranchRuntimeState, } from '../lib/runtime-state.js';
|
|
15
|
+
import { loadFrameworkFiles, loadSteeringFiles, loadPlaybookFiles, loadFrameworkAgentFiles, loadStandaloneAgentFiles, } from '../lib/templates.js';
|
|
16
|
+
const STATUS_FIELD_LABELS = {
|
|
17
|
+
currentBranch: 'Current branch',
|
|
18
|
+
currentStage: 'Current stage',
|
|
19
|
+
completedSteps: 'Completed steps',
|
|
20
|
+
incompletedStages: 'Incompleted stages',
|
|
21
|
+
nextRecommendedStep: 'Next recommended step',
|
|
22
|
+
statusNote: 'Status note',
|
|
23
|
+
blockersOrWarnings: 'Blockers / warnings',
|
|
24
|
+
lastUpdatedBy: 'Last updated by',
|
|
25
|
+
lastUpdatedAt: 'Last updated at',
|
|
26
|
+
};
|
|
27
|
+
const REQUIRED_STAGE_SECTIONS = {
|
|
28
|
+
'01-init.md': [
|
|
29
|
+
'## Raw idea / problem statement',
|
|
30
|
+
'## Scope (in)',
|
|
31
|
+
'## Scope (out)',
|
|
32
|
+
'## Assumptions',
|
|
33
|
+
'## Open questions',
|
|
34
|
+
'## Success criteria',
|
|
35
|
+
],
|
|
36
|
+
'02-plan.md': [
|
|
37
|
+
'## Objectives',
|
|
38
|
+
'## High-level task breakdown',
|
|
39
|
+
'## Dependencies',
|
|
40
|
+
'## Risks / unknowns',
|
|
41
|
+
'## Suggested execution order',
|
|
42
|
+
],
|
|
43
|
+
'03-design.md': [
|
|
44
|
+
'## Architecture / approach',
|
|
45
|
+
'## Key components',
|
|
46
|
+
'## Interfaces / data flow',
|
|
47
|
+
'## Constraints',
|
|
48
|
+
'## Design decisions',
|
|
49
|
+
],
|
|
50
|
+
'04-implementation.md': [
|
|
51
|
+
'## What changed',
|
|
52
|
+
'## Why it changed',
|
|
53
|
+
'## Files touched',
|
|
54
|
+
'## Validation and tests executed',
|
|
55
|
+
'## Remaining gaps / follow-ups',
|
|
56
|
+
],
|
|
57
|
+
'05-code-review.md': [
|
|
58
|
+
'## Quality & maintainability findings',
|
|
59
|
+
'## Security / boundary findings',
|
|
60
|
+
'## Severity / priority',
|
|
61
|
+
'## Recommended fixes',
|
|
62
|
+
'## Reviewed scope and non-reviewed scope',
|
|
63
|
+
],
|
|
64
|
+
'06-finalization.md': [
|
|
65
|
+
'## Final summary',
|
|
66
|
+
'## Delivered scope',
|
|
67
|
+
'## Spec/code mismatches or uncaptured implementation changes',
|
|
68
|
+
'## Known gaps',
|
|
69
|
+
'## Recommended next actions',
|
|
70
|
+
'## Documentation updates performed',
|
|
71
|
+
'## User closure confirmation status',
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
const STAGE_FILE_TO_STAGE_NAME = {
|
|
75
|
+
'01-init.md': '1-initializer',
|
|
76
|
+
'02-plan.md': '2-planner',
|
|
77
|
+
'03-design.md': '3-designer',
|
|
78
|
+
'04-implementation.md': '4-implementer',
|
|
79
|
+
'05-code-review.md': '5-code-reviewer',
|
|
80
|
+
'06-finalization.md': '6-finalizer',
|
|
81
|
+
};
|
|
82
|
+
const REQUIRED_BOOTSTRAP_BRANCH_FILES = [
|
|
83
|
+
'00-current-status.md',
|
|
84
|
+
'01-init.md',
|
|
85
|
+
];
|
|
86
|
+
/**
|
|
87
|
+
* Returns the highest existing stage file and stage name within a branch folder.
|
|
88
|
+
*/
|
|
89
|
+
function getHighestExistingStage(specDrivenDirectory) {
|
|
90
|
+
let highestStage = null;
|
|
91
|
+
for (const [stageFileName, stageName] of Object.entries(STAGE_FILE_TO_STAGE_NAME)) {
|
|
92
|
+
if (doesFileExist(join(specDrivenDirectory, stageFileName))) {
|
|
93
|
+
highestStage = { stageFileName, stageName };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return highestStage;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Validates that recorded stage metadata matches the stage files present on disk.
|
|
100
|
+
*/
|
|
101
|
+
function validateStageMetadataAgainstFiles(specDrivenDirectory, metadataLabel, metadata) {
|
|
102
|
+
const alignmentErrors = [];
|
|
103
|
+
const highestExistingStage = getHighestExistingStage(specDrivenDirectory);
|
|
104
|
+
const isClosedWorkflow = /^none$/i.test(metadata.currentStage) && metadata.completedSteps.includes('6-finalizer');
|
|
105
|
+
if (isClosedWorkflow) {
|
|
106
|
+
if (!doesFileExist(join(specDrivenDirectory, '06-finalization.md'))) {
|
|
107
|
+
alignmentErrors.push(`${metadataLabel} marks the workflow closed but "06-finalization.md" is missing.`);
|
|
108
|
+
}
|
|
109
|
+
if (!highestExistingStage || highestExistingStage.stageName !== '6-finalizer') {
|
|
110
|
+
alignmentErrors.push(`${metadataLabel} marks the workflow closed but the highest existing stage file is not `
|
|
111
|
+
+ '"06-finalization.md" (6-finalizer).');
|
|
112
|
+
}
|
|
113
|
+
for (const recordedStage of [
|
|
114
|
+
...metadata.completedSteps,
|
|
115
|
+
...metadata.incompletedStages,
|
|
116
|
+
]) {
|
|
117
|
+
const expectedStageFile = Object.entries(STAGE_FILE_TO_STAGE_NAME).find(([, stageName]) => stageName === recordedStage)?.[0];
|
|
118
|
+
if (expectedStageFile && !doesFileExist(join(specDrivenDirectory, expectedStageFile))) {
|
|
119
|
+
alignmentErrors.push(`${metadataLabel} references stage "${recordedStage}" but "${expectedStageFile}" is missing.`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return alignmentErrors;
|
|
123
|
+
}
|
|
124
|
+
if (highestExistingStage && metadata.currentStage !== highestExistingStage.stageName) {
|
|
125
|
+
alignmentErrors.push(`${metadataLabel} current stage is "${metadata.currentStage}" but the highest existing stage file is `
|
|
126
|
+
+ `"${highestExistingStage.stageFileName}" (${highestExistingStage.stageName}).`);
|
|
127
|
+
}
|
|
128
|
+
for (const recordedStage of [
|
|
129
|
+
metadata.currentStage,
|
|
130
|
+
...metadata.completedSteps,
|
|
131
|
+
...metadata.incompletedStages,
|
|
132
|
+
]) {
|
|
133
|
+
const expectedStageFile = Object.entries(STAGE_FILE_TO_STAGE_NAME).find(([, stageName]) => stageName === recordedStage)?.[0];
|
|
134
|
+
if (expectedStageFile && !doesFileExist(join(specDrivenDirectory, expectedStageFile))) {
|
|
135
|
+
alignmentErrors.push(`${metadataLabel} references stage "${recordedStage}" but "${expectedStageFile}" is missing.`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return alignmentErrors;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Escapes text for safe interpolation into a RegExp.
|
|
142
|
+
*/
|
|
143
|
+
function escapeRegExpText(rawText) {
|
|
144
|
+
return rawText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Reads a single table field value from `00-current-status.md`.
|
|
148
|
+
*/
|
|
149
|
+
function readStatusFieldValue(statusMarkdown, fieldLabel) {
|
|
150
|
+
const fieldPattern = new RegExp(`\\|\\s*${escapeRegExpText(fieldLabel)}\\s*\\|\\s*([^|]+)\\|`, 'i');
|
|
151
|
+
const fieldMatch = statusMarkdown.match(fieldPattern);
|
|
152
|
+
if (!fieldMatch || !fieldMatch[1]) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return fieldMatch[1].replace(/`/g, '').trim();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Parses a comma-separated stage list while normalizing `none`.
|
|
159
|
+
*/
|
|
160
|
+
function parseStageList(rawValue) {
|
|
161
|
+
const normalizedValue = rawValue.trim();
|
|
162
|
+
if (!normalizedValue || /^none$/i.test(normalizedValue)) {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
const parsedValues = normalizedValue
|
|
166
|
+
.split(',')
|
|
167
|
+
.map((value) => value.trim())
|
|
168
|
+
.filter(Boolean);
|
|
169
|
+
return Array.from(new Set(parsedValues));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parses the required status snapshot fields from status markdown.
|
|
173
|
+
*/
|
|
174
|
+
function parseStatusSnapshot(statusMarkdown) {
|
|
175
|
+
const errors = [];
|
|
176
|
+
const currentBranch = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.currentBranch)
|
|
177
|
+
?? readStatusFieldValue(statusMarkdown, 'Branch');
|
|
178
|
+
const currentStage = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.currentStage);
|
|
179
|
+
const completedSteps = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.completedSteps);
|
|
180
|
+
const incompletedStages = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.incompletedStages);
|
|
181
|
+
const nextRecommendedStep = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.nextRecommendedStep);
|
|
182
|
+
const statusNote = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.statusNote);
|
|
183
|
+
const blockersOrWarnings = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.blockersOrWarnings);
|
|
184
|
+
const lastUpdatedBy = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.lastUpdatedBy);
|
|
185
|
+
const lastUpdatedAt = readStatusFieldValue(statusMarkdown, STATUS_FIELD_LABELS.lastUpdatedAt);
|
|
186
|
+
if (!currentBranch)
|
|
187
|
+
errors.push('Missing status field: Current branch');
|
|
188
|
+
if (!currentStage)
|
|
189
|
+
errors.push('Missing status field: Current stage');
|
|
190
|
+
if (!completedSteps)
|
|
191
|
+
errors.push('Missing status field: Completed steps');
|
|
192
|
+
if (!incompletedStages)
|
|
193
|
+
errors.push('Missing status field: Incompleted stages');
|
|
194
|
+
if (!nextRecommendedStep)
|
|
195
|
+
errors.push('Missing status field: Next recommended step');
|
|
196
|
+
if (!statusNote)
|
|
197
|
+
errors.push('Missing status field: Status note');
|
|
198
|
+
if (!blockersOrWarnings)
|
|
199
|
+
errors.push('Missing status field: Blockers / warnings');
|
|
200
|
+
if (!lastUpdatedBy)
|
|
201
|
+
errors.push('Missing status field: Last updated by');
|
|
202
|
+
if (!lastUpdatedAt)
|
|
203
|
+
errors.push('Missing status field: Last updated at');
|
|
204
|
+
if (errors.length > 0) {
|
|
205
|
+
return { snapshot: null, errors };
|
|
206
|
+
}
|
|
207
|
+
const snapshot = {
|
|
208
|
+
currentBranch: currentBranch,
|
|
209
|
+
currentStage: currentStage,
|
|
210
|
+
completedSteps: parseStageList(completedSteps),
|
|
211
|
+
incompletedStages: parseStageList(incompletedStages),
|
|
212
|
+
nextRecommendedStep: nextRecommendedStep,
|
|
213
|
+
statusNote: statusNote,
|
|
214
|
+
blockersOrWarnings: blockersOrWarnings,
|
|
215
|
+
lastUpdatedBy: lastUpdatedBy,
|
|
216
|
+
lastUpdatedAt: lastUpdatedAt,
|
|
217
|
+
};
|
|
218
|
+
return { snapshot, errors: [] };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Validates semantic invariants for the parsed status snapshot.
|
|
222
|
+
*/
|
|
223
|
+
function validateStatusSnapshot(snapshot) {
|
|
224
|
+
const errors = [];
|
|
225
|
+
const isClosedWorkflow = /^none$/i.test(snapshot.currentStage);
|
|
226
|
+
if (!snapshot.currentStage) {
|
|
227
|
+
errors.push('Current stage is empty.');
|
|
228
|
+
}
|
|
229
|
+
if (!snapshot.nextRecommendedStep) {
|
|
230
|
+
errors.push('Next recommended step is empty.');
|
|
231
|
+
}
|
|
232
|
+
if (isClosedWorkflow) {
|
|
233
|
+
if (!/^none$/i.test(snapshot.nextRecommendedStep)) {
|
|
234
|
+
errors.push('Closed workflow must use "none" as next recommended step.');
|
|
235
|
+
}
|
|
236
|
+
if (!snapshot.completedSteps.includes('6-finalizer')) {
|
|
237
|
+
errors.push('Closed workflow must record "6-finalizer" in completed steps.');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else if (/^none$/i.test(snapshot.nextRecommendedStep)) {
|
|
241
|
+
errors.push('Next recommended step cannot be none while workflow is active.');
|
|
242
|
+
}
|
|
243
|
+
if (!snapshot.statusNote) {
|
|
244
|
+
errors.push('Status note is empty.');
|
|
245
|
+
}
|
|
246
|
+
if (!snapshot.lastUpdatedBy) {
|
|
247
|
+
errors.push('Last updated by is empty.');
|
|
248
|
+
}
|
|
249
|
+
if (!snapshot.lastUpdatedAt || Number.isNaN(Date.parse(snapshot.lastUpdatedAt))) {
|
|
250
|
+
errors.push('Last updated at is not a valid date.');
|
|
251
|
+
}
|
|
252
|
+
const completedSet = new Set(snapshot.completedSteps);
|
|
253
|
+
const incompletedSet = new Set(snapshot.incompletedStages);
|
|
254
|
+
if (completedSet.size !== snapshot.completedSteps.length) {
|
|
255
|
+
errors.push('Completed steps contains duplicates.');
|
|
256
|
+
}
|
|
257
|
+
if (incompletedSet.size !== snapshot.incompletedStages.length) {
|
|
258
|
+
errors.push('Incompleted stages contains duplicates.');
|
|
259
|
+
}
|
|
260
|
+
if (!isClosedWorkflow && (completedSet.has(snapshot.currentStage) || incompletedSet.has(snapshot.currentStage))) {
|
|
261
|
+
errors.push('Current stage also appears in completed or incompleted categories.');
|
|
262
|
+
}
|
|
263
|
+
for (const completedStage of completedSet) {
|
|
264
|
+
if (incompletedSet.has(completedStage)) {
|
|
265
|
+
errors.push(`Stage "${completedStage}" appears in both completed and incompleted categories.`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return errors;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Compares stage lists as sets instead of raw array order.
|
|
272
|
+
*/
|
|
273
|
+
function areStageListsEquivalent(left, right) {
|
|
274
|
+
const normalizedLeft = Array.from(new Set(left)).sort();
|
|
275
|
+
const normalizedRight = Array.from(new Set(right)).sort();
|
|
276
|
+
return JSON.stringify(normalizedLeft) === JSON.stringify(normalizedRight);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Returns the stage set that should already have substantive content.
|
|
280
|
+
*/
|
|
281
|
+
function getStagesRequiringSubstantiveContent(snapshot) {
|
|
282
|
+
const requiredStages = new Set([
|
|
283
|
+
...snapshot.completedSteps,
|
|
284
|
+
...snapshot.incompletedStages,
|
|
285
|
+
]);
|
|
286
|
+
// An anchored current stage only requires substantive content once it is
|
|
287
|
+
// complete enough to recommend a different next step.
|
|
288
|
+
if (!/^none$/i.test(snapshot.currentStage) && snapshot.nextRecommendedStep !== snapshot.currentStage) {
|
|
289
|
+
requiredStages.add(snapshot.currentStage);
|
|
290
|
+
}
|
|
291
|
+
return requiredStages;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Verifies that machine-readable branch identity matches the resolved branch context.
|
|
295
|
+
*/
|
|
296
|
+
function validateBranchIdentity(runtimeState, expectedBranchName, expectedSanitizedBranchName, expectedBranchMemoryFolder) {
|
|
297
|
+
const identityErrors = [];
|
|
298
|
+
if (runtimeState.branchName !== expectedBranchName) {
|
|
299
|
+
identityErrors.push(`branchName is "${runtimeState.branchName}" instead of "${expectedBranchName}".`);
|
|
300
|
+
}
|
|
301
|
+
if (runtimeState.sanitizedBranchName !== expectedSanitizedBranchName) {
|
|
302
|
+
identityErrors.push(`sanitizedBranchName is "${runtimeState.sanitizedBranchName}" instead of "${expectedSanitizedBranchName}".`);
|
|
303
|
+
}
|
|
304
|
+
if (runtimeState.branchMemoryFolder !== expectedBranchMemoryFolder) {
|
|
305
|
+
identityErrors.push(`branchMemoryFolder is "${runtimeState.branchMemoryFolder}" instead of "${expectedBranchMemoryFolder}".`);
|
|
306
|
+
}
|
|
307
|
+
return identityErrors;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Returns whether a required markdown section still contains only placeholder content.
|
|
311
|
+
*/
|
|
312
|
+
function isSectionContentPlaceholderOnly(markdownContent, heading) {
|
|
313
|
+
const headingPattern = new RegExp(`${escapeRegExpText(heading)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s|$)`, 'i');
|
|
314
|
+
const sectionMatch = markdownContent.match(headingPattern);
|
|
315
|
+
if (!sectionMatch || !sectionMatch[1]) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
const sectionBody = sectionMatch[1]
|
|
319
|
+
.replace(/<!--[\s\S]*?-->/g, '')
|
|
320
|
+
.trim();
|
|
321
|
+
if (!sectionBody) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
const normalizedBody = sectionBody.toLowerCase();
|
|
325
|
+
return (normalizedBody === 'tbd'
|
|
326
|
+
|| normalizedBody === 'unknown'
|
|
327
|
+
|| normalizedBody === 'not applicable'
|
|
328
|
+
|| normalizedBody === '_not yet defined. run `1-initializer` to capture the branch intent._');
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Runs the doctor command: audits the repository for missing or misconfigured framework files.
|
|
332
|
+
*/
|
|
333
|
+
export function runDoctorCommand(options) {
|
|
334
|
+
// Doctor never writes files; always uses non-dry-run logger for display.
|
|
335
|
+
const logger = createLogger(false);
|
|
336
|
+
const { workingDirectory, branchNameOverride } = options;
|
|
337
|
+
let frameworkHealthy = true;
|
|
338
|
+
let branchHealthy = true;
|
|
339
|
+
/**
|
|
340
|
+
* Logs a single pass/fail check and tracks overall health status.
|
|
341
|
+
*/
|
|
342
|
+
function reportCheck(label, passed, category, detail) {
|
|
343
|
+
logger.check(label, passed, detail);
|
|
344
|
+
if (!passed) {
|
|
345
|
+
if (category === 'framework') {
|
|
346
|
+
frameworkHealthy = false;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
branchHealthy = false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
console.log('');
|
|
354
|
+
logger.info('united-we-stand doctor - checking repository health\n');
|
|
355
|
+
// Verify this is a git repository.
|
|
356
|
+
const isGitRepo = isGitRepository(workingDirectory);
|
|
357
|
+
reportCheck('Git repository detected', isGitRepo, 'framework');
|
|
358
|
+
if (!isGitRepo) {
|
|
359
|
+
logger.error('Not a git repository. Run `united-we-stand install` inside a git repo.');
|
|
360
|
+
process.exitCode = 1;
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
// === Framework-level checks (created by `install`) ===
|
|
364
|
+
console.log('');
|
|
365
|
+
logger.info('Framework files (set up by `united-we-stand install`):');
|
|
366
|
+
// Check AGENTS.md existence and managed block.
|
|
367
|
+
const agentsMdPath = join(workingDirectory, 'AGENTS.md');
|
|
368
|
+
const agentsMdExists = doesFileExist(agentsMdPath);
|
|
369
|
+
reportCheck('AGENTS.md exists', agentsMdExists, 'framework');
|
|
370
|
+
if (agentsMdExists) {
|
|
371
|
+
const agentsMdContent = readFileOrNull(agentsMdPath) ?? '';
|
|
372
|
+
reportCheck('AGENTS.md has managed block', hasManagedBlock(agentsMdContent), 'framework');
|
|
373
|
+
}
|
|
374
|
+
// Check copilot-instructions.md existence and managed block.
|
|
375
|
+
const copilotInstructionsPath = join(workingDirectory, '.github', 'copilot-instructions.md');
|
|
376
|
+
const copilotExists = doesFileExist(copilotInstructionsPath);
|
|
377
|
+
reportCheck('.github/copilot-instructions.md exists', copilotExists, 'framework');
|
|
378
|
+
if (copilotExists) {
|
|
379
|
+
const copilotContent = readFileOrNull(copilotInstructionsPath) ?? '';
|
|
380
|
+
reportCheck('.github/copilot-instructions.md has managed block', hasManagedBlock(copilotContent), 'framework');
|
|
381
|
+
}
|
|
382
|
+
const antigravityWorkflowPath = join(workingDirectory, '.agents', 'workflows', 'united-we-stand.md');
|
|
383
|
+
reportCheck('.agents/workflows/united-we-stand.md exists', doesFileExist(antigravityWorkflowPath), 'framework');
|
|
384
|
+
const cursorRulePath = join(workingDirectory, '.cursor', 'rules', 'united-we-stand.mdc');
|
|
385
|
+
reportCheck('.cursor/rules/united-we-stand.mdc exists', doesFileExist(cursorRulePath), 'framework');
|
|
386
|
+
const frameworkRootDirectory = join(workingDirectory, '.united-we-stand');
|
|
387
|
+
reportCheck('.united-we-stand/ directory exists', doesFileExist(frameworkRootDirectory), 'framework');
|
|
388
|
+
const frameworkReadmePath = join(frameworkRootDirectory, 'README.md');
|
|
389
|
+
reportCheck('.united-we-stand/README.md exists', doesFileExist(frameworkReadmePath), 'framework');
|
|
390
|
+
const frameworkDirectory = join(frameworkRootDirectory, 'framework');
|
|
391
|
+
reportCheck('.united-we-stand/framework/ directory exists', doesFileExist(frameworkDirectory), 'framework');
|
|
392
|
+
console.log('');
|
|
393
|
+
logger.info('Framework docs:');
|
|
394
|
+
for (const frameworkFile of loadFrameworkFiles()) {
|
|
395
|
+
reportCheck(` ${frameworkFile.relativePath}`, doesFileExist(join(frameworkRootDirectory, frameworkFile.relativePath)), 'framework');
|
|
396
|
+
}
|
|
397
|
+
const steeringDirectory = join(frameworkRootDirectory, 'steering');
|
|
398
|
+
reportCheck('.united-we-stand/steering/ directory exists', doesFileExist(steeringDirectory), 'framework');
|
|
399
|
+
console.log('');
|
|
400
|
+
logger.info('Steering docs:');
|
|
401
|
+
for (const steeringFile of loadSteeringFiles()) {
|
|
402
|
+
reportCheck(` ${steeringFile.relativePath}`, doesFileExist(join(frameworkRootDirectory, steeringFile.relativePath)), 'framework');
|
|
403
|
+
}
|
|
404
|
+
const playbooksDirectory = join(frameworkRootDirectory, 'playbooks');
|
|
405
|
+
reportCheck('.united-we-stand/playbooks/ directory exists', doesFileExist(playbooksDirectory), 'framework');
|
|
406
|
+
console.log('');
|
|
407
|
+
logger.info('Playbooks:');
|
|
408
|
+
for (const playbookFile of loadPlaybookFiles()) {
|
|
409
|
+
reportCheck(` ${playbookFile.relativePath}`, doesFileExist(join(frameworkRootDirectory, playbookFile.relativePath)), 'framework');
|
|
410
|
+
}
|
|
411
|
+
// Check agents directory.
|
|
412
|
+
const agentsDirectory = join(frameworkRootDirectory, 'agents');
|
|
413
|
+
reportCheck('.united-we-stand/agents/ directory exists', doesFileExist(agentsDirectory), 'framework');
|
|
414
|
+
// Check individual framework agent files.
|
|
415
|
+
console.log('');
|
|
416
|
+
logger.info('Framework agents:');
|
|
417
|
+
for (const agentFile of loadFrameworkAgentFiles()) {
|
|
418
|
+
reportCheck(` ${agentFile.filename}`, doesFileExist(join(agentsDirectory, agentFile.filename)), 'framework');
|
|
419
|
+
}
|
|
420
|
+
// Check individual standalone role agent files.
|
|
421
|
+
console.log('');
|
|
422
|
+
logger.info('Standalone role agents:');
|
|
423
|
+
for (const agentFile of loadStandaloneAgentFiles()) {
|
|
424
|
+
reportCheck(` ${agentFile.filename}`, doesFileExist(join(agentsDirectory, agentFile.filename)), 'framework');
|
|
425
|
+
}
|
|
426
|
+
// === Branch-level checks (created by `branch-init`) ===
|
|
427
|
+
const branchRoutingMap = readBranchRoutingMap(workingDirectory);
|
|
428
|
+
const selectedBranch = branchNameOverride && branchNameOverride.trim().length > 0
|
|
429
|
+
? branchNameOverride.trim()
|
|
430
|
+
: tryGetCurrentBranchName(workingDirectory);
|
|
431
|
+
console.log('');
|
|
432
|
+
if (!selectedBranch) {
|
|
433
|
+
reportCheck('Current branch is attached (not detached HEAD)', false, 'branch', 'Detached HEAD detected. Use --branch <name> to run branch checks.');
|
|
434
|
+
logger.warn('Skipping branch-file checks because no deterministic branch name is available.');
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
if (selectedBranch.toUpperCase() === 'HEAD') {
|
|
438
|
+
reportCheck('Branch name is not reserved value HEAD', false, 'branch', 'Use --branch <name> with a real branch name.');
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
const sanitizedBranch = sanitizeBranchName(selectedBranch);
|
|
442
|
+
if (!sanitizedBranch) {
|
|
443
|
+
reportCheck('Branch name sanitizes to a valid folder name', false, 'branch', `Invalid branch value: "${selectedBranch}"`);
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
const branchMemoryFolderName = resolveBranchMemoryFolderName(selectedBranch, sanitizedBranch, branchRoutingMap);
|
|
447
|
+
const specDrivenDirectory = join(workingDirectory, '.spec-driven', branchMemoryFolderName);
|
|
448
|
+
logger.info(`Branch spec files - ${selectedBranch} (${branchMemoryFolderName}):`);
|
|
449
|
+
const specDirectoryExists = doesFileExist(specDrivenDirectory);
|
|
450
|
+
reportCheck(`.spec-driven/${branchMemoryFolderName}/ directory exists`, specDirectoryExists, 'branch');
|
|
451
|
+
if (specDirectoryExists) {
|
|
452
|
+
for (const requiredBootstrapFile of REQUIRED_BOOTSTRAP_BRANCH_FILES) {
|
|
453
|
+
reportCheck(` ${requiredBootstrapFile}`, doesFileExist(join(specDrivenDirectory, requiredBootstrapFile)), 'branch');
|
|
454
|
+
}
|
|
455
|
+
const runtimeStatePath = join(specDrivenDirectory, 'state.json');
|
|
456
|
+
const runtimeStateExists = doesFileExist(runtimeStatePath);
|
|
457
|
+
reportCheck(' state.json', runtimeStateExists, 'branch');
|
|
458
|
+
const statusMarkdownPath = join(specDrivenDirectory, '00-current-status.md');
|
|
459
|
+
const statusMarkdownContent = readFileOrNull(statusMarkdownPath) ?? '';
|
|
460
|
+
const parsedStatus = parseStatusSnapshot(statusMarkdownContent);
|
|
461
|
+
reportCheck(' status required fields are present', parsedStatus.errors.length === 0, 'branch', parsedStatus.errors.length > 0 ? parsedStatus.errors.join(' | ') : undefined);
|
|
462
|
+
if (parsedStatus.snapshot) {
|
|
463
|
+
const statusSemanticErrors = validateStatusSnapshot(parsedStatus.snapshot);
|
|
464
|
+
reportCheck(' status semantics are consistent', statusSemanticErrors.length === 0, 'branch', statusSemanticErrors.length > 0 ? statusSemanticErrors.join(' | ') : undefined);
|
|
465
|
+
const statusFileAlignmentErrors = validateStageMetadataAgainstFiles(specDrivenDirectory, 'Status metadata', parsedStatus.snapshot);
|
|
466
|
+
reportCheck(' status metadata matches created stage files', statusFileAlignmentErrors.length === 0, 'branch', statusFileAlignmentErrors.length > 0 ? statusFileAlignmentErrors.join(' | ') : undefined);
|
|
467
|
+
}
|
|
468
|
+
if (runtimeStateExists) {
|
|
469
|
+
const runtimeStateContent = readFileOrNull(runtimeStatePath) ?? '';
|
|
470
|
+
const parsedRuntimeState = parseBranchRuntimeState(runtimeStateContent);
|
|
471
|
+
reportCheck(' state.json schema is valid', parsedRuntimeState !== null, 'branch', parsedRuntimeState ? undefined : 'Invalid JSON or missing required fields.');
|
|
472
|
+
if (parsedRuntimeState) {
|
|
473
|
+
// Validate machine-readable state first, then compare it back to status markdown.
|
|
474
|
+
const runtimeStateErrors = validateBranchRuntimeState(parsedRuntimeState);
|
|
475
|
+
reportCheck(' state.json semantics are consistent', runtimeStateErrors.length === 0, 'branch', runtimeStateErrors.length > 0 ? runtimeStateErrors.join(' | ') : undefined);
|
|
476
|
+
const identityErrors = validateBranchIdentity(parsedRuntimeState, selectedBranch, sanitizedBranch, branchMemoryFolderName);
|
|
477
|
+
reportCheck(' state.json branch identity matches resolved branch context', identityErrors.length === 0, 'branch', identityErrors.length > 0 ? identityErrors.join(' | ') : undefined);
|
|
478
|
+
const runtimeFileAlignmentErrors = validateStageMetadataAgainstFiles(specDrivenDirectory, 'state.json metadata', parsedRuntimeState);
|
|
479
|
+
reportCheck(' state.json metadata matches created stage files', runtimeFileAlignmentErrors.length === 0, 'branch', runtimeFileAlignmentErrors.length > 0 ? runtimeFileAlignmentErrors.join(' | ') : undefined);
|
|
480
|
+
if (parsedStatus.snapshot) {
|
|
481
|
+
const statusAndStateMatch = (parsedStatus.snapshot.currentBranch === parsedRuntimeState.branchName
|
|
482
|
+
&& branchMemoryFolderName === parsedRuntimeState.branchMemoryFolder
|
|
483
|
+
&& sanitizedBranch === parsedRuntimeState.sanitizedBranchName
|
|
484
|
+
&& parsedStatus.snapshot.currentStage === parsedRuntimeState.currentStage
|
|
485
|
+
&& areStageListsEquivalent(parsedStatus.snapshot.completedSteps, parsedRuntimeState.completedSteps)
|
|
486
|
+
&& areStageListsEquivalent(parsedStatus.snapshot.incompletedStages, parsedRuntimeState.incompletedStages)
|
|
487
|
+
&& parsedStatus.snapshot.nextRecommendedStep === parsedRuntimeState.nextRecommendedStep
|
|
488
|
+
&& parsedStatus.snapshot.lastUpdatedBy === parsedRuntimeState.lastUpdatedBy);
|
|
489
|
+
reportCheck(' state.json and 00-current-status.md are aligned', statusAndStateMatch, 'branch', statusAndStateMatch ? undefined : 'Status markdown and runtime state diverge.');
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
const stagesRequiringSubstantiveContent = parsedStatus.snapshot
|
|
494
|
+
? getStagesRequiringSubstantiveContent(parsedStatus.snapshot)
|
|
495
|
+
: new Set();
|
|
496
|
+
// Keep template-only future stages acceptable until the workflow actually reaches them.
|
|
497
|
+
for (const [stageFileName, requiredHeadings] of Object.entries(REQUIRED_STAGE_SECTIONS)) {
|
|
498
|
+
const stageFilePath = join(specDrivenDirectory, stageFileName);
|
|
499
|
+
if (!doesFileExist(stageFilePath)) {
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
const stageFileContent = readFileOrNull(stageFilePath) ?? '';
|
|
503
|
+
const missingHeadings = requiredHeadings.filter((requiredHeading) => !stageFileContent.toLowerCase().includes(requiredHeading.toLowerCase()));
|
|
504
|
+
reportCheck(` ${stageFileName} required sections present`, missingHeadings.length === 0, 'branch', missingHeadings.length > 0 ? `Missing: ${missingHeadings.join(', ')}` : undefined);
|
|
505
|
+
const stageName = STAGE_FILE_TO_STAGE_NAME[stageFileName];
|
|
506
|
+
if (missingHeadings.length === 0 && stageName && stagesRequiringSubstantiveContent.has(stageName)) {
|
|
507
|
+
const placeholderHeadings = requiredHeadings.filter((requiredHeading) => isSectionContentPlaceholderOnly(stageFileContent, requiredHeading));
|
|
508
|
+
reportCheck(` ${stageFileName} required sections have substantive content`, placeholderHeadings.length === 0, 'branch', placeholderHeadings.length > 0 ? `Placeholder-only: ${placeholderHeadings.join(', ')}` : undefined);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
// === Print recommendation ===
|
|
516
|
+
console.log('');
|
|
517
|
+
if (frameworkHealthy && branchHealthy) {
|
|
518
|
+
logger.success('All checks passed. Repository is fully set up.');
|
|
519
|
+
}
|
|
520
|
+
else if (!frameworkHealthy) {
|
|
521
|
+
logger.warn('Framework files missing. Run `united-we-stand install` to set up.');
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
logger.warn('Branch runtime/spec issues detected. Review failed branch checks above and repair branch memory files.');
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install command: sets up the united-we-stand framework in the target repository.
|
|
3
|
+
*
|
|
4
|
+
* Creates AGENTS.md, copilot instructions, and the full `.united-we-stand/`
|
|
5
|
+
* framework tree (framework, steering, agents, playbooks).
|
|
6
|
+
* With --force, ignores existing user edits and overwrites files with global templates.
|
|
7
|
+
*/
|
|
8
|
+
/** Options accepted by the install command. */
|
|
9
|
+
export interface InstallCommandOptions {
|
|
10
|
+
workingDirectory: string;
|
|
11
|
+
isDryRun: boolean;
|
|
12
|
+
force: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Runs the install command: applies templates locally.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runInstallCommand(options: InstallCommandOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmHrF"}
|