@miadi/inquiry-weave 0.1.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 +21 -0
- package/README.md +174 -0
- package/dist/artefact.d.ts +33 -0
- package/dist/artefact.d.ts.map +1 -0
- package/dist/artefact.js +59 -0
- package/dist/artefact.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +339 -0
- package/dist/cli.js.map +1 -0
- package/dist/env.d.ts +22 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +26 -0
- package/dist/env.js.map +1 -0
- package/dist/episode.d.ts +38 -0
- package/dist/episode.d.ts.map +1 -0
- package/dist/episode.js +109 -0
- package/dist/episode.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/issue.d.ts +27 -0
- package/dist/issue.d.ts.map +1 -0
- package/dist/issue.js +55 -0
- package/dist/issue.js.map +1 -0
- package/dist/legacy-hch.d.ts +28 -0
- package/dist/legacy-hch.d.ts.map +1 -0
- package/dist/legacy-hch.js +120 -0
- package/dist/legacy-hch.js.map +1 -0
- package/dist/relate.d.ts +31 -0
- package/dist/relate.d.ts.map +1 -0
- package/dist/relate.js +79 -0
- package/dist/relate.js.map +1 -0
- package/dist/status.d.ts +47 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +142 -0
- package/dist/status.js.map +1 -0
- package/dist/sync.d.ts +28 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +80 -0
- package/dist/sync.js.map +1 -0
- package/dist/tree.d.ts +19 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +44 -0
- package/dist/tree.js.map +1 -0
- package/dist/weave.d.ts +83 -0
- package/dist/weave.d.ts.map +1 -0
- package/dist/weave.js +101 -0
- package/dist/weave.js.map +1 -0
- package/package.json +51 -0
- package/rispecs/medicine-wheel-registration.spec.md +72 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inquiry-weave CLI — pure runCli(argv, options), side-effect-free on import.
|
|
3
|
+
*
|
|
4
|
+
* Exit codes: 0 ok, 1 operational error, 2 usage/resolution error.
|
|
5
|
+
*/
|
|
6
|
+
import { isAbsolute, join } from "node:path";
|
|
7
|
+
import { resolveEnv } from "./env.js";
|
|
8
|
+
import { ArtefactResolutionError, buildArtefactName, resolveArtefact, scaffoldVessel, } from "./artefact.js";
|
|
9
|
+
import { AmbiguousEpisodeError, EpisodeResolutionError, parseEpisodeName, resolveEpisode, scaffoldEpisode, } from "./episode.js";
|
|
10
|
+
import { createIssue, IssueCreationError } from "./issue.js";
|
|
11
|
+
import { relate } from "./relate.js";
|
|
12
|
+
import { syncArtefact } from "./sync.js";
|
|
13
|
+
import { artefactStatus, episodeStatus } from "./status.js";
|
|
14
|
+
import { readArtefactWeave, readEpisodeWeave, WeaveError } from "./weave.js";
|
|
15
|
+
class UsageError extends Error {
|
|
16
|
+
}
|
|
17
|
+
const USAGE = `Usage: inquiry-weave <command> [flags]
|
|
18
|
+
|
|
19
|
+
Commands:
|
|
20
|
+
relate --artefact <name|path> --episode <num|name|path> [--issue owner/repo#N]
|
|
21
|
+
promote --artefact <name|path> (--episode <ref> | --new-episode <slug> [--title <t>])
|
|
22
|
+
inquire --episode <ref> --slug <slug> [--title <t>] [--repo owner/repo] [--no-issue]
|
|
23
|
+
sync (--artefact <ref> [--episode <ref>] | --episode <ref> [--all])
|
|
24
|
+
status (--episode <ref> | --artefact <ref>) [--json]
|
|
25
|
+
|
|
26
|
+
Global flags:
|
|
27
|
+
--inquiry-root <dir> (default: $MIADI_INQUIRY_ROOT, $INQUIRY_ROOT)
|
|
28
|
+
--chronicle-root <dir> (default: $MIADI_CHRONICLE_ROOT)
|
|
29
|
+
--repo <owner/repo> (default: $MIADI_INQUIRY_REPO)
|
|
30
|
+
--dry-run --json --help
|
|
31
|
+
|
|
32
|
+
The package relates and syncs; it never generates inquiry content.
|
|
33
|
+
`;
|
|
34
|
+
const VALUE_FLAGS = new Set([
|
|
35
|
+
"artefact",
|
|
36
|
+
"episode",
|
|
37
|
+
"issue",
|
|
38
|
+
"slug",
|
|
39
|
+
"title",
|
|
40
|
+
"repo",
|
|
41
|
+
"new-episode",
|
|
42
|
+
"inquiry-root",
|
|
43
|
+
"chronicle-root",
|
|
44
|
+
]);
|
|
45
|
+
const BOOLEAN_FLAGS = new Set(["no-issue", "all", "dry-run", "json", "help"]);
|
|
46
|
+
function parseArgs(argv) {
|
|
47
|
+
const flags = new Map();
|
|
48
|
+
let command;
|
|
49
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
50
|
+
const token = argv[index];
|
|
51
|
+
if (token === "-h") {
|
|
52
|
+
flags.set("help", true);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (token.startsWith("--")) {
|
|
56
|
+
const name = token.slice(2);
|
|
57
|
+
if (BOOLEAN_FLAGS.has(name)) {
|
|
58
|
+
flags.set(name, true);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (VALUE_FLAGS.has(name)) {
|
|
62
|
+
const value = argv[index + 1];
|
|
63
|
+
if (value === undefined || value.startsWith("--")) {
|
|
64
|
+
throw new UsageError(`flag --${name} requires a value`);
|
|
65
|
+
}
|
|
66
|
+
flags.set(name, value);
|
|
67
|
+
index += 1;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
throw new UsageError(`unknown flag --${name}`);
|
|
71
|
+
}
|
|
72
|
+
if (command === undefined) {
|
|
73
|
+
command = token;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
throw new UsageError(`unexpected argument '${token}'`);
|
|
77
|
+
}
|
|
78
|
+
return { command, flags };
|
|
79
|
+
}
|
|
80
|
+
function stringFlag(flags, name) {
|
|
81
|
+
const value = flags.get(name);
|
|
82
|
+
return typeof value === "string" ? value : undefined;
|
|
83
|
+
}
|
|
84
|
+
function requireFlag(flags, name) {
|
|
85
|
+
const value = stringFlag(flags, name);
|
|
86
|
+
if (value === undefined)
|
|
87
|
+
throw new UsageError(`--${name} is required`);
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
function emit(context, payload, human) {
|
|
91
|
+
if (context.json) {
|
|
92
|
+
context.out.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
context.out.write(`${human.join("\n")}\n`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function relateLines(result, verb = "related") {
|
|
99
|
+
const lines = [
|
|
100
|
+
`${verb}: ${result.artefact}`,
|
|
101
|
+
` artefact: ${result.artefactDir}`,
|
|
102
|
+
` episode: ${result.episodeDir}`,
|
|
103
|
+
` issue: ${result.issue ?? "(none woven)"}${result.issueSource ? ` [${result.issueSource}]` : ""}`,
|
|
104
|
+
];
|
|
105
|
+
if (result.backLinkAppended)
|
|
106
|
+
lines.push(" back-link appended to artefact AGENTS.md");
|
|
107
|
+
for (const diagnostic of result.diagnostics)
|
|
108
|
+
lines.push(` note: ${diagnostic}`);
|
|
109
|
+
return lines;
|
|
110
|
+
}
|
|
111
|
+
function syncLines(result) {
|
|
112
|
+
return [
|
|
113
|
+
`${result.status}: ${result.artefact} -> ${result.copyDir}`,
|
|
114
|
+
` files: ${result.manifest.file_count}, bytes: ${result.manifest.bytes_total}, tree: ${result.manifest.tree_sha256.slice(0, 12)}…`,
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
async function doRelate(context, artefact, episode) {
|
|
118
|
+
return relate({
|
|
119
|
+
artefact,
|
|
120
|
+
episode,
|
|
121
|
+
issue: stringFlag(context.flags, "issue"),
|
|
122
|
+
fallbackRepo: context.env.repo,
|
|
123
|
+
now: context.now,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async function commandRelate(context) {
|
|
127
|
+
const artefact = resolveArtefact(context.env.inquiryRoot, requireFlag(context.flags, "artefact"));
|
|
128
|
+
const episode = await resolveEpisode(context.env.chronicleRoot, requireFlag(context.flags, "episode"));
|
|
129
|
+
const result = await doRelate(context, artefact, episode);
|
|
130
|
+
emit(context, result, relateLines(result));
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
async function commandPromote(context) {
|
|
134
|
+
const artefact = resolveArtefact(context.env.inquiryRoot, requireFlag(context.flags, "artefact"));
|
|
135
|
+
const newSlug = stringFlag(context.flags, "new-episode");
|
|
136
|
+
const episodeRef = stringFlag(context.flags, "episode");
|
|
137
|
+
if ((newSlug === undefined) === (episodeRef === undefined)) {
|
|
138
|
+
throw new UsageError("promote needs exactly one of --episode or --new-episode <slug>");
|
|
139
|
+
}
|
|
140
|
+
const episode = newSlug
|
|
141
|
+
? await scaffoldEpisode(context.env.chronicleRoot, {
|
|
142
|
+
slug: newSlug,
|
|
143
|
+
title: stringFlag(context.flags, "title"),
|
|
144
|
+
})
|
|
145
|
+
: await resolveEpisode(context.env.chronicleRoot, episodeRef);
|
|
146
|
+
const related = await doRelate(context, artefact, episode);
|
|
147
|
+
const synced = await syncArtefact(artefact.dir, episode.dir, {
|
|
148
|
+
dryRun: context.flags.get("dry-run") === true,
|
|
149
|
+
now: context.now,
|
|
150
|
+
});
|
|
151
|
+
emit(context, { related, synced }, [
|
|
152
|
+
...(newSlug ? [`scaffolded episode: ${episode.dir}`] : []),
|
|
153
|
+
...relateLines(related, "promoted"),
|
|
154
|
+
...syncLines(synced),
|
|
155
|
+
]);
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
async function commandInquire(context) {
|
|
159
|
+
const episode = await resolveEpisode(context.env.chronicleRoot, requireFlag(context.flags, "episode"));
|
|
160
|
+
const slug = requireFlag(context.flags, "slug");
|
|
161
|
+
if (episode.number === undefined) {
|
|
162
|
+
throw new WeaveError(`episode '${episode.name}' has no parseable number — artefact naming needs ep<NNN>`);
|
|
163
|
+
}
|
|
164
|
+
const name = buildArtefactName({ episodeNumber: episode.number, slug, date: context.now() });
|
|
165
|
+
// The mystery boundary: an empty vessel only — no content is ever generated.
|
|
166
|
+
const artefact = await scaffoldVessel(context.env.inquiryRoot, name);
|
|
167
|
+
let issue;
|
|
168
|
+
let issueUrl;
|
|
169
|
+
if (context.flags.get("no-issue") !== true) {
|
|
170
|
+
const created = await createIssue({
|
|
171
|
+
title: stringFlag(context.flags, "title") ?? artefact.dir,
|
|
172
|
+
body: `Inquiry artefact ${artefact.dir}\n\nRelated miadi-chronicle episode: ${episode.name}`,
|
|
173
|
+
repo: context.env.repo,
|
|
174
|
+
cwd: artefact.dir,
|
|
175
|
+
env: context.processEnv,
|
|
176
|
+
});
|
|
177
|
+
issue = created.issue;
|
|
178
|
+
issueUrl = created.issue_url;
|
|
179
|
+
}
|
|
180
|
+
const result = await relate({
|
|
181
|
+
artefact,
|
|
182
|
+
episode,
|
|
183
|
+
issue,
|
|
184
|
+
issueUrl,
|
|
185
|
+
issueSource: issue ? "created" : undefined,
|
|
186
|
+
fallbackRepo: context.env.repo,
|
|
187
|
+
now: context.now,
|
|
188
|
+
});
|
|
189
|
+
emit(context, { vessel: artefact, related: result }, [
|
|
190
|
+
`vessel created: ${artefact.dir}`,
|
|
191
|
+
" (empty by design — the inquiry's content is yours to write)",
|
|
192
|
+
...relateLines(result, "woven"),
|
|
193
|
+
]);
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
async function syncOne(context, artefactDir, episodeDir) {
|
|
197
|
+
return syncArtefact(artefactDir, episodeDir, {
|
|
198
|
+
dryRun: context.flags.get("dry-run") === true,
|
|
199
|
+
now: context.now,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
async function commandSync(context) {
|
|
203
|
+
const artefactRef = stringFlag(context.flags, "artefact");
|
|
204
|
+
const episodeRef = stringFlag(context.flags, "episode");
|
|
205
|
+
const results = [];
|
|
206
|
+
if (artefactRef) {
|
|
207
|
+
const artefact = resolveArtefact(context.env.inquiryRoot, artefactRef);
|
|
208
|
+
if (episodeRef) {
|
|
209
|
+
const episode = await resolveEpisode(context.env.chronicleRoot, episodeRef);
|
|
210
|
+
results.push(await syncOne(context, artefact.dir, episode.dir));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
const weave = await readArtefactWeave(artefact.dir);
|
|
214
|
+
if (!weave || weave.episodes.length === 0) {
|
|
215
|
+
throw new WeaveError(`artefact ${artefact.name} has no related episodes — run 'relate' or 'promote' first`);
|
|
216
|
+
}
|
|
217
|
+
for (const link of weave.episodes) {
|
|
218
|
+
const episodeDir = isAbsolute(link.path)
|
|
219
|
+
? link.path
|
|
220
|
+
: join(context.env.chronicleRoot, link.path);
|
|
221
|
+
results.push(await syncOne(context, artefact.dir, episodeDir));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (episodeRef) {
|
|
226
|
+
const episode = await resolveEpisode(context.env.chronicleRoot, episodeRef);
|
|
227
|
+
const weave = await readEpisodeWeave(episode.dir);
|
|
228
|
+
if (!weave || weave.inquiries.length === 0) {
|
|
229
|
+
throw new WeaveError(`episode ${episode.name} has no woven inquiries yet`);
|
|
230
|
+
}
|
|
231
|
+
if (weave.inquiries.length > 1 && context.flags.get("all") !== true) {
|
|
232
|
+
throw new UsageError(`episode ${episode.name} has ${weave.inquiries.length} inquiries — pass --all, or --artefact to pick one:\n` +
|
|
233
|
+
weave.inquiries.map((entry) => ` ${entry.artefact}`).join("\n"));
|
|
234
|
+
}
|
|
235
|
+
for (const entry of weave.inquiries) {
|
|
236
|
+
results.push(await syncOne(context, join(context.env.inquiryRoot, entry.artefact), episode.dir));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
throw new UsageError("sync needs --artefact and/or --episode");
|
|
241
|
+
}
|
|
242
|
+
emit(context, results, results.flatMap((result) => syncLines(result)));
|
|
243
|
+
return 0;
|
|
244
|
+
}
|
|
245
|
+
async function commandStatus(context) {
|
|
246
|
+
const artefactRef = stringFlag(context.flags, "artefact");
|
|
247
|
+
const episodeRef = stringFlag(context.flags, "episode");
|
|
248
|
+
if ((artefactRef === undefined) === (episodeRef === undefined)) {
|
|
249
|
+
throw new UsageError("status needs exactly one of --episode or --artefact");
|
|
250
|
+
}
|
|
251
|
+
if (episodeRef) {
|
|
252
|
+
const episode = await resolveEpisode(context.env.chronicleRoot, episodeRef);
|
|
253
|
+
const report = await episodeStatus(context.env, episode);
|
|
254
|
+
const lines = [
|
|
255
|
+
`episode: ${report.episode.path}${report.episode.number !== undefined ? ` (#${report.episode.number})` : ""}`,
|
|
256
|
+
];
|
|
257
|
+
for (const inquiry of report.inquiries) {
|
|
258
|
+
lines.push(` inquiry: ${inquiry.artefact}`);
|
|
259
|
+
lines.push(` issue: ${inquiry.issue ?? "(none woven)"}`);
|
|
260
|
+
lines.push(` freshness: ${inquiry.freshness}`);
|
|
261
|
+
if (!inquiry.artefactExists)
|
|
262
|
+
lines.push(" note: source artefact missing under inquiry root");
|
|
263
|
+
for (const diagnostic of inquiry.diagnostics)
|
|
264
|
+
lines.push(` note: ${diagnostic}`);
|
|
265
|
+
}
|
|
266
|
+
for (const warning of report.warnings)
|
|
267
|
+
lines.push(` warning: ${warning}`);
|
|
268
|
+
emit(context, report, lines);
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
const artefact = resolveArtefact(context.env.inquiryRoot, artefactRef);
|
|
272
|
+
const report = await artefactStatus(context.env, artefact);
|
|
273
|
+
const lines = [
|
|
274
|
+
`artefact: ${report.artefact}`,
|
|
275
|
+
` issue: ${report.issue ?? "(none woven)"}`,
|
|
276
|
+
];
|
|
277
|
+
for (const episode of report.episodes) {
|
|
278
|
+
lines.push(` episode: ${episode.path}`);
|
|
279
|
+
lines.push(` freshness: ${episode.freshness}`);
|
|
280
|
+
for (const diagnostic of episode.diagnostics)
|
|
281
|
+
lines.push(` note: ${diagnostic}`);
|
|
282
|
+
}
|
|
283
|
+
for (const warning of report.warnings)
|
|
284
|
+
lines.push(` warning: ${warning}`);
|
|
285
|
+
emit(context, report, lines);
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
const COMMANDS = {
|
|
289
|
+
relate: commandRelate,
|
|
290
|
+
promote: commandPromote,
|
|
291
|
+
inquire: commandInquire,
|
|
292
|
+
sync: commandSync,
|
|
293
|
+
status: commandStatus,
|
|
294
|
+
};
|
|
295
|
+
export async function runCli(argv, options = {}) {
|
|
296
|
+
const stdout = options.stdout ?? process.stdout;
|
|
297
|
+
const stderr = options.stderr ?? process.stderr;
|
|
298
|
+
const processEnv = options.env ?? process.env;
|
|
299
|
+
try {
|
|
300
|
+
const { command, flags } = parseArgs(argv);
|
|
301
|
+
if (command === undefined || flags.get("help") === true) {
|
|
302
|
+
stdout.write(USAGE);
|
|
303
|
+
return command === undefined && flags.get("help") !== true && argv.length > 0 ? 2 : 0;
|
|
304
|
+
}
|
|
305
|
+
const handler = COMMANDS[command];
|
|
306
|
+
if (!handler)
|
|
307
|
+
throw new UsageError(`unknown command '${command}'`);
|
|
308
|
+
const context = {
|
|
309
|
+
env: resolveEnv({
|
|
310
|
+
inquiryRoot: stringFlag(flags, "inquiry-root"),
|
|
311
|
+
chronicleRoot: stringFlag(flags, "chronicle-root"),
|
|
312
|
+
repo: stringFlag(flags, "repo"),
|
|
313
|
+
}, processEnv),
|
|
314
|
+
flags,
|
|
315
|
+
processEnv,
|
|
316
|
+
now: options.now ?? (() => new Date()),
|
|
317
|
+
json: flags.get("json") === true,
|
|
318
|
+
out: stdout,
|
|
319
|
+
};
|
|
320
|
+
return await handler(context);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
if (error instanceof UsageError ||
|
|
324
|
+
error instanceof EpisodeResolutionError ||
|
|
325
|
+
error instanceof AmbiguousEpisodeError ||
|
|
326
|
+
error instanceof ArtefactResolutionError) {
|
|
327
|
+
stderr.write(`inquiry-weave: ${error.message}\n`);
|
|
328
|
+
return 2;
|
|
329
|
+
}
|
|
330
|
+
if (error instanceof WeaveError || error instanceof IssueCreationError) {
|
|
331
|
+
stderr.write(`inquiry-weave: ${error.message}\n`);
|
|
332
|
+
return 1;
|
|
333
|
+
}
|
|
334
|
+
stderr.write(`inquiry-weave: unexpected error: ${error.stack ?? String(error)}\n`);
|
|
335
|
+
return 1;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
export { parseEpisodeName };
|
|
339
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root/env/repo resolution for the three identities.
|
|
3
|
+
*
|
|
4
|
+
* Precedence: explicit option (CLI flag) → MIADI_* env → legacy env → default.
|
|
5
|
+
* The uncommitted MIADI_INQUIRY_ROOT draft in binscripts' bash_env_common is
|
|
6
|
+
* honored as-is; INQUIRY_ROOT remains the legacy fallback.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_INQUIRY_ROOT = "/src/IAIP/prototypes/artefacts";
|
|
9
|
+
export declare const DEFAULT_CHRONICLE_ROOT = "/srv/miadi/episodes/miadi-chronicle";
|
|
10
|
+
export declare const DEFAULT_INQUIRY_REPO = "miadisabelle/Etuaptmumk-RSM";
|
|
11
|
+
export interface WeaveEnvOptions {
|
|
12
|
+
inquiryRoot?: string;
|
|
13
|
+
chronicleRoot?: string;
|
|
14
|
+
repo?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface WeaveEnv {
|
|
17
|
+
inquiryRoot: string;
|
|
18
|
+
chronicleRoot: string;
|
|
19
|
+
repo: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function resolveEnv(options?: WeaveEnvOptions, env?: NodeJS.ProcessEnv): WeaveEnv;
|
|
22
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,mCAAmC,CAAA;AACpE,eAAO,MAAM,sBAAsB,wCAAwC,CAAA;AAC3E,eAAO,MAAM,oBAAoB,gCAAgC,CAAA;AAEjE,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb;AASD,wBAAgB,UAAU,CACxB,OAAO,GAAE,eAAoB,EAC7B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,QAAQ,CASV"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root/env/repo resolution for the three identities.
|
|
3
|
+
*
|
|
4
|
+
* Precedence: explicit option (CLI flag) → MIADI_* env → legacy env → default.
|
|
5
|
+
* The uncommitted MIADI_INQUIRY_ROOT draft in binscripts' bash_env_common is
|
|
6
|
+
* honored as-is; INQUIRY_ROOT remains the legacy fallback.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_INQUIRY_ROOT = "/src/IAIP/prototypes/artefacts";
|
|
9
|
+
export const DEFAULT_CHRONICLE_ROOT = "/srv/miadi/episodes/miadi-chronicle";
|
|
10
|
+
export const DEFAULT_INQUIRY_REPO = "miadisabelle/Etuaptmumk-RSM";
|
|
11
|
+
function firstNonEmpty(...values) {
|
|
12
|
+
for (const value of values) {
|
|
13
|
+
if (value !== undefined && value.trim() !== "")
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
export function resolveEnv(options = {}, env = process.env) {
|
|
19
|
+
return {
|
|
20
|
+
inquiryRoot: firstNonEmpty(options.inquiryRoot, env.MIADI_INQUIRY_ROOT, env.INQUIRY_ROOT) ??
|
|
21
|
+
DEFAULT_INQUIRY_ROOT,
|
|
22
|
+
chronicleRoot: firstNonEmpty(options.chronicleRoot, env.MIADI_CHRONICLE_ROOT) ?? DEFAULT_CHRONICLE_ROOT,
|
|
23
|
+
repo: firstNonEmpty(options.repo, env.MIADI_INQUIRY_REPO) ?? DEFAULT_INQUIRY_REPO,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gCAAgC,CAAA;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,qCAAqC,CAAA;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAA;AAcjE,SAAS,aAAa,CAAC,GAAG,MAA8B;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;IAC9D,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,UAA2B,EAAE,EAC7B,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO;QACL,WAAW,EACT,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,YAAY,CAAC;YAC5E,oBAAoB;QACtB,aAAa,EACX,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,oBAAoB,CAAC,IAAI,sBAAsB;QAC1F,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,oBAAoB;KAClF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chronicle episode identity: resolution, number allocation, scaffold.
|
|
3
|
+
*
|
|
4
|
+
* scaffoldEpisode() is deliberately one exported function so a future
|
|
5
|
+
* passages `mkepisode` can own episode creation and this package keeps
|
|
6
|
+
* consuming any pre-existing episode regardless of creator (see README
|
|
7
|
+
* "Kinship").
|
|
8
|
+
*/
|
|
9
|
+
export interface EpisodeIdentity {
|
|
10
|
+
number?: number;
|
|
11
|
+
slug?: string;
|
|
12
|
+
date?: string;
|
|
13
|
+
name: string;
|
|
14
|
+
dir: string;
|
|
15
|
+
/** Relative to the chronicle root when inside it, absolute otherwise. */
|
|
16
|
+
path: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class EpisodeResolutionError extends Error {
|
|
19
|
+
}
|
|
20
|
+
export declare class AmbiguousEpisodeError extends EpisodeResolutionError {
|
|
21
|
+
readonly candidates: string[];
|
|
22
|
+
constructor(ref: string, candidates: string[]);
|
|
23
|
+
}
|
|
24
|
+
export declare function parseEpisodeName(name: string): Pick<EpisodeIdentity, "number" | "slug" | "date">;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve an episode reference: a number ("126"), a directory name, or a path.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveEpisode(chronicleRoot: string, ref: string): Promise<EpisodeIdentity>;
|
|
29
|
+
/** Max existing episode number + 1 — the only safe rule given wild duplicates. */
|
|
30
|
+
export declare function allocateEpisodeNumber(chronicleRoot: string): Promise<number>;
|
|
31
|
+
export interface ScaffoldEpisodeOptions {
|
|
32
|
+
slug: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
date?: string;
|
|
35
|
+
number?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function scaffoldEpisode(chronicleRoot: string, options: ScaffoldEpisodeOptions): Promise<EpisodeIdentity>;
|
|
38
|
+
//# sourceMappingURL=episode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"episode.d.ts","sourceRoot":"","sources":["../src/episode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,qBAAa,qBAAsB,SAAQ,sBAAsB;aAG7C,UAAU,EAAE,MAAM,EAAE;gBADpC,GAAG,EAAE,MAAM,EACK,UAAU,EAAE,MAAM,EAAE;CAOvC;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,CAMhG;AAkBD;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,eAAe,CAAC,CA0B1B;AAED,kFAAkF;AAClF,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlF;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAuB1B"}
|
package/dist/episode.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chronicle episode identity: resolution, number allocation, scaffold.
|
|
3
|
+
*
|
|
4
|
+
* scaffoldEpisode() is deliberately one exported function so a future
|
|
5
|
+
* passages `mkepisode` can own episode creation and this package keeps
|
|
6
|
+
* consuming any pre-existing episode regardless of creator (see README
|
|
7
|
+
* "Kinship").
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, readdir, writeFile } from "node:fs/promises";
|
|
10
|
+
import { existsSync, statSync } from "node:fs";
|
|
11
|
+
import { basename, isAbsolute, join, relative, resolve } from "node:path";
|
|
12
|
+
import { stringify } from "yaml";
|
|
13
|
+
export class EpisodeResolutionError extends Error {
|
|
14
|
+
}
|
|
15
|
+
export class AmbiguousEpisodeError extends EpisodeResolutionError {
|
|
16
|
+
candidates;
|
|
17
|
+
constructor(ref, candidates) {
|
|
18
|
+
super(`episode number ${ref} is ambiguous in the chronicle (duplicates exist); ` +
|
|
19
|
+
`pass a directory name or path instead. Candidates:\n ${candidates.join("\n ")}`);
|
|
20
|
+
this.candidates = candidates;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const EPISODE_NAME_PATTERN = /^(\d{4}-\d{2}-\d{2})-episode-(\d+)-(.+)$/;
|
|
24
|
+
const EPISODE_NUMBER_PATTERN = /episode-(\d+)/;
|
|
25
|
+
export function parseEpisodeName(name) {
|
|
26
|
+
const full = EPISODE_NAME_PATTERN.exec(name);
|
|
27
|
+
if (full)
|
|
28
|
+
return { date: full[1], number: Number(full[2]), slug: full[3] };
|
|
29
|
+
const partial = EPISODE_NUMBER_PATTERN.exec(name);
|
|
30
|
+
if (partial)
|
|
31
|
+
return { number: Number(partial[1]) };
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
function identityFromDir(chronicleRoot, dir) {
|
|
35
|
+
const name = basename(dir);
|
|
36
|
+
const inside = !relative(chronicleRoot, dir).startsWith("..");
|
|
37
|
+
return {
|
|
38
|
+
...parseEpisodeName(name),
|
|
39
|
+
name,
|
|
40
|
+
dir,
|
|
41
|
+
path: inside ? relative(chronicleRoot, dir) : dir,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function listEpisodeDirs(chronicleRoot) {
|
|
45
|
+
const entries = await readdir(chronicleRoot, { withFileTypes: true });
|
|
46
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve an episode reference: a number ("126"), a directory name, or a path.
|
|
50
|
+
*/
|
|
51
|
+
export async function resolveEpisode(chronicleRoot, ref) {
|
|
52
|
+
const trimmed = ref.trim();
|
|
53
|
+
if (/^\d+$/.test(trimmed)) {
|
|
54
|
+
const wanted = Number(trimmed);
|
|
55
|
+
const matches = (await listEpisodeDirs(chronicleRoot)).filter((name) => parseEpisodeName(name).number === wanted);
|
|
56
|
+
if (matches.length === 1) {
|
|
57
|
+
return identityFromDir(chronicleRoot, join(chronicleRoot, matches[0]));
|
|
58
|
+
}
|
|
59
|
+
if (matches.length > 1)
|
|
60
|
+
throw new AmbiguousEpisodeError(trimmed, matches.sort());
|
|
61
|
+
throw new EpisodeResolutionError(`no episode numbered ${trimmed} under ${chronicleRoot}`);
|
|
62
|
+
}
|
|
63
|
+
const candidates = [
|
|
64
|
+
isAbsolute(trimmed) ? trimmed : undefined,
|
|
65
|
+
join(chronicleRoot, trimmed),
|
|
66
|
+
resolve(trimmed),
|
|
67
|
+
].filter((candidate) => candidate !== undefined);
|
|
68
|
+
for (const candidate of candidates) {
|
|
69
|
+
if (existsSync(candidate) && statSync(candidate).isDirectory()) {
|
|
70
|
+
return identityFromDir(chronicleRoot, resolve(candidate));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw new EpisodeResolutionError(`episode not found: ${ref} (looked under ${chronicleRoot})`);
|
|
74
|
+
}
|
|
75
|
+
/** Max existing episode number + 1 — the only safe rule given wild duplicates. */
|
|
76
|
+
export async function allocateEpisodeNumber(chronicleRoot) {
|
|
77
|
+
let max = 0;
|
|
78
|
+
for (const name of await listEpisodeDirs(chronicleRoot)) {
|
|
79
|
+
const match = EPISODE_NUMBER_PATTERN.exec(name);
|
|
80
|
+
if (match)
|
|
81
|
+
max = Math.max(max, Number(match[1]));
|
|
82
|
+
}
|
|
83
|
+
return max + 1;
|
|
84
|
+
}
|
|
85
|
+
export async function scaffoldEpisode(chronicleRoot, options) {
|
|
86
|
+
const number = options.number ?? (await allocateEpisodeNumber(chronicleRoot));
|
|
87
|
+
const date = options.date ?? new Date().toISOString().slice(0, 10);
|
|
88
|
+
const name = `${date}-episode-${String(number).padStart(3, "0")}-${options.slug}`;
|
|
89
|
+
const dir = join(chronicleRoot, name);
|
|
90
|
+
if (existsSync(dir)) {
|
|
91
|
+
throw new EpisodeResolutionError(`episode directory already exists: ${dir}`);
|
|
92
|
+
}
|
|
93
|
+
await mkdir(join(dir, "inquiry"), { recursive: true });
|
|
94
|
+
// This episode.yaml is package-generated, so writing it is safe — the
|
|
95
|
+
// package never rewrites hand-authored episode.yaml files.
|
|
96
|
+
const manifest = {
|
|
97
|
+
episode: number,
|
|
98
|
+
title: options.title ?? options.slug,
|
|
99
|
+
slug: options.slug,
|
|
100
|
+
date,
|
|
101
|
+
series: "miadi-chronicle",
|
|
102
|
+
status: "scaffold",
|
|
103
|
+
issue_anchors: [],
|
|
104
|
+
artifacts: [],
|
|
105
|
+
};
|
|
106
|
+
await writeFile(join(dir, "episode.yaml"), stringify(manifest), "utf8");
|
|
107
|
+
return { number, slug: options.slug, date, name, dir, path: name };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=episode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"episode.js","sourceRoot":"","sources":["../src/episode.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./env.js";
|
|
2
|
+
export * from "./weave.js";
|
|
3
|
+
export * from "./legacy-hch.js";
|
|
4
|
+
export * from "./artefact.js";
|
|
5
|
+
export * from "./episode.js";
|
|
6
|
+
export * from "./tree.js";
|
|
7
|
+
export * from "./sync.js";
|
|
8
|
+
export * from "./issue.js";
|
|
9
|
+
export * from "./relate.js";
|
|
10
|
+
export * from "./status.js";
|
|
11
|
+
export { runCli, type RunCliOptions, type CliStreams } from "./cli.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./env.js";
|
|
2
|
+
export * from "./weave.js";
|
|
3
|
+
export * from "./legacy-hch.js";
|
|
4
|
+
export * from "./artefact.js";
|
|
5
|
+
export * from "./episode.js";
|
|
6
|
+
export * from "./tree.js";
|
|
7
|
+
export * from "./sync.js";
|
|
8
|
+
export * from "./issue.js";
|
|
9
|
+
export * from "./relate.js";
|
|
10
|
+
export * from "./status.js";
|
|
11
|
+
export { runCli } from "./cli.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAuC,MAAM,UAAU,CAAA"}
|
package/dist/issue.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub issue creation — delegated to the sourced functions in
|
|
3
|
+
* fn_github_issue.sh (gh CLI wrappers), the successor of issue_add_V2.sh.
|
|
4
|
+
*
|
|
5
|
+
* The functions write their own `.hch/` cache in the cwd; this package treats
|
|
6
|
+
* that as fn's private cache and records the issue identity into .weave.yaml
|
|
7
|
+
* from the parsed stdout, so nothing downstream depends on `.hch`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ISSUE_LIB_CANDIDATES: string[];
|
|
10
|
+
export declare class IssueCreationError extends Error {
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveIssueLib(env?: NodeJS.ProcessEnv): string | undefined;
|
|
13
|
+
export interface IssueCreationInput {
|
|
14
|
+
title: string;
|
|
15
|
+
body: string;
|
|
16
|
+
repo: string;
|
|
17
|
+
/** Working directory for issue_add — the artefact dir, so fn's .hch cache lands there. */
|
|
18
|
+
cwd: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
}
|
|
21
|
+
export interface CreatedIssue {
|
|
22
|
+
issue: string;
|
|
23
|
+
issue_url: string;
|
|
24
|
+
stdout: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createIssue(input: IssueCreationInput): Promise<CreatedIssue>;
|
|
27
|
+
//# sourceMappingURL=issue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../src/issue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,oBAAoB,UAGhC,CAAA;AAED,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAIxF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmClF"}
|