ai-jue-adapter-hermes 0.2.0 → 0.2.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.
@@ -1,9 +1,16 @@
1
1
  /**
2
- * JUE-303 Hermes Adapter supports exactly one native Artifact kind: a
3
- * per-workspace directory tree (the global `~/.hermes/` config lives at
4
- * the user home and is NOT a project-scoped surface this Adapter
5
- * targets). Three-level skills shape (`<workspace>/skills/<cat>/<name>/SKILL.md`)
6
- * confirmed by reading the real cwr:/d/devuser/.hermes/skills tree.
2
+ * Hermes Artifact kinds (RFC-0002):
3
+ * - `workspace`: MEMORY.md / skills/<cat>/<name> / config.yaml / cron — JUE-303
4
+ * - `skill-plugin`: thin plugin.yaml + register_skill initializer + flat skills
7
5
  */
8
- export type HermesArtifactKind = "workspace";
6
+ export type HermesArtifactKind = "workspace" | "skill-plugin";
9
7
  export declare function isWorkspaceLayout(root: string): boolean;
8
+ /**
9
+ * Generated skill-plugin marker: the `__init__.py` we write is a fixed
10
+ * template whose docstring carries this fingerprint. A plain Python package
11
+ * (`__init__.py` is a near-universal file) with a coincidental
12
+ * `plugin.yaml` must never be claimed as managed.
13
+ */
14
+ export declare const MANAGED_INIT_MARKER = "Auto-generated by ai-jue";
15
+ /** Return a managed layout only when its marker is present. */
16
+ export declare function detectArtifactKind(root: string): HermesArtifactKind | undefined;
@@ -3,12 +3,34 @@ 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
7
  exports.isWorkspaceLayout = isWorkspaceLayout;
8
+ exports.detectArtifactKind = detectArtifactKind;
7
9
  const fs_1 = __importDefault(require("fs"));
8
10
  const path_1 = __importDefault(require("path"));
9
11
  function isWorkspaceLayout(root) {
10
12
  return (fs_1.default.existsSync(path_1.default.join(root, "config.yaml")) ||
11
13
  fs_1.default.existsSync(path_1.default.join(root, "skills")) ||
12
- fs_1.default.existsSync(path_1.default.join(root, "cron")));
14
+ fs_1.default.existsSync(path_1.default.join(root, "cron")) ||
15
+ fs_1.default.existsSync(path_1.default.join(root, "MEMORY.md")));
16
+ }
17
+ /**
18
+ * Generated skill-plugin marker: the `__init__.py` we write is a fixed
19
+ * template whose docstring carries this fingerprint. A plain Python package
20
+ * (`__init__.py` is a near-universal file) with a coincidental
21
+ * `plugin.yaml` must never be claimed as managed.
22
+ */
23
+ exports.MANAGED_INIT_MARKER = "Auto-generated by ai-jue";
24
+ /** Return a managed layout only when its marker is present. */
25
+ function detectArtifactKind(root) {
26
+ const initPath = path_1.default.join(root, "__init__.py");
27
+ if (fs_1.default.existsSync(path_1.default.join(root, "plugin.yaml")) &&
28
+ fs_1.default.existsSync(initPath) &&
29
+ fs_1.default.readFileSync(initPath, "utf8").includes(exports.MANAGED_INIT_MARKER)) {
30
+ return "skill-plugin";
31
+ }
32
+ if (isWorkspaceLayout(root))
33
+ return "workspace";
34
+ return undefined;
13
35
  }
14
36
  //# sourceMappingURL=layout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/capabilities/layout.ts"],"names":[],"mappings":";;;;;AAYA,8CAMC;AAlBD,4CAAoB;AACpB,gDAAwB;AAWxB,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,CACvC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/capabilities/layout.ts"],"names":[],"mappings":";;;;;;AAUA,8CAOC;AAWD,gDAWC;AAvCD,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;AAE9D,+DAA+D;AAC/D,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,CAAC,QAAQ,CAAC,2BAAmB,CAAC,EAC/D,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ArtifactChange, CanonicalDocument } from "ai-jue-core";
