@gramatr/mcp 0.10.12 → 0.10.14
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.
- package/dist/hooks/lib/feedback.d.ts.map +1 -1
- package/dist/hooks/lib/feedback.js +0 -1
- package/dist/hooks/lib/feedback.js.map +1 -1
- package/dist/hooks/lib/hook-state.d.ts +53 -1
- package/dist/hooks/lib/hook-state.d.ts.map +1 -1
- package/dist/hooks/lib/hook-state.js +274 -81
- package/dist/hooks/lib/hook-state.js.map +1 -1
- package/dist/hooks/rating-capture.d.ts.map +1 -1
- package/dist/hooks/rating-capture.js +47 -31
- package/dist/hooks/rating-capture.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +154 -147
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -1
- package/dist/hooks/user-prompt-submit.js +96 -38
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/server/hooks-listener.d.ts +13 -16
- package/dist/server/hooks-listener.d.ts.map +1 -1
- package/dist/server/hooks-listener.js +75 -27
- package/dist/server/hooks-listener.js.map +1 -1
- package/dist/tools/local-tools.d.ts +1 -1
- package/dist/tools/local-tools.d.ts.map +1 -1
- package/dist/tools/local-tools.js +69 -2
- package/dist/tools/local-tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { join } from
|
|
4
|
-
import { getGramatrDirFromEnv, getHomeDir } from
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { resolveHookClientRuntime } from
|
|
8
|
-
import {
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { appendFileSync, existsSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { getGramatrDirFromEnv, getHomeDir } from "../config-runtime.js";
|
|
5
|
+
import { callTool } from "../proxy/local-client.js";
|
|
6
|
+
import { RATING_FEEDBACK_TIMEOUT_MS } from "./generated/hook-timeouts.js";
|
|
7
|
+
import { resolveHookClientRuntime } from "./lib/client-runtime.js";
|
|
8
|
+
import { submitPendingClassificationFeedback } from "./lib/feedback.js";
|
|
9
|
+
import { readHookInput } from "./lib/gramatr-hook-utils.js";
|
|
10
|
+
import { drainOutbox, enqueueOutboxMutation } from "./lib/hook-state.js";
|
|
11
|
+
/** Swallow any rejection from drainOutbox — it is strictly best-effort. */
|
|
12
|
+
function swallow(_err) { }
|
|
9
13
|
function parseExplicitRating(prompt) {
|
|
10
14
|
const trimmed = prompt.trim();
|
|
11
15
|
const match = trimmed.match(/^(10|[1-9])(?:\s*[-:]\s*|\s+)?(.*)$/);
|
|
@@ -26,7 +30,7 @@ export async function runRatingCaptureHook(_args = []) {
|
|
|
26
30
|
const runtime = resolveHookClientRuntime(_args);
|
|
27
31
|
try {
|
|
28
32
|
const data = await readHookInput();
|
|
29
|
-
const sessionId = data.session_id ||
|
|
33
|
+
const sessionId = data.session_id || "unknown";
|
|
30
34
|
// Submit classification feedback for the PREVIOUS turn before processing this prompt.
|
|
31
35
|
try {
|
|
32
36
|
await Promise.race([
|
|
@@ -42,7 +46,7 @@ export async function runRatingCaptureHook(_args = []) {
|
|
|
42
46
|
const detail = err instanceof Error ? err.message : String(err);
|
|
43
47
|
process.stderr.write(`[gramatr] rating-capture feedback error: ${detail}\n`);
|
|
44
48
|
}
|
|
45
|
-
const prompt = data.prompt || data.message ||
|
|
49
|
+
const prompt = data.prompt || data.message || "";
|
|
46
50
|
if (!prompt.trim()) {
|
|
47
51
|
process.stdout.write(JSON.stringify({}));
|
|
48
52
|
return 0;
|
|
@@ -52,9 +56,9 @@ export async function runRatingCaptureHook(_args = []) {
|
|
|
52
56
|
process.stdout.write(JSON.stringify({}));
|
|
53
57
|
return 0;
|
|
54
58
|
}
|
|
55
|
-
const baseDir = getGramatrDirFromEnv() || join(getHomeDir(),
|
|
56
|
-
const stateDir = join(baseDir,
|
|
57
|
-
const ratingsFile = join(stateDir,
|
|
59
|
+
const baseDir = getGramatrDirFromEnv() || join(getHomeDir(), ".gramatr");
|
|
60
|
+
const stateDir = join(baseDir, ".state");
|
|
61
|
+
const ratingsFile = join(stateDir, "ratings.jsonl");
|
|
58
62
|
if (!existsSync(stateDir))
|
|
59
63
|
mkdirSync(stateDir, { recursive: true });
|
|
60
64
|
const entry = {
|
|
@@ -65,34 +69,46 @@ export async function runRatingCaptureHook(_args = []) {
|
|
|
65
69
|
agent_name: runtime.agentName,
|
|
66
70
|
...(result.comment ? { comment: result.comment } : {}),
|
|
67
71
|
};
|
|
68
|
-
appendFileSync(ratingsFile, JSON.stringify(entry) +
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
feedback_type:
|
|
72
|
+
appendFileSync(ratingsFile, JSON.stringify(entry) + "\n", "utf8");
|
|
73
|
+
// #1214: enqueue the rating via the local SQLite mutation outbox so we
|
|
74
|
+
// survive network blips. Best-effort drain immediately afterwards — if
|
|
75
|
+
// the network is up the row is replicated in-process; if it isn't, the
|
|
76
|
+
// row waits until session-start (or the next rating) retries.
|
|
77
|
+
try {
|
|
78
|
+
enqueueOutboxMutation("gramatr_submit_feedback", {
|
|
79
|
+
feedback_type: "rating",
|
|
76
80
|
rating: entry.rating,
|
|
77
81
|
task_description: entry.comment || `Session rating ${entry.rating}/10`,
|
|
78
82
|
session_id: entry.session_id,
|
|
79
83
|
client_type: entry.client_type,
|
|
80
84
|
agent_name: entry.agent_name,
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
}
|
|
85
|
+
});
|
|
86
|
+
drainOutbox(callTool).catch(swallow);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Outbox unavailable — swallow so ratings.jsonl (the human audit log)
|
|
90
|
+
// remains the source of truth.
|
|
91
|
+
}
|
|
84
92
|
if (result.rating <= 3) {
|
|
85
93
|
try {
|
|
86
|
-
const msg = result.comment
|
|
94
|
+
const msg = result.comment
|
|
95
|
+
? `Rating ${result.rating}/10: ${result.comment}`
|
|
96
|
+
: `Rating ${result.rating}/10 received`;
|
|
87
97
|
const p = process.platform;
|
|
88
|
-
if (p ===
|
|
89
|
-
spawn(
|
|
98
|
+
if (p === "darwin") {
|
|
99
|
+
spawn("osascript", [
|
|
100
|
+
"-e",
|
|
101
|
+
`display notification "${msg}" with title "gramatr" subtitle "Low Rating Alert"`,
|
|
102
|
+
], { stdio: "ignore", detached: true }).unref();
|
|
90
103
|
}
|
|
91
|
-
else if (p ===
|
|
92
|
-
spawn(
|
|
104
|
+
else if (p === "linux") {
|
|
105
|
+
spawn("notify-send", ["gramatr — Low Rating", msg], {
|
|
106
|
+
stdio: "ignore",
|
|
107
|
+
detached: true,
|
|
108
|
+
}).unref();
|
|
93
109
|
}
|
|
94
|
-
else if (p ===
|
|
95
|
-
spawn(
|
|
110
|
+
else if (p === "win32") {
|
|
111
|
+
spawn("powershell", ["-Command", `[System.Windows.Forms.MessageBox]::Show('${msg}','gramatr Low Rating')`], { stdio: "ignore", detached: true }).unref();
|
|
96
112
|
}
|
|
97
113
|
}
|
|
98
114
|
catch { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rating-capture.js","sourceRoot":"","sources":["../../src/hooks/rating-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"rating-capture.js","sourceRoot":"","sources":["../../src/hooks/rating-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+PH;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsZ/E"}
|