@indianic/dialout 1.1.2 → 1.2.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 +420 -24
- package/bin/AGENTS.md +44 -0
- package/bin/devdash-agent.js +2 -0
- package/dist/ai-adapters/claude.d.ts +3 -0
- package/dist/ai-adapters/claude.d.ts.map +1 -0
- package/dist/ai-adapters/claude.js +98 -0
- package/dist/ai-adapters/claude.js.map +1 -0
- package/dist/ai-adapters/codex.d.ts +3 -0
- package/dist/ai-adapters/codex.d.ts.map +1 -0
- package/dist/ai-adapters/codex.js +147 -0
- package/dist/ai-adapters/codex.js.map +1 -0
- package/dist/ai-adapters/grok.d.ts +3 -0
- package/dist/ai-adapters/grok.d.ts.map +1 -0
- package/dist/ai-adapters/grok.js +164 -0
- package/dist/ai-adapters/grok.js.map +1 -0
- package/dist/ai-adapters/index.d.ts +5 -0
- package/dist/ai-adapters/index.d.ts.map +1 -0
- package/dist/ai-adapters/index.js +30 -0
- package/dist/ai-adapters/index.js.map +1 -0
- package/dist/ai-adapters/types.d.ts +3 -0
- package/dist/ai-adapters/types.d.ts.map +1 -0
- package/dist/ai-adapters/types.js +7 -0
- package/dist/ai-adapters/types.js.map +1 -0
- package/dist/ai-capabilities/claude.d.ts +4 -0
- package/dist/ai-capabilities/claude.d.ts.map +1 -0
- package/dist/ai-capabilities/claude.js +174 -0
- package/dist/ai-capabilities/claude.js.map +1 -0
- package/dist/ai-capabilities/describe.d.ts +2 -0
- package/dist/ai-capabilities/describe.d.ts.map +1 -0
- package/dist/ai-capabilities/describe.js +31 -0
- package/dist/ai-capabilities/describe.js.map +1 -0
- package/dist/ai-capabilities/fsdeps.d.ts +3 -0
- package/dist/ai-capabilities/fsdeps.d.ts.map +1 -0
- package/dist/ai-capabilities/fsdeps.js +71 -0
- package/dist/ai-capabilities/fsdeps.js.map +1 -0
- package/dist/ai-capabilities/grok.d.ts +5 -0
- package/dist/ai-capabilities/grok.d.ts.map +1 -0
- package/dist/ai-capabilities/grok.js +145 -0
- package/dist/ai-capabilities/grok.js.map +1 -0
- package/dist/ai-capabilities/index.d.ts +4 -0
- package/dist/ai-capabilities/index.d.ts.map +1 -0
- package/dist/ai-capabilities/index.js +94 -0
- package/dist/ai-capabilities/index.js.map +1 -0
- package/dist/ai-capabilities/redact.d.ts +2 -0
- package/dist/ai-capabilities/redact.d.ts.map +1 -0
- package/dist/ai-capabilities/redact.js +27 -0
- package/dist/ai-capabilities/redact.js.map +1 -0
- package/dist/ai-capabilities/types.d.ts +11 -0
- package/dist/ai-capabilities/types.d.ts.map +1 -0
- package/dist/ai-capabilities/types.js +3 -0
- package/dist/ai-capabilities/types.js.map +1 -0
- package/dist/ai-launch.d.ts +35 -0
- package/dist/ai-launch.d.ts.map +1 -0
- package/dist/ai-launch.js +211 -0
- package/dist/ai-launch.js.map +1 -0
- package/dist/ai-session-detector.d.ts +19 -0
- package/dist/ai-session-detector.d.ts.map +1 -0
- package/dist/ai-session-detector.js +79 -0
- package/dist/ai-session-detector.js.map +1 -0
- package/dist/ai-sessions.d.ts +36 -0
- package/dist/ai-sessions.d.ts.map +1 -0
- package/dist/ai-sessions.js +309 -0
- package/dist/ai-sessions.js.map +1 -0
- package/dist/ai-status.d.ts +6 -0
- package/dist/ai-status.d.ts.map +1 -0
- package/dist/ai-status.js +40 -0
- package/dist/ai-status.js.map +1 -0
- package/dist/ai-transcript-locator.d.ts +35 -0
- package/dist/ai-transcript-locator.d.ts.map +1 -0
- package/dist/ai-transcript-locator.js +268 -0
- package/dist/ai-transcript-locator.js.map +1 -0
- package/dist/ai-transcript-tail.d.ts +17 -0
- package/dist/ai-transcript-tail.d.ts.map +1 -0
- package/dist/ai-transcript-tail.js +120 -0
- package/dist/ai-transcript-tail.js.map +1 -0
- package/dist/checklist.d.ts +20 -0
- package/dist/checklist.d.ts.map +1 -0
- package/dist/checklist.js +51 -0
- package/dist/checklist.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1427 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-runner.d.ts +15 -0
- package/dist/command-runner.d.ts.map +1 -0
- package/dist/command-runner.js +84 -0
- package/dist/command-runner.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +152 -0
- package/dist/config.js.map +1 -0
- package/dist/cowork.d.ts +26 -0
- package/dist/cowork.d.ts.map +1 -0
- package/dist/cowork.js +370 -0
- package/dist/cowork.js.map +1 -0
- package/dist/fs-browser.d.ts +6 -0
- package/dist/fs-browser.d.ts.map +1 -0
- package/dist/fs-browser.js +61 -0
- package/dist/fs-browser.js.map +1 -0
- package/dist/has-command.d.ts +12 -0
- package/dist/has-command.d.ts.map +1 -0
- package/dist/has-command.js +24 -0
- package/dist/has-command.js.map +1 -0
- package/dist/heartbeat.d.ts +7 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +50 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/port-scanner.d.ts +4 -0
- package/dist/port-scanner.d.ts.map +1 -0
- package/dist/port-scanner.js +75 -0
- package/dist/port-scanner.js.map +1 -0
- package/dist/project-scanner.d.ts +15 -0
- package/dist/project-scanner.d.ts.map +1 -0
- package/dist/project-scanner.js +333 -0
- package/dist/project-scanner.js.map +1 -0
- package/dist/pty-manager.d.ts +28 -0
- package/dist/pty-manager.d.ts.map +1 -0
- package/dist/pty-manager.js +506 -0
- package/dist/pty-manager.js.map +1 -0
- package/dist/service-installer.d.ts +95 -0
- package/dist/service-installer.d.ts.map +1 -0
- package/dist/service-installer.js +911 -0
- package/dist/service-installer.js.map +1 -0
- package/dist/single-instance.d.ts +20 -0
- package/dist/single-instance.d.ts.map +1 -0
- package/dist/single-instance.js +151 -0
- package/dist/single-instance.js.map +1 -0
- package/dist/ssh-local-network.d.ts +26 -0
- package/dist/ssh-local-network.d.ts.map +1 -0
- package/dist/ssh-local-network.js +169 -0
- package/dist/ssh-local-network.js.map +1 -0
- package/dist/terminal-detect.d.ts +52 -0
- package/dist/terminal-detect.d.ts.map +1 -0
- package/dist/terminal-detect.js +147 -0
- package/dist/terminal-detect.js.map +1 -0
- package/dist/terminal-markers.d.ts +52 -0
- package/dist/terminal-markers.d.ts.map +1 -0
- package/dist/terminal-markers.js +174 -0
- package/dist/terminal-markers.js.map +1 -0
- package/dist/tmux-manager.d.ts +35 -0
- package/dist/tmux-manager.d.ts.map +1 -0
- package/dist/tmux-manager.js +274 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/update-check.d.ts +3 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +202 -0
- package/dist/update-check.js.map +1 -0
- package/dist/websocket.d.ts +8 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +472 -0
- package/dist/websocket.js.map +1 -0
- package/node_modules/@dialout/shared/README.md +16 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts +8 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/ai-chat-prefs.js +41 -0
- package/node_modules/@dialout/shared/dist/capabilities.d.ts +25 -0
- package/node_modules/@dialout/shared/dist/capabilities.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/capabilities.js +2 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.d.ts +33 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/chat-blocks.js +61 -0
- package/node_modules/@dialout/shared/dist/command-filter.d.ts +4 -0
- package/node_modules/@dialout/shared/dist/command-filter.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/command-filter.js +49 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts +6 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/composer-behaviour.js +24 -0
- package/node_modules/@dialout/shared/dist/events.d.ts +37 -0
- package/node_modules/@dialout/shared/dist/events.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/events.js +13 -0
- package/node_modules/@dialout/shared/dist/index.d.ts +21 -0
- package/node_modules/@dialout/shared/dist/index.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/index.js +37 -0
- package/node_modules/@dialout/shared/dist/kinds.d.ts +2 -0
- package/node_modules/@dialout/shared/dist/kinds.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/kinds.js +2 -0
- package/node_modules/@dialout/shared/dist/notify.d.ts +3 -0
- package/node_modules/@dialout/shared/dist/notify.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/notify.js +31 -0
- package/node_modules/@dialout/shared/dist/permission.d.ts +4 -0
- package/node_modules/@dialout/shared/dist/permission.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/permission.js +8 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.d.ts +3 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/scroll-pin.js +11 -0
- package/node_modules/@dialout/shared/dist/session.d.ts +19 -0
- package/node_modules/@dialout/shared/dist/session.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/session.js +6 -0
- package/node_modules/@dialout/shared/dist/terminal-name.d.ts +25 -0
- package/node_modules/@dialout/shared/dist/terminal-name.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/terminal-name.js +63 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.d.ts +9 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.d.ts.map +1 -0
- package/node_modules/@dialout/shared/dist/tool-appearance.js +30 -0
- package/node_modules/@dialout/shared/package.json +37 -0
- package/node_modules/@dialout/shared/src/ai-chat-prefs.test.ts +40 -0
- package/node_modules/@dialout/shared/src/ai-chat-prefs.ts +39 -0
- package/node_modules/@dialout/shared/src/capabilities.ts +30 -0
- package/node_modules/@dialout/shared/src/chat-blocks.test.ts +65 -0
- package/node_modules/@dialout/shared/src/chat-blocks.ts +79 -0
- package/node_modules/@dialout/shared/src/command-filter.test.ts +76 -0
- package/node_modules/@dialout/shared/src/command-filter.ts +45 -0
- package/node_modules/@dialout/shared/src/composer-behaviour.test.ts +31 -0
- package/node_modules/@dialout/shared/src/composer-behaviour.ts +22 -0
- package/node_modules/@dialout/shared/src/events.ts +27 -0
- package/node_modules/@dialout/shared/src/index.ts +32 -0
- package/node_modules/@dialout/shared/src/kinds.ts +5 -0
- package/node_modules/@dialout/shared/src/notify.test.ts +49 -0
- package/node_modules/@dialout/shared/src/notify.ts +30 -0
- package/node_modules/@dialout/shared/src/permission.ts +10 -0
- package/node_modules/@dialout/shared/src/scroll-pin.test.ts +23 -0
- package/node_modules/@dialout/shared/src/scroll-pin.ts +13 -0
- package/node_modules/@dialout/shared/src/session.ts +25 -0
- package/node_modules/@dialout/shared/src/terminal-name.ts +82 -0
- package/node_modules/@dialout/shared/src/tool-appearance.test.ts +41 -0
- package/node_modules/@dialout/shared/src/tool-appearance.ts +39 -0
- package/package.json +54 -14
- package/scripts/postinstall.js +79 -0
- package/scripts/prepack.js +45 -0
- package/bin/dialout.js +0 -13
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.grokTranscriptPath = grokTranscriptPath;
|
|
37
|
+
exports.claudeProjectDir = claudeProjectDir;
|
|
38
|
+
exports.defaultProcStartMs = defaultProcStartMs;
|
|
39
|
+
exports.pickNewest = pickNewest;
|
|
40
|
+
exports.grokTranscript = grokTranscript;
|
|
41
|
+
exports.locateTranscript = locateTranscript;
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
// Map a running agent process to the JSONL transcript it is writing.
|
|
46
|
+
//
|
|
47
|
+
// Two tiers, both measured on a real machine 2026-08-21:
|
|
48
|
+
// 1. lsof — some CLIs hold the transcript open for writing, which makes the
|
|
49
|
+
// mapping exact. Always try this first.
|
|
50
|
+
// 2. cwd + newest — Claude Code opens, appends and closes, so lsof finds
|
|
51
|
+
// nothing for it. Narrow by the process's true cwd and its
|
|
52
|
+
// CLAUDE_CONFIG_DIR (which is how two subscriptions on one machine stay
|
|
53
|
+
// apart), then take the newest file and VALIDATE it against the cwd
|
|
54
|
+
// recorded inside the transcript itself.
|
|
55
|
+
const TRANSCRIPT_RE = /\.jsonl$/;
|
|
56
|
+
const CANDIDATE_RE = /\/(projects|sessions)\/.*\.jsonl$/;
|
|
57
|
+
// Grok stores a DIRECTORY per session, not a file:
|
|
58
|
+
// ~/.grok/sessions/<encodeURIComponent(cwd)>/<session-uuid>/chat_history.jsonl
|
|
59
|
+
// The encoding is plain encodeURIComponent — verified against every session
|
|
60
|
+
// directory on a real machine (5/5 round-tripped exactly). Unlike Claude's
|
|
61
|
+
// replace-every-non-alphanumeric-with-dash scheme, this one is reversible,
|
|
62
|
+
// which is why the fallback below can decode a directory back to a cwd.
|
|
63
|
+
function grokTranscriptPath(home, cwd, sessionId) {
|
|
64
|
+
return `${home}/.grok/sessions/${encodeURIComponent(cwd)}/${sessionId}/chat_history.jsonl`;
|
|
65
|
+
}
|
|
66
|
+
// Claude Code escapes the absolute path by replacing every character that is
|
|
67
|
+
// not a letter or digit with '-', so the leading slash becomes a leading dash
|
|
68
|
+
// and dots go too: /Users/me/www/saava.indianic.in
|
|
69
|
+
// -> -Users-me-www-saava-indianic-in
|
|
70
|
+
//
|
|
71
|
+
// Derived by comparing 49 real project directories against the cwd recorded
|
|
72
|
+
// inside them. Replacing only '/' — the obvious first guess — was wrong for 10
|
|
73
|
+
// of those 49, every one of them a path containing a dot.
|
|
74
|
+
function claudeProjectDir(configHome, cwd) {
|
|
75
|
+
return `${configHome}/projects/${cwd.replace(/[^a-zA-Z0-9]/g, '-')}`;
|
|
76
|
+
}
|
|
77
|
+
// Wall-clock start time of a process, ms since epoch; 0 when unknown.
|
|
78
|
+
// `lstart` prints e.g. "Thu Aug 20 13:09:44 2026", which Date.parse handles.
|
|
79
|
+
function defaultProcStartMs(pid) {
|
|
80
|
+
try {
|
|
81
|
+
const out = (0, child_process_1.execFileSync)('ps', ['-o', 'lstart=', '-p', String(pid)], { timeout: 5000, stdio: 'pipe' }).toString().trim();
|
|
82
|
+
const parsed = Date.parse(out);
|
|
83
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function pickNewest(files) {
|
|
90
|
+
let best = null;
|
|
91
|
+
for (const f of files) {
|
|
92
|
+
if (!best || f.mtimeMs > best.mtimeMs)
|
|
93
|
+
best = f;
|
|
94
|
+
}
|
|
95
|
+
return best ? best.path : null;
|
|
96
|
+
}
|
|
97
|
+
function defaultWriteHandles(pid) {
|
|
98
|
+
try {
|
|
99
|
+
// -F n prints one 'n<path>' line per open file.
|
|
100
|
+
const out = (0, child_process_1.execFileSync)('lsof', ['-p', String(pid), '-F', 'n'], { timeout: 5000, stdio: 'pipe' }).toString();
|
|
101
|
+
return out.split('\n').filter((l) => l.startsWith('n')).map((l) => l.slice(1));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function defaultProcCwd(pid) {
|
|
108
|
+
try {
|
|
109
|
+
if (process.platform === 'linux')
|
|
110
|
+
return fs.readlinkSync(`/proc/${pid}/cwd`);
|
|
111
|
+
const out = (0, child_process_1.execFileSync)('lsof', ['-a', '-p', String(pid), '-d', 'cwd', '-F', 'n'], { timeout: 5000, stdio: 'pipe' }).toString();
|
|
112
|
+
const line = out.split('\n').find((l) => l.startsWith('n'));
|
|
113
|
+
return line ? line.slice(1) : '';
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return '';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function defaultProcEnv(pid) {
|
|
120
|
+
const env = {};
|
|
121
|
+
try {
|
|
122
|
+
const raw = process.platform === 'linux'
|
|
123
|
+
? fs.readFileSync(`/proc/${pid}/environ`, 'utf8').split('\0')
|
|
124
|
+
: (0, child_process_1.execFileSync)('ps', ['eww', '-p', String(pid), '-o', 'command='], { timeout: 5000, stdio: 'pipe' }).toString().split(' ');
|
|
125
|
+
for (const pair of raw) {
|
|
126
|
+
const eq = pair.indexOf('=');
|
|
127
|
+
if (eq > 0)
|
|
128
|
+
env[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch { /* env is a refinement, never required */ }
|
|
132
|
+
return env;
|
|
133
|
+
}
|
|
134
|
+
function defaultListJsonl(dir) {
|
|
135
|
+
try {
|
|
136
|
+
return fs.readdirSync(dir)
|
|
137
|
+
.filter((n) => TRANSCRIPT_RE.test(n))
|
|
138
|
+
.map((n) => ({ path: `${dir}/${n}`, mtimeMs: fs.statSync(`${dir}/${n}`).mtimeMs }));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Every distinct cwd the head of the transcript mentions. Plural because a
|
|
145
|
+
// session's cwd drifts when the user moves between a repo and its worktree;
|
|
146
|
+
// measured on 3 of 49 real transcripts. Matching only the first record would
|
|
147
|
+
// reject those as belonging to another session.
|
|
148
|
+
//
|
|
149
|
+
// Reads only the head of the file — these grow to megabytes and this runs on
|
|
150
|
+
// every poll.
|
|
151
|
+
function defaultTranscriptCwds(path) {
|
|
152
|
+
try {
|
|
153
|
+
const fd = fs.openSync(path, 'r');
|
|
154
|
+
const buf = Buffer.alloc(64 * 1024);
|
|
155
|
+
const read = fs.readSync(fd, buf, 0, buf.length, 0);
|
|
156
|
+
fs.closeSync(fd);
|
|
157
|
+
const found = new Set();
|
|
158
|
+
for (const line of buf.subarray(0, read).toString().split('\n')) {
|
|
159
|
+
if (!line.trim())
|
|
160
|
+
continue;
|
|
161
|
+
try {
|
|
162
|
+
const rec = JSON.parse(line);
|
|
163
|
+
if (typeof rec.cwd === 'string')
|
|
164
|
+
found.add(rec.cwd);
|
|
165
|
+
else if (typeof rec?.payload?.cwd === 'string')
|
|
166
|
+
found.add(rec.payload.cwd);
|
|
167
|
+
}
|
|
168
|
+
catch { /* a truncated final line is normal */ }
|
|
169
|
+
}
|
|
170
|
+
return Array.from(found);
|
|
171
|
+
}
|
|
172
|
+
catch { /* unreadable */ }
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
function defaultGrokSessions(home) {
|
|
176
|
+
try {
|
|
177
|
+
const raw = JSON.parse(fs.readFileSync(`${home}/.grok/active_sessions.json`, 'utf8'));
|
|
178
|
+
return Array.isArray(raw) ? raw : [];
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function defaultGrokNewest(cwdDir) {
|
|
185
|
+
try {
|
|
186
|
+
return fs.readdirSync(cwdDir)
|
|
187
|
+
.map((n) => `${cwdDir}/${n}/chat_history.jsonl`)
|
|
188
|
+
.filter((p) => fs.existsSync(p))
|
|
189
|
+
.map((p) => ({ path: p, mtimeMs: fs.statSync(p).mtimeMs }));
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Grok publishes its own pid -> session map at ~/.grok/active_sessions.json:
|
|
196
|
+
// [{ "session_id": "...", "pid": 39647, "cwd": "/abs/path", "opened_at": "..." }]
|
|
197
|
+
//
|
|
198
|
+
// That is strictly better than either generic tier. lsof works only while the
|
|
199
|
+
// CLI holds the file open, and the cwd+newest tier cannot tell two grok
|
|
200
|
+
// sessions in one folder apart — the exact collision that made one Claude pane
|
|
201
|
+
// show another's conversation. An explicit pid is not a heuristic, so try it
|
|
202
|
+
// first and only fall back when the map has no row for this process (a stale
|
|
203
|
+
// file, or a session grok has not registered yet).
|
|
204
|
+
function grokTranscript(pid, home, deps = {}) {
|
|
205
|
+
const sessions = (deps.grokSessions || defaultGrokSessions)(home);
|
|
206
|
+
const row = sessions.find((s) => s && s.pid === pid);
|
|
207
|
+
if (!row || !row.session_id || !row.cwd)
|
|
208
|
+
return null;
|
|
209
|
+
return grokTranscriptPath(home, row.cwd, row.session_id);
|
|
210
|
+
}
|
|
211
|
+
function locateTranscript(pid, kind, deps = {}) {
|
|
212
|
+
const writeHandles = deps.writeHandles || defaultWriteHandles;
|
|
213
|
+
const procCwd = deps.procCwd || defaultProcCwd;
|
|
214
|
+
const procEnv = deps.procEnv || defaultProcEnv;
|
|
215
|
+
const procStartMs = deps.procStartMs || defaultProcStartMs;
|
|
216
|
+
const listJsonl = deps.listJsonl || defaultListJsonl;
|
|
217
|
+
const transcriptCwds = deps.transcriptCwds || defaultTranscriptCwds;
|
|
218
|
+
const exclude = deps.exclude || new Set();
|
|
219
|
+
// Tier 0 — grok tells us outright which session a pid owns.
|
|
220
|
+
if (kind === 'grok') {
|
|
221
|
+
const home = procEnv(pid).HOME || os.homedir();
|
|
222
|
+
const exact = grokTranscript(pid, home, deps);
|
|
223
|
+
if (exact && !exclude.has(exact))
|
|
224
|
+
return exact;
|
|
225
|
+
}
|
|
226
|
+
// Tier 1 — exact.
|
|
227
|
+
const held = writeHandles(pid).find((p) => CANDIDATE_RE.test(p));
|
|
228
|
+
if (held)
|
|
229
|
+
return held;
|
|
230
|
+
// Tier 2 — narrow, then validate.
|
|
231
|
+
const cwd = procCwd(pid);
|
|
232
|
+
if (!cwd)
|
|
233
|
+
return null;
|
|
234
|
+
const env = procEnv(pid);
|
|
235
|
+
const home = env.HOME || os.homedir();
|
|
236
|
+
// Grok's transcripts sit one level deeper than the others and all share the
|
|
237
|
+
// name chat_history.jsonl, so listJsonl() — which lists *.jsonl in one
|
|
238
|
+
// directory — cannot see them at all. Walk its session dirs instead.
|
|
239
|
+
if (kind === 'grok') {
|
|
240
|
+
const grokNewest = deps.grokNewest || defaultGrokNewest;
|
|
241
|
+
const startedAtGrok = procStartMs(pid);
|
|
242
|
+
const found = grokNewest(`${home}/.grok/sessions/${encodeURIComponent(cwd)}`)
|
|
243
|
+
.filter((f) => !exclude.has(f.path))
|
|
244
|
+
.filter((f) => !startedAtGrok || f.mtimeMs >= startedAtGrok);
|
|
245
|
+
return pickNewest(found);
|
|
246
|
+
}
|
|
247
|
+
const dir = kind === 'claude'
|
|
248
|
+
? claudeProjectDir(env.CLAUDE_CONFIG_DIR || `${home}/.claude`, cwd)
|
|
249
|
+
: `${env.CODEX_HOME || `${home}/.codex`}/sessions`;
|
|
250
|
+
// Every live session writes to its transcript at startup, so a file last
|
|
251
|
+
// touched before this process launched belongs to a session that has ended.
|
|
252
|
+
// startedAt of 0 means `ps` failed and the filter is skipped rather than
|
|
253
|
+
// hiding every session.
|
|
254
|
+
const startedAt = procStartMs(pid);
|
|
255
|
+
const candidates = listJsonl(dir)
|
|
256
|
+
.filter((f) => !exclude.has(f.path))
|
|
257
|
+
.filter((f) => !startedAt || f.mtimeMs >= startedAt);
|
|
258
|
+
const candidate = pickNewest(candidates);
|
|
259
|
+
if (!candidate)
|
|
260
|
+
return null;
|
|
261
|
+
const recorded = transcriptCwds(candidate);
|
|
262
|
+
// A transcript that names no directory we recognise belongs to another
|
|
263
|
+
// session; attaching to it would show the user someone else's conversation.
|
|
264
|
+
if (recorded.length && !recorded.includes(cwd))
|
|
265
|
+
return null;
|
|
266
|
+
return candidate;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=ai-transcript-locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-transcript-locator.js","sourceRoot":"","sources":["../src/ai-transcript-locator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function splitRecords(buffer: string): {
|
|
2
|
+
records: unknown[];
|
|
3
|
+
rest: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class TranscriptTail {
|
|
6
|
+
private readonly path;
|
|
7
|
+
private readonly onRecords;
|
|
8
|
+
private position;
|
|
9
|
+
private partial;
|
|
10
|
+
private timer;
|
|
11
|
+
lastGrowthMs: number;
|
|
12
|
+
constructor(path: string, onRecords: (records: unknown[]) => void);
|
|
13
|
+
start(): void;
|
|
14
|
+
stop(): void;
|
|
15
|
+
pump(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ai-transcript-tail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-transcript-tail.d.ts","sourceRoot":"","sources":["../src/ai-transcript-tail.ts"],"names":[],"mappings":"AASA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAcjF;AAED,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,KAAK,CAA+B;IAC5C,YAAY,SAAK;gBAGE,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI;IAG1D,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;CAgCb"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TranscriptTail = void 0;
|
|
37
|
+
exports.splitRecords = splitRecords;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
// Vendor-neutral JSONL follower. It has no idea what a message is; it hands
|
|
40
|
+
// raw records to an adapter. Polled rather than fs.watch-driven: watch is
|
|
41
|
+
// unreliable on network and virtualised filesystems, and a 1 s stat is cheap.
|
|
42
|
+
const POLL_MS = 1000;
|
|
43
|
+
const MAX_CHUNK = 4 << 20; // never read more than 4 MB in one pass
|
|
44
|
+
function splitRecords(buffer) {
|
|
45
|
+
const records = [];
|
|
46
|
+
const lines = buffer.split('\n');
|
|
47
|
+
const rest = lines.pop() ?? '';
|
|
48
|
+
for (const line of lines) {
|
|
49
|
+
if (!line.trim())
|
|
50
|
+
continue;
|
|
51
|
+
try {
|
|
52
|
+
records.push(JSON.parse(line));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// A vendor format change, or a line caught mid-write. Skip it; the
|
|
56
|
+
// feature must degrade, never die.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { records, rest };
|
|
60
|
+
}
|
|
61
|
+
class TranscriptTail {
|
|
62
|
+
path;
|
|
63
|
+
onRecords;
|
|
64
|
+
position = 0;
|
|
65
|
+
partial = '';
|
|
66
|
+
timer = null;
|
|
67
|
+
lastGrowthMs = 0;
|
|
68
|
+
constructor(path, onRecords) {
|
|
69
|
+
this.path = path;
|
|
70
|
+
this.onRecords = onRecords;
|
|
71
|
+
}
|
|
72
|
+
start() {
|
|
73
|
+
this.stop();
|
|
74
|
+
this.timer = setInterval(() => this.pump(), POLL_MS);
|
|
75
|
+
this.pump();
|
|
76
|
+
}
|
|
77
|
+
stop() {
|
|
78
|
+
if (this.timer) {
|
|
79
|
+
clearInterval(this.timer);
|
|
80
|
+
this.timer = null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Read from position to EOF. Public so an initial replay can be forced.
|
|
84
|
+
pump() {
|
|
85
|
+
let size;
|
|
86
|
+
try {
|
|
87
|
+
size = fs.statSync(this.path).size;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return; // rotated away or not created yet; try again next tick
|
|
91
|
+
}
|
|
92
|
+
if (size < this.position) {
|
|
93
|
+
// Truncated or replaced. Anything else would emit garbage from the
|
|
94
|
+
// middle of a line.
|
|
95
|
+
this.position = 0;
|
|
96
|
+
this.partial = '';
|
|
97
|
+
}
|
|
98
|
+
if (size === this.position)
|
|
99
|
+
return;
|
|
100
|
+
const length = Math.min(size - this.position, MAX_CHUNK);
|
|
101
|
+
const buf = Buffer.alloc(length);
|
|
102
|
+
let read = 0;
|
|
103
|
+
try {
|
|
104
|
+
const fd = fs.openSync(this.path, 'r');
|
|
105
|
+
read = fs.readSync(fd, buf, 0, length, this.position);
|
|
106
|
+
fs.closeSync(fd);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.position += read;
|
|
112
|
+
this.lastGrowthMs = Date.now();
|
|
113
|
+
const { records, rest } = splitRecords(this.partial + buf.subarray(0, read).toString());
|
|
114
|
+
this.partial = rest;
|
|
115
|
+
if (records.length)
|
|
116
|
+
this.onRecords(records);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.TranscriptTail = TranscriptTail;
|
|
120
|
+
//# sourceMappingURL=ai-transcript-tail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-transcript-tail.js","sourceRoot":"","sources":["../src/ai-transcript-tail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface ChecklistItem {
|
|
2
|
+
/** Display name, e.g. "Hyper". */
|
|
3
|
+
label: string;
|
|
4
|
+
/** Canonical token stored in config and matched at runtime. */
|
|
5
|
+
token: string;
|
|
6
|
+
/** Optional parenthetical, e.g. "not installed" / "this terminal". */
|
|
7
|
+
hint?: string;
|
|
8
|
+
checked: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ChecklistState {
|
|
11
|
+
items: ChecklistItem[];
|
|
12
|
+
cursor: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function clampCursor(len: number, cursor: number): number;
|
|
15
|
+
export declare function moveCursor(state: ChecklistState, delta: number): ChecklistState;
|
|
16
|
+
export declare function toggleAt(state: ChecklistState, index?: number): ChecklistState;
|
|
17
|
+
export declare function toggleAll(state: ChecklistState): ChecklistState;
|
|
18
|
+
export declare function selectedTokens(state: ChecklistState): string[];
|
|
19
|
+
export declare function renderChecklist(state: ChecklistState): string;
|
|
20
|
+
//# sourceMappingURL=checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.d.ts","sourceRoot":"","sources":["../src/checklist.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAE/E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAK9E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAI/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAE9D;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAS7D"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure state + rendering for the interactive terminal-app multi-select used by
|
|
3
|
+
// `setup-cowork`. All functions are immutable (return new state) so the
|
|
4
|
+
// raw-mode driver in cli.ts stays a thin keypress→state→redraw loop.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.clampCursor = clampCursor;
|
|
7
|
+
exports.moveCursor = moveCursor;
|
|
8
|
+
exports.toggleAt = toggleAt;
|
|
9
|
+
exports.toggleAll = toggleAll;
|
|
10
|
+
exports.selectedTokens = selectedTokens;
|
|
11
|
+
exports.renderChecklist = renderChecklist;
|
|
12
|
+
function clampCursor(len, cursor) {
|
|
13
|
+
if (len <= 0)
|
|
14
|
+
return 0;
|
|
15
|
+
if (cursor < 0)
|
|
16
|
+
return 0;
|
|
17
|
+
if (cursor > len - 1)
|
|
18
|
+
return len - 1;
|
|
19
|
+
return cursor;
|
|
20
|
+
}
|
|
21
|
+
function moveCursor(state, delta) {
|
|
22
|
+
return { ...state, cursor: clampCursor(state.items.length, state.cursor + delta) };
|
|
23
|
+
}
|
|
24
|
+
function toggleAt(state, index) {
|
|
25
|
+
const i = index ?? state.cursor;
|
|
26
|
+
if (i < 0 || i >= state.items.length)
|
|
27
|
+
return state;
|
|
28
|
+
const items = state.items.map((it, idx) => (idx === i ? { ...it, checked: !it.checked } : it));
|
|
29
|
+
return { ...state, items };
|
|
30
|
+
}
|
|
31
|
+
function toggleAll(state) {
|
|
32
|
+
const allChecked = state.items.length > 0 && state.items.every((it) => it.checked);
|
|
33
|
+
const items = state.items.map((it) => ({ ...it, checked: !allChecked }));
|
|
34
|
+
return { ...state, items };
|
|
35
|
+
}
|
|
36
|
+
function selectedTokens(state) {
|
|
37
|
+
return state.items.filter((it) => it.checked).map((it) => it.token);
|
|
38
|
+
}
|
|
39
|
+
// One line per item: '› ' marks the cursor row (two spaces otherwise), then
|
|
40
|
+
// '[x]'/'[ ]', the label, and an optional '(hint)'.
|
|
41
|
+
function renderChecklist(state) {
|
|
42
|
+
return state.items
|
|
43
|
+
.map((it, i) => {
|
|
44
|
+
const pointer = i === state.cursor ? '›' : ' ';
|
|
45
|
+
const box = it.checked ? '[x]' : '[ ]';
|
|
46
|
+
const hint = it.hint ? ` (${it.hint})` : '';
|
|
47
|
+
return `${pointer} ${box} ${it.label}${hint}`;
|
|
48
|
+
})
|
|
49
|
+
.join('\n');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checklist.js","sourceRoot":"","sources":["../src/checklist.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,qEAAqE;;AAiBrE,kCAKC;AAED,gCAEC;AAED,4BAKC;AAED,8BAIC;AAED,wCAEC;AAID,0CASC;AAvCD,SAAgB,WAAW,CAAC,GAAW,EAAE,MAAc;IACrD,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;QAAE,OAAO,GAAG,GAAG,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAqB,EAAE,KAAa;IAC7D,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAqB,EAAE,KAAc;IAC5D,MAAM,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,SAAS,CAAC,KAAqB;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,cAAc,CAAC,KAAqB;IAClD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,4EAA4E;AAC5E,oDAAoD;AACpD,SAAgB,eAAe,CAAC,KAAqB;IACnD,OAAO,KAAK,CAAC,KAAK;SACf,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,OAAO,IAAI,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;IAChD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|