@miadi/inquiry-weave 0.7.0 → 0.8.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/README.md +113 -0
- package/dist/chronicle-dsl.d.ts +191 -0
- package/dist/chronicle-dsl.d.ts.map +1 -0
- package/dist/chronicle-dsl.js +327 -0
- package/dist/chronicle-dsl.js.map +1 -0
- package/dist/chronicle-terminal.d.ts +305 -0
- package/dist/chronicle-terminal.d.ts.map +1 -0
- package/dist/chronicle-terminal.js +449 -0
- package/dist/chronicle-terminal.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +222 -8
- package/dist/cli.js.map +1 -1
- package/dist/terminal-install.d.ts +84 -0
- package/dist/terminal-install.d.ts.map +1 -0
- package/dist/terminal-install.js +306 -0
- package/dist/terminal-install.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install the terminal handler for `miadi-chronicle:` references.
|
|
3
|
+
*
|
|
4
|
+
* Contract: rispecs/miadi-chronicle-dsl/SPEC-TERMINAL.md §3.
|
|
5
|
+
*
|
|
6
|
+
* Two files, shipped as embedded strings so `dist/` is self-contained — the
|
|
7
|
+
* same shape `installSkill` uses. Hand-writing them into a home directory is
|
|
8
|
+
* how a working setup becomes unreproducible on the next machine.
|
|
9
|
+
*
|
|
10
|
+
* ~/.config/terminator/plugins/miadi_chronicle_url_handler.py
|
|
11
|
+
* ~/bin/miadi-chronicle-open
|
|
12
|
+
*
|
|
13
|
+
* The plugin makes a bare `miadi-chronicle:311` clickable in ANY output — a
|
|
14
|
+
* git log, a grep hit, an agent's raw text — output that knows nothing about
|
|
15
|
+
* miadi and will never wrap itself in an OSC 8 escape. That is why it lives
|
|
16
|
+
* alongside OSC 8 rather than competing with it: Terminator has two click
|
|
17
|
+
* paths, and only the regex one consults url_handler plugins
|
|
18
|
+
* (`terminal.py` — OSC 8 calls `open_url(prepare=False)` and goes straight to
|
|
19
|
+
* xdg-open, bypassing the plugin API entirely).
|
|
20
|
+
*/
|
|
21
|
+
import { chmodSync, copyFileSync, lstatSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { homedir } from "node:os";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
24
|
+
export class TerminalInstallError extends Error {
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = "TerminalInstallError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const PLUGIN_CLASS = "MiadiChronicleURLHandler";
|
|
31
|
+
export const PLUGIN_FILENAME = "miadi_chronicle_url_handler.py";
|
|
32
|
+
export const WRAPPER_FILENAME = "miadi-chronicle-open";
|
|
33
|
+
export const ENV_DROPIN_FILENAME = "50-miadi-chronicle.conf";
|
|
34
|
+
/**
|
|
35
|
+
* The URI regex, in one place.
|
|
36
|
+
*
|
|
37
|
+
* Accepts the rootless canonical form and the legacy `//` form. The character
|
|
38
|
+
* class stops at what ends a URI in running text — RFC 3986 Appendix C's point
|
|
39
|
+
* that a reader cannot tell a sentence's trailing period from part of the
|
|
40
|
+
* address. The callback strips trailing punctuation for the same reason.
|
|
41
|
+
*/
|
|
42
|
+
export const URI_MATCH_REGEX = String.raw `\bmiadi-chronicle:(?://)?[A-Za-z0-9._~/\-]+(?:\?[^\s<>"'` + "`" + String.raw `]*)?(?:#[^\s<>"'` + "`" + String.raw `]*)?`;
|
|
43
|
+
/**
|
|
44
|
+
* A systemd user environment drop-in — the OS's own answer to "a GUI app
|
|
45
|
+
* cannot see my shell variables".
|
|
46
|
+
*
|
|
47
|
+
* `~/.config/environment.d/*.conf` is read by
|
|
48
|
+
* /usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator
|
|
49
|
+
* at user-session start, so every GUI process launched by that session
|
|
50
|
+
* inherits it — Terminator included. This machine already uses the pattern
|
|
51
|
+
* (999-node.conf), so it is the local convention, not an invention.
|
|
52
|
+
*
|
|
53
|
+
* It takes effect at the next login. The wrapper still carries its own
|
|
54
|
+
* defaults so a click works before then; the drop-in is what makes those
|
|
55
|
+
* defaults stop being the only copy.
|
|
56
|
+
*/
|
|
57
|
+
function envDropinSource(env) {
|
|
58
|
+
const lines = [
|
|
59
|
+
`# ${ENV_DROPIN_FILENAME} — miadi chronicle environment for GUI sessions.`,
|
|
60
|
+
`#`,
|
|
61
|
+
`# INSTALLED FILE — source of truth:`,
|
|
62
|
+
`# jgwill/Miadi packages/inquiry-weave/src/terminal-install.ts`,
|
|
63
|
+
`# Reinstall with: inquiry-weave terminal install --force`,
|
|
64
|
+
`#`,
|
|
65
|
+
`# Read by systemd's user-environment generator at session start, so every`,
|
|
66
|
+
`# GUI process inherits these — a terminal emulator does not get them from`,
|
|
67
|
+
`# your shell rc. Takes effect at the NEXT LOGIN.`,
|
|
68
|
+
`MIADI_CHRONICLE_ROOT=${env.chronicleRoot}`,
|
|
69
|
+
];
|
|
70
|
+
if (env.publicBase)
|
|
71
|
+
lines.push(`MIADI_URL_BASE=${env.publicBase}`);
|
|
72
|
+
if (env.internalBase)
|
|
73
|
+
lines.push(`MIADI_URL_BASE_INTERNAL=${env.internalBase}`);
|
|
74
|
+
lines.push(`MW_API_URL=${env.mwUrl}`);
|
|
75
|
+
return `${lines.join("\n")}\n`;
|
|
76
|
+
}
|
|
77
|
+
function pluginSource() {
|
|
78
|
+
return `"""${PLUGIN_FILENAME} — Terminator URL handler for miadi-chronicle references.
|
|
79
|
+
|
|
80
|
+
INSTALLED FILE — do not edit here. Source of truth:
|
|
81
|
+
jgwill/Miadi packages/inquiry-weave/src/terminal-install.ts
|
|
82
|
+
Reinstall with: inquiry-weave terminal install --force
|
|
83
|
+
|
|
84
|
+
Makes a bare \`miadi-chronicle:311\` in ANY terminal output Ctrl-clickable — a
|
|
85
|
+
git log, a grep hit, an agent's raw text — output that knows nothing about miadi
|
|
86
|
+
and so will never wrap itself in an OSC 8 escape.
|
|
87
|
+
|
|
88
|
+
Terminator has two click paths (terminal.py): an OSC 8 hyperlink calls
|
|
89
|
+
open_url(prepare=False) and goes straight to xdg-open, while a regex match calls
|
|
90
|
+
prepare=True, which is the only path that consults url_handler plugins. The two
|
|
91
|
+
cover different halves of the problem and both land on the same wrapper.
|
|
92
|
+
|
|
93
|
+
Spec: rispecs/miadi-chronicle-dsl/SPEC-TERMINAL.md
|
|
94
|
+
Issue: jgwill/Miadi#595
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
import os
|
|
98
|
+
import subprocess
|
|
99
|
+
|
|
100
|
+
import terminatorlib.plugin as plugin
|
|
101
|
+
|
|
102
|
+
AVAILABLE = ['${PLUGIN_CLASS}']
|
|
103
|
+
|
|
104
|
+
OPEN = os.path.expanduser('~/bin/${WRAPPER_FILENAME}')
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class ${PLUGIN_CLASS}(plugin.URLHandler):
|
|
108
|
+
capabilities = ['url_handler']
|
|
109
|
+
handler_name = 'miadi_chronicle_uri'
|
|
110
|
+
# r'''...''' because the pattern contains a double quote.
|
|
111
|
+
match = r'''${URI_MATCH_REGEX}'''
|
|
112
|
+
nameopen = 'Open chronicle episode'
|
|
113
|
+
namecopy = 'Copy miadi-chronicle reference'
|
|
114
|
+
|
|
115
|
+
def callback(self, url):
|
|
116
|
+
"""Return something openable, or the URL itself so failure stays visible.
|
|
117
|
+
|
|
118
|
+
Never raises: a handler that throws takes the click with it and the user
|
|
119
|
+
sees nothing at all. Returning the original means the system handler
|
|
120
|
+
reports a plain "no application" error — a failure that can be read.
|
|
121
|
+
"""
|
|
122
|
+
url = url.rstrip('.,;:!?)]}\\'"')
|
|
123
|
+
try:
|
|
124
|
+
result = subprocess.run(
|
|
125
|
+
[OPEN, url], capture_output=True, text=True, timeout=20,
|
|
126
|
+
)
|
|
127
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
128
|
+
return url
|
|
129
|
+
if result.returncode != 0:
|
|
130
|
+
return url
|
|
131
|
+
return result.stdout.strip() or url
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
function wrapperSource(env) {
|
|
135
|
+
const { binPath, nodePath, defaultBase, chronicleRoot, publicBase, internalBase, mwUrl } = env;
|
|
136
|
+
return `#!/usr/bin/env bash
|
|
137
|
+
# ${WRAPPER_FILENAME} — resolve a miadi-chronicle reference to something openable.
|
|
138
|
+
#
|
|
139
|
+
# INSTALLED FILE — do not edit here. Source of truth:
|
|
140
|
+
# jgwill/Miadi packages/inquiry-weave/src/terminal-install.ts
|
|
141
|
+
# Reinstall with: inquiry-weave terminal install --force
|
|
142
|
+
#
|
|
143
|
+
# Usage: ${WRAPPER_FILENAME} "miadi-chronicle:311/services-inventory"
|
|
144
|
+
# Stdout: one URL
|
|
145
|
+
# Exit: 0 ok · 64 usage · 65 not a chronicle reference · 66 unresolved
|
|
146
|
+
#
|
|
147
|
+
# Spec: rispecs/miadi-chronicle-dsl/SPEC-TERMINAL.md
|
|
148
|
+
# Issue: jgwill/Miadi#595
|
|
149
|
+
|
|
150
|
+
set -euo pipefail
|
|
151
|
+
|
|
152
|
+
# Baked at install time to the bin that installed it, so the handler does not
|
|
153
|
+
# depend on PATH resolution inside a GUI process — Terminator does not inherit
|
|
154
|
+
# a login shell's PATH, which is how a handler that works in a terminal fails
|
|
155
|
+
# when clicked.
|
|
156
|
+
IW_BIN="\${MIADI_IW_BIN:-${binPath}}"
|
|
157
|
+
NODE_BIN="\${MIADI_NODE_BIN:-${nodePath}}"
|
|
158
|
+
|
|
159
|
+
# Baked at install time for the same reason as the bin paths: a GUI process
|
|
160
|
+
# inherits none of this, so without it every click would silently fall back to
|
|
161
|
+
# the localhost door — a link that works for one reader on one machine.
|
|
162
|
+
export MIADI_CHRONICLE_ROOT="\${MIADI_CHRONICLE_ROOT:-${chronicleRoot}}"
|
|
163
|
+
export MIADI_URL_BASE="\${MIADI_URL_BASE:-${publicBase}}"
|
|
164
|
+
export MIADI_URL_BASE_INTERNAL="\${MIADI_URL_BASE_INTERNAL:-${internalBase}}"
|
|
165
|
+
export MW_API_URL="\${MW_API_URL:-${mwUrl}}"
|
|
166
|
+
|
|
167
|
+
[ $# -ge 1 ] || { echo "usage: \$0 \\"miadi-chronicle:<episode>[/<artifact>]\\"" >&2; exit 64; }
|
|
168
|
+
|
|
169
|
+
case "\$1" in
|
|
170
|
+
miadi-chronicle:*) ;;
|
|
171
|
+
*) echo "not a chronicle reference: \$1" >&2; exit 65 ;;
|
|
172
|
+
esac
|
|
173
|
+
|
|
174
|
+
# Which door a click opens. 'public' by default because a clicked link is often
|
|
175
|
+
# shared onward, and a localhost URL works for exactly one reader on one machine.
|
|
176
|
+
BASE="\${MIADI_CHRONICLE_OPEN_BASE:-${defaultBase}}"
|
|
177
|
+
|
|
178
|
+
url=\$("\$NODE_BIN" "\$IW_BIN" resolve "\$1" --json --base "\$BASE" 2>/dev/null | "\$NODE_BIN" -e '
|
|
179
|
+
let raw = ""
|
|
180
|
+
process.stdin.on("data", (c) => (raw += c))
|
|
181
|
+
process.stdin.on("end", () => {
|
|
182
|
+
try { process.stdout.write(JSON.parse(raw).open || "") } catch { process.stdout.write("") }
|
|
183
|
+
})')
|
|
184
|
+
|
|
185
|
+
[ -n "\$url" ] || { echo "unresolved: \$1" >&2; exit 66; }
|
|
186
|
+
printf '%s\\n' "\$url"
|
|
187
|
+
`;
|
|
188
|
+
}
|
|
189
|
+
function pathState(path) {
|
|
190
|
+
try {
|
|
191
|
+
lstatSync(path);
|
|
192
|
+
return "present";
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return "missing";
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Install both files, and optionally enable the plugin.
|
|
200
|
+
*
|
|
201
|
+
* Idempotent: an existing file is left alone unless `force` is set, so running
|
|
202
|
+
* this twice is safe and running it after an upgrade is the repair.
|
|
203
|
+
*/
|
|
204
|
+
export function installTerminalHandler(options = {}) {
|
|
205
|
+
const home = options.homeDir ?? homedir();
|
|
206
|
+
const binPath = options.binPath ?? process.argv[1];
|
|
207
|
+
const nodePath = options.nodePath ?? process.execPath;
|
|
208
|
+
const defaultBase = options.defaultBase ?? "public";
|
|
209
|
+
const env = options.env ?? process.env;
|
|
210
|
+
const pluginPath = join(home, ".config", "terminator", "plugins", PLUGIN_FILENAME);
|
|
211
|
+
const wrapperPath = join(home, "bin", WRAPPER_FILENAME);
|
|
212
|
+
const bakeable = {
|
|
213
|
+
chronicleRoot: options.chronicleRoot ?? env.MIADI_CHRONICLE_ROOT ?? "/srv/miadi/episodes/miadi-chronicle",
|
|
214
|
+
publicBase: options.publicBase ?? env.MIADI_URL_BASE ?? "",
|
|
215
|
+
internalBase: options.internalBase ?? env.MIADI_URL_BASE_INTERNAL ?? "",
|
|
216
|
+
mwUrl: options.mwUrl ?? env.MW_API_URL ?? "http://127.0.0.1:8040",
|
|
217
|
+
};
|
|
218
|
+
const envDropinPath = join(home, ".config", "environment.d", ENV_DROPIN_FILENAME);
|
|
219
|
+
const targets = [
|
|
220
|
+
{ path: pluginPath, content: pluginSource() },
|
|
221
|
+
{ path: envDropinPath, content: envDropinSource(bakeable) },
|
|
222
|
+
{
|
|
223
|
+
path: wrapperPath,
|
|
224
|
+
content: wrapperSource({ binPath, nodePath, defaultBase, ...bakeable }),
|
|
225
|
+
mode: 0o755,
|
|
226
|
+
},
|
|
227
|
+
];
|
|
228
|
+
const files = [];
|
|
229
|
+
for (const target of targets) {
|
|
230
|
+
const exists = pathState(target.path) === "present";
|
|
231
|
+
if (exists && options.force !== true) {
|
|
232
|
+
files.push({ path: target.path, state: "exists" });
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (options.dryRun === true) {
|
|
236
|
+
files.push({ path: target.path, state: "would-write" });
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
mkdirSync(dirname(target.path), { recursive: true });
|
|
240
|
+
writeFileSync(target.path, target.content, "utf8");
|
|
241
|
+
if (target.mode !== undefined)
|
|
242
|
+
chmodSync(target.path, target.mode);
|
|
243
|
+
files.push({ path: target.path, state: "written" });
|
|
244
|
+
}
|
|
245
|
+
const configPath = join(home, ".config", "terminator", "config");
|
|
246
|
+
const result = {
|
|
247
|
+
files,
|
|
248
|
+
configPath,
|
|
249
|
+
configState: "not-requested",
|
|
250
|
+
binPath,
|
|
251
|
+
};
|
|
252
|
+
if (options.enable !== true)
|
|
253
|
+
return result;
|
|
254
|
+
if (pathState(configPath) === "missing") {
|
|
255
|
+
result.configState = "no-config";
|
|
256
|
+
return result;
|
|
257
|
+
}
|
|
258
|
+
const config = readFileSync(configPath, "utf8");
|
|
259
|
+
if (config.includes(PLUGIN_CLASS)) {
|
|
260
|
+
result.configState = "already-enabled";
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
const line = /^(\s*enabled_plugins\s*=\s*)(.*)$/m.exec(config);
|
|
264
|
+
if (!line) {
|
|
265
|
+
throw new TerminalInstallError(`no enabled_plugins line in ${configPath} — add "${PLUGIN_CLASS}" by hand`);
|
|
266
|
+
}
|
|
267
|
+
if (options.dryRun === true) {
|
|
268
|
+
result.configState = "would-enable";
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
// A backup before touching a config the user owns and did not write here.
|
|
272
|
+
const backupPath = `${configPath}.bak-miadi-chronicle`;
|
|
273
|
+
copyFileSync(configPath, backupPath);
|
|
274
|
+
result.backupPath = backupPath;
|
|
275
|
+
const updated = config.replace(line[0], `${line[1]}${line[2].trim()}, ${PLUGIN_CLASS}`);
|
|
276
|
+
writeFileSync(configPath, updated, "utf8");
|
|
277
|
+
result.configState = "enabled";
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
/** Remove both files and drop the class from `enabled_plugins`. */
|
|
281
|
+
export function uninstallTerminalHandler(options = {}) {
|
|
282
|
+
const home = options.homeDir ?? homedir();
|
|
283
|
+
const removed = [];
|
|
284
|
+
for (const path of [
|
|
285
|
+
join(home, ".config", "terminator", "plugins", PLUGIN_FILENAME),
|
|
286
|
+
join(home, ".config", "environment.d", ENV_DROPIN_FILENAME),
|
|
287
|
+
join(home, "bin", WRAPPER_FILENAME),
|
|
288
|
+
]) {
|
|
289
|
+
if (pathState(path) === "present") {
|
|
290
|
+
if (options.dryRun !== true)
|
|
291
|
+
rmSync(path);
|
|
292
|
+
removed.push(path);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const configPath = join(home, ".config", "terminator", "config");
|
|
296
|
+
if (pathState(configPath) === "missing")
|
|
297
|
+
return { removed, configState: "no-config" };
|
|
298
|
+
const config = readFileSync(configPath, "utf8");
|
|
299
|
+
if (!config.includes(PLUGIN_CLASS))
|
|
300
|
+
return { removed, configState: "not-enabled" };
|
|
301
|
+
if (options.dryRun !== true) {
|
|
302
|
+
writeFileSync(configPath, config.replace(new RegExp(`,\\s*${PLUGIN_CLASS}|${PLUGIN_CLASS},\\s*`), ""), "utf8");
|
|
303
|
+
}
|
|
304
|
+
return { removed, configState: "disabled" };
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=terminal-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-install.js","sourceRoot":"","sources":["../src/terminal-install.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.
|
|
3
|
+
"version": "0.8.0",
|
|
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"
|