@uoyo/mvtt 2.0.0-beta.6 → 2.1.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +28 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +64 -59
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +58 -25
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +31 -20
- package/dist/commands/update.js.map +1 -1
- package/dist/fs/materialize.d.ts.map +1 -1
- package/dist/fs/materialize.js +3 -2
- package/dist/fs/materialize.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/scripts/epic-update.cjs +32 -14
- package/dist/scripts/epic-update.md +57 -0
- package/dist/scripts/plan-update.cjs +54 -23
- package/dist/scripts/plan-update.md +59 -0
- package/dist/scripts/session-update.cjs +36 -17
- package/dist/types/platform.d.ts +1 -1
- package/dist/types/platform.d.ts.map +1 -1
- package/dist/types/platform.js +12 -0
- package/dist/types/platform.js.map +1 -1
- package/dist/util/bilingual.d.ts +10 -0
- package/dist/util/bilingual.d.ts.map +1 -0
- package/dist/util/bilingual.js +14 -0
- package/dist/util/bilingual.js.map +1 -0
- package/dist/util/cancel.d.ts +2 -0
- package/dist/util/cancel.d.ts.map +1 -0
- package/dist/util/cancel.js +6 -0
- package/dist/util/cancel.js.map +1 -0
- package/dist/util/color.d.ts +9 -6
- package/dist/util/color.d.ts.map +1 -1
- package/dist/util/color.js +10 -10
- package/dist/util/color.js.map +1 -1
- package/dist/util/spinner.d.ts +8 -0
- package/dist/util/spinner.d.ts.map +1 -0
- package/dist/util/spinner.js +17 -0
- package/dist/util/spinner.js.map +1 -0
- package/install-manifest.yaml +4 -0
- package/package.json +4 -3
- package/registry.yaml +72 -72
- package/sources/defaults/config.yaml +5 -0
- package/sources/scripts/epic-update.js +3 -21
- package/sources/scripts/epic-update.md +57 -0
- package/sources/scripts/plan-update.js +30 -20
- package/sources/scripts/plan-update.md +59 -0
- package/sources/scripts/session-update.js +7 -23
- package/sources/sections/activation-load-config.md +7 -10
- package/sources/sections/activation-load-context.md +15 -25
- package/sources/sections/activation-preflight.md +1 -1
- package/sources/sections/footer-next-steps.md +1 -1
- package/sources/sections/language-constraint.md +11 -0
- package/sources/sections/output-format-constraint.md +11 -14
- package/sources/sections/project-context-profile.md +29 -29
- package/sources/sections/script-usage-rule.md +32 -0
- package/sources/sections/session-update.md +24 -110
- package/sources/skills/mvt-analyze/business.md +1 -1
- package/sources/skills/mvt-analyze/manifest.yaml +7 -7
- package/sources/skills/mvt-analyze-code/manifest.yaml +7 -7
- package/sources/skills/mvt-bug-detect/manifest.yaml +3 -0
- package/sources/skills/mvt-check-context/manifest.yaml +3 -0
- package/sources/skills/mvt-cleanup/business.md +9 -0
- package/sources/skills/mvt-cleanup/manifest.yaml +6 -6
- package/sources/skills/mvt-config/business.md +1 -0
- package/sources/skills/mvt-config/manifest.yaml +4 -0
- package/sources/skills/mvt-create-skill/business.md +1 -1
- package/sources/skills/mvt-create-skill/manifest.yaml +1 -1
- package/sources/skills/mvt-decompose/business.md +18 -9
- package/sources/skills/mvt-decompose/manifest.yaml +7 -7
- package/sources/skills/mvt-design/business.md +34 -43
- package/sources/skills/mvt-design/manifest.yaml +7 -7
- package/sources/skills/mvt-fix/manifest.yaml +6 -6
- package/sources/skills/mvt-help/business.md +19 -9
- package/sources/skills/mvt-help/manifest.yaml +6 -14
- package/sources/skills/mvt-implement/business.md +27 -34
- package/sources/skills/mvt-implement/manifest.yaml +8 -14
- package/sources/skills/mvt-init/manifest.yaml +6 -6
- package/sources/skills/mvt-manage-context/manifest.yaml +1 -1
- package/sources/skills/mvt-plan-dev/business.md +12 -2
- package/sources/skills/mvt-plan-dev/manifest.yaml +7 -7
- package/sources/skills/mvt-quick-dev/manifest.yaml +1 -1
- package/sources/skills/mvt-refactor/manifest.yaml +1 -1
- package/sources/skills/mvt-resume/manifest.yaml +3 -0
- package/sources/skills/mvt-review/business.md +3 -9
- package/sources/skills/mvt-review/manifest.yaml +7 -7
- package/sources/skills/mvt-status/business.md +2 -12
- package/sources/skills/mvt-status/manifest.yaml +3 -0
- package/sources/skills/mvt-sync-context/business.md +1 -1
- package/sources/skills/mvt-sync-context/manifest.yaml +6 -6
- package/sources/skills/mvt-template/manifest.yaml +3 -0
- package/sources/skills/mvt-test/business.md +2 -10
- package/sources/skills/mvt-test/manifest.yaml +7 -7
- package/sources/skills/mvt-update-plan/business.md +12 -27
- package/sources/skills/mvt-update-plan/manifest.yaml +12 -6
- package/sources/templates/analyze-output/body.md +41 -0
- package/sources/templates/decompose-output/body.md +36 -0
- package/sources/templates/design-output/body.md +48 -0
- package/sources/templates/implement-output/body.md +48 -3
- package/sources/templates/project-context/body.md +45 -0
- package/sources/templates/review-output/body.md +59 -0
- package/sources/templates/test-output/body.md +72 -0
- package/sources/sections/output-language-constraint.md +0 -11
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Plan Update Script — Full Reference
|
|
2
|
+
|
|
3
|
+
> **This file is the authoritative usage reference for `plan-update.cjs`.**
|
|
4
|
+
> Read this file before calling the script. Do NOT read the `.cjs` or `.js` source to learn flag names or semantics.
|
|
5
|
+
|
|
6
|
+
## Command
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
node .ai-agents/scripts/plan-update.cjs \
|
|
10
|
+
--plan "<active_change.plan_path>" \
|
|
11
|
+
--task <task_id> \
|
|
12
|
+
--projects "<comma,separated,project,names>" \
|
|
13
|
+
[--status <pending|in_progress|done|blocked|skipped>] \
|
|
14
|
+
[--artifacts "<comma,separated,paths>"] \
|
|
15
|
+
[--notes "<free-form text>"] \
|
|
16
|
+
[--deliverables-pointer current] \
|
|
17
|
+
[--mark-deliverable-stale <task_id>[,task_id2,...]]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Include `--artifacts`, `--notes`, `--deliverables-pointer`, and `--mark-deliverable-stale` only when the skill's logic determines they apply; omit each flag otherwise.
|
|
21
|
+
|
|
22
|
+
## Argument values
|
|
23
|
+
|
|
24
|
+
| Argument | Value source | Example |
|
|
25
|
+
|----------|-------------|---------|
|
|
26
|
+
| `--plan` | `active_change.plan_path` resolved from session.yaml | `".ai-agents/workspace/artifacts/chg-001/plan.yaml"` |
|
|
27
|
+
| `--task` | the `task_id` being updated (resolved by the skill's Step 1) | `t1` |
|
|
28
|
+
| `--status` | optional; the new status: `pending` / `in_progress` / `done` / `blocked` / `skipped` | `done` |
|
|
29
|
+
| `--projects` | comma-separated project names from `project-context.yaml > projects[].name` (single-project: the sole project name) | `"web,api"` |
|
|
30
|
+
| `--artifacts` | optional; comma-separated paths to append (the script de-duplicates) | `"src/auth.ts,src/auth.test.ts"` |
|
|
31
|
+
| `--notes` | optional; overwrites the task's `notes` | `"blocked on API spec"` |
|
|
32
|
+
| `--deliverables-pointer` | optional; set to `current` to record that this task's deliverables section is written | `current` |
|
|
33
|
+
| `--mark-deliverable-stale` | optional; comma-separated downstream task ids whose deliverables are now stale | `"t3,t4"` |
|
|
34
|
+
|
|
35
|
+
## Parameter semantics
|
|
36
|
+
|
|
37
|
+
| Argument | When to use | Effect on `plan.yaml` |
|
|
38
|
+
|----------|-------------|------------------------|
|
|
39
|
+
| `--task` + optional `--status` | Use `--status` for status transitions; omit it for metadata-only updates such as deliverables freshness | When present, sets the task status; sets `completed_at` to now when `done`, else `null`; refreshes `plan.updated_at`. When omitted, status, `completed_at`, DAG advancement, and `current_tasks` are left unchanged. |
|
|
40
|
+
| `--projects` | Always (per-project validation) | Drives per-project DAG advancement of `current_tasks` and per-project validation. Required for correct multi-project plans. |
|
|
41
|
+
| `--artifacts` | Task produced or touched files | Appends + de-duplicates paths into the task's `artifacts.files`; handles `artifacts: null`. |
|
|
42
|
+
| `--notes` | Task needs a free-form note | Overwrites the task's existing `notes`. |
|
|
43
|
+
| `--deliverables-pointer` + `--mark-deliverable-stale` | Task wrote its deliverables section (e.g. `/mvt-implement` Step 8) | Records the deliverables pointer on the task; marks the listed downstream tasks' deliverables as stale so `/mvt-resume` and `/mvt-status` surface a warning. Use both flags together in a single invocation. |
|
|
44
|
+
|
|
45
|
+
## What the script does (deterministically)
|
|
46
|
+
|
|
47
|
+
1. **Apply**: when `--status` is present, sets the task status and `completed_at`; appends + de-duplicates `--artifacts`; overwrites `--notes`; refreshes `plan.updated_at`.
|
|
48
|
+
2. **Recompute `current_tasks`** only when `--status` is present (per-project independent advancement): for each project, finds the `in_progress` task or advances the first `pending` task whose `depends_on` are all in `resolvedIds` (done + skipped; blocked does NOT satisfy). Detects `project_switch` when advancement crosses a project boundary. Plan done -> `current_tasks = {}`.
|
|
49
|
+
3. **Validate** the mutated plan (unique ids, valid `depends_on` references, DAG/no-cycle per project, one `in_progress` per project, every task has acceptance, `completed_at` consistency, `current_tasks` validity, project naming constraint, task project membership).
|
|
50
|
+
4. **Write atomically** (temp + rename) only if validation passes.
|
|
51
|
+
|
|
52
|
+
## Output interpretation
|
|
53
|
+
|
|
54
|
+
- **Exit 0**: success. stdout is a single-line JSON object, e.g.:
|
|
55
|
+
```json
|
|
56
|
+
{"ok":true,"task":{"id":"t1","title":"...","old_status":"in_progress","new_status":"done"},"current_tasks":{"default":"t2"},"plan_status":"in_progress","progress":{"done":1,"total":4},"warning":null,"project_switch":null}
|
|
57
|
+
```
|
|
58
|
+
Use these fields directly to render output. The file is already written — do NOT read it back to verify. If `warning` is non-null, surface it. If `project_switch` is non-null, note the project boundary crossing.
|
|
59
|
+
- **Exit 1**: failure. stderr carries the error (invalid status, task not found, validation failure, parse/write error). The file was **not** modified. Report the error to the user and do not fabricate a success summary.
|
|
@@ -7,7 +7,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
9
|
var __commonJS = (cb, mod) => function __require() {
|
|
10
|
-
|
|
10
|
+
try {
|
|
11
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
12
|
+
} catch (e) {
|
|
13
|
+
throw mod = 0, e;
|
|
14
|
+
}
|
|
11
15
|
};
|
|
12
16
|
var __copyProps = (to, from, except, desc) => {
|
|
13
17
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
@@ -30,13 +34,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
34
|
var require_identity = __commonJS({
|
|
31
35
|
"node_modules/yaml/dist/nodes/identity.js"(exports2) {
|
|
32
36
|
"use strict";
|
|
33
|
-
var ALIAS = Symbol.for("yaml.alias");
|
|
34
|
-
var DOC = Symbol.for("yaml.document");
|
|
35
|
-
var MAP = Symbol.for("yaml.map");
|
|
36
|
-
var PAIR = Symbol.for("yaml.pair");
|
|
37
|
-
var SCALAR = Symbol.for("yaml.scalar");
|
|
38
|
-
var SEQ = Symbol.for("yaml.seq");
|
|
39
|
-
var NODE_TYPE = Symbol.for("yaml.node.type");
|
|
37
|
+
var ALIAS = /* @__PURE__ */ Symbol.for("yaml.alias");
|
|
38
|
+
var DOC = /* @__PURE__ */ Symbol.for("yaml.document");
|
|
39
|
+
var MAP = /* @__PURE__ */ Symbol.for("yaml.map");
|
|
40
|
+
var PAIR = /* @__PURE__ */ Symbol.for("yaml.pair");
|
|
41
|
+
var SCALAR = /* @__PURE__ */ Symbol.for("yaml.scalar");
|
|
42
|
+
var SEQ = /* @__PURE__ */ Symbol.for("yaml.seq");
|
|
43
|
+
var NODE_TYPE = /* @__PURE__ */ Symbol.for("yaml.node.type");
|
|
40
44
|
var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS;
|
|
41
45
|
var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC;
|
|
42
46
|
var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP;
|
|
@@ -88,9 +92,9 @@ var require_visit = __commonJS({
|
|
|
88
92
|
"node_modules/yaml/dist/visit.js"(exports2) {
|
|
89
93
|
"use strict";
|
|
90
94
|
var identity = require_identity();
|
|
91
|
-
var BREAK = Symbol("break visit");
|
|
92
|
-
var SKIP = Symbol("skip children");
|
|
93
|
-
var REMOVE = Symbol("remove node");
|
|
95
|
+
var BREAK = /* @__PURE__ */ Symbol("break visit");
|
|
96
|
+
var SKIP = /* @__PURE__ */ Symbol("skip children");
|
|
97
|
+
var REMOVE = /* @__PURE__ */ Symbol("remove node");
|
|
94
98
|
function visit(node, visitor) {
|
|
95
99
|
const visitor_ = initVisitor(visitor);
|
|
96
100
|
if (identity.isDocument(node)) {
|
|
@@ -3856,6 +3860,7 @@ var require_resolve_props = __commonJS({
|
|
|
3856
3860
|
hasSpace = false;
|
|
3857
3861
|
break;
|
|
3858
3862
|
}
|
|
3863
|
+
// else fallthrough
|
|
3859
3864
|
default:
|
|
3860
3865
|
onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.type} token`);
|
|
3861
3866
|
atNewline = false;
|
|
@@ -4564,6 +4569,7 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
4564
4569
|
switch (token.type) {
|
|
4565
4570
|
case "space":
|
|
4566
4571
|
hasSpace = true;
|
|
4572
|
+
// fallthrough
|
|
4567
4573
|
case "newline":
|
|
4568
4574
|
length += token.source.length;
|
|
4569
4575
|
break;
|
|
@@ -4579,6 +4585,7 @@ var require_resolve_block_scalar = __commonJS({
|
|
|
4579
4585
|
onError(token, "UNEXPECTED_TOKEN", token.message);
|
|
4580
4586
|
length += token.source.length;
|
|
4581
4587
|
break;
|
|
4588
|
+
/* istanbul ignore next should not happen */
|
|
4582
4589
|
default: {
|
|
4583
4590
|
const message = `Unexpected token in block scalar header: ${token.type}`;
|
|
4584
4591
|
onError(token, "UNEXPECTED_TOKEN", message);
|
|
@@ -4628,6 +4635,7 @@ var require_resolve_flow_scalar = __commonJS({
|
|
|
4628
4635
|
_type = Scalar.Scalar.QUOTE_DOUBLE;
|
|
4629
4636
|
value = doubleQuotedValue(source, _onError);
|
|
4630
4637
|
break;
|
|
4638
|
+
/* istanbul ignore next should not happen */
|
|
4631
4639
|
default:
|
|
4632
4640
|
onError(scalar, "UNEXPECTED_TOKEN", `Expected a flow scalar value, but found: ${type}`);
|
|
4633
4641
|
return {
|
|
@@ -4649,6 +4657,7 @@ var require_resolve_flow_scalar = __commonJS({
|
|
|
4649
4657
|
function plainValue(source, onError) {
|
|
4650
4658
|
let badChar = "";
|
|
4651
4659
|
switch (source[0]) {
|
|
4660
|
+
/* istanbul ignore next should not happen */
|
|
4652
4661
|
case " ":
|
|
4653
4662
|
badChar = "a tab character";
|
|
4654
4663
|
break;
|
|
@@ -5537,9 +5546,9 @@ var require_cst_stringify = __commonJS({
|
|
|
5537
5546
|
var require_cst_visit = __commonJS({
|
|
5538
5547
|
"node_modules/yaml/dist/parse/cst-visit.js"(exports2) {
|
|
5539
5548
|
"use strict";
|
|
5540
|
-
var BREAK = Symbol("break visit");
|
|
5541
|
-
var SKIP = Symbol("skip children");
|
|
5542
|
-
var REMOVE = Symbol("remove item");
|
|
5549
|
+
var BREAK = /* @__PURE__ */ Symbol("break visit");
|
|
5550
|
+
var SKIP = /* @__PURE__ */ Symbol("skip children");
|
|
5551
|
+
var REMOVE = /* @__PURE__ */ Symbol("remove item");
|
|
5543
5552
|
function visit(cst, visitor) {
|
|
5544
5553
|
if ("type" in cst && cst.type === "document")
|
|
5545
5554
|
cst = { start: cst.start, value: cst.value };
|
|
@@ -5912,6 +5921,7 @@ var require_lexer = __commonJS({
|
|
|
5912
5921
|
switch (line[n]) {
|
|
5913
5922
|
case "#":
|
|
5914
5923
|
yield* this.pushCount(line.length - n);
|
|
5924
|
+
// fallthrough
|
|
5915
5925
|
case void 0:
|
|
5916
5926
|
yield* this.pushNewline();
|
|
5917
5927
|
return yield* this.parseLineStart();
|
|
@@ -6007,6 +6017,7 @@ var require_lexer = __commonJS({
|
|
|
6007
6017
|
return "flow";
|
|
6008
6018
|
}
|
|
6009
6019
|
}
|
|
6020
|
+
// fallthrough
|
|
6010
6021
|
default:
|
|
6011
6022
|
this.flowKey = false;
|
|
6012
6023
|
return yield* this.parsePlainScalar();
|
|
@@ -6084,6 +6095,7 @@ var require_lexer = __commonJS({
|
|
|
6084
6095
|
if (next === "\n")
|
|
6085
6096
|
break;
|
|
6086
6097
|
}
|
|
6098
|
+
// fallthrough
|
|
6087
6099
|
default:
|
|
6088
6100
|
break loop;
|
|
6089
6101
|
}
|
|
@@ -6201,7 +6213,9 @@ var require_lexer = __commonJS({
|
|
|
6201
6213
|
case "&":
|
|
6202
6214
|
return (yield* this.pushUntil(isNotAnchorChar)) + (yield* this.pushSpaces(true)) + (yield* this.pushIndicators());
|
|
6203
6215
|
case "-":
|
|
6216
|
+
// this is an error
|
|
6204
6217
|
case "?":
|
|
6218
|
+
// this is an error outside flow collections
|
|
6205
6219
|
case ":": {
|
|
6206
6220
|
const inFlow = this.flowLevel > 0;
|
|
6207
6221
|
const ch1 = this.charAt(1);
|
|
@@ -6350,6 +6364,7 @@ var require_parser = __commonJS({
|
|
|
6350
6364
|
}
|
|
6351
6365
|
case "block-seq":
|
|
6352
6366
|
return parent.items[parent.items.length - 1].start;
|
|
6367
|
+
/* istanbul ignore next should not happen */
|
|
6353
6368
|
default:
|
|
6354
6369
|
return [];
|
|
6355
6370
|
}
|
|
@@ -6583,6 +6598,7 @@ var require_parser = __commonJS({
|
|
|
6583
6598
|
Object.assign(it, { key: token, sep: [] });
|
|
6584
6599
|
return;
|
|
6585
6600
|
}
|
|
6601
|
+
/* istanbul ignore next should not happen */
|
|
6586
6602
|
default:
|
|
6587
6603
|
yield* this.pop();
|
|
6588
6604
|
yield* this.pop(token);
|
|
@@ -6704,6 +6720,7 @@ var require_parser = __commonJS({
|
|
|
6704
6720
|
}
|
|
6705
6721
|
yield* this.pop();
|
|
6706
6722
|
break;
|
|
6723
|
+
/* istanbul ignore next should not happen */
|
|
6707
6724
|
default:
|
|
6708
6725
|
yield* this.pop();
|
|
6709
6726
|
yield* this.step();
|
|
@@ -7149,6 +7166,7 @@ var require_parser = __commonJS({
|
|
|
7149
7166
|
break;
|
|
7150
7167
|
case "newline":
|
|
7151
7168
|
this.onKeyLine = false;
|
|
7169
|
+
// fallthrough
|
|
7152
7170
|
case "space":
|
|
7153
7171
|
case "comment":
|
|
7154
7172
|
default:
|
|
@@ -7460,11 +7478,12 @@ function main() {
|
|
|
7460
7478
|
session.changes = session.changes.slice(-limits.changes);
|
|
7461
7479
|
}
|
|
7462
7480
|
}
|
|
7481
|
+
const isSameChange = session.active_change.id === args["change-id"];
|
|
7463
7482
|
session.active_change.id = args["change-id"];
|
|
7464
7483
|
session.active_change.title = args["new-change"];
|
|
7465
|
-
session.active_change.created_at = now;
|
|
7466
|
-
session.active_change.plan_path = "";
|
|
7467
|
-
session.active_change.epic_id = args["epic-id"] || "";
|
|
7484
|
+
session.active_change.created_at = isSameChange ? session.active_change.created_at || now : now;
|
|
7485
|
+
session.active_change.plan_path = isSameChange ? session.active_change.plan_path || "" : "";
|
|
7486
|
+
session.active_change.epic_id = args["epic-id"] || session.active_change.epic_id || "";
|
|
7468
7487
|
}
|
|
7469
7488
|
if (args["set-initialized"]) {
|
|
7470
7489
|
session.session = session.session || {};
|
package/dist/types/platform.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,UAAU,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,WAAW,EAyBlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,UAAU,EAAe,CAAC;AAE1D,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAIlE"}
|
package/dist/types/platform.js
CHANGED
|
@@ -11,6 +11,18 @@ export const PLATFORMS = [
|
|
|
11
11
|
skillDir: ".qoder/skills",
|
|
12
12
|
description: "Qoder IDE",
|
|
13
13
|
},
|
|
14
|
+
{
|
|
15
|
+
id: "cursor",
|
|
16
|
+
dir: ".cursor",
|
|
17
|
+
skillDir: ".cursor/skills",
|
|
18
|
+
description: "Cursor IDE",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "opencode",
|
|
22
|
+
dir: ".opencode",
|
|
23
|
+
skillDir: ".opencode/skills",
|
|
24
|
+
description: "Opencode CLI",
|
|
25
|
+
},
|
|
14
26
|
];
|
|
15
27
|
export const DEFAULT_PLATFORMS = ["claude"];
|
|
16
28
|
export function getPlatformById(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC;QACE,EAAE,EAAE,QAAQ;QACZ,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,gBAAgB;QAC1B,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,OAAO;QACX,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,WAAW;KACzB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAiB,CAAC,QAAQ,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC;QACE,EAAE,EAAE,QAAQ;QACZ,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,gBAAgB;QAC1B,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,OAAO;QACX,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,WAAW;KACzB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,gBAAgB;QAC1B,WAAW,EAAE,YAAY;KAC1B;IACD;QACE,EAAE,EAAE,UAAU;QACd,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,cAAc;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAiB,CAAC,QAAQ,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combine an English string with its Chinese translation into a single
|
|
3
|
+
* bilingual message. The English text always comes first, separated from the
|
|
4
|
+
* Chinese text by " / ".
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* bilingual("Install complete", "安装完成") // "Install complete / 安装完成"
|
|
8
|
+
*/
|
|
9
|
+
export declare function bilingual(en: string, zh: string): string;
|
|
10
|
+
//# sourceMappingURL=bilingual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bilingual.d.ts","sourceRoot":"","sources":["../../src/util/bilingual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAGxD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Combine an English string with its Chinese translation into a single
|
|
3
|
+
* bilingual message. The English text always comes first, separated from the
|
|
4
|
+
* Chinese text by " / ".
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* bilingual("Install complete", "安装完成") // "Install complete / 安装完成"
|
|
8
|
+
*/
|
|
9
|
+
export function bilingual(en, zh) {
|
|
10
|
+
if (en === zh)
|
|
11
|
+
return en; // Avoid redundancy when both languages are the same
|
|
12
|
+
return `${en} / ${zh}`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=bilingual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bilingual.js","sourceRoot":"","sources":["../../src/util/bilingual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,EAAU,EAAE,EAAU;IAC9C,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,oDAAoD;IAC9E,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/util/cancel.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,IAAI,KAAK,CAGjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/util/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,UAAU,SAAS;IACvB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/util/color.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export declare const color: {
|
|
2
|
-
green: (
|
|
3
|
-
yellow: (
|
|
4
|
-
red: (
|
|
5
|
-
cyan: (
|
|
6
|
-
gray: (
|
|
7
|
-
bold: (
|
|
2
|
+
green: import("picocolors/types.js").Formatter;
|
|
3
|
+
yellow: import("picocolors/types.js").Formatter;
|
|
4
|
+
red: import("picocolors/types.js").Formatter;
|
|
5
|
+
cyan: import("picocolors/types.js").Formatter;
|
|
6
|
+
gray: import("picocolors/types.js").Formatter;
|
|
7
|
+
bold: import("picocolors/types.js").Formatter;
|
|
8
|
+
dim: import("picocolors/types.js").Formatter;
|
|
9
|
+
magenta: import("picocolors/types.js").Formatter;
|
|
10
|
+
blue: import("picocolors/types.js").Formatter;
|
|
8
11
|
};
|
|
9
12
|
//# sourceMappingURL=color.d.ts.map
|
package/dist/util/color.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC"}
|
package/dist/util/color.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
function wrap(code, text) {
|
|
3
|
-
return useColor ? `\x1b[${code}m${text}\x1b[0m` : text;
|
|
4
|
-
}
|
|
1
|
+
import pc from "picocolors";
|
|
5
2
|
export const color = {
|
|
6
|
-
green:
|
|
7
|
-
yellow:
|
|
8
|
-
red:
|
|
9
|
-
cyan:
|
|
10
|
-
gray:
|
|
11
|
-
bold:
|
|
3
|
+
green: pc.green,
|
|
4
|
+
yellow: pc.yellow,
|
|
5
|
+
red: pc.red,
|
|
6
|
+
cyan: pc.cyan,
|
|
7
|
+
gray: pc.gray,
|
|
8
|
+
bold: pc.bold,
|
|
9
|
+
dim: pc.dim,
|
|
10
|
+
magenta: pc.magenta,
|
|
11
|
+
blue: pc.blue,
|
|
12
12
|
};
|
|
13
13
|
//# sourceMappingURL=color.js.map
|
package/dist/util/color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,EAAE,CAAC,KAAK;IACf,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,GAAG,EAAE,EAAE,CAAC,GAAG;IACX,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,IAAI,EAAE,EAAE,CAAC,IAAI;IACb,GAAG,EAAE,EAAE,CAAC,GAAG;IACX,OAAO,EAAE,EAAE,CAAC,OAAO;IACnB,IAAI,EAAE,EAAE,CAAC,IAAI;CACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Ora } from "ora";
|
|
2
|
+
export type SpinnerHandle = Ora;
|
|
3
|
+
export declare function startSpinner(text: string): SpinnerHandle;
|
|
4
|
+
export declare function withSpinner<T>(text: string, fn: () => Promise<T> | T, options?: {
|
|
5
|
+
successText?: string;
|
|
6
|
+
failText?: string;
|
|
7
|
+
}): Promise<T>;
|
|
8
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/util/spinner.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC;AAEhC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAExD;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,OAAO,CAAC,CAAC,CAAC,CAUZ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import ora from "ora";
|
|
2
|
+
export function startSpinner(text) {
|
|
3
|
+
return ora({ text, color: "cyan" }).start();
|
|
4
|
+
}
|
|
5
|
+
export async function withSpinner(text, fn, options = {}) {
|
|
6
|
+
const spinner = startSpinner(text);
|
|
7
|
+
try {
|
|
8
|
+
const result = await fn();
|
|
9
|
+
spinner.succeed(options.successText ?? text);
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
spinner.fail(options.failText ?? text);
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/util/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAiB,MAAM,KAAK,CAAC;AAIpC,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,EAAwB,EACxB,UAGI,EAAE;IAEN,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/install-manifest.yaml
CHANGED
|
@@ -17,6 +17,10 @@ generated:
|
|
|
17
17
|
source: "bundle:sources/scripts/plan-update.js"
|
|
18
18
|
- pattern: ".ai-agents/scripts/epic-update.cjs"
|
|
19
19
|
source: "bundle:sources/scripts/epic-update.js"
|
|
20
|
+
- pattern: ".ai-agents/scripts/plan-update.md"
|
|
21
|
+
source: "copy:sources/scripts/plan-update.md"
|
|
22
|
+
- pattern: ".ai-agents/scripts/epic-update.md"
|
|
23
|
+
source: "copy:sources/scripts/epic-update.md"
|
|
20
24
|
|
|
21
25
|
create_once:
|
|
22
26
|
- path: ".ai-agents/config.yaml"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uoyo/mvtt",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "My Virtual Tech Team - AI-guided prompt orchestration framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -43,15 +43,16 @@
|
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^25.6.0",
|
|
46
|
-
"@types/prompts": "^2.4.9",
|
|
47
46
|
"@vitest/coverage-v8": "^2.1.9",
|
|
48
47
|
"esbuild": "^0.28.0",
|
|
49
48
|
"typescript": "^5.4.0",
|
|
50
49
|
"vitest": "^2.0.0"
|
|
51
50
|
},
|
|
52
51
|
"dependencies": {
|
|
52
|
+
"@clack/prompts": "^1.5.1",
|
|
53
53
|
"commander": "^14.0.3",
|
|
54
|
-
"
|
|
54
|
+
"ora": "^9.4.0",
|
|
55
|
+
"picocolors": "^1.1.1",
|
|
55
56
|
"yaml": "^2.4.0"
|
|
56
57
|
},
|
|
57
58
|
"license": "MIT"
|
package/registry.yaml
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
last_updated: "2026-05-23"
|
|
2
|
-
|
|
3
|
-
# ============================================================
|
|
4
|
-
# Knowledge
|
|
5
|
-
# Project-keyed map. Each key is a project name;
|
|
6
|
-
# "_all" is the reserved key for entries loaded by all projects and all skills.
|
|
7
|
-
# ============================================================
|
|
8
|
-
knowledge:
|
|
9
|
-
# _all:
|
|
10
|
-
# - id: "core"
|
|
11
|
-
# source: "knowledge/core/"
|
|
12
|
-
# files_from_manifest: true
|
|
13
|
-
|
|
14
|
-
# ============================================================
|
|
15
|
-
# Skills
|
|
16
|
-
# ============================================================
|
|
17
|
-
skills:
|
|
18
|
-
mvt-init:
|
|
19
|
-
description: "Initialize or refresh a project: scan structure, detect tech stack, infer project type."
|
|
20
|
-
mvt-status:
|
|
21
|
-
description: "Display current project and workflow status: skill history, active changes, session state."
|
|
22
|
-
mvt-config:
|
|
23
|
-
description: "Manage framework configuration: language, output format, and other settings."
|
|
24
|
-
mvt-sync-context:
|
|
25
|
-
description: "Synchronize workspace context with code after manual edits or git operations."
|
|
26
|
-
mvt-cleanup:
|
|
27
|
-
description: "Clean up workspace artifacts, summarize completed changes, and archive change records."
|
|
28
|
-
mvt-analyze:
|
|
29
|
-
description: "Analyze requirements and extract domain concepts, features, and business rules."
|
|
30
|
-
template: .ai-agents/skills/_templates/analyze-output.md
|
|
31
|
-
mvt-analyze-code:
|
|
32
|
-
description: "Reverse-analyze existing code into project-context.md (terms, modules, layers, rules)."
|
|
33
|
-
template: .ai-agents/skills/_templates/project-context.md
|
|
34
|
-
mvt-decompose:
|
|
35
|
-
description: "Decompose epic-scale requirements into right-sized sub-changes with DAG dependencies."
|
|
36
|
-
template: .ai-agents/skills/_templates/decompose-output.md
|
|
37
|
-
mvt-design:
|
|
38
|
-
description: "Create architecture design from analyzed requirements."
|
|
39
|
-
template: .ai-agents/skills/_templates/design-output.md
|
|
40
|
-
mvt-plan-dev:
|
|
41
|
-
description: "Generate a tracked development plan (plan.yaml) for a large change."
|
|
42
|
-
mvt-update-plan:
|
|
43
|
-
description: "Update one task in the active plan.yaml: status, artifacts, notes; auto-advance current_task."
|
|
44
|
-
mvt-bug-detect:
|
|
45
|
-
description: "Diagnose a bug (root cause, severity, impact scope) without applying fixes."
|
|
46
|
-
mvt-implement:
|
|
47
|
-
description: "Implement features from architecture design; write production code."
|
|
48
|
-
template: .ai-agents/skills/_templates/implement-output.md
|
|
49
|
-
mvt-fix:
|
|
50
|
-
description: "Diagnose and fix bugs or errors in the codebase."
|
|
51
|
-
mvt-refactor:
|
|
52
|
-
description: "Refactor existing code while preserving behavior."
|
|
53
|
-
mvt-quick-dev:
|
|
54
|
-
description: "Quickly implement small, well-scoped changes (1-3 files) without the full workflow."
|
|
55
|
-
mvt-review:
|
|
56
|
-
description: "Review code for quality, standards compliance, and best practices."
|
|
57
|
-
template: .ai-agents/skills/_templates/review-output.md
|
|
58
|
-
mvt-test:
|
|
59
|
-
description: "Generate and design tests to validate implementations."
|
|
60
|
-
template: .ai-agents/skills/_templates/test-output.md
|
|
61
|
-
mvt-help:
|
|
62
|
-
description: "Show available skills, project status, and workflow guidance."
|
|
63
|
-
mvt-resume:
|
|
64
|
-
description: "Resume an in-progress task in a new conversation from session.yaml and recent artifacts."
|
|
65
|
-
mvt-create-skill:
|
|
66
|
-
description: "Create custom MVTT skills through an interactive guided workflow."
|
|
67
|
-
mvt-manage-context:
|
|
68
|
-
description: "Manage knowledge and registry: add (with AI routing), remove, move, rename, list."
|
|
69
|
-
mvt-check-context:
|
|
70
|
-
description: "Analyze context token load and provide optimization recommendations."
|
|
71
|
-
mvt-template:
|
|
72
|
-
description: "View, customize, and manage output templates for MVTT skills."
|
|
1
|
+
last_updated: "2026-05-23"
|
|
2
|
+
|
|
3
|
+
# ============================================================
|
|
4
|
+
# Knowledge
|
|
5
|
+
# Project-keyed map. Each key is a project name;
|
|
6
|
+
# "_all" is the reserved key for entries loaded by all projects and all skills.
|
|
7
|
+
# ============================================================
|
|
8
|
+
knowledge:
|
|
9
|
+
# _all:
|
|
10
|
+
# - id: "core"
|
|
11
|
+
# source: "knowledge/core/"
|
|
12
|
+
# files_from_manifest: true
|
|
13
|
+
|
|
14
|
+
# ============================================================
|
|
15
|
+
# Skills
|
|
16
|
+
# ============================================================
|
|
17
|
+
skills:
|
|
18
|
+
mvt-init:
|
|
19
|
+
description: "Initialize or refresh a project: scan structure, detect tech stack, infer project type."
|
|
20
|
+
mvt-status:
|
|
21
|
+
description: "Display current project and workflow status: skill history, active changes, session state."
|
|
22
|
+
mvt-config:
|
|
23
|
+
description: "Manage framework configuration: language, output format, and other settings."
|
|
24
|
+
mvt-sync-context:
|
|
25
|
+
description: "Synchronize workspace context with code after manual edits or git operations."
|
|
26
|
+
mvt-cleanup:
|
|
27
|
+
description: "Clean up workspace artifacts, summarize completed changes, and archive change records."
|
|
28
|
+
mvt-analyze:
|
|
29
|
+
description: "Analyze requirements and extract domain concepts, features, and business rules."
|
|
30
|
+
template: .ai-agents/skills/_templates/analyze-output.md
|
|
31
|
+
mvt-analyze-code:
|
|
32
|
+
description: "Reverse-analyze existing code into project-context.md (terms, modules, layers, rules)."
|
|
33
|
+
template: .ai-agents/skills/_templates/project-context.md
|
|
34
|
+
mvt-decompose:
|
|
35
|
+
description: "Decompose epic-scale requirements into right-sized sub-changes with DAG dependencies."
|
|
36
|
+
template: .ai-agents/skills/_templates/decompose-output.md
|
|
37
|
+
mvt-design:
|
|
38
|
+
description: "Create architecture design from analyzed requirements."
|
|
39
|
+
template: .ai-agents/skills/_templates/design-output.md
|
|
40
|
+
mvt-plan-dev:
|
|
41
|
+
description: "Generate a tracked development plan (plan.yaml) for a large change."
|
|
42
|
+
mvt-update-plan:
|
|
43
|
+
description: "Update one task in the active plan.yaml: status, artifacts, notes; auto-advance current_task."
|
|
44
|
+
mvt-bug-detect:
|
|
45
|
+
description: "Diagnose a bug (root cause, severity, impact scope) without applying fixes."
|
|
46
|
+
mvt-implement:
|
|
47
|
+
description: "Implement features from architecture design; write production code."
|
|
48
|
+
template: .ai-agents/skills/_templates/implement-output.md
|
|
49
|
+
mvt-fix:
|
|
50
|
+
description: "Diagnose and fix bugs or errors in the codebase."
|
|
51
|
+
mvt-refactor:
|
|
52
|
+
description: "Refactor existing code while preserving behavior."
|
|
53
|
+
mvt-quick-dev:
|
|
54
|
+
description: "Quickly implement small, well-scoped changes (1-3 files) without the full workflow."
|
|
55
|
+
mvt-review:
|
|
56
|
+
description: "Review code for quality, standards compliance, and best practices."
|
|
57
|
+
template: .ai-agents/skills/_templates/review-output.md
|
|
58
|
+
mvt-test:
|
|
59
|
+
description: "Generate and design tests to validate implementations."
|
|
60
|
+
template: .ai-agents/skills/_templates/test-output.md
|
|
61
|
+
mvt-help:
|
|
62
|
+
description: "Show available skills, project status, and workflow guidance."
|
|
63
|
+
mvt-resume:
|
|
64
|
+
description: "Resume an in-progress task in a new conversation from session.yaml and recent artifacts."
|
|
65
|
+
mvt-create-skill:
|
|
66
|
+
description: "Create custom MVTT skills through an interactive guided workflow."
|
|
67
|
+
mvt-manage-context:
|
|
68
|
+
description: "Manage knowledge and registry: add (with AI routing), remove, move, rename, list."
|
|
69
|
+
mvt-check-context:
|
|
70
|
+
description: "Analyze context token load and provide optimization recommendations."
|
|
71
|
+
mvt-template:
|
|
72
|
+
description: "View, customize, and manage output templates for MVTT skills."
|