@damian87/omp 0.8.0 → 0.9.2

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 (66) hide show
  1. package/.github/skills/slack/SKILL.md +82 -0
  2. package/README.md +36 -38
  3. package/catalog/capabilities.json +46 -0
  4. package/catalog/skills-general.json +26 -0
  5. package/dist/src/cli.js +58 -5
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/copilot/version.js +10 -0
  8. package/dist/src/copilot/version.js.map +1 -1
  9. package/dist/src/env/init.d.ts +6 -0
  10. package/dist/src/env/init.js +18 -0
  11. package/dist/src/env/init.js.map +1 -1
  12. package/dist/src/gateway/notify.d.ts +35 -0
  13. package/dist/src/gateway/notify.js +261 -0
  14. package/dist/src/gateway/notify.js.map +1 -0
  15. package/dist/src/gateway/target-parser.d.ts +76 -0
  16. package/dist/src/gateway/target-parser.js +105 -0
  17. package/dist/src/gateway/target-parser.js.map +1 -0
  18. package/dist/src/schedule/commands.js +1 -0
  19. package/dist/src/schedule/commands.js.map +1 -1
  20. package/dist/src/schedule/runner.d.ts +9 -0
  21. package/dist/src/schedule/runner.js +31 -1
  22. package/dist/src/schedule/runner.js.map +1 -1
  23. package/dist/src/schedule/types.d.ts +9 -0
  24. package/docs/slack-setup.md +33 -0
  25. package/package.json +11 -3
  26. package/plugin.json +12 -4
  27. package/scripts/lib/version-check.mjs +3 -0
  28. package/dist/src/mcp/server.d.ts +0 -10
  29. package/dist/src/mcp/server.js +0 -44
  30. package/dist/src/mcp/server.js.map +0 -1
  31. package/dist/src/mcp/tools/daily-log.d.ts +0 -2
  32. package/dist/src/mcp/tools/daily-log.js +0 -148
  33. package/dist/src/mcp/tools/daily-log.js.map +0 -1
  34. package/dist/src/mcp/tools/index.d.ts +0 -9
  35. package/dist/src/mcp/tools/index.js +0 -15
  36. package/dist/src/mcp/tools/index.js.map +0 -1
  37. package/dist/src/mcp/tools/notepad.d.ts +0 -2
  38. package/dist/src/mcp/tools/notepad.js +0 -135
  39. package/dist/src/mcp/tools/notepad.js.map +0 -1
  40. package/dist/src/mcp/tools/project-memory.d.ts +0 -2
  41. package/dist/src/mcp/tools/project-memory.js +0 -91
  42. package/dist/src/mcp/tools/project-memory.js.map +0 -1
  43. package/dist/src/mcp/tools/shared-memory.d.ts +0 -2
  44. package/dist/src/mcp/tools/shared-memory.js +0 -148
  45. package/dist/src/mcp/tools/shared-memory.js.map +0 -1
  46. package/dist/src/mcp/tools/state.d.ts +0 -2
  47. package/dist/src/mcp/tools/state.js +0 -107
  48. package/dist/src/mcp/tools/state.js.map +0 -1
  49. package/dist/src/mcp/tools/trace.d.ts +0 -10
  50. package/dist/src/mcp/tools/trace.js +0 -102
  51. package/dist/src/mcp/tools/trace.js.map +0 -1
  52. package/dist/src/mcp/types.d.ts +0 -29
  53. package/dist/src/mcp/types.js +0 -7
  54. package/dist/src/mcp/types.js.map +0 -1
  55. package/dist/test/catalog.test.d.ts +0 -1
  56. package/dist/test/catalog.test.js +0 -21
  57. package/dist/test/catalog.test.js.map +0 -1
  58. package/dist/test/jira.test.d.ts +0 -1
  59. package/dist/test/jira.test.js +0 -26
  60. package/dist/test/jira.test.js.map +0 -1
  61. package/dist/test/lint.test.d.ts +0 -1
  62. package/dist/test/lint.test.js +0 -9
  63. package/dist/test/lint.test.js.map +0 -1
  64. package/dist/test/sync.test.d.ts +0 -1
  65. package/dist/test/sync.test.js +0 -15
  66. package/dist/test/sync.test.js.map +0 -1
