@miadi/voice-mcp 0.3.3 → 0.4.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Miadi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/SPEC-LINKS.md CHANGED
@@ -4,7 +4,9 @@
4
4
  behaviour on its own — every handler names the section that governs it in the
5
5
  error it throws. Read these before implementing anything here.
6
6
 
7
- Status recorded 2026-08-04, re-verified at the close of this authoring pass.
7
+ Status recorded 2026-08-04; refreshed 2026-08-13 (jgwill/Miadi#604): the
8
+ voice-episode-binding spec exists — it landed in `6dc64e69` on 2026-08-04 —
9
+ and this file's earlier "not yet written" row misled readers for nine days.
8
10
 
9
11
  ## Owned by this package
10
12
 
@@ -23,15 +25,19 @@ original. These are cited in the spec and in the code, never copied.
23
25
  | `/a/src/Miadi/rispecs/episode-addressing/SPEC.md` | Domain master for episode identity | present |
24
26
  | `/a/src/Miadi/rispecs/episode-addressing/episode-addressing.spec.md` | Address grammar `ep<NNN>[.<II>][/<segment>]`, iteration decision rule, number allocation, wheel-key contract | present |
25
27
  | `/a/src/Miadi/rispecs/episode-addressing/episode-addressing.kin.md` | Why episodic memory is already an opus | present |
26
- | `/a/src/Miadi/rispecs/voice-episode-binding/` | Playback path, enforcement decision table, discovery resolution order, the two-corpus resolution | **not yet written** |
28
+ | `/a/src/Miadi/rispecs/voice-episode-binding/` | Playback path, enforcement decision table, discovery resolution order, the two-corpus resolution | **present** — landed `6dc64e69`, 2026-08-04 |
27
29
 
28
- ### What the missing document blocks
30
+ ### The four cited verdicts, now rulable
29
31
 
30
- Four verdicts are cited by this package and cannot be implemented until
31
- `voice-episode-binding` lands. The tools have their shape; they do not yet have
32
- their rulings.
32
+ The scaffold-era table below named what could not be implemented before the
33
+ binding spec existed. The spec exists, all six handlers are code (none throws
34
+ `NotImplementedError` — `e295ffdd`), and since 2026-08-13 the binding itself
35
+ is a top-level `episode_binding` on `VoiceMessage` stamped by `produce()`
36
+ (jgwill/Miadi#604). What each verdict still owes is the spec's own ladder —
37
+ the ranked resolvers in `produce()` and the enforcement modes — which belongs
38
+ to its own issue.
33
39
 
34
- | Cited as | Needed by |
40
+ | Cited as | Consumed by |
35
41
  |---|---|
36
42
  | `§ Playback path` | `voice_play_episode` |
37
43
  | `§ Discovery resolution order` | `voice_resolve_episode`, and every tool that omits `episode` |
@@ -0,0 +1,34 @@
1
+ import type { VoiceMcpConfig } from "./contract.js";
2
+ import type { ClosingStageProof, CreateEpisodeInput } from "./types.js";
3
+ export declare class RefusedWheelError extends Error {
4
+ constructor(url: string);
5
+ }
6
+ export declare function refusePoisonedWheel(wheelUrl: string): void;
7
+ export interface ClosingReport {
8
+ closing: ClosingStageProof[];
9
+ drift: string[];
10
+ owedActions: string[];
11
+ }
12
+ /**
13
+ * Run all five proofs for one episode folder, read-only, and name any drift
14
+ * shape found in the reconciler's vocabulary. This is Tool 6's whole behaviour
15
+ * and the tail of Tool 4's.
16
+ */
17
+ export declare function proveClosing(config: VoiceMcpConfig, folder: string): Promise<ClosingReport>;
18
+ /**
19
+ * Which episode numbers are taken, over the union of the local tree and
20
+ * `origin/main` — never the local root alone
21
+ * ([episode-addressing spec § Number Allocation]).
22
+ */
23
+ export declare function numberIsFree(config: VoiceMcpConfig, number: number): Promise<{
24
+ free: boolean;
25
+ observed: string;
26
+ }>;
27
+ export interface MintResult {
28
+ folder: string;
29
+ vesselPath: string;
30
+ stdout: string;
31
+ }
32
+ /** Invoke mkepisode with the wheel set, and read the folder it made. */
33
+ export declare function mintEpisode(config: VoiceMcpConfig, input: CreateEpisodeInput): Promise<MintResult>;
34
+ //# sourceMappingURL=closing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closing.d.ts","sourceRoot":"","sources":["../src/closing.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAUxE,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,GAAG,EAAE,MAAM;CAQxB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1D;AA+ED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAiJxB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB9C;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,UAAU,CAAC,CA0CrB"}
@@ -0,0 +1,314 @@
1
+ // The five-stage closing gate and the mkepisode invocation behind Tool 4 and
2
+ // Tool 6.
3
+ //
4
+ // Governing contract: voice-mcp.spec.md § Tool 4 · voice_create_episode,
5
+ // § The closing gate is part of the tool, not after it, and § Tool 6 ·
6
+ // voice_episode_closing_status. The proofs themselves are the
7
+ // chronicle-episode-closing skill's, implemented as code: each stage is proven
8
+ // by running its probe and reporting what the command ACTUALLY said — never a
9
+ // summary of what it should say, and never a later word than the stage proven.
10
+ //
11
+ // Stages 2 (committed) and 3 (pushed) belong to the human. This module still
12
+ // RUNS their probes — read-only — so the report carries observation, but a
13
+ // stage the human has not performed reads `owed` with its exact command in
14
+ // `owedActions`. The tool never runs `git add`, `commit`, or `push`.
15
+ import { execFile } from "node:child_process";
16
+ import { promises as fs } from "node:fs";
17
+ import path from "node:path";
18
+ import { promisify } from "node:util";
19
+ const exec = promisify(execFile);
20
+ /** The retired ceremony wheel. A card registered there is lost; the spec says
21
+ * an implementation refuses the host outright rather than warning about it. */
22
+ const POISONED_WHEEL_HOST = "tail3b11eb";
23
+ const WHEEL_PROBE_TIMEOUT_MS = 5_000;
24
+ export class RefusedWheelError extends Error {
25
+ constructor(url) {
26
+ super(`refusing wheel ${url}: that host is Gaia's ceremony wheel, offline since ` +
27
+ `2026-07-29 — a Chronicle episode registered there is lost. The chronicle ` +
28
+ `wheel is http://127.0.0.1:8040 (voice-mcp.spec.md § Tool 4).`);
29
+ this.name = "RefusedWheelError";
30
+ }
31
+ }
32
+ export function refusePoisonedWheel(wheelUrl) {
33
+ if (wheelUrl.includes(POISONED_WHEEL_HOST))
34
+ throw new RefusedWheelError(wheelUrl);
35
+ }
36
+ /** Run a command and report what it said, never throwing: an error IS an
37
+ * observation here. */
38
+ async function observe(cmd, args, opts = {}) {
39
+ try {
40
+ const { stdout, stderr } = await exec(cmd, args, {
41
+ env: opts.env ?? process.env,
42
+ timeout: 30_000,
43
+ maxBuffer: 1024 * 1024,
44
+ });
45
+ const out = (stdout.trim() || stderr.trim()) ?? "";
46
+ return { ok: true, out };
47
+ }
48
+ catch (e) {
49
+ const err = e;
50
+ return {
51
+ ok: false,
52
+ out: (err.stderr?.trim() || err.stdout?.trim() || err.message || String(e)).slice(0, 500),
53
+ };
54
+ }
55
+ }
56
+ /** GET the episode card off the wheel. Status `null` means the wheel did not
57
+ * answer at all — different, and reported differently, from a 404. */
58
+ async function readWheel(wheelUrl, nodeId) {
59
+ const url = `${wheelUrl.replace(/\/$/, "")}/api/nodes/${nodeId}`;
60
+ const controller = new AbortController();
61
+ const timer = setTimeout(() => controller.abort(), WHEEL_PROBE_TIMEOUT_MS);
62
+ try {
63
+ const response = await fetch(url, { signal: controller.signal });
64
+ return { status: response.status, observed: `HTTP ${response.status} from ${url}` };
65
+ }
66
+ catch (e) {
67
+ return {
68
+ status: null,
69
+ observed: `wheel unreachable at ${url}: ${e instanceof Error ? e.message : String(e)}`,
70
+ };
71
+ }
72
+ finally {
73
+ clearTimeout(timer);
74
+ }
75
+ }
76
+ async function readReceipt(receiptPath) {
77
+ let text;
78
+ try {
79
+ text = await fs.readFile(receiptPath, "utf8");
80
+ }
81
+ catch {
82
+ return { exists: false, observed: `no receipt at ${receiptPath}` };
83
+ }
84
+ try {
85
+ const parsed = JSON.parse(text);
86
+ return {
87
+ exists: true,
88
+ state: parsed.state,
89
+ url: parsed.url,
90
+ raw: text.trim(),
91
+ observed: `receipt state=${parsed.state ?? "?"} url=${parsed.url ?? "?"}`,
92
+ };
93
+ }
94
+ catch {
95
+ return { exists: true, raw: text.trim(), observed: `receipt at ${receiptPath} is not JSON` };
96
+ }
97
+ }
98
+ /**
99
+ * Run all five proofs for one episode folder, read-only, and name any drift
100
+ * shape found in the reconciler's vocabulary. This is Tool 6's whole behaviour
101
+ * and the tail of Tool 4's.
102
+ */
103
+ export async function proveClosing(config, folder) {
104
+ const relative = `${path.basename(config.chronicleRoot)}/${folder}`;
105
+ const vesselPath = path.join(config.chronicleRoot, folder);
106
+ const receiptPath = path.join(vesselPath, ".mw-registration.json");
107
+ const nodeId = `chronicle:${folder}`;
108
+ const closing = [];
109
+ const drift = [];
110
+ const owedActions = [];
111
+ // 1 — created
112
+ const yamlPath = path.join(vesselPath, "episode.yaml");
113
+ let created = false;
114
+ try {
115
+ await fs.access(yamlPath);
116
+ created = true;
117
+ }
118
+ catch {
119
+ created = false;
120
+ }
121
+ closing.push({
122
+ stage: "created",
123
+ state: created ? "proven" : "failed",
124
+ probe: `ls "${yamlPath}"`,
125
+ observed: created ? yamlPath : `no such file: ${yamlPath}`,
126
+ });
127
+ // 4 first in execution order (2/3 read git; the wheel answer also feeds 5 and
128
+ // the GHOST-NODE reading when the vessel is missing on disk).
129
+ const wheel = await readWheel(config.wheelUrl, nodeId);
130
+ if (!created && wheel.status === 200)
131
+ drift.push("GHOST-NODE");
132
+ // 2 — committed
133
+ const committed = await observe("git", [
134
+ "-C",
135
+ config.chronicleGitRoot,
136
+ "log",
137
+ "-1",
138
+ "--oneline",
139
+ "--",
140
+ relative,
141
+ ]);
142
+ const isCommitted = committed.ok && committed.out.length > 0;
143
+ closing.push({
144
+ stage: "committed",
145
+ state: isCommitted ? "proven" : "owed",
146
+ probe: `git -C ${config.chronicleGitRoot} log -1 --oneline -- "${relative}"`,
147
+ observed: committed.out || "(no commit touches this vessel)",
148
+ });
149
+ if (created && !isCommitted) {
150
+ drift.push("UNCOMMITTED-VESSEL");
151
+ owedActions.push(`git -C ${config.chronicleGitRoot} add "${relative}/episode.yaml" "${relative}/.mw-registration.json"`, `git -C ${config.chronicleGitRoot} commit -m "<name the episode>"`);
152
+ }
153
+ // dirty? (not a stage; a drift shape)
154
+ if (isCommitted) {
155
+ const dirty = await observe("git", [
156
+ "-C",
157
+ config.chronicleGitRoot,
158
+ "status",
159
+ "--porcelain",
160
+ "--",
161
+ relative,
162
+ ]);
163
+ if (dirty.ok && dirty.out.length > 0)
164
+ drift.push("DIRTY-VESSEL");
165
+ }
166
+ // 3 — pushed
167
+ const unpushed = await observe("git", [
168
+ "-C",
169
+ config.chronicleGitRoot,
170
+ "rev-list",
171
+ "--count",
172
+ "origin/main..main",
173
+ ]);
174
+ const isPushed = isCommitted && unpushed.ok && unpushed.out === "0";
175
+ closing.push({
176
+ stage: "pushed",
177
+ state: isPushed ? "proven" : "owed",
178
+ probe: `git -C ${config.chronicleGitRoot} rev-list --count origin/main..main`,
179
+ observed: unpushed.out,
180
+ });
181
+ if (isCommitted && !isPushed) {
182
+ drift.push("UNPUSHED-VESSEL");
183
+ owedActions.push(`git -C ${config.chronicleGitRoot} push origin main`);
184
+ }
185
+ // 4 — registered
186
+ const isRegistered = wheel.status === 200;
187
+ closing.push({
188
+ stage: "registered",
189
+ state: isRegistered ? "proven" : wheel.status === null ? "owed" : "failed",
190
+ probe: `curl -sf -o /dev/null -w '%{http_code}' "${config.wheelUrl}/api/nodes/${nodeId}"`,
191
+ observed: wheel.observed,
192
+ });
193
+ // 5 — receipt-verified: the receipt's state and url match what the wheel
194
+ // just said. A pending or lying receipt is a debt, never a record.
195
+ const receipt = await readReceipt(receiptPath);
196
+ let receiptState;
197
+ let receiptObserved = receipt.observed;
198
+ if (!receipt.exists) {
199
+ receiptState = created ? "failed" : "owed";
200
+ if (created && isCommitted && !isRegistered)
201
+ drift.push("UNREGISTERED-VESSEL");
202
+ if (created) {
203
+ receiptObserved += " — born invisible: registration never ran (MW_API_URL law)";
204
+ }
205
+ }
206
+ else if (receipt.url?.includes(POISONED_WHEEL_HOST)) {
207
+ receiptState = "failed";
208
+ drift.push("POISONED-RECEIPT");
209
+ }
210
+ else if (receipt.state === "pending") {
211
+ receiptState = "failed";
212
+ drift.push("PENDING-RECEIPT");
213
+ }
214
+ else if ((receipt.state === "registered" || receipt.state === "already-registered") &&
215
+ !isRegistered) {
216
+ receiptState = "failed";
217
+ if (wheel.status !== null)
218
+ drift.push("LYING-RECEIPT");
219
+ else
220
+ receiptObserved += " — wheel did not answer; the receipt cannot be verified right now";
221
+ }
222
+ else if ((receipt.state === "registered" || receipt.state === "already-registered") &&
223
+ isRegistered) {
224
+ receiptState = "proven";
225
+ }
226
+ else {
227
+ receiptState = "failed";
228
+ receiptObserved += ` — unrecognised state "${receipt.state ?? "?"}"`;
229
+ }
230
+ closing.push({
231
+ stage: "receipt-verified",
232
+ state: receiptState,
233
+ probe: `cat "${receiptPath}" # state and url must match the registered probe`,
234
+ observed: receiptObserved,
235
+ });
236
+ if (drift.includes("PENDING-RECEIPT") || drift.includes("LYING-RECEIPT") || drift.includes("POISONED-RECEIPT")) {
237
+ owedActions.push(`/etc/claude-code/skills/chronicle-episode-closing/redeem-receipt.sh ${folder}`);
238
+ }
239
+ return { closing, drift, owedActions };
240
+ }
241
+ /**
242
+ * Which episode numbers are taken, over the union of the local tree and
243
+ * `origin/main` — never the local root alone
244
+ * ([episode-addressing spec § Number Allocation]).
245
+ */
246
+ export async function numberIsFree(config, number) {
247
+ const chronicleDir = path.basename(config.chronicleRoot);
248
+ await observe("git", ["-C", config.chronicleGitRoot, "fetch", "origin", "--quiet"]);
249
+ const remote = await observe("git", [
250
+ "-C",
251
+ config.chronicleGitRoot,
252
+ "ls-tree",
253
+ "--name-only",
254
+ `origin/main:${chronicleDir}`,
255
+ ]);
256
+ let local = [];
257
+ try {
258
+ local = await fs.readdir(config.chronicleRoot);
259
+ }
260
+ catch {
261
+ local = [];
262
+ }
263
+ const union = new Set([...local, ...(remote.ok ? remote.out.split("\n") : [])]);
264
+ const pattern = new RegExp(`-episode-0*${number}-`);
265
+ const taken = [...union].filter((name) => pattern.test(name));
266
+ return {
267
+ free: taken.length === 0,
268
+ observed: taken.length
269
+ ? `episode ${number} already resolves: ${taken.join(", ")}`
270
+ : `episode ${number} is free over ${union.size} names (local ∪ origin/main${remote.ok ? "" : "; origin unreadable, local only"})`,
271
+ };
272
+ }
273
+ /** Invoke mkepisode with the wheel set, and read the folder it made. */
274
+ export async function mintEpisode(config, input) {
275
+ refusePoisonedWheel(config.wheelUrl);
276
+ // The configured entry point, verified before it is stood on; the
277
+ // PATH-installed `mkepisode` (npm passages) is the fallback.
278
+ let cmd = "node";
279
+ let lead = [config.mkepisodePath];
280
+ try {
281
+ await fs.access(config.mkepisodePath);
282
+ }
283
+ catch {
284
+ cmd = "mkepisode";
285
+ lead = [];
286
+ }
287
+ const args = [
288
+ ...lead,
289
+ "-n",
290
+ String(input.number),
291
+ "-t",
292
+ input.title,
293
+ "-g",
294
+ input.goal,
295
+ ...input.references.flatMap((r) => ["-r", r]),
296
+ ];
297
+ const result = await observe(cmd, args, {
298
+ env: {
299
+ ...process.env,
300
+ MW_API_URL: config.wheelUrl,
301
+ MIADI_CHRONICLE_ROOT: config.chronicleRoot,
302
+ },
303
+ });
304
+ if (!result.ok) {
305
+ throw new Error(`mkepisode refused: ${result.out}`);
306
+ }
307
+ const createdLine = result.out.split("\n").find((l) => l.startsWith("created:"));
308
+ const vesselPath = createdLine?.slice("created:".length).trim();
309
+ if (!vesselPath) {
310
+ throw new Error(`mkepisode exited 0 but announced no vessel:\n${result.out}`);
311
+ }
312
+ return { folder: path.basename(vesselPath), vesselPath, stdout: result.out };
313
+ }
314
+ //# sourceMappingURL=closing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closing.js","sourceRoot":"","sources":["../src/closing.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,UAAU;AACV,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,8DAA8D;AAC9D,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAKtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEjC;gFACgF;AAChF,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEzC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,GAAW;QACrB,KAAK,CACH,kBAAkB,GAAG,sDAAsD;YACzE,2EAA2E;YAC3E,8DAA8D,CACjE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED;wBACwB;AACxB,KAAK,UAAU,OAAO,CACpB,GAAW,EACX,IAAc,EACd,OAAoC,EAAE;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;YAC/C,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;YAC5B,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,IAAI,GAAG,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAA2D,CAAC;QACxE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAOD;uEACuE;AACvE,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,MAAM,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,QAAQ,CAAC,MAAM,SAAS,GAAG,EAAE,EAAE,CAAC;IACtF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SACvF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAUD,KAAK,UAAU,WAAW,CAAC,WAAmB;IAC5C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,WAAW,EAAE,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqC,CAAC;QACpE,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE;YAChB,QAAQ,EAAE,iBAAiB,MAAM,CAAC,KAAK,IAAI,GAAG,QAAQ,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE;SAC1E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,WAAW,cAAc,EAAE,CAAC;IAC/F,CAAC;AACH,CAAC;AAQD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,MAAc;IAEd,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,aAAa,MAAM,EAAE,CAAC;IAErC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,cAAc;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QACpC,KAAK,EAAE,OAAO,QAAQ,GAAG;QACzB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,QAAQ,EAAE;KAC3D,CAAC,CAAC;IAEH,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE/D,gBAAgB;IAChB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;QACrC,IAAI;QACJ,MAAM,CAAC,gBAAgB;QACvB,KAAK;QACL,IAAI;QACJ,WAAW;QACX,IAAI;QACJ,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QACtC,KAAK,EAAE,UAAU,MAAM,CAAC,gBAAgB,yBAAyB,QAAQ,GAAG;QAC5E,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,iCAAiC;KAC7D,CAAC,CAAC;IACH,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,WAAW,CAAC,IAAI,CACd,UAAU,MAAM,CAAC,gBAAgB,SAAS,QAAQ,mBAAmB,QAAQ,yBAAyB,EACtG,UAAU,MAAM,CAAC,gBAAgB,iCAAiC,CACnE,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;YACjC,IAAI;YACJ,MAAM,CAAC,gBAAgB;YACvB,QAAQ;YACR,aAAa;YACb,IAAI;YACJ,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACnE,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;QACpC,IAAI;QACJ,MAAM,CAAC,gBAAgB;QACvB,UAAU;QACV,SAAS;QACT,mBAAmB;KACpB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,WAAW,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QACnC,KAAK,EAAE,UAAU,MAAM,CAAC,gBAAgB,qCAAqC;QAC7E,QAAQ,EAAE,QAAQ,CAAC,GAAG;KACvB,CAAC,CAAC;IACH,IAAI,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,gBAAgB,mBAAmB,CAAC,CAAC;IACzE,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QAC1E,KAAK,EAAE,4CAA4C,MAAM,CAAC,QAAQ,cAAc,MAAM,GAAG;QACzF,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IAEH,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,YAAwC,CAAC;IAC7C,IAAI,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3C,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,eAAe,IAAI,4DAA4D,CAAC;QAClF,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtD,YAAY,GAAG,QAAQ,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACvC,YAAY,GAAG,QAAQ,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChC,CAAC;SAAM,IACL,CAAC,OAAO,CAAC,KAAK,KAAK,YAAY,IAAI,OAAO,CAAC,KAAK,KAAK,oBAAoB,CAAC;QAC1E,CAAC,YAAY,EACb,CAAC;QACD,YAAY,GAAG,QAAQ,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;YAClD,eAAe,IAAI,mEAAmE,CAAC;IAC9F,CAAC;SAAM,IACL,CAAC,OAAO,CAAC,KAAK,KAAK,YAAY,IAAI,OAAO,CAAC,KAAK,KAAK,oBAAoB,CAAC;QAC1E,YAAY,EACZ,CAAC;QACD,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,QAAQ,CAAC;QACxB,eAAe,IAAI,0BAA0B,OAAO,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC;IACvE,CAAC;IACD,OAAO,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,QAAQ,WAAW,oDAAoD;QAC9E,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/G,WAAW,CAAC,IAAI,CACd,uEAAuE,MAAM,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,MAAc;IAEd,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;QAClC,IAAI;QACJ,MAAM,CAAC,gBAAgB;QACvB,SAAS;QACT,aAAa;QACb,eAAe,YAAY,EAAE;KAC9B,CAAC,CAAC;IACH,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC;QACxB,QAAQ,EAAE,KAAK,CAAC,MAAM;YACpB,CAAC,CAAC,WAAW,MAAM,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3D,CAAC,CAAC,WAAW,MAAM,iBAAiB,KAAK,CAAC,IAAI,8BAA8B,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,GAAG;KACpI,CAAC;AACJ,CAAC;AAQD,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAsB,EACtB,KAAyB;IAEzB,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,kEAAkE;IAClE,6DAA6D;IAC7D,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,IAAI,GAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,WAAW,CAAC;QAClB,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,IAAI;QACP,IAAI;QACJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACpB,IAAI;QACJ,KAAK,CAAC,KAAK;QACX,IAAI;QACJ,KAAK,CAAC,IAAI;QACV,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC9C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE;QACtC,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,UAAU,EAAE,MAAM,CAAC,QAAQ;YAC3B,oBAAoB,EAAE,MAAM,CAAC,aAAa;SAC3C;KACF,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AAC/E,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import { type VoiceApiClient } from "@miadi/voice-client";
2
- import { type VoiceMcpConfig, type VoiceMcpHandlers } from "./contract.js";
2
+ import type { VoiceMcpConfig, VoiceMcpHandlers } from "./contract.js";
3
3
  export declare function createHttpHandlers(config: VoiceMcpConfig, client?: VoiceApiClient): VoiceMcpHandlers;
4
4
  //# sourceMappingURL=handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAuBA,OAAO,EAML,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAuB,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAqBhG,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,GAAE,cAIN,GACD,gBAAgB,CA0OlB"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAyBA,OAAO,EAOL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAwBtE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,GAAE,cAIN,GACD,gBAAgB,CAkTlB"}
package/dist/handlers.js CHANGED
@@ -6,11 +6,13 @@
6
6
  // HTTP surface at `/api/voice/*` (through `@miadi/voice-client`) and the folder
7
7
  // list under `MIADI_CHRONICLE_ROOT`. They are implemented.
8
8
  //
9
- // Two are not: `voice_create_episode` and `voice_episode_closing_status` mint
10
- // and prove a chronicle vessel, which means `mkepisode`, a wheel registration
11
- // and the five-stage closing gate. Those keep throwing `NotImplementedError`
12
- // naming their contract, because a tool that reports a stage it did not prove is
13
- // worse than a tool that refuses.
9
+ // The remaining two — `voice_create_episode` and `voice_episode_closing_status`
10
+ // — mint and prove a chronicle vessel: `mkepisode`, the wheel registration, and
11
+ // the five-stage closing gate, implemented in `closing.ts` (2026-08-12, ep320).
12
+ // The gate is part of the tool, not after it: every stage is proven by running
13
+ // its probe and reporting what the command actually said, `owed` is a
14
+ // first-class state, and stages 2/3 (commit, push) stay the human's — the tool
15
+ // emits their exact commands and never runs them.
14
16
  //
15
17
  // AND THE PART DELIBERATELY LEFT UNBUILT. Resolution here consults exactly what
16
18
  // it is given: an explicit reference, a caller-supplied `cwd`, or an existing
@@ -20,9 +22,9 @@
20
22
  // here would make this file a second source of truth for a rule that has an
21
23
  // owner. When nothing given answers, the tool says so; `episode: null` with a
22
24
  // reason is a valid answer, not a failure.
23
- import { VoiceApiError, createVoiceClient, episodeOf, episodeNodeId, episodeFromPath, } from "@miadi/voice-client";
24
- import { listEpisodeFolders, matchRef } from "./chronicle.js";
25
- import { NotImplementedError } from "./contract.js";
25
+ import { VoiceApiError, createVoiceClient, episodeOf, episodeNodeId, episodeFolderOf, episodeFromPath, } from "@miadi/voice-client";
26
+ import { isEpisodeFolder, listEpisodeFolders, matchRef } from "./chronicle.js";
27
+ import { mintEpisode, numberIsFree, proveClosing, refusePoisonedWheel } from "./closing.js";
26
28
  /** How many alternatives an unresolved answer offers. Enough to choose from. */
27
29
  const ALTERNATIVES_SHOWN = 5;
28
30
  export function createHttpHandlers(config, client = createVoiceClient({
@@ -143,7 +145,7 @@ export function createHttpHandlers(config, client = createVoiceClient({
143
145
  }
144
146
  return { voices, unplayable };
145
147
  }
146
- return {
148
+ const api = {
147
149
  async playEpisode(input) {
148
150
  const resolution = await resolve({ episode: input.episode });
149
151
  if (!resolution.episode)
@@ -219,13 +221,82 @@ export function createHttpHandlers(config, client = createVoiceClient({
219
221
  // 40 needs to know there are 40.
220
222
  return { resolution, total: filtered.length, voices: split(limited).voices };
221
223
  },
222
- async createEpisode() {
223
- throw new NotImplementedError("voice_create_episode", "voice-mcp.spec.md § Tool 4 · voice_create_episode and " +
224
- "§ The closing gate is part of the tool, not after it");
224
+ async createEpisode(input) {
225
+ refusePoisonedWheel(config.wheelUrl);
226
+ if (!Number.isInteger(input.number) || input.number <= 0) {
227
+ throw new Error(`number must be a positive integer, got ${input.number}`);
228
+ }
229
+ if (!input.title?.trim())
230
+ throw new Error("title is required — it becomes the folder slug");
231
+ if (!input.goal?.trim()) {
232
+ throw new Error("goal is required — the desired result this episode advances");
233
+ }
234
+ if (!input.references?.length) {
235
+ throw new Error("at least one owner/repo#n reference is required — it is the provenance " +
236
+ "anchor, and the first becomes the card's source_issue");
237
+ }
238
+ // Free over local ∪ origin/main, never the local root alone
239
+ // ([episode-addressing spec § Number Allocation]).
240
+ const allocation = await numberIsFree(config, input.number);
241
+ if (!allocation.free)
242
+ throw new Error(`refusing to mint: ${allocation.observed}`);
243
+ const mint = await mintEpisode(config, input);
244
+ const report = await proveClosing(config, mint.folder);
245
+ const result = {
246
+ episode: mint.folder,
247
+ nodeId: episodeNodeId(mint.folder),
248
+ path: mint.vesselPath,
249
+ closing: report.closing,
250
+ owedActions: report.owedActions,
251
+ };
252
+ // The first voice publishes like any other voice — same return-address
253
+ // contract, no shortcut. It makes the episode audible at birth. Note the
254
+ // spec's caution: a large first voice into an unpushed vessel narrows the
255
+ // room to rename if another host takes the number first.
256
+ if (input.firstVoice) {
257
+ result.firstVoice = await api.publishToEpisode({
258
+ text: input.firstVoice.text,
259
+ episode: mint.folder,
260
+ ...(input.firstVoice.persona ? { persona: input.firstVoice.persona } : {}),
261
+ ...(input.firstVoice.lang ? { lang: input.firstVoice.lang } : {}),
262
+ source: "episode-first-voice",
263
+ origin: input.firstVoice.origin,
264
+ });
265
+ }
266
+ return result;
225
267
  },
226
- async episodeClosingStatus() {
227
- throw new NotImplementedError("voice_episode_closing_status", "voice-mcp.spec.md § Tool 6 · voice_episode_closing_status");
268
+ async episodeClosingStatus(input) {
269
+ if (!input.episode?.trim()) {
270
+ throw new Error("episode is required: the folder name, chronicle:<folder>, or ep<NNN>");
271
+ }
272
+ const folders = await listEpisodeFolders(config.chronicleRoot);
273
+ const match = matchRef(input.episode, folders);
274
+ let folder = match.folder;
275
+ if (!folder && match.candidates.length > 1) {
276
+ throw new Error(`"${input.episode}" matches ${match.candidates.length} folders ` +
277
+ `(${match.candidates.join(", ")}) — it resolves to neither; choosing is not this tool's call`);
278
+ }
279
+ // A well-formed folder name absent on disk is a valid subject, not an
280
+ // error: the wheel may still hold its card, and that is GHOST-NODE drift
281
+ // this tool exists to report.
282
+ if (!folder) {
283
+ const bare = episodeFolderOf(input.episode.trim());
284
+ if (isEpisodeFolder(bare))
285
+ folder = bare;
286
+ }
287
+ if (!folder) {
288
+ throw new Error(`"${input.episode}" matches no folder under ${config.chronicleRoot} and is not ` +
289
+ `a well-formed episode reference (folder name, chronicle:<folder>, or ep<NNN>)`);
290
+ }
291
+ const report = await proveClosing(config, folder);
292
+ return {
293
+ episode: folder,
294
+ closing: report.closing,
295
+ drift: report.drift,
296
+ owedActions: report.owedActions,
297
+ };
228
298
  },
229
299
  };
300
+ return api;
230
301
  }
231
302
  //# sourceMappingURL=handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@miadi/voice-mcp",
3
- "version": "0.3.3",
4
- "description": "MCP server fronting the Miadi voice layer with episode addressing \u2014 play, find, publish and mint episode-bound voice from an agent's tool surface.",
3
+ "version": "0.4.0",
4
+ "description": "MCP server fronting the Miadi voice layer with episode addressing — play, find, publish and mint episode-bound voice from an agent's tool surface.",
5
5
  "license": "MIT",
6
6
  "author": "Miadi",
7
7
  "type": "module",
@@ -22,17 +22,11 @@
22
22
  "README.md",
23
23
  "SPEC-LINKS.md"
24
24
  ],
25
- "scripts": {
26
- "build": "../../node_modules/.bin/tsc -p tsconfig.build.json",
27
- "type-check": "../../node_modules/.bin/tsc -p tsconfig.build.json --noEmit",
28
- "start": "node dist/index.js",
29
- "prepublishOnly": "npm run build"
30
- },
31
25
  "dependencies": {
32
- "@miadi/voice": "workspace:*",
33
- "@miadi/voice-client": "workspace:*",
34
26
  "@modelcontextprotocol/sdk": "^1.30.0",
35
- "zod": "^4.4.0"
27
+ "zod": "^4.4.0",
28
+ "@miadi/voice": "0.3.1",
29
+ "@miadi/voice-client": "0.2.2"
36
30
  },
37
31
  "devDependencies": {
38
32
  "@types/node": "^22.0.0",
@@ -56,5 +50,10 @@
56
50
  },
57
51
  "engines": {
58
52
  "node": ">=20"
53
+ },
54
+ "scripts": {
55
+ "build": "../../node_modules/.bin/tsc -p tsconfig.build.json",
56
+ "type-check": "../../node_modules/.bin/tsc -p tsconfig.build.json --noEmit",
57
+ "start": "node dist/index.js"
59
58
  }
60
- }
59
+ }