@gigaflow/gmux 0.15.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/CHANGELOG.md +654 -0
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/adapters/claude-code.d.ts +52 -0
- package/dist/adapters/claude-code.js +315 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +39 -0
- package/dist/adapters/codex.js +233 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/jsonl.d.ts +40 -0
- package/dist/adapters/jsonl.js +92 -0
- package/dist/adapters/jsonl.js.map +1 -0
- package/dist/adapters/registry.d.ts +11 -0
- package/dist/adapters/registry.js +21 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/types.d.ts +43 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli/border-client.d.ts +8 -0
- package/dist/cli/border-client.js +11 -0
- package/dist/cli/border-client.js.map +1 -0
- package/dist/cli/commands/__ask-cancel.d.ts +35 -0
- package/dist/cli/commands/__ask-cancel.js +91 -0
- package/dist/cli/commands/__ask-cancel.js.map +1 -0
- package/dist/cli/commands/__ask-refresh.d.ts +40 -0
- package/dist/cli/commands/__ask-refresh.js +54 -0
- package/dist/cli/commands/__ask-refresh.js.map +1 -0
- package/dist/cli/commands/__ask-run.d.ts +43 -0
- package/dist/cli/commands/__ask-run.js +126 -0
- package/dist/cli/commands/__ask-run.js.map +1 -0
- package/dist/cli/commands/__ask-send.d.ts +50 -0
- package/dist/cli/commands/__ask-send.js +138 -0
- package/dist/cli/commands/__ask-send.js.map +1 -0
- package/dist/cli/commands/__preview-card.d.ts +31 -0
- package/dist/cli/commands/__preview-card.js +72 -0
- package/dist/cli/commands/__preview-card.js.map +1 -0
- package/dist/cli/commands/ask.d.ts +50 -0
- package/dist/cli/commands/ask.js +240 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/auto.d.ts +12 -0
- package/dist/cli/commands/auto.js +28 -0
- package/dist/cli/commands/auto.js.map +1 -0
- package/dist/cli/commands/cockpit.d.ts +14 -0
- package/dist/cli/commands/cockpit.js +52 -0
- package/dist/cli/commands/cockpit.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +75 -0
- package/dist/cli/commands/daemon.js +258 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.js +159 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/grep.d.ts +2 -0
- package/dist/cli/commands/grep.js +52 -0
- package/dist/cli/commands/grep.js.map +1 -0
- package/dist/cli/commands/index-cmd.d.ts +2 -0
- package/dist/cli/commands/index-cmd.js +29 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/ls.d.ts +30 -0
- package/dist/cli/commands/ls.js +95 -0
- package/dist/cli/commands/ls.js.map +1 -0
- package/dist/cli/commands/overlay.d.ts +26 -0
- package/dist/cli/commands/overlay.js +216 -0
- package/dist/cli/commands/overlay.js.map +1 -0
- package/dist/cli/commands/pick.d.ts +59 -0
- package/dist/cli/commands/pick.js +254 -0
- package/dist/cli/commands/pick.js.map +1 -0
- package/dist/cli/commands/picker-rows.d.ts +17 -0
- package/dist/cli/commands/picker-rows.js +47 -0
- package/dist/cli/commands/picker-rows.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +25 -0
- package/dist/cli/commands/resume.js +88 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +13 -0
- package/dist/cli/commands/run.js +78 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +37 -0
- package/dist/cli/commands/setup.js +200 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/show.d.ts +2 -0
- package/dist/cli/commands/show.js +24 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/summarize.d.ts +2 -0
- package/dist/cli/commands/summarize.js +59 -0
- package/dist/cli/commands/summarize.js.map +1 -0
- package/dist/cli/commands/tmux.d.ts +11 -0
- package/dist/cli/commands/tmux.js +90 -0
- package/dist/cli/commands/tmux.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +2 -0
- package/dist/cli/commands/watch.js +76 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/format.d.ts +74 -0
- package/dist/cli/format.js +242 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/gmux-render.d.ts +11 -0
- package/dist/cli/gmux-render.js +60 -0
- package/dist/cli/gmux-render.js.map +1 -0
- package/dist/cli/main.d.ts +8 -0
- package/dist/cli/main.js +145 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/overlay-ask.d.ts +13 -0
- package/dist/cli/overlay-ask.js +32 -0
- package/dist/cli/overlay-ask.js.map +1 -0
- package/dist/cli/overlay.d.ts +26 -0
- package/dist/cli/overlay.js +149 -0
- package/dist/cli/overlay.js.map +1 -0
- package/dist/cli/picker.d.ts +308 -0
- package/dist/cli/picker.js +642 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/preview.d.ts +87 -0
- package/dist/cli/preview.js +292 -0
- package/dist/cli/preview.js.map +1 -0
- package/dist/cli/tmux-label.d.ts +50 -0
- package/dist/cli/tmux-label.js +146 -0
- package/dist/cli/tmux-label.js.map +1 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.js +91 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/fingerprint.d.ts +21 -0
- package/dist/core/fingerprint.js +59 -0
- package/dist/core/fingerprint.js.map +1 -0
- package/dist/core/gmux-types.d.ts +102 -0
- package/dist/core/gmux-types.js +13 -0
- package/dist/core/gmux-types.js.map +1 -0
- package/dist/core/pane-state.d.ts +5 -0
- package/dist/core/pane-state.js +15 -0
- package/dist/core/pane-state.js.map +1 -0
- package/dist/core/paths.d.ts +68 -0
- package/dist/core/paths.js +106 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/proc-tree.d.ts +9 -0
- package/dist/core/proc-tree.js +33 -0
- package/dist/core/proc-tree.js.map +1 -0
- package/dist/core/text.d.ts +34 -0
- package/dist/core/text.js +126 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/types.d.ts +322 -0
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -0
- package/dist/services/ask-transcript.d.ts +256 -0
- package/dist/services/ask-transcript.js +544 -0
- package/dist/services/ask-transcript.js.map +1 -0
- package/dist/services/ask.d.ts +54 -0
- package/dist/services/ask.js +161 -0
- package/dist/services/ask.js.map +1 -0
- package/dist/services/auto-summarize.d.ts +188 -0
- package/dist/services/auto-summarize.js +415 -0
- package/dist/services/auto-summarize.js.map +1 -0
- package/dist/services/concurrency.d.ts +2 -0
- package/dist/services/concurrency.js +16 -0
- package/dist/services/concurrency.js.map +1 -0
- package/dist/services/config.d.ts +131 -0
- package/dist/services/config.js +325 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/daemon-client.d.ts +9 -0
- package/dist/services/daemon-client.js +34 -0
- package/dist/services/daemon-client.js.map +1 -0
- package/dist/services/daemon-socket.d.ts +30 -0
- package/dist/services/daemon-socket.js +76 -0
- package/dist/services/daemon-socket.js.map +1 -0
- package/dist/services/daemon.d.ts +43 -0
- package/dist/services/daemon.js +106 -0
- package/dist/services/daemon.js.map +1 -0
- package/dist/services/distill.d.ts +39 -0
- package/dist/services/distill.js +93 -0
- package/dist/services/distill.js.map +1 -0
- package/dist/services/guardian.d.ts +26 -0
- package/dist/services/guardian.js +71 -0
- package/dist/services/guardian.js.map +1 -0
- package/dist/services/index-store.d.ts +36 -0
- package/dist/services/index-store.js +125 -0
- package/dist/services/index-store.js.map +1 -0
- package/dist/services/log-rotation.d.ts +3 -0
- package/dist/services/log-rotation.js +28 -0
- package/dist/services/log-rotation.js.map +1 -0
- package/dist/services/pane-links.d.ts +10 -0
- package/dist/services/pane-links.js +47 -0
- package/dist/services/pane-links.js.map +1 -0
- package/dist/services/pane-process.d.ts +95 -0
- package/dist/services/pane-process.js +183 -0
- package/dist/services/pane-process.js.map +1 -0
- package/dist/services/pane-registry.d.ts +24 -0
- package/dist/services/pane-registry.js +40 -0
- package/dist/services/pane-registry.js.map +1 -0
- package/dist/services/provider-process.d.ts +37 -0
- package/dist/services/provider-process.js +105 -0
- package/dist/services/provider-process.js.map +1 -0
- package/dist/services/providers.d.ts +76 -0
- package/dist/services/providers.js +104 -0
- package/dist/services/providers.js.map +1 -0
- package/dist/services/resolve.d.ts +3 -0
- package/dist/services/resolve.js +18 -0
- package/dist/services/resolve.js.map +1 -0
- package/dist/services/resources.d.ts +17 -0
- package/dist/services/resources.js +113 -0
- package/dist/services/resources.js.map +1 -0
- package/dist/services/search.d.ts +29 -0
- package/dist/services/search.js +135 -0
- package/dist/services/search.js.map +1 -0
- package/dist/services/semantic-gate.d.ts +13 -0
- package/dist/services/semantic-gate.js +23 -0
- package/dist/services/semantic-gate.js.map +1 -0
- package/dist/services/semantic.d.ts +113 -0
- package/dist/services/semantic.js +216 -0
- package/dist/services/semantic.js.map +1 -0
- package/dist/services/sensors.d.ts +92 -0
- package/dist/services/sensors.js +246 -0
- package/dist/services/sensors.js.map +1 -0
- package/dist/services/summarize.d.ts +84 -0
- package/dist/services/summarize.js +230 -0
- package/dist/services/summarize.js.map +1 -0
- package/dist/services/tmux-gateway.d.ts +17 -0
- package/dist/services/tmux-gateway.js +10 -0
- package/dist/services/tmux-gateway.js.map +1 -0
- package/dist/services/tmux-resolve.d.ts +54 -0
- package/dist/services/tmux-resolve.js +0 -0
- package/dist/services/tmux-resolve.js.map +1 -0
- package/dist/services/tmux.d.ts +32 -0
- package/dist/services/tmux.js +107 -0
- package/dist/services/tmux.js.map +1 -0
- package/dist/services/views.d.ts +7 -0
- package/dist/services/views.js +18 -0
- package/dist/services/views.js.map +1 -0
- package/dist/services/watch.d.ts +36 -0
- package/dist/services/watch.js +98 -0
- package/dist/services/watch.js.map +1 -0
- package/dist/services/workspace.d.ts +19 -0
- package/dist/services/workspace.js +88 -0
- package/dist/services/workspace.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../src/services/summarize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TmuxPane } from "../core/types.js";
|
|
2
|
+
export interface TmuxGateway {
|
|
3
|
+
listPanes(): Promise<TmuxPane[]>;
|
|
4
|
+
capture(paneId: string, lines?: number): Promise<string>;
|
|
5
|
+
startPipe(paneId: string, logPath: string): Promise<void>;
|
|
6
|
+
stopPipe(paneId: string): Promise<void>;
|
|
7
|
+
send(paneId: string, keys: string): Promise<void>;
|
|
8
|
+
setOption(paneId: string, name: string, value: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare class RealTmuxGateway implements TmuxGateway {
|
|
11
|
+
listPanes(): Promise<TmuxPane[]>;
|
|
12
|
+
capture(paneId: string, lines?: number): Promise<string>;
|
|
13
|
+
startPipe(paneId: string, logPath: string): Promise<void>;
|
|
14
|
+
stopPipe(paneId: string): Promise<void>;
|
|
15
|
+
send(paneId: string, keys: string): Promise<void>;
|
|
16
|
+
setOption(paneId: string, name: string, value: string): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { capturePane, listAllPanes, sendKeys, setPaneOption, startPipePane, stopPipePane } from "./tmux.js";
|
|
2
|
+
export class RealTmuxGateway {
|
|
3
|
+
listPanes() { return listAllPanes(); }
|
|
4
|
+
capture(paneId, lines) { return capturePane(paneId, lines); }
|
|
5
|
+
startPipe(paneId, logPath) { return startPipePane(paneId, logPath); }
|
|
6
|
+
stopPipe(paneId) { return stopPipePane(paneId); }
|
|
7
|
+
send(paneId, keys) { return sendKeys(paneId, keys); }
|
|
8
|
+
setOption(paneId, name, value) { return setPaneOption(paneId, name, value); }
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=tmux-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-gateway.js","sourceRoot":"","sources":["../../src/services/tmux-gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAW5G,MAAM,OAAO,eAAe;IAC1B,SAAS,KAA0B,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,MAAc,EAAE,KAAc,IAAqB,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/F,SAAS,CAAC,MAAc,EAAE,OAAe,IAAmB,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpG,QAAQ,CAAC,MAAc,IAAmB,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAc,EAAE,IAAY,IAAmB,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,KAAa,IAAmB,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;CACrH"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a live tmux pane to the session it is running. Hybrid: an exact `gmux run`
|
|
3
|
+
* link wins; otherwise the newest transcript in the pane's cwd, preferring the
|
|
4
|
+
* harness the foreground command points to. No match is a normal case (a plain
|
|
5
|
+
* shell), rendered as a placeholder — never an error.
|
|
6
|
+
*/
|
|
7
|
+
import type { HarnessId, PaneLink, SessionRecord, TmuxPane } from "../core/types.js";
|
|
8
|
+
import { type PaneProcessHint } from "./pane-process.js";
|
|
9
|
+
/** The harness a `pane_current_command` distinctively names, or null. */
|
|
10
|
+
export declare function harnessForCommand(command: string): HarnessId | null;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a pane to its session, best signal first:
|
|
13
|
+
*
|
|
14
|
+
* 1. an explicit `gmux run` / `gmux link` link,
|
|
15
|
+
* 2. the session id read off the agent process's argv (exact),
|
|
16
|
+
* 3. the newest session in the agent process's real cwd,
|
|
17
|
+
* 4. the newest session in the pane's own cwd (the shell's — weakest),
|
|
18
|
+
* 5. nothing.
|
|
19
|
+
*
|
|
20
|
+
* `hint` carries the process-derived signals (2–3); with it absent, resolution
|
|
21
|
+
* is the pre-process cwd heuristic, unchanged.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolvePaneToRecord(pane: TmuxPane, records: readonly SessionRecord[], links: readonly PaneLink[], hint?: PaneProcessHint): SessionRecord | null;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a set of panes together, so no two panes claim the same session.
|
|
26
|
+
*
|
|
27
|
+
* Exact matches (link or argv) go first and claim their session. The rest — fresh
|
|
28
|
+
* agents with no id on their command line — are grouped by the (cwd, harness) they
|
|
29
|
+
* match in, and each group is paired by PROCESS START ORDER: the oldest process
|
|
30
|
+
* takes the oldest-started session, and so on.
|
|
31
|
+
*
|
|
32
|
+
* Why start order and not pane-array order: when several panes share a cwd and
|
|
33
|
+
* none carries a session id, the only thing that ties a pane to *its* session is
|
|
34
|
+
* that the process and the session began together. Ordering by array position (or
|
|
35
|
+
* by updatedAt recency) let a summary jump to a pane that merely happened to be
|
|
36
|
+
* first in the list — and reshuffle whenever panes moved or a session updated.
|
|
37
|
+
* Process start time is stable and tied to the pane's real process, so the
|
|
38
|
+
* mapping now survives pane moves. Ordinal pairing (not absolute nearest) absorbs
|
|
39
|
+
* the minutes-level skew between process start and a session's first message.
|
|
40
|
+
*
|
|
41
|
+
* A group of one reduces to "newest in this cwd" — the prior behavior, unchanged.
|
|
42
|
+
* Pure over the panes, records, links, and per-pane hints.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolvePanesWithHints(panes: readonly TmuxPane[], records: readonly SessionRecord[], links: readonly PaneLink[], hints: readonly (PaneProcessHint | undefined)[]): ResolvedPane[];
|
|
45
|
+
export interface ResolvedPane {
|
|
46
|
+
pane: TmuxPane;
|
|
47
|
+
record: SessionRecord | null;
|
|
48
|
+
}
|
|
49
|
+
export declare function resolvePanes(panes: readonly TmuxPane[], records: readonly SessionRecord[], links: readonly PaneLink[]): ResolvedPane[];
|
|
50
|
+
/**
|
|
51
|
+
* Resolve panes using their live process trees — the exact path. Gathers each
|
|
52
|
+
* pane's process hint (argv session id + agent cwd) in parallel, then resolves.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolvePanesLive(panes: readonly TmuxPane[], records: readonly SessionRecord[], links: readonly PaneLink[]): Promise<ResolvedPane[]>;
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-resolve.js","sourceRoot":"","sources":["../../src/services/tmux-resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The narrow surface where gmux shells out to `tmux`. The parsers are pure
|
|
3
|
+
* (and tested); the two `run` wrappers are thin shells over documented tmux
|
|
4
|
+
* flags, guarded at the edges by the `gmux doctor` version check.
|
|
5
|
+
*/
|
|
6
|
+
import type { TmuxPane } from "../core/types.js";
|
|
7
|
+
/** Tab-separated so a cwd with spaces cannot be mis-split. */
|
|
8
|
+
export declare const PANE_FORMAT: string;
|
|
9
|
+
export declare function parsePaneLine(line: string): TmuxPane | null;
|
|
10
|
+
export declare function parsePanes(output: string): TmuxPane[];
|
|
11
|
+
export declare function listPanes(windowId: string): Promise<TmuxPane[]>;
|
|
12
|
+
/** Every pane in every window of the server. Throws if tmux isn't running. */
|
|
13
|
+
export declare function listAllPanes(): Promise<TmuxPane[]>;
|
|
14
|
+
export interface TmuxVersion {
|
|
15
|
+
raw: string;
|
|
16
|
+
major: number;
|
|
17
|
+
minor: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function parseTmuxVersion(raw: string): TmuxVersion | null;
|
|
20
|
+
/** display-popup landed in tmux 3.2. */
|
|
21
|
+
export declare function supportsDisplayPopup(version: TmuxVersion | null): boolean;
|
|
22
|
+
export declare function tmuxVersion(): Promise<TmuxVersion | null>;
|
|
23
|
+
/** Grab the visible buffer of a pane (last `lines` rows, default whole screen). */
|
|
24
|
+
export declare function capturePane(paneId: string, lines?: number): Promise<string>;
|
|
25
|
+
/** Start streaming a pane's output to a log file (append). */
|
|
26
|
+
export declare function startPipePane(paneId: string, logPath: string): Promise<void>;
|
|
27
|
+
/** Stop streaming a pane (toggle pipe-pane off). */
|
|
28
|
+
export declare function stopPipePane(paneId: string): Promise<void>;
|
|
29
|
+
/** Type literal keys into a pane. `-l` = literal, no key-name interpretation. */
|
|
30
|
+
export declare function sendKeys(paneId: string, keys: string): Promise<void>;
|
|
31
|
+
/** Set a per-pane option (e.g. `@gm_label`). */
|
|
32
|
+
export declare function setPaneOption(paneId: string, name: string, value: string): Promise<void>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The narrow surface where gmux shells out to `tmux`. The parsers are pure
|
|
3
|
+
* (and tested); the two `run` wrappers are thin shells over documented tmux
|
|
4
|
+
* flags, guarded at the edges by the `gmux doctor` version check.
|
|
5
|
+
*/
|
|
6
|
+
import { execFile } from "node:child_process";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
const run = promisify(execFile);
|
|
9
|
+
/**
|
|
10
|
+
* Cap every tmux call on the daemon tick path. A wedged child (a hung tmux
|
|
11
|
+
* server, a pane whose command blocks the socket) would otherwise stall the
|
|
12
|
+
* tick forever — the daemon's try/catch handles rejections but not hangs.
|
|
13
|
+
* `execFile`'s `timeout` kills the child and rejects, which the callers
|
|
14
|
+
* already tolerate.
|
|
15
|
+
*/
|
|
16
|
+
const TMUX_TIMEOUT_MS = 5000;
|
|
17
|
+
/** Tab-separated so a cwd with spaces cannot be mis-split. */
|
|
18
|
+
export const PANE_FORMAT = "#{pane_id}\t#{pane_left}\t#{pane_top}\t#{pane_width}\t#{pane_height}\t" +
|
|
19
|
+
"#{pane_current_path}\t#{pane_current_command}\t#{pane_pid}\t#{window_id}\t#{?pane_active,1,0}";
|
|
20
|
+
export function parsePaneLine(line) {
|
|
21
|
+
const fields = line.split("\t");
|
|
22
|
+
if (fields.length < 8)
|
|
23
|
+
return null;
|
|
24
|
+
const [paneId, left, top, width, height, cwd, command, pid] = fields;
|
|
25
|
+
const nums = [left, top, width, height, pid].map((n) => Number(n));
|
|
26
|
+
if (nums.some((n) => !Number.isFinite(n)))
|
|
27
|
+
return null;
|
|
28
|
+
const windowId = fields[8] && fields[8].length > 0 ? fields[8] : null;
|
|
29
|
+
const active = fields[9] === "1";
|
|
30
|
+
return {
|
|
31
|
+
paneId: paneId,
|
|
32
|
+
left: nums[0],
|
|
33
|
+
top: nums[1],
|
|
34
|
+
width: nums[2],
|
|
35
|
+
height: nums[3],
|
|
36
|
+
cwd: cwd,
|
|
37
|
+
command: command,
|
|
38
|
+
pid: nums[4],
|
|
39
|
+
windowId,
|
|
40
|
+
active,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function parsePanes(output) {
|
|
44
|
+
return output
|
|
45
|
+
.split("\n")
|
|
46
|
+
.map((line) => line.trimEnd())
|
|
47
|
+
.filter((line) => line.length > 0)
|
|
48
|
+
.map(parsePaneLine)
|
|
49
|
+
.filter((pane) => pane !== null);
|
|
50
|
+
}
|
|
51
|
+
export async function listPanes(windowId) {
|
|
52
|
+
const { stdout } = await run("tmux", ["list-panes", "-t", windowId, "-F", PANE_FORMAT], { timeout: TMUX_TIMEOUT_MS });
|
|
53
|
+
return parsePanes(stdout);
|
|
54
|
+
}
|
|
55
|
+
/** Every pane in every window of the server. Throws if tmux isn't running. */
|
|
56
|
+
export async function listAllPanes() {
|
|
57
|
+
const { stdout } = await run("tmux", ["list-panes", "-a", "-F", PANE_FORMAT], { timeout: TMUX_TIMEOUT_MS });
|
|
58
|
+
return parsePanes(stdout);
|
|
59
|
+
}
|
|
60
|
+
export function parseTmuxVersion(raw) {
|
|
61
|
+
const match = raw.match(/(\d+)\.(\d+)/);
|
|
62
|
+
if (!match)
|
|
63
|
+
return null;
|
|
64
|
+
return { raw: raw.trim(), major: Number(match[1]), minor: Number(match[2]) };
|
|
65
|
+
}
|
|
66
|
+
/** display-popup landed in tmux 3.2. */
|
|
67
|
+
export function supportsDisplayPopup(version) {
|
|
68
|
+
if (!version)
|
|
69
|
+
return false;
|
|
70
|
+
return version.major > 3 || (version.major === 3 && version.minor >= 2);
|
|
71
|
+
}
|
|
72
|
+
export async function tmuxVersion() {
|
|
73
|
+
try {
|
|
74
|
+
const { stdout } = await run("tmux", ["-V"]);
|
|
75
|
+
return parseTmuxVersion(stdout);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Single-quote a shell argument. `pipe-pane`'s command runs through the shell. */
|
|
82
|
+
const q = (s) => `'${s.replace(/'/g, "'\\''")}'`;
|
|
83
|
+
/** Grab the visible buffer of a pane (last `lines` rows, default whole screen). */
|
|
84
|
+
export async function capturePane(paneId, lines) {
|
|
85
|
+
const args = ["capture-pane", "-p", "-t", paneId];
|
|
86
|
+
if (lines !== undefined)
|
|
87
|
+
args.push("-S", `-${lines}`);
|
|
88
|
+
const { stdout } = await run("tmux", args, { timeout: TMUX_TIMEOUT_MS });
|
|
89
|
+
return stdout;
|
|
90
|
+
}
|
|
91
|
+
/** Start streaming a pane's output to a log file (append). */
|
|
92
|
+
export async function startPipePane(paneId, logPath) {
|
|
93
|
+
await run("tmux", ["pipe-pane", "-o", "-t", paneId, `cat >> ${q(logPath)}`], { timeout: TMUX_TIMEOUT_MS });
|
|
94
|
+
}
|
|
95
|
+
/** Stop streaming a pane (toggle pipe-pane off). */
|
|
96
|
+
export async function stopPipePane(paneId) {
|
|
97
|
+
await run("tmux", ["pipe-pane", "-t", paneId], { timeout: TMUX_TIMEOUT_MS });
|
|
98
|
+
}
|
|
99
|
+
/** Type literal keys into a pane. `-l` = literal, no key-name interpretation. */
|
|
100
|
+
export async function sendKeys(paneId, keys) {
|
|
101
|
+
await run("tmux", ["send-keys", "-t", paneId, "-l", keys], { timeout: TMUX_TIMEOUT_MS });
|
|
102
|
+
}
|
|
103
|
+
/** Set a per-pane option (e.g. `@gm_label`). */
|
|
104
|
+
export async function setPaneOption(paneId, name, value) {
|
|
105
|
+
await run("tmux", ["set-option", "-p", "-t", paneId, name, value], { timeout: TMUX_TIMEOUT_MS });
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=tmux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/services/tmux.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Pair session records with their cached summaries. */
|
|
2
|
+
import type { ListFilters, SessionRecord, SessionView } from "../core/types.js";
|
|
3
|
+
export declare function loadRecords(filters?: ListFilters): Promise<SessionRecord[]>;
|
|
4
|
+
/** Cache-only records (no re-scan) — a fast, slightly-stale read. See `cachedRecords`. */
|
|
5
|
+
export declare function loadCachedRecords(filters?: ListFilters): Promise<SessionRecord[]>;
|
|
6
|
+
export declare function attachSummaries(records: readonly SessionRecord[]): Promise<SessionView[]>;
|
|
7
|
+
export declare function loadViews(filters?: ListFilters): Promise<SessionView[]>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Pair session records with their cached summaries. */
|
|
2
|
+
import { cachedRecords, filterRecords, refreshIndex } from "./index-store.js";
|
|
3
|
+
import { readSummary } from "./summarize.js";
|
|
4
|
+
export async function loadRecords(filters = {}) {
|
|
5
|
+
const { records } = await refreshIndex();
|
|
6
|
+
return filterRecords(records, filters);
|
|
7
|
+
}
|
|
8
|
+
/** Cache-only records (no re-scan) — a fast, slightly-stale read. See `cachedRecords`. */
|
|
9
|
+
export async function loadCachedRecords(filters = {}) {
|
|
10
|
+
return filterRecords(await cachedRecords(), filters);
|
|
11
|
+
}
|
|
12
|
+
export async function attachSummaries(records) {
|
|
13
|
+
return Promise.all(records.map(async (record) => ({ record, summary: await readSummary(record) })));
|
|
14
|
+
}
|
|
15
|
+
export async function loadViews(filters = {}) {
|
|
16
|
+
return attachSummaries(await loadRecords(filters));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/services/views.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAGxD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAuB,EAAE;IACzD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,EAAE,CAAC;IACzC,OAAO,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAuB,EAAE;IAC/D,OAAO,aAAa,CAAC,MAAM,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAiC;IACrE,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAuB,EAAE;IACvD,OAAO,eAAe,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The lifecycle of gmux's background agent — the `gmux watch` service that
|
|
3
|
+
* keeps pane labels and summaries current.
|
|
4
|
+
*
|
|
5
|
+
* A single global instance, tracked by a PID file, in the same spirit as the
|
|
6
|
+
* auto-summarize lock: starting when one is already alive is a no-op; a stale PID
|
|
7
|
+
* (dead owner) is reclaimed. The loop itself lives in `cli` (it paints labels, a
|
|
8
|
+
* cli concern); this module owns only the start/stop/liveness plumbing so the
|
|
9
|
+
* layer rule holds.
|
|
10
|
+
*/
|
|
11
|
+
/** The hidden CLI command the detached worker runs. */
|
|
12
|
+
export declare const WATCH_WORKER_COMMAND = "__watch";
|
|
13
|
+
/** How often the watch loop repaints labels and re-checks divergence. */
|
|
14
|
+
export declare const WATCH_INTERVAL_MS: number;
|
|
15
|
+
export declare function watchPidPath(): string;
|
|
16
|
+
export interface WatchPid {
|
|
17
|
+
pid: number;
|
|
18
|
+
startedAt: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function readWatchPid(): Promise<WatchPid | null>;
|
|
21
|
+
/** Is this recorded watcher actually running? */
|
|
22
|
+
export declare function isWatchAlive(record: WatchPid | null): boolean;
|
|
23
|
+
export declare function writeWatchPid(pid: number, now?: Date): Promise<void>;
|
|
24
|
+
export declare function clearWatchPid(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Re-run this same CLI, detached, on the hidden watch worker command. Detached +
|
|
27
|
+
* ignored stdio + unref lets the toggle return at once while the loop lives on.
|
|
28
|
+
* `execArgv` is forwarded so it works under `tsx` as well as the built entry.
|
|
29
|
+
*/
|
|
30
|
+
export declare function spawnWatchWorker(): number | undefined;
|
|
31
|
+
export type StartWatchResult = "started" | "already-running" | "failed";
|
|
32
|
+
/** Start the watcher if one isn't already alive. Idempotent. */
|
|
33
|
+
export declare function startWatch(now?: Date, spawnWorker?: () => number | undefined): Promise<StartWatchResult>;
|
|
34
|
+
/** Stop the watcher. Returns whether a live one was signalled. */
|
|
35
|
+
export declare function stopWatch(): Promise<boolean>;
|
|
36
|
+
export declare function isWatchRunning(): Promise<boolean>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The lifecycle of gmux's background agent — the `gmux watch` service that
|
|
3
|
+
* keeps pane labels and summaries current.
|
|
4
|
+
*
|
|
5
|
+
* A single global instance, tracked by a PID file, in the same spirit as the
|
|
6
|
+
* auto-summarize lock: starting when one is already alive is a no-op; a stale PID
|
|
7
|
+
* (dead owner) is reclaimed. The loop itself lives in `cli` (it paints labels, a
|
|
8
|
+
* cli concern); this module owns only the start/stop/liveness plumbing so the
|
|
9
|
+
* layer rule holds.
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from "node:child_process";
|
|
12
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { cacheDir } from "../core/paths.js";
|
|
15
|
+
/** The hidden CLI command the detached worker runs. */
|
|
16
|
+
export const WATCH_WORKER_COMMAND = "__watch";
|
|
17
|
+
/** How often the watch loop repaints labels and re-checks divergence. */
|
|
18
|
+
export const WATCH_INTERVAL_MS = Number(process.env.GMUX_WATCH_INTERVAL_MS) || 3000;
|
|
19
|
+
export function watchPidPath() {
|
|
20
|
+
return join(cacheDir(), "watch.pid");
|
|
21
|
+
}
|
|
22
|
+
export async function readWatchPid() {
|
|
23
|
+
try {
|
|
24
|
+
const parsed = JSON.parse(await readFile(watchPidPath(), "utf8"));
|
|
25
|
+
return typeof parsed?.pid === "number" ? parsed : null;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function processAlive(pid) {
|
|
32
|
+
if (pid <= 0)
|
|
33
|
+
return false;
|
|
34
|
+
try {
|
|
35
|
+
process.kill(pid, 0);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return error.code === "EPERM";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Is this recorded watcher actually running? */
|
|
43
|
+
export function isWatchAlive(record) {
|
|
44
|
+
return record !== null && processAlive(record.pid);
|
|
45
|
+
}
|
|
46
|
+
export async function writeWatchPid(pid, now = new Date()) {
|
|
47
|
+
await mkdir(cacheDir(), { recursive: true });
|
|
48
|
+
await writeFile(watchPidPath(), JSON.stringify({ pid, startedAt: now.toISOString() }), "utf8");
|
|
49
|
+
}
|
|
50
|
+
export async function clearWatchPid() {
|
|
51
|
+
await rm(watchPidPath(), { force: true });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Re-run this same CLI, detached, on the hidden watch worker command. Detached +
|
|
55
|
+
* ignored stdio + unref lets the toggle return at once while the loop lives on.
|
|
56
|
+
* `execArgv` is forwarded so it works under `tsx` as well as the built entry.
|
|
57
|
+
*/
|
|
58
|
+
export function spawnWatchWorker() {
|
|
59
|
+
const entry = process.argv[1];
|
|
60
|
+
if (!entry)
|
|
61
|
+
return undefined;
|
|
62
|
+
const child = spawn(process.execPath, [...process.execArgv, entry, WATCH_WORKER_COMMAND], {
|
|
63
|
+
detached: true,
|
|
64
|
+
stdio: "ignore",
|
|
65
|
+
});
|
|
66
|
+
child.unref();
|
|
67
|
+
return child.pid;
|
|
68
|
+
}
|
|
69
|
+
/** Start the watcher if one isn't already alive. Idempotent. */
|
|
70
|
+
export async function startWatch(now = new Date(), spawnWorker = spawnWatchWorker) {
|
|
71
|
+
if (isWatchAlive(await readWatchPid()))
|
|
72
|
+
return "already-running";
|
|
73
|
+
await clearWatchPid(); // reclaim a stale record
|
|
74
|
+
const pid = spawnWorker();
|
|
75
|
+
if (pid === undefined)
|
|
76
|
+
return "failed";
|
|
77
|
+
await writeWatchPid(pid, now);
|
|
78
|
+
return "started";
|
|
79
|
+
}
|
|
80
|
+
/** Stop the watcher. Returns whether a live one was signalled. */
|
|
81
|
+
export async function stopWatch() {
|
|
82
|
+
const record = await readWatchPid();
|
|
83
|
+
await clearWatchPid(); // the loop also watches for this and exits
|
|
84
|
+
if (isWatchAlive(record)) {
|
|
85
|
+
try {
|
|
86
|
+
process.kill(record.pid, "SIGTERM");
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Already gone between the liveness check and the signal.
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
export async function isWatchRunning() {
|
|
96
|
+
return isWatchAlive(await readWatchPid());
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/services/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { GuardianLogEntry, HostPressure, PaneIdentity, PaneResources, PaneSemantics, PaneState, WorkspaceSnapshot } from "../core/gmux-types.js";
|
|
3
|
+
export declare class WorkspaceModel extends EventEmitter {
|
|
4
|
+
private entries;
|
|
5
|
+
private hostPressure;
|
|
6
|
+
private guardianLog;
|
|
7
|
+
private _version;
|
|
8
|
+
get version(): number;
|
|
9
|
+
private bump;
|
|
10
|
+
upsertIdentity(id: PaneIdentity): void;
|
|
11
|
+
applyState(paneId: string, state: PaneState, lastActivityTs: number, now: number): void;
|
|
12
|
+
applySemantics(paneId: string, semantics: PaneSemantics): void;
|
|
13
|
+
applyResources(paneId: string, resources: PaneResources): void;
|
|
14
|
+
setHostPressure(p: HostPressure): void;
|
|
15
|
+
logGuardian(entry: GuardianLogEntry): void;
|
|
16
|
+
markGone(paneId: string): void;
|
|
17
|
+
evictGone(): void;
|
|
18
|
+
snapshot(): WorkspaceSnapshot;
|
|
19
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
export class WorkspaceModel extends EventEmitter {
|
|
3
|
+
entries = new Map();
|
|
4
|
+
hostPressure = null;
|
|
5
|
+
guardianLog = [];
|
|
6
|
+
_version = 0;
|
|
7
|
+
get version() { return this._version; }
|
|
8
|
+
bump() { this._version += 1; this.emit("change"); }
|
|
9
|
+
upsertIdentity(id) {
|
|
10
|
+
const cur = this.entries.get(id.paneId);
|
|
11
|
+
if (cur) {
|
|
12
|
+
// Identity can drift (active flag, resolved harness); refresh it.
|
|
13
|
+
cur.identity = id;
|
|
14
|
+
cur.gone = false;
|
|
15
|
+
this.bump();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.entries.set(id.paneId, {
|
|
19
|
+
identity: id, state: "idle", semantics: null, resources: null, lastActivityTs: 0, ts: 0, gone: false,
|
|
20
|
+
});
|
|
21
|
+
this.bump();
|
|
22
|
+
}
|
|
23
|
+
applyState(paneId, state, lastActivityTs, now) {
|
|
24
|
+
const e = this.entries.get(paneId);
|
|
25
|
+
if (!e)
|
|
26
|
+
return;
|
|
27
|
+
if (e.state === state && e.lastActivityTs === lastActivityTs)
|
|
28
|
+
return; // no observable change
|
|
29
|
+
e.state = state;
|
|
30
|
+
e.lastActivityTs = lastActivityTs;
|
|
31
|
+
e.ts = now;
|
|
32
|
+
this.bump();
|
|
33
|
+
}
|
|
34
|
+
applySemantics(paneId, semantics) {
|
|
35
|
+
const e = this.entries.get(paneId);
|
|
36
|
+
if (!e)
|
|
37
|
+
return;
|
|
38
|
+
// Monotonicity guard: two concurrent label() jobs for one pane can resolve
|
|
39
|
+
// out of order, so a stale result must never clobber a fresher one. Ignore
|
|
40
|
+
// any write no newer than what we already hold — no apply, no version bump.
|
|
41
|
+
if (e.semantics && e.semantics.updatedAt >= semantics.updatedAt)
|
|
42
|
+
return;
|
|
43
|
+
e.semantics = semantics;
|
|
44
|
+
this.bump();
|
|
45
|
+
}
|
|
46
|
+
applyResources(paneId, resources) {
|
|
47
|
+
const e = this.entries.get(paneId);
|
|
48
|
+
if (!e)
|
|
49
|
+
return;
|
|
50
|
+
e.resources = resources;
|
|
51
|
+
this.bump();
|
|
52
|
+
}
|
|
53
|
+
setHostPressure(p) { this.hostPressure = p; this.bump(); }
|
|
54
|
+
logGuardian(entry) {
|
|
55
|
+
this.guardianLog.push(entry);
|
|
56
|
+
if (this.guardianLog.length > 50)
|
|
57
|
+
this.guardianLog = this.guardianLog.slice(-50);
|
|
58
|
+
this.bump();
|
|
59
|
+
}
|
|
60
|
+
markGone(paneId) {
|
|
61
|
+
const e = this.entries.get(paneId);
|
|
62
|
+
if (e && !e.gone) {
|
|
63
|
+
e.gone = true;
|
|
64
|
+
this.bump();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
evictGone() {
|
|
68
|
+
let changed = false;
|
|
69
|
+
for (const [id, e] of this.entries)
|
|
70
|
+
if (e.gone) {
|
|
71
|
+
this.entries.delete(id);
|
|
72
|
+
changed = true;
|
|
73
|
+
}
|
|
74
|
+
if (changed)
|
|
75
|
+
this.bump();
|
|
76
|
+
}
|
|
77
|
+
snapshot() {
|
|
78
|
+
const panes = [...this.entries.values()].filter((e) => !e.gone);
|
|
79
|
+
return {
|
|
80
|
+
version: this._version,
|
|
81
|
+
updatedAt: Math.max(0, ...panes.map((e) => e.ts)),
|
|
82
|
+
panes: panes.map((e) => ({ ...e })),
|
|
83
|
+
hostPressure: this.hostPressure ? { ...this.hostPressure } : null,
|
|
84
|
+
guardianLog: this.guardianLog.map((e) => ({ ...e })),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/services/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gigaflow/gmux",
|
|
3
|
+
"version": "0.15.0",
|
|
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
|
+
"keywords": [
|
|
6
|
+
"gmux",
|
|
7
|
+
"tmux",
|
|
8
|
+
"multiplexer",
|
|
9
|
+
"claude-code",
|
|
10
|
+
"codex",
|
|
11
|
+
"agent",
|
|
12
|
+
"sessions",
|
|
13
|
+
"cli",
|
|
14
|
+
"context-switching",
|
|
15
|
+
"harness"
|
|
16
|
+
],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"homepage": "https://github.com/GigaFlowAI/gmux#readme",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/GigaFlowAI/gmux.git"
|
|
23
|
+
},
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/GigaFlowAI/gmux/issues"
|
|
26
|
+
},
|
|
27
|
+
"bin": {
|
|
28
|
+
"gmux": "dist/cli/main.js"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE",
|
|
34
|
+
"CHANGELOG.md"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=20"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public",
|
|
41
|
+
"provenance": true
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -p tsconfig.build.json",
|
|
45
|
+
"dev": "tsx src/cli/main.ts",
|
|
46
|
+
"test": "npm run check:layers && vitest run",
|
|
47
|
+
"test:watch": "vitest",
|
|
48
|
+
"test:e2e": "npm run build && GMUX_E2E=1 vitest run tests/e2e",
|
|
49
|
+
"check:layers": "node scripts/check-layers.mjs",
|
|
50
|
+
"check:types": "tsc --noEmit",
|
|
51
|
+
"check": "npm run check:layers && npm run check:types && vitest run",
|
|
52
|
+
"prepack": "npm run build",
|
|
53
|
+
"prepublishOnly": "npm run check"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"commander": "^12.1.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^22.10.0",
|
|
60
|
+
"tsx": "^4.19.2",
|
|
61
|
+
"typescript": "^5.7.2",
|
|
62
|
+
"vitest": "^4.1.10"
|
|
63
|
+
}
|
|
64
|
+
}
|