@damian87/omp 0.1.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 (166) hide show
  1. package/.github/agents/architect.md +25 -0
  2. package/.github/agents/code-reviewer.md +25 -0
  3. package/.github/agents/designer.md +26 -0
  4. package/.github/agents/executor.md +24 -0
  5. package/.github/agents/planner.md +26 -0
  6. package/.github/agents/researcher.md +26 -0
  7. package/.github/agents/verifier.md +26 -0
  8. package/.github/copilot-instructions.md +20 -0
  9. package/.github/plugin/marketplace.json +30 -0
  10. package/.github/skills/caveman/SKILL.md +20 -0
  11. package/.github/skills/code-review/SKILL.md +22 -0
  12. package/.github/skills/codebase-research/SKILL.md +20 -0
  13. package/.github/skills/create-skill/SKILL.md +78 -0
  14. package/.github/skills/create-skill/references/best-practices.md +449 -0
  15. package/.github/skills/create-skill/references/examples.md +69 -0
  16. package/.github/skills/create-skill/references/progressive-disclosure.md +25 -0
  17. package/.github/skills/create-skill/references/skill-structure.md +55 -0
  18. package/.github/skills/debug/SKILL.md +22 -0
  19. package/.github/skills/grill-me/SKILL.md +16 -0
  20. package/.github/skills/jira-ticket/SKILL.md +21 -0
  21. package/.github/skills/omp-autopilot/SKILL.md +20 -0
  22. package/.github/skills/prototype/SKILL.md +21 -0
  23. package/.github/skills/ralph/SKILL.md +20 -0
  24. package/.github/skills/ralplan/SKILL.md +21 -0
  25. package/.github/skills/self-evolve/SKILL.md +157 -0
  26. package/.github/skills/tdd/SKILL.md +19 -0
  27. package/.github/skills/team/SKILL.md +20 -0
  28. package/.github/skills/ultraqa/SKILL.md +20 -0
  29. package/.github/skills/ultrawork/SKILL.md +20 -0
  30. package/.github/skills/verify/SKILL.md +20 -0
  31. package/LICENSE +21 -0
  32. package/README.md +214 -0
  33. package/catalog/capabilities.json +729 -0
  34. package/catalog/skills-general.json +427 -0
  35. package/dist/src/catalog.d.ts +79 -0
  36. package/dist/src/catalog.js +113 -0
  37. package/dist/src/catalog.js.map +1 -0
  38. package/dist/src/cli.d.ts +9 -0
  39. package/dist/src/cli.js +475 -0
  40. package/dist/src/cli.js.map +1 -0
  41. package/dist/src/copilot/config.d.ts +7 -0
  42. package/dist/src/copilot/config.js +24 -0
  43. package/dist/src/copilot/config.js.map +1 -0
  44. package/dist/src/copilot/doctor.d.ts +18 -0
  45. package/dist/src/copilot/doctor.js +85 -0
  46. package/dist/src/copilot/doctor.js.map +1 -0
  47. package/dist/src/copilot/launch.d.ts +14 -0
  48. package/dist/src/copilot/launch.js +64 -0
  49. package/dist/src/copilot/launch.js.map +1 -0
  50. package/dist/src/copilot/list.d.ts +17 -0
  51. package/dist/src/copilot/list.js +82 -0
  52. package/dist/src/copilot/list.js.map +1 -0
  53. package/dist/src/copilot/paths.d.ts +21 -0
  54. package/dist/src/copilot/paths.js +36 -0
  55. package/dist/src/copilot/paths.js.map +1 -0
  56. package/dist/src/copilot/setup.d.ts +20 -0
  57. package/dist/src/copilot/setup.js +90 -0
  58. package/dist/src/copilot/setup.js.map +1 -0
  59. package/dist/src/copilot/version.d.ts +13 -0
  60. package/dist/src/copilot/version.js +34 -0
  61. package/dist/src/copilot/version.js.map +1 -0
  62. package/dist/src/jira.d.ts +149 -0
  63. package/dist/src/jira.js +492 -0
  64. package/dist/src/jira.js.map +1 -0
  65. package/dist/src/lint.d.ts +11 -0
  66. package/dist/src/lint.js +85 -0
  67. package/dist/src/lint.js.map +1 -0
  68. package/dist/src/mcp/server.d.ts +10 -0
  69. package/dist/src/mcp/server.js +44 -0
  70. package/dist/src/mcp/server.js.map +1 -0
  71. package/dist/src/mcp/tools/index.d.ts +9 -0
  72. package/dist/src/mcp/tools/index.js +15 -0
  73. package/dist/src/mcp/tools/index.js.map +1 -0
  74. package/dist/src/mcp/tools/notepad.d.ts +2 -0
  75. package/dist/src/mcp/tools/notepad.js +135 -0
  76. package/dist/src/mcp/tools/notepad.js.map +1 -0
  77. package/dist/src/mcp/tools/project-memory.d.ts +2 -0
  78. package/dist/src/mcp/tools/project-memory.js +91 -0
  79. package/dist/src/mcp/tools/project-memory.js.map +1 -0
  80. package/dist/src/mcp/tools/shared-memory.d.ts +2 -0
  81. package/dist/src/mcp/tools/shared-memory.js +148 -0
  82. package/dist/src/mcp/tools/shared-memory.js.map +1 -0
  83. package/dist/src/mcp/tools/state.d.ts +2 -0
  84. package/dist/src/mcp/tools/state.js +107 -0
  85. package/dist/src/mcp/tools/state.js.map +1 -0
  86. package/dist/src/mcp/tools/trace.d.ts +10 -0
  87. package/dist/src/mcp/tools/trace.js +102 -0
  88. package/dist/src/mcp/tools/trace.js.map +1 -0
  89. package/dist/src/mcp/types.d.ts +29 -0
  90. package/dist/src/mcp/types.js +7 -0
  91. package/dist/src/mcp/types.js.map +1 -0
  92. package/dist/src/mode-state/index.d.ts +4 -0
  93. package/dist/src/mode-state/index.js +5 -0
  94. package/dist/src/mode-state/index.js.map +1 -0
  95. package/dist/src/mode-state/paths.d.ts +5 -0
  96. package/dist/src/mode-state/paths.js +29 -0
  97. package/dist/src/mode-state/paths.js.map +1 -0
  98. package/dist/src/mode-state/ralph.d.ts +25 -0
  99. package/dist/src/mode-state/ralph.js +44 -0
  100. package/dist/src/mode-state/ralph.js.map +1 -0
  101. package/dist/src/mode-state/ultraqa.d.ts +26 -0
  102. package/dist/src/mode-state/ultraqa.js +51 -0
  103. package/dist/src/mode-state/ultraqa.js.map +1 -0
  104. package/dist/src/mode-state/ultrawork.d.ts +20 -0
  105. package/dist/src/mode-state/ultrawork.js +34 -0
  106. package/dist/src/mode-state/ultrawork.js.map +1 -0
  107. package/dist/src/project.d.ts +29 -0
  108. package/dist/src/project.js +101 -0
  109. package/dist/src/project.js.map +1 -0
  110. package/dist/src/skills.d.ts +17 -0
  111. package/dist/src/skills.js +61 -0
  112. package/dist/src/skills.js.map +1 -0
  113. package/dist/src/sync.d.ts +6 -0
  114. package/dist/src/sync.js +27 -0
  115. package/dist/src/sync.js.map +1 -0
  116. package/dist/src/team/api.d.ts +20 -0
  117. package/dist/src/team/api.js +55 -0
  118. package/dist/src/team/api.js.map +1 -0
  119. package/dist/src/team/heartbeat.d.ts +4 -0
  120. package/dist/src/team/heartbeat.js +27 -0
  121. package/dist/src/team/heartbeat.js.map +1 -0
  122. package/dist/src/team/idle-nudge.d.ts +27 -0
  123. package/dist/src/team/idle-nudge.js +60 -0
  124. package/dist/src/team/idle-nudge.js.map +1 -0
  125. package/dist/src/team/inbox.d.ts +3 -0
  126. package/dist/src/team/inbox.js +16 -0
  127. package/dist/src/team/inbox.js.map +1 -0
  128. package/dist/src/team/index.d.ts +11 -0
  129. package/dist/src/team/index.js +12 -0
  130. package/dist/src/team/index.js.map +1 -0
  131. package/dist/src/team/outbox.d.ts +14 -0
  132. package/dist/src/team/outbox.js +82 -0
  133. package/dist/src/team/outbox.js.map +1 -0
  134. package/dist/src/team/runtime.d.ts +84 -0
  135. package/dist/src/team/runtime.js +243 -0
  136. package/dist/src/team/runtime.js.map +1 -0
  137. package/dist/src/team/state-paths.d.ts +31 -0
  138. package/dist/src/team/state-paths.js +54 -0
  139. package/dist/src/team/state-paths.js.map +1 -0
  140. package/dist/src/team/task-store.d.ts +41 -0
  141. package/dist/src/team/task-store.js +153 -0
  142. package/dist/src/team/task-store.js.map +1 -0
  143. package/dist/src/team/tmux.d.ts +26 -0
  144. package/dist/src/team/tmux.js +87 -0
  145. package/dist/src/team/tmux.js.map +1 -0
  146. package/dist/src/team/types.d.ts +45 -0
  147. package/dist/src/team/types.js +2 -0
  148. package/dist/src/team/types.js.map +1 -0
  149. package/dist/src/team/worker-bootstrap.d.ts +8 -0
  150. package/dist/src/team/worker-bootstrap.js +52 -0
  151. package/dist/src/team/worker-bootstrap.js.map +1 -0
  152. package/docs/copilot-distribution.md +100 -0
  153. package/docs/general-skills.md +76 -0
  154. package/docs/jira.md +64 -0
  155. package/docs/self-evolve.md +22 -0
  156. package/hooks/hooks.json +74 -0
  157. package/package.json +58 -0
  158. package/plugin.json +14 -0
  159. package/scripts/error.mjs +31 -0
  160. package/scripts/lib/hook-output.mjs +30 -0
  161. package/scripts/lib/stdin.mjs +29 -0
  162. package/scripts/post-tool-use.mjs +31 -0
  163. package/scripts/pre-tool-use.mjs +30 -0
  164. package/scripts/prompt-submit.mjs +66 -0
  165. package/scripts/session-end.mjs +29 -0
  166. package/scripts/session-start.mjs +33 -0
