ai-jue-adapter-hermes 0.3.0 → 0.3.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.
- package/dist/capabilities/agents.d.ts +1 -1
- package/dist/capabilities/agents.js +1 -1
- package/dist/capabilities/cron.js +1 -1
- package/dist/capabilities/hooks.d.ts +1 -1
- package/dist/capabilities/hooks.js +1 -1
- package/dist/capabilities/layout.d.ts +2 -1
- package/dist/capabilities/layout.js +16 -3
- package/dist/capabilities/layout.js.map +1 -1
- package/dist/capabilities/skill-plugin.js +3 -16
- package/dist/capabilities/skill-plugin.js.map +1 -1
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/skills.js +3 -3
- package/dist/capabilities/skills.js.map +1 -1
- package/dist/confirm.d.ts +5 -9
- package/dist/confirm.js +125 -29
- package/dist/confirm.js.map +1 -1
- package/dist/read.d.ts +1 -1
- package/dist/read.js +1 -1
- package/package.json +7 -4
|
@@ -3,7 +3,7 @@ import type { CapabilityMapping } from "ai-jue-core";
|
|
|
3
3
|
* Hermes has no per-workspace `agents/` directory (unlike OpenClaw
|
|
4
4
|
* which uses `.openclaw/agents/<name>/`). The single-agent runtime
|
|
5
5
|
* reads the `agent:` block from the user-home `~/.hermes/config.yaml`
|
|
6
|
-
* (
|
|
6
|
+
* (verified against a redacted Hermes `config.yaml` fixture). Per the
|
|
7
7
|
* JUE-303 honest-stance principle, the `agents` mapping is a no-op
|
|
8
8
|
* round-trip so the equivalence contract holds vacuously.
|
|
9
9
|
*/
|
|
@@ -5,7 +5,7 @@ exports.agents = agents;
|
|
|
5
5
|
* Hermes has no per-workspace `agents/` directory (unlike OpenClaw
|
|
6
6
|
* which uses `.openclaw/agents/<name>/`). The single-agent runtime
|
|
7
7
|
* reads the `agent:` block from the user-home `~/.hermes/config.yaml`
|
|
8
|
-
* (
|
|
8
|
+
* (verified against a redacted Hermes `config.yaml` fixture). Per the
|
|
9
9
|
* JUE-303 honest-stance principle, the `agents` mapping is a no-op
|
|
10
10
|
* round-trip so the equivalence contract holds vacuously.
|
|
11
11
|
*/
|
|
@@ -9,7 +9,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
9
9
|
const crypto_1 = require("crypto");
|
|
10
10
|
/**
|
|
11
11
|
* Hermes cron jobs live at `<workspace>/cron/jobs.json` (verified
|
|
12
|
-
* against
|
|
12
|
+
* against a redacted Hermes `cron/jobs.json` fixture — a top-level JSON
|
|
13
13
|
* object mapping job_id → {name, prompt, schedule, repeat, deliver,
|
|
14
14
|
* enabled, model, provider, base_url, skills, created_at}). Each
|
|
15
15
|
* schedule is a standard cron string (e.g. "0 23 * * *"). Per the
|
|
@@ -2,7 +2,7 @@ import type { CapabilityMapping } from "ai-jue-core";
|
|
|
2
2
|
/**
|
|
3
3
|
* Hermes has no per-workspace `hooks/` directory — the
|
|
4
4
|
* `hooks_auto_accept` block in the real `config.yaml` (verified
|
|
5
|
-
* against
|
|
5
|
+
* against a redacted Hermes `config.yaml` fixture) configures the
|
|
6
6
|
* session-level hooks-acceptance policy, and the
|
|
7
7
|
* `~/.hermes/hooks/` directory exists but is **empty** on the real
|
|
8
8
|
* installation. Per the JUE-303 honest-stance principle, the `hooks`
|
|
@@ -4,7 +4,7 @@ exports.hooks = hooks;
|
|
|
4
4
|
/**
|
|
5
5
|
* Hermes has no per-workspace `hooks/` directory — the
|
|
6
6
|
* `hooks_auto_accept` block in the real `config.yaml` (verified
|
|
7
|
-
* against
|
|
7
|
+
* against a redacted Hermes `config.yaml` fixture) configures the
|
|
8
8
|
* session-level hooks-acceptance policy, and the
|
|
9
9
|
* `~/.hermes/hooks/` directory exists but is **empty** on the real
|
|
10
10
|
* installation. Per the JUE-303 honest-stance principle, the `hooks`
|
|
@@ -12,5 +12,6 @@ export declare function isWorkspaceLayout(root: string): boolean;
|
|
|
12
12
|
* `plugin.yaml` must never be claimed as managed.
|
|
13
13
|
*/
|
|
14
14
|
export declare const MANAGED_INIT_MARKER = "Auto-generated by ai-jue";
|
|
15
|
-
|
|
15
|
+
export declare const MANAGED_INIT_SOURCE = "\"\"\"Auto-generated by ai-jue \u2014 registers bundled skills only (no tools).\"\"\"\nfrom pathlib import Path\n\n\ndef register(ctx):\n skills_dir = Path(__file__).parent / \"skills\"\n if not skills_dir.is_dir():\n return\n for child in sorted(skills_dir.iterdir()):\n skill_md = child / \"SKILL.md\"\n if child.is_dir() and skill_md.is_file():\n ctx.register_skill(child.name, skill_md)\n";
|
|
16
|
+
/** Return a managed layout only when its initializer bytes are exactly ours. */
|
|
16
17
|
export declare function detectArtifactKind(root: string): HermesArtifactKind | undefined;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MANAGED_INIT_MARKER = void 0;
|
|
6
|
+
exports.MANAGED_INIT_SOURCE = exports.MANAGED_INIT_MARKER = void 0;
|
|
7
7
|
exports.isWorkspaceLayout = isWorkspaceLayout;
|
|
8
8
|
exports.detectArtifactKind = detectArtifactKind;
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
@@ -21,12 +21,25 @@ function isWorkspaceLayout(root) {
|
|
|
21
21
|
* `plugin.yaml` must never be claimed as managed.
|
|
22
22
|
*/
|
|
23
23
|
exports.MANAGED_INIT_MARKER = "Auto-generated by ai-jue";
|
|
24
|
-
|
|
24
|
+
exports.MANAGED_INIT_SOURCE = `"""Auto-generated by ai-jue — registers bundled skills only (no tools)."""
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def register(ctx):
|
|
29
|
+
skills_dir = Path(__file__).parent / "skills"
|
|
30
|
+
if not skills_dir.is_dir():
|
|
31
|
+
return
|
|
32
|
+
for child in sorted(skills_dir.iterdir()):
|
|
33
|
+
skill_md = child / "SKILL.md"
|
|
34
|
+
if child.is_dir() and skill_md.is_file():
|
|
35
|
+
ctx.register_skill(child.name, skill_md)
|
|
36
|
+
`;
|
|
37
|
+
/** Return a managed layout only when its initializer bytes are exactly ours. */
|
|
25
38
|
function detectArtifactKind(root) {
|
|
26
39
|
const initPath = path_1.default.join(root, "__init__.py");
|
|
27
40
|
if (fs_1.default.existsSync(path_1.default.join(root, "plugin.yaml")) &&
|
|
28
41
|
fs_1.default.existsSync(initPath) &&
|
|
29
|
-
fs_1.default.readFileSync(initPath, "utf8")
|
|
42
|
+
fs_1.default.readFileSync(initPath, "utf8") === exports.MANAGED_INIT_SOURCE) {
|
|
30
43
|
return "skill-plugin";
|
|
31
44
|
}
|
|
32
45
|
if (isWorkspaceLayout(root))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/capabilities/layout.ts"],"names":[],"mappings":";;;;;;AAUA,8CAOC;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/capabilities/layout.ts"],"names":[],"mappings":";;;;;;AAUA,8CAOC;AAwBD,gDAWC;AApDD,4CAAoB;AACpB,gDAAwB;AASxB,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,CACL,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7C,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACU,QAAA,mBAAmB,GAAG,0BAA0B,CAAC;AACjD,QAAA,mBAAmB,GAAG;;;;;;;;;;;;CAYlC,CAAC;AAEF,gFAAgF;AAChF,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAChD,IACE,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7C,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,2BAAmB,EACzD,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -49,19 +49,6 @@ function assertSafeSkillName(name) {
|
|
|
49
49
|
throw new Error(`Hermes skill-plugin name must be a safe single path segment: ${name}`);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
const INIT_PY = `"""Auto-generated by ai-jue — registers bundled skills only (no tools)."""
|
|
53
|
-
from pathlib import Path
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def register(ctx):
|
|
57
|
-
skills_dir = Path(__file__).parent / "skills"
|
|
58
|
-
if not skills_dir.is_dir():
|
|
59
|
-
return
|
|
60
|
-
for child in sorted(skills_dir.iterdir()):
|
|
61
|
-
skill_md = child / "SKILL.md"
|
|
62
|
-
if child.is_dir() and skill_md.is_file():
|
|
63
|
-
ctx.register_skill(child.name, skill_md)
|
|
64
|
-
`;
|
|
65
52
|
function textChange(root, absolutePath, newContent) {
|
|
66
53
|
const exists = fs_1.default.existsSync(absolutePath);
|
|
67
54
|
const existing = exists ? fs_1.default.readFileSync(absolutePath, "utf8") : undefined;
|
|
@@ -93,7 +80,7 @@ function writeSkillPlugin(canonical, root, pluginManifest) {
|
|
|
93
80
|
// Refuse (fail explicit) rather than overwrite a hand-authored package.
|
|
94
81
|
const initPath = path_1.default.join(root, "__init__.py");
|
|
95
82
|
if (fs_1.default.existsSync(initPath) &&
|
|
96
|
-
|
|
83
|
+
fs_1.default.readFileSync(initPath, "utf8") !== layout_1.MANAGED_INIT_SOURCE) {
|
|
97
84
|
throw new Error("Hermes skill-plugin refuses to overwrite a hand-authored __init__.py; " +
|
|
98
85
|
"remove it or point the plugin at an empty directory.");
|
|
99
86
|
}
|
|
@@ -105,7 +92,7 @@ function writeSkillPlugin(canonical, root, pluginManifest) {
|
|
|
105
92
|
const manifestChange = textChange(root, path_1.default.join(root, "plugin.yaml"), manifestYaml);
|
|
106
93
|
if (manifestChange)
|
|
107
94
|
changes.push(manifestChange);
|
|
108
|
-
const initChange = textChange(root, path_1.default.join(root, "__init__.py"),
|
|
95
|
+
const initChange = textChange(root, path_1.default.join(root, "__init__.py"), layout_1.MANAGED_INIT_SOURCE);
|
|
109
96
|
if (initChange)
|
|
110
97
|
changes.push(initChange);
|
|
111
98
|
if (canonical.skills && Object.keys(canonical.skills).length > 0) {
|
|
@@ -126,7 +113,7 @@ function writeSkillPlugin(canonical, root, pluginManifest) {
|
|
|
126
113
|
dirPath: (r) => path_1.default.join(r, "skills"),
|
|
127
114
|
mainFileName: "SKILL.md",
|
|
128
115
|
// Preserve ai-assets sidecars; Hermes loads SKILL.md and can follow relative refs.
|
|
129
|
-
bundleKeys: ["references", "scripts", "assets"],
|
|
116
|
+
bundleKeys: ["references", "scripts", "assets", "files"],
|
|
130
117
|
});
|
|
131
118
|
changes.push(...mapping.write(root, flatSkills, TARGET));
|
|
132
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-plugin.js","sourceRoot":"","sources":["../../src/capabilities/skill-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"skill-plugin.js","sourceRoot":"","sources":["../../src/capabilities/skill-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CapabilityMapping } from "ai-jue-core";
|
|
2
2
|
/**
|
|
3
|
-
* `skills/<category>/<name>/SKILL.md` (+ optional
|
|
3
|
+
* `skills/<category>/<name>/SKILL.md` (+ optional support directories), verified
|
|
4
4
|
* against a live Hermes installation's `~/.hermes/skills/` tree — e.g.
|
|
5
5
|
* `skills/software-development/plan/SKILL.md`,
|
|
6
6
|
* `skills/software-development/hermes-windows-maintenance/references/*.md`.
|
|
@@ -43,8 +43,8 @@ const yaml = __importStar(require("js-yaml"));
|
|
|
43
43
|
const ai_jue_core_1 = require("ai-jue-core");
|
|
44
44
|
const SAFE_SEGMENT = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
|
|
45
45
|
const MAIN_FILE = "SKILL.md";
|
|
46
|
-
/**
|
|
47
|
-
const BUNDLE_KEYS = ["references"];
|
|
46
|
+
/** Skill-relative support files stay beside SKILL.md so portable Presets keep their complete contract. */
|
|
47
|
+
const BUNDLE_KEYS = ["references", "scripts", "assets"];
|
|
48
48
|
function assertSafeSegment(kind, value) {
|
|
49
49
|
if (!SAFE_SEGMENT.test(value)) {
|
|
50
50
|
throw new Error(`Hermes skill ${kind} must be a safe single path segment: ${value}`);
|
|
@@ -90,7 +90,7 @@ function buildTextChange(target, root, absolutePath, newContent) {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
|
-
* `skills/<category>/<name>/SKILL.md` (+ optional
|
|
93
|
+
* `skills/<category>/<name>/SKILL.md` (+ optional support directories), verified
|
|
94
94
|
* against a live Hermes installation's `~/.hermes/skills/` tree — e.g.
|
|
95
95
|
* `skills/software-development/plan/SKILL.md`,
|
|
96
96
|
* `skills/software-development/hermes-windows-maintenance/references/*.md`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/capabilities/skills.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EA,wBAoFC;AAnKD,4CAAoB;AACpB,gDAAwB;AACxB,8CAAgC;AAChC,6CAA4F;AAG5F,MAAM,YAAY,GAAG,8BAA8B,CAAC;AACpD,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/capabilities/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/confirm.d.ts
CHANGED
|
@@ -7,16 +7,12 @@ export interface ConfirmContext extends CoreConfirmContext {
|
|
|
7
7
|
* Hermes v0.18.0 has no per-file validate command analogous to
|
|
8
8
|
* `claude plugin validate --strict` (Claude) or
|
|
9
9
|
* `codex plugin marketplace add <local>` (Codex). The strongest native
|
|
10
|
-
* confirmation path is the
|
|
11
|
-
*
|
|
12
|
-
* `config validate` for the on-disk config tree.
|
|
10
|
+
* confirmation path is the Hermes `tirith` binary on PATH, which
|
|
11
|
+
* exposes `config validate` for the on-disk config tree.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* real Hermes state in the rare case the user has one on the same
|
|
18
|
-
* machine, even though in this contract test we use a freshly-built
|
|
19
|
-
* workspace).
|
|
13
|
+
* Live Agent consumption is verified out of band over SSH against an
|
|
14
|
+
* isolated HOME and is not committed. In-repo confirmation uses
|
|
15
|
+
* structural fixtures only.
|
|
20
16
|
*
|
|
21
17
|
* For workspace scope, `tirith` validates the config tree. For the thin
|
|
22
18
|
* skill-plugin Artifact, the generated plugin surface provides structural
|
package/dist/confirm.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -8,22 +41,42 @@ const child_process_1 = require("child_process");
|
|
|
8
41
|
const fs_1 = require("fs");
|
|
9
42
|
const os_1 = __importDefault(require("os"));
|
|
10
43
|
const path_1 = __importDefault(require("path"));
|
|
44
|
+
const url_1 = require("url");
|
|
45
|
+
const yaml = __importStar(require("js-yaml"));
|
|
11
46
|
const layout_1 = require("./capabilities/layout");
|
|
12
47
|
const TARGET = "hermes";
|
|
48
|
+
const SAFE_IDENTITY = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
49
|
+
function minimalEnvironment(home) {
|
|
50
|
+
const env = { HOME: home, USERPROFILE: home, HERMES_HOME: home };
|
|
51
|
+
for (const key of ["PATH", "SystemRoot", "ComSpec", "PATHEXT", "TEMP", "TMP"]) {
|
|
52
|
+
if (process.env[key])
|
|
53
|
+
env[key] = process.env[key];
|
|
54
|
+
}
|
|
55
|
+
return env;
|
|
56
|
+
}
|
|
57
|
+
function isRegularContained(root, candidate) {
|
|
58
|
+
try {
|
|
59
|
+
if (!(0, fs_1.lstatSync)(candidate).isFile())
|
|
60
|
+
return false;
|
|
61
|
+
const realRoot = (0, fs_1.realpathSync)(root);
|
|
62
|
+
const realCandidate = (0, fs_1.realpathSync)(candidate);
|
|
63
|
+
const relative = path_1.default.relative(realRoot, realCandidate);
|
|
64
|
+
return relative === "" || (!relative.startsWith(`..${path_1.default.sep}`) && relative !== ".." && !path_1.default.isAbsolute(relative));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
13
70
|
/**
|
|
14
71
|
* Hermes v0.18.0 has no per-file validate command analogous to
|
|
15
72
|
* `claude plugin validate --strict` (Claude) or
|
|
16
73
|
* `codex plugin marketplace add <local>` (Codex). The strongest native
|
|
17
|
-
* confirmation path is the
|
|
18
|
-
*
|
|
19
|
-
* `config validate` for the on-disk config tree.
|
|
74
|
+
* confirmation path is the Hermes `tirith` binary on PATH, which
|
|
75
|
+
* exposes `config validate` for the on-disk config tree.
|
|
20
76
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* real Hermes state in the rare case the user has one on the same
|
|
25
|
-
* machine, even though in this contract test we use a freshly-built
|
|
26
|
-
* workspace).
|
|
77
|
+
* Live Agent consumption is verified out of band over SSH against an
|
|
78
|
+
* isolated HOME and is not committed. In-repo confirmation uses
|
|
79
|
+
* structural fixtures only.
|
|
27
80
|
*
|
|
28
81
|
* For workspace scope, `tirith` validates the config tree. For the thin
|
|
29
82
|
* skill-plugin Artifact, the generated plugin surface provides structural
|
|
@@ -33,27 +86,45 @@ async function confirm(_results, context) {
|
|
|
33
86
|
if ((context.artifactKind ?? (0, layout_1.detectArtifactKind)(context.artifactRoot)) === "skill-plugin") {
|
|
34
87
|
const manifest = path_1.default.join(context.artifactRoot, "plugin.yaml");
|
|
35
88
|
const initializer = path_1.default.join(context.artifactRoot, "__init__.py");
|
|
36
|
-
if (!(
|
|
89
|
+
if (!isRegularContained(context.artifactRoot, manifest) ||
|
|
90
|
+
!isRegularContained(context.artifactRoot, initializer)) {
|
|
37
91
|
return {
|
|
38
92
|
target: TARGET,
|
|
39
93
|
status: "failed",
|
|
40
|
-
evidence: "skill-plugin requires plugin.yaml and __init__.py",
|
|
94
|
+
evidence: "skill-plugin requires contained regular plugin.yaml and __init__.py files",
|
|
41
95
|
};
|
|
42
96
|
}
|
|
43
97
|
const initSource = (0, fs_1.readFileSync)(initializer, "utf8");
|
|
44
|
-
if (
|
|
98
|
+
if (initSource !== layout_1.MANAGED_INIT_SOURCE) {
|
|
45
99
|
return {
|
|
46
100
|
target: TARGET,
|
|
47
101
|
status: "failed",
|
|
48
|
-
evidence: "skill-plugin __init__.py does not
|
|
102
|
+
evidence: "skill-plugin __init__.py does not match the managed initializer",
|
|
49
103
|
};
|
|
50
104
|
}
|
|
105
|
+
let manifestIdentity = "";
|
|
106
|
+
try {
|
|
107
|
+
const parsed = yaml.load((0, fs_1.readFileSync)(manifest, "utf8"));
|
|
108
|
+
if (typeof parsed?.name !== "string" ||
|
|
109
|
+
!SAFE_IDENTITY.test(parsed.name) ||
|
|
110
|
+
typeof parsed.version !== "string" ||
|
|
111
|
+
!parsed.version.trim()) {
|
|
112
|
+
throw new Error("invalid identity");
|
|
113
|
+
}
|
|
114
|
+
manifestIdentity = parsed.name;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return { target: TARGET, status: "failed", evidence: "skill-plugin manifest identity is invalid" };
|
|
118
|
+
}
|
|
51
119
|
const skillsRoot = path_1.default.join(context.artifactRoot, "skills");
|
|
52
120
|
if ((0, fs_1.existsSync)(skillsRoot)) {
|
|
121
|
+
if ((0, fs_1.lstatSync)(skillsRoot).isSymbolicLink() || !(0, fs_1.lstatSync)(skillsRoot).isDirectory()) {
|
|
122
|
+
return { target: TARGET, status: "failed", evidence: "skill-plugin skills root must be a regular directory" };
|
|
123
|
+
}
|
|
53
124
|
for (const entry of (0, fs_1.readdirSync)(skillsRoot, { withFileTypes: true })) {
|
|
54
125
|
if (!entry.isDirectory())
|
|
55
126
|
continue;
|
|
56
|
-
if (!(
|
|
127
|
+
if (!isRegularContained(context.artifactRoot, path_1.default.join(skillsRoot, entry.name, "SKILL.md"))) {
|
|
57
128
|
return {
|
|
58
129
|
target: TARGET,
|
|
59
130
|
status: "failed",
|
|
@@ -62,11 +133,42 @@ async function confirm(_results, context) {
|
|
|
62
133
|
}
|
|
63
134
|
}
|
|
64
135
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
136
|
+
const tempHome = (0, fs_1.mkdtempSync)(path_1.default.join(os_1.default.tmpdir(), "jue-hermes-plugin-confirm-"));
|
|
137
|
+
try {
|
|
138
|
+
const sourceRepo = path_1.default.join(tempHome, "source");
|
|
139
|
+
(0, fs_1.mkdirSync)(sourceRepo);
|
|
140
|
+
(0, fs_1.cpSync)(context.artifactRoot, sourceRepo, { recursive: true });
|
|
141
|
+
const env = minimalEnvironment(tempHome);
|
|
142
|
+
(0, child_process_1.execFileSync)("git", ["init", "--quiet"], { cwd: sourceRepo, env, stdio: "ignore" });
|
|
143
|
+
(0, child_process_1.execFileSync)("git", ["add", "."], { cwd: sourceRepo, env, stdio: "ignore" });
|
|
144
|
+
(0, child_process_1.execFileSync)("git", ["-c", "user.name=ai-jue", "-c", "user.email=ai-jue", "commit", "--quiet", "-m", "verify"], { cwd: sourceRepo, env, stdio: "ignore" });
|
|
145
|
+
(0, child_process_1.execFileSync)("hermes", ["plugins", "install", (0, url_1.pathToFileURL)(sourceRepo).href, "--no-enable"], {
|
|
146
|
+
encoding: "utf8",
|
|
147
|
+
env,
|
|
148
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
149
|
+
timeout: 20000,
|
|
150
|
+
});
|
|
151
|
+
const listOutput = (0, child_process_1.execFileSync)("hermes", ["plugins", "list", "--user", "--json"], {
|
|
152
|
+
encoding: "utf8",
|
|
153
|
+
env,
|
|
154
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
155
|
+
timeout: 10000,
|
|
156
|
+
});
|
|
157
|
+
const inventory = JSON.parse(listOutput);
|
|
158
|
+
if (!JSON.stringify(inventory).includes(manifestIdentity)) {
|
|
159
|
+
return { target: TARGET, status: "failed", evidence: "Hermes plugin inventory is missing the installed identity" };
|
|
160
|
+
}
|
|
161
|
+
return { target: TARGET, status: "confirmed", evidence: "Hermes isolated install and inventory confirmed the skill-plugin" };
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error?.code === "ENOENT") {
|
|
165
|
+
return { target: TARGET, status: "unconfirmed", evidence: "Hermes CLI is unavailable; native install was not run" };
|
|
166
|
+
}
|
|
167
|
+
return { target: TARGET, status: "failed", evidence: "Hermes isolated plugin install or inventory confirmation failed" };
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
(0, fs_1.rmSync)(tempHome, { recursive: true, force: true });
|
|
171
|
+
}
|
|
70
172
|
}
|
|
71
173
|
if (!(0, fs_1.existsSync)(context.artifactRoot)) {
|
|
72
174
|
return { target: TARGET, status: "failed", evidence: "artifactRoot does not exist" };
|
|
@@ -82,7 +184,7 @@ async function confirm(_results, context) {
|
|
|
82
184
|
// shell to tokenize it.
|
|
83
185
|
const result = (0, child_process_1.execFileSync)("tirith", ["config", "validate", context.artifactRoot], {
|
|
84
186
|
encoding: "utf8",
|
|
85
|
-
env:
|
|
187
|
+
env: minimalEnvironment(tempHome),
|
|
86
188
|
stdio: ["ignore", "pipe", "pipe"],
|
|
87
189
|
timeout: 10000,
|
|
88
190
|
});
|
|
@@ -90,13 +192,13 @@ async function confirm(_results, context) {
|
|
|
90
192
|
return {
|
|
91
193
|
target: TARGET,
|
|
92
194
|
status: "failed",
|
|
93
|
-
evidence:
|
|
195
|
+
evidence: "tirith config validate returned a non-clean result",
|
|
94
196
|
};
|
|
95
197
|
}
|
|
96
198
|
return {
|
|
97
199
|
target: TARGET,
|
|
98
200
|
status: "confirmed",
|
|
99
|
-
evidence:
|
|
201
|
+
evidence: "tirith config validate completed cleanly in an isolated home",
|
|
100
202
|
};
|
|
101
203
|
}
|
|
102
204
|
catch (error) {
|
|
@@ -107,16 +209,10 @@ async function confirm(_results, context) {
|
|
|
107
209
|
evidence: "tirith is not available on PATH; workspace validation was not run",
|
|
108
210
|
};
|
|
109
211
|
}
|
|
110
|
-
const stderr = error && typeof error === "object" && "stderr" in error
|
|
111
|
-
? String(error.stderr)
|
|
112
|
-
: "";
|
|
113
|
-
const stdout = error && typeof error === "object" && "stdout" in error
|
|
114
|
-
? String(error.stdout)
|
|
115
|
-
: "";
|
|
116
212
|
return {
|
|
117
213
|
target: TARGET,
|
|
118
214
|
status: "failed",
|
|
119
|
-
evidence: `tirith config validate failed
|
|
215
|
+
evidence: `tirith config validate failed with exit=${error.status ?? "unknown"}`,
|
|
120
216
|
};
|
|
121
217
|
}
|
|
122
218
|
finally {
|
package/dist/confirm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"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"}
|
package/dist/read.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { CanonicalDocument, ReadContext as CoreReadContext } from "ai-jue-c
|
|
|
2
2
|
export type ReadContext = CoreReadContext;
|
|
3
3
|
/**
|
|
4
4
|
* Hermes Adapter's read: thin composition over a small subset of the
|
|
5
|
-
*
|
|
5
|
+
* documented Hermes home surface — per the JUE-303 honest-stance
|
|
6
6
|
* principle, only the surfaces we have ground-truth evidence for:
|
|
7
7
|
* - `context.global` ← workspace-root `MEMORY.md`
|
|
8
8
|
* - `hooks` ← empty no-op (the real ~/.hermes/hooks/ is empty)
|
package/dist/read.js
CHANGED
|
@@ -8,7 +8,7 @@ const mcp_1 = require("./capabilities/mcp");
|
|
|
8
8
|
const skills_1 = require("./capabilities/skills");
|
|
9
9
|
/**
|
|
10
10
|
* Hermes Adapter's read: thin composition over a small subset of the
|
|
11
|
-
*
|
|
11
|
+
* documented Hermes home surface — per the JUE-303 honest-stance
|
|
12
12
|
* principle, only the surfaces we have ground-truth evidence for:
|
|
13
13
|
* - `context.global` ← workspace-root `MEMORY.md`
|
|
14
14
|
* - `hooks` ← empty no-op (the real ~/.hermes/hooks/ is empty)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-jue-adapter-hermes",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Adapter for generating Hermes configurations.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,14 +18,17 @@
|
|
|
18
18
|
"js-yaml": "^4.3.1"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"ai-jue-core": "^2.0.
|
|
21
|
+
"ai-jue-core": "^2.0.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/js-yaml": "^4.0.9",
|
|
25
|
-
"ai-jue-core": "^2.0.
|
|
25
|
+
"ai-jue-core": "^2.0.1",
|
|
26
26
|
"typescript": "^5.0.0"
|
|
27
27
|
},
|
|
28
|
-
"author":
|
|
28
|
+
"author": {
|
|
29
|
+
"name": "ZenHeart",
|
|
30
|
+
"url": "https://github.com/zenHeart"
|
|
31
|
+
},
|
|
29
32
|
"license": "MIT",
|
|
30
33
|
"repository": {
|
|
31
34
|
"type": "git",
|