@gigaflow/gmux 0.15.0 → 0.16.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +110 -80
  2. package/README.md +81 -57
  3. package/dist/adapters/claude-code.js +5 -2
  4. package/dist/adapters/claude-code.js.map +1 -1
  5. package/dist/adapters/codex.js +5 -2
  6. package/dist/adapters/codex.js.map +1 -1
  7. package/dist/cli/border-client.d.ts +1 -1
  8. package/dist/cli/border-client.js +1 -1
  9. package/dist/cli/commands/cockpit.d.ts +16 -6
  10. package/dist/cli/commands/cockpit.js +288 -20
  11. package/dist/cli/commands/cockpit.js.map +1 -1
  12. package/dist/cli/commands/daemon.d.ts +2 -19
  13. package/dist/cli/commands/daemon.js +39 -88
  14. package/dist/cli/commands/daemon.js.map +1 -1
  15. package/dist/cli/commands/doctor.js +24 -0
  16. package/dist/cli/commands/doctor.js.map +1 -1
  17. package/dist/cli/commands/organize.d.ts +18 -0
  18. package/dist/cli/commands/organize.js +94 -0
  19. package/dist/cli/commands/organize.js.map +1 -0
  20. package/dist/cli/commands/setup.js +13 -1
  21. package/dist/cli/commands/setup.js.map +1 -1
  22. package/dist/cli/commands/tmux.d.ts +56 -0
  23. package/dist/cli/commands/tmux.js +158 -28
  24. package/dist/cli/commands/tmux.js.map +1 -1
  25. package/dist/cli/gmux-render.d.ts +12 -1
  26. package/dist/cli/gmux-render.js +18 -11
  27. package/dist/cli/gmux-render.js.map +1 -1
  28. package/dist/cli/main.js +2 -0
  29. package/dist/cli/main.js.map +1 -1
  30. package/dist/cli/organize-confirm.d.ts +45 -0
  31. package/dist/cli/organize-confirm.js +57 -0
  32. package/dist/cli/organize-confirm.js.map +1 -0
  33. package/dist/cli/overlay-ask.d.ts +3 -1
  34. package/dist/cli/overlay-ask.js +5 -3
  35. package/dist/cli/overlay-ask.js.map +1 -1
  36. package/dist/cli/tmux-label.d.ts +11 -4
  37. package/dist/cli/tmux-label.js +17 -6
  38. package/dist/cli/tmux-label.js.map +1 -1
  39. package/dist/cli/work-report.d.ts +18 -0
  40. package/dist/cli/work-report.js +50 -0
  41. package/dist/cli/work-report.js.map +1 -0
  42. package/dist/core/bytes.d.ts +6 -0
  43. package/dist/core/bytes.js +13 -0
  44. package/dist/core/bytes.js.map +1 -0
  45. package/dist/core/organize-types.d.ts +95 -0
  46. package/dist/core/organize-types.js +33 -0
  47. package/dist/core/organize-types.js.map +1 -0
  48. package/dist/core/paths.d.ts +13 -0
  49. package/dist/core/paths.js +20 -1
  50. package/dist/core/paths.js.map +1 -1
  51. package/dist/services/ask-router.d.ts +44 -0
  52. package/dist/services/ask-router.js +63 -0
  53. package/dist/services/ask-router.js.map +1 -0
  54. package/dist/services/daemon-lock.d.ts +31 -0
  55. package/dist/services/daemon-lock.js +77 -0
  56. package/dist/services/daemon-lock.js.map +1 -0
  57. package/dist/services/daemon.js +35 -6
  58. package/dist/services/daemon.js.map +1 -1
  59. package/dist/services/guardian.js +4 -4
  60. package/dist/services/guardian.js.map +1 -1
  61. package/dist/services/organize.d.ts +91 -0
  62. package/dist/services/organize.js +462 -0
  63. package/dist/services/organize.js.map +1 -0
  64. package/dist/services/tmux-gateway.d.ts +12 -0
  65. package/dist/services/tmux-gateway.js +7 -1
  66. package/dist/services/tmux-gateway.js.map +1 -1
  67. package/dist/services/tmux.d.ts +17 -1
  68. package/dist/services/tmux.js +34 -1
  69. package/dist/services/tmux.js.map +1 -1
  70. package/dist/services/work-view.d.ts +67 -0
  71. package/dist/services/work-view.js +155 -0
  72. package/dist/services/work-view.js.map +1 -0
  73. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Work views: the report layer that answers "what did this session actually