@@ -0,0 +1,85 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { resolveCopilotPaths } from "./paths.js";
5
+ function checkNodeVersion() {
6
+ const major = Number(process.version.replace(/^v/, "").split(".")[0]);
7
+ if (Number.isFinite(major) && major >= 20) {
8
+ return { name: "node-version", status: "pass", detail: process.version };
9
+ }
10
+ return { name: "node-version", status: "fail", detail: `node ${process.version} (need >=20)` };
11
+ }
12
+ function checkPluginManifest(paths) {
13
+ const manifest = join(paths.pluginRoot, "plugin.json");
14
+ if (!existsSync(manifest)) {
15
+ return { name: "plugin-manifest", status: "fail", detail: `missing: ${manifest}` };
16
+ }
17
+ return { name: "plugin-manifest", status: "pass", detail: manifest };
18
+ }
19
+ function checkInstructions(paths) {
20
+ if (existsSync(paths.copilotInstructions)) {
21
+ return { name: "copilot-instructions", status: "pass", detail: paths.copilotInstructions };
22
+ }
23
+ return {
24
+ name: "copilot-instructions",
25
+ status: "warn",
26
+ detail: `missing (run \`omp setup\`): ${paths.copilotInstructions}`,
27
+ };
28
+ }
29
+ function checkSkillsDiscovery(paths) {
30
+ if (existsSync(paths.projectScopeSkills)) {
31
+ return { name: "skills-discovery", status: "pass", detail: paths.projectScopeSkills };
32
+ }
33
+ return {
34
+ name: "skills-discovery",
35
+ status: "warn",
36
+ detail: `no skills directory: ${paths.projectScopeSkills}`,
37
+ };
38
+ }
39
+ function checkHooksManifest(paths) {
40
+ if (existsSync(paths.hooksManifest)) {
41
+ return { name: "hooks-manifest", status: "pass", detail: paths.hooksManifest };
42
+ }
43
+ return {
44
+ name: "hooks-manifest",
45
+ status: "warn",
46
+ detail: `not present: ${paths.hooksManifest}`,
47
+ };
48
+ }
49
+ function checkCopilotCli(bin) {
50
+ try {
51
+ const result = spawnSync(bin, ["--version"], { encoding: "utf8", timeout: 3000 });
52
+ if (result.status === 0) {
53
+ const detail = (result.stdout || result.stderr || "present").trim().split("\n")[0] ?? "present";
54
+ return { name: "copilot-cli", status: "pass", detail };
55
+ }
56
+ return { name: "copilot-cli", status: "fail", detail: `${bin} --version exited ${result.status ?? "?"}` };
57
+ }
58
+ catch {
59
+ return { name: "copilot-cli", status: "fail", detail: `${bin} not found on PATH` };
60
+ }
61
+ }
62
+ export function runDoctor(options = {}) {
63
+ const paths = resolveCopilotPaths(options);
64
+ const checks = [
65
+ checkNodeVersion(),
66
+ checkPluginManifest(paths),
67
+ checkInstructions(paths),
68
+ checkSkillsDiscovery(paths),
69
+ checkHooksManifest(paths),
70
+ ];
71
+ if (!options.skipCopilot) {
72
+ checks.push(checkCopilotCli(options.copilotBin ?? "copilot"));
73
+ }
74
+ const ok = checks.every((c) => c.status !== "fail");
75
+ return { ok, checks, paths };
76
+ }
77
+ export function formatDoctor(report) {
78
+ const lines = [`omp doctor ${report.ok ? "OK" : "FAIL"}`];
79
+ for (const check of report.checks) {
80
+ const icon = check.status === "pass" ? "✓" : check.status === "warn" ? "!" : "✗";
81
+ lines.push(` ${icon} ${check.name}: ${check.detail}`);
82
+ }
83
+ return lines.join("\n");
84
+ }
85
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/copilot/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function normalizeCopilotLaunchArgs(args: string[]): string[];
2
+ export interface LaunchOptions {
3
+ args: string[];
4
+ bin?: string;
5
+ cwd?: string;
6
+ env?: NodeJS.ProcessEnv;
7
+ }
8
+ export interface LaunchResult {
9
+ ok: boolean;
10
+ exitCode: number;
11
+ bin: string;
12
+ }
13
+ export declare function resolveCopilotBin(override?: string): string;
14
+ export declare function launchCopilot(options: LaunchOptions): Promise<LaunchResult>;
@@ -0,0 +1,64 @@
1
+ import { spawn } from "node:child_process";
2
+ const MADMAX_FLAG = "--madmax";
3
+ const COPILOT_BYPASS_FLAG = "--yolo";
4
+ export function normalizeCopilotLaunchArgs(args) {
5
+ const sentinelIdx = args.indexOf("--");
6
+ const pre = sentinelIdx === -1 ? args : args.slice(0, sentinelIdx);
7
+ const tail = sentinelIdx === -1 ? [] : args.slice(sentinelIdx);
8
+ const out = [];
9
+ let bypassRequested = false;
10
+ let bypassEmitted = false;
11
+ for (const arg of pre) {
12
+ if (arg === MADMAX_FLAG) {
13
+ bypassRequested = true;
14
+ continue;
15
+ }
16
+ if (arg === COPILOT_BYPASS_FLAG) {
17
+ bypassRequested = true;
18
+ if (bypassEmitted)
19
+ continue;
20
+ out.push(arg);
21
+ bypassEmitted = true;
22
+ continue;
23
+ }
24
+ out.push(arg);
25
+ }
26
+ if (bypassRequested && !bypassEmitted) {
27
+ out.push(COPILOT_BYPASS_FLAG);
28
+ }
29
+ return [...out, ...tail];
30
+ }
31
+ export function resolveCopilotBin(override) {
32
+ if (override && override.length > 0)
33
+ return override;
34
+ const fromEnv = process.env.OMP_COPILOT_BIN ?? process.env.OMC_COPILOT_BIN;
35
+ if (fromEnv && fromEnv.length > 0)
36
+ return fromEnv;
37
+ return "copilot";
38
+ }
39
+ export async function launchCopilot(options) {
40
+ const bin = resolveCopilotBin(options.bin);
41
+ const args = normalizeCopilotLaunchArgs(options.args);
42
+ return new Promise((resolveFn) => {
43
+ let settled = false;
44
+ const child = spawn(bin, args, {
45
+ stdio: "inherit",
46
+ cwd: options.cwd ?? process.cwd(),
47
+ env: options.env ?? process.env,
48
+ });
49
+ child.on("error", () => {
50
+ if (settled)
51
+ return;
52
+ settled = true;
53
+ resolveFn({ ok: false, exitCode: 127, bin });
54
+ });
55
+ child.on("close", (code) => {
56
+ if (settled)
57
+ return;
58
+ settled = true;
59
+ const exitCode = typeof code === "number" ? code : 1;
60
+ resolveFn({ ok: exitCode === 0, exitCode, bin });
61
+ });
62
+ });
63
+ }
64
+ //# sourceMappingURL=launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../../../src/copilot/launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface CatalogedItem {
2
+ name: string;
3
+ kind: "skill" | "agent" | "capability";
4
+ description?: string;
5
+ path?: string;
6
+ }
7
+ export interface CombinedList {
8
+ skills: CatalogedItem[];
9
+ agents: CatalogedItem[];
10
+ capabilities: CatalogedItem[];
11
+ }
12
+ export interface ListOptions {
13
+ cwd?: string;
14
+ packageRoot?: string;
15
+ }
16
+ export declare function listAll(options?: ListOptions): Promise<CombinedList>;
17
+ export declare function formatList(list: CombinedList): string;
@@ -0,0 +1,82 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { parseFrontmatter, resolveProjectPaths } from "../project.js";
4
+ function readSkillDir(dir) {
5
+ if (!existsSync(dir))
6
+ return [];
7
+ const out = [];
8
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
9
+ if (!entry.isDirectory())
10
+ continue;
11
+ const skillFile = join(dir, entry.name, "SKILL.md");
12
+ if (!existsSync(skillFile))
13
+ continue;
14
+ const fm = parseFrontmatter(readFileSync(skillFile, "utf8"));
15
+ out.push({
16
+ name: fm.name || entry.name,
17
+ kind: "skill",
18
+ description: fm.description,
19
+ path: skillFile,
20
+ });
21
+ }
22
+ return out.sort((a, b) => a.name.localeCompare(b.name));
23
+ }
24
+ function readAgentDir(dir) {
25
+ if (!existsSync(dir))
26
+ return [];
27
+ const out = [];
28
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
29
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
30
+ continue;
31
+ const filePath = join(dir, entry.name);
32
+ const fm = parseFrontmatter(readFileSync(filePath, "utf8"));
33
+ out.push({
34
+ name: fm.name || entry.name.replace(/\.md$/, ""),
35
+ kind: "agent",
36
+ description: fm.description,
37
+ path: filePath,
38
+ });
39
+ }
40
+ return out.sort((a, b) => a.name.localeCompare(b.name));
41
+ }
42
+ async function readCapabilities() {
43
+ try {
44
+ const { loadCatalogBundle } = await import("../catalog.js");
45
+ const bundle = loadCatalogBundle();
46
+ return bundle.capabilities.capabilities
47
+ .filter((capability) => capability.phase1)
48
+ .map((capability) => ({
49
+ name: capability.id,
50
+ kind: "capability",
51
+ description: capability.summary,
52
+ }))
53
+ .sort((a, b) => a.name.localeCompare(b.name));
54
+ }
55
+ catch {
56
+ return [];
57
+ }
58
+ }
59
+ export async function listAll(options = {}) {
60
+ const proj = resolveProjectPaths(options);
61
+ const skillsDir = join(proj.packageRoot, ".github", "skills");
62
+ const agentsDir = join(proj.packageRoot, ".github", "agents");
63
+ return {
64
+ skills: readSkillDir(skillsDir),
65
+ agents: readAgentDir(agentsDir),
66
+ capabilities: await readCapabilities(),
67
+ };
68
+ }
69
+ export function formatList(list) {
70
+ const lines = [];
71
+ lines.push(`Skills (${list.skills.length}):`);
72
+ for (const s of list.skills)
73
+ lines.push(` /${s.name}${s.description ? ` ${s.description}` : ""}`);
74
+ lines.push("", `Agents (${list.agents.length}):`);
75
+ for (const a of list.agents)
76
+ lines.push(` @${a.name}${a.description ? ` ${a.description}` : ""}`);
77
+ lines.push("", `Capabilities (${list.capabilities.length}):`);
78
+ for (const c of list.capabilities)
79
+ lines.push(` ${c.name}${c.description ? ` ${c.description}` : ""}`);
80
+ return lines.join("\n");
81
+ }
82
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/copilot/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface CopilotPaths {
2
+ packageRoot: string;
3
+ projectRoot: string;
4
+ pluginRoot: string;
5
+ stateDir: string;
6
+ hooksLogPath: string;
7
+ userScope: string;
8
+ projectScopeSkills: string;
9
+ projectScopeAgents: string;
10
+ copilotInstructions: string;
11
+ hooksManifest: string;
12
+ scriptsDir: string;
13
+ }
14
+ export interface ResolveCopilotPathsOptions {
15
+ cwd?: string;
16
+ projectRoot?: string;
17
+ pluginRoot?: string;
18
+ importMetaUrl?: string;
19
+ }
20
+ export declare function resolveCopilotPaths(options?: ResolveCopilotPathsOptions): CopilotPaths;
21
+ export declare function ensureStateDir(paths: CopilotPaths): void;
@@ -0,0 +1,36 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join, resolve } from "node:path";
4
+ import { packageRootFromImportMeta, resolveProjectPaths } from "../project.js";
5
+ export function resolveCopilotPaths(options = {}) {
6
+ const proj = resolveProjectPaths({ cwd: options.cwd, packageRoot: options.projectRoot });
7
+ const projectRoot = proj.packageRoot;
8
+ const packageRoot = options.importMetaUrl
9
+ ? packageRootFromImportMeta(options.importMetaUrl)
10
+ : projectRoot;
11
+ const envPluginRoot = process.env.OMP_PLUGIN_ROOT ?? process.env.OMC_PLUGIN_ROOT;
12
+ const pluginRoot = options.pluginRoot
13
+ ? resolve(options.pluginRoot)
14
+ : envPluginRoot
15
+ ? resolve(envPluginRoot)
16
+ : packageRoot;
17
+ const stateDir = join(projectRoot, ".omp", "state");
18
+ return {
19
+ packageRoot,
20
+ projectRoot,
21
+ pluginRoot,
22
+ stateDir,
23
+ hooksLogPath: join(stateDir, "hooks.log"),
24
+ userScope: join(homedir(), ".copilot"),
25
+ projectScopeSkills: join(projectRoot, ".github", "skills"),
26
+ projectScopeAgents: join(projectRoot, ".github", "agents"),
27
+ copilotInstructions: join(projectRoot, ".github", "copilot-instructions.md"),
28
+ hooksManifest: join(pluginRoot, "hooks", "hooks.json"),
29
+ scriptsDir: join(pluginRoot, "scripts"),
30
+ };
31
+ }
32
+ export function ensureStateDir(paths) {
33
+ if (!existsSync(paths.stateDir))
34
+ mkdirSync(paths.stateDir, { recursive: true });
35
+ }
36
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/copilot/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAuB/E,MAAM,UAAU,mBAAmB,CAAC,UAAsC,EAAE;IAC1E,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACzF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa;QACvC,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;QACnC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7B,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACxB,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO;QACL,WAAW;QACX,WAAW;QACX,UAAU;QACV,QAAQ;QACR,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;QACtC,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC1D,kBAAkB,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC1D,mBAAmB,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,yBAAyB,CAAC;QAC5E,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC;QACtD,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type CopilotPaths, type ResolveCopilotPathsOptions } from "./paths.js";
2
+ export interface SetupOptions extends ResolveCopilotPathsOptions {
3
+ dryRun?: boolean;
4
+ scope?: "project" | "user";
5
+ }
6
+ export type SetupActionKind = "copy" | "create" | "skip-exists" | "skip-source-missing";
7
+ export interface SetupAction {
8
+ source: string;
9
+ target: string;
10
+ kind: SetupActionKind;
11
+ }
12
+ export interface SetupResult {
13
+ ok: boolean;
14
+ dryRun: boolean;
15
+ scope: "project" | "user";
16
+ actions: SetupAction[];
17
+ paths: CopilotPaths;
18
+ }
19
+ export declare function runSetup(options?: SetupOptions): SetupResult;
20
+ export declare function formatSetup(result: SetupResult): string;
@@ -0,0 +1,90 @@
1
+ import { copyFileSync, existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, join, relative } from "node:path";
3
+ import { resolveCopilotPaths } from "./paths.js";
4
+ const COPILOT_INSTRUCTIONS_TEMPLATE = `# oh-my-copilot
5
+
6
+ Default behaviours installed by \`omp setup\`. Override per project as needed.
7
+
8
+ ## Approach
9
+ - Surface assumptions before coding.
10
+ - Prefer the simplest change that satisfies the request.
11
+ - Touch only what the task requires.
12
+ - Verify success with concrete checks: tests, output, behaviour.
13
+
14
+ ## Validation
15
+ - Run tests for code you change.
16
+ - Read the diff before committing.
17
+ - If unsure about scope, ask.
18
+ `;
19
+ function copyDirRecursive(source, target, actions, dryRun) {
20
+ if (!existsSync(source)) {
21
+ actions.push({ source, target, kind: "skip-source-missing" });
22
+ return;
23
+ }
24
+ if (!dryRun && !existsSync(target))
25
+ mkdirSync(target, { recursive: true });
26
+ for (const entry of readdirSync(source, { withFileTypes: true })) {
27
+ const sPath = join(source, entry.name);
28
+ const tPath = join(target, entry.name);
29
+ if (entry.isDirectory()) {
30
+ copyDirRecursive(sPath, tPath, actions, dryRun);
31
+ }
32
+ else if (entry.isFile()) {
33
+ if (existsSync(tPath)) {
34
+ actions.push({ source: sPath, target: tPath, kind: "skip-exists" });
35
+ continue;
36
+ }
37
+ if (!dryRun) {
38
+ mkdirSync(dirname(tPath), { recursive: true });
39
+ copyFileSync(sPath, tPath);
40
+ }
41
+ actions.push({ source: sPath, target: tPath, kind: "copy" });
42
+ }
43
+ }
44
+ }
45
+ function ensureFile(target, content, actions, dryRun) {
46
+ if (existsSync(target)) {
47
+ actions.push({ source: "(template)", target, kind: "skip-exists" });
48
+ return;
49
+ }
50
+ if (!dryRun) {
51
+ mkdirSync(dirname(target), { recursive: true });
52
+ writeFileSync(target, content, "utf8");
53
+ }
54
+ actions.push({ source: "(template)", target, kind: "create" });
55
+ }
56
+ function ensureDir(target, actions, dryRun) {
57
+ if (existsSync(target)) {
58
+ actions.push({ source: "(dir)", target, kind: "skip-exists" });
59
+ return;
60
+ }
61
+ if (!dryRun)
62
+ mkdirSync(target, { recursive: true });
63
+ actions.push({ source: "(dir)", target, kind: "create" });
64
+ }
65
+ export function runSetup(options = {}) {
66
+ const paths = resolveCopilotPaths(options);
67
+ const dryRun = Boolean(options.dryRun);
68
+ const scope = options.scope ?? "project";
69
+ const actions = [];
70
+ const bundleSkills = join(paths.pluginRoot, ".github", "skills");
71
+ if (relative(bundleSkills, paths.projectScopeSkills) !== "") {
72
+ copyDirRecursive(bundleSkills, paths.projectScopeSkills, actions, dryRun);
73
+ }
74
+ const bundleAgents = join(paths.pluginRoot, ".github", "agents");
75
+ if (relative(bundleAgents, paths.projectScopeAgents) !== "") {
76
+ copyDirRecursive(bundleAgents, paths.projectScopeAgents, actions, dryRun);
77
+ }
78
+ ensureFile(paths.copilotInstructions, COPILOT_INSTRUCTIONS_TEMPLATE, actions, dryRun);
79
+ ensureDir(paths.stateDir, actions, dryRun);
80
+ return { ok: true, dryRun, scope, actions, paths };
81
+ }
82
+ export function formatSetup(result) {
83
+ const prefix = result.dryRun ? "DRY-RUN" : "PASS";
84
+ const lines = [`${prefix}: omp setup (scope=${result.scope})`];
85
+ for (const action of result.actions) {
86
+ lines.push(` [${action.kind}] ${action.target}`);
87
+ }
88
+ return lines.join("\n");
89
+ }
90
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/copilot/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface VersionInfo {
2
+ package: string;
3
+ node: string;
4
+ platform: string;
5
+ packageRoot: string;
6
+ }
7
+ export interface VersionOptions {
8
+ cwd?: string;
9
+ packageRoot?: string;
10
+ importMetaUrl?: string;
11
+ }
12
+ export declare function getVersionInfo(options?: VersionOptions): VersionInfo;
13
+ export declare function formatVersionInfo(info: VersionInfo): string;
@@ -0,0 +1,34 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { packageRootFromImportMeta, resolveProjectPaths } from "../project.js";
4
+ export function getVersionInfo(options = {}) {
5
+ const root = options.importMetaUrl
6
+ ? packageRootFromImportMeta(options.importMetaUrl)
7
+ : resolveProjectPaths({ cwd: options.cwd, packageRoot: options.packageRoot }).packageRoot;
8
+ const pkgPath = join(root, "package.json");
9
+ let pkgVersion = "unknown";
10
+ if (existsSync(pkgPath)) {
11
+ try {
12
+ const parsed = JSON.parse(readFileSync(pkgPath, "utf8"));
13
+ pkgVersion = parsed.version ?? "unknown";
14
+ }
15
+ catch {
16
+ // keep "unknown" — manifest is unreadable
17
+ }
18
+ }
19
+ return {
20
+ package: pkgVersion,
21
+ node: process.version,
22
+ platform: `${process.platform}-${process.arch}`,
23
+ packageRoot: root,
24
+ };
25
+ }
26
+ export function formatVersionInfo(info) {
27
+ return [
28
+ `oh-my-copilot ${info.package}`,
29
+ `node ${info.node}`,
30
+ `platform ${info.platform}`,
31
+ `packageRoot ${info.packageRoot}`,
32
+ ].join("\n");
33
+ }
34
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/copilot/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAe/E,MAAM,UAAU,cAAc,CAAC,UAA0B,EAAE;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa;QAChC,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,CAAC,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3C,IAAI,UAAU,GAAG,SAAS,CAAC;IAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;YACjF,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,OAAO,CAAC,OAAO;QACrB,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;QAC/C,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,OAAO;QACL,iBAAiB,IAAI,CAAC,OAAO,EAAE;QAC/B,QAAQ,IAAI,CAAC,IAAI,EAAE;QACnB,YAAY,IAAI,CAAC,QAAQ,EAAE;QAC3B,eAAe,IAAI,CAAC,WAAW,EAAE;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}