@miadi/inquiry-weave 0.16.0 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/thread.js ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * An inquiry's thread: the GitHub issue the inquiry is followed in.
3
+ *
4
+ * `openArtefactThread` creates that issue from the folder and records it in
5
+ * the folder's `.weave.yaml`, the record every reader of the weave uses: the
6
+ * episode room, the episode door, `status`, `relate`. It needs no episode.
7
+ * When the folder is later woven into an episode, `relate` (and the door's
8
+ * attach or sync) carries the thread into the episode's `inquiry/weave.yaml`.
9
+ *
10
+ * `viewArtefactThread` and `commentOnArtefactThread` read and answer that
11
+ * thread by the folder alone: the issue number comes from `.weave.yaml`.
12
+ *
13
+ * Together they do for an inquiry folder what `issue_add`, `issue_info` and
14
+ * `issue_comment` in fn_github_issue.sh did. Those leave `.hch/` side files,
15
+ * which nothing reads as a record. Ref: jgwill/Miadi#722.
16
+ */
17
+ import { commentOnIssue, createIssue, viewIssue } from "./issue.js";
18
+ import { issueBodyFromArtefact } from "./issue-content.js";
19
+ import { newArtefactWeave, readArtefactWeave, writeArtefactWeave, WeaveError } from "./weave.js";
20
+ export async function openArtefactThread(input) {
21
+ const weave = await readArtefactWeave(input.artefact.dir);
22
+ const title = input.title?.trim() || input.artefact.dir;
23
+ const base = {
24
+ artefact: input.artefact.name,
25
+ artefactDir: input.artefact.dir,
26
+ repo: input.repo,
27
+ title,
28
+ episodes: (weave?.episodes ?? []).map((e) => ({ path: e.path, number: e.number })),
29
+ dryRun: input.dryRun === true,
30
+ };
31
+ // One folder, one thread: a recorded issue is never duplicated.
32
+ if (weave?.issue) {
33
+ return { ...base, status: "already-recorded", issue: weave.issue, issue_url: weave.issue_url };
34
+ }
35
+ const body = input.body ?? (await issueBodyFromArtefact(input.artefact.dir));
36
+ const bodyBytes = Buffer.byteLength(body, "utf8");
37
+ if (input.dryRun)
38
+ return { ...base, status: "dry-run", bodyBytes };
39
+ const created = await createIssue({ title, body, repo: input.repo, cwd: input.artefact.dir, env: input.env });
40
+ const next = weave ?? newArtefactWeave(input.artefact.dir);
41
+ next.issue = created.issue;
42
+ next.issue_url = created.issue_url;
43
+ await writeArtefactWeave(input.artefact.dir, next);
44
+ return { ...base, status: "created", issue: created.issue, issue_url: created.issue_url, bodyBytes };
45
+ }
46
+ /** The thread a folder's .weave.yaml records, or a WeaveError that says how to give it one. */
47
+ async function recordedThread(artefact) {
48
+ const weave = await readArtefactWeave(artefact.dir);
49
+ if (!weave?.issue) {
50
+ throw new WeaveError(`${artefact.name} has no thread recorded in .weave.yaml — run 'inquiry-weave issue' in the folder to create one`);
51
+ }
52
+ return { weave, issue: weave.issue };
53
+ }
54
+ export async function viewArtefactThread(artefact, env) {
55
+ const { weave, issue } = await recordedThread(artefact);
56
+ const thread = await viewIssue(issue, { cwd: artefact.dir, env });
57
+ return {
58
+ artefact: artefact.name,
59
+ artefactDir: artefact.dir,
60
+ issue,
61
+ episodes: weave.episodes.map((e) => ({ path: e.path, number: e.number })),
62
+ thread,
63
+ };
64
+ }
65
+ export async function commentOnArtefactThread(artefact, body, options = {}) {
66
+ if (!body.trim())
67
+ throw new WeaveError("a comment needs a body (--body or --body-file)");
68
+ const { issue } = await recordedThread(artefact);
69
+ const base = { artefact: artefact.name, issue, dryRun: options.dryRun === true, bodyBytes: Buffer.byteLength(body, "utf8") };
70
+ if (options.dryRun)
71
+ return base;
72
+ const posted = await commentOnIssue(issue, body, { cwd: artefact.dir, env: options.env });
73
+ return { ...base, url: posted.url };
74
+ }
75
+ //# sourceMappingURL=thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.js","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miadi/inquiry-weave",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "description": "Relate and sync IAIP inquiry artefacts, their GitHub issues, and miadi-chronicle episodes. Creates vessels and relations only — never inquiry content.",
5
5
  "publishConfig": {
6
6
  "access": "public"