@junctionpanel/cli 0.1.16
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/LICENSE +671 -0
- package/bin/junction +2 -0
- package/bin/junction-daemon +5 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +211 -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 +92 -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 +153 -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 +125 -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 +198 -0
- package/dist/commands/agent/inspect.js.map +1 -0
- package/dist/commands/agent/logs.d.ts +15 -0
- package/dist/commands/agent/logs.d.ts.map +1 -0
- package/dist/commands/agent/logs.js +163 -0
- package/dist/commands/agent/logs.js.map +1 -0
- package/dist/commands/agent/ls.d.ts +37 -0
- package/dist/commands/agent/ls.d.ts.map +1 -0
- package/dist/commands/agent/ls.js +185 -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 +100 -0
- package/dist/commands/agent/mode.js.map +1 -0
- package/dist/commands/agent/run.d.ts +40 -0
- package/dist/commands/agent/run.d.ts.map +1 -0
- package/dist/commands/agent/run.js +354 -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 +105 -0
- package/dist/commands/agent/stop.js.map +1 -0
- package/dist/commands/agent/update.d.ts +18 -0
- package/dist/commands/agent/update.d.ts.map +1 -0
- package/dist/commands/agent/update.js +139 -0
- package/dist/commands/agent/update.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 +194 -0
- package/dist/commands/agent/wait.js.map +1 -0
- package/dist/commands/daemon/index.d.ts +4 -0
- package/dist/commands/daemon/index.d.ts.map +1 -0
- package/dist/commands/daemon/index.js +50 -0
- package/dist/commands/daemon/index.js.map +1 -0
- package/dist/commands/daemon/local-daemon.d.ts +60 -0
- package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
- package/dist/commands/daemon/local-daemon.js +501 -0
- package/dist/commands/daemon/local-daemon.js.map +1 -0
- package/dist/commands/daemon/package-context.d.ts +7 -0
- package/dist/commands/daemon/package-context.d.ts.map +1 -0
- package/dist/commands/daemon/package-context.js +41 -0
- package/dist/commands/daemon/package-context.js.map +1 -0
- package/dist/commands/daemon/pair.d.ts +3 -0
- package/dist/commands/daemon/pair.d.ts.map +1 -0
- package/dist/commands/daemon/pair.js +11 -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 +102 -0
- package/dist/commands/daemon/restart.js.map +1 -0
- package/dist/commands/daemon/runtime-toolchain.d.ts +24 -0
- package/dist/commands/daemon/runtime-toolchain.d.ts.map +1 -0
- package/dist/commands/daemon/runtime-toolchain.js +93 -0
- package/dist/commands/daemon/runtime-toolchain.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 +48 -0
- package/dist/commands/daemon/start.js.map +1 -0
- package/dist/commands/daemon/status.d.ts +11 -0
- package/dist/commands/daemon/status.d.ts.map +1 -0
- package/dist/commands/daemon/status.js +389 -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 +69 -0
- package/dist/commands/daemon/stop.js.map +1 -0
- package/dist/commands/daemon/update.d.ts +11 -0
- package/dist/commands/daemon/update.d.ts.map +1 -0
- package/dist/commands/daemon/update.js +88 -0
- package/dist/commands/daemon/update.js.map +1 -0
- package/dist/commands/onboard.d.ts +9 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +299 -0
- package/dist/commands/onboard.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 +134 -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 +106 -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 +66 -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 +23 -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 +20 -0
- package/dist/commands/provider/models.d.ts.map +1 -0
- package/dist/commands/provider/models.js +53 -0
- package/dist/commands/provider/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 +19 -0
- package/dist/commands/worktree/ls.d.ts.map +1 -0
- package/dist/commands/worktree/ls.js +97 -0
- package/dist/commands/worktree/ls.js.map +1 -0
- package/dist/daemon-only-cli.d.ts +4 -0
- package/dist/daemon-only-cli.d.ts.map +1 -0
- package/dist/daemon-only-cli.js +5 -0
- package/dist/daemon-only-cli.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 +87 -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-id.d.ts +2 -0
- package/dist/utils/client-id.d.ts.map +1 -0
- package/dist/utils/client-id.js +37 -0
- package/dist/utils/client-id.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 +113 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/errors.d.ts +5 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +10 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/timeline.d.ts +8 -0
- package/dist/utils/timeline.d.ts.map +1 -0
- package/dist/utils/timeline.js +9 -0
- package/dist/utils/timeline.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command wrapper for automatic output rendering.
|
|
3
|
+
*
|
|
4
|
+
* Wraps command handlers to automatically render results and handle errors.
|
|
5
|
+
*/
|
|
6
|
+
import { render, renderError, toCommandError, defaultOutputOptions } from './render.js';
|
|
7
|
+
function normalizeFormat(raw) {
|
|
8
|
+
const value = typeof raw === 'string' ? raw.trim().toLowerCase() : '';
|
|
9
|
+
// Common user expectation: "cli" means "table/human"
|
|
10
|
+
if (value === 'cli')
|
|
11
|
+
return 'table';
|
|
12
|
+
if (value === 'table' || value === 'json' || value === 'yaml')
|
|
13
|
+
return value;
|
|
14
|
+
const error = {
|
|
15
|
+
code: 'INVALID_FORMAT',
|
|
16
|
+
message: `Unsupported output format: ${String(raw)}`,
|
|
17
|
+
details: 'Supported formats: table, json, yaml',
|
|
18
|
+
};
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
/** Extract output options from command options */
|
|
22
|
+
function extractOutputOptions(options) {
|
|
23
|
+
const hasStructuredOutputSchema = typeof options.outputSchema === 'string' && options.outputSchema.trim().length > 0;
|
|
24
|
+
if (hasStructuredOutputSchema) {
|
|
25
|
+
return {
|
|
26
|
+
format: 'json',
|
|
27
|
+
quiet: false,
|
|
28
|
+
noHeaders: options.headers === false,
|
|
29
|
+
noColor: options.color === false,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
format: options.json ? 'json' : normalizeFormat(options.format ?? defaultOutputOptions.format),
|
|
34
|
+
quiet: options.quiet ?? defaultOutputOptions.quiet,
|
|
35
|
+
noHeaders: options.headers === false, // Commander uses --no-headers -> headers: false
|
|
36
|
+
noColor: options.color === false, // Commander uses --no-color -> color: false
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Wrap a command handler to automatically render output.
|
|
41
|
+
*
|
|
42
|
+
* The wrapped handler should return a CommandResult. The wrapper will:
|
|
43
|
+
* 1. Call the handler
|
|
44
|
+
* 2. Render the result using the appropriate format
|
|
45
|
+
* 3. Write to stdout
|
|
46
|
+
* 4. Handle errors by rendering to stderr and exiting with code 1
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* program
|
|
51
|
+
* .command('list')
|
|
52
|
+
* .action(withOutput(async (options) => {
|
|
53
|
+
* const data = await fetchData()
|
|
54
|
+
* return { type: 'list', data, schema }
|
|
55
|
+
* }))
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function withOutput(handler) {
|
|
59
|
+
return async (...args) => {
|
|
60
|
+
// Last two args are options and command
|
|
61
|
+
const command = args[args.length - 1];
|
|
62
|
+
// Use optsWithGlobals() to get both local and global options
|
|
63
|
+
const options = command.optsWithGlobals();
|
|
64
|
+
const outputOptions = extractOutputOptions(options);
|
|
65
|
+
try {
|
|
66
|
+
const result = await handler(...args);
|
|
67
|
+
const output = render(result, outputOptions);
|
|
68
|
+
if (output) {
|
|
69
|
+
process.stdout.write(output + '\n');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const commandError = toCommandError(error);
|
|
74
|
+
const errorOutput = renderError(commandError, outputOptions);
|
|
75
|
+
process.stderr.write(errorOutput + '\n');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Helper to create output options from partial input.
|
|
82
|
+
* Useful for testing or manual rendering.
|
|
83
|
+
*/
|
|
84
|
+
export function createOutputOptions(partial = {}) {
|
|
85
|
+
return { ...defaultOutputOptions, ...partial };
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=with-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-output.js","sourceRoot":"","sources":["../../src/output/with-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Renders structured data as YAML for machine consumption and human readability.
|
|
5
|
+
*/
|
|
6
|
+
import type { AnyCommandResult, OutputOptions } from './types.js';
|
|
7
|
+
/** Render command result as YAML */
|
|
8
|
+
export declare function renderYaml<T>(result: AnyCommandResult<T>, _options: OutputOptions): string;
|
|
9
|
+
/** Render a single item as YAML document (for streaming) */
|
|
10
|
+
export declare function renderYamlDoc<T>(item: T, serialize?: (data: T) => unknown): string;
|
|
11
|
+
//# sourceMappingURL=yaml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/output/yaml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,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,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAGlF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Renders structured data as YAML for machine consumption and human readability.
|
|
5
|
+
*/
|
|
6
|
+
import YAML from 'yaml';
|
|
7
|
+
/** Render command result as YAML */
|
|
8
|
+
export function renderYaml(result, _options) {
|
|
9
|
+
const { schema } = result;
|
|
10
|
+
// Apply custom serializer if provided
|
|
11
|
+
if (schema.serialize) {
|
|
12
|
+
if (result.type === 'list') {
|
|
13
|
+
// If all items serialize to the same object, return just one
|
|
14
|
+
// This handles the case where a list of key-value rows should serialize
|
|
15
|
+
// to a single structured object
|
|
16
|
+
const serialized = result.data.map((item) => schema.serialize(item));
|
|
17
|
+
if (serialized.length > 0) {
|
|
18
|
+
const first = JSON.stringify(serialized[0]);
|
|
19
|
+
const allSame = serialized.every((s) => JSON.stringify(s) === first);
|
|
20
|
+
if (allSame) {
|
|
21
|
+
return YAML.stringify(serialized[0]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return YAML.stringify(serialized);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const serialized = schema.serialize(result.data);
|
|
28
|
+
return YAML.stringify(serialized);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return YAML.stringify(result.data);
|
|
32
|
+
}
|
|
33
|
+
/** Render a single item as YAML document (for streaming) */
|
|
34
|
+
export function renderYamlDoc(item, serialize) {
|
|
35
|
+
const output = serialize ? serialize(item) : item;
|
|
36
|
+
return YAML.stringify(output);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/output/yaml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,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,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAI,IAAO,EAAE,SAAgC;IACxE,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 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.d.ts","sourceRoot":"","sources":["../../src/utils/client-id.ts"],"names":[],"mappings":"AAqBA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyB9D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
const CLIENT_SESSION_KEY_FILE = join(process.env.JUNCTION_HOME ?? join(homedir(), ".junction"), "cli-client-id");
|
|
6
|
+
let cachedClientId = null;
|
|
7
|
+
function normalizeClientId(value) {
|
|
8
|
+
const trimmed = value.trim();
|
|
9
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
10
|
+
}
|
|
11
|
+
function generateClientId() {
|
|
12
|
+
return `cid_${randomUUID().replace(/-/g, "")}`;
|
|
13
|
+
}
|
|
14
|
+
export async function getOrCreateCliClientId() {
|
|
15
|
+
if (cachedClientId) {
|
|
16
|
+
return cachedClientId;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const existing = normalizeClientId(await readFile(CLIENT_SESSION_KEY_FILE, "utf8"));
|
|
20
|
+
if (existing) {
|
|
21
|
+
cachedClientId = existing;
|
|
22
|
+
return existing;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const code = error?.code;
|
|
27
|
+
if (code !== "ENOENT") {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const nextValue = generateClientId();
|
|
32
|
+
await mkdir(dirname(CLIENT_SESSION_KEY_FILE), { recursive: true });
|
|
33
|
+
await writeFile(CLIENT_SESSION_KEY_FILE, nextValue, { mode: 0o600 });
|
|
34
|
+
cachedClientId = nextValue;
|
|
35
|
+
return nextValue;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=client-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.js","sourceRoot":"","sources":["../../src/utils/client-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,uBAAuB,GAAG,IAAI,CAClC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,EACzD,eAAe,CAChB,CAAC;AAEF,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,CAChC,MAAM,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAChD,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,GAAG,QAAQ,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,CAAC,uBAAuB,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,cAAc,GAAG,SAAS,CAAC;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DaemonClient } from '@junctionpanel/server';
|
|
2
|
+
export interface ConnectOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
timeout?: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Get the daemon host from environment or options
|
|
8
|
+
*/
|
|
9
|
+
export declare function getDaemonHost(options?: ConnectOptions): string;
|
|
10
|
+
/**
|
|
11
|
+
* Create and connect a daemon client
|
|
12
|
+
* Returns the connected client or throws if connection fails
|
|
13
|
+
*/
|
|
14
|
+
export declare function connectToDaemon(options?: ConnectOptions): Promise<DaemonClient>;
|
|
15
|
+
/**
|
|
16
|
+
* Try to connect to the daemon, returns null if connection fails
|
|
17
|
+
*/
|
|
18
|
+
export declare function tryConnectToDaemon(options?: ConnectOptions): Promise<DaemonClient | null>;
|
|
19
|
+
/** Minimal agent type for ID resolution */
|
|
20
|
+
interface AgentLike {
|
|
21
|
+
id: string;
|
|
22
|
+
title?: string | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve an agent ID from a partial ID or name.
|
|
26
|
+
* Supports:
|
|
27
|
+
* - Full ID match
|
|
28
|
+
* - Prefix match (first N characters)
|
|
29
|
+
* - Title/name match (case-insensitive)
|
|
30
|
+
*
|
|
31
|
+
* Returns the full agent ID if found, null otherwise.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveAgentId(idOrName: string, agents: AgentLike[]): string | null;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAIpD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAKD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAE9D;AAkBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAwCrF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM/F;AAED,2CAA2C;AAC3C,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI,CAsCnF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { DaemonClient } from '@junctionpanel/server';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import { getOrCreateCliClientId } from './client-id.js';
|
|
4
|
+
const DEFAULT_HOST = 'localhost:6767';
|
|
5
|
+
const DEFAULT_TIMEOUT = 5000;
|
|
6
|
+
/**
|
|
7
|
+
* Get the daemon host from environment or options
|
|
8
|
+
*/
|
|
9
|
+
export function getDaemonHost(options) {
|
|
10
|
+
return options?.host ?? process.env.JUNCTION_HOST ?? DEFAULT_HOST;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a WebSocket factory that works in Node.js
|
|
14
|
+
*/
|
|
15
|
+
function createNodeWebSocketFactory() {
|
|
16
|
+
return (url, options) => {
|
|
17
|
+
return new WebSocket(url, { headers: options?.headers });
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create and connect a daemon client
|
|
22
|
+
* Returns the connected client or throws if connection fails
|
|
23
|
+
*/
|
|
24
|
+
export async function connectToDaemon(options) {
|
|
25
|
+
const host = getDaemonHost(options);
|
|
26
|
+
const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
|
|
27
|
+
const clientId = await getOrCreateCliClientId();
|
|
28
|
+
const url = `ws://${host}/ws`;
|
|
29
|
+
const client = new DaemonClient({
|
|
30
|
+
url,
|
|
31
|
+
clientId,
|
|
32
|
+
clientType: 'cli',
|
|
33
|
+
webSocketFactory: createNodeWebSocketFactory(),
|
|
34
|
+
reconnect: { enabled: false },
|
|
35
|
+
});
|
|
36
|
+
// Connect with timeout
|
|
37
|
+
const connectPromise = client.connect();
|
|
38
|
+
let timeoutHandle = null;
|
|
39
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
40
|
+
timeoutHandle = setTimeout(() => {
|
|
41
|
+
reject(new Error(`Connection timeout after ${timeout}ms`));
|
|
42
|
+
}, timeout);
|
|
43
|
+
});
|
|
44
|
+
try {
|
|
45
|
+
await Promise.race([connectPromise, timeoutPromise]);
|
|
46
|
+
// Clear the timeout so it doesn't keep the event loop alive
|
|
47
|
+
if (timeoutHandle) {
|
|
48
|
+
clearTimeout(timeoutHandle);
|
|
49
|
+
}
|
|
50
|
+
return client;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
// Clear the timeout on error too
|
|
54
|
+
if (timeoutHandle) {
|
|
55
|
+
clearTimeout(timeoutHandle);
|
|
56
|
+
}
|
|
57
|
+
await client.close().catch(() => { });
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Try to connect to the daemon, returns null if connection fails
|
|
63
|
+
*/
|
|
64
|
+
export async function tryConnectToDaemon(options) {
|
|
65
|
+
try {
|
|
66
|
+
return await connectToDaemon(options);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolve an agent ID from a partial ID or name.
|
|
74
|
+
* Supports:
|
|
75
|
+
* - Full ID match
|
|
76
|
+
* - Prefix match (first N characters)
|
|
77
|
+
* - Title/name match (case-insensitive)
|
|
78
|
+
*
|
|
79
|
+
* Returns the full agent ID if found, null otherwise.
|
|
80
|
+
*/
|
|
81
|
+
export function resolveAgentId(idOrName, agents) {
|
|
82
|
+
if (!idOrName || agents.length === 0) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const query = idOrName.toLowerCase();
|
|
86
|
+
// Try exact ID match first
|
|
87
|
+
const exactMatch = agents.find((a) => a.id === idOrName);
|
|
88
|
+
if (exactMatch) {
|
|
89
|
+
return exactMatch.id;
|
|
90
|
+
}
|
|
91
|
+
// Try ID prefix match
|
|
92
|
+
const prefixMatches = agents.filter((a) => a.id.toLowerCase().startsWith(query));
|
|
93
|
+
if (prefixMatches.length === 1 && prefixMatches[0]) {
|
|
94
|
+
return prefixMatches[0].id;
|
|
95
|
+
}
|
|
96
|
+
// Try title/name match (case-insensitive)
|
|
97
|
+
const titleMatches = agents.filter((a) => a.title?.toLowerCase() === query);
|
|
98
|
+
if (titleMatches.length === 1 && titleMatches[0]) {
|
|
99
|
+
return titleMatches[0].id;
|
|
100
|
+
}
|
|
101
|
+
// Try partial title match
|
|
102
|
+
const partialTitleMatches = agents.filter((a) => a.title?.toLowerCase().includes(query));
|
|
103
|
+
if (partialTitleMatches.length === 1 && partialTitleMatches[0]) {
|
|
104
|
+
return partialTitleMatches[0].id;
|
|
105
|
+
}
|
|
106
|
+
// If we have multiple prefix matches and no unique title match, return first prefix match
|
|
107
|
+
const firstPrefixMatch = prefixMatches[0];
|
|
108
|
+
if (firstPrefixMatch) {
|
|
109
|
+
return firstPrefixMatch.id;
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentTimelineItem, DaemonClient } from '@junctionpanel/server';
|
|
2
|
+
type FetchProjectedTimelineItemsInput = {
|
|
3
|
+
client: DaemonClient;
|
|
4
|
+
agentId: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function fetchProjectedTimelineItems(input: FetchProjectedTimelineItemsInput): Promise<AgentTimelineItem[]>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/utils/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAE5E,KAAK,gCAAgC,GAAG;IACtC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export async function fetchProjectedTimelineItems(input) {
|
|
2
|
+
const timeline = await input.client.fetchAgentTimeline(input.agentId, {
|
|
3
|
+
direction: 'tail',
|
|
4
|
+
limit: 0,
|
|
5
|
+
projection: 'projected',
|
|
6
|
+
});
|
|
7
|
+
return timeline.entries.map((entry) => entry.item);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/utils/timeline.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAuC;IAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE;QACpE,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,WAAW;KACxB,CAAC,CAAA;IACF,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACpD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@junctionpanel/cli",
|
|
3
|
+
"version": "0.1.16",
|
|
4
|
+
"description": "Junction CLI - control your AI coding agents from the command line",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"types": "./dist/cli.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"bin",
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/cli.d.ts",
|
|
14
|
+
"default": [
|
|
15
|
+
"./dist/cli.js",
|
|
16
|
+
"./src/cli.ts"
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"./cli": {
|
|
20
|
+
"types": "./dist/cli.d.ts",
|
|
21
|
+
"default": [
|
|
22
|
+
"./dist/cli.js",
|
|
23
|
+
"./src/cli.ts"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"./daemon-only-cli": {
|
|
27
|
+
"types": "./dist/daemon-only-cli.d.ts",
|
|
28
|
+
"default": [
|
|
29
|
+
"./dist/daemon-only-cli.js",
|
|
30
|
+
"./src/daemon-only-cli.ts"
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"bin": {
|
|
38
|
+
"junction": "bin/junction",
|
|
39
|
+
"junction-daemon": "bin/junction-daemon"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@clack/prompts": "^1.0.0",
|
|
43
|
+
"chalk": "^5.3.0",
|
|
44
|
+
"commander": "^12.0.0",
|
|
45
|
+
"mime-types": "^2.1.35",
|
|
46
|
+
"ws": "^8.14.2",
|
|
47
|
+
"yaml": "^2.8.2",
|
|
48
|
+
"@junctionpanel/relay": "0.1.16",
|
|
49
|
+
"@junctionpanel/server": "0.1.16"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/mime-types": "^3.0.1",
|
|
53
|
+
"@types/ws": "^8.5.8",
|
|
54
|
+
"tsx": "^4.6.0",
|
|
55
|
+
"typescript": "^5.2.2",
|
|
56
|
+
"zx": "^8.8.5"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\" && tsc -p tsconfig.json --incremental false",
|
|
60
|
+
"typecheck": "tsc --noEmit",
|
|
61
|
+
"test": "pnpm run test:local",
|
|
62
|
+
"test:local": "tsx tests/run-all.ts",
|
|
63
|
+
"test:e2e": "pnpm run test:local",
|
|
64
|
+
"test:e2e:lifecycle": "pnpm exec tsx tests/e2e/agent-lifecycle.test.ts"
|
|
65
|
+
}
|
|
66
|
+
}
|