@getpaseo/cli 0.1.2
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/bin/paseo +2 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +150 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agent/archive.d.ts +17 -0
- package/dist/commands/agent/archive.d.ts.map +1 -0
- package/dist/commands/agent/archive.js +91 -0
- package/dist/commands/agent/archive.js.map +1 -0
- package/dist/commands/agent/attach.d.ts +10 -0
- package/dist/commands/agent/attach.d.ts.map +1 -0
- package/dist/commands/agent/attach.js +166 -0
- package/dist/commands/agent/attach.js.map +1 -0
- package/dist/commands/agent/index.d.ts +3 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +112 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/inspect.d.ts +14 -0
- package/dist/commands/agent/inspect.d.ts.map +1 -0
- package/dist/commands/agent/inspect.js +185 -0
- package/dist/commands/agent/inspect.js.map +1 -0
- package/dist/commands/agent/logs.d.ts +11 -0
- package/dist/commands/agent/logs.d.ts.map +1 -0
- package/dist/commands/agent/logs.js +207 -0
- package/dist/commands/agent/logs.js.map +1 -0
- package/dist/commands/agent/ls.d.ts +34 -0
- package/dist/commands/agent/ls.d.ts.map +1 -0
- package/dist/commands/agent/ls.js +153 -0
- package/dist/commands/agent/ls.js.map +1 -0
- package/dist/commands/agent/mode.d.ts +18 -0
- package/dist/commands/agent/mode.d.ts.map +1 -0
- package/dist/commands/agent/mode.js +97 -0
- package/dist/commands/agent/mode.js.map +1 -0
- package/dist/commands/agent/run.d.ts +27 -0
- package/dist/commands/agent/run.d.ts.map +1 -0
- package/dist/commands/agent/run.js +146 -0
- package/dist/commands/agent/run.js.map +1 -0
- package/dist/commands/agent/send.d.ts +16 -0
- package/dist/commands/agent/send.d.ts.map +1 -0
- package/dist/commands/agent/send.js +172 -0
- package/dist/commands/agent/send.js.map +1 -0
- package/dist/commands/agent/stop.d.ts +16 -0
- package/dist/commands/agent/stop.d.ts.map +1 -0
- package/dist/commands/agent/stop.js +104 -0
- package/dist/commands/agent/stop.js.map +1 -0
- package/dist/commands/agent/wait.d.ts +16 -0
- package/dist/commands/agent/wait.d.ts.map +1 -0
- package/dist/commands/agent/wait.js +171 -0
- package/dist/commands/agent/wait.js.map +1 -0
- package/dist/commands/daemon/index.d.ts +3 -0
- package/dist/commands/daemon/index.d.ts.map +1 -0
- package/dist/commands/daemon/index.js +41 -0
- package/dist/commands/daemon/index.js.map +1 -0
- package/dist/commands/daemon/local-daemon.d.ts +51 -0
- package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
- package/dist/commands/daemon/local-daemon.js +298 -0
- package/dist/commands/daemon/local-daemon.js.map +1 -0
- package/dist/commands/daemon/pair.d.ts +8 -0
- package/dist/commands/daemon/pair.d.ts.map +1 -0
- package/dist/commands/daemon/pair.js +34 -0
- package/dist/commands/daemon/pair.js.map +1 -0
- package/dist/commands/daemon/restart.d.ts +12 -0
- package/dist/commands/daemon/restart.d.ts.map +1 -0
- package/dist/commands/daemon/restart.js +97 -0
- package/dist/commands/daemon/restart.js.map +1 -0
- package/dist/commands/daemon/start.d.ts +6 -0
- package/dist/commands/daemon/start.d.ts.map +1 -0
- package/dist/commands/daemon/start.js +121 -0
- package/dist/commands/daemon/start.js.map +1 -0
- package/dist/commands/daemon/status.d.ts +10 -0
- package/dist/commands/daemon/status.d.ts.map +1 -0
- package/dist/commands/daemon/status.js +119 -0
- package/dist/commands/daemon/status.js.map +1 -0
- package/dist/commands/daemon/stop.d.ts +12 -0
- package/dist/commands/daemon/stop.d.ts.map +1 -0
- package/dist/commands/daemon/stop.js +56 -0
- package/dist/commands/daemon/stop.js.map +1 -0
- package/dist/commands/permit/allow.d.ts +20 -0
- package/dist/commands/permit/allow.d.ts.map +1 -0
- package/dist/commands/permit/allow.js +133 -0
- package/dist/commands/permit/allow.js.map +1 -0
- package/dist/commands/permit/deny.d.ts +12 -0
- package/dist/commands/permit/deny.d.ts.map +1 -0
- package/dist/commands/permit/deny.js +105 -0
- package/dist/commands/permit/deny.js.map +1 -0
- package/dist/commands/permit/index.d.ts +3 -0
- package/dist/commands/permit/index.d.ts.map +1 -0
- package/dist/commands/permit/index.js +37 -0
- package/dist/commands/permit/index.js.map +1 -0
- package/dist/commands/permit/ls.d.ts +18 -0
- package/dist/commands/permit/ls.d.ts.map +1 -0
- package/dist/commands/permit/ls.js +65 -0
- package/dist/commands/permit/ls.js.map +1 -0
- package/dist/commands/provider/index.d.ts +3 -0
- package/dist/commands/provider/index.d.ts.map +1 -0
- package/dist/commands/provider/index.js +22 -0
- package/dist/commands/provider/index.js.map +1 -0
- package/dist/commands/provider/ls.d.ts +17 -0
- package/dist/commands/provider/ls.d.ts.map +1 -0
- package/dist/commands/provider/ls.js +51 -0
- package/dist/commands/provider/ls.js.map +1 -0
- package/dist/commands/provider/models.d.ts +16 -0
- package/dist/commands/provider/models.d.ts.map +1 -0
- package/dist/commands/provider/models.js +45 -0
- package/dist/commands/provider/models.js.map +1 -0
- package/dist/commands/speech/download.d.ts +14 -0
- package/dist/commands/speech/download.d.ts.map +1 -0
- package/dist/commands/speech/download.js +46 -0
- package/dist/commands/speech/download.js.map +1 -0
- package/dist/commands/speech/index.d.ts +3 -0
- package/dist/commands/speech/index.d.ts.map +1 -0
- package/dist/commands/speech/index.js +25 -0
- package/dist/commands/speech/index.js.map +1 -0
- package/dist/commands/speech/models.d.ts +16 -0
- package/dist/commands/speech/models.d.ts.map +1 -0
- package/dist/commands/speech/models.js +49 -0
- package/dist/commands/speech/models.js.map +1 -0
- package/dist/commands/worktree/archive.d.ts +16 -0
- package/dist/commands/worktree/archive.d.ts.map +1 -0
- package/dist/commands/worktree/archive.js +98 -0
- package/dist/commands/worktree/archive.js.map +1 -0
- package/dist/commands/worktree/index.d.ts +3 -0
- package/dist/commands/worktree/index.d.ts.map +1 -0
- package/dist/commands/worktree/index.js +22 -0
- package/dist/commands/worktree/index.js.map +1 -0
- package/dist/commands/worktree/ls.d.ts +17 -0
- package/dist/commands/worktree/ls.d.ts.map +1 -0
- package/dist/commands/worktree/ls.js +89 -0
- package/dist/commands/worktree/ls.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/output/index.d.ts +45 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +47 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/json.d.ts +11 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +37 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/quiet.d.ts +9 -0
- package/dist/output/quiet.d.ts.map +1 -0
- package/dist/output/quiet.js +22 -0
- package/dist/output/quiet.js.map +1 -0
- package/dist/output/render.d.ts +15 -0
- package/dist/output/render.d.ts.map +1 -0
- package/dist/output/render.js +80 -0
- package/dist/output/render.js.map +1 -0
- package/dist/output/table.d.ts +13 -0
- package/dist/output/table.d.ts.map +1 -0
- package/dist/output/table.js +135 -0
- package/dist/output/table.js.map +1 -0
- package/dist/output/types.d.ts +71 -0
- package/dist/output/types.d.ts.map +1 -0
- package/dist/output/types.js +8 -0
- package/dist/output/types.js.map +1 -0
- package/dist/output/with-output.d.ts +37 -0
- package/dist/output/with-output.d.ts.map +1 -0
- package/dist/output/with-output.js +78 -0
- package/dist/output/with-output.js.map +1 -0
- package/dist/output/yaml.d.ts +11 -0
- package/dist/output/yaml.d.ts.map +1 -0
- package/dist/output/yaml.js +38 -0
- package/dist/output/yaml.js.map +1 -0
- package/dist/utils/client.d.ts +35 -0
- package/dist/utils/client.d.ts.map +1 -0
- package/dist/utils/client.js +110 -0
- package/dist/utils/client.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { connectToDaemon } from "../../utils/client.js";
|
|
2
|
+
const speechModelsSchema = {
|
|
3
|
+
idField: "id",
|
|
4
|
+
columns: [
|
|
5
|
+
{ header: "MODEL", field: "id", width: 36 },
|
|
6
|
+
{ header: "KIND", field: "kind", width: 12 },
|
|
7
|
+
{
|
|
8
|
+
header: "STATUS",
|
|
9
|
+
field: "status",
|
|
10
|
+
width: 12,
|
|
11
|
+
color: (value) => (value === "downloaded" ? "green" : "yellow"),
|
|
12
|
+
},
|
|
13
|
+
{ header: "MODEL DIR", field: "modelDir", width: 44 },
|
|
14
|
+
{ header: "MISSING FILES", field: "missingFiles", width: 40 },
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export async function runSpeechModelsCommand(options, _command) {
|
|
18
|
+
const client = await connectToDaemon({ host: options.host });
|
|
19
|
+
try {
|
|
20
|
+
const response = await client.listSpeechModels();
|
|
21
|
+
const rows = response.models
|
|
22
|
+
.slice()
|
|
23
|
+
.sort((a, b) => a.kind.localeCompare(b.kind) || a.id.localeCompare(b.id))
|
|
24
|
+
.map((model) => ({
|
|
25
|
+
id: model.id,
|
|
26
|
+
kind: model.kind,
|
|
27
|
+
status: model.isDownloaded ? "downloaded" : "missing",
|
|
28
|
+
modelDir: model.modelDir,
|
|
29
|
+
missingFiles: model.missingFiles?.join(", ") ?? "",
|
|
30
|
+
}));
|
|
31
|
+
return {
|
|
32
|
+
type: "list",
|
|
33
|
+
data: rows,
|
|
34
|
+
schema: speechModelsSchema,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
const commandError = {
|
|
40
|
+
code: "SPEECH_MODELS_LIST_FAILED",
|
|
41
|
+
message: `Failed to list speech models: ${message}`,
|
|
42
|
+
};
|
|
43
|
+
throw commandError;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await client.close().catch(() => { });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/commands/speech/models.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAUxD,MAAM,kBAAkB,GAAsC;IAC5D,OAAO,EAAE,IAAI;IACb,OAAO,EAAE;QACP,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3C,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C;YACE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;SAChE;QACD,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;QACrD,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE;KAC9D;CACF,CAAC;AAQF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA4B,EAC5B,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,MAAM,IAAI,GAA0B,QAAQ,CAAC,MAAM;aAChD,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACxE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACf,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACrD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;SACnD,CAAC,CAAC,CAAC;QACN,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,YAAY,GAAiB;YACjC,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,iCAAiC,OAAO,EAAE;SACpD,CAAC;QACF,MAAM,YAAY,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { CommandOptions, SingleResult, OutputSchema } from '../../output/index.js';
|
|
3
|
+
/** Result type for worktree archive command */
|
|
4
|
+
export interface WorktreeArchiveResult {
|
|
5
|
+
name: string;
|
|
6
|
+
status: 'archived';
|
|
7
|
+
removedAgents: string[];
|
|
8
|
+
}
|
|
9
|
+
/** Schema for archive command output */
|
|
10
|
+
export declare const archiveSchema: OutputSchema<WorktreeArchiveResult>;
|
|
11
|
+
export interface WorktreeArchiveOptions extends CommandOptions {
|
|
12
|
+
host?: string;
|
|
13
|
+
}
|
|
14
|
+
export type WorktreeArchiveCommandResult = SingleResult<WorktreeArchiveResult>;
|
|
15
|
+
export declare function runArchiveCommand(nameArg: string, options: WorktreeArchiveOptions, _command: Command): Promise<WorktreeArchiveCommandResult>;
|
|
16
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/commands/worktree/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AAErG,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,wCAAwC;AACxC,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,qBAAqB,CAU7D,CAAA;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,4BAA4B,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAA;AAE9E,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,4BAA4B,CAAC,CA8FvC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
|
|
2
|
+
/** Schema for archive command output */
|
|
3
|
+
export const archiveSchema = {
|
|
4
|
+
idField: 'name',
|
|
5
|
+
columns: [
|
|
6
|
+
{ header: 'NAME', field: 'name' },
|
|
7
|
+
{ header: 'STATUS', field: 'status' },
|
|
8
|
+
{
|
|
9
|
+
header: 'REMOVED AGENTS',
|
|
10
|
+
field: (item) => item.removedAgents.length > 0 ? item.removedAgents.join(', ') : '-',
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
export async function runArchiveCommand(nameArg, options, _command) {
|
|
15
|
+
const host = getDaemonHost({ host: options.host });
|
|
16
|
+
// Validate arguments
|
|
17
|
+
if (!nameArg || nameArg.trim().length === 0) {
|
|
18
|
+
const error = {
|
|
19
|
+
code: 'MISSING_WORKTREE_NAME',
|
|
20
|
+
message: 'Worktree name is required',
|
|
21
|
+
details: 'Usage: paseo worktree archive <name>',
|
|
22
|
+
};
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
let client;
|
|
26
|
+
try {
|
|
27
|
+
client = await connectToDaemon({ host: options.host });
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
const error = {
|
|
32
|
+
code: 'DAEMON_NOT_RUNNING',
|
|
33
|
+
message: `Cannot connect to daemon at ${host}: ${message}`,
|
|
34
|
+
details: 'Start the daemon with: paseo daemon start',
|
|
35
|
+
};
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
// Get the list of worktrees first to resolve the name
|
|
40
|
+
const listResponse = await client.getPaseoWorktreeList({});
|
|
41
|
+
if (listResponse.error) {
|
|
42
|
+
const error = {
|
|
43
|
+
code: 'WORKTREE_LIST_FAILED',
|
|
44
|
+
message: `Failed to list worktrees: ${listResponse.error.message}`,
|
|
45
|
+
};
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
// Find the worktree by name or branch
|
|
49
|
+
const worktree = listResponse.worktrees.find((wt) => {
|
|
50
|
+
const name = wt.worktreePath.split('/').pop();
|
|
51
|
+
return name === nameArg || wt.branchName === nameArg;
|
|
52
|
+
});
|
|
53
|
+
if (!worktree) {
|
|
54
|
+
const error = {
|
|
55
|
+
code: 'WORKTREE_NOT_FOUND',
|
|
56
|
+
message: `Worktree not found: ${nameArg}`,
|
|
57
|
+
details: 'Use "paseo worktree ls" to list available worktrees',
|
|
58
|
+
};
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
// Archive the worktree
|
|
62
|
+
const response = await client.archivePaseoWorktree({
|
|
63
|
+
worktreePath: worktree.worktreePath,
|
|
64
|
+
});
|
|
65
|
+
await client.close();
|
|
66
|
+
if (response.error) {
|
|
67
|
+
const error = {
|
|
68
|
+
code: 'WORKTREE_ARCHIVE_FAILED',
|
|
69
|
+
message: `Failed to archive worktree: ${response.error.message}`,
|
|
70
|
+
};
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
const worktreeName = worktree.worktreePath.split('/').pop() ?? nameArg;
|
|
74
|
+
return {
|
|
75
|
+
type: 'single',
|
|
76
|
+
data: {
|
|
77
|
+
name: worktreeName,
|
|
78
|
+
status: 'archived',
|
|
79
|
+
removedAgents: response.removedAgents ?? [],
|
|
80
|
+
},
|
|
81
|
+
schema: archiveSchema,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
await client.close().catch(() => { });
|
|
86
|
+
// Re-throw CommandError as-is
|
|
87
|
+
if (err && typeof err === 'object' && 'code' in err) {
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
91
|
+
const error = {
|
|
92
|
+
code: 'WORKTREE_ARCHIVE_FAILED',
|
|
93
|
+
message: `Failed to archive worktree: ${message}`,
|
|
94
|
+
};
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/commands/worktree/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/worktree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,qBAAqB,IAAI,OAAO,CAmB/C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { runLsCommand } from './ls.js';
|
|
3
|
+
import { runArchiveCommand } from './archive.js';
|
|
4
|
+
import { withOutput } from '../../output/index.js';
|
|
5
|
+
export function createWorktreeCommand() {
|
|
6
|
+
const worktree = new Command('worktree').description('Manage Paseo-managed git worktrees');
|
|
7
|
+
worktree
|
|
8
|
+
.command('ls')
|
|
9
|
+
.description('List Paseo-managed git worktrees')
|
|
10
|
+
.option('--json', 'Output in JSON format')
|
|
11
|
+
.option('--host <host>', 'Daemon host:port (default: localhost:6767)')
|
|
12
|
+
.action(withOutput(runLsCommand));
|
|
13
|
+
worktree
|
|
14
|
+
.command('archive')
|
|
15
|
+
.description('Archive a worktree (removes worktree and associated branch)')
|
|
16
|
+
.argument('<name>', 'Worktree name or branch name')
|
|
17
|
+
.option('--json', 'Output in JSON format')
|
|
18
|
+
.option('--host <host>', 'Daemon host:port (default: localhost:6767)')
|
|
19
|
+
.action(withOutput(runArchiveCommand));
|
|
20
|
+
return worktree;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/worktree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAA;IAE1F,QAAQ;SACL,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAA;IAEnC,QAAQ;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAExC,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { CommandOptions, ListResult, OutputSchema } from '../../output/index.js';
|
|
3
|
+
/** Worktree list item for display */
|
|
4
|
+
export interface WorktreeListItem {
|
|
5
|
+
name: string;
|
|
6
|
+
branch: string;
|
|
7
|
+
cwd: string;
|
|
8
|
+
agent: string;
|
|
9
|
+
}
|
|
10
|
+
/** Schema for worktree ls output */
|
|
11
|
+
export declare const worktreeLsSchema: OutputSchema<WorktreeListItem>;
|
|
12
|
+
export type WorktreeLsResult = ListResult<WorktreeListItem>;
|
|
13
|
+
export interface WorktreeLsOptions extends CommandOptions {
|
|
14
|
+
host?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function runLsCommand(options: WorktreeLsOptions, _command: Command): Promise<WorktreeLsResult>;
|
|
17
|
+
//# sourceMappingURL=ls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/commands/worktree/ls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AAEnG,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAkBD,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,CAQ3D,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAsE3B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
|
|
2
|
+
/** Shorten home directory in path */
|
|
3
|
+
function shortenPath(path) {
|
|
4
|
+
const home = process.env.HOME;
|
|
5
|
+
if (home && path.startsWith(home)) {
|
|
6
|
+
return '~' + path.slice(home.length);
|
|
7
|
+
}
|
|
8
|
+
return path;
|
|
9
|
+
}
|
|
10
|
+
/** Extract worktree name from path */
|
|
11
|
+
function extractWorktreeName(path) {
|
|
12
|
+
// ~/.paseo/worktrees/<repo>/<name> -> name
|
|
13
|
+
const parts = path.split('/');
|
|
14
|
+
return parts[parts.length - 1] ?? path;
|
|
15
|
+
}
|
|
16
|
+
/** Schema for worktree ls output */
|
|
17
|
+
export const worktreeLsSchema = {
|
|
18
|
+
idField: 'name',
|
|
19
|
+
columns: [
|
|
20
|
+
{ header: 'NAME', field: 'name', width: 20 },
|
|
21
|
+
{ header: 'BRANCH', field: 'branch', width: 25 },
|
|
22
|
+
{ header: 'CWD', field: 'cwd', width: 45 },
|
|
23
|
+
{ header: 'AGENT', field: 'agent', width: 10 },
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
export async function runLsCommand(options, _command) {
|
|
27
|
+
const host = getDaemonHost({ host: options.host });
|
|
28
|
+
let client;
|
|
29
|
+
try {
|
|
30
|
+
client = await connectToDaemon({ host: options.host });
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
34
|
+
const error = {
|
|
35
|
+
code: 'DAEMON_NOT_RUNNING',
|
|
36
|
+
message: `Cannot connect to daemon at ${host}: ${message}`,
|
|
37
|
+
details: 'Start the daemon with: paseo daemon start',
|
|
38
|
+
};
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const agents = await client.fetchAgents();
|
|
43
|
+
// Get worktree list from daemon
|
|
44
|
+
const response = await client.getPaseoWorktreeList({});
|
|
45
|
+
await client.close();
|
|
46
|
+
if (response.error) {
|
|
47
|
+
const error = {
|
|
48
|
+
code: 'WORKTREE_LIST_FAILED',
|
|
49
|
+
message: `Failed to list worktrees: ${response.error.message}`,
|
|
50
|
+
};
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
// Build a map of worktree paths to agent IDs
|
|
54
|
+
const worktreeAgentMap = new Map();
|
|
55
|
+
for (const agent of agents) {
|
|
56
|
+
// Check if agent cwd is under ~/.paseo/worktrees/
|
|
57
|
+
const paseoHome = process.env.PASEO_HOME ?? (process.env.HOME + '/.paseo');
|
|
58
|
+
const worktreesDir = paseoHome + '/worktrees/';
|
|
59
|
+
if (agent.cwd.startsWith(worktreesDir)) {
|
|
60
|
+
worktreeAgentMap.set(agent.cwd, agent.id.slice(0, 7));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const items = response.worktrees.map((wt) => ({
|
|
64
|
+
name: extractWorktreeName(wt.worktreePath),
|
|
65
|
+
branch: wt.branchName ?? '-',
|
|
66
|
+
cwd: shortenPath(wt.worktreePath),
|
|
67
|
+
agent: worktreeAgentMap.get(wt.worktreePath) ?? '-',
|
|
68
|
+
}));
|
|
69
|
+
return {
|
|
70
|
+
type: 'list',
|
|
71
|
+
data: items,
|
|
72
|
+
schema: worktreeLsSchema,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
await client.close().catch(() => { });
|
|
77
|
+
// Re-throw CommandError as-is
|
|
78
|
+
if (err && typeof err === 'object' && 'code' in err) {
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
82
|
+
const error = {
|
|
83
|
+
code: 'WORKTREE_LIST_FAILED',
|
|
84
|
+
message: `Failed to list worktrees: ${message}`,
|
|
85
|
+
};
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/commands/worktree/ls.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;AAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AACD,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output abstraction layer for the Paseo CLI.
|
|
3
|
+
*
|
|
4
|
+
* This module provides structured output rendering with support for multiple formats:
|
|
5
|
+
* - table: Human-readable aligned tables (default)
|
|
6
|
+
* - json: Machine-readable JSON
|
|
7
|
+
* - yaml: Machine-readable YAML
|
|
8
|
+
* - quiet: Minimal output (IDs only)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { withOutput, render, type ListResult, type OutputSchema } from './output/index.js'
|
|
13
|
+
*
|
|
14
|
+
* // Define your data type
|
|
15
|
+
* interface Agent { id: string; title: string; status: string }
|
|
16
|
+
*
|
|
17
|
+
* // Define how to render it
|
|
18
|
+
* const schema: OutputSchema<Agent> = {
|
|
19
|
+
* idField: 'id',
|
|
20
|
+
* columns: [
|
|
21
|
+
* { header: 'ID', field: 'id' },
|
|
22
|
+
* { header: 'TITLE', field: 'title' },
|
|
23
|
+
* { header: 'STATUS', field: 'status', color: (v) => v === 'running' ? 'green' : undefined },
|
|
24
|
+
* ],
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // Return structured data from commands
|
|
28
|
+
* const result: ListResult<Agent> = {
|
|
29
|
+
* type: 'list',
|
|
30
|
+
* data: agents,
|
|
31
|
+
* schema,
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* // Render with options
|
|
35
|
+
* const output = render(result, { format: 'json' })
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export type { OutputFormat, OutputOptions, ColumnDef, OutputSchema, CommandResult, SingleResult, ListResult, AnyCommandResult, CommandError, } from './types.js';
|
|
39
|
+
export { renderTable, renderTableHeader, renderTableRow } from './table.js';
|
|
40
|
+
export { renderJson, renderJsonLine } from './json.js';
|
|
41
|
+
export { renderYaml, renderYamlDoc } from './yaml.js';
|
|
42
|
+
export { renderQuiet } from './quiet.js';
|
|
43
|
+
export { render, renderError, toCommandError, defaultOutputOptions } from './render.js';
|
|
44
|
+
export { withOutput, createOutputOptions, type CommandOptions } from './with-output.js';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,YAAY,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGvF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output abstraction layer for the Paseo CLI.
|
|
3
|
+
*
|
|
4
|
+
* This module provides structured output rendering with support for multiple formats:
|
|
5
|
+
* - table: Human-readable aligned tables (default)
|
|
6
|
+
* - json: Machine-readable JSON
|
|
7
|
+
* - yaml: Machine-readable YAML
|
|
8
|
+
* - quiet: Minimal output (IDs only)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { withOutput, render, type ListResult, type OutputSchema } from './output/index.js'
|
|
13
|
+
*
|
|
14
|
+
* // Define your data type
|
|
15
|
+
* interface Agent { id: string; title: string; status: string }
|
|
16
|
+
*
|
|
17
|
+
* // Define how to render it
|
|
18
|
+
* const schema: OutputSchema<Agent> = {
|
|
19
|
+
* idField: 'id',
|
|
20
|
+
* columns: [
|
|
21
|
+
* { header: 'ID', field: 'id' },
|
|
22
|
+
* { header: 'TITLE', field: 'title' },
|
|
23
|
+
* { header: 'STATUS', field: 'status', color: (v) => v === 'running' ? 'green' : undefined },
|
|
24
|
+
* ],
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // Return structured data from commands
|
|
28
|
+
* const result: ListResult<Agent> = {
|
|
29
|
+
* type: 'list',
|
|
30
|
+
* data: agents,
|
|
31
|
+
* schema,
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* // Render with options
|
|
35
|
+
* const output = render(result, { format: 'json' })
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
// Renderers
|
|
39
|
+
export { renderTable, renderTableHeader, renderTableRow } from './table.js';
|
|
40
|
+
export { renderJson, renderJsonLine } from './json.js';
|
|
41
|
+
export { renderYaml, renderYamlDoc } from './yaml.js';
|
|
42
|
+
export { renderQuiet } from './quiet.js';
|
|
43
|
+
// Main render function
|
|
44
|
+
export { render, renderError, toCommandError, defaultOutputOptions } from './render.js';
|
|
45
|
+
// Command wrapper
|
|
46
|
+
export { withOutput, createOutputOptions } from './with-output.js';
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAeH,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,uBAAuB;AACvB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEvF,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAuB,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Renders structured data as formatted JSON for machine consumption.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyCommandResult, OutputOptions } from './types.js';
|
|
7
|
+
/** Render command result as JSON */
|
|
8
|
+
export declare function renderJson<T>(result: AnyCommandResult<T>, _options: OutputOptions): string;
|
|
9
|
+
/** Render a single item as JSON line (for NDJSON streaming) */
|
|
10
|
+
export declare function renderJsonLine<T>(item: T, serialize?: (data: T) => unknown): string;
|
|
11
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEjE,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,CAAC,EAC1B,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,aAAa,GACtB,MAAM,CAyBR;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAGnF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Renders structured data as formatted JSON for machine consumption.
|
|
5
|
+
*/
|
|
6
|
+
/** Render command result as JSON */
|
|
7
|
+
export function renderJson(result, _options) {
|
|
8
|
+
const { schema } = result;
|
|
9
|
+
// Apply custom serializer if provided
|
|
10
|
+
if (schema.serialize) {
|
|
11
|
+
if (result.type === 'list') {
|
|
12
|
+
// If all items serialize to the same object, return just one
|
|
13
|
+
// This handles the case where a list of key-value rows should serialize
|
|
14
|
+
// to a single structured object
|
|
15
|
+
const serialized = result.data.map((item) => schema.serialize(item));
|
|
16
|
+
if (serialized.length > 0) {
|
|
17
|
+
const first = JSON.stringify(serialized[0]);
|
|
18
|
+
const allSame = serialized.every((s) => JSON.stringify(s) === first);
|
|
19
|
+
if (allSame) {
|
|
20
|
+
return JSON.stringify(serialized[0], null, 2);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return JSON.stringify(serialized, null, 2);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const serialized = schema.serialize(result.data);
|
|
27
|
+
return JSON.stringify(serialized, null, 2);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return JSON.stringify(result.data, null, 2);
|
|
31
|
+
}
|
|
32
|
+
/** Render a single item as JSON line (for NDJSON streaming) */
|
|
33
|
+
export function renderJsonLine(item, serialize) {
|
|
34
|
+
const output = serialize ? serialize(item) : item;
|
|
35
|
+
return JSON.stringify(output);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/output/json.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,oCAAoC;AACpC,MAAM,UAAU,UAAU,CACxB,MAA2B,EAC3B,QAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAEzB,sCAAsC;IACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,6DAA6D;YAC7D,wEAAwE;YACxE,gCAAgC;YAChC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,IAAI,CAAC,CAAC,CAAA;YACrE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAA;gBACpE,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAI,IAAO,EAAE,SAAgC;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quiet renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Outputs only ID fields, one per line. Useful for scripting and pipelines.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyCommandResult, OutputOptions } from './types.js';
|
|
7
|
+
/** Render command result in quiet mode (IDs only) */
|
|
8
|
+
export declare function renderQuiet<T>(result: AnyCommandResult<T>, _options: OutputOptions): string;
|
|
9
|
+
//# sourceMappingURL=quiet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quiet.d.ts","sourceRoot":"","sources":["../../src/output/quiet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAUjE,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,aAAa,GACtB,MAAM,CAMR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quiet renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Outputs only ID fields, one per line. Useful for scripting and pipelines.
|
|
5
|
+
*/
|
|
6
|
+
/** Extract ID from item using schema definition */
|
|
7
|
+
function getId(item, idField) {
|
|
8
|
+
if (typeof idField === 'function') {
|
|
9
|
+
return idField(item);
|
|
10
|
+
}
|
|
11
|
+
return String(item[idField]);
|
|
12
|
+
}
|
|
13
|
+
/** Render command result in quiet mode (IDs only) */
|
|
14
|
+
export function renderQuiet(result, _options) {
|
|
15
|
+
if (result.type === 'single') {
|
|
16
|
+
return getId(result.data, result.schema.idField);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return result.data.map((item) => getId(item, result.schema.idField)).join('\n');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=quiet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quiet.js","sourceRoot":"","sources":["../../src/output/quiet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,mDAAmD;AACnD,SAAS,KAAK,CAAI,IAAO,EAAE,OAAwC;IACjE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CACzB,MAA2B,EAC3B,QAAuB;IAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main render dispatcher for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Selects the appropriate renderer based on output options.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyCommandResult, CommandError, OutputOptions } from './types.js';
|
|
7
|
+
/** Default output options */
|
|
8
|
+
export declare const defaultOutputOptions: OutputOptions;
|
|
9
|
+
/** Render command result to string based on output options */
|
|
10
|
+
export declare function render<T>(result: AnyCommandResult<T>, options?: Partial<OutputOptions>): string;
|
|
11
|
+
/** Convert an unknown error to a CommandError */
|
|
12
|
+
export declare function toCommandError(error: unknown): CommandError;
|
|
13
|
+
/** Render an error to string based on output options */
|
|
14
|
+
export declare function renderError(error: CommandError, options?: Partial<OutputOptions>): string;
|
|
15
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/output/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/E,6BAA6B;AAC7B,eAAO,MAAM,oBAAoB,EAAE,aAKlC,CAAA;AAED,8DAA8D;AAC9D,wBAAgB,MAAM,CAAC,CAAC,EACtB,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,MAAM,CAkBR;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAiB3D;AAcD,wDAAwD;AACxD,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,MAAM,CAoBR"}
|