oh-my-githubcopilot 1.4.1 → 1.8.0-alpha.f50f59a

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 (123) hide show
  1. package/.claude-plugin/plugin.json +36 -6
  2. package/.mcp.json +17 -0
  3. package/AGENTS.md +78 -9
  4. package/CHANGELOG.md +199 -1
  5. package/README.de.md +112 -26
  6. package/README.es.md +115 -29
  7. package/README.fr.md +114 -28
  8. package/README.it.md +114 -28
  9. package/README.ja.md +112 -26
  10. package/README.ko.md +112 -26
  11. package/README.md +96 -95
  12. package/README.pt.md +116 -30
  13. package/README.ru.md +116 -30
  14. package/README.tr.md +115 -29
  15. package/README.vi.md +116 -30
  16. package/README.zh.md +112 -26
  17. package/agents/analyst.agent.md +27 -0
  18. package/agents/architect.agent.md +24 -0
  19. package/agents/code-reviewer.agent.md +24 -0
  20. package/agents/critic.agent.md +24 -0
  21. package/agents/debugger.agent.md +24 -0
  22. package/agents/designer.agent.md +24 -0
  23. package/agents/document-specialist.agent.md +24 -0
  24. package/agents/executor.agent.md +27 -0
  25. package/agents/explorer.agent.md +23 -0
  26. package/agents/git-master.agent.md +24 -0
  27. package/agents/orchestrator.agent.md +26 -0
  28. package/agents/planner.agent.md +24 -0
  29. package/agents/qa-tester.agent.md +24 -0
  30. package/agents/researcher.agent.md +18 -0
  31. package/agents/reviewer.agent.md +23 -0
  32. package/agents/scientist.agent.md +20 -0
  33. package/agents/security-reviewer.agent.md +20 -0
  34. package/agents/simplifier.agent.md +20 -0
  35. package/agents/test-engineer.agent.md +20 -0
  36. package/agents/tester.agent.md +20 -0
  37. package/agents/tracer.agent.md +24 -0
  38. package/agents/verifier.agent.md +19 -0
  39. package/agents/writer.agent.md +24 -0
  40. package/bin/omp-statusline.mjs +179 -0
  41. package/bin/omp-statusline.mjs.map +7 -0
  42. package/bin/omp-statusline.sh +21 -0
  43. package/bin/omp.mjs +709 -16
  44. package/bin/omp.mjs.map +4 -4
  45. package/dist/hooks/hud-emitter.mjs +268 -82
  46. package/dist/hooks/hud-emitter.mjs.map +4 -4
  47. package/dist/hooks/keyword-detector.mjs +100 -23
  48. package/dist/hooks/keyword-detector.mjs.map +2 -2
  49. package/dist/hooks/model-router.mjs +1 -1
  50. package/dist/hooks/model-router.mjs.map +1 -1
  51. package/dist/hooks/stop-continuation.mjs +1 -1
  52. package/dist/hooks/stop-continuation.mjs.map +1 -1
  53. package/dist/hooks/token-tracker.mjs +2 -1
  54. package/dist/hooks/token-tracker.mjs.map +2 -2
  55. package/dist/mcp/server.mjs +85 -53
  56. package/dist/mcp/server.mjs.map +4 -4
  57. package/dist/skills/setup.mjs +39 -27
  58. package/dist/skills/setup.mjs.map +4 -4
  59. package/hooks/hooks.json +39 -45
  60. package/package.json +9 -4
  61. package/plugin.json +71 -0
  62. package/skills/ai-slop-cleaner/SKILL.md +137 -0
  63. package/skills/autopilot/SKILL.md +6 -0
  64. package/skills/configure-notifications/SKILL.md +6 -0
  65. package/skills/deep-interview/SKILL.md +6 -0
  66. package/skills/doctor/SKILL.md +188 -0
  67. package/skills/ecomode/SKILL.md +6 -0
  68. package/skills/graph-context/SKILL.md +119 -0
  69. package/skills/graph-provider/SKILL.md +6 -0
  70. package/skills/graphify/SKILL.md +6 -0
  71. package/skills/graphwiki/SKILL.md +6 -0
  72. package/skills/hud/SKILL.md +6 -0
  73. package/skills/improve-codebase-architecture/SKILL.md +214 -0
  74. package/skills/interactive-menu/SKILL.md +102 -0
  75. package/skills/interview/SKILL.md +203 -0
  76. package/skills/learner/SKILL.md +6 -0
  77. package/skills/mcp-setup/SKILL.md +6 -0
  78. package/skills/note/SKILL.md +6 -0
  79. package/skills/notifications/SKILL.md +190 -0
  80. package/skills/omp-doctor/SKILL.md +146 -0
  81. package/skills/omp-plan/SKILL.md +219 -2
  82. package/skills/omp-reference/SKILL.md +174 -0
  83. package/skills/omp-setup/SKILL.md +15 -1
  84. package/skills/pipeline/SKILL.md +6 -0
  85. package/skills/psm/SKILL.md +6 -0
  86. package/skills/ralph/SKILL.md +6 -0
  87. package/skills/ralplan/SKILL.md +148 -0
  88. package/skills/release/SKILL.md +6 -0
  89. package/skills/research/SKILL.md +149 -0
  90. package/skills/session/SKILL.md +220 -0
  91. package/skills/setup/SKILL.md +6 -0
  92. package/skills/skillify/SKILL.md +66 -0
  93. package/skills/spending/SKILL.md +6 -0
  94. package/skills/swarm/SKILL.md +6 -0
  95. package/skills/swe-bench/SKILL.md +6 -0
  96. package/skills/tdd/SKILL.md +246 -0
  97. package/skills/team/SKILL.md +6 -0
  98. package/skills/trace/SKILL.md +6 -0
  99. package/skills/ultrawork/SKILL.md +6 -0
  100. package/skills/wiki/SKILL.md +6 -0
  101. package/src/agents/analyst.md +0 -103
  102. package/src/agents/architect.md +0 -169
  103. package/src/agents/code-reviewer.md +0 -135
  104. package/src/agents/critic.md +0 -196
  105. package/src/agents/debugger.md +0 -132
  106. package/src/agents/designer.md +0 -103
  107. package/src/agents/document-specialist.md +0 -111
  108. package/src/agents/executor.md +0 -120
  109. package/src/agents/explorer.md +0 -98
  110. package/src/agents/git-master.md +0 -92
  111. package/src/agents/orchestrator.md +0 -125
  112. package/src/agents/planner.md +0 -106
  113. package/src/agents/qa-tester.md +0 -129
  114. package/src/agents/researcher.md +0 -102
  115. package/src/agents/reviewer.md +0 -100
  116. package/src/agents/scientist.md +0 -150
  117. package/src/agents/security-reviewer.md +0 -132
  118. package/src/agents/simplifier.md +0 -109
  119. package/src/agents/test-engineer.md +0 -124
  120. package/src/agents/tester.md +0 -102
  121. package/src/agents/tracer.md +0 -160
  122. package/src/agents/verifier.md +0 -100
  123. package/src/agents/writer.md +0 -96
