@vodmal/vdx-cli 0.23.0 → 0.25.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/README.md +6 -4
- package/package.json +5 -1
- package/rubric/vdx-rubric.yaml +32 -24
- package/src/ai.ts +268 -60
- package/src/audit.ts +19 -9
- package/src/author.ts +27 -8
- package/src/clone-checks.ts +13 -8
- package/src/conversations.ts +23 -4
- package/src/doctor.ts +9 -11
- package/src/evaluator.ts +1 -1
- package/src/facts.ts +51 -11
- package/src/gha.ts +4 -1
- package/src/hooks.ts +47 -12
- package/src/index.ts +41 -31
- package/src/init.ts +14 -50
- package/src/mcp-server.ts +2 -5
- package/src/personal-hooks.ts +16 -5
- package/src/predicates.ts +2 -5
- package/src/publish.ts +24 -11
- package/src/report.ts +1 -3
- package/src/run.ts +2 -6
- package/src/scoring.ts +2 -8
- package/src/vocabulary.ts +7 -2
package/README.md
CHANGED
|
@@ -75,11 +75,13 @@ vdx init --stack node
|
|
|
75
75
|
vdx test # → mise run test (which calls `vitest run` or whatever was detected)
|
|
76
76
|
|
|
77
77
|
# 3. Ship a new minor release of a Node lib
|
|
78
|
-
vdx publish minor # npm login if expired → bump package.json + lock → npm publish (OTP) → commit + tag → push → wait for the registry
|
|
78
|
+
vdx publish minor # npm login if expired → bump package.json + lock → npm publish (OTP or browser) → commit + tag → push → wait for the registry
|
|
79
79
|
|
|
80
|
-
# 4. Start the agent here, continuing its last conversation (--new: a new one
|
|
81
|
-
# another machine's conversation is continued on
|
|
82
|
-
#
|
|
80
|
+
# 4. Start the agent here, continuing its last conversation (--new: a new one,
|
|
81
|
+
# next to a running agent; another machine's conversation is continued on
|
|
82
|
+
# that machine);
|
|
83
|
+
# re-run to attach; an agent without the profile's flags is a question:
|
|
84
|
+
# Enter attaches as is, r restarts it; --restart applies a changed profile
|
|
83
85
|
vdx ai
|
|
84
86
|
|
|
85
87
|
# 5. The same on another machine (an ssh host with vdx), attaching from here
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vodmal/vdx-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "vdx — unified lifecycle interface (up/down/build/test/check/fix) + versioned maturity audit with drift detection. Pairs with the vdx Claude Code plugin.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"vdx",
|
|
@@ -39,6 +39,9 @@
|
|
|
39
39
|
"audit": "tsx src/index.ts audit",
|
|
40
40
|
"smoke": "bash smoke.sh",
|
|
41
41
|
"typecheck": "tsc --noEmit",
|
|
42
|
+
"format:check": "prettier --check .",
|
|
43
|
+
"check": "npm run typecheck && npm run format:check",
|
|
44
|
+
"fix": "prettier --write .",
|
|
42
45
|
"test": "vitest run",
|
|
43
46
|
"test:unit": "vitest run tests/unit",
|
|
44
47
|
"coverage": "vitest run --coverage"
|
|
@@ -58,6 +61,7 @@
|
|
|
58
61
|
"@types/marked-terminal": "^6.1.1",
|
|
59
62
|
"@types/node": "^22.0.0",
|
|
60
63
|
"@vitest/coverage-v8": "^4.1.7",
|
|
64
|
+
"prettier": "^3.9.10",
|
|
61
65
|
"typescript": "^5.6.0",
|
|
62
66
|
"vitest": "^4.1.7"
|
|
63
67
|
},
|
package/rubric/vdx-rubric.yaml
CHANGED
|
@@ -11,7 +11,7 @@ schema_version: "0.3"
|
|
|
11
11
|
|
|
12
12
|
metadata:
|
|
13
13
|
name: vdx-rubric-vodmal
|
|
14
|
-
version: "1.
|
|
14
|
+
version: "1.4.0"
|
|
15
15
|
description: "Personal maturity rubric for multi-stack projects (vodmal)"
|
|
16
16
|
owner: vodmal
|
|
17
17
|
homepage: "https://github.com/vodmal/vdx-rubric"
|
|
@@ -35,7 +35,7 @@ axes:
|
|
|
35
35
|
|
|
36
36
|
- id: lifecycle-interface
|
|
37
37
|
class: critical
|
|
38
|
-
description: "Стандартный словарь глаголов up/down/build/test/check/fix"
|
|
38
|
+
description: "Стандартный словарь глаголов up/down/build/test/check/fix (up/down — не у библиотек)"
|
|
39
39
|
storage: level
|
|
40
40
|
default_target: L4
|
|
41
41
|
fact_sources: [mise.toml, composer.json, package.json, Makefile]
|
|
@@ -59,14 +59,39 @@ axes:
|
|
|
59
59
|
- has_task: check
|
|
60
60
|
- has_task: fix
|
|
61
61
|
L3:
|
|
62
|
+
# v1.4.0: up/down — глаголы приложения. Библиотека (lib-intent, D12)
|
|
63
|
+
# выпускается, а не поднимается: от неё L3 требует только остальные четыре.
|
|
62
64
|
requires:
|
|
63
65
|
all_of:
|
|
64
|
-
- has_task: up
|
|
65
|
-
- has_task: down
|
|
66
66
|
- has_task: build
|
|
67
67
|
- has_task: test
|
|
68
68
|
- has_task: check
|
|
69
69
|
- has_task: fix
|
|
70
|
+
- any_of:
|
|
71
|
+
# lib-intent — проект заявляет, что публикует артефакт (O35).
|
|
72
|
+
# Одно определение на сет: release-artifact.applies_when — ссылка сюда.
|
|
73
|
+
- &lib_intent
|
|
74
|
+
any_of:
|
|
75
|
+
# Node-сторона: НЕ private И есть хоть один entry-point/publish-signal.
|
|
76
|
+
- all_of:
|
|
77
|
+
- has_file: package.json
|
|
78
|
+
- not:
|
|
79
|
+
config_value: { path: package.json, jsonpath: "private", equals: true }
|
|
80
|
+
- any_of:
|
|
81
|
+
- config_value: { path: package.json, jsonpath: "publishConfig", op: present }
|
|
82
|
+
- config_value: { path: package.json, jsonpath: "bin", op: present }
|
|
83
|
+
- config_value: { path: package.json, jsonpath: "main", op: present }
|
|
84
|
+
- config_value: { path: package.json, jsonpath: "exports", op: present }
|
|
85
|
+
- config_value: { path: package.json, jsonpath: "module", op: present }
|
|
86
|
+
# PHP-сторона: composer.json есть, name задан, type ≠ project (project = app).
|
|
87
|
+
- all_of:
|
|
88
|
+
- has_file: composer.json
|
|
89
|
+
- config_value: { path: composer.json, jsonpath: "name", op: present }
|
|
90
|
+
- not:
|
|
91
|
+
config_value: { path: composer.json, jsonpath: "type", op: equals, equals: "project" }
|
|
92
|
+
- all_of:
|
|
93
|
+
- has_task: up
|
|
94
|
+
- has_task: down
|
|
70
95
|
L4:
|
|
71
96
|
requires:
|
|
72
97
|
any_of:
|
|
@@ -564,26 +589,9 @@ axes:
|
|
|
564
589
|
applies_to: [node, php, ruby, python]
|
|
565
590
|
# O35 (v0.3.1): ось применяется только если проект декларирует намерение
|
|
566
591
|
# публиковать артефакт. Чистые app'ы (private:true в package.json или
|
|
567
|
-
# composer type:project) → excluded.
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
# Node-сторона: НЕ private И есть хоть один entry-point/publish-signal.
|
|
571
|
-
- all_of:
|
|
572
|
-
- has_file: package.json
|
|
573
|
-
- not:
|
|
574
|
-
config_value: { path: package.json, jsonpath: "private", equals: true }
|
|
575
|
-
- any_of:
|
|
576
|
-
- config_value: { path: package.json, jsonpath: "publishConfig", op: present }
|
|
577
|
-
- config_value: { path: package.json, jsonpath: "bin", op: present }
|
|
578
|
-
- config_value: { path: package.json, jsonpath: "main", op: present }
|
|
579
|
-
- config_value: { path: package.json, jsonpath: "exports", op: present }
|
|
580
|
-
- config_value: { path: package.json, jsonpath: "module", op: present }
|
|
581
|
-
# PHP-сторона: composer.json есть, name задан, type ≠ project (project = app).
|
|
582
|
-
- all_of:
|
|
583
|
-
- has_file: composer.json
|
|
584
|
-
- config_value: { path: composer.json, jsonpath: "name", op: present }
|
|
585
|
-
- not:
|
|
586
|
-
config_value: { path: composer.json, jsonpath: "type", op: equals, equals: "project" }
|
|
592
|
+
# composer type:project) → excluded. Определение lib-intent — в
|
|
593
|
+
# lifecycle-interface.L3 (якорь, v1.4.0).
|
|
594
|
+
applies_when: *lib_intent
|
|
587
595
|
storage: level
|
|
588
596
|
default_target: L4
|
|
589
597
|
fact_sources:
|