mtech-ai-local-runner 0.1.101 → 0.1.102
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/README.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## 0.1.102: provider tool activity is not verification
|
|
2
|
+
|
|
3
|
+
Claude Bash and tool results now appear as bounded activity. A test result is trusted only when the Runner host supplies its verification receipt; Codex and Claude use the same boundary (Work Item 7a22026b, PR #878). The event protocol and existing Work Loop authority are unchanged.
|
|
4
|
+
|
|
5
|
+
The isolated Claude CLI fixture now puts its internal scratch files under a disposable owned directory. A reviewed Claude Code 2.1.308 binary passed its scripted provider refusal scenario without a real model call. This does not certify an installed Runner or a live operational pilot. After publication, a host must install and re-register 0.1.102; Local Fix still requires its release receipt to be listed by the Gateway.
|
|
6
|
+
|
|
1
7
|
## 0.1.101: Claude tool search off
|
|
2
8
|
|
|
3
9
|
Every Claude launch sets `ENABLE_TOOL_SEARCH=false`, so newer Claude models are offered exactly the local tool set,
|
|
@@ -14,15 +14,6 @@ function relativePath(absolutePath, worktreeRoot) {
|
|
|
14
14
|
? candidate
|
|
15
15
|
: null;
|
|
16
16
|
}
|
|
17
|
-
function parseToolResultPassed(text) {
|
|
18
|
-
try {
|
|
19
|
-
const parsed = JSON.parse(text);
|
|
20
|
-
return typeof parsed.passed === "boolean" ? parsed.passed : undefined;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
17
|
function parseAssistantMessage(message, worktreeRoot) {
|
|
27
18
|
const content = message.content ?? [];
|
|
28
19
|
for (const block of content) {
|
|
@@ -39,7 +30,7 @@ function parseAssistantMessage(message, worktreeRoot) {
|
|
|
39
30
|
return { eventType: "file_changed", summary: bounded(`edited ${relative}`), payload: { file: relative } };
|
|
40
31
|
}
|
|
41
32
|
if (name === "Bash") {
|
|
42
|
-
return { eventType: "
|
|
33
|
+
return { eventType: "progress", summary: "model tool activity", payload: { kind: "tool_activity" } };
|
|
43
34
|
}
|
|
44
35
|
if (name === "AskUserQuestion") {
|
|
45
36
|
const questions = Array.isArray(input.questions) ? input.questions : [];
|
|
@@ -54,19 +45,9 @@ function parseUserMessage(message) {
|
|
|
54
45
|
for (const block of content) {
|
|
55
46
|
if (block.type !== "tool_result")
|
|
56
47
|
continue;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
? content.find((item) => typeof item === "object" && item !== null && item.type === "text")
|
|
61
|
-
: undefined;
|
|
62
|
-
const raw = typeof content === "string" ? content : text && typeof text.text === "string" ? text.text : "";
|
|
63
|
-
const passed = parseToolResultPassed(raw);
|
|
64
|
-
const resolvedPassed = passed ?? !isError;
|
|
65
|
-
return {
|
|
66
|
-
eventType: "test_result",
|
|
67
|
-
summary: resolvedPassed ? "verification passed" : "verification failed",
|
|
68
|
-
payload: { status: resolvedPassed ? "passed" : "failed" },
|
|
69
|
-
};
|
|
48
|
+
// Provider tool output is an untrusted model observation. Only the host
|
|
49
|
+
// verification path may attach a test receipt to the runtime event stream.
|
|
50
|
+
return { eventType: "progress", summary: "model tool activity", payload: { kind: "tool_activity" } };
|
|
70
51
|
}
|
|
71
52
|
return null;
|
|
72
53
|
}
|
|
@@ -92,6 +92,8 @@ export function p1ModelEvent(event) {
|
|
|
92
92
|
if (event.eventType === 'test_started' || event.eventType === 'test_result')
|
|
93
93
|
return { eventType: 'progress', summary: 'model tool activity', payload: { kind: 'tool_activity' } };
|
|
94
94
|
const payload = {};
|
|
95
|
+
if (event.eventType === 'progress' && event.payload?.kind === 'tool_activity')
|
|
96
|
+
payload.kind = 'tool_activity';
|
|
95
97
|
for (const key of ['reason', 'investigation_summary', 'question']) {
|
|
96
98
|
const value = event.payload?.[key];
|
|
97
99
|
if (typeof value === 'string')
|