2
+ /**
3
+ * Thin Hermes skill-plugin (RFC-0002 Phase B):
4
+ * plugin.yaml + __init__.py (register_skill only) + flat skills/<name>/
5
+ *
6
+ * MCP / context stay on workspace apply — not packed here.
7
+ */
8
+ export declare function writeSkillPlugin(canonical: CanonicalDocument, root: string, pluginManifest?: {
9
+ name: string;
10
+ version: string;
11
+ description?: string;
12
+ }): ArtifactChange[];
@@ -0,0 +1,135 @@
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.writeSkillPlugin = writeSkillPlugin;
40
+ const fs_1 = __importDefault(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const yaml = __importStar(require("js-yaml"));
43
+ const ai_jue_core_1 = require("ai-jue-core");
44
+ const layout_1 = require("./layout");
45
+ const TARGET = "hermes";
46
+ const SAFE_SKILL_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
47
+ function assertSafeSkillName(name) {
48
+ if (!SAFE_SKILL_NAME.test(name)) {
49
+ throw new Error(`Hermes skill-plugin name must be a safe single path segment: ${name}`);
50
+ }
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
+ function textChange(root, absolutePath, newContent) {
66
+ const exists = fs_1.default.existsSync(absolutePath);
67
+ const existing = exists ? fs_1.default.readFileSync(absolutePath, "utf8") : undefined;
68
+ if (existing === newContent)
69
+ return null;
70
+ return {
71
+ target: TARGET,
72
+ kind: exists ? "update" : "create",
73
+ ownership: "full",
74
+ scope: "project",
75
+ path: path_1.default.relative(root, absolutePath).split(path_1.default.sep).join("/"),
76
+ beforeHash: exists ? (0, ai_jue_core_1.hashArtifactContent)(existing) : null,
77
+ afterHash: (0, ai_jue_core_1.hashArtifactContent)(newContent),
78
+ content: newContent,
79
+ risk: "low",
80
+ requiresApproval: false,
81
+ atomicState: "planned",
82
+ };
83
+ }
84
+ /**
85
+ * Thin Hermes skill-plugin (RFC-0002 Phase B):
86
+ * plugin.yaml + __init__.py (register_skill only) + flat skills/<name>/
87
+ *
88
+ * MCP / context stay on workspace apply — not packed here.
89
+ */
90
+ function writeSkillPlugin(canonical, root, pluginManifest) {
91
+ const changes = [];
92
+ // `__init__.py` is user Python code; only ever touch it when it is ours.
93
+ // Refuse (fail explicit) rather than overwrite a hand-authored package.
94
+ const initPath = path_1.default.join(root, "__init__.py");
95
+ if (fs_1.default.existsSync(initPath) &&
96
+ !fs_1.default.readFileSync(initPath, "utf8").includes(layout_1.MANAGED_INIT_MARKER)) {
97
+ throw new Error("Hermes skill-plugin refuses to overwrite a hand-authored __init__.py; " +
98
+ "remove it or point the plugin at an empty directory.");
99
+ }
100
+ const name = pluginManifest?.name?.trim() || "jue-skills";
101
+ const version = pluginManifest?.version?.trim() || "0.1.0";
102
+ const description = pluginManifest?.description?.trim() ||
103
+ "Skill pack generated by ai-jue from Canonical skills.";
104
+ const manifestYaml = yaml.dump({ name, version, description }, { lineWidth: -1, noRefs: true });
105
+ const manifestChange = textChange(root, path_1.default.join(root, "plugin.yaml"), manifestYaml);
106
+ if (manifestChange)
107
+ changes.push(manifestChange);
108
+ const initChange = textChange(root, path_1.default.join(root, "__init__.py"), INIT_PY);
109
+ if (initChange)
110
+ changes.push(initChange);
111
+ if (canonical.skills && Object.keys(canonical.skills).length > 0) {
112
+ // Flatten "<category>/<name>" keys to a single path segment for plugin layout.
113
+ const flatSkills = Object.create(null);
114
+ const seenNames = new Set();
115
+ for (const [key, skill] of Object.entries(canonical.skills)) {
116
+ const base = key.includes("/") ? key.split("/").pop() : key;
117
+ assertSafeSkillName(base);
118
+ if (seenNames.has(base)) {
119
+ throw new Error(`Hermes skill-plugin cannot flatten multiple Canonical skills to "${base}"; ` +
120
+ `rename the colliding category/name entries before writing.`);
121
+ }
122
+ seenNames.add(base);
123
+ flatSkills[base] = skill;
124
+ }
125
+ const mapping = (0, ai_jue_core_1.directoryPerItem)({
126
+ dirPath: (r) => path_1.default.join(r, "skills"),
127
+ mainFileName: "SKILL.md",
128
+ // Preserve ai-assets sidecars; Hermes loads SKILL.md and can follow relative refs.
129
+ bundleKeys: ["references", "scripts", "assets"],
130
+ });
131
+ changes.push(...mapping.write(root, flatSkills, TARGET));
132
+ }
133
+ return changes;
134
+ }
135
+ //# sourceMappingURL=skill-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-plugin.js","sourceRoot":"","sources":["../../src/capabilities/skill-plugin.ts"],"names":[],"mappings":"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"}
package/dist/confirm.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { ArtifactResult, Confirmation } from "ai-jue-core";
2
+ import { type HermesArtifactKind } from "./capabilities/layout";
2
3
  export interface ConfirmContext {
3
4
  projectRoot: string;
5
+ artifactKind?: HermesArtifactKind;
4
6
  }
5
7
  /**
6
8
  * Hermes v0.18.0 has no per-file validate command analogous to
@@ -17,11 +19,8 @@ export interface ConfirmContext {
17
19
  * machine, even though in this contract test we use a freshly-built
18
20
  * workspace).
19
21
  *
20
- * For project scope (no Plugin/Bundle aggregate to install+verify),
21
- * we report `unconfirmed` — there's nothing Hermes offers that
22
- * "confirms" a project-scoped workspace beyond `tirith` validating
23
- * the config tree; that path is exercised in the
24
- * `cwr-real-config` round-trip test (out of in-suite scope per
25
- * JUE-301/JUE-302's openclaw-spawnSync quirk discovery).
22
+ * For workspace scope, `tirith` validates the config tree. For the thin
23
+ * skill-plugin Artifact, the generated plugin surface provides structural
24
+ * confirmation without executing generated Python.
26
25
  */
27
26
  export declare function confirm(_results: ArtifactResult[], context: ConfirmContext): Promise<Confirmation>;
package/dist/confirm.js CHANGED
@@ -8,6 +8,7 @@ const child_process_1 = require("child_process");
8
8
  const fs_1 = require("fs");
9
9
  const os_1 = __importDefault(require("os"));
10
10
  const path_1 = __importDefault(require("path"));
11
+ const layout_1 = require("./capabilities/layout");
11
12
  const TARGET = "hermes";
12
13
  /**
13
14
  * Hermes v0.18.0 has no per-file validate command analogous to
@@ -24,14 +25,49 @@ const TARGET = "hermes";
24
25
  * machine, even though in this contract test we use a freshly-built
25
26
  * workspace).
26
27
  *
27
- * For project scope (no Plugin/Bundle aggregate to install+verify),
28
- * we report `unconfirmed` — there's nothing Hermes offers that
29
- * "confirms" a project-scoped workspace beyond `tirith` validating
30
- * the config tree; that path is exercised in the
31
- * `cwr-real-config` round-trip test (out of in-suite scope per
32
- * JUE-301/JUE-302's openclaw-spawnSync quirk discovery).
28
+ * For workspace scope, `tirith` validates the config tree. For the thin
29
+ * skill-plugin Artifact, the generated plugin surface provides structural
30
+ * confirmation without executing generated Python.
33
31
  */
34
32
  async function confirm(_results, context) {
33
+ if ((context.artifactKind ?? (0, layout_1.detectArtifactKind)(context.projectRoot)) === "skill-plugin") {
34
+ const manifest = path_1.default.join(context.projectRoot, "plugin.yaml");
35
+ const initializer = path_1.default.join(context.projectRoot, "__init__.py");
36
+ if (!(0, fs_1.existsSync)(manifest) || !(0, fs_1.existsSync)(initializer)) {
37
+ return {
38
+ target: TARGET,
39
+ status: "failed",
40
+ evidence: "skill-plugin requires plugin.yaml and __init__.py",
41
+ };
42
+ }
43
+ const initSource = (0, fs_1.readFileSync)(initializer, "utf8");
44
+ if (!initSource.includes("register_skill")) {
45
+ return {
46
+ target: TARGET,
47
+ status: "failed",
48
+ evidence: "skill-plugin __init__.py does not register skills",
49
+ };
50
+ }
51
+ const skillsRoot = path_1.default.join(context.projectRoot, "skills");
52
+ if ((0, fs_1.existsSync)(skillsRoot)) {
53
+ for (const entry of (0, fs_1.readdirSync)(skillsRoot, { withFileTypes: true })) {
54
+ if (!entry.isDirectory())
55
+ continue;
56
+ if (!(0, fs_1.existsSync)(path_1.default.join(skillsRoot, entry.name, "SKILL.md"))) {
57
+ return {
58
+ target: TARGET,
59
+ status: "failed",
60
+ evidence: `skill-plugin skill ${entry.name} is missing SKILL.md`,
61
+ };
62
+ }
63
+ }
64
+ }
65
+ return {
66
+ target: TARGET,
67
+ status: "confirmed",
68
+ evidence: "Hermes skill-plugin structure validated: plugin.yaml, register_skill initializer, and skill roots",
69
+ };
70
+ }
35
71
  if (!(0, fs_1.existsSync)(context.projectRoot)) {
36
72
  return { target: TARGET, status: "failed", evidence: "projectRoot does not exist" };
37
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":";;;;;AAkCA,0BAiDC;AAnFD,iDAA6C;AAC7C,2BAAqD;AACrD,4CAAoB;AACpB,gDAAwB;AAOxB,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,KAAK,UAAU,OAAO,CAC3B,QAA0B,EAC1B,OAAuB;IAEvB,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACtF,CAAC;IACD,qEAAqE;IACrE,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAA,gBAAW,EAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,gEAAgE;QAChE,oEAAoE;QACpE,iEAAiE;QACjE,mEAAmE;QACnE,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAA,4BAAY,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;YACjF,QAAQ,EAAE,MAAM;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;YAC9D,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,8CAA8C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAC/E,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,8CAA8C,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACvG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK;YACpE,CAAC,CAAC,MAAM,CAAE,KAA6B,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK;YACpE,CAAC,CAAC,MAAM,CAAE,KAA6B,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,uCAAwC,KAA6B,CAAC,MAAM,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACvJ,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAA,WAAM,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { write } from "./write";
4
4
  export type { WriteContext } from "./write";
5
5
  export { confirm } from "./confirm";
6
6
  export type { ConfirmContext } from "./confirm";
7
+ export { detectArtifactKind } from "./capabilities/layout";
7
8
  /**
8
9
  * `jue apply`'s Hermes entry point: thin wrapper, parallel to Claude
9
10
  * and Codex. Kept for the legacy `jue apply --all` path while the
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.confirm = exports.write = exports.read = void 0;
3
+ exports.detectArtifactKind = exports.confirm = exports.write = exports.read = void 0;
4
4
  exports.generate = generate;
5
5
  const ai_jue_core_1 = require("ai-jue-core");
6
6
  const confirm_1 = require("./confirm");
@@ -12,6 +12,8 @@ var write_2 = require("./write");
12
12
  Object.defineProperty(exports, "write", { enumerable: true, get: function () { return write_2.write; } });
13
13
  var confirm_2 = require("./confirm");
14
14
  Object.defineProperty(exports, "confirm", { enumerable: true, get: function () { return confirm_2.confirm; } });
15
+ var layout_1 = require("./capabilities/layout");
16
+ Object.defineProperty(exports, "detectArtifactKind", { enumerable: true, get: function () { return layout_1.detectArtifactKind; } });
15
17
  /**
16
18
  * `jue apply`'s Hermes entry point: thin wrapper, parallel to Claude
17
19
  * and Codex. Kept for the legacy `jue apply --all` path while the
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAkBA,4BAIC;AAtBD,6CAAwF;AAExF,uCAAoC;AACpC,iCAA8B;AAC9B,mCAAgC;AAEhC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AAEb,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAEd,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAGhB;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,MAAW,EAAE,SAAiB;IAC3D,MAAM,SAAS,GAAG,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,IAAA,aAAK,EAAC,SAAS,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,IAAA,iCAAmB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,aAAa,GAAY;IAC7B,EAAE,EAAE,QAAQ;IACZ,YAAY,EAAE;QACZ,uEAAuE;QACvE,qEAAqE;QACrE,KAAK,EAAE,aAAa;QACpB,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,QAAQ,EAAE,UAAU;QACpB,+DAA+D;QAC/D,sCAAsC;QACtC,MAAM,EAAE,WAAW;QACnB,kEAAkE;QAClE,8CAA8C;QAC9C,MAAM,EAAE,UAAU;QAClB,+DAA+D;QAC/D,6DAA6D;QAC7D,kCAAkC;QAClC,KAAK,EAAE,aAAa;QACpB,6DAA6D;QAC7D,+DAA+D;QAC/D,GAAG,EAAE,WAAW;KACjB;IACD,IAAI,EAAJ,WAAI;IACJ,KAAK,EAAL,aAAK;IACL,OAAO,EAAP,iBAAO;CACR,CAAC;AAEF,kBAAe,IAAA,6BAAe,EAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAmBA,4BAIC;AAvBD,6CAAwF;AAExF,uCAAoC;AACpC,iCAA8B;AAC9B,mCAAgC;AAEhC,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AAEb,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAEd,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,gDAA2D;AAAlD,4GAAA,kBAAkB,OAAA;AAE3B;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,MAAW,EAAE,SAAiB;IAC3D,MAAM,SAAS,GAAG,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,IAAA,aAAK,EAAC,SAAS,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,IAAA,iCAAmB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,aAAa,GAAY;IAC7B,EAAE,EAAE,QAAQ;IACZ,YAAY,EAAE;QACZ,uEAAuE;QACvE,qEAAqE;QACrE,KAAK,EAAE,aAAa;QACpB,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,QAAQ,EAAE,UAAU;QACpB,+DAA+D;QAC/D,sCAAsC;QACtC,MAAM,EAAE,WAAW;QACnB,kEAAkE;QAClE,8CAA8C;QAC9C,MAAM,EAAE,UAAU;QAClB,+DAA+D;QAC/D,6DAA6D;QAC7D,kCAAkC;QAClC,KAAK,EAAE,aAAa;QACpB,6DAA6D;QAC7D,+DAA+D;QAC/D,GAAG,EAAE,WAAW;KACjB;IACD,IAAI,EAAJ,WAAI;IACJ,KAAK,EAAL,aAAK;IACL,OAAO,EAAP,iBAAO;CACR,CAAC;AAEF,kBAAe,IAAA,6BAAe,EAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC"}
package/dist/write.d.ts CHANGED
@@ -1,11 +1,18 @@
1
1
  import type { ArtifactChange, CanonicalDocument } from "ai-jue-core";
2
2
  export interface WriteContext {
3
3
  projectRoot: string;
4
+ /** Defaults to `"workspace"`. `skill-plugin` emits a thin installable skill pack. */
5
+ artifactKind?: string;
6
+ toolsConfig?: Record<string, unknown>;
7
+ pluginManifest?: {
8
+ name: string;
9
+ version: string;
10
+ description?: string;
11
+ };
4
12
  }
5
13
  /**
6
- * Hermes Adapter's write: thin composition; routes through
7
- * `core-executor.ts` `applyChangesOrThrow` (no bespoke apply/rollback
8
- * mechanism — Core executes `ArtifactChange` per the JUE-103 contract).
9
- * Same honest-stance map as read.
14
+ * Hermes Adapter write (RFC-0002):
15
+ * - workspace: MEMORY.md / skills/<cat>/<name> / config.yaml mcp / cron
16
+ * - skill-plugin: plugin.yaml + __init__.py + flat skills/ (skills only)
10
17
  */
11
18
  export declare function write(canonical: CanonicalDocument, writeContext: WriteContext): Promise<ArtifactChange[]>;
package/dist/write.js CHANGED
@@ -5,15 +5,27 @@ const ai_jue_core_1 = require("ai-jue-core");
5
5
  const context_1 = require("./capabilities/context");
6
6
  const cron_1 = require("./capabilities/cron");
7
7
  const mcp_1 = require("./capabilities/mcp");
8
+ const skill_plugin_1 = require("./capabilities/skill-plugin");
8
9
  const skills_1 = require("./capabilities/skills");
9
10
  const TARGET = "hermes";
10
11
  /**
11
- * Hermes Adapter's write: thin composition; routes through
12
- * `core-executor.ts` `applyChangesOrThrow` (no bespoke apply/rollback
13
- * mechanism — Core executes `ArtifactChange` per the JUE-103 contract).
14
- * Same honest-stance map as read.
12
+ * Hermes Adapter write (RFC-0002):
13
+ * - workspace: MEMORY.md / skills/<cat>/<name> / config.yaml mcp / cron
14
+ * - skill-plugin: plugin.yaml + __init__.py + flat skills/ (skills only)
15
15
  */
16
16
  async function write(canonical, writeContext) {
17
+ const kind = writeContext.artifactKind ?? "workspace";
18
+ if (kind === "skill-plugin" || kind === "plugin") {
19
+ return (0, skill_plugin_1.writeSkillPlugin)(canonical, writeContext.projectRoot, writeContext.pluginManifest);
20
+ }
21
+ if (kind === "compatible-bundle") {
22
+ throw new Error('Hermes does not use OpenClaw-style "compatible-bundle". ' +
23
+ "Use --artifact skill-plugin (or plugin) for a thin skill pack, " +
24
+ "or omit --artifact for workspace apply (skills + mcp).");
25
+ }
26
+ if (kind !== "workspace" && kind !== "project") {
27
+ throw new Error(`Hermes adapter does not support artifact kind "${kind}". Supported: workspace, skill-plugin.`);
28
+ }
17
29
  const result = (0, ai_jue_core_1.writeCapabilities)({
18
30
  hooks: { read: () => undefined, write: () => [] },
19
31
  commands: { read: () => undefined, write: () => [] },
package/dist/write.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":";;AAmBA,sBA6BC;AAhDD,6CAAgD;AAEhD,oDAAiD;AACjD,8CAA2C;AAC3C,4CAAyC;AACzC,kDAA+C;AAM/C,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB;;;;;GAKG;AACI,KAAK,UAAU,KAAK,CACzB,SAA4B,EAC5B,YAA0B;IAE1B,MAAM,MAAM,GAAG,IAAA,+BAAiB,EAC9B;QACE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACjD,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAClD,GAAG,EAAE,IAAA,SAAG,GAAE;QACV,MAAM,EAAE,IAAA,eAAM,GAAE;QAChB,IAAI,EAAE,IAAA,WAAI,GAAE;KACb,EACD,SAA+C,EAC/C,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;IAEF,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CACT,GAAG,IAAA,iBAAO,GAAE,CAAC,KAAK,CAChB,YAAY,CAAC,WAAW,EACxB,EAAE,MAAM,EAAG,SAAS,CAAC,OAA+B,CAAC,MAAM,IAAI,EAAE,EAAE,EACnE,MAAM,CACP,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":";;AAuBA,sBA+CC;AAtED,6CAAgD;AAEhD,oDAAiD;AACjD,8CAA2C;AAC3C,4CAAyC;AACzC,8DAA+D;AAC/D,kDAA+C;AAU/C,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB;;;;GAIG;AACI,KAAK,UAAU,KAAK,CACzB,SAA4B,EAC5B,YAA0B;IAE1B,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,IAAI,WAAW,CAAC;IAEtD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,IAAA,+BAAgB,EAAC,SAAS,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,0DAA0D;YACxD,iEAAiE;YACjE,wDAAwD,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,kDAAkD,IAAI,wCAAwC,CAC/F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,+BAAiB,EAC9B;QACE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACjD,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QAClD,GAAG,EAAE,IAAA,SAAG,GAAE;QACV,MAAM,EAAE,IAAA,eAAM,GAAE;QAChB,IAAI,EAAE,IAAA,WAAI,GAAE;KACb,EACD,SAA+C,EAC/C,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;IAEF,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CACT,GAAG,IAAA,iBAAO,GAAE,CAAC,KAAK,CAChB,YAAY,CAAC,WAAW,EACxB,EAAE,MAAM,EAAG,SAAS,CAAC,OAA+B,CAAC,MAAM,IAAI,EAAE,EAAE,EACnE,MAAM,CACP,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-jue-adapter-hermes",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Adapter for generating Hermes configurations.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "dependencies": {
11
11
  "ai-jue-core": "*",
12
- "js-yaml": "^4.1.0"
12
+ "js-yaml": "^4.3.1"
13
13
  },
14
14
  "peerDependencies": {
15
15
  "ai-jue-core": "*"