@kisev/skills-opencode 2.4.1 → 3.0.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 CHANGED
@@ -8,13 +8,15 @@ update, and removal lifecycle.
8
8
 
9
9
  ## What It Adds
10
10
 
11
- - OpenCode slash-command adapters for installed portable skills and package tools.
11
+ - OpenCode slash-command adapters for installed portable skills.
12
12
  - Six fixed agents: `manager`, `architect`, `mapper`, `worker`, `review`, and
13
13
  `critic`.
14
- - Capability routing, `doctor`, `reconcile`, and agent-profile tooling.
14
+ - Capability routing plus direct CLI diagnostics, reconciliation, and profiles.
15
15
  - Optional `rules-injector`, `rtk`, and `zed-bell` plugin wrappers.
16
16
 
17
- The package does not contain, install, update, or remove portable skills.
17
+ The package does not contain, install, or update portable skills. Confirmed
18
+ reconcile can invoke the pinned `skills` CLI directly to remove a marked retired
19
+ skill from OpenCode and Codex.
18
20
 
19
21
  ## Requirements
20
22
 
@@ -29,7 +31,7 @@ assets:
29
31
 
30
32
  ```shell
31
33
  npm install --save-exact @kisev/skills-opencode
32
- npx --yes @kisev/skills-opencode@latest install --scope project --dry-run
34
+ npx --yes @kisev/skills-opencode@latest install --dry-run
33
35
  ```
34
36
 
35
37
  Run the exact confirmation command printed by the preview. If the selected
package/README.ru.md CHANGED
@@ -8,16 +8,16 @@
8
8
 
9
9
  ## Что добавляет пакет
10
10
 
11
- - Адаптеры слеш-команд OpenCode для установленных переносимых навыков и
12
- инструментов пакета.
11
+ - Адаптеры слеш-команд OpenCode для установленных переносимых навыков.
13
12
  - Шесть агентов с фиксированными ролями: `manager`, `architect`, `mapper`, `worker`,
14
13
  `review` и `critic`.
15
- - Маршрутизация по возможностям, `doctor`, `reconcile` и управление профилями
16
- агентов.
14
+ - Маршрутизация по возможностям и прямой CLI для `doctor`, `reconcile` и
15
+ управления профилями агентов.
17
16
  - Необязательные обертки плагинов `rules-injector`, `rtk` и `zed-bell`.
18
17
 
19
- Пакет не содержит, не устанавливает, не обновляет и не удаляет переносимые
20
- навыки.
18
+ Пакет не содержит, не устанавливает и не обновляет переносимые навыки. После
19
+ подтверждения `reconcile` может напрямую вызвать закреплённую версию `skills` и
20
+ удалить помеченный устаревший навык из OpenCode и Codex.
21
21
 
22
22
  ## Требования
23
23
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  ```shell
34
34
  npm install --save-exact @kisev/skills-opencode
35
- npx --yes @kisev/skills-opencode@latest install --scope project --dry-run
35
+ npx --yes @kisev/skills-opencode@latest install --dry-run
36
36
  ```
37
37
 
38
38
  Выполните точную команду подтверждения, которую выведет предварительный просмотр.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Adapts the doit engineering workflow to OpenCode routing. Russian triggers: менеджер, координация.
2
+ description: Coordinates bounded OpenCode routing and execution. Russian triggers: менеджер, координация.
3
3
  mode: primary
4
4
  steps: 12
5
5
  permission:
@@ -16,15 +16,17 @@ permission:
16
16
 
17
17
  # Manager
18
18
 
19
- `doit` is the sole coordinator and owns evidence -> plan -> confirmation ->
20
- execution -> checks -> report. Adapt that workflow to OpenCode only: preserve its
21
- state, confirmations, cards, reports, and terminal outcomes. Do not implement a
22
- second lifecycle, make independent plan decisions, or infer completion.
19
+ Own the OpenCode lifecycle for routed work: evidence -> plan -> authorization ->
20
+ execution -> checks -> report. Preserve task state, confirmations, execution
21
+ cards, reports, and terminal outcomes. Do not infer completion from missing or
22
+ invalid subordinate evidence.
23
23
 
24
24
  Use the package `route` tool for delegation. It resolves the host inventory and
25
25
  selects one destination: exploration to `mapper`, architecture to `architect`,
26
26
  implementation to `worker`, or review to `review` or exactly one selected critic.
27
- Documentation and quick requests stay with `doit`; do not invent a route for them.
27
+ Handle read-only quick requests directly when delegation is unnecessary. Route
28
+ write-capable documentation and other changes as implementation; do not invent a
29
+ separate destination.
28
30
  Never pass caller-supplied agents, capabilities, tools, models, or availability
