@damian87/omp 0.8.0 → 0.10.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 (108) hide show
  1. package/.github/skills/create-skill/SKILL.md +3 -3
  2. package/.github/skills/daily-log/SKILL.md +1 -1
  3. package/.github/skills/jira-ticket/SKILL.md +6 -3
  4. package/.github/skills/omp-autopilot/SKILL.md +1 -1
  5. package/.github/skills/ralph/SKILL.md +6 -4
  6. package/.github/skills/research-codebase/SKILL.md +6 -6
  7. package/.github/skills/research-codebase/reference/agent-prompts.md +8 -8
  8. package/.github/skills/slack/SKILL.md +83 -0
  9. package/.github/skills/team/SKILL.md +5 -3
  10. package/.github/skills/team/scripts/team-launch.sh +11 -5
  11. package/.github/skills/ultraqa/SKILL.md +5 -2
  12. package/.github/skills/ultrawork/SKILL.md +5 -5
  13. package/.github/skills/weighted-consensus/SKILL.md +4 -3
  14. package/README.md +36 -38
  15. package/catalog/capabilities.json +46 -0
  16. package/catalog/skills-general.json +26 -0
  17. package/dist/src/cli.js +58 -5
  18. package/dist/src/cli.js.map +1 -1
  19. package/dist/src/comms/index.d.ts +13 -6
  20. package/dist/src/comms/index.js +65 -10
  21. package/dist/src/comms/index.js.map +1 -1
  22. package/dist/src/copilot/doctor.js +40 -5
  23. package/dist/src/copilot/doctor.js.map +1 -1
  24. package/dist/src/copilot/env-passthrough.d.ts +16 -0
  25. package/dist/src/copilot/env-passthrough.js +28 -0
  26. package/dist/src/copilot/env-passthrough.js.map +1 -0
  27. package/dist/src/copilot/launch.js +9 -1
  28. package/dist/src/copilot/launch.js.map +1 -1
  29. package/dist/src/copilot/trust.d.ts +22 -0
  30. package/dist/src/copilot/trust.js +62 -0
  31. package/dist/src/copilot/trust.js.map +1 -0
  32. package/dist/src/copilot/version.js +10 -0
  33. package/dist/src/copilot/version.js.map +1 -1
  34. package/dist/src/env/init.d.ts +6 -0
  35. package/dist/src/env/init.js +18 -0
  36. package/dist/src/env/init.js.map +1 -1
  37. package/dist/src/gateway/notify.d.ts +35 -0
  38. package/dist/src/gateway/notify.js +261 -0
  39. package/dist/src/gateway/notify.js.map +1 -0
  40. package/dist/src/gateway/target-parser.d.ts +76 -0
  41. package/dist/src/gateway/target-parser.js +105 -0
  42. package/dist/src/gateway/target-parser.js.map +1 -0
  43. package/dist/src/instructions-memory.js +6 -5
  44. package/dist/src/instructions-memory.js.map +1 -1
  45. package/dist/src/schedule/commands.js +1 -0
  46. package/dist/src/schedule/commands.js.map +1 -1
  47. package/dist/src/schedule/runner.d.ts +9 -0
  48. package/dist/src/schedule/runner.js +31 -1
  49. package/dist/src/schedule/runner.js.map +1 -1
  50. package/dist/src/schedule/types.d.ts +9 -0
  51. package/dist/src/team/tmux.d.ts +1 -1
  52. package/dist/src/team/tmux.js +41 -10
  53. package/dist/src/team/tmux.js.map +1 -1
  54. package/docs/plans/copilot-native-hooks.md +119 -0
  55. package/docs/plans/verification-plan.md +104 -0
  56. package/docs/slack-setup.md +33 -0
  57. package/hooks/hooks.json +52 -72
  58. package/package.json +11 -3
  59. package/plugin.json +12 -4
  60. package/scripts/agent-stop.mjs +87 -0
  61. package/scripts/error.mjs +1 -1
  62. package/scripts/lib/hook-output.mjs +32 -3
  63. package/scripts/lib/loop-driver.mjs +44 -0
  64. package/scripts/lib/version-check.mjs +3 -0
  65. package/scripts/post-tool-use.mjs +1 -1
  66. package/scripts/pre-tool-use.mjs +1 -1
  67. package/scripts/prompt-submit.mjs +4 -6
  68. package/scripts/session-end.mjs +1 -1
  69. package/scripts/session-start.mjs +5 -9
  70. package/dist/src/mcp/server.d.ts +0 -10
  71. package/dist/src/mcp/server.js +0 -44
  72. package/dist/src/mcp/server.js.map +0 -1
  73. package/dist/src/mcp/tools/daily-log.d.ts +0 -2
  74. package/dist/src/mcp/tools/daily-log.js +0 -148
  75. package/dist/src/mcp/tools/daily-log.js.map +0 -1
  76. package/dist/src/mcp/tools/index.d.ts +0 -9
  77. package/dist/src/mcp/tools/index.js +0 -15
  78. package/dist/src/mcp/tools/index.js.map +0 -1
  79. package/dist/src/mcp/tools/notepad.d.ts +0 -2
  80. package/dist/src/mcp/tools/notepad.js +0 -135
  81. package/dist/src/mcp/tools/notepad.js.map +0 -1
  82. package/dist/src/mcp/tools/project-memory.d.ts +0 -2
  83. package/dist/src/mcp/tools/project-memory.js +0 -91
  84. package/dist/src/mcp/tools/project-memory.js.map +0 -1
  85. package/dist/src/mcp/tools/shared-memory.d.ts +0 -2
  86. package/dist/src/mcp/tools/shared-memory.js +0 -148
  87. package/dist/src/mcp/tools/shared-memory.js.map +0 -1
  88. package/dist/src/mcp/tools/state.d.ts +0 -2
  89. package/dist/src/mcp/tools/state.js +0 -107
  90. package/dist/src/mcp/tools/state.js.map +0 -1
  91. package/dist/src/mcp/tools/trace.d.ts +0 -10
  92. package/dist/src/mcp/tools/trace.js +0 -102
  93. package/dist/src/mcp/tools/trace.js.map +0 -1
  94. package/dist/src/mcp/types.d.ts +0 -29
  95. package/dist/src/mcp/types.js +0 -7
  96. package/dist/src/mcp/types.js.map +0 -1
  97. package/dist/test/catalog.test.d.ts +0 -1
  98. package/dist/test/catalog.test.js +0 -21
  99. package/dist/test/catalog.test.js.map +0 -1
  100. package/dist/test/jira.test.d.ts +0 -1
  101. package/dist/test/jira.test.js +0 -26
  102. package/dist/test/jira.test.js.map +0 -1
  103. package/dist/test/lint.test.d.ts +0 -1
  104. package/dist/test/lint.test.js +0 -9
  105. package/dist/test/lint.test.js.map +0 -1
  106. package/dist/test/sync.test.d.ts +0 -1
  107. package/dist/test/sync.test.js +0 -15
  108. package/dist/test/sync.test.js.map +0 -1