@@ -1,148 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { jsonResult } from "../types.js";
4
- function smDir(cwd) {
5
- return join(resolve(cwd), ".omp", "shared-memory");
6
- }
7
- function smPath(cwd, key) {
8
- if (!/^[\w.-]+$/.test(key))
9
- throw new Error(`invalid key: ${key}`);
10
- return join(smDir(cwd), `${key}.json`);
11
- }
12
- function atomicWrite(path, value) {
13
- mkdirSync(dirname(path), { recursive: true });
14
- const tmp = `${path}.tmp.${process.pid}.${Date.now()}`;
15
- writeFileSync(tmp, JSON.stringify(value, null, 2), "utf8");
16
- renameSync(tmp, path);
17
- }
18
- export const sharedMemoryTools = [
19
- {
20
- name: "shared_memory_write",
21
- category: "shared_memory",
22
- description: "Write a shared-memory entry. Optional TTL in seconds.",
23
- inputSchema: {
24
- type: "object",
25
- properties: {
26
- key: { type: "string" },
27
- value: {},
28
- ttlSeconds: { type: "number" },
29
- cwd: { type: "string" },
30
- },
31
- required: ["key", "value"],
32
- },
33
- handler: (args) => {
34
- const cwd = args.cwd ?? process.cwd();
35
- const ttl = typeof args.ttlSeconds === "number" ? args.ttlSeconds : undefined;
36
- const entry = {
37
- value: args.value,
38
- writtenAt: new Date().toISOString(),
39
- expiresAt: ttl != null ? new Date(Date.now() + ttl * 1000).toISOString() : undefined,
40
- };
41
- atomicWrite(smPath(cwd, args.key), entry);
42
- return jsonResult({ ok: true, expiresAt: entry.expiresAt });
43
- },
44
- },
45
- {
46
- name: "shared_memory_read",
47
- category: "shared_memory",
48
- description: "Read a shared-memory entry. Returns null if missing or expired.",
49
- inputSchema: {
50
- type: "object",
51
- properties: { key: { type: "string" }, cwd: { type: "string" } },
52
- required: ["key"],
53
- },
54
- handler: (args) => {
55
- const cwd = args.cwd ?? process.cwd();
56
- const path = smPath(cwd, args.key);
57
- if (!existsSync(path))
58
- return jsonResult({ value: null });
59
- try {
60
- const entry = JSON.parse(readFileSync(path, "utf8"));
61
- if (entry.expiresAt && Date.parse(entry.expiresAt) < Date.now()) {
62
- unlinkSync(path);
63
- return jsonResult({ value: null, expired: true });
64
- }
65
- return jsonResult({ value: entry.value, writtenAt: entry.writtenAt, expiresAt: entry.expiresAt });
66
- }
67
- catch {
68
- return jsonResult({ value: null });
69
- }
70
- },
71
- },
72
- {
73
- name: "shared_memory_list",
74
- category: "shared_memory",
75
- description: "List shared-memory keys (excluding expired entries).",
76
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
77
- handler: (args) => {
78
- const cwd = args.cwd ?? process.cwd();
79
- const dir = smDir(cwd);
80
- if (!existsSync(dir))
81
- return jsonResult({ keys: [] });
82
- const now = Date.now();
83
- const keys = [];
84
- for (const file of readdirSync(dir)) {
85
- if (!file.endsWith(".json"))
86
- continue;
87
- try {
88
- const entry = JSON.parse(readFileSync(join(dir, file), "utf8"));
89
- if (entry.expiresAt && Date.parse(entry.expiresAt) < now)
90
- continue;
91
- keys.push(file.replace(/\.json$/, ""));
92
- }
93
- catch {
94
- // skip unparseable
95
- }
96
- }
97
- return jsonResult({ keys: keys.sort() });
98
- },
99
- },
100
- {
101
- name: "shared_memory_delete",
102
- category: "shared_memory",
103
- description: "Delete a shared-memory entry.",
104
- inputSchema: {
105
- type: "object",
106
- properties: { key: { type: "string" }, cwd: { type: "string" } },
107
- required: ["key"],
108
- },
109
- handler: (args) => {
110
- const cwd = args.cwd ?? process.cwd();
111
- const path = smPath(cwd, args.key);
112
- if (existsSync(path))
113
- unlinkSync(path);
114
- return jsonResult({ ok: true });
115
- },
116
- },
117
- {
118
- name: "shared_memory_cleanup",
119
- category: "shared_memory",
120
- description: "Delete all expired shared-memory entries.",
121
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
122
- handler: (args) => {
123
- const cwd = args.cwd ?? process.cwd();
124
- const dir = smDir(cwd);
125
- if (!existsSync(dir))
126
- return jsonResult({ deleted: 0 });
127
- const now = Date.now();
128
- let deleted = 0;
129
- for (const file of readdirSync(dir)) {
130
- if (!file.endsWith(".json"))
131
- continue;
132
- const path = join(dir, file);
133
- try {
134
- const entry = JSON.parse(readFileSync(path, "utf8"));
135
- if (entry.expiresAt && Date.parse(entry.expiresAt) < now) {
136
- unlinkSync(path);
137
- deleted++;
138
- }
139
- }
140
- catch {
141
- // skip
142
- }
143
- }
144
- return jsonResult({ deleted });
145
- },
146
- },
147
- ];
148
- //# sourceMappingURL=shared-memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../../src/mcp/tools/shared-memory.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { type ToolDefinition } from "../types.js";
2
- export declare const stateTools: ToolDefinition[];
@@ -1,107 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { jsonResult } from "../types.js";
4
- function stateDir(cwd) {
5
- return join(resolve(cwd), ".omp", "state", "kv");
6
- }
7
- function statePath(cwd, key) {
8
- if (!/^[\w.-]+$/.test(key))
9
- throw new Error(`invalid key: ${key}`);
10
- return join(stateDir(cwd), `${key}.json`);
11
- }
12
- function atomicWriteJson(path, value) {
13
- mkdirSync(dirname(path), { recursive: true });
14
- const tmp = `${path}.tmp.${process.pid}.${Date.now()}`;
15
- writeFileSync(tmp, JSON.stringify(value, null, 2), "utf8");
16
- renameSync(tmp, path);
17
- }
18
- export const stateTools = [
19
- {
20
- name: "state_read",
21
- category: "state",
22
- description: "Read a key-value entry from .omp/state/kv/<key>.json.",
23
- inputSchema: {
24
- type: "object",
25
- properties: {
26
- key: { type: "string", description: "Key name (letters, digits, ., -, _)." },
27
- cwd: { type: "string", description: "Optional working directory." },
28
- },
29
- required: ["key"],
30
- },
31
- handler: (args) => {
32
- const path = statePath(args.cwd ?? process.cwd(), args.key);
33
- if (!existsSync(path))
34
- return jsonResult({ value: null });
35
- return jsonResult({ value: JSON.parse(readFileSync(path, "utf8")) });
36
- },
37
- },
38
- {
39
- name: "state_write",
40
- category: "state",
41
- description: "Write a key-value entry to .omp/state/kv/<key>.json (atomic).",
42
- inputSchema: {
43
- type: "object",
44
- properties: {
45
- key: { type: "string" },
46
- value: {},
47
- cwd: { type: "string" },
48
- },
49
- required: ["key", "value"],
50
- },
51
- handler: (args) => {
52
- const path = statePath(args.cwd ?? process.cwd(), args.key);
53
- atomicWriteJson(path, args.value);
54
- return jsonResult({ ok: true, path });
55
- },
56
- },
57
- {
58
- name: "state_clear",
59
- category: "state",
60
- description: "Delete a key-value entry.",
61
- inputSchema: {
62
- type: "object",
63
- properties: { key: { type: "string" }, cwd: { type: "string" } },
64
- required: ["key"],
65
- },
66
- handler: (args) => {
67
- const path = statePath(args.cwd ?? process.cwd(), args.key);
68
- if (existsSync(path))
69
- unlinkSync(path);
70
- return jsonResult({ ok: true });
71
- },
72
- },
73
- {
74
- name: "state_list_active",
75
- category: "state",
76
- description: "List all active state keys under .omp/state/kv/.",
77
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
78
- handler: (args) => {
79
- const dir = stateDir(args.cwd ?? process.cwd());
80
- if (!existsSync(dir))
81
- return jsonResult({ keys: [] });
82
- const keys = readdirSync(dir)
83
- .filter((f) => f.endsWith(".json"))
84
- .map((f) => f.replace(/\.json$/, ""))
85
- .sort();
86
- return jsonResult({ keys });
87
- },
88
- },
89
- {
90
- name: "state_get_status",
91
- category: "state",
92
- description: "Get existence + mtime for a single state key.",
93
- inputSchema: {
94
- type: "object",
95
- properties: { key: { type: "string" }, cwd: { type: "string" } },
96
- required: ["key"],
97
- },
98
- handler: (args) => {
99
- const path = statePath(args.cwd ?? process.cwd(), args.key);
100
- if (!existsSync(path))
101
- return jsonResult({ exists: false });
102
- const stats = statSync(path);
103
- return jsonResult({ exists: true, mtime: stats.mtime.toISOString(), bytes: stats.size });
104
- },
105
- },
106
- ];
107
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/mcp/tools/state.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type ToolDefinition } from "../types.js";
2
- interface TraceEntry {
3
- ts: string;
4
- sessionId?: string;
5
- event?: string;
6
- payload?: unknown;
7
- }
8
- export declare function appendTraceEntry(cwd: string, sessionId: string, entry: Omit<TraceEntry, "ts" | "sessionId">): void;
9
- export declare const traceTools: ToolDefinition[];
10
- export {};
@@ -1,102 +0,0 @@
1
- import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { jsonResult } from "../types.js";
4
- function traceDir(cwd) {
5
- return join(resolve(cwd), ".omp", "state", "trace");
6
- }
7
- function tracePath(cwd, sessionId) {
8
- if (!/^[\w.-]+$/.test(sessionId))
9
- throw new Error(`invalid sessionId: ${sessionId}`);
10
- return join(traceDir(cwd), `${sessionId}.jsonl`);
11
- }
12
- export function appendTraceEntry(cwd, sessionId, entry) {
13
- const path = tracePath(cwd, sessionId);
14
- mkdirSync(dirname(path), { recursive: true });
15
- appendFileSync(path, `${JSON.stringify({ ts: new Date().toISOString(), sessionId, ...entry })}\n`, "utf8");
16
- }
17
- function readEntries(path) {
18
- if (!existsSync(path))
19
- return [];
20
- return readFileSync(path, "utf8")
21
- .split("\n")
22
- .filter((l) => l.trim().length > 0)
23
- .map((l) => {
24
- try {
25
- return JSON.parse(l);
26
- }
27
- catch {
28
- return undefined;
29
- }
30
- })
31
- .filter((e) => Boolean(e));
32
- }
33
- function pickSessionId(cwd, sessionId) {
34
- if (sessionId)
35
- return sessionId;
36
- const dir = traceDir(cwd);
37
- if (!existsSync(dir))
38
- return undefined;
39
- const files = readdirSync(dir).filter((f) => f.endsWith(".jsonl"));
40
- if (files.length === 0)
41
- return undefined;
42
- // pick most recently modified
43
- return files
44
- .map((f) => ({ name: f.replace(/\.jsonl$/, ""), path: join(dir, f) }))
45
- .sort((a, b) => {
46
- try {
47
- const ai = Number(require("node:fs").statSync(a.path).mtimeMs);
48
- const bi = Number(require("node:fs").statSync(b.path).mtimeMs);
49
- return bi - ai;
50
- }
51
- catch {
52
- return 0;
53
- }
54
- })[0]?.name;
55
- }
56
- export const traceTools = [
57
- {
58
- name: "trace_timeline",
59
- category: "trace",
60
- description: "Read the last N entries of a session trace (default 50). Defaults to the most recently active session.",
61
- inputSchema: {
62
- type: "object",
63
- properties: {
64
- sessionId: { type: "string" },
65
- limit: { type: "number" },
66
- cwd: { type: "string" },
67
- },
68
- },
69
- handler: (args) => {
70
- const cwd = args.cwd ?? process.cwd();
71
- const sessionId = pickSessionId(cwd, args.sessionId);
72
- if (!sessionId)
73
- return jsonResult({ entries: [] });
74
- const limit = typeof args.limit === "number" ? Math.max(1, args.limit) : 50;
75
- const all = readEntries(tracePath(cwd, sessionId));
76
- return jsonResult({ sessionId, entries: all.slice(-limit) });
77
- },
78
- },
79
- {
80
- name: "trace_summary",
81
- category: "trace",
82
- description: "Summarise a session trace as event-name counts.",
83
- inputSchema: {
84
- type: "object",
85
- properties: { sessionId: { type: "string" }, cwd: { type: "string" } },
86
- },
87
- handler: (args) => {
88
- const cwd = args.cwd ?? process.cwd();
89
- const sessionId = pickSessionId(cwd, args.sessionId);
90
- if (!sessionId)
91
- return jsonResult({ counts: {} });
92
- const entries = readEntries(tracePath(cwd, sessionId));
93
- const counts = {};
94
- for (const e of entries) {
95
- const key = e.event ?? "unknown";
96
- counts[key] = (counts[key] ?? 0) + 1;
97
- }
98
- return jsonResult({ sessionId, total: entries.length, counts });
99
- },
100
- },
101
- ];
102
- //# sourceMappingURL=trace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../../src/mcp/tools/trace.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- export interface JsonSchema {
2
- type: string;
3
- properties?: Record<string, JsonSchema | {
4
- type: string;
5
- description?: string;
6
- enum?: readonly string[];
7
- }>;
8
- required?: string[];
9
- description?: string;
10
- items?: JsonSchema;
11
- additionalProperties?: boolean;
12
- }
13
- export interface ToolContent {
14
- type: "text";
15
- text: string;
16
- }
17
- export interface ToolResult {
18
- content: ToolContent[];
19
- isError?: boolean;
20
- }
21
- export interface ToolDefinition {
22
- name: string;
23
- description: string;
24
- category: string;
25
- inputSchema: JsonSchema;
26
- handler: (args: Record<string, unknown>) => Promise<ToolResult> | ToolResult;
27
- }
28
- export declare function textResult(text: string, isError?: boolean): ToolResult;
29
- export declare function jsonResult(value: unknown, isError?: boolean): ToolResult;
@@ -1,7 +0,0 @@
1
- export function textResult(text, isError = false) {
2
- return { content: [{ type: "text", text }], isError };
3
- }
4
- export function jsonResult(value, isError = false) {
5
- return { content: [{ type: "text", text: JSON.stringify(value, null, 2) }], isError };
6
- }
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp/types.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK;IACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACxF,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,21 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { loadCapabilityCatalog, loadSkillCatalog, validateCatalog } from '../src/catalog.js';
4
- test('catalog contains approved MVP skills and valid projections', () => {
5
- const catalog = loadSkillCatalog();
6
- assert.deepEqual(validateCatalog(), []);
7
- const names = catalog.skills.map((skill) => skill.name);
8
- assert.deepEqual(names, ['grill', 'verify', 'jira-ticket', 'code-review', 'qa']);
9
- assert.ok(catalog.projectionCommands.includes('grill-me'));
10
- assert.ok(catalog.projectionCommands.includes('team'));
11
- assert.ok(catalog.projectionCommands.includes('ralph'));
12
- });
13
- test('team and ralph stay thin handoff capabilities for Copilot', () => {
14
- const capabilities = loadCapabilityCatalog();
15
- for (const name of ['team', 'ralph']) {
16
- const capability = capabilities.capabilities.find((entry) => entry.name === name);
17
- assert.ok(capability, `${name} capability exists`);
18
- assert.equal(capability.support.copilot, 'thin-handoff');
19
- }
20
- });
21
- //# sourceMappingURL=catalog.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog.test.js","sourceRoot":"","sources":["../../test/catalog.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7F,IAAI,CAAC,4DAA4D,EAAE,GAAG,EAAE;IACtE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAClF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,oBAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,26 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { commentPayload, createIssuePayload, discoverJiraConfig, isJiraConfigured, linkFallbackPayload, safeUpdatePayload, transitionFallbackPayload } from '../src/jira.js';
4
- test('jira config discovery supports env and configuration detection', () => {
5
- const config = discoverJiraConfig('/tmp/no-such-root', {
6
- JIRA_SITE_URL: 'https://example.atlassian.net',
7
- JIRA_EMAIL: 'agent@example.com',
8
- JIRA_API_TOKEN: 'secret-token',
9
- JIRA_PROJECT_KEY: 'OMC'
10
- });
11
- assert.equal(config.siteUrl, 'https://example.atlassian.net');
12
- assert.equal(config.projectKey, 'OMC');
13
- assert.equal(isJiraConfigured(config), true);
14
- });
15
- test('jira adapter renders create, comment, update, and fallback payloads', () => {
16
- const config = discoverJiraConfig('/tmp/no-such-root', { JIRA_PROJECT_KEY: 'OMC' });
17
- const create = createIssuePayload(config, { summary: 'Implement slice', description: 'Body' });
18
- assert.equal(create.operation, 'create');
19
- assert.equal(create.configured, false);
20
- assert.match(JSON.stringify(create.body), /Implement slice/);
21
- assert.equal(commentPayload(config, 'OMC-1', 'Evidence').operation, 'comment');
22
- assert.equal(safeUpdatePayload(config, 'OMC-1', { summary: 'New' }).method, 'PUT');
23
- assert.equal(transitionFallbackPayload(config, 'OMC-1', 'Done').configured, false);
24
- assert.equal(linkFallbackPayload(config, 'OMC-1', 'OMC-2').operation, 'link-fallback');
25
- });
26
- //# sourceMappingURL=jira.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jira.test.js","sourceRoot":"","sources":["../../test/jira.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE7K,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,mBAAmB,EAAE;QACrD,aAAa,EAAE,+BAA+B;QAC9C,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,cAAc;QAC9B,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,MAAM,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAE7D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/E,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnF,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { lintSkills } from '../src/lint.js';
4
- import { workspaceRoot } from '../src/project.js';
5
- test('workspace skills satisfy Phase 1 catalog lint', () => {
6
- const issues = lintSkills(workspaceRoot('..'));
7
- assert.deepEqual(issues.filter((issue) => issue.level === 'error'), []);
8
- });
9
- //# sourceMappingURL=lint.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lint.test.js","sourceRoot":"","sources":["../../test/lint.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,15 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { projectCopilotCommands } from '../src/sync.js';
4
- test('dry-run projects skill aliases and thin runtime handoffs', () => {
5
- const files = projectCopilotCommands();
6
- const paths = files.map((file) => file.path);
7
- assert.ok(paths.includes('.github/copilot/commands/grill.md'));
8
- assert.ok(paths.includes('.github/copilot/commands/grill-me.md'));
9
- assert.ok(paths.includes('.github/copilot/commands/team.md'));
10
- assert.ok(paths.includes('.github/copilot/commands/ralph.md'));
11
- const team = files.find((file) => file.path.endsWith('/team.md'));
12
- assert.ok(team?.content.includes('thin capability handoff'));
13
- assert.ok(team?.content.includes('not a Copilot-native durable runtime'));
14
- });
15
- //# sourceMappingURL=sync.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../test/sync.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC"}