29
31
  to routing. Unknown or user-owned profiles require an explicit trusted override.
30
32
 
@@ -32,5 +34,5 @@ Forward the original task, evidence, exact card, confirmation references, and
32
34
  structured result unchanged. Validate machine contracts at each OpenCode Task
33
35
  dispatch and result boundary. Resolve disagreements claim-by-claim against the
34
36
  supplied evidence and record the evidence reference; unresolved conflicts remain
35
- blocked and return to `doit`. Never vote between agents or start another worker or
37
+ blocked and return to the manager. Never vote between agents or start another worker or
36
38
  critic from manager prose.
@@ -18,10 +18,8 @@
18
18
  "commit-msg",
19
19
  "docs-prepare",
20
20
  "docs-review",
21
- "doit",
22
21
  "goal",
23
22
  "humanize",
24
- "lsp-report",
25
23
  "mattermost",
26
24
  "mr-prepare",
27
25
  "release-prepare",
@@ -49,10 +47,8 @@
49
47
  "commit-msg",
50
48
  "docs-prepare",
51
49
  "docs-review",
52
- "doit",
53
50
  "goal",
54
51
  "humanize",
55
- "lsp-report",
56
52
  "mattermost",
57
53
  "mr-prepare",
58
54
  "release-prepare",
@@ -69,13 +65,9 @@
69
65
  "team-retro",
70
66
  "team-roadmap",
71
67
  "team-sprint-close",
72
- "team-sprint-start",
73
- "capabilities",
74
- "doctor",
75
- "reconcile",
76
- "agent-profiles"
68
+ "team-sprint-start"
77
69
  ],