@@ -1,135 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { jsonResult, textResult } from "../types.js";
4
- const SECTION_HEADERS = {
5
- priority: "## priority",
6
- working: "## working",
7
- manual: "## manual",
8
- };
9
- function notepadPath(cwd) {
10
- return join(resolve(cwd), ".omp", "notepad.md");
11
- }
12
- function readNotepad(cwd) {
13
- const p = notepadPath(cwd);
14
- if (!existsSync(p))
15
- return "";
16
- return readFileSync(p, "utf8");
17
- }
18
- function writeNotepad(cwd, content) {
19
- const p = notepadPath(cwd);
20
- mkdirSync(dirname(p), { recursive: true });
21
- const tmp = `${p}.tmp.${process.pid}.${Date.now()}`;
22
- writeFileSync(tmp, content, "utf8");
23
- renameSync(tmp, p);
24
- }
25
- function parseSections(text) {
26
- const out = { priority: "", working: "", manual: "" };
27
- let current = null;
28
- for (const line of text.split("\n")) {
29
- const match = line.match(/^##\s+(priority|working|manual)\s*$/);
30
- if (match) {
31
- current = match[1];
32
- continue;
33
- }
34
- if (current)
35
- out[current] += `${line}\n`;
36
- }
37
- for (const k of Object.keys(out))
38
- out[k] = out[k].replace(/\n+$/, "");
39
- return out;
40
- }
41
- function serializeSections(sections) {
42
- return ["priority", "working", "manual"]
43
- .map((s) => `${SECTION_HEADERS[s]}\n${sections[s]}`)
44
- .join("\n\n")
45
- .replace(/\n+$/, "") + "\n";
46
- }
47
- function writeSection(cwd, section, text) {
48
- const sections = parseSections(readNotepad(cwd));
49
- sections[section] = text;
50
- writeNotepad(cwd, serializeSections(sections));
51
- }
52
- export const notepadTools = [
53
- {
54
- name: "notepad_read",
55
- category: "notepad",
56
- description: "Read all or one section of .omp/notepad.md.",
57
- inputSchema: {
58
- type: "object",
59
- properties: {
60
- section: { type: "string", enum: ["all", "priority", "working", "manual"] },
61
- cwd: { type: "string" },
62
- },
63
- },
64
- handler: (args) => {
65
- const cwd = args.cwd ?? process.cwd();
66
- const section = args.section ?? "all";
67
- const full = readNotepad(cwd);
68
- if (section === "all")
69
- return textResult(full);
70
- const parsed = parseSections(full);
71
- return textResult(parsed[section] ?? "");
72
- },
73
- },
74
- {
75
- name: "notepad_write_priority",
76
- category: "notepad",
77
- description: "Replace the 'priority' section.",
78
- inputSchema: { type: "object", properties: { text: { type: "string" }, cwd: { type: "string" } }, required: ["text"] },
79
- handler: (args) => {
80
- writeSection(args.cwd ?? process.cwd(), "priority", String(args.text ?? ""));
81
- return jsonResult({ ok: true });
82
- },
83
- },
84
- {
85
- name: "notepad_write_working",
86
- category: "notepad",
87
- description: "Replace the 'working' section.",
88
- inputSchema: { type: "object", properties: { text: { type: "string" }, cwd: { type: "string" } }, required: ["text"] },
89
- handler: (args) => {
90
- writeSection(args.cwd ?? process.cwd(), "working", String(args.text ?? ""));
91
- return jsonResult({ ok: true });
92
- },
93
- },
94
- {
95
- name: "notepad_write_manual",
96
- category: "notepad",
97
- description: "Replace the 'manual' section.",
98
- inputSchema: { type: "object", properties: { text: { type: "string" }, cwd: { type: "string" } }, required: ["text"] },
99
- handler: (args) => {
100
- writeSection(args.cwd ?? process.cwd(), "manual", String(args.text ?? ""));
101
- return jsonResult({ ok: true });
102
- },
103
- },
104
- {
105
- name: "notepad_prune",
106
- category: "notepad",
107
- description: "Clear all sections of the notepad.",
108
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
109
- handler: (args) => {
110
- writeNotepad(args.cwd ?? process.cwd(), serializeSections({ priority: "", working: "", manual: "" }));
111
- return jsonResult({ ok: true });
112
- },
113
- },
114
- {
115
- name: "notepad_stats",
116
- category: "notepad",
117
- description: "Return byte count + line count + last-modified for the notepad.",
118
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
119
- handler: (args) => {
120
- const cwd = args.cwd ?? process.cwd();
121
- const p = notepadPath(cwd);
122
- if (!existsSync(p))
123
- return jsonResult({ exists: false });
124
- const stats = statSync(p);
125
- const text = readFileSync(p, "utf8");
126
- return jsonResult({
127
- exists: true,
128
- bytes: stats.size,
129
- lineCount: text.split("\n").length,
130
- mtime: stats.mtime.toISOString(),
131
- });
132
- },
133
- },
134
- ];
135
- //# sourceMappingURL=notepad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notepad.js","sourceRoot":"","sources":["../../../../src/mcp/tools/notepad.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { type ToolDefinition } from "../types.js";
2
- export declare const projectMemoryTools: ToolDefinition[];
@@ -1,91 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { jsonResult } from "../types.js";
4
- function memPath(cwd) {
5
- return join(resolve(cwd), ".omp", "project-memory.json");
6
- }
7
- function readMemory(cwd) {
8
- const p = memPath(cwd);
9
- if (!existsSync(p))
10
- return { notes: [], directives: [], updatedAt: new Date(0).toISOString() };
11
- try {
12
- return JSON.parse(readFileSync(p, "utf8"));
13
- }
14
- catch {
15
- return { notes: [], directives: [], updatedAt: new Date(0).toISOString() };
16
- }
17
- }
18
- function writeMemory(cwd, memory) {
19
- const p = memPath(cwd);
20
- mkdirSync(dirname(p), { recursive: true });
21
- const tmp = `${p}.tmp.${process.pid}.${Date.now()}`;
22
- writeFileSync(tmp, JSON.stringify({ ...memory, updatedAt: new Date().toISOString() }, null, 2), "utf8");
23
- renameSync(tmp, p);
24
- }
25
- export const projectMemoryTools = [
26
- {
27
- name: "project_memory_read",
28
- category: "project_memory",
29
- description: "Read .omp/project-memory.json (notes + directives).",
30
- inputSchema: { type: "object", properties: { cwd: { type: "string" } } },
31
- handler: (args) => jsonResult(readMemory(args.cwd ?? process.cwd())),
32
- },
33
- {
34
- name: "project_memory_write",
35
- category: "project_memory",
36
- description: "Replace .omp/project-memory.json with the given notes + directives.",
37
- inputSchema: {
38
- type: "object",
39
- properties: {
40
- notes: { type: "array", items: { type: "string" } },
41
- directives: { type: "array", items: { type: "string" } },
42
- cwd: { type: "string" },
43
- },
44
- },
45
- handler: (args) => {
46
- const cwd = args.cwd ?? process.cwd();
47
- const memory = {
48
- notes: args.notes ?? readMemory(cwd).notes,
49
- directives: args.directives ?? readMemory(cwd).directives,
50
- updatedAt: new Date().toISOString(),
51
- };
52
- writeMemory(cwd, memory);
53
- return jsonResult({ ok: true });
54
- },
55
- },
56
- {
57
- name: "project_memory_add_note",
58
- category: "project_memory",
59
- description: "Append a single note to project memory.",
60
- inputSchema: {
61
- type: "object",
62
- properties: { note: { type: "string" }, cwd: { type: "string" } },
63
- required: ["note"],
64
- },
65
- handler: (args) => {
66
- const cwd = args.cwd ?? process.cwd();
67
- const memory = readMemory(cwd);
68
- memory.notes.push(String(args.note));
69
- writeMemory(cwd, memory);
70
- return jsonResult({ ok: true, count: memory.notes.length });
71
- },
72
- },
73
- {
74
- name: "project_memory_add_directive",
75
- category: "project_memory",
76
- description: "Append a single directive to project memory.",
77
- inputSchema: {
78
- type: "object",
79
- properties: { directive: { type: "string" }, cwd: { type: "string" } },
80
- required: ["directive"],
81
- },
82
- handler: (args) => {
83
- const cwd = args.cwd ?? process.cwd();
84
- const memory = readMemory(cwd);
85
- memory.directives.push(String(args.directive));
86
- writeMemory(cwd, memory);
87
- return jsonResult({ ok: true, count: memory.directives.length });
88
- },
89
- },
90
- ];
91
- //# sourceMappingURL=project-memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-memory.js","sourceRoot":"","sources":["../../../../src/mcp/tools/project-memory.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { type ToolDefinition } from "../types.js";
2
- export declare const sharedMemoryTools: ToolDefinition[];
@@ -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