3
+ * DO?" as a small, self-contained HTML fragment a browser can render.
4
+ *
5
+ * Generation runs only on an explicit `v` press in the cockpit, never in the
6
+ * background — so the cache uses an exact source hash (regenerate on any real
7
+ * change), not the summary layer's divergence gate.
8
+ */
9
+ import type { HarnessId, SessionRecord, SummaryInput } from "../core/types.js";
10
+ /** Bump when `buildWorkViewPrompt` changes shape, to invalidate cached fragments. */
11
+ export declare const WORKVIEW_PROMPT_VERSION = 1;
12
+ export interface WorkView {
13
+ harness: HarnessId;
14
+ sessionId: string;
15
+ /** distill hash folded with the prompt version — the cache key. */
16
+ sourceHash: string;
17
+ generatedAt: string;
18
+ provider: string;
19
+ /** Validated, self-contained HTML fragment. */
20
+ html: string;
21
+ }
22
+ /** Cache key: session content (via distill) plus this layer's prompt version. */
23
+ export declare function workViewSourceHash(record: SessionRecord): string;
24
+ export declare function isStale(view: WorkView | null, record: SessionRecord): boolean;
25
+ export declare function readWorkView(record: SessionRecord): Promise<WorkView | null>;
26
+ export declare function writeWorkView(view: WorkView): Promise<void>;
27
+ /**
28
+ * Pull a usable HTML fragment out of a model reply. Strips a single ```html /
29
+ * ``` fence if present, and requires the body to contain at least one HTML tag —
30
+ * otherwise it is a refusal or prose, and this session fails (collected upstream).
31
+ */
32
+ export declare function extractFragment(raw: string): string;
33
+ /** The instruction handed to the provider for one session's work view. */
34
+ export declare function buildWorkViewPrompt(input: SummaryInput): string;
35
+ /** A prompt goes in, an HTML fragment (unvalidated) comes out. */
36
+ export interface WorkViewProvider {
37
+ readonly name: string;
38
+ isAvailable(): Promise<boolean>;
39
+ render(prompt: string): Promise<string>;
40
+ }
41
+ /** The default: the same CLI the summarizer uses (`claude -p` / GMUX_SUMMARY_CMD). */
42
+ export declare class CliWorkViewProvider implements WorkViewProvider {
43
+ readonly name: string;
44
+ private readonly argv;
45
+ constructor(argv?: string[]);
46
+ isAvailable(): Promise<boolean>;
47
+ render(prompt: string): Promise<string>;
48
+ }
49
+ /** The provider for the current config, or null when the user configured no model. */
50
+ export declare function defaultWorkViewProvider(): Promise<CliWorkViewProvider | null>;
51
+ export declare function generateWorkView(record: SessionRecord, provider: WorkViewProvider, now?: () => Date): Promise<WorkView>;
52
+ export interface BuildWorkViewsResult {
53
+ views: Map<string, WorkView>;
54
+ failed: {
55
+ sessionId: string;
56
+ reason: string;
57
+ }[];
58
+ }
59
+ /**
60
+ * Build a view per record, serving fresh ones from cache. One session's failure
61
+ * (provider error, non-HTML reply) is collected, never thrown: a single bad
62
+ * session must not blank the whole report.
63
+ */
64
+ export declare function buildWorkViews(records: readonly SessionRecord[], provider: WorkViewProvider, options?: {
65
+ force?: boolean;
66
+ onProgress?: (done: number, total: number) => void;
67
+ }): Promise<BuildWorkViewsResult>;
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Work views: the report layer that answers "what did this session actually
3
+ * DO?" as a small, self-contained HTML fragment a browser can render.
4
+ *
5
+ * Generation runs only on an explicit `v` press in the cockpit, never in the
6
+ * background — so the cache uses an exact source hash (regenerate on any real
7
+ * change), not the summary layer's divergence gate.
8
+ */
9
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
10
+ import { dirname } from "node:path";
11
+ import { hash } from "../core/text.js";
12
+ import { workViewPath } from "../core/paths.js";
13
+ import { SummaryProviderError } from "../core/errors.js";
14
+ import { FALLBACK_COMMAND, readConfig, resolveSummaryCommand } from "./config.js";
15
+ import { mapLimit } from "./concurrency.js";
16
+ import { runProviderCommand } from "./provider-process.js";
17
+ import { onPath } from "./providers.js";
18
+ import { distill } from "./distill.js";
19
+ /** Bump when `buildWorkViewPrompt` changes shape, to invalidate cached fragments. */
20
+ export const WORKVIEW_PROMPT_VERSION = 1;
21
+ /** Cache key: session content (via distill) plus this layer's prompt version. */
22
+ export function workViewSourceHash(record) {
23
+ return hash(JSON.stringify({ session: distill(record).hash, prompt: WORKVIEW_PROMPT_VERSION }));
24
+ }
25
+ export function isStale(view, record) {
26
+ return !view || view.sourceHash !== workViewSourceHash(record);
27
+ }
28
+ export async function readWorkView(record) {
29
+ try {
30
+ return JSON.parse(await readFile(workViewPath(record.harness, record.sessionId), "utf8"));
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ export async function writeWorkView(view) {
37
+ const path = workViewPath(view.harness, view.sessionId);
38
+ await mkdir(dirname(path), { recursive: true });
39
+ await writeFile(path, JSON.stringify(view), "utf8");
40
+ }
41
+ /**
42
+ * Pull a usable HTML fragment out of a model reply. Strips a single ```html /
43
+ * ``` fence if present, and requires the body to contain at least one HTML tag —
44
+ * otherwise it is a refusal or prose, and this session fails (collected upstream).
45
+ */
46
+ export function extractFragment(raw) {
47
+ let s = raw.trim();
48
+ const fenced = /^```[a-zA-Z]*\n([\s\S]*?)\n```$/.exec(s);
49
+ if (fenced)
50
+ s = fenced[1].trim();
51
+ if (!/<[a-zA-Z][\s\S]*>/.test(s))
52
+ throw new Error("model reply contained no HTML");
53
+ return s;
54
+ }
55
+ /** The instruction handed to the provider for one session's work view. */
56
+ export function buildWorkViewPrompt(input) {
57
+ const lines = [];
58
+ lines.push("You are visualizing a coding-agent session so a developer can re-orient on it at a glance.", "You are shown the ARC of the session: where it started, waypoints through the middle, and how it ended.", "", "## Session", `harness: ${input.harness}`);
59
+ if (input.project)
60
+ lines.push(`project: ${input.project}`);
61
+ if (input.gitBranch)
62
+ lines.push(`branch: ${input.gitBranch}`);
63
+ if (input.title)
64
+ lines.push(`title at start (may be stale): ${input.title}`);
65
+ lines.push(`ended mid-task: ${input.endedMidTask ? "yes" : "no"}`);
66
+ if (input.filesTouched.length > 0) {
67
+ lines.push("", "## Files the agent changed", ...input.filesTouched.map((f) => `- ${f}`));
68
+ }
69
+ const tail = new Set(input.recentUserPrompts);
70
+ const [anchor, ...waypoints] = input.arcPrompts;
71
+ if (anchor !== undefined && !tail.has(anchor))
72
+ lines.push("", "## The original ask", anchor);
73
+ const fresh = waypoints.filter((p) => !tail.has(p));
74
+ if (fresh.length > 0)
75
+ lines.push("", "## How the work moved (oldest first)", ...fresh.map((p) => `- ${p}`));
76
+ if (input.recentUserPrompts.length > 0) {
77
+ lines.push("", "## Most recent instructions (oldest first)", ...input.recentUserPrompts.map((p) => `- ${p}`));
78
+ }
79
+ if (input.lastAssistantText)
80
+ lines.push("", "## The agent's final message", input.lastAssistantText);
81
+ if (input.lastToolFailure)
82
+ lines.push("", "## The last failing command", input.lastToolFailure);
83
+ lines.push("", "## Output", "Reply with ONLY a self-contained HTML fragment that visualizes the ARC of this work —", "what was explored, built, tested, what landed, and what is still open — as a compact", "diagram: prefer inline <svg> for a flow/timeline, or styled inline HTML. Keep it small", "(aim for a handful of nodes). Constraints, strictly:", "- NO <script>, NO external references (no <script src>, no remote CSS, fonts, or <img>).", "- NO <html>, <head>, or <body> wrapper — emit the fragment only.", "- All styling inline or in a single <style> inside the fragment.", "Return the fragment and nothing else — no prose, no code fence.");
84
+ return lines.join("\n");
85
+ }
86
+ const PROVIDER_TIMEOUT_MS = 120_000;
87
+ const WORKVIEW_CONCURRENCY = Number(process.env["GMUX_WORKVIEW_CONCURRENCY"]) || 8;
88
+ /** The default: the same CLI the summarizer uses (`claude -p` / GMUX_SUMMARY_CMD). */
89
+ export class CliWorkViewProvider {
90
+ name;
91
+ argv;
92
+ constructor(argv = [...FALLBACK_COMMAND]) {
93
+ this.argv = argv;
94
+ this.name = argv.join(" ");
95
+ }
96
+ async isAvailable() {
97
+ const binary = this.argv[0];
98
+ return binary ? onPath(binary) : false;
99
+ }
100
+ async render(prompt) {
101
+ try {
102
+ return await runProviderCommand(this.argv, prompt, { timeoutMs: PROVIDER_TIMEOUT_MS });
103
+ }
104
+ catch (error) {
105
+ if (error instanceof SummaryProviderError)
106
+ throw error;
107
+ throw new SummaryProviderError(this.name, error.message);
108
+ }
109
+ }
110
+ }
111
+ /** The provider for the current config, or null when the user configured no model. */
112
+ export async function defaultWorkViewProvider() {
113
+ const command = resolveSummaryCommand(await readConfig());
114
+ return command ? new CliWorkViewProvider(command) : null;
115
+ }
116
+ export async function generateWorkView(record, provider, now = () => new Date()) {
117
+ const raw = await provider.render(buildWorkViewPrompt(distill(record)));
118
+ return {
119
+ harness: record.harness,
120
+ sessionId: record.sessionId,
121
+ sourceHash: workViewSourceHash(record),
122
+ generatedAt: now().toISOString(),
123
+ provider: provider.name,
124
+ html: extractFragment(raw),
125
+ };
126
+ }
127
+ /**
128
+ * Build a view per record, serving fresh ones from cache. One session's failure
129
+ * (provider error, non-HTML reply) is collected, never thrown: a single bad
130
+ * session must not blank the whole report.
131
+ */
132
+ export async function buildWorkViews(records, provider, options = {}) {
133
+ const views = new Map();
134
+ const failed = [];
135
+ let done = 0;
136
+ await mapLimit(records, WORKVIEW_CONCURRENCY, async (record) => {
137
+ try {
138
+ let view = options.force ? null : await readWorkView(record);
139
+ if (isStale(view, record)) {
140
+ view = await generateWorkView(record, provider);
141
+ await writeWorkView(view);
142
+ }
143
+ views.set(record.sessionId, view);
144
+ }
145
+ catch (error) {
146
+ failed.push({ sessionId: record.sessionId, reason: error.message });
147
+ }
148
+ finally {
149
+ done += 1;
150
+ options.onProgress?.(done, records.length);
151
+ }
152
+ });
153
+ return { views, failed };
154
+ }
155
+ //# sourceMappingURL=work-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-view.js","sourceRoot":"","sources":["../../src/services/work-view.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gigaflow/gmux",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "gmux — an LLM-native layer over your tmux workspace: browse, search and resume your AI coding agent sessions across Claude Code, Codex, and any other harness.",
5
5
  "keywords": [
6
6
  "gmux",