vgxness 1.17.0 → 1.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -2
- package/dist/cli/home-tui-app.js +2 -1
- package/dist/skills/personal-skills.js +41 -0
- package/dist/skills/skill-index-service.js +12 -1
- package/dist/skills/skill-resolver.js +11 -1
- package/dist/skills/skill-status-service.js +10 -4
- package/docs/sdd-flow.md +10 -1
- package/package.json +1 -1
- package/seeds/skills/skill-seed-v1.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This package is proprietary software. The npm package ships inspectable JavaScri
|
|
|
8
8
|
|
|
9
9
|
OpenCode is the primary supported provider. Claude setup support is secondary. VGX-managed OpenCode and Claude provider configuration is user-global only; provider config writes require explicit CLI confirmation.
|
|
10
10
|
|
|
11
|
-
VGXNESS is currently versioned from `package.json` (`1.
|
|
11
|
+
VGXNESS is currently versioned from `package.json` (`1.17.2`). The latest full project health audit is the historical [v1.14.x snapshot](./docs/project-health-audit-v1.14.x.md), which documents the implemented CLI/MCP/SDD control plane, OpenCode-first workflow, release-readiness checks, and the remaining execution/recovery gaps at that point in time. [v1.10.x](./docs/project-health-audit-v1.10.x.md) and [v1.9.1](./docs/project-health-audit-v1.9.1.md) remain historical validation evidence for those releases.
|
|
12
12
|
|
|
13
13
|
## Requirements
|
|
14
14
|
|
|
@@ -165,6 +165,15 @@ vgxness setup apply --yes
|
|
|
165
165
|
|
|
166
166
|
The daily SDD happy path is OpenCode conversation with the installed VGXNESS MCP server and hidden SDD subagents. Use CLI commands for bootstrap, setup, diagnostics, recovery, fallback, and scripting: `status`, `next`, and `sdd continue` inspect state and print read-only continuation guidance; `resume` helps inspect interrupted work. After a draft is ready, `sdd accept-artifact` records explicit human acceptance, and `sdd reopen-artifact` returns rejected artifacts to draft.
|
|
167
167
|
|
|
168
|
+
Copy this prompt into OpenCode for normal daily SDD work:
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
Continue VGXNESS SDD for project <project> and change <change>.
|
|
172
|
+
Use the VGXNESS MCP tools to inspect status/readiness/artifacts, then delegate phase work to the exact hidden SDD subagent when needed.
|
|
173
|
+
Save draft artifacts when appropriate and report evidence, tests, blockers, and the next human decision.
|
|
174
|
+
Do not accept or reopen artifacts for me; ask me before any human-only, provider-config, git, destructive, external, install, or secret-sensitive action.
|
|
175
|
+
```
|
|
176
|
+
|
|
168
177
|
## Code runtime status
|
|
169
178
|
|
|
170
179
|
The experimental `vgxness code` runtime and principal OpenTUI code surface have been removed temporarily because they were copied OpenCode-like runtime work. Continue SDD work in OpenCode through VGXNESS MCP, and use the safe CLI commands above for diagnostics and recovery.
|
|
@@ -179,7 +188,7 @@ The experimental `vgxness code` runtime and principal OpenTUI code surface have
|
|
|
179
188
|
- `vgxness sdd accept-artifact` records explicit human-only acceptance; saving a draft never implies acceptance.
|
|
180
189
|
- `vgxness sdd reopen-artifact` is the explicit path from a rejected artifact back to draft before revision.
|
|
181
190
|
- OpenCode is the primary supported provider; other providers are preview/manual extension points.
|
|
182
|
-
- VGXNESS exposes
|
|
191
|
+
- VGXNESS exposes 42 typed MCP tools across SDD, memory, sessions, agents, skills, runs, providers, and verification. See [MCP tools](./docs/mcp.md).
|
|
183
192
|
|
|
184
193
|
## Principal entrypoint
|
|
185
194
|
|
package/dist/cli/home-tui-app.js
CHANGED
|
@@ -165,7 +165,8 @@ function focusedRunDetailLines(plan, databasePath, run) {
|
|
|
165
165
|
...(run.userIntent === undefined ? [] : ['', `Intent: ${run.userIntent}`]),
|
|
166
166
|
'',
|
|
167
167
|
`Inspect JSON: vgxness runs get --id ${run.id}`,
|
|
168
|
-
'Safety: read-only/no writes/no retry/approval/execution
|
|
168
|
+
'Safety: read-only/no writes/no retry/approval/execution.',
|
|
169
|
+
'No retry, approval, or execution is performed from this TUI detail.',
|
|
169
170
|
];
|
|
170
171
|
}
|
|
171
172
|
function runSummarySection(title, runs, details = []) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const GLOBAL_PERSONAL_SKILLS_PROJECT = '__personal__';
|
|
2
|
+
export const GLOBAL_VGXNESS_SKILLS_PROJECT = '__vgxness__';
|
|
3
|
+
export const skillLookupContexts = (project, scope) => {
|
|
4
|
+
const contexts = [{ project, scope }];
|
|
5
|
+
if (scope !== 'personal')
|
|
6
|
+
contexts.push({ project, scope: 'personal' });
|
|
7
|
+
if (project !== GLOBAL_PERSONAL_SKILLS_PROJECT)
|
|
8
|
+
contexts.push({
|
|
9
|
+
project: GLOBAL_PERSONAL_SKILLS_PROJECT,
|
|
10
|
+
scope: 'personal',
|
|
11
|
+
});
|
|
12
|
+
if (project !== GLOBAL_VGXNESS_SKILLS_PROJECT)
|
|
13
|
+
contexts.push({ project: GLOBAL_VGXNESS_SKILLS_PROJECT, scope: 'project' });
|
|
14
|
+
return dedupeContexts(contexts);
|
|
15
|
+
};
|
|
16
|
+
export const skillIndexContexts = (project, scope) => {
|
|
17
|
+
if (scope === 'personal')
|
|
18
|
+
return skillLookupContexts(project, 'personal');
|
|
19
|
+
return skillLookupContexts(project, scope);
|
|
20
|
+
};
|
|
21
|
+
export const dedupeSkillSummariesByName = (skills) => {
|
|
22
|
+
const seen = new Set();
|
|
23
|
+
const deduped = [];
|
|
24
|
+
for (const skill of skills) {
|
|
25
|
+
if (seen.has(skill.name))
|
|
26
|
+
continue;
|
|
27
|
+
seen.add(skill.name);
|
|
28
|
+
deduped.push(skill);
|
|
29
|
+
}
|
|
30
|
+
return deduped;
|
|
31
|
+
};
|
|
32
|
+
export const dedupeContexts = (contexts) => {
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
return contexts.filter((context) => {
|
|
35
|
+
const key = `${context.project}:${context.scope}`;
|
|
36
|
+
if (seen.has(key))
|
|
37
|
+
return false;
|
|
38
|
+
seen.add(key);
|
|
39
|
+
return true;
|
|
40
|
+
});
|
|
41
|
+
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { dedupeSkillSummariesByName, skillIndexContexts } from './personal-skills.js';
|
|
1
2
|
export class SkillIndexService {
|
|
2
3
|
registry;
|
|
3
4
|
constructor(registry) {
|
|
4
5
|
this.registry = registry;
|
|
5
6
|
}
|
|
6
7
|
getIndex(input) {
|
|
7
|
-
const listed = this.
|
|
8
|
+
const listed = this.listSkills(input);
|
|
8
9
|
if (!listed.ok)
|
|
9
10
|
return listed;
|
|
10
11
|
const skills = [];
|
|
@@ -41,6 +42,16 @@ export class SkillIndexService {
|
|
|
41
42
|
},
|
|
42
43
|
};
|
|
43
44
|
}
|
|
45
|
+
listSkills(input) {
|
|
46
|
+
const skills = [];
|
|
47
|
+
for (const context of skillIndexContexts(input.project, input.scope)) {
|
|
48
|
+
const listed = this.registry.listSkills({ project: context.project, scope: context.scope });
|
|
49
|
+
if (!listed.ok)
|
|
50
|
+
return listed;
|
|
51
|
+
skills.push(...listed.value);
|
|
52
|
+
}
|
|
53
|
+
return { ok: true, value: dedupeSkillSummariesByName(skills) };
|
|
54
|
+
}
|
|
44
55
|
}
|
|
45
56
|
function indexSkill(details) {
|
|
46
57
|
const currentVersion = details.currentVersion;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveAgentSelector } from '../agents/agent-selector-resolver.js';
|
|
2
2
|
import { normalizeSddPhaseInput } from '../sdd/schema.js';
|
|
3
|
+
import { skillLookupContexts } from './personal-skills.js';
|
|
3
4
|
export class SkillResolver {
|
|
4
5
|
skills;
|
|
5
6
|
agents;
|
|
@@ -163,7 +164,16 @@ export class SkillResolver {
|
|
|
163
164
|
return validationFailure('Resolved skill candidate has neither skill id nor name');
|
|
164
165
|
if (project === undefined)
|
|
165
166
|
return validationFailure(`Skill ${candidate.name} needs a project context`);
|
|
166
|
-
|
|
167
|
+
let lastMissing;
|
|
168
|
+
for (const context of skillLookupContexts(project, scope)) {
|
|
169
|
+
const result = this.skills.getByName(context.project, context.scope, candidate.name);
|
|
170
|
+
if (result.ok)
|
|
171
|
+
return result;
|
|
172
|
+
if (result.error.code !== 'not_found')
|
|
173
|
+
return result;
|
|
174
|
+
lastMissing = result;
|
|
175
|
+
}
|
|
176
|
+
return lastMissing ?? this.skills.getByName(project, scope, candidate.name);
|
|
167
177
|
}
|
|
168
178
|
resolveVersion(skill, candidateVersionId) {
|
|
169
179
|
const versionId = candidateVersionId ?? skill.currentVersionId;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dedupeSkillSummariesByName, skillIndexContexts } from './personal-skills.js';
|
|
1
2
|
export class SkillStatusService {
|
|
2
3
|
skills;
|
|
3
4
|
agents;
|
|
@@ -81,11 +82,16 @@ export class SkillStatusService {
|
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
skillRegistry(project, scope) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
const listedSkills = [];
|
|
86
|
+
for (const context of skillIndexContexts(project, scope)) {
|
|
87
|
+
const listed = this.skills.listSkills({ project: context.project, scope: context.scope });
|
|
88
|
+
if (!listed.ok)
|
|
89
|
+
return listed;
|
|
90
|
+
listedSkills.push(...listed.value);
|
|
91
|
+
}
|
|
92
|
+
const summaries = dedupeSkillSummariesByName(listedSkills);
|
|
87
93
|
const items = [];
|
|
88
|
-
for (const skill of
|
|
94
|
+
for (const skill of summaries) {
|
|
89
95
|
const details = this.skills.getSkillDetails(skill.id);
|
|
90
96
|
if (!details.ok)
|
|
91
97
|
return details;
|
package/docs/sdd-flow.md
CHANGED
|
@@ -59,6 +59,15 @@ agent_resolve
|
|
|
59
59
|
agent_activate
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
+
Copyable OpenCode prompt for the normal daily path:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
Continue VGXNESS SDD for project <project> and change <change>.
|
|
66
|
+
Use the VGXNESS MCP tools to inspect status/readiness/artifacts, then delegate phase work to the exact hidden SDD subagent when needed.
|
|
67
|
+
Save draft artifacts when appropriate and report evidence, tests, blockers, and the next human decision.
|
|
68
|
+
Do not accept or reopen artifacts for me; ask me before any human-only, provider-config, git, destructive, external, install, or secret-sensitive action.
|
|
69
|
+
```
|
|
70
|
+
|
|
62
71
|
The CLI equivalents are useful for setup, diagnostics, recovery, and scripting:
|
|
63
72
|
|
|
64
73
|
```bash
|
|
@@ -111,7 +120,7 @@ Only a human acceptance decision should advance governance-gated downstream work
|
|
|
111
120
|
CLI example:
|
|
112
121
|
|
|
113
122
|
```bash
|
|
114
|
-
vgxness sdd accept-artifact --project <project> --change <change> --phase explore
|
|
123
|
+
vgxness sdd accept-artifact --project <project> --change <change> --phase explore --actor <human-id>
|
|
115
124
|
```
|
|
116
125
|
|
|
117
126
|
## 4. `proposal`: choose the product direction
|
package/package.json
CHANGED