@mindfoldhq/trellis 0.6.0-beta.11 → 0.6.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/channel/context.d.ts +16 -0
- package/dist/commands/channel/context.d.ts.map +1 -0
- package/dist/commands/channel/context.js +83 -0
- package/dist/commands/channel/context.js.map +1 -0
- package/dist/commands/channel/create.d.ts +15 -8
- package/dist/commands/channel/create.d.ts.map +1 -1
- package/dist/commands/channel/create.js +26 -97
- package/dist/commands/channel/create.js.map +1 -1
- package/dist/commands/channel/index.d.ts.map +1 -1
- package/dist/commands/channel/index.js +195 -9
- package/dist/commands/channel/index.js.map +1 -1
- package/dist/commands/channel/kill.d.ts +1 -0
- package/dist/commands/channel/kill.d.ts.map +1 -1
- package/dist/commands/channel/kill.js +16 -13
- package/dist/commands/channel/kill.js.map +1 -1
- package/dist/commands/channel/list.d.ts +1 -0
- package/dist/commands/channel/list.d.ts.map +1 -1
- package/dist/commands/channel/list.js +27 -17
- package/dist/commands/channel/list.js.map +1 -1
- package/dist/commands/channel/messages.d.ts +3 -0
- package/dist/commands/channel/messages.d.ts.map +1 -1
- package/dist/commands/channel/messages.js +86 -58
- package/dist/commands/channel/messages.js.map +1 -1
- package/dist/commands/channel/rm.d.ts +2 -0
- package/dist/commands/channel/rm.d.ts.map +1 -1
- package/dist/commands/channel/rm.js +15 -5
- package/dist/commands/channel/rm.js.map +1 -1
- package/dist/commands/channel/run.js +1 -1
- package/dist/commands/channel/run.js.map +1 -1
- package/dist/commands/channel/send.d.ts +2 -0
- package/dist/commands/channel/send.d.ts.map +1 -1
- package/dist/commands/channel/send.js +18 -32
- package/dist/commands/channel/send.js.map +1 -1
- package/dist/commands/channel/spawn.d.ts +1 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -1
- package/dist/commands/channel/spawn.js +14 -11
- package/dist/commands/channel/spawn.js.map +1 -1
- package/dist/commands/channel/store/events.d.ts +33 -14
- package/dist/commands/channel/store/events.d.ts.map +1 -1
- package/dist/commands/channel/store/events.js +56 -33
- package/dist/commands/channel/store/events.js.map +1 -1
- package/dist/commands/channel/store/filter.d.ts +3 -0
- package/dist/commands/channel/store/filter.d.ts.map +1 -0
- package/dist/commands/channel/store/filter.js +2 -0
- package/dist/commands/channel/store/filter.js.map +1 -0
- package/dist/commands/channel/store/paths.d.ts +7 -0
- package/dist/commands/channel/store/paths.d.ts.map +1 -1
- package/dist/commands/channel/store/paths.js +76 -17
- package/dist/commands/channel/store/paths.js.map +1 -1
- package/dist/commands/channel/store/schema.d.ts +27 -0
- package/dist/commands/channel/store/schema.d.ts.map +1 -0
- package/dist/commands/channel/store/schema.js +34 -0
- package/dist/commands/channel/store/schema.js.map +1 -0
- package/dist/commands/channel/store/thread-state.d.ts +5 -0
- package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
- package/dist/commands/channel/store/thread-state.js +16 -0
- package/dist/commands/channel/store/thread-state.js.map +1 -0
- package/dist/commands/channel/store/watch.d.ts +4 -21
- package/dist/commands/channel/store/watch.d.ts.map +1 -1
- package/dist/commands/channel/store/watch.js +8 -54
- package/dist/commands/channel/store/watch.js.map +1 -1
- package/dist/commands/channel/supervisor.d.ts +1 -1
- package/dist/commands/channel/supervisor.d.ts.map +1 -1
- package/dist/commands/channel/supervisor.js +11 -10
- package/dist/commands/channel/supervisor.js.map +1 -1
- package/dist/commands/channel/text-body.d.ts +13 -0
- package/dist/commands/channel/text-body.d.ts.map +1 -0
- package/dist/commands/channel/text-body.js +47 -0
- package/dist/commands/channel/text-body.js.map +1 -0
- package/dist/commands/channel/threads.d.ts +39 -0
- package/dist/commands/channel/threads.d.ts.map +1 -0
- package/dist/commands/channel/threads.js +106 -0
- package/dist/commands/channel/threads.js.map +1 -0
- package/dist/commands/channel/title.d.ts +12 -0
- package/dist/commands/channel/title.d.ts.map +1 -0
- package/dist/commands/channel/title.js +24 -0
- package/dist/commands/channel/title.js.map +1 -0
- package/dist/commands/channel/wait.d.ts +3 -0
- package/dist/commands/channel/wait.d.ts.map +1 -1
- package/dist/commands/channel/wait.js +9 -8
- package/dist/commands/channel/wait.js.map +1 -1
- package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +127 -9
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +62 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +18 -0
- package/dist/utils/task-json.d.ts +9 -42
- package/dist/utils/task-json.d.ts.map +1 -1
- package/dist/utils/task-json.js +8 -45
- package/dist/utils/task-json.js.map +1 -1
- package/package.json +9 -8
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ContextMutateCliOptions {
|
|
2
|
+
as?: string;
|
|
3
|
+
scope?: string;
|
|
4
|
+
thread?: string;
|
|
5
|
+
file?: string[];
|
|
6
|
+
raw?: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface ContextListCliOptions {
|
|
9
|
+
scope?: string;
|
|
10
|
+
thread?: string;
|
|
11
|
+
raw?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function channelContextAdd(channelName: string, opts: ContextMutateCliOptions): Promise<void>;
|
|
14
|
+
export declare function channelContextDelete(channelName: string, opts: ContextMutateCliOptions): Promise<void>;
|
|
15
|
+
export declare function channelContextList(channelName: string, opts: ContextListCliOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/context.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { addChannelContext, addThreadContext, buildContextEntries, deleteChannelContext, deleteThreadContext, listChannelContext, listThreadContext, } from "@mindfoldhq/trellis-core/channel";
|
|
2
|
+
import { parseChannelScope } from "./store/schema.js";
|
|
3
|
+
export async function channelContextAdd(channelName, opts) {
|
|
4
|
+
const context = buildContextEntries(opts.file, opts.raw);
|
|
5
|
+
if (!context) {
|
|
6
|
+
throw new Error("Provide at least one --file <abs-path> or --raw <text>");
|
|
7
|
+
}
|
|
8
|
+
const scope = parseChannelScope(opts.scope);
|
|
9
|
+
const event = opts.thread
|
|
10
|
+
? await addThreadContext({
|
|
11
|
+
channel: channelName,
|
|
12
|
+
by: opts.as ?? "main",
|
|
13
|
+
thread: opts.thread,
|
|
14
|
+
context,
|
|
15
|
+
...(scope !== undefined ? { scope } : {}),
|
|
16
|
+
origin: "cli",
|
|
17
|
+
})
|
|
18
|
+
: await addChannelContext({
|
|
19
|
+
channel: channelName,
|
|
20
|
+
by: opts.as ?? "main",
|
|
21
|
+
context,
|
|
22
|
+
...(scope !== undefined ? { scope } : {}),
|
|
23
|
+
origin: "cli",
|
|
24
|
+
});
|
|
25
|
+
console.log(JSON.stringify(event));
|
|
26
|
+
}
|
|
27
|
+
export async function channelContextDelete(channelName, opts) {
|
|
28
|
+
const context = buildContextEntries(opts.file, opts.raw);
|
|
29
|
+
if (!context) {
|
|
30
|
+
throw new Error("Provide at least one --file <abs-path> or --raw <text>");
|
|
31
|
+
}
|
|
32
|
+
const scope = parseChannelScope(opts.scope);
|
|
33
|
+
const event = opts.thread
|
|
34
|
+
? await deleteThreadContext({
|
|
35
|
+
channel: channelName,
|
|
36
|
+
by: opts.as ?? "main",
|
|
37
|
+
thread: opts.thread,
|
|
38
|
+
context,
|
|
39
|
+
...(scope !== undefined ? { scope } : {}),
|
|
40
|
+
origin: "cli",
|
|
41
|
+
})
|
|
42
|
+
: await deleteChannelContext({
|
|
43
|
+
channel: channelName,
|
|
44
|
+
by: opts.as ?? "main",
|
|
45
|
+
context,
|
|
46
|
+
...(scope !== undefined ? { scope } : {}),
|
|
47
|
+
origin: "cli",
|
|
48
|
+
});
|
|
49
|
+
console.log(JSON.stringify(event));
|
|
50
|
+
}
|
|
51
|
+
export async function channelContextList(channelName, opts) {
|
|
52
|
+
const scope = parseChannelScope(opts.scope);
|
|
53
|
+
const entries = opts.thread
|
|
54
|
+
? await listThreadContext({
|
|
55
|
+
channel: channelName,
|
|
56
|
+
thread: opts.thread,
|
|
57
|
+
...(scope !== undefined ? { scope } : {}),
|
|
58
|
+
})
|
|
59
|
+
: await listChannelContext({
|
|
60
|
+
channel: channelName,
|
|
61
|
+
...(scope !== undefined ? { scope } : {}),
|
|
62
|
+
});
|
|
63
|
+
if (opts.raw) {
|
|
64
|
+
for (const entry of entries)
|
|
65
|
+
console.log(JSON.stringify(entry));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (entries.length === 0) {
|
|
69
|
+
console.log("(no context)");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const entry of entries) {
|
|
73
|
+
if (entry.type === "file") {
|
|
74
|
+
console.log(`file ${entry.path}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const oneLine = entry.text.replace(/\s+/g, " ").trim();
|
|
78
|
+
const display = oneLine.length > 200 ? `${oneLine.slice(0, 200)}…` : oneLine;
|
|
79
|
+
console.log(`raw ${display}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/commands/channel/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,17 +3,24 @@ export interface CreateOptions {
|
|
|
3
3
|
project?: string;
|
|
4
4
|
labels?: string;
|
|
5
5
|
cwd?: string;
|
|
6
|
+
scope?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
/** New canonical flag list. */
|
|
10
|
+
contextFile?: string[];
|
|
11
|
+
contextRaw?: string[];
|
|
12
|
+
/** Legacy aliases accepted while users migrate scripts. */
|
|
13
|
+
linkedContextFile?: string[];
|
|
14
|
+
linkedContextRaw?: string[];
|
|
6
15
|
by?: string;
|
|
7
16
|
force?: boolean;
|
|
8
|
-
/** Mark this channel as ephemeral — `channel list` hides it by default
|
|
9
|
-
* and `channel prune --ephemeral` will remove it. The channel
|
|
10
|
-
* otherwise behaves identically (events.jsonl, workers, replay are
|
|
11
|
-
* all the same); the flag is purely a lifecycle hint. */
|
|
12
17
|
ephemeral?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
18
|
+
/**
|
|
19
|
+
* Optional mode marker for callers like `channel run` that produce
|
|
20
|
+
* one-shot channels. Stored as `meta.trellis.createMode` so the
|
|
21
|
+
* channel event keeps an `origin: "cli"` write entrypoint while still
|
|
22
|
+
* exposing the mode for downstream consumers.
|
|
23
|
+
*/
|
|
17
24
|
origin?: string;
|
|
18
25
|
}
|
|
19
26
|
export declare function createChannel(name: string, opts: CreateOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/create.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
|
@@ -1,110 +1,39 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { appendEvent } from "./store/events.js";
|
|
4
|
-
import { channelDir, currentProjectKey, ensureBucketMarker, eventsPath, } from "./store/paths.js";
|
|
1
|
+
import { buildContextEntries, createChannel as coreCreateChannel, resolveChannelRef, } from "@mindfoldhq/trellis-core/channel";
|
|
2
|
+
import { parseChannelScope, parseChannelType, parseCsv, } from "./store/schema.js";
|
|
5
3
|
export async function createChannel(name, opts) {
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
// Stamp the project bucket so future migrations and `listProjects`
|
|
15
|
-
// recognise it (project key derives from the cwd at create time).
|
|
16
|
-
ensureBucketMarker(currentProjectKey());
|
|
17
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
18
|
-
const labels = opts.labels
|
|
19
|
-
? opts.labels
|
|
20
|
-
.split(",")
|
|
21
|
-
.map((l) => l.trim())
|
|
22
|
-
.filter((l) => l.length > 0)
|
|
23
|
-
: undefined;
|
|
24
|
-
await appendEvent(name, {
|
|
25
|
-
kind: "create",
|
|
4
|
+
const scope = parseChannelScope(opts.scope) ?? "project";
|
|
5
|
+
const channelType = parseChannelType(opts.type);
|
|
6
|
+
const context = buildContextEntries([...(opts.contextFile ?? []), ...(opts.linkedContextFile ?? [])], [...(opts.contextRaw ?? []), ...(opts.linkedContextRaw ?? [])]);
|
|
7
|
+
const labels = parseCsv(opts.labels);
|
|
8
|
+
const createMode = opts.origin;
|
|
9
|
+
const event = await coreCreateChannel({
|
|
10
|
+
channel: name,
|
|
26
11
|
by: opts.by ?? "main",
|
|
27
|
-
|
|
12
|
+
scope,
|
|
13
|
+
type: channelType,
|
|
14
|
+
...(opts.cwd ? { cwd: opts.cwd } : {}),
|
|
28
15
|
...(opts.task ? { task: opts.task } : {}),
|
|
29
16
|
...(opts.project ? { project: opts.project } : {}),
|
|
30
17
|
...(labels ? { labels } : {}),
|
|
18
|
+
...(opts.description ? { description: opts.description } : {}),
|
|
19
|
+
...(context ? { context } : {}),
|
|
31
20
|
...(opts.ephemeral ? { ephemeral: true } : {}),
|
|
32
|
-
...(opts.
|
|
21
|
+
...(opts.force ? { force: true } : {}),
|
|
22
|
+
origin: "cli",
|
|
23
|
+
...(createMode ? { meta: { trellis: { createMode } } } : {}),
|
|
33
24
|
});
|
|
34
|
-
console.log(`Created channel '${name}' at ${
|
|
25
|
+
console.log(`Created channel '${name}' (${channelType}) at ${channelDirFromEvent(name, event.scope, opts.cwd)}`);
|
|
35
26
|
if (opts.ephemeral) {
|
|
36
27
|
process.stderr.write("ephemeral channel is hidden from `channel list`; use `channel list --all` or `channel prune --ephemeral`\n");
|
|
37
28
|
}
|
|
38
29
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
async function forceCleanChannel(name) {
|
|
49
|
-
const dir = channelDir(name);
|
|
50
|
-
// Kill any live workers first (signal supervisor by pid; on failure,
|
|
51
|
-
// still proceed — the worst case is an orphan process which won't see
|
|
52
|
-
// the new channel anyway because pid files will be gone).
|
|
53
|
-
let entries;
|
|
54
|
-
try {
|
|
55
|
-
entries = fs.readdirSync(dir);
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return; // nothing to clean
|
|
59
|
-
}
|
|
60
|
-
for (const f of entries) {
|
|
61
|
-
if (!f.endsWith(".pid"))
|
|
62
|
-
continue;
|
|
63
|
-
const pidFile = path.join(dir, f);
|
|
64
|
-
let pid = 0;
|
|
65
|
-
try {
|
|
66
|
-
pid = Number(fs.readFileSync(pidFile, "utf-8").trim());
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (pid && pidAlive(pid)) {
|
|
72
|
-
try {
|
|
73
|
-
process.kill(pid, "SIGTERM");
|
|
74
|
-
// Best-effort grace: poll up to 1.5s for it to exit.
|
|
75
|
-
const deadline = Date.now() + 1500;
|
|
76
|
-
while (pidAlive(pid) && Date.now() < deadline) {
|
|
77
|
-
await sleep(50);
|
|
78
|
-
}
|
|
79
|
-
if (pidAlive(pid))
|
|
80
|
-
process.kill(pid, "SIGKILL");
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
// already dead
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// Now remove the whole channel directory. The channel-level lock file,
|
|
88
|
-
// worker pid/config/log/session-id/thread-id/spawnlock are all under
|
|
89
|
-
// this root. `rmSync(recursive)` handles them in one go.
|
|
90
|
-
try {
|
|
91
|
-
fs.rmSync(dir, { recursive: true, force: true });
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
process.stderr.write(`[channel create --force] warning: failed to fully clean ${dir}: ${err instanceof Error ? err.message : err}\n`);
|
|
95
|
-
}
|
|
96
|
-
// appendEvent will recreate the directory via ensureChannelDir.
|
|
97
|
-
}
|
|
98
|
-
function pidAlive(pid) {
|
|
99
|
-
try {
|
|
100
|
-
process.kill(pid, 0);
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function sleep(ms) {
|
|
108
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
30
|
+
function channelDirFromEvent(name, scope, cwd) {
|
|
31
|
+
const ref = resolveChannelRef({
|
|
32
|
+
channel: name,
|
|
33
|
+
scope,
|
|
34
|
+
forCreate: true,
|
|
35
|
+
...(cwd !== undefined ? { cwd } : {}),
|
|
36
|
+
});
|
|
37
|
+
return ref.dir;
|
|
109
38
|
}
|
|
110
39
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/channel/create.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/channel/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAq0B7D"}
|