cclaw-cli 0.13.0 → 0.15.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.
Files changed (41) hide show
  1. package/dist/cli.js +11 -0
  2. package/dist/config.js +0 -8
  3. package/dist/constants.d.ts +1 -1
  4. package/dist/constants.js +3 -0
  5. package/dist/content/archive-command.d.ts +2 -0
  6. package/dist/content/archive-command.js +98 -0
  7. package/dist/content/contracts.js +1 -1
  8. package/dist/content/diff-command.js +2 -2
  9. package/dist/content/feature-command.js +7 -7
  10. package/dist/content/harnesses-doc.js +15 -8
  11. package/dist/content/hooks.js +2 -2
  12. package/dist/content/learnings.d.ts +0 -3
  13. package/dist/content/learnings.js +0 -38
  14. package/dist/content/meta-skill.js +3 -2
  15. package/dist/content/next-command.js +12 -5
  16. package/dist/content/ops-command.d.ts +2 -0
  17. package/dist/content/ops-command.js +60 -0
  18. package/dist/content/protocols.js +14 -2
  19. package/dist/content/retro-command.js +3 -3
  20. package/dist/content/rewind-command.js +5 -5
  21. package/dist/content/stage-common-guidance.js +14 -5
  22. package/dist/content/stage-schema.d.ts +0 -16
  23. package/dist/content/stage-schema.js +7 -181
  24. package/dist/content/status-command.d.ts +2 -2
  25. package/dist/content/status-command.js +13 -13
  26. package/dist/content/tdd-log-command.js +6 -6
  27. package/dist/content/templates.d.ts +1 -1
  28. package/dist/content/templates.js +2 -2
  29. package/dist/content/tree-command.js +3 -3
  30. package/dist/content/utility-skills.js +1 -1
  31. package/dist/content/view-command.d.ts +2 -0
  32. package/dist/content/view-command.js +57 -0
  33. package/dist/doctor-registry.js +22 -4
  34. package/dist/doctor.js +8 -32
  35. package/dist/harness-adapters.d.ts +1 -0
  36. package/dist/harness-adapters.js +15 -54
  37. package/dist/install.js +13 -10
  38. package/dist/policy.js +1 -1
  39. package/dist/runs.js +1 -1
  40. package/dist/types.d.ts +1 -3
  41. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export declare function viewCommandContract(): string;
2
+ export declare function viewCommandSkillMarkdown(): string;
@@ -0,0 +1,57 @@
1
+ import { RUNTIME_ROOT } from "../constants.js";
2
+ const VIEW_SKILL_FOLDER = "flow-view";
3
+ const VIEW_SKILL_NAME = "flow-view";
4
+ export function viewCommandContract() {
5
+ return `# /cc-view
6
+
7
+ ## Purpose
8
+
9
+ Unified read-only command surface for flow visibility.
10
+
11
+ Subcommands:
12
+ - \`/cc-view\` or \`/cc-view status\` -> status snapshot
13
+ - \`/cc-view tree\` -> structural flow tree
14
+ - \`/cc-view diff\` -> baseline delta map
15
+
16
+ ## HARD-GATE
17
+
18
+ - \`/cc-view\` is strictly read-only at wrapper level.
19
+ - Do not mutate flow-state unless routing to \`diff\` (which updates snapshot baseline by design).
20
+
21
+ ## Routing
22
+
23
+ 1. Parse subcommand (default \`status\`).
24
+ 2. Route:
25
+ - \`status\` -> load \`${RUNTIME_ROOT}/commands/status.md\` + \`${RUNTIME_ROOT}/skills/flow-status/SKILL.md\`
26
+ - \`tree\` -> load \`${RUNTIME_ROOT}/commands/tree.md\` + \`${RUNTIME_ROOT}/skills/flow-tree/SKILL.md\`
27
+ - \`diff\` -> load \`${RUNTIME_ROOT}/commands/diff.md\` + \`${RUNTIME_ROOT}/skills/flow-diff/SKILL.md\`
28
+ 3. Unknown subcommand -> print supported values and stop.
29
+
30
+ ## Primary skill
31
+
32
+ **${RUNTIME_ROOT}/skills/${VIEW_SKILL_FOLDER}/SKILL.md**
33
+ `;
34
+ }
35
+ export function viewCommandSkillMarkdown() {
36
+ return `---
37
+ name: ${VIEW_SKILL_NAME}
38
+ description: "Unified read-only view router for status/tree/diff flow visibility commands."
39
+ ---
40
+
41
+ # /cc-view
42
+
43
+ ## HARD-GATE
44
+
45
+ Wrapper is read-only and dispatch-only. It must not mutate flow state directly.
46
+
47
+ ## Protocol
48
+
49
+ 1. Parse optional subcommand token:
50
+ - missing -> \`status\`
51
+ - \`status\` -> dispatch to \`${RUNTIME_ROOT}/commands/status.md\`
52
+ - \`tree\` -> dispatch to \`${RUNTIME_ROOT}/commands/tree.md\`
53
+ - \`diff\` -> dispatch to \`${RUNTIME_ROOT}/commands/diff.md\`
54
+ 2. Execute the target command contract and skill.
55
+ 3. Return concise output and suggest \`/cc-view <subcommand>\` variants for navigation.
56
+ `;
57
+ }
@@ -58,7 +58,7 @@ const RULES = [
58
58
  }
