vgxness 1.17.0 → 1.17.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/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.16.0`). 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.
11
+ VGXNESS is currently versioned from `package.json` (`1.17.1`). 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 41 typed MCP tools across SDD, memory, sessions, agents, skills, runs, providers, and verification. See [MCP tools](./docs/mcp.md).
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
 
@@ -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 from this TUI detail.',
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,38 @@
1
+ export const GLOBAL_PERSONAL_SKILLS_PROJECT = "__personal__";
2
+ export const skillLookupContexts = (project, scope) => {
3
+ const contexts = [{ project, scope }];
4
+ if (scope !== "personal")
5
+ contexts.push({ project, scope: "personal" });
6
+ if (project !== GLOBAL_PERSONAL_SKILLS_PROJECT)
7
+ contexts.push({
8
+ project: GLOBAL_PERSONAL_SKILLS_PROJECT,
9
+ scope: "personal",
10
+ });
11
+ return dedupeContexts(contexts);
12
+ };
13
+ export const personalIndexContexts = (project, scope) => {
14
+ if (scope !== "personal")
15
+ return [{ project, scope }];
16
+ return skillLookupContexts(project, "personal");
17
+ };
18
+ export const dedupeSkillSummariesByName = (skills) => {
19
+ const seen = new Set();
20
+ const deduped = [];
21
+ for (const skill of skills) {
22
+ if (seen.has(skill.name))
23
+ continue;
24
+ seen.add(skill.name);
25
+ deduped.push(skill);
26
+ }
27
+ return deduped;
28
+ };
29
+ export const dedupeContexts = (contexts) => {
30
+ const seen = new Set();
31
+ return contexts.filter((context) => {
32
+ const key = `${context.project}:${context.scope}`;
33
+ if (seen.has(key))
34
+ return false;
35
+ seen.add(key);
36
+ return true;
37
+ });
38
+ };
@@ -1,10 +1,11 @@
1
+ import { dedupeSkillSummariesByName, personalIndexContexts } 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.registry.listSkills({ project: input.project, scope: input.scope });
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 personalIndexContexts(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
- return this.skills.getByName(project, scope, candidate.name);
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, personalIndexContexts } 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 listed = this.skills.listSkills({ project, scope });
85
- if (!listed.ok)
86
- return listed;
85
+ const listedSkills = [];
86
+ for (const context of personalIndexContexts(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 listed.value) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vgxness",
3
- "version": "1.17.0",
3
+ "version": "1.17.1",
4
4
  "description": "CLI and MCP control plane for guided AI-agent workflows, SDD, memory, and OpenCode setup.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {