oh-my-githubcopilot 1.4.1 → 1.8.0-alpha.021bf87

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 +216 -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
@@ -14138,11 +14138,20 @@ __export(agent_loader_exports, {
14138
14138
  getAgent: () => getAgent,
14139
14139
  loadAllAgents: () => loadAllAgents
14140
14140
  });
14141
- import { readFileSync, readdirSync } from "fs";
14141
+ import { existsSync, readFileSync, readdirSync } from "fs";
14142
14142
  import { join } from "path";
14143
- function loadAgentFile(filename) {
14143
+ function normalizeModelTier(modelTier, model) {
14144
+ if (modelTier === "high" || modelTier === "standard" || modelTier === "fast") {
14145
+ return modelTier;
14146
+ }
14147
+ if (!model) return "standard";
14148
+ if (/haiku|mini|nano|fast/i.test(model)) return "fast";
14149
+ if (/opus|pro|gpt-5\.5|sonnet-4-6/i.test(model)) return "high";
14150
+ return "standard";
14151
+ }
14152
+ function loadAgentFile(dir, filename) {
14144
14153
  try {
14145
- const filePath = join(AGENTS_DIR, filename);
14154
+ const filePath = join(dir, filename);
14146
14155
  const content = readFileSync(filePath, "utf-8");
14147
14156
  const parsed = parseAgentFile(content);
14148
14157
  if (!parsed) return null;
@@ -14150,7 +14159,7 @@ function loadAgentFile(filename) {
14150
14159
  id: parsed.frontmatter.name,
14151
14160
  name: parsed.frontmatter.name,
14152
14161
  description: parsed.frontmatter.description || "",
14153
- modelTier: parsed.frontmatter.model_tier || "standard",
14162
+ modelTier: normalizeModelTier(parsed.frontmatter.model_tier, parsed.frontmatter.model),
14154
14163
  tools: parsed.frontmatter.tools || [],
14155
14164
  content: parsed.content
14156
14165
  };
@@ -14161,13 +14170,17 @@ function loadAgentFile(filename) {
14161
14170
  function loadAllAgents() {
14162
14171
  if (cache) return cache;
14163
14172
  cache = /* @__PURE__ */ new Map();
14164
- try {
14165
- const files = readdirSync(AGENTS_DIR).filter((f) => f.endsWith(".md"));
14166
- for (const file2 of files) {
14167
- const agent = loadAgentFile(file2);
14168
- if (agent) cache.set(agent.id, agent);
14173
+ for (const dir of AGENTS_DIRS) {
14174
+ if (!existsSync(dir)) continue;
14175
+ try {
14176
+ const files = readdirSync(dir).filter((f) => f.endsWith(".agent.md"));
14177
+ for (const file2 of files) {
14178
+ const agent = loadAgentFile(dir, file2);
14179
+ if (agent) cache.set(agent.id, agent);
14180
+ }
14181
+ if (cache.size > 0) break;
14182
+ } catch {
14169
14183
  }
14170
- } catch {
14171
14184
  }
14172
14185
  return cache;
14173
14186
  }
@@ -14178,12 +14191,15 @@ function getAgent(id) {
14178
14191
  function clearCache() {
14179
14192
  cache = null;
14180
14193
  }
14181
- var AGENTS_DIR, cache;
14194
+ var AGENTS_DIRS, cache;
14182
14195
  var init_agent_loader = __esm({
14183
14196
  "src/utils/agent-loader.mts"() {
14184
14197
  "use strict";
14185
14198
  init_yaml_parser();
14186
- AGENTS_DIR = join(process.cwd(), "src", "agents");
14199
+ AGENTS_DIRS = [
14200
+ join(process.cwd(), "agents"),
14201
+ join(process.cwd(), "src", "agents")
14202
+ ];
14187
14203
  cache = null;
14188
14204
  }
14189
14205
  });
@@ -28224,58 +28240,71 @@ var StdioServerTransport = class {
28224
28240
  };
28225
28241
 
28226
28242
  // src/mcp/server.mts
28227
- import Database from "better-sqlite3";
28228
28243
  import { readFileSync as readFileSync2, mkdirSync } from "fs";
28229
28244
  import { homedir } from "os";
28230
28245
  import { join as join2, dirname } from "path";
28231
28246
  import { randomUUID } from "crypto";
28247
+
28248
+ // src/mcp/db-loader.mts
28249
+ import { createRequire } from "module";
28250
+ var SqliteConstructor = null;
28251
+ try {
28252
+ SqliteConstructor = createRequire(import.meta.url)("better-sqlite3");
28253
+ } catch {
28254
+ }
28255
+
28256
+ // src/mcp/server.mts
28232
28257
  function getDbPath() {
28233
28258
  const envPath = process.env["OMP_STATE_DB"];
28234
28259
  if (envPath) return envPath.replace("~", homedir());
28235
28260
  return join2(homedir(), ".omp", "state", "omp.db");
28236
28261
  }
28237
- function ensureDbDir(dbPath2) {
28238
- mkdirSync(dirname(dbPath2), { recursive: true });
28239
- }
28240
- var dbPath = getDbPath();
28241
- ensureDbDir(dbPath);
28242
- var db = new Database(dbPath);
28243
- db.exec(`
28244
- CREATE TABLE IF NOT EXISTS sessions (
28245
- id TEXT PRIMARY KEY,
28246
- worktree_id TEXT,
28247
- state_json TEXT NOT NULL,
28248
- created_at INTEGER NOT NULL,
28249
- updated_at INTEGER NOT NULL
28250
- );
28251
- CREATE INDEX IF NOT EXISTS idx_sessions_worktree ON sessions(worktree_id);
28252
- CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at);
28262
+ function ensureDbDir(dbPath) {
28263
+ mkdirSync(dirname(dbPath), { recursive: true });
28264
+ }
28265
+ var db = null;
28266
+ if (SqliteConstructor) {
28267
+ const dbPath = getDbPath();
28268
+ ensureDbDir(dbPath);
28269
+ db = new SqliteConstructor(dbPath);
28270
+ db.pragma("journal_mode = WAL");
28271
+ db.exec(`
28272
+ CREATE TABLE IF NOT EXISTS sessions (
28273
+ id TEXT PRIMARY KEY,
28274
+ worktree_id TEXT,
28275
+ state_json TEXT NOT NULL,
28276
+ created_at INTEGER NOT NULL,
28277
+ updated_at INTEGER NOT NULL
28278
+ );
28279
+ CREATE INDEX IF NOT EXISTS idx_sessions_worktree ON sessions(worktree_id);
28280
+ CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at);
28253
28281
 
28254
- CREATE TABLE IF NOT EXISTS memory (
28255
- key TEXT PRIMARY KEY,
28256
- value TEXT NOT NULL,
28257
- category TEXT,
28258
- session_id TEXT,
28259
- created_at INTEGER NOT NULL,
28260
- updated_at INTEGER NOT NULL
28261
- );
28262
- CREATE INDEX IF NOT EXISTS idx_memory_category ON memory(category);
28263
- CREATE INDEX IF NOT EXISTS idx_memory_session ON memory(session_id);
28282
+ CREATE TABLE IF NOT EXISTS memory (
28283
+ key TEXT PRIMARY KEY,
28284
+ value TEXT NOT NULL,
28285
+ category TEXT,
28286
+ session_id TEXT,
28287
+ created_at INTEGER NOT NULL,
28288
+ updated_at INTEGER NOT NULL
28289
+ );
28290
+ CREATE INDEX IF NOT EXISTS idx_memory_category ON memory(category);
28291
+ CREATE INDEX IF NOT EXISTS idx_memory_session ON memory(session_id);
28264
28292
 
28265
- CREATE TABLE IF NOT EXISTS trace (
28266
- id INTEGER PRIMARY KEY AUTOINCREMENT,
28267
- session_id TEXT NOT NULL,
28268
- hook_id TEXT,
28269
- agent_id TEXT,
28270
- event_type TEXT NOT NULL,
28271
- payload TEXT,
28272
- duration_ms INTEGER,
28273
- timestamp INTEGER NOT NULL
28274
- );
28275
- CREATE INDEX IF NOT EXISTS idx_trace_session ON trace(session_id);
28276
- CREATE INDEX IF NOT EXISTS idx_trace_hook ON trace(hook_id);
28277
- CREATE INDEX IF NOT EXISTS idx_trace_agent ON trace(agent_id);
28278
- `);
28293
+ CREATE TABLE IF NOT EXISTS trace (
28294
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
28295
+ session_id TEXT NOT NULL,
28296
+ hook_id TEXT,
28297
+ agent_id TEXT,
28298
+ event_type TEXT NOT NULL,
28299
+ payload TEXT,
28300
+ duration_ms INTEGER,
28301
+ timestamp INTEGER NOT NULL
28302
+ );
28303
+ CREATE INDEX IF NOT EXISTS idx_trace_session ON trace(session_id);
28304
+ CREATE INDEX IF NOT EXISTS idx_trace_hook ON trace(hook_id);
28305
+ CREATE INDEX IF NOT EXISTS idx_trace_agent ON trace(agent_id);
28306
+ `);
28307
+ }
28279
28308
  var TOOLS = [
28280
28309
  // State tools
28281
28310
  {
@@ -28397,12 +28426,14 @@ function handleListTools() {
28397
28426
  async function handleCallTool(name, args) {
28398
28427
  switch (name) {
28399
28428
  case "omp_get_session_state": {
28429
+ if (!db) return { content: [{ type: "text", text: "null" }] };
28400
28430
  const sessions = db.prepare("SELECT * FROM sessions ORDER BY updated_at DESC LIMIT 1").all();
28401
28431
  return { content: [{ type: "text", text: JSON.stringify(sessions[0] || null, null, 2) }] };
28402
28432
  }
28403
28433
  case "omp_save_session": {
28404
28434
  const sessionId = args.sessionId || randomUUID();
28405
28435
  const stateJson = args.stateJson || JSON.stringify({});
28436
+ if (!db) return { content: [{ type: "text", text: JSON.stringify({ status: "ok", sessionId, note: "SQLite unavailable; state not persisted" }) }] };
28406
28437
  const now = Date.now();
28407
28438
  db.prepare(
28408
28439
  "INSERT OR REPLACE INTO sessions (id, worktree_id, state_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?)"
@@ -28410,6 +28441,7 @@ async function handleCallTool(name, args) {
28410
28441
  return { content: [{ type: "text", text: JSON.stringify({ status: "ok", sessionId }) }] };
28411
28442
  }
28412
28443
  case "omp_list_sessions": {
28444
+ if (!db) return { content: [{ type: "text", text: "[]" }] };
28413
28445
  const sessions = db.prepare("SELECT id, created_at, updated_at FROM sessions ORDER BY updated_at DESC").all();
28414
28446
  return { content: [{ type: "text", text: JSON.stringify(sessions, null, 2) }] };
28415
28447
  }