devworkspace 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/cli/render.js +8 -4
- package/dist/cli/render.js.map +1 -1
- package/dist/config/schemas.d.ts +7 -1
- package/dist/config/schemas.js +10 -0
- package/dist/config/schemas.js.map +1 -1
- package/dist/discovery/commands.d.ts +34 -3
- package/dist/discovery/commands.js +95 -33
- package/dist/discovery/commands.js.map +1 -1
- package/dist/discovery/detect.d.ts +17 -0
- package/dist/discovery/detect.js +101 -42
- package/dist/discovery/detect.js.map +1 -1
- package/dist/integrations/adapters/graphify.js +46 -8
- package/dist/integrations/adapters/graphify.js.map +1 -1
- package/dist/integrations/manager.js +14 -1
- package/dist/integrations/manager.js.map +1 -1
- package/dist/integrations/persistentPath.d.ts +20 -0
- package/dist/integrations/persistentPath.js +47 -0
- package/dist/integrations/persistentPath.js.map +1 -0
- package/dist/integrations/types.d.ts +6 -0
- package/dist/integrations/types.js.map +1 -1
- package/dist/prompts/onboarding.js +4 -4
- package/dist/prompts/onboarding.js.map +1 -1
- package/dist/services/analysis.d.ts +13 -1
- package/dist/services/analysis.js +17 -18
- package/dist/services/analysis.js.map +1 -1
- package/dist/services/doctor.js +78 -4
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/refresh.js +1 -1
- package/dist/services/refresh.js.map +1 -1
- package/dist/services/status.d.ts +1 -0
- package/dist/services/status.js +1 -1
- package/dist/services/status.js.map +1 -1
- package/docs/integrations.md +1 -1
- package/docs/testing.md +4 -0
- package/docs/troubleshooting.md +4 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@ All notable changes are documented here. This project follows [Semantic Versioni
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.2.1] - 2026-10-10
|
|
8
|
+
|
|
9
|
+
Patch release: repository discovery for multi-package projects, honest `doctor` diagnostics, and a correct Windows PATH diagnosis for Graphify. No breaking changes; existing `commands.json` and `discovery.json` files stay valid.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **`analyze` did not detect Node.js repositories without a root `package.json`** (for example `backend/` + `frontend/`, each with its own lockfile). Detection was tied to a single root manifest, so such a repository reported no ecosystem, no package manager, no packages and every verification command as unavailable. Every `package.json` is now discovered (not only the root), each package takes its package manager from its own lockfile, and a repository with several packages and no workspace tooling is recorded as `multi-package`.
|
|
13
|
+
- Verification commands are now recorded per package with a working directory (`cwd`, relative, POSIX) and only for scripts that exist in that package's manifest. `test:security` and `db:migrate` are recognised, and `test:unit` is preferred over a catch-all `test`.
|
|
14
|
+
- **Re-analysis no longer loses confirmed commands.** Commands a person or Claude confirmed (`origin: "user"`) are always preserved with their provenance, including when an analysis finds nothing or the scan is truncated; `analyze` says how many were kept.
|
|
15
|
+
- **`doctor` no longer reports READY for a repository it did not understand.** New checks warn when a package manifest exists that the last analysis did not record (`discovery-incomplete`), when source files exist but no ecosystem was detected (`discovery-ecosystem`), and when no verification commands are configured (`verification-commands`); any of these withholds READY. A project that intentionally has none can set `settings.acknowledgeNoVerification` in `project.json`.
|
|
16
|
+
- **Graphify PATH diagnosis on Windows.** `doctor` and `integrations status` told you to add Graphify to PATH even when it was already on your persistent user PATH. DevWorkspace now reads the persistent user and machine PATH (read-only, via `reg query`) and, when the folder is already there but the running terminal or VS Code predates it, reports `RESTART_REQUIRED` with "reopen the terminal or restart VS Code". If the folder is on neither PATH it still reports `DEGRADED` with the installation/PATH advice. macOS and Linux never query the registry and keep the general advice.
|
|
17
|
+
- Executable lookup in the Graphify adapter used the host's `process.platform` instead of the platform being inspected.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- `cwd` on command entries in `commands.json` (optional), `manifests` in `discovery.json`, a `repo.packages` fact, and `discovery.json` warnings for "no ecosystem recognised" and "no verification commands found".
|
|
21
|
+
|
|
7
22
|
## [0.2.0] - 2026-10-09
|
|
8
23
|
|
|
9
24
|
### Added
|
package/dist/cli/render.js
CHANGED
|
@@ -72,7 +72,7 @@ export function renderStatus(s, r) {
|
|
|
72
72
|
L.push('');
|
|
73
73
|
L.push('Verification:');
|
|
74
74
|
for (const v of r.verification) {
|
|
75
|
-
L.push(` ${v.id.padEnd(12)} ${v.available ? 'configured' : 'not available'}${v.command ? ` ${v.command}` : ''}${v.available && v.required !== 'no' ? ` [${v.required}]` : ''}`);
|
|
75
|
+
L.push(` ${v.id.padEnd(12)} ${v.available ? 'configured' : 'not available'}${v.cwd ? ` [in ${v.cwd}]` : ''}${v.command ? ` ${v.command}` : ''}${v.available && v.required !== 'no' ? ` [${v.required}]` : ''}`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
return L.join('\n');
|
|
@@ -131,8 +131,10 @@ export function renderAnalyze(s, r) {
|
|
|
131
131
|
L.push(` Frameworks/tools: ${d.frameworks.map((f) => f.name).join(', ')}`);
|
|
132
132
|
if (d.monorepo.tool)
|
|
133
133
|
L.push(` Monorepo: ${d.monorepo.tool} (${d.monorepo.packages.length} packages)`);
|
|
134
|
-
const avail = d.commands.filter((c) => c.available)
|
|
135
|
-
L.push(` Verification commands found: ${avail.join(', ') || 'none'}`);
|
|
134
|
+
const avail = d.commands.filter((c) => c.available);
|
|
135
|
+
L.push(` Verification commands found: ${[...new Set(avail.map((c) => c.id))].join(', ') || 'none'}`);
|
|
136
|
+
if (d.monorepo.packages.length > 0)
|
|
137
|
+
L.push(` Packages: ${d.monorepo.packages.map((p) => `${p.path}${p.packageManager ? ` (${p.packageManager})` : ''}`).join(', ')}`);
|
|
136
138
|
if (d.sensitiveFilesPresent.length)
|
|
137
139
|
L.push(` ${s.warn(s.sym.warn)} Credential-like files present (names only, never read): ${d.sensitiveFilesPresent.join(', ')}`);
|
|
138
140
|
for (const w of d.warnings.filter((w) => !w.startsWith('Credential-like')))
|
|
@@ -141,6 +143,8 @@ export function renderAnalyze(s, r) {
|
|
|
141
143
|
L.push('', 'Wrote:', ` ${r.files.discovery}`, ` ${r.files.commands}`, ` ${r.files.onboardingPrompt}`);
|
|
142
144
|
if (r.facts.written.length)
|
|
143
145
|
L.push(` ${r.facts.written.length} detected fact(s) recorded`);
|
|
146
|
+
if (r.contract && r.contract.preservedUser > 0)
|
|
147
|
+
L.push(` ${s.sym.ok} Kept ${r.contract.preservedUser} command(s) you or Claude confirmed earlier${r.contract.incomplete ? ' (this analysis was incomplete)' : ''}`);
|
|
144
148
|
}
|
|
145
149
|
L.push('', 'Next steps:', ...r.nextSteps.map((n, i) => ` ${i + 1}. ${n}`));
|
|
146
150
|
return L.join('\n');
|
|
@@ -170,7 +174,7 @@ export function renderContext(s, r) {
|
|
|
170
174
|
if (r.testingContract.length) {
|
|
171
175
|
L.push('', 'Testing contract:');
|
|
172
176
|
for (const c of r.testingContract)
|
|
173
|
-
L.push(` ${c.id.padEnd(12)} ${c.available ? 'yes' : 'no '} ${(c.command ?? '-')
|
|
177
|
+
L.push(` ${c.id.padEnd(12)} ${c.available ? 'yes' : 'no '} ${(c.cwd ? `[${c.cwd}] ` : '') + (c.command ?? '-')} required: ${c.required}`);
|
|
174
178
|
}
|
|
175
179
|
if (r.decisions.length)
|
|
176
180
|
L.push('', 'Decisions:', ...r.decisions.map((d) => ` ${String(d.number).padStart(4, '0')} [${d.status}] ${d.title} (decisions/${d.file})`));
|
package/dist/cli/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DoctorResult } from '../services/doctor.js';\nimport type { StatusResult } from '../services/status.js';\nimport type { InitResult } from '../services/init.js';\nimport type { AnalyzeResult } from '../services/analysis.js';\nimport type { RefreshResult } from '../services/refresh.js';\nimport type { ContextResult } from '../services/knowledge.js';\nimport type { Task, GateResult } from '../tasks/task.js';\nimport { nextRequiredStep } from '../tasks/task.js';\nimport type { AgentInstallResult } from '../services/agent.js';\nimport type { ImportResult, ExportResult } from '../services/portability.js';\nimport type { MigrateResult } from '../services/migrate.js';\nimport type { ResetResult } from '../services/reset.js';\nimport type { IntegrationReport } from '../integrations/types.js';\nimport type { SetupResult } from '../integrations/manager.js';\nimport type { IntegrationsStatus } from '../services/integrations.js';\n\nexport interface Style {\n ok(s: string): string;\n warn(s: string): string;\n fail(s: string): string;\n dim(s: string): string;\n bold(s: string): string;\n sym: { ok: string; warn: string; fail: string; info: string; arrow: string };\n}\n\nexport function makeStyle(opts: { color: boolean; ascii: boolean }): Style {\n const wrap = (code: number) => (s: string): string => (opts.color ? `\\u001b[${code}m${s}\\u001b[0m` : s);\n return {\n ok: wrap(32),\n warn: wrap(33),\n fail: wrap(31),\n dim: wrap(2),\n bold: wrap(1),\n sym: opts.ascii ? { ok: '[ok]', warn: '[warn]', fail: '[fail]', info: '-', arrow: '->' } : { ok: '✓', warn: '⚠', fail: '✗', info: '·', arrow: '→' },\n };\n}\n\nfunction statusMark(s: Style, r: IntegrationReport): string {\n switch (r.status) {\n case 'VERIFIED':\n return s.ok(s.sym.ok);\n case 'FAILED':\n case 'PREREQUISITES_MISSING':\n return s.fail(s.sym.fail);\n case 'NOT_INSTALLED':\n return r.required ? s.warn(s.sym.warn) : s.sym.info;\n default:\n return s.warn(s.sym.warn);\n }\n}\n\n/** One line per integration: always includes the status word, never just a symbol. */\nexport function integrationLine(s: Style, r: IntegrationReport): string {\n const how = r.variant ? ` (${r.variant}${r.scope ? `, ${r.scope} scope` : ''})` : '';\n const ver = r.version ? ` v${r.version}` : '';\n const shallow = !r.deep && r.status === 'INSTALLED' ? ' - not verified' : '';\n return `${statusMark(s, r)} ${r.name}: ${r.status}${how}${ver}${shallow}${r.required ? '' : ' (optional)'}`;\n}\n\nfunction integrationDetails(s: Style, r: IntegrationReport, indent = ' '): string[] {\n const L: string[] = [];\n for (const c of r.checks) L.push(`${indent}${c.ok ? s.sym.ok : s.sym.fail} ${c.name}${c.detail ? `: ${c.detail}` : ''}`);\n for (const w of r.warnings) L.push(`${indent}${s.warn(s.sym.warn)} ${w}`);\n for (const n of r.nextSteps) L.push(`${indent}${s.sym.arrow} ${n}`);\n return L;\n}\n\nexport function renderStatus(s: Style, r: StatusResult): string {\n if (!r.initialized) {\n return [`${s.warn(s.sym.warn)} Workspace: Not initialized`, ' Run: devworkspace init'].join('\\n');\n }\n const L: string[] = [];\n L.push(`Project: ${r.project?.name ?? '(unreadable)'}`);\n L.push(`Workspace: ${r.workspace}${r.workspaceProblem ? ` - ${r.workspaceProblem.split('\\n')[0]}` : ''}`);\n if (r.git.isRepo) {\n L.push(`Git branch: ${r.git.branch ?? '(detached)'}`);\n L.push(`Working tree: ${r.git.workingTree}${r.git.changes ? ` (${r.git.changes} change${r.git.changes === 1 ? '' : 's'})` : ''}`);\n } else L.push(`Git: ${r.git.available ? 'not a repository' : 'not installed'}`);\n L.push('');\n L.push(`Knowledge: ${r.knowledge.state} (${r.knowledge.facts} fact${r.knowledge.facts === 1 ? '' : 's'}, ${r.knowledge.stale} stale)`);\n L.push(`Onboarding: ${r.onboarding.ready ? 'Complete' : `Pending (instructions ${r.onboarding.instructionsInstalled ? 'installed' : 'missing'}, knowledge ${r.onboarding.knowledgeWritten ? 'written' : 'missing'})`}`);\n for (const i of r.integrations) L.push(integrationLine(s, i));\n if (r.integrations.some((i) => i.required && i.status !== 'VERIFIED')) L.push(' (quick check; run \"devworkspace integrations status\" to verify and see next steps)');\n L.push('');\n L.push(`Active tasks: ${r.activeTasks.length}`);\n for (const t of r.activeTasks.slice(0, 8)) {\n L.push(` ${t.id} [${t.status}] ${t.title}`);\n L.push(` next: ${t.next}`);\n }\n if (r.lastSession) L.push(`Last session: ${r.lastSession.goal} ${s.sym.arrow} next: ${r.lastSession.next || '(none recorded)'}`);\n if (r.verification.length > 0) {\n L.push('');\n L.push('Verification:');\n for (const v of r.verification) {\n L.push(` ${v.id.padEnd(12)} ${v.available ? 'configured' : 'not available'}${v.command ? ` ${v.command}` : ''}${v.available && v.required !== 'no' ? ` [${v.required}]` : ''}`);\n }\n }\n return L.join('\\n');\n}\n\nexport function renderDoctor(s: Style, r: DoctorResult): string {\n const L: string[] = [];\n for (const c of r.checks) {\n const mark = c.status === 'pass' ? s.ok(s.sym.ok) : c.status === 'warn' ? s.warn(s.sym.warn) : c.status === 'fail' ? s.fail(s.sym.fail) : s.sym.info;\n const tag = c.status === 'pass' ? 'PASS' : c.status === 'warn' ? 'WARN' : c.status === 'fail' ? 'FAIL' : 'INFO';\n L.push(`${mark} ${tag} ${c.message}`);\n if (c.remediation && (c.status === 'warn' || c.status === 'fail')) L.push(` ${s.sym.arrow} ${c.remediation}`);\n }\n L.push('');\n for (const f of r.fixed) L.push(`${s.ok(s.sym.ok)} Fixed: ${f}`);\n const verdict = !r.healthy ? 'UNHEALTHY' : r.ready ? 'READY' : r.counts.warn > 0 ? 'HEALTHY (with warnings)' : 'HEALTHY';\n L.push(`Core workspace: ${verdict}`);\n L.push(`Core checks: ${r.counts.pass} passed, ${r.counts.warn} warning${r.counts.warn === 1 ? '' : 's'}, ${r.counts.fail} failure${r.counts.fail === 1 ? '' : 's'}`);\n if (r.integrations.length > 0) {\n L.push('', 'Integrations (observed by running the tools):');\n for (const i of r.integrations) {\n L.push(` ${integrationLine(s, i)}`);\n if (i.status !== 'VERIFIED' && (i.required || i.status !== 'NOT_INSTALLED')) L.push(...integrationDetails(s, i, ' ').filter((_, k) => k < 6));\n }\n const coreText = !r.healthy ? 'core workspace has problems' : r.ready ? 'core ready' : 'core healthy, onboarding incomplete';\n const intText = r.integrationSummary.complete ? 'all required integrations verified' : `integration setup incomplete (${r.integrationSummary.verified} of ${r.integrationSummary.required} verified)`;\n L.push('', `Overall: ${coreText[0]!.toUpperCase()}${coreText.slice(1)}; ${intText}`);\n }\n return L.join('\\n');\n}\n\nexport function renderInit(s: Style, r: InitResult): string {\n const L: string[] = [];\n const verb = r.dryRun ? 'Would create' : 'Created';\n L.push(r.dryRun ? `${s.sym.info} Dry run: no files were written.` : r.alreadyInitialized ? `${s.ok(s.sym.ok)} DevWorkspace already initialized; nothing was overwritten.` : `${s.ok(s.sym.ok)} DevWorkspace initialized.`);\n L.push(` Root: ${r.root}`);\n if (r.created.length > 0) L.push(` ${verb}:`, ...r.created.map((c) => ` + ${c}`));\n for (const n of r.notes) L.push(` ${s.sym.info} ${n}`);\n if (r.setup) L.push('', renderSetup(s, r.setup));\n else L.push('', 'Integrations (quick check):', ...r.integrations.map((i) => ` ${integrationLine(s, i)}`), ' Install and verify them with: devworkspace setup --integrations --yes');\n L.push('', 'Next steps:', ...r.nextSteps.map((n, i) => ` ${i + 1}. ${n}`));\n return L.join('\\n');\n}\n\nexport function renderAnalyze(s: Style, r: AnalyzeResult): string {\n const d = r.discovery;\n const L: string[] = [];\n L.push(r.dryRun ? `${s.sym.info} Dry run: no files were written.` : `${s.ok(s.sym.ok)} Analysis complete (deterministic discovery; no AI involved).`);\n L.push(` Files scanned: ${d.scan.fileCount}${d.scan.truncated ? ' (truncated by limits)' : ''}`);\n L.push(` Ecosystems: ${d.ecosystems.join(', ') || 'none detected'}${d.packageManager ? `; package manager: ${d.packageManager}` : ''}`);\n if (d.frameworks.length) L.push(` Frameworks/tools: ${d.frameworks.map((f) => f.name).join(', ')}`);\n if (d.monorepo.tool) L.push(` Monorepo: ${d.monorepo.tool} (${d.monorepo.packages.length} packages)`);\n const avail = d.commands.filter((c) => c.available).map((c) => c.id);\n L.push(` Verification commands found: ${avail.join(', ') || 'none'}`);\n if (d.sensitiveFilesPresent.length) L.push(` ${s.warn(s.sym.warn)} Credential-like files present (names only, never read): ${d.sensitiveFilesPresent.join(', ')}`);\n for (const w of d.warnings.filter((w) => !w.startsWith('Credential-like'))) L.push(` ${s.warn(s.sym.warn)} ${w}`);\n if (!r.dryRun) {\n L.push('', 'Wrote:', ` ${r.files.discovery}`, ` ${r.files.commands}`, ` ${r.files.onboardingPrompt}`);\n if (r.facts.written.length) L.push(` ${r.facts.written.length} detected fact(s) recorded`);\n }\n L.push('', 'Next steps:', ...r.nextSteps.map((n, i) => ` ${i + 1}. ${n}`));\n return L.join('\\n');\n}\n\nexport function renderRefresh(s: Style, r: RefreshResult): string {\n const L: string[] = [];\n L.push(r.dryRun ? `${s.sym.info} Dry run: nothing was written.` : `${s.ok(s.sym.ok)} Refresh complete.`);\n if (r.headChanged) L.push(` Git HEAD changed since the last analysis.`);\n L.push(` Deterministic facts updated: ${r.autoRefreshed.length}${r.retired.length ? `, retired: ${r.retired.length}` : ''}`);\n if (r.stale.length === 0 && r.needsReview.length === 0) L.push(` ${s.ok(s.sym.ok)} No stored knowledge is stale.`);\n for (const x of r.stale) L.push(` ${s.warn(s.sym.warn)} STALE ${x.key}: ${x.reason}`);\n for (const x of r.needsReview) L.push(` ${s.warn(s.sym.warn)} Review user decision ${x.key}: ${x.reason}`);\n if (r.prompt) L.push('', `Paste ${r.prompt} into Claude Code to re-validate the stale items.`);\n return L.join('\\n');\n}\n\nexport function renderContext(s: Style, r: ContextResult): string {\n const L: string[] = [`Project: ${r.project.name}`, ''];\n L.push(`Facts${r.topic ? ` matching \"${r.topic}\"` : ''}: ${r.facts.length}${r.topic ? ` of ${r.totalFacts}` : ''}`);\n for (const f of r.facts) {\n L.push(` ${f.key} [${f.status}/${f.confidence}]`, ` ${f.value}`, ` source: ${f.source}${f.staleReason ? ` (stale: ${f.staleReason})` : ''}`);\n }\n if (r.testingContract.length) {\n L.push('', 'Testing contract:');\n for (const c of r.testingContract) L.push(` ${c.id.padEnd(12)} ${c.available ? 'yes' : 'no '} ${(c.command ?? '-').padEnd(28)} required: ${c.required}`);\n }\n if (r.decisions.length) L.push('', 'Decisions:', ...r.decisions.map((d) => ` ${String(d.number).padStart(4, '0')} [${d.status}] ${d.title} (decisions/${d.file})`));\n if (r.activeTasks.length) L.push('', 'Active tasks:', ...r.activeTasks.map((t) => ` ${t.id} [${t.status}] ${t.title}`));\n if (r.documents.length) L.push('', 'Context documents (read as needed; --full prints them):', ...r.documents.map((d) => ` context/${d.name} (${d.bytes} bytes)`));\n if (r.content) for (const [name, text] of Object.entries(r.content)) L.push('', `--- context/${name} ---`, text);\n return L.join('\\n');\n}\n\nexport function renderTask(s: Style, t: Task, gate?: GateResult): string {\n const L: string[] = [`${t.id} [${t.status}] ${t.type}`, ` ${t.title}`];\n if (t.constraints.length) L.push(` constraints: ${t.constraints.join(', ')}`);\n if (t.acceptanceCriteria.length) L.push(' acceptance criteria:', ...t.acceptanceCriteria.map((c) => ` - ${c}`));\n if (t.plan.length) L.push(' plan:', ...t.plan.map((c, i) => ` ${i + 1}. ${c}`));\n if (t.affectedAreas.length) L.push(` areas: ${t.affectedAreas.join(', ')}`);\n if (t.verification.length) {\n L.push(' verification:');\n for (const v of t.verification) L.push(` ${v.status === 'PASS' ? s.sym.ok : v.status === 'FAIL' ? s.sym.fail : s.sym.info} ${v.check.padEnd(12)} ${v.status}${v.reason ? ` (${v.reason})` : ''}${v.required ? '' : ' [optional]'}`);\n }\n if (t.tests.baseline || t.tests.after) {\n const f = (c?: { passed: number; failed: number }): string => (c ? `${c.passed} passed, ${c.failed} failed` : 'not recorded');\n L.push(` tests: baseline ${f(t.tests.baseline)}; after ${f(t.tests.after)}`);\n }\n if (t.blockers.length) L.push(' blockers:', ...t.blockers.map((b) => ` - ${b}`));\n L.push(` next: ${nextRequiredStep(t)}`);\n if (gate) {\n L.push(` completion gate: ${gate.ok ? 'PASS' : 'NOT MET'}`);\n for (const f of gate.failures) L.push(` ${s.sym.fail} ${f}`);\n for (const w of gate.warnings) L.push(` ${s.sym.warn} ${w}`);\n }\n return L.join('\\n');\n}\n\nexport function renderAgentInstall(s: Style, r: AgentInstallResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: no files were written.` : `${s.ok(s.sym.ok)} ${r.agent} instructions processed.`];\n for (const c of r.changes) {\n const mark = c.kind === 'conflict' ? s.warn(s.sym.warn) : c.kind === 'unchanged' ? s.sym.info : s.ok(s.sym.ok);\n L.push(` ${mark} ${c.kind.toUpperCase().padEnd(9)} ${c.path} - ${c.note}`);\n }\n if (r.conflicts > 0) L.push(` ${s.warn(s.sym.warn)} ${r.conflicts} conflict(s) left untouched; resolve by hand and re-run.`);\n return L.join('\\n');\n}\n\nexport function renderExport(s: Style, r: ExportResult): string {\n if (r.dryRun) return [`${s.sym.info} Dry run: would export ${r.fileCount} file(s) (${r.bytes} bytes):`, ...r.files.map((f) => ` ${f}`)].join('\\n');\n return `${s.ok(s.sym.ok)} Exported ${r.fileCount} file(s) to ${r.file}`;\n}\n\nexport function renderImport(s: Style, r: ImportResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: nothing was changed.` : `${s.ok(s.sym.ok)} Import complete.`];\n L.push(` created: ${r.created.length}, updated: ${r.updated.length}, merged: ${r.merged.length}, unchanged: ${r.unchanged.length}, conflicts: ${r.conflicts.length}`);\n for (const m of r.merged) L.push(` merged ${m}`);\n for (const c of r.conflicts) L.push(` ${s.warn(s.sym.warn)} ${c.path}: ${c.reason}`);\n return L.join('\\n');\n}\n\nexport function renderReset(s: Style, r: ResetResult): string {\n const L: string[] = [r.executed ? `${s.ok(s.sym.ok)} DevWorkspace reset. Run \"devworkspace init\" to start fresh.` : `${s.warn(s.sym.warn)} Reset plan (nothing deleted yet):`];\n for (const a of r.actions) {\n const verb = a.action === 'skip' ? 'SKIP ' : a.action === 'remove-managed-section' ? 'EDIT ' : 'DELETE';\n L.push(` ${verb} ${a.path} - ${a.note}`);\n }\n L.push(' Your application source files are never touched.');\n return L.join('\\n');\n}\n\nexport function renderMigrate(s: Style, r: MigrateResult): string {\n if (r.migrated.length === 0) return `${s.ok(s.sym.ok)} Workspace is up to date (${r.checked} file(s) checked).`;\n return [r.dryRun ? `${s.sym.info} Dry run: would migrate:` : `${s.ok(s.sym.ok)} Migrated (backups in .devworkspace/local/backups):`, ...r.migrated.map((m) => ` ${m.file}: v${m.from} ${s.sym.arrow} v${m.to}`)].join('\\n');\n}\n\nconst ACTION_TEXT: Record<string, string> = {\n 'already-verified': 'already verified, nothing to do',\n 'awaiting-restart': 'installed; waiting for a Claude Code restart',\n 'nothing-to-do': 'nothing to do',\n blocked: 'cannot continue automatically',\n 'dry-run': 'would run these steps',\n 'approval-required': 'needs your approval',\n installed: 'steps completed',\n failed: 'stopped',\n 'not-selected': 'not selected',\n};\n\nexport function renderSetup(s: Style, r: SetupResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: nothing was changed.` : r.approvalRequired ? `${s.warn(s.sym.warn)} Approval needed before anything was changed.` : `${s.ok(s.sym.ok)} Setup finished.`];\n L.push(` Scope: ${r.scope}`);\n for (const o of r.outcomes.filter((x) => x.report.required || x.action !== 'nothing-to-do')) {\n L.push('', integrationLine(s, o.report), ` ${ACTION_TEXT[o.action] ?? o.action}`);\n for (const n of o.notes) L.push(` ${s.sym.info} ${n}`);\n if (o.steps.length > 0) {\n for (const st of o.steps) L.push(` ${st.state === 'ok' ? s.sym.ok : st.state === 'failed' ? s.sym.fail : s.sym.info} ${st.description}${st.detail ? ` - ${st.detail}` : ''}`);\n } else {\n for (const p of o.plan) L.push(` ${s.sym.info} [${p.level}] ${p.description}${p.command ? ` (${p.command})` : ''}`);\n }\n if (o.report.status !== 'VERIFIED') {\n for (const w of o.report.warnings) L.push(` ${s.warn(s.sym.warn)} ${w}`);\n for (const n of o.report.nextSteps) L.push(` ${s.sym.arrow} ${n}`);\n }\n }\n L.push('', r.complete ? `${s.ok(s.sym.ok)} All required integrations are verified.` : `${s.warn(s.sym.warn)} Integration setup is not complete. Core DevWorkspace features are unaffected.`);\n return L.join('\\n');\n}\n\nexport function renderIntegrationsStatus(s: Style, r: IntegrationsStatus): string {\n const L: string[] = [r.deep ? 'Integrations (observed by running the tools):' : 'Integrations (quick check; files and PATH only, so nothing can show VERIFIED):'];\n for (const i of r.reports) {\n L.push(` ${integrationLine(s, i)}`);\n if (i.status !== 'VERIFIED') L.push(...integrationDetails(s, i, ' '));\n }\n if (r.acknowledged) L.push('', r.acknowledged.length ? `Recorded that Claude Code was restarted for: ${r.acknowledged.join(', ')}.` : 'No integration was waiting for a restart.');\n L.push('', r.summary.complete ? `${s.ok(s.sym.ok)} All required integrations are verified.` : `${s.warn(s.sym.warn)} ${r.summary.verified} of ${r.summary.required} required integrations verified.`);\n return L.join('\\n');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/cli/render.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DoctorResult } from '../services/doctor.js';\nimport type { StatusResult } from '../services/status.js';\nimport type { InitResult } from '../services/init.js';\nimport type { AnalyzeResult } from '../services/analysis.js';\nimport type { RefreshResult } from '../services/refresh.js';\nimport type { ContextResult } from '../services/knowledge.js';\nimport type { Task, GateResult } from '../tasks/task.js';\nimport { nextRequiredStep } from '../tasks/task.js';\nimport type { AgentInstallResult } from '../services/agent.js';\nimport type { ImportResult, ExportResult } from '../services/portability.js';\nimport type { MigrateResult } from '../services/migrate.js';\nimport type { ResetResult } from '../services/reset.js';\nimport type { IntegrationReport } from '../integrations/types.js';\nimport type { SetupResult } from '../integrations/manager.js';\nimport type { IntegrationsStatus } from '../services/integrations.js';\n\nexport interface Style {\n ok(s: string): string;\n warn(s: string): string;\n fail(s: string): string;\n dim(s: string): string;\n bold(s: string): string;\n sym: { ok: string; warn: string; fail: string; info: string; arrow: string };\n}\n\nexport function makeStyle(opts: { color: boolean; ascii: boolean }): Style {\n const wrap = (code: number) => (s: string): string => (opts.color ? `\\u001b[${code}m${s}\\u001b[0m` : s);\n return {\n ok: wrap(32),\n warn: wrap(33),\n fail: wrap(31),\n dim: wrap(2),\n bold: wrap(1),\n sym: opts.ascii ? { ok: '[ok]', warn: '[warn]', fail: '[fail]', info: '-', arrow: '->' } : { ok: '✓', warn: '⚠', fail: '✗', info: '·', arrow: '→' },\n };\n}\n\nfunction statusMark(s: Style, r: IntegrationReport): string {\n switch (r.status) {\n case 'VERIFIED':\n return s.ok(s.sym.ok);\n case 'FAILED':\n case 'PREREQUISITES_MISSING':\n return s.fail(s.sym.fail);\n case 'NOT_INSTALLED':\n return r.required ? s.warn(s.sym.warn) : s.sym.info;\n default:\n return s.warn(s.sym.warn);\n }\n}\n\n/** One line per integration: always includes the status word, never just a symbol. */\nexport function integrationLine(s: Style, r: IntegrationReport): string {\n const how = r.variant ? ` (${r.variant}${r.scope ? `, ${r.scope} scope` : ''})` : '';\n const ver = r.version ? ` v${r.version}` : '';\n const shallow = !r.deep && r.status === 'INSTALLED' ? ' - not verified' : '';\n return `${statusMark(s, r)} ${r.name}: ${r.status}${how}${ver}${shallow}${r.required ? '' : ' (optional)'}`;\n}\n\nfunction integrationDetails(s: Style, r: IntegrationReport, indent = ' '): string[] {\n const L: string[] = [];\n for (const c of r.checks) L.push(`${indent}${c.ok ? s.sym.ok : s.sym.fail} ${c.name}${c.detail ? `: ${c.detail}` : ''}`);\n for (const w of r.warnings) L.push(`${indent}${s.warn(s.sym.warn)} ${w}`);\n for (const n of r.nextSteps) L.push(`${indent}${s.sym.arrow} ${n}`);\n return L;\n}\n\nexport function renderStatus(s: Style, r: StatusResult): string {\n if (!r.initialized) {\n return [`${s.warn(s.sym.warn)} Workspace: Not initialized`, ' Run: devworkspace init'].join('\\n');\n }\n const L: string[] = [];\n L.push(`Project: ${r.project?.name ?? '(unreadable)'}`);\n L.push(`Workspace: ${r.workspace}${r.workspaceProblem ? ` - ${r.workspaceProblem.split('\\n')[0]}` : ''}`);\n if (r.git.isRepo) {\n L.push(`Git branch: ${r.git.branch ?? '(detached)'}`);\n L.push(`Working tree: ${r.git.workingTree}${r.git.changes ? ` (${r.git.changes} change${r.git.changes === 1 ? '' : 's'})` : ''}`);\n } else L.push(`Git: ${r.git.available ? 'not a repository' : 'not installed'}`);\n L.push('');\n L.push(`Knowledge: ${r.knowledge.state} (${r.knowledge.facts} fact${r.knowledge.facts === 1 ? '' : 's'}, ${r.knowledge.stale} stale)`);\n L.push(`Onboarding: ${r.onboarding.ready ? 'Complete' : `Pending (instructions ${r.onboarding.instructionsInstalled ? 'installed' : 'missing'}, knowledge ${r.onboarding.knowledgeWritten ? 'written' : 'missing'})`}`);\n for (const i of r.integrations) L.push(integrationLine(s, i));\n if (r.integrations.some((i) => i.required && i.status !== 'VERIFIED')) L.push(' (quick check; run \"devworkspace integrations status\" to verify and see next steps)');\n L.push('');\n L.push(`Active tasks: ${r.activeTasks.length}`);\n for (const t of r.activeTasks.slice(0, 8)) {\n L.push(` ${t.id} [${t.status}] ${t.title}`);\n L.push(` next: ${t.next}`);\n }\n if (r.lastSession) L.push(`Last session: ${r.lastSession.goal} ${s.sym.arrow} next: ${r.lastSession.next || '(none recorded)'}`);\n if (r.verification.length > 0) {\n L.push('');\n L.push('Verification:');\n for (const v of r.verification) {\n L.push(` ${v.id.padEnd(12)} ${v.available ? 'configured' : 'not available'}${v.cwd ? ` [in ${v.cwd}]` : ''}${v.command ? ` ${v.command}` : ''}${v.available && v.required !== 'no' ? ` [${v.required}]` : ''}`);\n }\n }\n return L.join('\\n');\n}\n\nexport function renderDoctor(s: Style, r: DoctorResult): string {\n const L: string[] = [];\n for (const c of r.checks) {\n const mark = c.status === 'pass' ? s.ok(s.sym.ok) : c.status === 'warn' ? s.warn(s.sym.warn) : c.status === 'fail' ? s.fail(s.sym.fail) : s.sym.info;\n const tag = c.status === 'pass' ? 'PASS' : c.status === 'warn' ? 'WARN' : c.status === 'fail' ? 'FAIL' : 'INFO';\n L.push(`${mark} ${tag} ${c.message}`);\n if (c.remediation && (c.status === 'warn' || c.status === 'fail')) L.push(` ${s.sym.arrow} ${c.remediation}`);\n }\n L.push('');\n for (const f of r.fixed) L.push(`${s.ok(s.sym.ok)} Fixed: ${f}`);\n const verdict = !r.healthy ? 'UNHEALTHY' : r.ready ? 'READY' : r.counts.warn > 0 ? 'HEALTHY (with warnings)' : 'HEALTHY';\n L.push(`Core workspace: ${verdict}`);\n L.push(`Core checks: ${r.counts.pass} passed, ${r.counts.warn} warning${r.counts.warn === 1 ? '' : 's'}, ${r.counts.fail} failure${r.counts.fail === 1 ? '' : 's'}`);\n if (r.integrations.length > 0) {\n L.push('', 'Integrations (observed by running the tools):');\n for (const i of r.integrations) {\n L.push(` ${integrationLine(s, i)}`);\n if (i.status !== 'VERIFIED' && (i.required || i.status !== 'NOT_INSTALLED')) L.push(...integrationDetails(s, i, ' ').filter((_, k) => k < 6));\n }\n const coreText = !r.healthy ? 'core workspace has problems' : r.ready ? 'core ready' : 'core healthy, onboarding incomplete';\n const intText = r.integrationSummary.complete ? 'all required integrations verified' : `integration setup incomplete (${r.integrationSummary.verified} of ${r.integrationSummary.required} verified)`;\n L.push('', `Overall: ${coreText[0]!.toUpperCase()}${coreText.slice(1)}; ${intText}`);\n }\n return L.join('\\n');\n}\n\nexport function renderInit(s: Style, r: InitResult): string {\n const L: string[] = [];\n const verb = r.dryRun ? 'Would create' : 'Created';\n L.push(r.dryRun ? `${s.sym.info} Dry run: no files were written.` : r.alreadyInitialized ? `${s.ok(s.sym.ok)} DevWorkspace already initialized; nothing was overwritten.` : `${s.ok(s.sym.ok)} DevWorkspace initialized.`);\n L.push(` Root: ${r.root}`);\n if (r.created.length > 0) L.push(` ${verb}:`, ...r.created.map((c) => ` + ${c}`));\n for (const n of r.notes) L.push(` ${s.sym.info} ${n}`);\n if (r.setup) L.push('', renderSetup(s, r.setup));\n else L.push('', 'Integrations (quick check):', ...r.integrations.map((i) => ` ${integrationLine(s, i)}`), ' Install and verify them with: devworkspace setup --integrations --yes');\n L.push('', 'Next steps:', ...r.nextSteps.map((n, i) => ` ${i + 1}. ${n}`));\n return L.join('\\n');\n}\n\nexport function renderAnalyze(s: Style, r: AnalyzeResult): string {\n const d = r.discovery;\n const L: string[] = [];\n L.push(r.dryRun ? `${s.sym.info} Dry run: no files were written.` : `${s.ok(s.sym.ok)} Analysis complete (deterministic discovery; no AI involved).`);\n L.push(` Files scanned: ${d.scan.fileCount}${d.scan.truncated ? ' (truncated by limits)' : ''}`);\n L.push(` Ecosystems: ${d.ecosystems.join(', ') || 'none detected'}${d.packageManager ? `; package manager: ${d.packageManager}` : ''}`);\n if (d.frameworks.length) L.push(` Frameworks/tools: ${d.frameworks.map((f) => f.name).join(', ')}`);\n if (d.monorepo.tool) L.push(` Monorepo: ${d.monorepo.tool} (${d.monorepo.packages.length} packages)`);\n const avail = d.commands.filter((c) => c.available);\n L.push(` Verification commands found: ${[...new Set(avail.map((c) => c.id))].join(', ') || 'none'}`);\n if (d.monorepo.packages.length > 0) L.push(` Packages: ${d.monorepo.packages.map((p) => `${p.path}${p.packageManager ? ` (${p.packageManager})` : ''}`).join(', ')}`);\n if (d.sensitiveFilesPresent.length) L.push(` ${s.warn(s.sym.warn)} Credential-like files present (names only, never read): ${d.sensitiveFilesPresent.join(', ')}`);\n for (const w of d.warnings.filter((w) => !w.startsWith('Credential-like'))) L.push(` ${s.warn(s.sym.warn)} ${w}`);\n if (!r.dryRun) {\n L.push('', 'Wrote:', ` ${r.files.discovery}`, ` ${r.files.commands}`, ` ${r.files.onboardingPrompt}`);\n if (r.facts.written.length) L.push(` ${r.facts.written.length} detected fact(s) recorded`);\n if (r.contract && r.contract.preservedUser > 0) L.push(` ${s.sym.ok} Kept ${r.contract.preservedUser} command(s) you or Claude confirmed earlier${r.contract.incomplete ? ' (this analysis was incomplete)' : ''}`);\n }\n L.push('', 'Next steps:', ...r.nextSteps.map((n, i) => ` ${i + 1}. ${n}`));\n return L.join('\\n');\n}\n\nexport function renderRefresh(s: Style, r: RefreshResult): string {\n const L: string[] = [];\n L.push(r.dryRun ? `${s.sym.info} Dry run: nothing was written.` : `${s.ok(s.sym.ok)} Refresh complete.`);\n if (r.headChanged) L.push(` Git HEAD changed since the last analysis.`);\n L.push(` Deterministic facts updated: ${r.autoRefreshed.length}${r.retired.length ? `, retired: ${r.retired.length}` : ''}`);\n if (r.stale.length === 0 && r.needsReview.length === 0) L.push(` ${s.ok(s.sym.ok)} No stored knowledge is stale.`);\n for (const x of r.stale) L.push(` ${s.warn(s.sym.warn)} STALE ${x.key}: ${x.reason}`);\n for (const x of r.needsReview) L.push(` ${s.warn(s.sym.warn)} Review user decision ${x.key}: ${x.reason}`);\n if (r.prompt) L.push('', `Paste ${r.prompt} into Claude Code to re-validate the stale items.`);\n return L.join('\\n');\n}\n\nexport function renderContext(s: Style, r: ContextResult): string {\n const L: string[] = [`Project: ${r.project.name}`, ''];\n L.push(`Facts${r.topic ? ` matching \"${r.topic}\"` : ''}: ${r.facts.length}${r.topic ? ` of ${r.totalFacts}` : ''}`);\n for (const f of r.facts) {\n L.push(` ${f.key} [${f.status}/${f.confidence}]`, ` ${f.value}`, ` source: ${f.source}${f.staleReason ? ` (stale: ${f.staleReason})` : ''}`);\n }\n if (r.testingContract.length) {\n L.push('', 'Testing contract:');\n for (const c of r.testingContract) L.push(` ${c.id.padEnd(12)} ${c.available ? 'yes' : 'no '} ${(c.cwd ? `[${c.cwd}] ` : '') + (c.command ?? '-')} required: ${c.required}`);\n }\n if (r.decisions.length) L.push('', 'Decisions:', ...r.decisions.map((d) => ` ${String(d.number).padStart(4, '0')} [${d.status}] ${d.title} (decisions/${d.file})`));\n if (r.activeTasks.length) L.push('', 'Active tasks:', ...r.activeTasks.map((t) => ` ${t.id} [${t.status}] ${t.title}`));\n if (r.documents.length) L.push('', 'Context documents (read as needed; --full prints them):', ...r.documents.map((d) => ` context/${d.name} (${d.bytes} bytes)`));\n if (r.content) for (const [name, text] of Object.entries(r.content)) L.push('', `--- context/${name} ---`, text);\n return L.join('\\n');\n}\n\nexport function renderTask(s: Style, t: Task, gate?: GateResult): string {\n const L: string[] = [`${t.id} [${t.status}] ${t.type}`, ` ${t.title}`];\n if (t.constraints.length) L.push(` constraints: ${t.constraints.join(', ')}`);\n if (t.acceptanceCriteria.length) L.push(' acceptance criteria:', ...t.acceptanceCriteria.map((c) => ` - ${c}`));\n if (t.plan.length) L.push(' plan:', ...t.plan.map((c, i) => ` ${i + 1}. ${c}`));\n if (t.affectedAreas.length) L.push(` areas: ${t.affectedAreas.join(', ')}`);\n if (t.verification.length) {\n L.push(' verification:');\n for (const v of t.verification) L.push(` ${v.status === 'PASS' ? s.sym.ok : v.status === 'FAIL' ? s.sym.fail : s.sym.info} ${v.check.padEnd(12)} ${v.status}${v.reason ? ` (${v.reason})` : ''}${v.required ? '' : ' [optional]'}`);\n }\n if (t.tests.baseline || t.tests.after) {\n const f = (c?: { passed: number; failed: number }): string => (c ? `${c.passed} passed, ${c.failed} failed` : 'not recorded');\n L.push(` tests: baseline ${f(t.tests.baseline)}; after ${f(t.tests.after)}`);\n }\n if (t.blockers.length) L.push(' blockers:', ...t.blockers.map((b) => ` - ${b}`));\n L.push(` next: ${nextRequiredStep(t)}`);\n if (gate) {\n L.push(` completion gate: ${gate.ok ? 'PASS' : 'NOT MET'}`);\n for (const f of gate.failures) L.push(` ${s.sym.fail} ${f}`);\n for (const w of gate.warnings) L.push(` ${s.sym.warn} ${w}`);\n }\n return L.join('\\n');\n}\n\nexport function renderAgentInstall(s: Style, r: AgentInstallResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: no files were written.` : `${s.ok(s.sym.ok)} ${r.agent} instructions processed.`];\n for (const c of r.changes) {\n const mark = c.kind === 'conflict' ? s.warn(s.sym.warn) : c.kind === 'unchanged' ? s.sym.info : s.ok(s.sym.ok);\n L.push(` ${mark} ${c.kind.toUpperCase().padEnd(9)} ${c.path} - ${c.note}`);\n }\n if (r.conflicts > 0) L.push(` ${s.warn(s.sym.warn)} ${r.conflicts} conflict(s) left untouched; resolve by hand and re-run.`);\n return L.join('\\n');\n}\n\nexport function renderExport(s: Style, r: ExportResult): string {\n if (r.dryRun) return [`${s.sym.info} Dry run: would export ${r.fileCount} file(s) (${r.bytes} bytes):`, ...r.files.map((f) => ` ${f}`)].join('\\n');\n return `${s.ok(s.sym.ok)} Exported ${r.fileCount} file(s) to ${r.file}`;\n}\n\nexport function renderImport(s: Style, r: ImportResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: nothing was changed.` : `${s.ok(s.sym.ok)} Import complete.`];\n L.push(` created: ${r.created.length}, updated: ${r.updated.length}, merged: ${r.merged.length}, unchanged: ${r.unchanged.length}, conflicts: ${r.conflicts.length}`);\n for (const m of r.merged) L.push(` merged ${m}`);\n for (const c of r.conflicts) L.push(` ${s.warn(s.sym.warn)} ${c.path}: ${c.reason}`);\n return L.join('\\n');\n}\n\nexport function renderReset(s: Style, r: ResetResult): string {\n const L: string[] = [r.executed ? `${s.ok(s.sym.ok)} DevWorkspace reset. Run \"devworkspace init\" to start fresh.` : `${s.warn(s.sym.warn)} Reset plan (nothing deleted yet):`];\n for (const a of r.actions) {\n const verb = a.action === 'skip' ? 'SKIP ' : a.action === 'remove-managed-section' ? 'EDIT ' : 'DELETE';\n L.push(` ${verb} ${a.path} - ${a.note}`);\n }\n L.push(' Your application source files are never touched.');\n return L.join('\\n');\n}\n\nexport function renderMigrate(s: Style, r: MigrateResult): string {\n if (r.migrated.length === 0) return `${s.ok(s.sym.ok)} Workspace is up to date (${r.checked} file(s) checked).`;\n return [r.dryRun ? `${s.sym.info} Dry run: would migrate:` : `${s.ok(s.sym.ok)} Migrated (backups in .devworkspace/local/backups):`, ...r.migrated.map((m) => ` ${m.file}: v${m.from} ${s.sym.arrow} v${m.to}`)].join('\\n');\n}\n\nconst ACTION_TEXT: Record<string, string> = {\n 'already-verified': 'already verified, nothing to do',\n 'awaiting-restart': 'installed; waiting for a Claude Code restart',\n 'nothing-to-do': 'nothing to do',\n blocked: 'cannot continue automatically',\n 'dry-run': 'would run these steps',\n 'approval-required': 'needs your approval',\n installed: 'steps completed',\n failed: 'stopped',\n 'not-selected': 'not selected',\n};\n\nexport function renderSetup(s: Style, r: SetupResult): string {\n const L: string[] = [r.dryRun ? `${s.sym.info} Dry run: nothing was changed.` : r.approvalRequired ? `${s.warn(s.sym.warn)} Approval needed before anything was changed.` : `${s.ok(s.sym.ok)} Setup finished.`];\n L.push(` Scope: ${r.scope}`);\n for (const o of r.outcomes.filter((x) => x.report.required || x.action !== 'nothing-to-do')) {\n L.push('', integrationLine(s, o.report), ` ${ACTION_TEXT[o.action] ?? o.action}`);\n for (const n of o.notes) L.push(` ${s.sym.info} ${n}`);\n if (o.steps.length > 0) {\n for (const st of o.steps) L.push(` ${st.state === 'ok' ? s.sym.ok : st.state === 'failed' ? s.sym.fail : s.sym.info} ${st.description}${st.detail ? ` - ${st.detail}` : ''}`);\n } else {\n for (const p of o.plan) L.push(` ${s.sym.info} [${p.level}] ${p.description}${p.command ? ` (${p.command})` : ''}`);\n }\n if (o.report.status !== 'VERIFIED') {\n for (const w of o.report.warnings) L.push(` ${s.warn(s.sym.warn)} ${w}`);\n for (const n of o.report.nextSteps) L.push(` ${s.sym.arrow} ${n}`);\n }\n }\n L.push('', r.complete ? `${s.ok(s.sym.ok)} All required integrations are verified.` : `${s.warn(s.sym.warn)} Integration setup is not complete. Core DevWorkspace features are unaffected.`);\n return L.join('\\n');\n}\n\nexport function renderIntegrationsStatus(s: Style, r: IntegrationsStatus): string {\n const L: string[] = [r.deep ? 'Integrations (observed by running the tools):' : 'Integrations (quick check; files and PATH only, so nothing can show VERIFIED):'];\n for (const i of r.reports) {\n L.push(` ${integrationLine(s, i)}`);\n if (i.status !== 'VERIFIED') L.push(...integrationDetails(s, i, ' '));\n }\n if (r.acknowledged) L.push('', r.acknowledged.length ? `Recorded that Claude Code was restarted for: ${r.acknowledged.join(', ')}.` : 'No integration was waiting for a restart.');\n L.push('', r.summary.complete ? `${s.ok(s.sym.ok)} All required integrations are verified.` : `${s.warn(s.sym.warn)} ${r.summary.verified} of ${r.summary.required} required integrations verified.`);\n return L.join('\\n');\n}\n"]}
|
package/dist/config/schemas.d.ts
CHANGED
|
@@ -21,7 +21,8 @@ export interface ProjectConfig {
|
|
|
21
21
|
devworkspaceVersion: string;
|
|
22
22
|
settings: {
|
|
23
23
|
review: ReviewLevel;
|
|
24
|
-
maxFiles: number;
|
|
24
|
+
maxFiles: number; /** The project intentionally has no tests/lint/build; doctor stops warning about it. */
|
|
25
|
+
acknowledgeNoVerification?: boolean;
|
|
25
26
|
};
|
|
26
27
|
managedFiles: ManagedFile[];
|
|
27
28
|
}
|
|
@@ -57,6 +58,11 @@ export interface CommandEntry {
|
|
|
57
58
|
source: string | null;
|
|
58
59
|
/** 'repository-script' = defined by repo config (untrusted input); 'inferred' = guessed from tooling; 'user' = set by a human. */
|
|
59
60
|
origin: 'repository-script' | 'inferred' | 'user';
|
|
61
|
+
/**
|
|
62
|
+
* Working directory, relative to the project root (POSIX separators). Absent means the project root.
|
|
63
|
+
* Package-specific commands (backend vs frontend) must carry it so they are never run in the wrong place.
|
|
64
|
+
*/
|
|
65
|
+
cwd?: string;
|
|
60
66
|
}
|
|
61
67
|
export interface CommandsFile {
|
|
62
68
|
schemaVersion: number;
|
package/dist/config/schemas.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DevWorkspaceError } from '../errors/index.js';
|
|
2
|
+
import { validateRelativePath } from '../utils/paths.js';
|
|
1
3
|
import { Check } from './validate.js';
|
|
2
4
|
export const SCHEMA_VERSION = 1;
|
|
3
5
|
export const CONFIDENCE = ['HIGH', 'MEDIUM', 'LOW'];
|
|
@@ -16,6 +18,8 @@ export function validateProject(v, file = 'project.json') {
|
|
|
16
18
|
const s = c.at_('settings').obj(o.settings);
|
|
17
19
|
c.at_('settings.review').oneOf(s.review, REVIEW_LEVELS);
|
|
18
20
|
c.at_('settings.maxFiles').int(s.maxFiles, 100);
|
|
21
|
+
if (s.acknowledgeNoVerification !== undefined)
|
|
22
|
+
c.at_('settings.acknowledgeNoVerification').bool(s.acknowledgeNoVerification);
|
|
19
23
|
const mf = c.at_('managedFiles').arr(o.managedFiles, 200);
|
|
20
24
|
mf.forEach((m, i) => {
|
|
21
25
|
const mc = c.at_(`managedFiles.${i}`);
|
|
@@ -67,6 +71,12 @@ export function validateCommands(v, file = 'commands.json') {
|
|
|
67
71
|
ec.at_('command').str(eo.command, { max: 500 });
|
|
68
72
|
ec.at_('required').oneOf(eo.required, REQUIRED_LEVELS);
|
|
69
73
|
ec.at_('origin').oneOf(eo.origin, ['repository-script', 'inferred', 'user']);
|
|
74
|
+
if (eo.cwd !== undefined) {
|
|
75
|
+
const cwd = ec.at_('cwd').str(eo.cwd, { max: 240 });
|
|
76
|
+
const err = validateRelativePath(cwd);
|
|
77
|
+
if (err)
|
|
78
|
+
throw new DevWorkspaceError('SCHEMA', `Invalid ${file}: checks.${i}.cwd ${err}.`);
|
|
79
|
+
}
|
|
70
80
|
});
|
|
71
81
|
return o;
|
|
72
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { Check } from './validate.js';\n\nexport const SCHEMA_VERSION = 1;\n\nexport const CONFIDENCE = ['HIGH', 'MEDIUM', 'LOW'] as const;\nexport const FACT_STATUS = ['VERIFIED', 'DETECTED', 'INFERRED', 'USER_DECISION', 'UNKNOWN', 'STALE'] as const;\nexport const SOURCE_TYPES = ['detector', 'file', 'git', 'user', 'ai'] as const;\nexport const REVIEW_LEVELS = ['off', 'light', 'strict'] as const;\n\nexport type Confidence = (typeof CONFIDENCE)[number];\nexport type FactStatus = (typeof FACT_STATUS)[number];\nexport type SourceType = (typeof SOURCE_TYPES)[number];\nexport type ReviewLevel = (typeof REVIEW_LEVELS)[number];\n\nexport interface ManagedFile {\n path: string;\n mode: 'owned' | 'section';\n agent?: string;\n}\n\nexport interface ProjectConfig {\n schemaVersion: number;\n projectId: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n devworkspaceVersion: string;\n settings: { review: ReviewLevel; maxFiles: number };\n managedFiles: ManagedFile[];\n}\n\nexport function validateProject(v: unknown, file = 'project.json'): ProjectConfig {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('projectId').str(o.projectId, { min: 8, max: 64 });\n c.at_('name').str(o.name, { min: 1, max: 200 });\n c.at_('createdAt').iso(o.createdAt);\n c.at_('updatedAt').iso(o.updatedAt);\n c.at_('devworkspaceVersion').str(o.devworkspaceVersion, { max: 40 });\n const s = c.at_('settings').obj(o.settings);\n c.at_('settings.review').oneOf(s.review, REVIEW_LEVELS);\n c.at_('settings.maxFiles').int(s.maxFiles, 100);\n const mf = c.at_('managedFiles').arr(o.managedFiles, 200);\n mf.forEach((m, i) => {\n const mc = c.at_(`managedFiles.${i}`);\n const mo = mc.obj(m);\n mc.at_('path').str(mo.path, { max: 240 });\n mc.at_('mode').oneOf(mo.mode, ['owned', 'section'] as const);\n });\n return o as unknown as ProjectConfig;\n}\n\nexport interface Fact {\n id: string;\n key: string;\n value: string;\n source: string;\n sourceType: SourceType;\n sources: string[];\n sourceHashes: Record<string, string>;\n confidence: Confidence;\n status: FactStatus;\n createdAt: string;\n updatedAt: string;\n lastVerifiedAt: string | null;\n staleReason?: string;\n}\n\nexport interface FactsFile {\n schemaVersion: number;\n facts: Fact[];\n}\n\nexport function validateFacts(v: unknown, file = 'facts.json'): FactsFile {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n const facts = c.at_('facts').arr(o.facts, 5000);\n facts.forEach((f, i) => {\n const fc = c.at_(`facts.${i}`);\n const fo = fc.obj(f);\n fc.at_('id').str(fo.id, { max: 64 });\n fc.at_('key').str(fo.key, { min: 1, max: 100 });\n fc.at_('value').str(fo.value, { max: 4000 });\n fc.at_('source').str(fo.source, { max: 500 });\n fc.at_('sourceType').oneOf(fo.sourceType, SOURCE_TYPES);\n fc.at_('sources').strArr(fo.sources, 100);\n fc.at_('sourceHashes').obj(fo.sourceHashes);\n fc.at_('confidence').oneOf(fo.confidence, CONFIDENCE);\n fc.at_('status').oneOf(fo.status, FACT_STATUS);\n fc.at_('createdAt').iso(fo.createdAt);\n fc.at_('updatedAt').iso(fo.updatedAt);\n if (fo.lastVerifiedAt !== null) fc.at_('lastVerifiedAt').iso(fo.lastVerifiedAt);\n });\n return o as unknown as FactsFile;\n}\n\nexport const CHECK_IDS = ['typecheck', 'unit', 'integration', 'e2e', 'lint', 'format', 'build', 'migrations', 'security'] as const;\nexport type CheckId = (typeof CHECK_IDS)[number];\nexport const REQUIRED_LEVELS = ['yes', 'context', 'no'] as const;\n\nexport interface CommandEntry {\n id: CheckId;\n available: boolean;\n command: string | null;\n required: (typeof REQUIRED_LEVELS)[number];\n source: string | null;\n /** 'repository-script' = defined by repo config (untrusted input); 'inferred' = guessed from tooling; 'user' = set by a human. */\n origin: 'repository-script' | 'inferred' | 'user';\n}\n\nexport interface CommandsFile {\n schemaVersion: number;\n checks: CommandEntry[];\n trustNote: string;\n}\n\nexport function validateCommands(v: unknown, file = 'commands.json'): CommandsFile {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('trustNote').str(o.trustNote);\n c.at_('checks')\n .arr(o.checks, 100)\n .forEach((e, i) => {\n const ec = c.at_(`checks.${i}`);\n const eo = ec.obj(e);\n ec.at_('id').oneOf(eo.id, CHECK_IDS);\n ec.at_('available').bool(eo.available);\n if (eo.command !== null) ec.at_('command').str(eo.command, { max: 500 });\n ec.at_('required').oneOf(eo.required, REQUIRED_LEVELS);\n ec.at_('origin').oneOf(eo.origin, ['repository-script', 'inferred', 'user'] as const);\n });\n return o as unknown as CommandsFile;\n}\n\nexport interface AnalysisState {\n schemaVersion: number;\n analyzedAt: string;\n refreshedAt: string | null;\n gitHead: string | null;\n fileCount: number;\n truncated: boolean;\n discoveryHash: string;\n}\n\nexport function validateAnalysisState(v: unknown, file = 'analysis.json'): AnalysisState {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('analyzedAt').iso(o.analyzedAt);\n c.at_('fileCount').int(o.fileCount);\n c.at_('truncated').bool(o.truncated);\n c.at_('discoveryHash').str(o.discoveryHash, { max: 100 });\n return o as unknown as AnalysisState;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import { DevWorkspaceError } from '../errors/index.js';\nimport { validateRelativePath } from '../utils/paths.js';\nimport { Check } from './validate.js';\n\nexport const SCHEMA_VERSION = 1;\n\nexport const CONFIDENCE = ['HIGH', 'MEDIUM', 'LOW'] as const;\nexport const FACT_STATUS = ['VERIFIED', 'DETECTED', 'INFERRED', 'USER_DECISION', 'UNKNOWN', 'STALE'] as const;\nexport const SOURCE_TYPES = ['detector', 'file', 'git', 'user', 'ai'] as const;\nexport const REVIEW_LEVELS = ['off', 'light', 'strict'] as const;\n\nexport type Confidence = (typeof CONFIDENCE)[number];\nexport type FactStatus = (typeof FACT_STATUS)[number];\nexport type SourceType = (typeof SOURCE_TYPES)[number];\nexport type ReviewLevel = (typeof REVIEW_LEVELS)[number];\n\nexport interface ManagedFile {\n path: string;\n mode: 'owned' | 'section';\n agent?: string;\n}\n\nexport interface ProjectConfig {\n schemaVersion: number;\n projectId: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n devworkspaceVersion: string;\n settings: { review: ReviewLevel; maxFiles: number; /** The project intentionally has no tests/lint/build; doctor stops warning about it. */ acknowledgeNoVerification?: boolean };\n managedFiles: ManagedFile[];\n}\n\nexport function validateProject(v: unknown, file = 'project.json'): ProjectConfig {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('projectId').str(o.projectId, { min: 8, max: 64 });\n c.at_('name').str(o.name, { min: 1, max: 200 });\n c.at_('createdAt').iso(o.createdAt);\n c.at_('updatedAt').iso(o.updatedAt);\n c.at_('devworkspaceVersion').str(o.devworkspaceVersion, { max: 40 });\n const s = c.at_('settings').obj(o.settings);\n c.at_('settings.review').oneOf(s.review, REVIEW_LEVELS);\n c.at_('settings.maxFiles').int(s.maxFiles, 100);\n if (s.acknowledgeNoVerification !== undefined) c.at_('settings.acknowledgeNoVerification').bool(s.acknowledgeNoVerification);\n const mf = c.at_('managedFiles').arr(o.managedFiles, 200);\n mf.forEach((m, i) => {\n const mc = c.at_(`managedFiles.${i}`);\n const mo = mc.obj(m);\n mc.at_('path').str(mo.path, { max: 240 });\n mc.at_('mode').oneOf(mo.mode, ['owned', 'section'] as const);\n });\n return o as unknown as ProjectConfig;\n}\n\nexport interface Fact {\n id: string;\n key: string;\n value: string;\n source: string;\n sourceType: SourceType;\n sources: string[];\n sourceHashes: Record<string, string>;\n confidence: Confidence;\n status: FactStatus;\n createdAt: string;\n updatedAt: string;\n lastVerifiedAt: string | null;\n staleReason?: string;\n}\n\nexport interface FactsFile {\n schemaVersion: number;\n facts: Fact[];\n}\n\nexport function validateFacts(v: unknown, file = 'facts.json'): FactsFile {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n const facts = c.at_('facts').arr(o.facts, 5000);\n facts.forEach((f, i) => {\n const fc = c.at_(`facts.${i}`);\n const fo = fc.obj(f);\n fc.at_('id').str(fo.id, { max: 64 });\n fc.at_('key').str(fo.key, { min: 1, max: 100 });\n fc.at_('value').str(fo.value, { max: 4000 });\n fc.at_('source').str(fo.source, { max: 500 });\n fc.at_('sourceType').oneOf(fo.sourceType, SOURCE_TYPES);\n fc.at_('sources').strArr(fo.sources, 100);\n fc.at_('sourceHashes').obj(fo.sourceHashes);\n fc.at_('confidence').oneOf(fo.confidence, CONFIDENCE);\n fc.at_('status').oneOf(fo.status, FACT_STATUS);\n fc.at_('createdAt').iso(fo.createdAt);\n fc.at_('updatedAt').iso(fo.updatedAt);\n if (fo.lastVerifiedAt !== null) fc.at_('lastVerifiedAt').iso(fo.lastVerifiedAt);\n });\n return o as unknown as FactsFile;\n}\n\nexport const CHECK_IDS = ['typecheck', 'unit', 'integration', 'e2e', 'lint', 'format', 'build', 'migrations', 'security'] as const;\nexport type CheckId = (typeof CHECK_IDS)[number];\nexport const REQUIRED_LEVELS = ['yes', 'context', 'no'] as const;\n\nexport interface CommandEntry {\n id: CheckId;\n available: boolean;\n command: string | null;\n required: (typeof REQUIRED_LEVELS)[number];\n source: string | null;\n /** 'repository-script' = defined by repo config (untrusted input); 'inferred' = guessed from tooling; 'user' = set by a human. */\n origin: 'repository-script' | 'inferred' | 'user';\n /**\n * Working directory, relative to the project root (POSIX separators). Absent means the project root.\n * Package-specific commands (backend vs frontend) must carry it so they are never run in the wrong place.\n */\n cwd?: string;\n}\n\nexport interface CommandsFile {\n schemaVersion: number;\n checks: CommandEntry[];\n trustNote: string;\n}\n\nexport function validateCommands(v: unknown, file = 'commands.json'): CommandsFile {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('trustNote').str(o.trustNote);\n c.at_('checks')\n .arr(o.checks, 100)\n .forEach((e, i) => {\n const ec = c.at_(`checks.${i}`);\n const eo = ec.obj(e);\n ec.at_('id').oneOf(eo.id, CHECK_IDS);\n ec.at_('available').bool(eo.available);\n if (eo.command !== null) ec.at_('command').str(eo.command, { max: 500 });\n ec.at_('required').oneOf(eo.required, REQUIRED_LEVELS);\n ec.at_('origin').oneOf(eo.origin, ['repository-script', 'inferred', 'user'] as const);\n if (eo.cwd !== undefined) {\n const cwd = ec.at_('cwd').str(eo.cwd, { max: 240 });\n const err = validateRelativePath(cwd);\n if (err) throw new DevWorkspaceError('SCHEMA', `Invalid ${file}: checks.${i}.cwd ${err}.`);\n }\n });\n return o as unknown as CommandsFile;\n}\n\nexport interface AnalysisState {\n schemaVersion: number;\n analyzedAt: string;\n refreshedAt: string | null;\n gitHead: string | null;\n fileCount: number;\n truncated: boolean;\n discoveryHash: string;\n}\n\nexport function validateAnalysisState(v: unknown, file = 'analysis.json'): AnalysisState {\n const c = new Check(file);\n const o = c.obj(v);\n c.at_('schemaVersion').int(o.schemaVersion, 1);\n c.at_('analyzedAt').iso(o.analyzedAt);\n c.at_('fileCount').int(o.fileCount);\n c.at_('truncated').bool(o.truncated);\n c.at_('discoveryHash').str(o.discoveryHash, { max: 100 });\n return o as unknown as AnalysisState;\n}\n"]}
|
|
@@ -1,12 +1,43 @@
|
|
|
1
|
-
import type { CommandEntry } from '../config/schemas.js';
|
|
1
|
+
import type { CheckId, CommandEntry } from '../config/schemas.js';
|
|
2
2
|
import type { PackageInfo } from './detect.js';
|
|
3
3
|
export declare const TRUST_NOTE: string;
|
|
4
|
+
/** One Node.js package: the manifest, where it lives, and which package manager its own lockfile says it uses. */
|
|
5
|
+
export interface NodePackageInput {
|
|
6
|
+
/** Directory relative to the project root, POSIX separators; '' for the root. */
|
|
7
|
+
dir: string;
|
|
8
|
+
pkg: PackageInfo;
|
|
9
|
+
packageManager: string;
|
|
10
|
+
hasTsconfig: boolean;
|
|
11
|
+
}
|
|
4
12
|
export interface ContractInput {
|
|
5
|
-
|
|
6
|
-
packageManager: string | null;
|
|
13
|
+
nodePackages: NodePackageInput[];
|
|
7
14
|
ecosystems: Set<string>;
|
|
8
15
|
has: (rel: string) => boolean;
|
|
9
16
|
pythonEvidence: Record<string, string>;
|
|
10
17
|
files: Set<string>;
|
|
11
18
|
}
|
|
19
|
+
export declare const CHECK_ORDER: CheckId[];
|
|
20
|
+
/**
|
|
21
|
+
* Detected verification commands. Node commands are produced per package and only for scripts that exist in that
|
|
22
|
+
* package's own manifest. Every check that no package provides gets one unavailable entry so the contract always
|
|
23
|
+
* lists all nine checks.
|
|
24
|
+
*/
|
|
12
25
|
export declare function buildContract(input: ContractInput): CommandEntry[];
|
|
26
|
+
export interface MergeResult {
|
|
27
|
+
checks: CommandEntry[];
|
|
28
|
+
/** Entries kept from the previous contract because a human confirmed them (origin "user"). */
|
|
29
|
+
preservedUser: number;
|
|
30
|
+
/** Previously detected entries kept because this analysis found nothing or was cut short. */
|
|
31
|
+
preservedStale: number;
|
|
32
|
+
/** The new detection found no verification commands at all, or the scan was truncated. */
|
|
33
|
+
incomplete: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Combine the previous contract with fresh detection.
|
|
37
|
+
* - Entries confirmed by a person (origin "user") are never dropped or overwritten. A user entry without a cwd
|
|
38
|
+
* covers its whole check; one with a cwd covers only that directory, and detection fills in the other packages.
|
|
39
|
+
* - If detection is incomplete, previously available entries survive too, with their original provenance.
|
|
40
|
+
*/
|
|
41
|
+
export declare function mergeContract(previous: CommandEntry[] | null, detected: CommandEntry[], opts?: {
|
|
42
|
+
truncated?: boolean;
|
|
43
|
+
}): MergeResult;
|