@doist/twist-cli 2.21.1 → 2.21.3
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 +12 -0
- package/dist/__mocks__/chalk.d.ts +3 -0
- package/dist/__mocks__/chalk.d.ts.map +1 -0
- package/dist/__mocks__/chalk.js +8 -0
- package/dist/__mocks__/chalk.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +155 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/away.d.ts +3 -0
- package/dist/commands/away.d.ts.map +1 -0
- package/dist/commands/away.js +120 -0
- package/dist/commands/away.js.map +1 -0
- package/dist/commands/changelog.d.ts +8 -0
- package/dist/commands/changelog.d.ts.map +1 -0
- package/dist/commands/changelog.js +113 -0
- package/dist/commands/changelog.js.map +1 -0
- package/dist/commands/channel.d.ts +3 -0
- package/dist/commands/channel.d.ts.map +1 -0
- package/dist/commands/channel.js +53 -0
- package/dist/commands/channel.js.map +1 -0
- package/dist/commands/comment.d.ts +3 -0
- package/dist/commands/comment.d.ts.map +1 -0
- package/dist/commands/comment.js +99 -0
- package/dist/commands/comment.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +121 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/conversation.d.ts +3 -0
- package/dist/commands/conversation.d.ts.map +1 -0
- package/dist/commands/conversation.js +458 -0
- package/dist/commands/conversation.js.map +1 -0
- package/dist/commands/inbox.d.ts +3 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +127 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/msg.d.ts +3 -0
- package/dist/commands/msg.d.ts.map +1 -0
- package/dist/commands/msg.js +103 -0
- package/dist/commands/msg.js.map +1 -0
- package/dist/commands/react.d.ts +3 -0
- package/dist/commands/react.d.ts.map +1 -0
- package/dist/commands/react.js +102 -0
- package/dist/commands/react.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +160 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +119 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/thread/create.d.ts +7 -0
- package/dist/commands/thread/create.d.ts.map +1 -0
- package/dist/commands/thread/create.js +45 -0
- package/dist/commands/thread/create.js.map +1 -0
- package/dist/commands/thread/helpers.d.ts +10 -0
- package/dist/commands/thread/helpers.d.ts.map +1 -0
- package/dist/commands/thread/helpers.js +27 -0
- package/dist/commands/thread/helpers.js.map +1 -0
- package/dist/commands/thread/mutate.d.ts +5 -0
- package/dist/commands/thread/mutate.d.ts.map +1 -0
- package/dist/commands/thread/mutate.js +21 -0
- package/dist/commands/thread/mutate.js.map +1 -0
- package/dist/commands/thread/mute.d.ts +8 -0
- package/dist/commands/thread/mute.d.ts.map +1 -0
- package/dist/commands/thread/mute.js +58 -0
- package/dist/commands/thread/mute.js.map +1 -0
- package/dist/commands/thread/reply.d.ts +9 -0
- package/dist/commands/thread/reply.d.ts.map +1 -0
- package/dist/commands/thread/reply.js +68 -0
- package/dist/commands/thread/reply.js.map +1 -0
- package/dist/commands/thread/view.d.ts +9 -0
- package/dist/commands/thread/view.d.ts.map +1 -0
- package/dist/commands/thread/view.js +175 -0
- package/dist/commands/thread/view.js.map +1 -0
- package/dist/commands/thread.d.ts +3 -0
- package/dist/commands/thread.d.ts.map +1 -0
- package/dist/commands/thread.js +70 -0
- package/dist/commands/thread.js.map +1 -0
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +91 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +67 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/view.d.ts +3 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +63 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +48 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +133 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +20 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +229 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +21 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +183 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/completion.d.ts +31 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +173 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/config.d.ts +13 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +26 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dates.d.ts +3 -0
- package/dist/lib/dates.d.ts.map +1 -0
- package/dist/lib/dates.js +44 -0
- package/dist/lib/dates.js.map +1 -0
- package/dist/lib/input.d.ts +3 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +52 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/markdown.d.ts +2 -0
- package/dist/lib/markdown.d.ts.map +1 -0
- package/dist/lib/markdown.js +16 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/oauth-server.d.ts +13 -0
- package/dist/lib/oauth-server.d.ts.map +1 -0
- package/dist/lib/oauth-server.js +824 -0
- package/dist/lib/oauth-server.js.map +1 -0
- package/dist/lib/oauth.d.ts +31 -0
- package/dist/lib/oauth.d.ts.map +1 -0
- package/dist/lib/oauth.js +140 -0
- package/dist/lib/oauth.js.map +1 -0
- package/dist/lib/options.d.ts +17 -0
- package/dist/lib/options.d.ts.map +1 -0
- package/dist/lib/options.js +2 -0
- package/dist/lib/options.js.map +1 -0
- package/dist/lib/output.d.ts +25 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +128 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/permissions.d.ts +4 -0
- package/dist/lib/permissions.d.ts.map +1 -0
- package/dist/lib/permissions.js +35 -0
- package/dist/lib/permissions.js.map +1 -0
- package/dist/lib/pkce.d.ts +16 -0
- package/dist/lib/pkce.d.ts.map +1 -0
- package/dist/lib/pkce.js +35 -0
- package/dist/lib/pkce.js.map +1 -0
- package/dist/lib/progress.d.ts +29 -0
- package/dist/lib/progress.d.ts.map +1 -0
- package/dist/lib/progress.js +101 -0
- package/dist/lib/progress.js.map +1 -0
- package/dist/lib/public-channels.d.ts +5 -0
- package/dist/lib/public-channels.d.ts.map +1 -0
- package/dist/lib/public-channels.js +35 -0
- package/dist/lib/public-channels.js.map +1 -0
- package/dist/lib/refs.d.ts +37 -0
- package/dist/lib/refs.d.ts.map +1 -0
- package/dist/lib/refs.js +219 -0
- package/dist/lib/refs.js.map +1 -0
- package/dist/lib/search-api.d.ts +25 -0
- package/dist/lib/search-api.d.ts.map +1 -0
- package/dist/lib/search-api.js +85 -0
- package/dist/lib/search-api.js.map +1 -0
- package/dist/lib/secure-store.d.ts +11 -0
- package/dist/lib/secure-store.d.ts.map +1 -0
- package/dist/lib/secure-store.js +57 -0
- package/dist/lib/secure-store.js.map +1 -0
- package/dist/lib/skills/content.d.ts +5 -0
- package/dist/lib/skills/content.d.ts.map +1 -0
- package/dist/lib/skills/content.js +286 -0
- package/dist/lib/skills/content.js.map +1 -0
- package/dist/lib/skills/create-installer.d.ts +9 -0
- package/dist/lib/skills/create-installer.d.ts.map +1 -0
- package/dist/lib/skills/create-installer.js +60 -0
- package/dist/lib/skills/create-installer.js.map +1 -0
- package/dist/lib/skills/index.d.ts +7 -0
- package/dist/lib/skills/index.d.ts.map +1 -0
- package/dist/lib/skills/index.js +54 -0
- package/dist/lib/skills/index.js.map +1 -0
- package/dist/lib/skills/types.d.ts +30 -0
- package/dist/lib/skills/types.d.ts.map +1 -0
- package/dist/lib/skills/types.js +2 -0
- package/dist/lib/skills/types.js.map +1 -0
- package/dist/lib/skills/update-installed.d.ts +9 -0
- package/dist/lib/skills/update-installed.d.ts.map +1 -0
- package/dist/lib/skills/update-installed.js +20 -0
- package/dist/lib/skills/update-installed.js.map +1 -0
- package/dist/lib/spinner.d.ts +24 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +126 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/postinstall.d.ts +2 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +3 -0
- package/dist/postinstall.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set argChoices on an option without enabling Commander's built-in
|
|
3
|
+
* validation. The choices are surfaced for shell completions but the
|
|
4
|
+
* option still accepts any value at parse time.
|
|
5
|
+
*/
|
|
6
|
+
export function withUnvalidatedChoices(opt, values) {
|
|
7
|
+
opt.argChoices = values;
|
|
8
|
+
return opt;
|
|
9
|
+
}
|
|
10
|
+
export function withCaseInsensitiveChoices(opt, values) {
|
|
11
|
+
opt.choices(values);
|
|
12
|
+
// choices() sets parseArg internally. Assert so we catch upstream changes.
|
|
13
|
+
const original = opt.parseArg;
|
|
14
|
+
if (!original) {
|
|
15
|
+
throw new Error('Expected Commander choices() to set parseArg');
|
|
16
|
+
}
|
|
17
|
+
opt.parseArg = (arg, prev) => original(arg.toLowerCase(), prev);
|
|
18
|
+
return opt;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse COMP_LINE into words, stripping the binary name and the
|
|
22
|
+
* 'completion-server' token that tabtab injects.
|
|
23
|
+
*
|
|
24
|
+
* FIXME: This splits on whitespace and does not handle quoted arguments.
|
|
25
|
+
* This is acceptable for command/flag traversal. It can be improved once
|
|
26
|
+
* tabtab exposes shell-provided tokenized words.
|
|
27
|
+
*/
|
|
28
|
+
export function parseCompLine(compLine) {
|
|
29
|
+
const words = compLine.split(/\s+/).slice(1); // remove binary name (tw)
|
|
30
|
+
if (words[0] === 'completion-server')
|
|
31
|
+
words.shift();
|
|
32
|
+
return words;
|
|
33
|
+
}
|
|
34
|
+
/** Names to exclude from completion results (internal commands) */
|
|
35
|
+
const HIDDEN_COMMAND_NAMES = new Set(['completion-server']);
|
|
36
|
+
/**
|
|
37
|
+
* Check if a Commander Option expects a value argument (not a boolean flag).
|
|
38
|
+
*/
|
|
39
|
+
function optionExpectsValue(opt) {
|
|
40
|
+
// required means <value>, optional means [value] — both expect a value
|
|
41
|
+
return opt.required || opt.optional;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find an option by its long or short flag in a command.
|
|
45
|
+
*/
|
|
46
|
+
function findOption(cmd, flag) {
|
|
47
|
+
return cmd.options.find((o) => o.long === flag || o.short === flag);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get completions for the current command line context.
|
|
51
|
+
*
|
|
52
|
+
* @param program - The root Commander program with all commands registered
|
|
53
|
+
* @param words - The words on the command line (excluding the binary name)
|
|
54
|
+
* @param current - The current word being typed (may be empty string)
|
|
55
|
+
* @returns Array of completion items
|
|
56
|
+
*/
|
|
57
|
+
export function getCompletions(program, words, current) {
|
|
58
|
+
let activeCmd = program;
|
|
59
|
+
let seenDoubleDash = false;
|
|
60
|
+
const usedOptions = new Set();
|
|
61
|
+
// Walk the words to find the active command context
|
|
62
|
+
let i = 0;
|
|
63
|
+
while (i < words.length) {
|
|
64
|
+
const word = words[i];
|
|
65
|
+
// If we hit the current word (last position), stop walking
|
|
66
|
+
if (i === words.length - 1 && word === current) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
if (word === '--') {
|
|
70
|
+
seenDoubleDash = true;
|
|
71
|
+
i++;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!seenDoubleDash && word.startsWith('-')) {
|
|
75
|
+
// Handle --flag=value syntax
|
|
76
|
+
const eqIdx = word.indexOf('=');
|
|
77
|
+
const flag = eqIdx > 0 ? word.slice(0, eqIdx) : word;
|
|
78
|
+
usedOptions.add(flag);
|
|
79
|
+
// If this option expects a value and no = was used, consume the next word
|
|
80
|
+
if (eqIdx < 0) {
|
|
81
|
+
const opt = findOption(activeCmd, flag);
|
|
82
|
+
if (opt && optionExpectsValue(opt)) {
|
|
83
|
+
i++; // skip the value word
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
i++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Try to descend into a subcommand
|
|
90
|
+
const sub = activeCmd.commands.find((c) => c.name() === word || c.aliases().includes(word));
|
|
91
|
+
if (sub) {
|
|
92
|
+
activeCmd = sub;
|
|
93
|
+
usedOptions.clear();
|
|
94
|
+
}
|
|
95
|
+
i++;
|
|
96
|
+
}
|
|
97
|
+
// Check if previous word was an option expecting a value
|
|
98
|
+
if (words.length >= 2) {
|
|
99
|
+
const prevWord = words[words.length - 2];
|
|
100
|
+
if (prevWord?.startsWith('-') && prevWord !== '--') {
|
|
101
|
+
const eqIdx = prevWord.indexOf('=');
|
|
102
|
+
const flag = eqIdx > 0 ? prevWord.slice(0, eqIdx) : prevWord;
|
|
103
|
+
const opt = findOption(activeCmd, flag);
|
|
104
|
+
if (opt && optionExpectsValue(opt) && eqIdx < 0) {
|
|
105
|
+
const enumValues = opt.argChoices;
|
|
106
|
+
if (enumValues) {
|
|
107
|
+
return enumValues.filter((v) => v.startsWith(current)).map((v) => ({ name: v }));
|
|
108
|
+
}
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Handle --flag=<TAB> — suggest values after =
|
|
114
|
+
if (current.includes('=')) {
|
|
115
|
+
const eqIdx = current.indexOf('=');
|
|
116
|
+
const flag = current.slice(0, eqIdx);
|
|
117
|
+
const partial = current.slice(eqIdx + 1);
|
|
118
|
+
const opt = findOption(activeCmd, flag);
|
|
119
|
+
if (opt) {
|
|
120
|
+
const enumValues = opt.argChoices;
|
|
121
|
+
if (enumValues) {
|
|
122
|
+
return enumValues
|
|
123
|
+
.filter((v) => v.startsWith(partial))
|
|
124
|
+
.map((v) => ({ name: `${flag}=${v}` }));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
// After --, everything is positional — no more commands or options
|
|
130
|
+
if (seenDoubleDash) {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
// If current word starts with -, suggest options
|
|
134
|
+
if (current.startsWith('-')) {
|
|
135
|
+
return getOptionCompletions(activeCmd, current, usedOptions);
|
|
136
|
+
}
|
|
137
|
+
// Suggest subcommands, and if there are none, suggest options instead
|
|
138
|
+
const subcommands = getSubcommandCompletions(activeCmd, current);
|
|
139
|
+
if (subcommands.length > 0) {
|
|
140
|
+
return subcommands;
|
|
141
|
+
}
|
|
142
|
+
return getOptionCompletions(activeCmd, current, usedOptions);
|
|
143
|
+
}
|
|
144
|
+
function getSubcommandCompletions(cmd, prefix) {
|
|
145
|
+
return cmd.commands
|
|
146
|
+
.filter((c) => !c._hidden &&
|
|
147
|
+
!HIDDEN_COMMAND_NAMES.has(c.name()))
|
|
148
|
+
.filter((c) => c.name().startsWith(prefix))
|
|
149
|
+
.map((c) => ({
|
|
150
|
+
name: c.name(),
|
|
151
|
+
description: c.description(),
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
function getOptionCompletions(cmd, prefix, usedOptions) {
|
|
155
|
+
return cmd.options
|
|
156
|
+
.filter((o) => {
|
|
157
|
+
if (!o.long)
|
|
158
|
+
return false;
|
|
159
|
+
if (o.hidden)
|
|
160
|
+
return false;
|
|
161
|
+
// Exclude already-used options
|
|
162
|
+
if (usedOptions.has(o.long))
|
|
163
|
+
return false;
|
|
164
|
+
if (o.short && usedOptions.has(o.short))
|
|
165
|
+
return false;
|
|
166
|
+
return o.long.startsWith(prefix);
|
|
167
|
+
})
|
|
168
|
+
.map((o) => ({
|
|
169
|
+
name: o.long,
|
|
170
|
+
description: o.description,
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/lib/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type AuthMode = 'read-only' | 'read-write' | 'unknown';
|
|
2
|
+
export interface Config {
|
|
3
|
+
token?: string;
|
|
4
|
+
pendingSecureStoreClear?: boolean;
|
|
5
|
+
currentWorkspace?: number;
|
|
6
|
+
authMode?: AuthMode;
|
|
7
|
+
authScope?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function getConfig(): Promise<Config>;
|
|
10
|
+
export declare function setConfig(config: Config): Promise<void>;
|
|
11
|
+
export declare function updateConfig(updates: Partial<Config>): Promise<void>;
|
|
12
|
+
export declare function getConfigPath(): string;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAA;AAE7D,MAAM,WAAW,MAAM;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAOjD;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
const CONFIG_PATH = join(homedir(), '.config', 'twist-cli', 'config.json');
|
|
5
|
+
export async function getConfig() {
|
|
6
|
+
try {
|
|
7
|
+
const content = await readFile(CONFIG_PATH, 'utf-8');
|
|
8
|
+
return JSON.parse(content);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export async function setConfig(config) {
|
|
15
|
+
const dir = dirname(CONFIG_PATH);
|
|
16
|
+
await mkdir(dir, { recursive: true });
|
|
17
|
+
await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
18
|
+
}
|
|
19
|
+
export async function updateConfig(updates) {
|
|
20
|
+
const config = await getConfig();
|
|
21
|
+
await setConfig({ ...config, ...updates });
|
|
22
|
+
}
|
|
23
|
+
export function getConfigPath() {
|
|
24
|
+
return CONFIG_PATH;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;AAe1E,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAA;IACb,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAChC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAwB;IACvD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,MAAM,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,WAAW,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAiC9D;AAaD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGtD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const SECOND = 1000;
|
|
2
|
+
const MINUTE = 60 * SECOND;
|
|
3
|
+
const HOUR = 60 * MINUTE;
|
|
4
|
+
const DAY = 24 * HOUR;
|
|
5
|
+
export function formatRelativeDate(date) {
|
|
6
|
+
const d = typeof date === 'string' ? new Date(date) : date;
|
|
7
|
+
const now = new Date();
|
|
8
|
+
const diff = now.getTime() - d.getTime();
|
|
9
|
+
if (diff < 0) {
|
|
10
|
+
return formatAbsoluteDate(d);
|
|
11
|
+
}
|
|
12
|
+
if (diff < MINUTE) {
|
|
13
|
+
return 'just now';
|
|
14
|
+
}
|
|
15
|
+
if (diff < HOUR) {
|
|
16
|
+
const mins = Math.floor(diff / MINUTE);
|
|
17
|
+
return `${mins} minute${mins === 1 ? '' : 's'} ago`;
|
|
18
|
+
}
|
|
19
|
+
if (diff < DAY) {
|
|
20
|
+
const hours = Math.floor(diff / HOUR);
|
|
21
|
+
return `${hours} hour${hours === 1 ? '' : 's'} ago`;
|
|
22
|
+
}
|
|
23
|
+
if (diff < 2 * DAY) {
|
|
24
|
+
return 'yesterday';
|
|
25
|
+
}
|
|
26
|
+
if (diff < 7 * DAY) {
|
|
27
|
+
const days = Math.floor(diff / DAY);
|
|
28
|
+
return `${days} days ago`;
|
|
29
|
+
}
|
|
30
|
+
return formatAbsoluteDate(d);
|
|
31
|
+
}
|
|
32
|
+
function formatAbsoluteDate(date) {
|
|
33
|
+
const now = new Date();
|
|
34
|
+
const sameYear = date.getFullYear() === now.getFullYear();
|
|
35
|
+
if (sameYear) {
|
|
36
|
+
return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
|
37
|
+
}
|
|
38
|
+
return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });
|
|
39
|
+
}
|
|
40
|
+
export function parseDate(dateStr) {
|
|
41
|
+
const d = new Date(dateStr);
|
|
42
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=dates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,IAAI,CAAA;AACnB,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAA;AAC1B,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAA;AACxB,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA;AAErB,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IAClD,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;IAExC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACX,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;QAChB,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAA;QACtC,OAAO,GAAG,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IACvD,CAAC;IAED,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;QACrC,OAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IACvD,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;QACjB,OAAO,WAAW,CAAA;IACtB,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;QACnC,OAAO,GAAG,IAAI,WAAW,CAAA;IAC7B,CAAC;IAED,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAU;IAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAA;IAEzD,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACrC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgCzD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { readFile, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
export async function readStdin() {
|
|
6
|
+
if (process.stdin.isTTY) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
let data = '';
|
|
11
|
+
process.stdin.setEncoding('utf8');
|
|
12
|
+
process.stdin.on('data', (chunk) => {
|
|
13
|
+
data += chunk;
|
|
14
|
+
});
|
|
15
|
+
process.stdin.on('end', () => {
|
|
16
|
+
resolve(data.trim() || null);
|
|
17
|
+
});
|
|
18
|
+
process.stdin.on('error', () => {
|
|
19
|
+
resolve(null);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export async function openEditor() {
|
|
24
|
+
const editor = process.env.EDITOR || process.env.VISUAL || 'vi';
|
|
25
|
+
const tmpFile = join(tmpdir(), `twist-cli-${Date.now()}.md`);
|
|
26
|
+
await writeFile(tmpFile, '');
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
const child = spawn(editor, [tmpFile], {
|
|
29
|
+
stdio: 'inherit',
|
|
30
|
+
});
|
|
31
|
+
child.on('exit', async (code) => {
|
|
32
|
+
if (code !== 0) {
|
|
33
|
+
await unlink(tmpFile).catch(() => { });
|
|
34
|
+
resolve(null);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const content = await readFile(tmpFile, 'utf8');
|
|
39
|
+
await unlink(tmpFile).catch(() => { });
|
|
40
|
+
resolve(content.trim() || null);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
resolve(null);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
child.on('error', async () => {
|
|
47
|
+
await unlink(tmpFile).catch(() => { });
|
|
48
|
+
resolve(null);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,CAAA;QACjB,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAA;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAE5D,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;YACnC,KAAK,EAAE,SAAS;SACnB,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACrC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACb,OAAM;YACV,CAAC;YAED,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAC/C,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACrC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;YACnC,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACzB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACrC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQtD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { marked } from 'marked';
|
|
2
|
+
import { markedTerminal } from 'marked-terminal';
|
|
3
|
+
let initialized = false;
|
|
4
|
+
function preprocessMentions(content) {
|
|
5
|
+
return content.replace(/\[([^\]]+)\]\((twist-mention:\/\/\d+)\)/g, '[@$1]($2)');
|
|
6
|
+
}
|
|
7
|
+
export function renderMarkdown(content) {
|
|
8
|
+
if (!initialized) {
|
|
9
|
+
marked.use(markedTerminal());
|
|
10
|
+
initialized = true;
|
|
11
|
+
}
|
|
12
|
+
const processed = preprocessMentions(content);
|
|
13
|
+
const rendered = marked.parse(processed, { async: false });
|
|
14
|
+
return rendered.trimEnd();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,MAAM,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB,SAAS,kBAAkB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,0CAA0C,EAAE,WAAW,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,cAAc,EAAgC,CAAC,CAAA;QAC1D,WAAW,GAAG,IAAI,CAAA;IACtB,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAW,CAAA;IACpE,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const PORT = 8766;
|
|
2
|
+
export declare const OAUTH_REDIRECT_URI = "http://localhost:8766/callback";
|
|
3
|
+
interface CallbackResult {
|
|
4
|
+
code: string;
|
|
5
|
+
cleanup: () => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Start a local HTTP server to handle OAuth callback
|
|
9
|
+
* Returns a promise that resolves when the callback is received with valid state
|
|
10
|
+
*/
|
|
11
|
+
export declare function startCallbackServer(expectedState: string): Promise<CallbackResult>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=oauth-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI,OAAO,CAAA;AACxB,eAAO,MAAM,kBAAkB,mCAAmC,CAAA;AAKlE,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2DxF"}
|