@@ -1,38 +1,50 @@
1
- // src/skills/setup.mts
2
- async function activate(input2) {
1
+ // src/skills/omp-setup.mts
2
+ import { fileURLToPath } from "url";
3
+ import { dirname, join } from "path";
4
+ var REQUIRED_COPILOT_EXPERIMENTAL_FEATURES = [
5
+ "STATUS_LINE",
6
+ "SHOW_FILE",
7
+ "EXTENSIONS",
8
+ "BACKGROUND_SESSIONS",
9
+ "CONFIGURE_COPILOT_AGENT",
10
+ "MULTI_TURN_AGENTS",
11
+ "SESSION_STORE"
12
+ ];
13
+ function getPackageRoot() {
14
+ return join(dirname(fileURLToPath(import.meta.url)), "..", "..");
15
+ }
16
+ async function activate(input) {
3
17
  const { spawn } = await import("child_process");
4
- const isNonInteractive = input2.args.includes("--non-interactive");
5
- const isMcpOnly = input2.args.includes("--mcp-only");
6
- const isSkipMcp = input2.args.includes("--skip-mcp");
7
- const baseArgs = ["bin/omp.mjs", "setup"];
8
- if (isMcpOnly) baseArgs.push("--mcp-only");
9
- if (isSkipMcp) baseArgs.push("--skip-mcp");
10
- if (isNonInteractive) baseArgs.push("--non-interactive");
18
+ const packageRoot = getPackageRoot();
19
+ const baseArgs = ["bin/omp.mjs", "setup", ...input.args];
11
20
  return new Promise((resolve) => {
12
- const child = spawn("node", baseArgs, { stdio: "inherit" });
13
- child.on("close", (code) => {
14
- if (code === 0) {
15
- resolve({ status: "ok", message: "OMP setup complete." });
16
- } else {
17
- resolve({ status: "error", message: `Setup exited with code ${code}` });
21
+ const child = spawn("node", baseArgs, {
22
+ cwd: packageRoot,
23
+ stdio: "inherit",
24
+ env: {
25
+ ...process.env,
26
+ OMP_COPILOT_REQUIRED_EXPERIMENTAL_FEATURES: process.env["OMP_COPILOT_REQUIRED_EXPERIMENTAL_FEATURES"] ?? REQUIRED_COPILOT_EXPERIMENTAL_FEATURES.join(","),
27
+ OMP_COPILOT_STATUS_LINE_COMMAND: process.env["OMP_COPILOT_STATUS_LINE_COMMAND"] ?? join(packageRoot, "bin", "omp-statusline.sh")
18
28
  }
19
29
  });
20
- child.on("error", (err) => {
21
- resolve({ status: "error", message: `Failed to spawn omp setup: ${err.message}` });
30
+ child.on("close", (code) => {
31
+ resolve({ status: code === 0 ? "ok" : "error", message: `Setup exited with code ${code}` });
22
32
  });
33
+ child.on("error", (err) => resolve({ status: "error", message: `Failed to spawn: ${err.message}` }));
23
34
  });
24
35
  }
25
- var input = JSON.parse(await readStdin());
26
- var output = await activate(input);
27
- console.log(JSON.stringify(output));
28
- async function readStdin() {
29
- const chunks = [];
30
- for await (const chunk of process.stdin) {
31
- chunks.push(chunk);
32
- }
33
- return chunks.join("");
36
+ function deactivate() {
37
+ }
38
+
39
+ // src/skills/setup.mts
40
+ async function activate2(input) {
41
+ return activate(input);
42
+ }
43
+ function deactivate2() {
44
+ deactivate();
34
45
  }
35
46
  export {
36
- activate
47
+ activate2 as activate,
48
+ deactivate2 as deactivate
37
49
  };
38
50
  //# sourceMappingURL=setup.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/skills/setup.mts"],
4
- "sourcesContent": ["/**\n * setup skill\n *\n * Orchestrates both phases of the OMP setup wizard:\n * Phase 1: Base OMP setup (SQLite DB, directory structure, first-run guidance)\n * Phase 2: MCP server configuration\n *\n * Invoked via `/setup` or `setup:` keyword.\n * For MCP-only setup, use the `mcp-setup` skill instead.\n */\n\nexport interface SkillInput {\n trigger: string;\n args: string[];\n}\n\nexport interface SkillOutput {\n status: \"ok\" | \"error\";\n message: string;\n}\n\nexport async function activate(input: SkillInput): Promise<SkillOutput> {\n const { spawn } = await import(\"child_process\");\n\n const isNonInteractive = input.args.includes(\"--non-interactive\");\n const isMcpOnly = input.args.includes(\"--mcp-only\");\n const isSkipMcp = input.args.includes(\"--skip-mcp\");\n\n const baseArgs = [\"bin/omp.mjs\", \"setup\"];\n if (isMcpOnly) baseArgs.push(\"--mcp-only\");\n if (isSkipMcp) baseArgs.push(\"--skip-mcp\");\n if (isNonInteractive) baseArgs.push(\"--non-interactive\");\n\n return new Promise((resolve) => {\n const child = spawn(\"node\", baseArgs, { stdio: \"inherit\" });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve({ status: \"ok\", message: \"OMP setup complete.\" });\n } else {\n resolve({ status: \"error\", message: `Setup exited with code ${code}` });\n }\n });\n\n child.on(\"error\", (err) => {\n resolve({ status: \"error\", message: `Failed to spawn omp setup: ${err.message}` });\n });\n });\n}\n\n// Standalone entry point\nconst input: SkillInput = JSON.parse(await readStdin());\nconst output = await activate(input);\nconsole.log(JSON.stringify(output));\n\nasync function readStdin(): Promise<string> {\n const chunks: string[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(chunk);\n }\n return chunks.join(\"\");\n}\n"],
5
- "mappings": ";AAqBA,eAAsB,SAASA,QAAyC;AACtE,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAE9C,QAAM,mBAAmBA,OAAM,KAAK,SAAS,mBAAmB;AAChE,QAAM,YAAYA,OAAM,KAAK,SAAS,YAAY;AAClD,QAAM,YAAYA,OAAM,KAAK,SAAS,YAAY;AAElD,QAAM,WAAW,CAAC,eAAe,OAAO;AACxC,MAAI,UAAW,UAAS,KAAK,YAAY;AACzC,MAAI,UAAW,UAAS,KAAK,YAAY;AACzC,MAAI,iBAAkB,UAAS,KAAK,mBAAmB;AAEvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,MAAM,QAAQ,UAAU,EAAE,OAAO,UAAU,CAAC;AAE1D,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ,EAAE,QAAQ,MAAM,SAAS,sBAAsB,CAAC;AAAA,MAC1D,OAAO;AACL,gBAAQ,EAAE,QAAQ,SAAS,SAAS,0BAA0B,IAAI,GAAG,CAAC;AAAA,MACxE;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ,EAAE,QAAQ,SAAS,SAAS,8BAA8B,IAAI,OAAO,GAAG,CAAC;AAAA,IACnF,CAAC;AAAA,EACH,CAAC;AACH;AAGA,IAAM,QAAoB,KAAK,MAAM,MAAM,UAAU,CAAC;AACtD,IAAM,SAAS,MAAM,SAAS,KAAK;AACnC,QAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAElC,eAAe,YAA6B;AAC1C,QAAM,SAAmB,CAAC;AAC1B,mBAAiB,SAAS,QAAQ,OAAO;AACvC,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO,OAAO,KAAK,EAAE;AACvB;",
6
- "names": ["input"]
3
+ "sources": ["../../src/skills/omp-setup.mts", "../../src/skills/setup.mts"],
4
+ "sourcesContent": ["/**\n * omp-setup skill\n *\n * ID: omp-setup\n * Keywords: setup:, /setup, /omp:setup\n * Tier: developer tool\n *\n * Orchestrates the OMP setup wizard:\n * Phase 1: Base OMP setup (directory structure, first-run guidance)\n * Phase 2: MCP server configuration\n */\n\nimport { fileURLToPath } from \"url\";\nimport { dirname, join } from \"path\";\n\nexport interface SkillInput {\n trigger: string;\n args: string[];\n}\n\nexport interface SkillOutput {\n status: \"ok\" | \"error\";\n message: string;\n}\n\nconst REQUIRED_COPILOT_EXPERIMENTAL_FEATURES = [\n \"STATUS_LINE\",\n \"SHOW_FILE\",\n \"EXTENSIONS\",\n \"BACKGROUND_SESSIONS\",\n \"CONFIGURE_COPILOT_AGENT\",\n \"MULTI_TURN_AGENTS\",\n \"SESSION_STORE\",\n] as const;\n\nfunction getPackageRoot(): string {\n return join(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\");\n}\n\nexport async function activate(input: SkillInput): Promise<SkillOutput> {\n const { spawn } = await import(\"child_process\");\n const packageRoot = getPackageRoot();\n const baseArgs = [\"bin/omp.mjs\", \"setup\", ...input.args];\n return new Promise((resolve) => {\n const child = spawn(\"node\", baseArgs, {\n cwd: packageRoot,\n stdio: \"inherit\",\n env: {\n ...process.env,\n OMP_COPILOT_REQUIRED_EXPERIMENTAL_FEATURES:\n process.env[\"OMP_COPILOT_REQUIRED_EXPERIMENTAL_FEATURES\"] ??\n REQUIRED_COPILOT_EXPERIMENTAL_FEATURES.join(\",\"),\n OMP_COPILOT_STATUS_LINE_COMMAND:\n process.env[\"OMP_COPILOT_STATUS_LINE_COMMAND\"] ??\n join(packageRoot, \"bin\", \"omp-statusline.sh\"),\n },\n });\n child.on(\"close\", (code) => {\n resolve({ status: code === 0 ? \"ok\" : \"error\", message: `Setup exited with code ${code}` });\n });\n child.on(\"error\", (err) => resolve({ status: \"error\", message: `Failed to spawn: ${err.message}` }));\n });\n}\n\nexport function deactivate(): void {\n // No persistent resources to clean up\n}\n", "/**\n * setup skill\n *\n * Legacy alias for `omp-setup`.\n * Keep this wrapper while docs and manifests migrate to the `omp-*` namespace.\n */\n\nimport {\n activate as activateOmpSetup,\n deactivate as deactivateOmpSetup,\n type SkillInput,\n type SkillOutput,\n} from \"./omp-setup.mjs\";\n\nexport type { SkillInput, SkillOutput } from \"./omp-setup.mjs\";\n\nexport async function activate(input: SkillInput): Promise<SkillOutput> {\n return activateOmpSetup(input);\n}\n\nexport function deactivate(): void {\n deactivateOmpSetup();\n}\n"],
5
+ "mappings": ";AAYA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,YAAY;AAY9B,IAAM,yCAAyC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,iBAAyB;AAChC,SAAO,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,MAAM,IAAI;AACjE;AAEA,eAAsB,SAAS,OAAyC;AACtE,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAe;AAC9C,QAAM,cAAc,eAAe;AACnC,QAAM,WAAW,CAAC,eAAe,SAAS,GAAG,MAAM,IAAI;AACvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAQ,MAAM,QAAQ,UAAU;AAAA,MACpC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,KAAK;AAAA,QACH,GAAG,QAAQ;AAAA,QACX,4CACE,QAAQ,IAAI,4CAA4C,KACxD,uCAAuC,KAAK,GAAG;AAAA,QACjD,iCACE,QAAQ,IAAI,iCAAiC,KAC7C,KAAK,aAAa,OAAO,mBAAmB;AAAA,MAChD;AAAA,IACF,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,cAAQ,EAAE,QAAQ,SAAS,IAAI,OAAO,SAAS,SAAS,0BAA0B,IAAI,GAAG,CAAC;AAAA,IAC5F,CAAC;AACD,UAAM,GAAG,SAAS,CAAC,QAAQ,QAAQ,EAAE,QAAQ,SAAS,SAAS,oBAAoB,IAAI,OAAO,GAAG,CAAC,CAAC;AAAA,EACrG,CAAC;AACH;AAEO,SAAS,aAAmB;AAEnC;;;AClDA,eAAsBA,UAAS,OAAyC;AACtE,SAAO,SAAiB,KAAK;AAC/B;AAEO,SAASC,cAAmB;AACjC,aAAmB;AACrB;",
6
+ "names": ["activate", "deactivate"]
7
7
  }
package/hooks/hooks.json CHANGED
@@ -1,47 +1,41 @@
1
1
  {
2
- "schemaVersion": "1.0",
3
- "hooks": [
4
- {
5
- "id": "keyword-detector",
6
- "entry": "./dist/hooks/keyword-detector.mjs",
7
- "trigger": "UserPromptSubmitted",
8
- "timeoutMs": 200,
9
- "priority": 100
10
- },
11
- {
12
- "id": "delegation-enforcer",
13
- "entry": "./dist/hooks/delegation-enforcer.mjs",
14
- "trigger": "PreToolUse",
15
- "timeoutMs": 200,
16
- "priority": 90
17
- },
18
- {
19
- "id": "model-router",
20
- "entry": "./dist/hooks/model-router.mjs",
21
- "trigger": "PreToolUse",
22
- "timeoutMs": 200,
23
- "priority": 80
24
- },
25
- {
26
- "id": "token-tracker",
27
- "entry": "./dist/hooks/token-tracker.mjs",
28
- "trigger": "PostToolUse",
29
- "timeoutMs": 200,
30
- "priority": 70
31
- },
32
- {
33
- "id": "hud-emitter",
34
- "entry": "./dist/hooks/hud-emitter.mjs",
35
- "trigger": "PostToolUse",
36
- "timeoutMs": 200,
37
- "priority": 60
38
- },
39
- {
40
- "id": "stop-continuation",
41
- "entry": "./dist/hooks/stop-continuation.mjs",
42
- "trigger": "PostToolUse",
43
- "timeoutMs": 200,
44
- "priority": 50
45
- }
46
- ]
2
+ "version": 1,
3
+ "hooks": {
4
+ "UserPromptSubmitted": [
5
+ {
6
+ "type": "command",
7
+ "bash": "node ./bin/omp.mjs hook keyword-detector",
8
+ "timeoutSec": 0.2
9
+ }
10
+ ],
11
+ "PreToolUse": [
12
+ {
13
+ "type": "command",
14
+ "bash": "node ./dist/hooks/delegation-enforcer.mjs",
15
+ "timeoutSec": 0.2
16
+ },
17
+ {
18
+ "type": "command",
19
+ "bash": "node ./dist/hooks/model-router.mjs",
20
+ "timeoutSec": 0.2
21
+ }
22
+ ],
23
+ "PostToolUse": [
24
+ {
25
+ "type": "command",
26
+ "bash": "node ./dist/hooks/token-tracker.mjs",
27
+ "timeoutSec": 0.2
28
+ },
29
+ {
30
+ "type": "command",
31
+ "bash": "node ./dist/hooks/hud-emitter.mjs",
32
+ "timeoutSec": 0.2
33
+ },
34
+ {
35
+ "type": "command",
36
+ "bash": "node ./dist/hooks/stop-continuation.mjs",
37
+ "timeoutSec": 0.2
38
+ }
39
+ ]
40
+ }
47
41
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "oh-my-githubcopilot",
3
- "version": "1.4.1",
4
- "description": "Multi-agent orchestration for GitHub Copilot CLI. 23 agents, 25 skills, parallel execution, HUD, PSM, SWE-bench.",
3
+ "version": "1.8.0-alpha.f50f59a",
4
+ "description": "Multi-agent orchestration for GitHub Copilot CLI. 23 agents, 39 skills, parallel execution, HUD, PSM, SWE-bench.",
5
5
  "author": {
6
6
  "name": "r3dlex"
7
7
  },
@@ -21,17 +21,21 @@
21
21
  "omp": "./bin/omp.mjs"
22
22
  },
23
23
  "files": [
24
+ "README.md",
24
25
  "dist/",
25
26
  "bin/",
27
+ "agents/",
26
28
  "skills/",
27
29
  "hooks/",
28
- "src/agents/",
30
+ "plugin.json",
31
+ ".mcp.json",
29
32
  ".claude-plugin/",
30
33
  "AGENTS.md",
31
34
  "CHANGELOG.md",
32
35
  "LICENSE"
33
36
  ],
34
37
  "scripts": {
38
+ "hud:watch": "node --import tsx src/index.mts hud --watch",
35
39
  "build": "node --import tsx esbuild.config.mts",
36
40
  "dev": "node --import tsx --watch esbuild.config.mts",
37
41
  "test": "vitest run",
@@ -40,8 +44,9 @@
40
44
  "lint": "eslint src/",
41
45
  "format": "prettier --write src/",
42
46
  "typecheck": "tsc --noEmit",
43
- "sync-claude-plugin": "cp .github/plugin/plugin.json .claude-plugin/plugin.json",
47
+ "sync-claude-plugin": "cp plugin.json .claude-plugin/plugin.json",
44
48
  "prepublishOnly": "npm run build && npm run sync-claude-plugin",
49
+ "postinstall": "[ -d dist ] || npm run build",
45
50
  "archgate:init": "npx archgate init --editor claude",
46
51
  "archgate:check": "npx archgate check"
47
52
  },
package/plugin.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "schemaVersion": "1.0",
3
+ "name": "oh-my-githubcopilot",
4
+ "version": "1.8.0",
5
+ "description": "Multi-agent orchestration for GitHub Copilot CLI. 23 agents, 39 skills, parallel execution, HUD, PSM, SWE-bench.",
6
+ "author": {
7
+ "name": "r3dlex"
8
+ },
9
+ "repository": "https://github.com/r3dlex/oh-my-githubcopilot",
10
+ "license": "Apache-2.0",
11
+ "keywords": [
12
+ "orchestration",
13
+ "multi-agent",
14
+ "autopilot",
15
+ "swe-bench",
16
+ "hud",
17
+ "copilot-cli"
18
+ ],
19
+ "agents": [
20
+ "./agents"
21
+ ],
22
+ "skills": [
23
+ "./skills/autopilot",
24
+ "./skills/ralph",
25
+ "./skills/ultrawork",
26
+ "./skills/team",
27
+ "./skills/ecomode",
28
+ "./skills/swarm",
29
+ "./skills/pipeline",
30
+ "./skills/deep-interview",
31
+ "./skills/omp-plan",
32
+ "./skills/omp-setup",
33
+ "./skills/hud",
34
+ "./skills/wiki",
35
+ "./skills/learner",
36
+ "./skills/note",
37
+ "./skills/trace",
38
+ "./skills/release",
39
+ "./skills/configure-notifications",
40
+ "./skills/psm",
41
+ "./skills/swe-bench",
42
+ "./skills/mcp-setup",
43
+ "./skills/setup",
44
+ "./skills/graphify",
45
+ "./skills/graphwiki",
46
+ "./skills/graph-provider",
47
+ "./skills/spending",
48
+ "./skills/ralplan",
49
+ "./skills/research",
50
+ "./skills/omp-doctor",
51
+ "./skills/omp-reference",
52
+ "./skills/ai-slop-cleaner",
53
+ "./skills/tdd",
54
+ "./skills/improve-codebase-architecture",
55
+ "./skills/skillify",
56
+ "./skills/interview",
57
+ "./skills/graph-context",
58
+ "./skills/interactive-menu",
59
+ "./skills/notifications",
60
+ "./skills/doctor",
61
+ "./skills/session"
62
+ ],
63
+ "hooks": "./hooks/hooks.json",
64
+ "mcp": "./.mcp.json",
65
+ "entryPoints": {
66
+ "cli": "./bin/omp.mjs",
67
+ "mcp": "./dist/mcp/server.mjs"
68
+ },
69
+ "agentFormat": ".agent.md",
70
+ "agentFilePattern": "*.agent.md"
71
+ }
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: ai-slop-cleaner
3
+ description: Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode
4
+ level: 3
5
+ triggers:
6
+ - deslop
7
+ - /omp:ai-slop-cleaner
8
+ - anti-slop
9
+ ---
10
+
11
+ # AI Slop Cleaner
12
+
13
+ Use this skill to clean AI-generated code slop without drifting scope or changing intended behavior. In OMP, this is the bounded cleanup workflow for code that works but feels bloated, repetitive, weakly tested, or over-abstracted.
14
+
15
+ ## When to Use
16
+
17
+ Use this skill when:
18
+ - the user explicitly says `deslop`, `anti-slop`, or `AI slop`
19
+ - the request is to clean up or refactor code that feels noisy, repetitive, or overly abstract
20
+ - follow-up implementation left duplicate logic, dead code, wrapper layers, boundary leaks, or weak regression coverage
21
+ - the user wants a reviewer-only anti-slop pass via `--review`
22
+ - the goal is simplification and cleanup, not new feature delivery
23
+
24
+ ## When Not to Use
25
+
26
+ Do not use this skill when:
27
+ - the task is mainly a new feature build or product change
28
+ - the user wants a broad redesign instead of an incremental cleanup pass
29
+ - the request is a generic refactor with no simplification or anti-slop intent
30
+ - behavior is too unclear to protect with tests or a concrete verification plan
31
+
32
+ ## OMP Execution Posture
33
+
34
+ - Preserve behavior unless the user explicitly asks for behavior changes.
35
+ - Lock behavior with focused regression tests first whenever practical.
36
+ - Write a cleanup plan before editing code.
37
+ - Prefer deletion over addition.
38
+ - Reuse existing utilities and patterns before introducing new ones.
39
+ - Avoid new dependencies unless the user explicitly requests them.
40
+ - Keep diffs small, reversible, and smell-focused.
41
+ - Stay concise and evidence-dense: inspect, edit, verify, and report.
42
+ - Treat new user instructions as local scope updates without dropping earlier non-conflicting constraints.
43
+
44
+ ## Scoped File-List Usage
45
+
46
+ This skill can be bounded to an explicit file list or changed-file scope when the caller already knows the safe cleanup surface.
47
+
48
+ - Good fit: `omp:ai-slop-cleaner skills/ralph/SKILL.md skills/ai-slop-cleaner/SKILL.md`
49
+ - Good fit: a Ralph session handing off only the files changed in that session
50
+ - Preserve the same regression-safe workflow even when the scope is a short file list
51
+ - Do not silently expand a changed-file scope into broader cleanup work unless the user explicitly asks for it
52
+
53
+ ## Ralph Integration
54
+
55
+ omp:ralph can invoke this skill as a bounded post-review cleanup pass.
56
+
57
+ - In that workflow, the cleaner runs in standard mode (not `--review`)
58
+ - The cleanup scope is the Ralph session's changed files only
59
+ - After the cleanup pass, Ralph re-runs regression verification before completion
60
+ - `--review` remains the reviewer-only follow-up mode, not the default Ralph integration path
61
+
62
+ ## Review Mode (`--review`)
63
+
64
+ `--review` is a reviewer-only pass after cleanup work is drafted. It exists to preserve explicit writer/reviewer separation for anti-slop work.
65
+
66
+ - **Writer pass**: make the cleanup changes with behavior locked by tests.
67
+ - **Reviewer pass**: inspect the cleanup plan, changed files, and verification evidence.
68
+ - The same pass must not both write and self-approve high-impact cleanup without a separate review step.
69
+
70
+ In review mode:
71
+ 1. Do **not** start by editing files.
72
+ 2. Review the cleanup plan, changed files, and regression coverage.
73
+ 3. Check specifically for:
74
+ - leftover dead code or unused exports
75
+ - duplicate logic that should have been consolidated
76
+ - needless wrappers or abstractions that still blur boundaries
77
+ - missing tests or weak verification for preserved behavior
78
+ - cleanup that appears to have changed behavior without intent
79
+ 4. Produce a reviewer verdict with required follow-ups.
80
+ 5. Hand needed changes back to a separate writer pass instead of fixing and approving in one step.
81
+
82
+ ## Workflow
83
+
84
+ 1. **Protect current behavior first**
85
+ - Identify what must stay the same.
86
+ - Add or run the narrowest regression tests needed before editing.
87
+ - If tests cannot come first, record the verification plan explicitly before touching code.
88
+
89
+ 2. **Write a cleanup plan before code**
90
+ - Bound the pass to the requested files or feature area.
91
+ - List the concrete smells to remove.
92
+ - Order the work from safest deletion to riskier consolidation.
93
+
94
+ 3. **Classify the slop before editing**
95
+ - **Duplication** — repeated logic, copy-paste branches, redundant helpers
96
+ - **Dead code** — unused code, unreachable branches, stale flags, debug leftovers
97
+ - **Needless abstraction** — pass-through wrappers, speculative indirection, single-use helper layers
98
+ - **Boundary violations** — hidden coupling, misplaced responsibilities, wrong-layer imports or side effects
99
+ - **Missing tests** — behavior not locked, weak regression coverage, edge-case gaps
100
+
101
+ 4. **Run one smell-focused pass at a time**
102
+ - **Pass 1: Dead code deletion**
103
+ - **Pass 2: Duplicate removal**
104
+ - **Pass 3: Naming and error-handling cleanup**
105
+ - **Pass 4: Test reinforcement**
106
+ - Re-run targeted verification after each pass.
107
+ - Do not bundle unrelated refactors into the same edit set.
108
+
109
+ 5. **Run the quality gates**
110
+ - Keep regression tests green.
111
+ - Run the relevant lint, typecheck, and unit/integration tests for the touched area.
112
+ - Run existing static or security checks when available.
113
+ - If a gate fails, fix the issue or back out the risky cleanup instead of forcing it through.
114
+
115
+ 6. **Close with an evidence-dense report**
116
+ Always report:
117
+ - **Changed files**
118
+ - **Simplifications**
119
+ - **Behavior lock / verification run**
120
+ - **Remaining risks**
121
+
122
+ ## Usage
123
+
124
+ - `/omp:ai-slop-cleaner <target>`
125
+ - `/omp:ai-slop-cleaner <target> --review`
126
+ - `/omp:ai-slop-cleaner <file-a> <file-b> <file-c>`
127
+ - From omp:ralph: run the cleaner on the Ralph session's changed files only, then return to Ralph for post-cleanup regression verification
128
+
129
+ ## Good Fits
130
+
131
+ **Good:** `deslop this module: too many wrappers, duplicate helpers, and dead code`
132
+
133
+ **Good:** `cleanup the AI slop in src/auth and tighten boundaries without changing behavior`
134
+
135
+ **Bad:** `refactor auth to support SSO`
136
+
137
+ **Bad:** `clean up formatting`
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: autopilot
3
+ description: Autonomous end-to-end execution from idea to working code
4
+ trigger: "autopilot:, /autopilot, /omp:autopilot"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Autopilot
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: configure-notifications
3
+ description: Configure session notification settings
4
+ trigger: "configure-notifications:, /configure-notifications, /omp:configure-notifications"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Configure-Notifications
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: deep-interview
3
+ description: Deep requirements interview workflow
4
+ trigger: "deep interview:, /deep-interview, /omp:deep-interview"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Deep-Interview
2
8
 
3
9
  ## Metadata
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: doctor
3
+ description: Diagnose and fix common issues. Use for "debug", "fix this", "what's wrong", and "doctor".
4
+ trigger: "doctor:, /doctor, /omp:doctor"
5
+ autoinvoke: false
6
+ ---
7
+ # Skill: Doctor
8
+
9
+ ## Metadata
10
+
11
+ | Field | Value |
12
+ |-------|-------|
13
+ | **ID** | `doctor` |
14
+ | **Keywords** | `doctor:`, `/doctor` |
15
+ | **Tier** | Developer Tool |
16
+ | **Source** | `src/skills/doctor.mts` |
17
+
18
+ ## Description
19
+
20
+ Diagnose problems and prescribe solutions based on symptoms. A general-purpose Socratic diagnostic for any error, failure, or unexpected behavior — not limited to OMP installation issues.
21
+
22
+ ## Differentiation from omp-doctor
23
+
24
+ | Aspect | doctor | omp-doctor |
25
+ |--------|--------|------------|
26
+ | **Scope** | Any problem: errors, performance, config, setup | OMP-specific: plugin version, skills dir, agents dir, plugin.json |
27
+ | **Method** | Symptom collection -> hypothesis -> root cause -> prescription | Structured installation checks with known pass/fail criteria |
28
+ | **Use when** | Something is broken and you don't know why | OMP itself is not working correctly after install |
29
+
30
+ ## Interface
31
+
32
+ ```typescript
33
+ interface SkillInput {
34
+ trigger: string;
35
+ args: string[];
36
+ }
37
+
38
+ interface SkillOutput {
39
+ status: "ok" | "error";
40
+ message: string;
41
+ }
42
+
43
+ export async function activate(input: SkillInput): Promise<SkillOutput>
44
+ export function deactivate(): void
45
+ ```
46
+
47
+ ## Implementation
48
+
49
+ Spawns `bin/omp.mjs doctor [args]`. No persistent resources are maintained.
50
+
51
+ ## When to Use
52
+
53
+ - Unexpected errors or failures
54
+ - Degraded performance
55
+ - Configuration issues
56
+ - Setup problems
57
+ - "Something is wrong"
58
+
59
+ ## Diagnosis Process
60
+
61
+ ### 1. Collect Symptoms
62
+ - Error messages
63
+ - Behavior observed
64
+ - When it started
65
+ - Recent changes
66
+
67
+ ### 2. Identify Possible Causes
68
+ - Based on symptoms
69
+ - Known patterns
70
+ - Recent updates
71
+ - Environmental changes
72
+
73
+ ### 3. Narrow Down
74
+ - Test each hypothesis
75
+ - Eliminate unlikely causes
76
+ - Gather more data
77
+
78
+ ### 4. Prescribe Fix
79
+ - Root cause identified
80
+ - Solution determined
81
+ - Steps to resolve
82
+ - Prevention
83
+
84
+ ## Common Diagnoses
85
+
86
+ ### "Command not found"
87
+ **Possible causes:**
88
+ - PATH misconfiguration
89
+ - Installation incomplete
90
+ - Typo in command name
91
+ - Shell not reloaded
92
+
93
+ **Fix:**
94
+ ```bash
95
+ # Check PATH
96
+ echo $PATH
97
+
98
+ # Verify installation
99
+ which {command}
100
+
101
+ # Reload shell
102
+ source ~/.zshrc
103
+ ```
104
+
105
+ ### "Permission denied"
106
+ **Possible causes:**
107
+ - File ownership wrong
108
+ - Missing execute bit
109
+ - SELinux/AppArmor
110
+ - Sandbox restrictions
111
+
112
+ **Fix:**
113
+ ```bash
114
+ # Fix ownership
115
+ chown {user}:{group} {file}
116
+
117
+ # Add execute
118
+ chmod +x {file}
119
+ ```
120
+
121
+ ### "Module not found"
122
+ **Possible causes:**
123
+ - Not installed
124
+ - Wrong environment
125
+ - PYTHONPATH issue
126
+ - Virtual env not activated
127
+
128
+ **Fix:**
129
+ ```bash
130
+ # Install if needed
131
+ pip install {module}
132
+
133
+ # Check environment
134
+ which python
135
+
136
+ # Set PYTHONPATH
137
+ export PYTHONPATH={path}
138
+ ```
139
+
140
+ ## Output Format
141
+
142
+ ```
143
+ ## Doctor: {issue}
144
+
145
+ ### Symptoms Reported
146
+ - {symptom 1}
147
+ - {symptom 2}
148
+
149
+ ### Diagnosis
150
+
151
+ #### Possible Causes
152
+ | Cause | Likelihood | Evidence |
153
+ |-------|------------|----------|
154
+ | {cause 1} | High | {evidence} |
155
+ | {cause 2} | Low | {evidence} |
156
+
157
+ #### Root Cause
158
+ **Identified:** {cause}
159
+ **Confidence:** {percentage}
160
+
161
+ ### Prescription
162
+
163
+ #### Fix Steps
164
+ \`\`\`bash
165
+ {step 1}
166
+ {step 2}
167
+ \`\`\`
168
+
169
+ #### Verification
170
+ \`\`\`bash
171
+ {verify command}
172
+ \`\`\`
173
+
174
+ ### Prevention
175
+ {how to prevent recurrence}
176
+
177
+ ### Outcome
178
+ **Status:** {resolved|partial|unresolved}
179
+ **Follow-up:** {if needed}
180
+ ```
181
+
182
+ ## Constraints
183
+
184
+ - Collect evidence before diagnosing
185
+ - Start with common causes
186
+ - Verify fixes work
187
+ - Document solutions
188
+ - Build pattern library