opencode-swarm 7.89.0 → 7.90.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.
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-6k31ysgd.js";
5
- import"./index-9w07ye9b.js";
4
+ } from "./index-prppjv2q.js";
5
+ import"./index-mz2z7jtn.js";
6
6
  import"./index-6tnmt41c.js";
7
7
  import"./index-bm4f0nme.js";
8
8
  import"./index-1ccnwh54.js";
@@ -906,7 +906,7 @@ var init_executor = __esm(() => {
906
906
  // package.json
907
907
  var package_default = {
908
908
  name: "opencode-swarm",
909
- version: "7.89.0",
909
+ version: "7.90.0",
910
910
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
911
911
  main: "dist/index.js",
912
912
  types: "dist/index.d.ts",
@@ -967,6 +967,10 @@ var package_default = {
967
967
  ".opencode/skills/execute",
968
968
  ".opencode/skills/phase-wrap",
969
969
  ".opencode/skills/loop",
970
+ ".opencode/skills/writing-tests",
971
+ ".opencode/skills/running-tests",
972
+ ".opencode/skills/engineering-conventions",
973
+ ".opencode/skills/commit-pr",
970
974
  "tests/fixtures/memory-recall",
971
975
  "README.md",
972
976
  "LICENSE"
@@ -977,6 +981,7 @@ var package_default = {
977
981
  typecheck: "tsc --noEmit",
978
982
  test: "bun test",
979
983
  lint: "biome lint .",
984
+ "drift:check": "bun run scripts/drift-check.ts",
980
985
  format: "biome format . --write",
981
986
  check: "biome check --write .",
982
987
  dev: "bun run build && opencode",
@@ -1404,7 +1409,11 @@ var BUNDLED_PROJECT_SKILLS = [
1404
1409
  "critic-gate",
1405
1410
  "execute",
1406
1411
  "phase-wrap",
1407
- "loop"
1412
+ "loop",
1413
+ "writing-tests",
1414
+ "running-tests",
1415
+ "engineering-conventions",
1416
+ "commit-pr"
1408
1417
  ];
1409
1418
  var MAX_SKILL_FILES = 64;
1410
1419
  var MAX_SKILL_BYTES = 512000;
@@ -30378,7 +30387,7 @@ function buildDetailedHelp(commandName, entry) {
30378
30387
  async function handleHelpCommand(ctx) {
30379
30388
  const targetCommand = ctx.args.join(" ");
30380
30389
  if (!targetCommand) {
30381
- const { buildHelpText } = await import("./index-dprk5c5f.js");
30390
+ const { buildHelpText } = await import("./index-q3265fxa.js");
30382
30391
  return buildHelpText();
30383
30392
  }
30384
30393
  const tokens = targetCommand.split(/\s+/);
@@ -30387,7 +30396,7 @@ async function handleHelpCommand(ctx) {
30387
30396
  return _internals45.buildDetailedHelp(resolved.key, resolved.entry);
30388
30397
  }
30389
30398
  const similar = _internals45.findSimilarCommands(targetCommand);
30390
- const { buildHelpText: fullHelp } = await import("./index-dprk5c5f.js");
30399
+ const { buildHelpText: fullHelp } = await import("./index-q3265fxa.js");
30391
30400
  if (similar.length > 0) {
30392
30401
  return `Command '/swarm ${targetCommand}' not found.
30393
30402
 
@@ -30520,7 +30529,7 @@ var COMMAND_REGISTRY = {
30520
30529
  },
30521
30530
  "guardrail explain": {
30522
30531
  handler: async (ctx) => {
30523
- const { handleGuardrailExplain } = await import("./guardrail-explain-hy0zz0p6.js");
30532
+ const { handleGuardrailExplain } = await import("./guardrail-explain-han9f51y.js");
30524
30533
  return handleGuardrailExplain(ctx.directory, ctx.args);
30525
30534
  },
30526
30535
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -12,7 +12,7 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-9w07ye9b.js";
15
+ } from "./index-mz2z7jtn.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-6k31ysgd.js";
4
+ } from "./index-prppjv2q.js";
5
5
  import {
6
6
  handleGuardrailLog
7
7
  } from "./index-gg589mfw.js";
@@ -78,7 +78,7 @@ import {
78
78
  handleWriteRetroCommand,
79
79
  normalizeSwarmCommandInput,
80
80
  resolveCommand
81
- } from "./index-9w07ye9b.js";
81
+ } from "./index-mz2z7jtn.js";
82
82
  import"./index-6tnmt41c.js";
83
83
  import"./index-bm4f0nme.js";
84
84
  import"./index-1ccnwh54.js";
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  getPluginLockFilePaths,
8
8
  package_default,
9
9
  resolveCommand
10
- } from "./index-9w07ye9b.js";
10
+ } from "./index-mz2z7jtn.js";
11
11
  import"./index-6tnmt41c.js";
12
12
  import"./index-bm4f0nme.js";
13
13
  import"./index-1ccnwh54.js";
@@ -1,4 +1,4 @@
1
- export declare const BUNDLED_PROJECT_SKILLS: readonly ["brainstorm", "specify", "clarify-spec", "resume", "clarify", "discover", "consult", "pre-phase-briefing", "council", "deep-dive", "deep-research", "codebase-review-swarm", "design-docs", "swarm-pr-review", "swarm-pr-feedback", "issue-ingest", "plan", "critic-gate", "execute", "phase-wrap", "loop"];
1
+ export declare const BUNDLED_PROJECT_SKILLS: readonly ["brainstorm", "specify", "clarify-spec", "resume", "clarify", "discover", "consult", "pre-phase-briefing", "council", "deep-dive", "deep-research", "codebase-review-swarm", "design-docs", "swarm-pr-review", "swarm-pr-feedback", "issue-ingest", "plan", "critic-gate", "execute", "phase-wrap", "loop", "writing-tests", "running-tests", "engineering-conventions", "commit-pr"];
2
2
  interface CopyState {
3
3
  files: number;
4
4
  bytes: number;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Single source of truth for skill mirror contracts between the OpenCode-side
3
+ * (`.opencode/skills/`) and Claude-side (`.claude/skills/`) skill trees, plus
4
+ * Codex/GitHub adapter shims (`.agents/skills/`, `.github/skills/`).
5
+ *
6
+ * Consumed by:
7
+ * - tests/unit/skills/skill-mirrors.test.ts (architect MODE mirror regression)
8
+ * - scripts/drift-check.ts (issue #1497 CI drift detector)
9
+ *
10
+ * Keeping the lists here — rather than inline in the test — means the drift
11
+ * checker and the regression test cannot themselves drift apart.
12
+ */
13
+ /**
14
+ * Architect MODE skills whose `.opencode` and `.claude` mirrors must be
15
+ * byte-identical. `.opencode` is the operative protocol loaded by
16
+ * `src/agents/architect.ts` MODE stubs; the `.claude` mirror must match so
17
+ * Claude Code and OpenCode sessions cannot diverge silently. Tuple shape is
18
+ * `[slug, opencodePath, claudePath]`.
19
+ */
20
+ export declare const MIRRORED_ARCHITECT_MODE_SKILLS: readonly [readonly ["brainstorm", ".opencode/skills/brainstorm/SKILL.md", ".claude/skills/brainstorm/SKILL.md"], readonly ["specify", ".opencode/skills/specify/SKILL.md", ".claude/skills/specify/SKILL.md"], readonly ["clarify-spec", ".opencode/skills/clarify-spec/SKILL.md", ".claude/skills/clarify-spec/SKILL.md"], readonly ["resume", ".opencode/skills/resume/SKILL.md", ".claude/skills/resume/SKILL.md"], readonly ["clarify", ".opencode/skills/clarify/SKILL.md", ".claude/skills/clarify/SKILL.md"], readonly ["discover", ".opencode/skills/discover/SKILL.md", ".claude/skills/discover/SKILL.md"], readonly ["consult", ".opencode/skills/consult/SKILL.md", ".claude/skills/consult/SKILL.md"], readonly ["pre-phase-briefing", ".opencode/skills/pre-phase-briefing/SKILL.md", ".claude/skills/pre-phase-briefing/SKILL.md"], readonly ["council", ".opencode/skills/council/SKILL.md", ".claude/skills/council/SKILL.md"], readonly ["deep-dive", ".opencode/skills/deep-dive/SKILL.md", ".claude/skills/deep-dive/SKILL.md"], readonly ["deep-research", ".opencode/skills/deep-research/SKILL.md", ".claude/skills/deep-research/SKILL.md"], readonly ["issue-ingest", ".opencode/skills/issue-ingest/SKILL.md", ".claude/skills/issue-ingest/SKILL.md"], readonly ["plan", ".opencode/skills/plan/SKILL.md", ".claude/skills/plan/SKILL.md"], readonly ["critic-gate", ".opencode/skills/critic-gate/SKILL.md", ".claude/skills/critic-gate/SKILL.md"], readonly ["execute", ".opencode/skills/execute/SKILL.md", ".claude/skills/execute/SKILL.md"], readonly ["phase-wrap", ".opencode/skills/phase-wrap/SKILL.md", ".claude/skills/phase-wrap/SKILL.md"], readonly ["design-docs", ".opencode/skills/design-docs/SKILL.md", ".claude/skills/design-docs/SKILL.md"]];
21
+ /**
22
+ * Architect MODE skills where `.opencode` is the full operative protocol and
23
+ * `.claude` is an intentionally different surface. Both must exist; byte
24
+ * identity is not required, but the divergence is documented here.
25
+ */
26
+ export declare const DIVERGENT_ARCHITECT_MODE_SKILLS: Array<{
27
+ slug: string;
28
+ opencodePath: string;
29
+ claudePath: string;
30
+ reason: string;
31
+ }>;
32
+ /**
33
+ * Architect MODE skills whose `.opencode` SKILL.md is canonical and whose
34
+ * `.claude`/`.agents` surfaces are thin adapter shims that delegate back to the
35
+ * canonical `.opencode` skill.
36
+ *
37
+ * `expectedCanonicalRef` is the relative path that each adapter SKILL.md must
38
+ * contain as a reference back to the canonical `.opencode` skill. All adapter
39
+ * shims live exactly three directory levels deep (`.{runtime}/skills/{slug}/`),
40
+ * so `../../../` always resolves to the repo root from any adapter path. If
41
+ * the directory structure changes (e.g., skills are reorganised to a flat
42
+ * layout), update `expectedCanonicalRef` entries accordingly.
43
+ */
44
+ export declare const ADAPTER_ARCHITECT_MODE_SKILLS: Array<{
45
+ slug: string;
46
+ canonicalPath: string;
47
+ adapterPaths: string[];
48
+ expectedCanonicalRef: string;
49
+ }>;
50
+ /**
51
+ * Architect MODE skills whose `.opencode` protocol is intentionally NOT mirrored
52
+ * to `.claude` (e.g. a `.claude` mirror would shadow a Claude Code built-in
53
+ * skill of the same name, or the mode is only reachable through the OpenCode
54
+ * plugin runtime).
55
+ */
56
+ export declare const OPENCODE_ONLY_ARCHITECT_MODE_SKILLS: Array<{
57
+ slug: string;
58
+ opencodePath: string;
59
+ reason: string;
60
+ }>;
61
+ /**
62
+ * Skill mirror contracts for skill pairs that are NOT architect MODE skills but
63
+ * still exist across the `.opencode`/`.claude` trees. The drift checker
64
+ * (scripts/drift-check.ts) classifies every cross-tree skill pair; without an
65
+ * entry here a both-tree pair is reported as "unclassified" so a human decides
66
+ * its contract. See issue #1497.
67
+ *
68
+ * `kind`:
69
+ * - `identical`: `.opencode` and `.claude` SKILL.md must be byte-identical.
70
+ * `canonical` records which side wins when they drift (fix direction only;
71
+ * detection is symmetric).
72
+ * - `divergent`: both must exist; content intentionally differs per runtime.
73
+ * - `opencode-only`: `.opencode` exists; no `.claude` mirror expected.
74
+ */
75
+ export declare const ADDITIONAL_SKILL_MIRROR_CONTRACTS: Array<{
76
+ slug: string;
77
+ kind: 'identical' | 'divergent' | 'opencode-only';
78
+ canonical?: '.claude' | '.opencode';
79
+ reason: string;
80
+ }>;
81
+ /**
82
+ * Top-level entries under `.opencode/skills/` that are not bundled skills and
83
+ * must be ignored by the drift checker. `generated/` holds user-generated
84
+ * skills produced at runtime (src/services/skill-generator.ts) and has no
85
+ * direct SKILL.md.
86
+ */
87
+ export declare const NON_SKILL_OPENCODE_DIRS: Set<string>;
package/dist/index.js CHANGED
@@ -69,7 +69,7 @@ var package_default;
69
69
  var init_package = __esm(() => {
70
70
  package_default = {
71
71
  name: "opencode-swarm",
72
- version: "7.89.0",
72
+ version: "7.90.0",
73
73
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
74
74
  main: "dist/index.js",
75
75
  types: "dist/index.d.ts",
@@ -130,6 +130,10 @@ var init_package = __esm(() => {
130
130
  ".opencode/skills/execute",
131
131
  ".opencode/skills/phase-wrap",
132
132
  ".opencode/skills/loop",
133
+ ".opencode/skills/writing-tests",
134
+ ".opencode/skills/running-tests",
135
+ ".opencode/skills/engineering-conventions",
136
+ ".opencode/skills/commit-pr",
133
137
  "tests/fixtures/memory-recall",
134
138
  "README.md",
135
139
  "LICENSE"
@@ -140,6 +144,7 @@ var init_package = __esm(() => {
140
144
  typecheck: "tsc --noEmit",
141
145
  test: "bun test",
142
146
  lint: "biome lint .",
147
+ "drift:check": "bun run scripts/drift-check.ts",
143
148
  format: "biome format . --write",
144
149
  check: "biome check --write .",
145
150
  dev: "bun run build && opencode",
@@ -17419,7 +17424,11 @@ var init_bundled_skills = __esm(() => {
17419
17424
  "critic-gate",
17420
17425
  "execute",
17421
17426
  "phase-wrap",
17422
- "loop"
17427
+ "loop",
17428
+ "writing-tests",
17429
+ "running-tests",
17430
+ "engineering-conventions",
17431
+ "commit-pr"
17423
17432
  ];
17424
17433
  syncedProjectSkillTargets = new Set;
17425
17434
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.89.0",
3
+ "version": "7.90.0",
4
4
  "description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -61,6 +61,10 @@
61
61
  ".opencode/skills/execute",
62
62
  ".opencode/skills/phase-wrap",
63
63
  ".opencode/skills/loop",
64
+ ".opencode/skills/writing-tests",
65
+ ".opencode/skills/running-tests",
66
+ ".opencode/skills/engineering-conventions",
67
+ ".opencode/skills/commit-pr",
64
68
  "tests/fixtures/memory-recall",
65
69
  "README.md",
66
70
  "LICENSE"
@@ -71,6 +75,7 @@
71
75
  "typecheck": "tsc --noEmit",
72
76
  "test": "bun test",
73
77
  "lint": "biome lint .",
78
+ "drift:check": "bun run scripts/drift-check.ts",
74
79
  "format": "biome format . --write",
75
80
  "check": "biome check --write .",
76
81
  "dev": "bun run build && opencode",