aienvmp 0.1.19 → 0.1.20
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 +6 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/commands/dash.js +11 -1
- package/src/render.js +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.20
|
|
4
|
+
|
|
5
|
+
- Added a dashboard Environment Steps card backed by `.aienvmp/plan.json`.
|
|
6
|
+
- Surfaced runtime, package manager, Docker, and coordination plan summaries for humans.
|
|
7
|
+
- Kept detailed step lists in `plan.md` while keeping the dashboard bounded.
|
|
8
|
+
|
|
3
9
|
## 0.1.19
|
|
4
10
|
|
|
5
11
|
- Added runtime, package manager, Docker, and coordination environment steps to `aienvmp plan`.
|
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ AIENV.md
|
|
|
38
38
|
.aienvmp/timeline.jsonl
|
|
39
39
|
.aienvmp/plan.json
|
|
40
40
|
.aienvmp/plan.md
|
|
41
|
-
.aienvmp/dashboard.html # includes plan and
|
|
41
|
+
.aienvmp/dashboard.html # includes plan, remediation, and environment cards
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Trust states are machine-readable: `observed`, `planned`, `changed`, `review`, `verified`, `stale`.
|
package/package.json
CHANGED
package/src/commands/dash.js
CHANGED
|
@@ -19,7 +19,8 @@ export async function dashWorkspace(args) {
|
|
|
19
19
|
const warnings = [...diagnose(manifest, { timeline, intents }), ...policyWarnings(manifest, policy)];
|
|
20
20
|
const planArtifacts = await detectedPlanArtifacts(dir);
|
|
21
21
|
const planRemediation = await detectedPlanRemediation(dir);
|
|
22
|
-
const
|
|
22
|
+
const planEnvironment = await detectedPlanEnvironment(dir);
|
|
23
|
+
const html = renderDashboard({ ...manifest, recommendedActions: recommendedActions(manifest, { warnings, intents }), planArtifacts, planRemediation, planEnvironment }, timeline, warnings, intents, policy);
|
|
23
24
|
const out = dashboardPath(dir);
|
|
24
25
|
await fs.mkdir(path.dirname(out), { recursive: true });
|
|
25
26
|
await fs.writeFile(out, html, "utf8");
|
|
@@ -48,6 +49,15 @@ async function detectedPlanRemediation(dir) {
|
|
|
48
49
|
}));
|
|
49
50
|
}
|
|
50
51
|
|
|
52
|
+
async function detectedPlanEnvironment(dir) {
|
|
53
|
+
const plan = await readJson(planJsonPath(dir), {});
|
|
54
|
+
return (plan.environmentSteps || []).slice(0, 5).map((item) => ({
|
|
55
|
+
code: item.code || "unknown",
|
|
56
|
+
category: item.category || "environment",
|
|
57
|
+
summary: item.summary || ""
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
|
|
51
61
|
function openFile(file) {
|
|
52
62
|
if (process.platform === "win32") {
|
|
53
63
|
execFile("cmd", ["/c", "start", "", file], { windowsHide: true });
|
package/src/render.js
CHANGED
|
@@ -292,6 +292,8 @@ const remediation=manifest.planRemediation||[];
|
|
|
292
292
|
const remediationFix=r=>r.fixVersions?.length?\`fix \${r.fixVersions.join(', ')}\`:(r.fixAvailable?'fix available':'review required');
|
|
293
293
|
const remediationRefs=r=>r.advisories?.length?\` - \${r.advisories.join(', ')}\`:'';
|
|
294
294
|
const remediationHtml=remediation.length?'<div class="timeline">'+remediation.map(r=>\`<div class="event"><time>\${esc(r.severity)}</time><div><b>\${esc(r.package)}</b> \${esc(remediationFix(r))}\${esc(remediationRefs(r))}</div></div>\`).join('')+'</div>':'<div class="okline">No remediation steps in the current plan.</div>';
|
|
295
|
+
const envSteps=manifest.planEnvironment||[];
|
|
296
|
+
const envStepsHtml=envSteps.length?'<div class="timeline">'+envSteps.map(s=>\`<div class="event"><time>\${esc(s.category)}</time><div><b>\${esc(s.code)}</b> \${esc(s.summary)}</div></div>\`).join('')+'</div>':'<div class="okline">No environment steps in the current plan.</div>';
|
|
295
297
|
const card=(title,badge,body)=>\`<section class="card"><div class="card-head"><h2>\${title}</h2>\${badge||''}</div>\${body}</section>\`;
|
|
296
298
|
const reviewRequired=warnings.length>0||intents.length>0;
|
|
297
299
|
const recentChanges=timeline.slice(-8).length;
|
|
@@ -337,6 +339,8 @@ document.getElementById('app').innerHTML=\`
|
|
|
337
339
|
<div style="height:14px"></div>
|
|
338
340
|
\${card('Remediation Steps',remediation.length?'<span class="pill warn">'+remediation.length+' items</span>':'<span class="pill off">none</span>',remediationHtml)}
|
|
339
341
|
<div style="height:14px"></div>
|
|
342
|
+
\${card('Environment Steps',envSteps.length?'<span class="pill warn">'+envSteps.length+' items</span>':'<span class="pill off">none</span>',envStepsHtml)}
|
|
343
|
+
<div style="height:14px"></div>
|
|
340
344
|
\${card('Environment Health',warnings.length?'<span class="pill warn">attention</span>':'<span class="pill">clear</span>',warnHtml)}
|
|
341
345
|
<div style="height:14px"></div>
|
|
342
346
|
\${card('Version Policy','<span class="pill">'+entries(policy).length+' rules</span>',policyHtml)}
|