@miadi/chronicle-tui 0.6.0 → 0.7.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/dist/tide.d.ts ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * The tide cockpit from the terminal, starting with an episode's companion
3
+ * seat (jgwill/Miadi#714, in P4 of jgwill/Miadi#706).
4
+ *
5
+ * `POST /api/tide/companion` runs `tide companion open --format json`. Without
6
+ * `run` it answers the plan; with `run` it carries the plan out and answers the
7
+ * steps taken. The browser does what the cockpit's "Open Mia for this episode"
8
+ * does (`components/tide/companion-opener.tsx`): it always shows the plan
9
+ * first, and offers to run only the plan on screen, only when that plan would
10
+ * act, and only once the person confirms it. Archiving the existing session is
11
+ * the person's word, so it is a choice they make, and choosing it asks again.
12
+ *
13
+ * Opening a seat starts an agent with permissions bypassed in a tmux session,
14
+ * on the app's host. The browser never types into that pane: the command does,
15
+ * and it waits until the seat is idle.
16
+ */
17
+ import { type MiadiApi } from "./api.js";
18
+ export interface CompanionPlan {
19
+ state?: string;
20
+ session?: string;
21
+ launch?: string;
22
+ commands?: string[];
23
+ starter_prompt?: string;
24
+ archive_name?: string | null;
25
+ episode?: {
26
+ number?: number;
27
+ title?: string;
28
+ folder?: string;
29
+ };
30
+ seat?: {
31
+ key?: string;
32
+ };
33
+ agent?: {
34
+ state?: string;
35
+ status?: string;
36
+ } | null;
37
+ listener?: {
38
+ state?: string;
39
+ };
40
+ run?: {
41
+ steps?: Array<{
42
+ at: string;
43
+ step: string;
44
+ }>;
45
+ warnings?: string[];
46
+ };
47
+ }
48
+ export interface CompanionAnswer {
49
+ /** tide's exit: 0 done (or nothing to do), 3 done with warnings, 4 refused, 2 not in controller mode. */
50
+ exitCode?: number;
51
+ plan?: CompanionPlan | null;
52
+ message?: string;
53
+ error?: string;
54
+ /** The HTTP status, when it was not 200. */
55
+ status?: number;
56
+ }
57
+ /** The plans that do nothing, as the cockpit lists them: nothing is offered to run. */
58
+ export declare const NOTHING_TO_RUN: readonly string[];
59
+ /** A plan that would act: a state that is not a refusal or a no-op, and commands to carry out. */
60
+ export declare function planActs(answer: CompanionAnswer | undefined): boolean;
61
+ /** The plan for an episode's companion seat. Acts on nothing. */
62
+ export declare function companionPlan(api: MiadiApi, episode: string, options?: {
63
+ archive?: boolean;
64
+ seat?: string;
65
+ }): Promise<CompanionAnswer>;
66
+ /** Carry the plan out. Opening a seat waits for its prompt and its listener: up to seven minutes. */
67
+ export declare function runCompanion(api: MiadiApi, episode: string, options?: {
68
+ archive?: boolean;
69
+ seat?: string;
70
+ }): Promise<CompanionAnswer>;
71
+ export interface PlanLine {
72
+ text: string;
73
+ tone?: "state" | "meta" | "warn" | "error" | "step";
74
+ }
75
+ /** What the person reads before deciding: the session, the state, what would be done, or what was done. */
76
+ export declare function companionLines(answer: CompanionAnswer): PlanLine[];
77
+ /** One line for the status bar once the plan ran. */
78
+ export declare function ranMessage(answer: CompanionAnswer): string;
79
+ //# sourceMappingURL=tide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tide.d.ts","sourceRoot":"","sources":["../src/tide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGlD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAClD,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAC3E;AAED,MAAM,WAAW,eAAe;IAC9B,yGAAyG;IACzG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,uFAAuF;AACvF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAK3C,CAAA;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAKrE;AAYD,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAE1I;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAEzI;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;CACpD;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,EAAE,CAuBlE;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAO1D"}
package/dist/tide.js ADDED
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The tide cockpit from the terminal, starting with an episode's companion
3
+ * seat (jgwill/Miadi#714, in P4 of jgwill/Miadi#706).
4
+ *
5
+ * `POST /api/tide/companion` runs `tide companion open --format json`. Without
6
+ * `run` it answers the plan; with `run` it carries the plan out and answers the
7
+ * steps taken. The browser does what the cockpit's "Open Mia for this episode"
8
+ * does (`components/tide/companion-opener.tsx`): it always shows the plan
9
+ * first, and offers to run only the plan on screen, only when that plan would
10
+ * act, and only once the person confirms it. Archiving the existing session is
11
+ * the person's word, so it is a choice they make, and choosing it asks again.
12
+ *
13
+ * Opening a seat starts an agent with permissions bypassed in a tmux session,
14
+ * on the app's host. The browser never types into that pane: the command does,
15
+ * and it waits until the seat is idle.
16
+ */
17
+ import { ApiError } from "./api.js";
18
+ import { clean, cleanLine } from "./text.js";
19
+ /** The plans that do nothing, as the cockpit lists them: nothing is offered to run. */
20
+ export const NOTHING_TO_RUN = [
21
+ "re-arm: already listening",
22
+ "re-arm: another seat listens on this episode",
23
+ "re-arm: pane runs something else",
24
+ "archive refused: the seat still listens",
25
+ ];
26
+ /** A plan that would act: a state that is not a refusal or a no-op, and commands to carry out. */
27
+ export function planActs(answer) {
28
+ const state = answer?.plan?.state;
29
+ if (!state || answer?.plan?.run)
30
+ return false;
31
+ if (NOTHING_TO_RUN.includes(state) || state.startsWith("archive refused"))
32
+ return false;
33
+ return (answer.plan?.commands?.length ?? 0) > 0;
34
+ }
35
+ async function companion(api, body, timeoutMs) {
36
+ try {
37
+ return await api.post("/api/tide/companion", body, { timeoutMs });
38
+ }
39
+ catch (error) {
40
+ // A refusal (409), tide's controller gate (423) and a bad episode (400) still answer in JSON.
41
+ if (error instanceof ApiError && error.body && typeof error.body === "object")
42
+ return { ...error.body, status: error.status };
43
+ throw error;
44
+ }
45
+ }
46
+ /** The plan for an episode's companion seat. Acts on nothing. */
47
+ export function companionPlan(api, episode, options = {}) {
48
+ return companion(api, { episode, archive: options.archive === true, ...(options.seat ? { seat: options.seat } : {}) }, 60_000);
49
+ }
50
+ /** Carry the plan out. Opening a seat waits for its prompt and its listener: up to seven minutes. */
51
+ export function runCompanion(api, episode, options = {}) {
52
+ return companion(api, { episode, archive: options.archive === true, run: true, ...(options.seat ? { seat: options.seat } : {}) }, 450_000);
53
+ }
54
+ /** What the person reads before deciding: the session, the state, what would be done, or what was done. */
55
+ export function companionLines(answer) {
56
+ const lines = [];
57
+ if (answer.error)
58
+ lines.push({ text: cleanLine(answer.error), tone: "error" });
59
+ if (answer.message)
60
+ lines.push({ text: cleanLine(answer.message), tone: "error" });
61
+ const plan = answer.plan;
62
+ if (!plan)
63
+ return lines;
64
+ if (plan.session)
65
+ lines.push({ text: `session: ${cleanLine(plan.session)}` });
66
+ if (plan.state) {
67
+ const listener = plan.listener?.state ? ` · listener: ${cleanLine(plan.listener.state)}` : "";
68
+ // A listening seat reports its agent as `shell`, not idle (#714, F1).
69
+ const agent = plan.agent?.status ? ` · agent: ${cleanLine(plan.agent.status)}` : "";
70
+ lines.push({ text: `state: ${cleanLine(plan.state)}${listener}${agent}`, tone: "state" });
71
+ }
72
+ if (plan.archive_name)
73
+ lines.push({ text: `archives the running session as ${cleanLine(plan.archive_name)}`, tone: "warn" });
74
+ if (plan.run) {
75
+ for (const step of plan.run.steps ?? [])
76
+ lines.push({ text: `${cleanLine(step.at).slice(11, 19)} ${cleanLine(step.step)}`, tone: "step" });
77
+ for (const warning of plan.run.warnings ?? [])
78
+ lines.push({ text: `warning: ${cleanLine(warning)}`, tone: "warn" });
79
+ if (plan.session)
80
+ lines.push({ text: `tmux attach -t ${cleanLine(plan.session)}`, tone: "meta" });
81
+ return lines;
82
+ }
83
+ ;
84
+ (plan.commands ?? []).forEach((command, index) => lines.push({ text: `${index + 1}. ${cleanLine(command)}` }));
85
+ if (planActs(answer) && plan.starter_prompt)
86
+ lines.push({ text: `starter prompt: ${clean(plan.starter_prompt).replace(/\s+/g, " ").trim()}`, tone: "meta" });
87
+ return lines;
88
+ }
89
+ /** One line for the status bar once the plan ran. */
90
+ export function ranMessage(answer) {
91
+ const session = answer.plan?.session ? cleanLine(answer.plan.session) : "the seat";
92
+ if (answer.exitCode === 0)
93
+ return `Opened ${session}: tmux attach -t ${session}`;
94
+ if (answer.exitCode === 3)
95
+ return `Opened ${session}, with warnings.`;
96
+ if (answer.exitCode === 4)
97
+ return `tide refused: ${cleanLine(answer.plan?.state ?? answer.message ?? "see the plan")}`;
98
+ if (answer.exitCode === 2)
99
+ return "tide is not in controller mode on the app's host.";
100
+ return cleanLine(answer.error ?? answer.message ?? `tide answered ${answer.exitCode ?? answer.status ?? "nothing"}`);
101
+ }
102
+ //# sourceMappingURL=tide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tide.js","sourceRoot":"","sources":["../src/tide.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@miadi/chronicle-tui",
3
- "version": "0.6.0",
4
- "description": "Browse the Miadi Chronicle from a terminal and take part in its talking circles: list and filter every episode, search their text, read a vessel's files with their references as chips, open the room, the wheel or the vessel as clickable links or a QR code, answer attention, relate episodes, and speak, witness, keep the diary and close a ceremony as yourself. Every operation is an action in one registry, so writes join the same list later.",
3
+ "version": "0.7.0",
4
+ "description": "Browse the Miadi Chronicle from a terminal and take part in its talking circles: list and filter every episode, search their text, read a vessel's files with their references as chips, open the room, the wheel or the vessel as clickable links or a QR code, answer attention, relate episodes, attach inquiries, open an episode's companion seat, and speak, witness, keep the diary and close a ceremony as yourself. Every operation is an action in one registry, so writes join the same list later.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"