@holmes-lab/holmes-kit 0.10.0 → 0.10.1
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/CHANGELOG.md +17 -1
- package/dist/.build-id +1 -1
- package/dist/holmes/cli/agents.d.ts +13 -0
- package/dist/holmes/cli/agents.js +32 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,23 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
<!-- @implements A-SPEC-209 -->
|
|
8
|
-
## [0.10.
|
|
8
|
+
## [0.10.1] - 2026-09-04
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Antigravity hooks: 0.10.0's `command`+`args` form regressed on the real launcher — reverted to an
|
|
13
|
+
unquoted single command string** (REQ-541). Field measurement on Windows/agy showed the hook
|
|
14
|
+
launcher **ignores `args`** and runs only the `command` string: 0.10.0's `command:"node"` +
|
|
15
|
+
`args:[path]` launched bare `node`, which evaluated the stdin JSON payload as code
|
|
16
|
+
(`SyntaxError: Unexpected token ':'`, exit 1) — every tool blocked. A second measurement had already
|
|
17
|
+
shown it keeps quotes **literal** (the pre-0.10.0 `node "<path>"` form died with MODULE_NOT_FOUND).
|
|
18
|
+
The only form the launcher runs is an unquoted single string, whitespace-split. `.agents/hooks.json`
|
|
19
|
+
now emits `command: "node <forward-slash path>"` (no quotes, no `args`); on win32 a path containing
|
|
20
|
+
a space is converted to its 8.3 short name, best-effort (lookup failure keeps the original path).
|
|
21
|
+
`doctor` continues to judge old (args) and new (string) wirings alike. **Re-run
|
|
22
|
+
`holmes-kit init --target <dir> --agent antigravity --force` after upgrading** — the fix changes
|
|
23
|
+
what init writes, not files already on disk. *Windows/agy real runtime and the 8.3 branch remain
|
|
24
|
+
unverified in this environment; validated by emitted shape + a naive-split execution simulation.*
|
|
9
25
|
|
|
10
26
|
Governance UX tools for multi-agent round-trips and observability, a cross-harness approval fix, and
|
|
11
27
|
an Antigravity portability fix. All additive and backward-compatible; existing behaviour is unchanged
|
package/dist/.build-id
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b8567d9-mtn379s6
|
|
@@ -49,6 +49,19 @@ export interface AgentFile {
|
|
|
49
49
|
path: string;
|
|
50
50
|
content: string;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Antigravity 훅 배선.
|
|
54
|
+
*
|
|
55
|
+
* 매처는 `*` 다. 좁히면 그 밖의 도구가 게이트를 지나가고, Antigravity 의 도구 목록은 우리가
|
|
56
|
+
* 통제하지 않는다 — 이름을 열거하는 순간 다음에 추가되는 도구가 무료 통행권을 얻는다.
|
|
57
|
+
* (Claude 배선이 `guardrail` 모드에서 좁은 매처를 쓰는 것과 다른 선택인데, 그쪽은 그 좁힘이
|
|
58
|
+
* 무엇을 뜻하는지 문서화된 모드 선택이고 여기는 기본 배선이기 때문이다.)
|
|
59
|
+
*/
|
|
60
|
+
/** `node <forward-slash path>` — unquoted, single string; the only form agy's launcher runs. */
|
|
61
|
+
export declare function antigravityHookCommand(scriptPath: string): string;
|
|
62
|
+
/** win32-only, best-effort: a spaced path becomes its 8.3 short name (no spaces); anything else — or
|
|
63
|
+
* any lookup failure — returns the input unchanged. */
|
|
64
|
+
export declare function shortPathIfSpaced(p: string): string;
|
|
52
65
|
/**
|
|
53
66
|
* 이 하네스에 써야 할 파일들. **쓰지는 않는다** — 무엇을 쓸지만 말한다.
|
|
54
67
|
*
|
|
@@ -34,11 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.CODEX_MARKETPLACE = exports.CODEX_PLUGIN_DIR = exports.HARNESS_ENFORCES = exports.AGENTS = void 0;
|
|
37
|
+
exports.antigravityHookCommand = antigravityHookCommand;
|
|
38
|
+
exports.shortPathIfSpaced = shortPathIfSpaced;
|
|
37
39
|
exports.agentFiles = agentFiles;
|
|
38
40
|
exports.agentLinks = agentLinks;
|
|
39
41
|
// @implements A-SPEC-442
|
|
40
42
|
// @implements A-SPEC-193
|
|
41
43
|
const path = __importStar(require("node:path"));
|
|
44
|
+
const node_child_process_1 = require("node:child_process");
|
|
42
45
|
const mcp_launcher_1 = require("./mcp-launcher");
|
|
43
46
|
/**
|
|
44
47
|
* 하네스별 배선물.
|
|
@@ -107,19 +110,37 @@ const mcpConfig = (packageRoot, specsDir, launcher) => {
|
|
|
107
110
|
* (Claude 배선이 `guardrail` 모드에서 좁은 매처를 쓰는 것과 다른 선택인데, 그쪽은 그 좁힘이
|
|
108
111
|
* 무엇을 뜻하는지 문서화된 모드 선택이고 여기는 기본 배선이기 때문이다.)
|
|
109
112
|
*/
|
|
110
|
-
// @implements A-SPEC-
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
// `
|
|
117
|
-
// every
|
|
118
|
-
//
|
|
113
|
+
// @implements A-SPEC-541.1
|
|
114
|
+
// Two field measurements (both 2026-09-04, Windows/agy) pinned the launcher's real contract, each by
|
|
115
|
+
// killing one prior form:
|
|
116
|
+
// · `node "C:\...js"` (quoted, A-SPEC-193 §2b-2) → the quotes stayed LITERAL and node got
|
|
117
|
+
// `"C:\...` as a module path → MODULE_NOT_FOUND. The launcher does not honor quotes.
|
|
118
|
+
// · `command:'node', args:[path]` (A-SPEC-539.1 / 0.10.0) → the launcher IGNORED `args` and ran
|
|
119
|
+
// bare `node`, which took the stdin JSON payload as code → `SyntaxError: Unexpected token ':'`
|
|
120
|
+
// (exit 1), every tool blocked. The launcher executes only the single `command` string.
|
|
121
|
+
// So the only form it can run is an UNQUOTED single command string, whitespace-split — which means
|
|
122
|
+
// the path itself must carry no space. Forward slashes (node accepts them on Windows) avoid JSON
|
|
123
|
+
// backslash escaping; a spaced path is converted to its 8.3 short name on win32, best-effort.
|
|
124
|
+
/** `node <forward-slash path>` — unquoted, single string; the only form agy's launcher runs. */
|
|
125
|
+
function antigravityHookCommand(scriptPath) {
|
|
126
|
+
return `node ${scriptPath.replace(/\\/g, '/')}`;
|
|
127
|
+
}
|
|
128
|
+
/** win32-only, best-effort: a spaced path becomes its 8.3 short name (no spaces); anything else — or
|
|
129
|
+
* any lookup failure — returns the input unchanged. */
|
|
130
|
+
function shortPathIfSpaced(p) {
|
|
131
|
+
if (process.platform !== 'win32' || !p.includes(' '))
|
|
132
|
+
return p;
|
|
133
|
+
try {
|
|
134
|
+
const out = (0, node_child_process_1.execFileSync)('cmd', ['/d', '/c', `for %I in ("${p}") do @echo %~sI`], { encoding: 'utf8' }).trim();
|
|
135
|
+
return out !== '' && !out.includes(' ') ? out : p;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return p;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
119
141
|
const antigravityHookEntry = (packageRoot, script) => ({
|
|
120
142
|
type: 'command',
|
|
121
|
-
command: '
|
|
122
|
-
args: [path.join(packageRoot, 'bin', script)],
|
|
143
|
+
command: antigravityHookCommand(shortPathIfSpaced(path.join(packageRoot, 'bin', script))),
|
|
123
144
|
timeout: 30,
|
|
124
145
|
});
|
|
125
146
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"//": "@implements A-SPEC-209",
|
|
3
3
|
"name": "@holmes-lab/holmes-kit",
|
|
4
|
-
"version": "0.10.
|
|
4
|
+
"version": "0.10.1",
|
|
5
5
|
"description": "Holmes-Kit — deterministic Agentic Software Engineering (ASE) harness with causal traceability (spec chain + D-CPG + RTM + phase guardrail)",
|
|
6
6
|
"main": "dist/holmes/mcp/server.js",
|
|
7
7
|
"types": "dist/holmes/mcp/server.d.ts",
|