59
59
  },
60
60
  {
61
- test: /^(hook:|lifecycle:|git_hooks:)/,
61
+ test: /^(hook:|hooks:|lifecycle:|git_hooks:)/,
62
62
  metadata: {
63
63
  severity: "error",
64
64
  summary: "Hook wiring and lifecycle integration check.",
@@ -67,7 +67,7 @@ const RULES = [
67
67
  }
68
68
  },
69
69
  {
70
- test: /^(shim:|agents:cclaw_block|rules:cursor:workflow)/,
70
+ test: /^(shim:|agents:cclaw_block|rules:cursor:)/,
71
71
  metadata: {
72
72
  severity: "error",
73
73
  summary: "Harness shim and routing file consistency check.",
@@ -84,6 +84,24 @@ const RULES = [
84
84
  docRef: ref("state-and-gates.md")
85
85
  }
86
86
  },
87
+ {
88
+ test: /^(knowledge:|artifacts:|runs:)/,
89
+ metadata: {
90
+ severity: "error",
91
+ summary: "Knowledge and artifact runtime integrity check.",
92
+ fix: "Restore missing runtime files under `.cclaw/` or re-run `cclaw sync`.",
93
+ docRef: ref("runtime-layout.md")
94
+ }
95
+ },
96
+ {
97
+ test: /^(meta_skill:|protocol:|stage_skill:|context_mode:)/,
98
+ metadata: {
99
+ severity: "error",
100
+ summary: "Routing skill and protocol integrity check.",
101
+ fix: "Regenerate runtime references and skills via `cclaw sync`, then re-run doctor.",
102
+ docRef: ref("harness-and-routing.md")
103
+ }
104
+ },
87
105
  {
88
106
  test: /^delegation:/,
89
107
  metadata: {
@@ -120,8 +138,8 @@ export function doctorCheckMetadata(checkName) {
120
138
  }
121
139
  return {
122
140
  severity: "error",
123
- summary: "Doctor runtime integrity check.",
124
- fix: "Inspect check details, apply the suggested remediation, and re-run `cclaw doctor`.",
141
+ summary: "Unclassified doctor check.",
142
+ fix: "Report this check name to cclaw maintainers so doctor-registry can classify it explicitly.",
125
143
  docRef: ref("README.md")
126
144
  };
127
145
  }
package/dist/doctor.js CHANGED
@@ -8,7 +8,7 @@ import { CCLAW_AGENTS } from "./content/core-agents.js";
8
8
  import { readConfig } from "./config.js";
9
9
  import { exists } from "./fs-utils.js";
10
10
  import { gitignoreHasRequiredPatterns } from "./gitignore.js";
11
- import { HARNESS_ADAPTERS, CCLAW_MARKER_START, CCLAW_MARKER_END } from "./harness-adapters.js";
11
+ import { HARNESS_ADAPTERS, CCLAW_MARKER_START, CCLAW_MARKER_END, harnessShimFileNames } from "./harness-adapters.js";
12
12
  import { policyChecks } from "./policy.js";
13
13
  import { readFlowState } from "./runs.js";
14
14
  import { skippedStagesForTrack } from "./flow-state.js";
@@ -447,19 +447,7 @@ export async function doctorChecks(projectRoot, options = {}) {
447
447
  });
448
448
  continue;
449
449
  }
450
- for (const shim of [
451
- "cc.md",
452
- "cc-next.md",
453
- "cc-learn.md",
454
- "cc-status.md",
455
- "cc-tree.md",
456
- "cc-diff.md",
457
- "cc-feature.md",
458
- "cc-tdd-log.md",
459
- "cc-retro.md",
460
- "cc-rewind.md",
461
- "cc-rewind-ack.md"
462
- ]) {
450
+ for (const shim of harnessShimFileNames()) {
463
451
  const shimPath = path.join(projectRoot, adapter.commandDir, shim);
464
452
  checks.push({
465
453
  name: `shim:${harness}:${shim.replace(".md", "")}`,
@@ -476,14 +464,8 @@ export async function doctorChecks(projectRoot, options = {}) {
476
464
  const hasCcCommand = content.includes("/cc");
477
465
  const hasCcNext = content.includes("/cc-next");
478
466
  const hasCcLearn = content.includes("/cc-learn");
479
- const hasCcStatus = content.includes("/cc-status");
480
- const hasCcTree = content.includes("/cc-tree");
481
- const hasCcDiff = content.includes("/cc-diff");
482
- const hasCcFeature = content.includes("/cc-feature");
483
- const hasCcTddLog = content.includes("/cc-tdd-log");
484
- const hasCcRetro = content.includes("/cc-retro");
485
- const hasCcRewind = content.includes("/cc-rewind");
486
- const hasCcRewindAck = content.includes("/cc-rewind-ack");
467
+ const hasCcView = content.includes("/cc-view");
468
+ const hasCcOps = content.includes("/cc-ops");
487
469
  const hasVerification = content.includes("Verification Discipline");
488
470
  const hasMinimalMarker = content.includes("intentionally minimal for cross-project use");
489
471
  const hasMetaSkillPointer = content.includes(".cclaw/skills/using-cclaw/SKILL.md");
@@ -491,14 +473,8 @@ export async function doctorChecks(projectRoot, options = {}) {
491
473
  && hasCcCommand
492
474
  && hasCcNext
493
475
  && hasCcLearn
494
- && hasCcStatus
495
- && hasCcTree
496
- && hasCcDiff
497
- && hasCcFeature
498
- && hasCcTddLog
499
- && hasCcRetro
500
- && hasCcRewind
501
- && hasCcRewindAck
476
+ && hasCcView
477
+ && hasCcOps
502
478
  && hasVerification
503
479
  && hasMinimalMarker
504
480
  && hasMetaSkillPointer;
@@ -1067,7 +1043,7 @@ export async function doctorChecks(projectRoot, options = {}) {
1067
1043
  ok: staleStages.length === 0,
1068
1044
  details: staleStages.length === 0
1069
1045
  ? "no stale stages pending acknowledgement"
1070
- : `stale stages must be acknowledged via /cc-rewind-ack: ${staleStages.join(", ")}`
1046
+ : `stale stages must be acknowledged via /cc-ops rewind-ack: ${staleStages.join(", ")}`
1071
1047
  });
1072
1048
  const retroRequired = flowState.completedStages.includes("ship");
1073
1049
  const retroComplete = !retroRequired ||
@@ -1079,7 +1055,7 @@ export async function doctorChecks(projectRoot, options = {}) {
1079
1055
  ? retroRequired
1080
1056
  ? `retro gate complete (${flowState.retro.compoundEntries} compound entries)`
1081
1057
  : "retro gate not required yet (ship not completed)"
1082
- : "retro gate incomplete: run /cc-retro and record at least one compound knowledge entry"
1058
+ : "retro gate incomplete: run /cc-ops retro and record at least one compound knowledge entry"
1083
1059
  });
1084
1060
  const flowSnapshotPath = path.join(projectRoot, RUNTIME_ROOT, "state", "flow-state.snapshot.json");
1085
1061
  const flowSnapshotExists = await exists(flowSnapshotPath);
@@ -10,6 +10,7 @@ export interface HarnessAdapter {
10
10
  structuredAsk: "AskUserQuestion" | "AskQuestion" | "plain-text";
11
11
  };
12
12
  }
13
+ export declare function harnessShimFileNames(): string[];
13
14
  export declare const HARNESS_ADAPTERS: Record<HarnessId, HarnessAdapter>;
14
15
  export type HarnessTier = "tier1" | "tier2" | "tier3";
15
16
  export declare function harnessTier(harnessId: HarnessId): HarnessTier;
@@ -18,6 +18,12 @@ const UTILITY_SHIMS = [
18
18
  skillFolder: "flow-next-step",
19
19
  commandFile: "next.md"
20
20
  },
21
+ {
22
+ fileName: "cc-view.md",
23
+ command: "view",
24
+ skillFolder: "flow-view",
25
+ commandFile: "view.md"
26
+ },
21
27
  {
22
28
  fileName: "cc-learn.md",
23
29
  command: "learn",
@@ -25,54 +31,15 @@ const UTILITY_SHIMS = [
25
31
  commandFile: "learn.md"
26
32
  },
27
33
  {
28
- fileName: "cc-status.md",
29
- command: "status",
30
- skillFolder: "flow-status",
31
- commandFile: "status.md"
32
- },
33
- {
34
- fileName: "cc-tree.md",
35
- command: "tree",
36
- skillFolder: "flow-tree",
37
- commandFile: "tree.md"
38
- },
39
- {
40
- fileName: "cc-diff.md",
41
- command: "diff",
42
- skillFolder: "flow-diff",
43
- commandFile: "diff.md"
44
- },
45
- {
46
- fileName: "cc-feature.md",
47
- command: "feature",
48
- skillFolder: "feature-workspaces",
49
- commandFile: "feature.md"
50
- },
51
- {
52
- fileName: "cc-tdd-log.md",
53
- command: "tdd-log",
54
- skillFolder: "tdd-cycle-log",
55
- commandFile: "tdd-log.md"
56
- },
57
- {
58
- fileName: "cc-retro.md",
59
- command: "retro",
60
- skillFolder: "flow-retro",
61
- commandFile: "retro.md"
62
- },
63
- {
64
- fileName: "cc-rewind.md",
65
- command: "rewind",
66
- skillFolder: "flow-rewind",
67
- commandFile: "rewind.md"
68
- },
69
- {
70
- fileName: "cc-rewind-ack.md",
71
- command: "rewind-ack",
72
- skillFolder: "flow-rewind",
73
- commandFile: "rewind-ack.md"
34
+ fileName: "cc-ops.md",
35
+ command: "ops",
36
+ skillFolder: "flow-ops",
37
+ commandFile: "ops.md"
74
38
  }
75
39
  ];
40
+ export function harnessShimFileNames() {
41
+ return ["cc.md", ...UTILITY_SHIMS.map((shim) => shim.fileName)];
42
+ }
76
43
  export const HARNESS_ADAPTERS = {
77
44
  claude: {
78
45
  id: "claude",
@@ -166,15 +133,9 @@ When in doubt, prefer **non-trivial** — the quick track is opt-in and only saf
166
133
  |---|---|
167
134
  | \`/cc\` | **Entry point.** No args = resume current stage. With prompt = classify task and start the right flow. |
168
135
  | \`/cc-next\` | **Progression.** Advances to the next stage when current is complete. |
136
+ | \`/cc-view\` | **Read-only router.** Unified entry for status/tree/diff views. |
169
137
  | \`/cc-learn\` | **Cross-cutting.** Capture or review project knowledge (append-only JSONL). |
170
- | \`/cc-status\` | **Read-only.** Visual snapshot with progress bar, gate delta, and delegations. |
171
- | \`/cc-tree\` | **Read-only.** Deep flow tree for stages, artifacts, and stale markers. |
172
- | \`/cc-diff\` | **Delta map.** Compare current flow-state with saved baseline snapshot. |
173
- | \`/cc-feature\` | **Workspace.** Manage active feature snapshots for parallel tracks. |
174
- | \`/cc-tdd-log\` | **Evidence.** Record RED/GREEN/REFACTOR cycle events for enforcement. |
175
- | \`/cc-retro\` | **Learning gate.** Mandatory retrospective before archive after ship. |
176
- | \`/cc-rewind\` | **Recovery.** Rewind flow to an earlier stage and invalidate downstream work. |
177
- | \`/cc-rewind-ack\` | **Recovery.** Clear stale-stage markers after redo. |
138
+ | \`/cc-ops\` | **Operations router.** Unified entry for feature/tdd-log/retro/archive/rewind actions. |
178
139
 
179
140
  **Stage order:** brainstorm > scope > design > spec > plan > tdd > review > ship.
180
141
  \`/cc-next\` loads the right stage skill automatically. Gates must pass before handoff.
package/dist/install.js CHANGED
@@ -2,7 +2,7 @@ import { execFile } from "node:child_process";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { promisify } from "node:util";
5
- import { COMMAND_FILE_ORDER, REQUIRED_DIRS, RUNTIME_ROOT, UTILITY_COMMANDS } from "./constants.js";
5
+ import { COMMAND_FILE_ORDER, REQUIRED_DIRS, RUNTIME_ROOT } from "./constants.js";
6
6
  import { writeConfig, createDefaultConfig, createProfileConfig, readConfig, configPath } from "./config.js";
7
7
  import { commandContract } from "./content/contracts.js";
8
8
  import { contextModeFiles, createInitialContextModeState } from "./content/contexts.js";
@@ -12,9 +12,12 @@ import { startCommandContract, startCommandSkillMarkdown } from "./content/start
12
12
  import { statusCommandContract, statusCommandSkillMarkdown } from "./content/status-command.js";
13
13
  import { treeCommandContract, treeCommandSkillMarkdown } from "./content/tree-command.js";
14
14
  import { diffCommandContract, diffCommandSkillMarkdown } from "./content/diff-command.js";
15
+ import { viewCommandContract, viewCommandSkillMarkdown } from "./content/view-command.js";
16
+ import { opsCommandContract, opsCommandSkillMarkdown } from "./content/ops-command.js";
15
17
  import { featureCommandContract, featureCommandSkillMarkdown } from "./content/feature-command.js";
16
18
  import { tddLogCommandContract, tddLogCommandSkillMarkdown } from "./content/tdd-log-command.js";
17
19
  import { retroCommandContract, retroCommandSkillMarkdown } from "./content/retro-command.js";
20
+ import { archiveCommandContract, archiveCommandSkillMarkdown } from "./content/archive-command.js";
18
21
  import { rewindAcknowledgeCommandContract, rewindCommandContract, rewindCommandSkillMarkdown } from "./content/rewind-command.js";
19
22
  import { subagentDrivenDevSkill, parallelAgentsSkill } from "./content/subagents.js";
20
23
  import { sessionHooksSkillMarkdown } from "./content/session-hooks.js";
@@ -35,7 +38,7 @@ import { HOOK_EVENTS_BY_HARNESS, HOOK_SEMANTIC_EVENTS } from "./content/hook-eve
35
38
  import { createInitialFlowState } from "./flow-state.js";
36
39
  import { ensureDir, exists, writeFileSafe } from "./fs-utils.js";
37
40
  import { ensureGitignore, removeGitignorePatterns } from "./gitignore.js";
38
- import { HARNESS_ADAPTERS, harnessTier, syncHarnessShims, removeCclawFromAgentsMd } from "./harness-adapters.js";
41
+ import { HARNESS_ADAPTERS, harnessShimFileNames, harnessTier, syncHarnessShims, removeCclawFromAgentsMd } from "./harness-adapters.js";
39
42
  import { validateHookDocument } from "./hook-schema.js";
40
43
  import { ensureRunSystem, readFlowState } from "./runs.js";
41
44
  const OPENCODE_PLUGIN_REL_PATH = ".opencode/plugins/cclaw-plugin.mjs";
@@ -202,13 +205,16 @@ async function writeSkills(projectRoot, config) {
202
205
  await writeFileSafe(runtimePath(projectRoot, "skills", "learnings", "SKILL.md"), learnSkillMarkdown());
203
206
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-next-step", "SKILL.md"), nextCommandSkillMarkdown());
204
207
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-start", "SKILL.md"), startCommandSkillMarkdown());
208
+ await writeFileSafe(runtimePath(projectRoot, "skills", "flow-view", "SKILL.md"), viewCommandSkillMarkdown());
205
209
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-status", "SKILL.md"), statusCommandSkillMarkdown());
206
210
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-tree", "SKILL.md"), treeCommandSkillMarkdown());
207
211
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-diff", "SKILL.md"), diffCommandSkillMarkdown());
212
+ await writeFileSafe(runtimePath(projectRoot, "skills", "flow-ops", "SKILL.md"), opsCommandSkillMarkdown());
208
213
  await writeFileSafe(runtimePath(projectRoot, "skills", "feature-workspaces", "SKILL.md"), featureCommandSkillMarkdown());
209
214
  await writeFileSafe(runtimePath(projectRoot, "skills", "tdd-cycle-log", "SKILL.md"), tddLogCommandSkillMarkdown());
210
215
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-retro", "SKILL.md"), retroCommandSkillMarkdown());
211
216
  await writeFileSafe(runtimePath(projectRoot, "skills", "flow-rewind", "SKILL.md"), rewindCommandSkillMarkdown());
217
+ await writeFileSafe(runtimePath(projectRoot, "skills", "flow-archive", "SKILL.md"), archiveCommandSkillMarkdown());
212
218
  await writeFileSafe(runtimePath(projectRoot, "skills", "subagent-dev", "SKILL.md"), subagentDrivenDevSkill());
213
219
  await writeFileSafe(runtimePath(projectRoot, "skills", "parallel-dispatch", "SKILL.md"), parallelAgentsSkill());
214
220
  await writeFileSafe(runtimePath(projectRoot, "skills", "session", "SKILL.md"), sessionHooksSkillMarkdown());
@@ -260,13 +266,16 @@ async function writeSkills(projectRoot, config) {
260
266
  async function writeUtilityCommands(projectRoot) {
261
267
  await writeFileSafe(runtimePath(projectRoot, "commands", "learn.md"), learnCommandContract());
262
268
  await writeFileSafe(runtimePath(projectRoot, "commands", "next.md"), nextCommandContract());
269
+ await writeFileSafe(runtimePath(projectRoot, "commands", "view.md"), viewCommandContract());
263
270
  await writeFileSafe(runtimePath(projectRoot, "commands", "start.md"), startCommandContract());
264
271
  await writeFileSafe(runtimePath(projectRoot, "commands", "status.md"), statusCommandContract());
265
272
  await writeFileSafe(runtimePath(projectRoot, "commands", "tree.md"), treeCommandContract());
266
273
  await writeFileSafe(runtimePath(projectRoot, "commands", "diff.md"), diffCommandContract());
274
+ await writeFileSafe(runtimePath(projectRoot, "commands", "ops.md"), opsCommandContract());
267
275
  await writeFileSafe(runtimePath(projectRoot, "commands", "feature.md"), featureCommandContract());
268
276
  await writeFileSafe(runtimePath(projectRoot, "commands", "tdd-log.md"), tddLogCommandContract());
269
277
  await writeFileSafe(runtimePath(projectRoot, "commands", "retro.md"), retroCommandContract());
278
+ await writeFileSafe(runtimePath(projectRoot, "commands", "archive.md"), archiveCommandContract());
270
279
  await writeFileSafe(runtimePath(projectRoot, "commands", "rewind.md"), rewindCommandContract());
271
280
  await writeFileSafe(runtimePath(projectRoot, "commands", "rewind-ack.md"), rewindAcknowledgeCommandContract());
272
281
  }
@@ -695,7 +704,7 @@ version: 0.1.0 # semver; bump when hardGate or algorithm
695
704
 
696
705
  | Field | Type | Required | Meaning |
697
706
  |---|---|---|---|
698
- | \`name\` | string (kebab-case) | yes | Unique id used by the router and by \`/cc-status\` diagnostics. |
707
+ | \`name\` | string (kebab-case) | yes | Unique id used by the router and by \`/cc-view status\` diagnostics. |
699
708
  | \`description\` | string ≤180 chars (single line OR YAML \`>\` folded) | yes | Drives semantic routing. Include trigger + action. |
700
709
  | \`stages\` | array of flow stages | no | When present, the meta-skill only surfaces this skill during those stages. Omit for "any stage". |
701
710
  | \`triggers\` | array of strings | no | Extra literal substrings that route to this skill when found in the user prompt or the active artifact. |
@@ -1000,13 +1009,7 @@ async function cleanLegacyArtifacts(projectRoot) {
1000
1009
  }
1001
1010
  }
1002
1011
  async function cleanStaleFiles(projectRoot) {
1003
- const expectedShimFiles = new Set([
1004
- ...COMMAND_FILE_ORDER.map((stage) => `viby-${stage}.md`),
1005
- ...UTILITY_COMMANDS.map((cmd) => `viby-${cmd}.md`),
1006
- ...COMMAND_FILE_ORDER.map((stage) => `cc-${stage}.md`),
1007
- ...UTILITY_COMMANDS.map((cmd) => `cc-${cmd}.md`),
1008
- "cc.md"
1009
- ]);
1012
+ const expectedShimFiles = new Set(harnessShimFileNames());
1010
1013
  for (const adapter of Object.values(HARNESS_ADAPTERS)) {
1011
1014
  const commandDir = path.join(projectRoot, adapter.commandDir);
1012
1015
  if (!(await exists(commandDir)))
package/dist/policy.js CHANGED
@@ -91,7 +91,7 @@ export async function policyChecks(projectRoot, options = {}) {
91
91
  { file: runtimeFile("skills/learnings/SKILL.md"), needle: "## HARD-GATE", name: "utility_skill:learnings:hard_gate" },
92
92
  { file: runtimeFile("commands/learn.md"), needle: "## Subcommands", name: "utility_command:learn:subcommands" },
93
93
  { file: runtimeFile("commands/status.md"), needle: "bar:", name: "utility_command:status:visual_bar" },
94
- { file: runtimeFile("commands/status.md"), needle: "/cc-tree · /cc-diff", name: "utility_command:status:tree_diff_link" },
94
+ { file: runtimeFile("commands/status.md"), needle: "/cc-view tree · /cc-view diff", name: "utility_command:status:tree_diff_link" },
95
95
  { file: runtimeFile("commands/tree.md"), needle: "## Algorithm", name: "utility_command:tree:algorithm" },
96
96
  { file: runtimeFile("skills/flow-tree/SKILL.md"), needle: "## Protocol", name: "utility_skill:tree:protocol" },
97
97
  { file: runtimeFile("skills/flow-tree/SKILL.md"), needle: "## HARD-GATE", name: "utility_skill:tree:hard_gate" },
package/dist/runs.js CHANGED
@@ -564,7 +564,7 @@ export async function archiveRun(projectRoot, featureName, options = {}) {
564
564
  }
565
565
  if (retroGate.required && !retroGate.completed && !skipRetro) {
566
566
  throw new Error("Archive blocked: retro gate is required after ship completion. " +
567
- "Run /cc-retro and append at least one compound knowledge entry, or re-run archive with --skip-retro and --retro-reason.");
567
+ "Run /cc-ops retro and append at least one compound knowledge entry, or re-run /cc-ops archive with --skip-retro and --retro-reason.");
568
568
  }
569
569
  if (retroGate.completed) {
570
570
  const completedAt = sourceState.retro.completedAt ?? new Date().toISOString();
package/dist/types.d.ts CHANGED
@@ -57,13 +57,11 @@ export interface VibyConfig {
57
57
  version: string;
58
58
  flowVersion: string;
59
59
  harnesses: HarnessId[];
60
- /** When true, stage skills instruct the agent to continue to the following stage after gates pass. */
61
- autoAdvance?: boolean;
62
60
  /** Prompt guard behavior for runtime write-risk detection hooks. */
63
61
  promptGuardMode?: "advisory" | "strict";
64
62
  /** TDD red->green->refactor enforcement mode used by workflow guard hooks. */
65
63
  tddEnforcement?: "advisory" | "strict";
66
- /** Optional test file globs used by guard guidance and /cc-tdd-log docs. */
64
+ /** Optional test file globs used by guard guidance and /cc-ops tdd-log docs. */
67
65
  tddTestGlobs?: string[];
68
66
  /** When true, cclaw installs managed git pre-commit/pre-push wrappers. */
69
67
  gitHookGuards?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cclaw-cli",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "Installer-first flow toolkit for coding agents",
5
5
  "type": "module",
6
6
  "bin": {