78
- "removed": ["attempt", "schedule", "usage", "overview"],
70
+ "removed": ["attempt", "schedule", "usage", "overview", "doit", "lsp-report"],
79
71
  "removed_paths": [
80
72
  "skills/attempt",
81
73
  "skills/schedule",
@@ -85,6 +77,14 @@
85
77
  "skills/skill-improver",
86
78
  "skills/walkthrough",
87
79
  "skills/team-workflow",
80
+ "skills/doit",
81
+ "skills/lsp-report",
82
+ "commands/agent-profiles.md",
83
+ "commands/capabilities.md",
84
+ "commands/doctor.md",
85
+ "commands/doit.md",
86
+ "commands/lsp-report.md",
87
+ "commands/reconcile.md",
88
88
  "commands/route.md",
89
89
  "commands/mr-review.md",
90
90
  "commands/task-prepare-batch.md",
@@ -141,6 +141,11 @@
141
141
  "commands/attempt-show.md": "e7948f593d2188d8bc240af28474383f9276fe14a0d8699770058ef3d7f24fd1",
142
142
  "commands/critic-add.md": "08598adb4025b7f2c885bc37d11675971762f34edbe9be96b69deaa47b78a16b",
143
143
  "commands/critic-remove.md": "cb3559ffeee8746d747c33ad6c2c7de0b1990319a4f7ec48dd39dbc4b2f82d38",
144
+ "commands/agent-profiles.md": "e04f4aef9a2e9cf9410279adc07301f654dc835d53c950ed8504ee369de49718",
145
+ "commands/capabilities.md": "a49820446cb9378bdaaa15cddb927aad53f65a8c37113c1e75791b27bfcc69f9",
146
+ "commands/doctor.md": "2005324ff1cc4d039ad803b8dedc94f0cceded794947c5641584cf2b3ced66a9",
147
+ "commands/doit.md": "af43f65e5035137b628647e724d5e49ed054d20e6be04d28f944834d9bb4ec0e",
148
+ "commands/lsp-report.md": "77c39db34d7fc01f67ba20d78d7e5745332c64f51b8f18967e3311c7e9a2ede7",
144
149
  "commands/mr-review.md": "f9376224cc838b59f052aabc70d89750f64799b90cc89b4adf7d2abb4e8819c4",
145
150
  "commands/multi-run-cancel.md": "f64a9e849ec4d7d11f61204d58cfd00b275fba79b4117802c53bbc2cab6094d4",
146
151
  "commands/multi-run-compare.md": "e72131f94dfc2e4b8f071d063efb4ce800634969b00258e77b1a84d41ff74490",
@@ -149,6 +154,7 @@
149
154
  "commands/multi-run-status.md": "dabe6530845097a7b0e43c24016ba380396074bb433de4c61370799ea81af977",
150
155
  "commands/overview.md": "c0f2f62c12945daf375824c9c6117628686fb5ba053fc6f4db617a5e2b3be657",
151
156
  "commands/route.md": "49c1def09a6ef86aa62e024b531ef7c66c01f4b2e34e629205bf9753f133b60a",
157
+ "commands/reconcile.md": "d92c2b9cef3586164a30b736b082b7b15be13b4cdc060612fa4307e0df60506a",
152
158
  "commands/schedule-add.md": "aff7099cc5cc233e4d9373a02578d117cf3625d04e7db3c5cb93cd35a52d97f4",
153
159
  "commands/schedule-disable.md": "ef638a710a1a8640d331aaa5b720ebe26448bcca812e3cd6560a386d608d0446",
154
160
  "commands/schedule-enable.md": "f457bbfc1ac05afc76789e9d4c26517678f29acd33fcaade0a6412af6c2f2f13",
package/dist/catalog.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export declare const CATALOG: {
2
- readonly skills: readonly ["agents-md", "askme", "ast-grep", "code-explain", "code-review", "commit-msg", "docs-prepare", "docs-review", "doit", "goal", "humanize", "lsp-report", "mattermost", "mr-prepare", "release-prepare", "release-review", "rtk", "skill-improve", "slides-prompts-prepare", "spec-manage", "stopit", "briefing", "task-prepare", "task-review", "task-triage", "team-retro", "team-roadmap", "team-sprint-close", "team-sprint-start"];
2
+ readonly skills: readonly ["agents-md", "askme", "ast-grep", "code-explain", "code-review", "commit-msg", "docs-prepare", "docs-review", "goal", "humanize", "mattermost", "mr-prepare", "release-prepare", "release-review", "rtk", "skill-improve", "slides-prompts-prepare", "spec-manage", "stopit", "briefing", "task-prepare", "task-review", "task-triage", "team-retro", "team-roadmap", "team-sprint-close", "team-sprint-start"];
3
3
  readonly plugins: readonly ["rules-injector", "rtk", "zed-bell"];
4
4
  readonly agents: readonly ["manager", "architect", "mapper", "worker", "review", "critic"];
5
- readonly package_commands: readonly ["capabilities", "doctor", "reconcile", "agent-profiles"];
6
- readonly tools: readonly ["capabilities", "route", "doctor", "agent_profiles", "reconcile"];
5
+ readonly package_commands: readonly [];
6
+ readonly tools: readonly ["route"];
7
7
  readonly version: string;
8
8
  };
package/dist/catalog.js CHANGED
@@ -9,10 +9,8 @@ export const CATALOG = {
9
9
  "commit-msg",
10
10
  "docs-prepare",
11
11
  "docs-review",
12
- "doit",
13
12
  "goal",
14
13
  "humanize",
15
- "lsp-report",
16
14
  "mattermost",
17
15
  "mr-prepare",
18
16
  "release-prepare",
@@ -33,7 +31,7 @@ export const CATALOG = {
33
31
  ],
34
32
  plugins: ["rules-injector", "rtk", "zed-bell"],
35
33
  agents: ["manager", "architect", "mapper", "worker", "review", "critic"],
36
- package_commands: ["capabilities", "doctor", "reconcile", "agent-profiles"],
37
- tools: ["capabilities", "route", "doctor", "agent_profiles", "reconcile"],
34
+ package_commands: [],
35
+ tools: ["route"],
38
36
  version: requirePackageVersion(),
39
37
  };
@@ -2,6 +2,7 @@ import type { AgentInventory, AgentProfilePlan } from "./agent-profiles.js";
2
2
  import type { Plan as InstallerPlan } from "./installer.js";
3
3
  import type { ReconcilePlan } from "./reconcile.js";
4
4
  import type { DoctorReport } from "./doctor.js";
5
+ import type { Scope } from "./lifecycle.js";
5
6
  type DisplayPlan = InstallerPlan | AgentProfilePlan;
6
7
  export declare function terminalSafe(value: string): string;
7
8
  export declare function renderPlan(plan: DisplayPlan, options: {
@@ -10,6 +11,7 @@ export declare function renderPlan(plan: DisplayPlan, options: {
10
11
  }): string;
11
12
  export declare function renderInventory(inventory: AgentInventory): string;
12
13
  export declare function shellCommand(arguments_: readonly string[]): string;
14
+ export declare function scopeArguments(scope: Scope): [] | ["--global"];
13
15
  export declare function renderReconcile(plan: ReconcilePlan, options: {
14
16
  applied: boolean;
15
17
  confirmationCommand?: string;
@@ -165,10 +165,16 @@ export function renderInventory(inventory) {
165
165
  ].join("\n")}\n`;
166
166
  }
167
167
  export function shellCommand(arguments_) {
168
- return ["npx", "--yes", `@kisev/skills-opencode@${CATALOG.version}`, ...arguments_]
168
+ return commandLine(["npx", "--yes", `@kisev/skills-opencode@${CATALOG.version}`, ...arguments_]);
169
+ }
170
+ function commandLine(arguments_) {
171
+ return arguments_
169
172
  .map((value) => /^[A-Za-z0-9_./:@=-]+$/.test(value) ? value : `'${value.replaceAll("'", `'"'"'`)}'`)
170
173
  .join(" ");
171
174
  }
175
+ export function scopeArguments(scope) {
176
+ return scope === "global" ? ["--global"] : [];
177
+ }
172
178
  export function renderReconcile(plan, options) {
173
179
  const lines = [
174
180
  `Reconcile (${plan.scope})`,
@@ -183,9 +189,18 @@ export function renderReconcile(plan, options) {
183
189
  ` unknown: ${plan.unknown.length}`,
184
190
  ` conflicts: ${plan.conflicts.length}`,
185
191
  ` diagnostic-state-only: ${plan.diagnostic_state_only.length}`,
192
+ ` operations: ${plan.operations.length}`,
186
193
  ];
187
194
  if (plan.retired.length)
188
195
  lines.push("", "Retired:", ...plan.retired.slice(0, 20).map((entry) => ` ${terminalSafe(entry.path)}`));
196
+ if (plan.renamed.length)
197
+ lines.push("", "Renamed:", ...plan.renamed.map((entry) => ` ${terminalSafe(entry.path)} -> ${terminalSafe(entry.replacement ?? "unknown")}`));
198
+ if (plan.unknown.length)
199
+ lines.push("", "Unknown (preserved):", ...plan.unknown.map((entry) => ` ${terminalSafe(entry.path)} (${terminalSafe(entry.reason)})`));
200
+ if (plan.operations.length)
201
+ lines.push("", "Operations:", ...plan.operations.map((entry) => ` ${entry.operation}: ${terminalSafe(entry.path)}${entry.via ? ` via ${entry.via}` : ""}`));
202
+ if (plan.portable_cleanup)
203
+ lines.push("", "Direct portable cleanup after confirmation:", ` ${commandLine(plan.portable_cleanup.command)}`);
189
204
  if (plan.conflicts.length)
190
205
  lines.push("", "Conflicts:", ...plan.conflicts.map((entry) => ` ${terminalSafe(entry.path)} (${terminalSafe(entry.reason)})`));
191
206
  if (plan.modified_managed.length)
@@ -195,10 +210,13 @@ export function renderReconcile(plan, options) {
195
210
  if (blocked) {
196
211
  lines.push("", "Blocked:");
197
212
  if (plan.modified_managed.length)
198
- lines.push(` Update managed assets first: ${shellCommand(["install", "--scope", plan.scope, "--dry-run"])}`, " Apply the exact confirmation command from that installer preview, then build a new reconcile preview.");
213
+ lines.push(` Update managed assets first: ${shellCommand(["install", ...scopeArguments(plan.scope), "--dry-run"])}`, " Apply the exact confirmation command from that installer preview, then build a new reconcile preview.");
199
214
  if (plan.conflicts.length)
200
215
  lines.push(" Manually resolve every ownership conflict listed above before reconciling.");
201
216
  }
217
+ else if (!plan.confirmable) {
218
+ lines.push("", "No reconciliation changes are required.");
219
+ }
202
220
  else if (options.confirmationCommand) {
203
221
  if (plan.superseded_plan)
204
222
  lines.push("", "Superseded plan:", ` kind: ${terminalSafe(plan.superseded_plan.kind)}`, ` confirmation: ${terminalSafe(plan.superseded_plan.confirmation_digest)}`, ` created: ${terminalSafe(plan.superseded_plan.created_at)}`, ` expires: ${terminalSafe(plan.superseded_plan.expires_at)}`);
@@ -216,10 +234,10 @@ export function renderDoctor(report) {
216
234
  const actionable = report.checks.filter((item) => item.status === "fail" || item.status === "warn");
217
235
  const next = new Set(actionable.flatMap((item) => item.remediation ?? []));
218
236
  if (report.conflicts.length) {
219
- next.add(shellCommand(["reconcile", "--scope", report.scope, "--dry-run"]));
237
+ next.add(shellCommand(["reconcile", ...scopeArguments(report.scope), "--dry-run"]));
220
238
  }
221
239
  if (actionable.some((item) => item.id.startsWith("assets."))) {
222
- next.add(shellCommand(["install", "--scope", report.scope, "--dry-run"]));
240
+ next.add(shellCommand(["install", ...scopeArguments(report.scope), "--dry-run"]));
223
241
  }
224
242
  const lines = [
225
243
  `Doctor TLDR: ${report.status} (${report.scope})`,