juno-code 1.0.12 → 1.0.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/README.md +11 -20
- package/dist/bin/cli.js +345 -255
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +345 -255
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/bin/feedback-collector.js.map +1 -1
- package/dist/bin/feedback-collector.mjs.map +1 -1
- package/dist/index.js +36 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -8
- package/dist/index.mjs.map +1 -1
- package/dist/templates/scripts/clean_logs_folder.sh +1 -1
- package/dist/templates/scripts/install_requirements.sh +154 -21
- package/package.json +5 -5
package/dist/bin/cli.js
CHANGED
|
@@ -154,7 +154,7 @@ var init_types = __esm({
|
|
|
154
154
|
if (availableCommands.length > 0) {
|
|
155
155
|
this.suggestions = [
|
|
156
156
|
`Available commands: ${availableCommands.join(", ")}`,
|
|
157
|
-
`Use 'juno-
|
|
157
|
+
`Use 'juno-code --help' for usage information`
|
|
158
158
|
];
|
|
159
159
|
}
|
|
160
160
|
}
|
|
@@ -188,7 +188,7 @@ var init_types = __esm({
|
|
|
188
188
|
this.suggestions = [
|
|
189
189
|
"Check session directory permissions",
|
|
190
190
|
"Verify sufficient disk space",
|
|
191
|
-
"Use juno-
|
|
191
|
+
"Use juno-code session clean to remove old sessions"
|
|
192
192
|
];
|
|
193
193
|
}
|
|
194
194
|
};
|
|
@@ -204,7 +204,35 @@ var init_types = __esm({
|
|
|
204
204
|
}
|
|
205
205
|
};
|
|
206
206
|
ENVIRONMENT_MAPPINGS = {
|
|
207
|
-
// Core options
|
|
207
|
+
// Core options (new JUNO_CODE_* names)
|
|
208
|
+
JUNO_CODE_SUBAGENT: "subagent",
|
|
209
|
+
JUNO_CODE_PROMPT: "prompt",
|
|
210
|
+
JUNO_CODE_CWD: "cwd",
|
|
211
|
+
JUNO_CODE_MAX_ITERATIONS: "maxIterations",
|
|
212
|
+
JUNO_CODE_MODEL: "model",
|
|
213
|
+
JUNO_CODE_LOG_FILE: "logFile",
|
|
214
|
+
JUNO_CODE_VERBOSE: "verbose",
|
|
215
|
+
JUNO_CODE_QUIET: "quiet",
|
|
216
|
+
JUNO_CODE_INTERACTIVE: "interactive",
|
|
217
|
+
JUNO_CODE_CONFIG: "config",
|
|
218
|
+
// MCP options (new JUNO_CODE_* names)
|
|
219
|
+
JUNO_CODE_MCP_SERVER_PATH: "mcpServerPath",
|
|
220
|
+
JUNO_CODE_MCP_TIMEOUT: "mcpTimeout",
|
|
221
|
+
JUNO_CODE_MCP_RETRIES: "mcpRetries",
|
|
222
|
+
// Session options (new JUNO_CODE_* names)
|
|
223
|
+
JUNO_CODE_SESSION_DIR: "sessionDir",
|
|
224
|
+
JUNO_CODE_LOG_LEVEL: "logLevel",
|
|
225
|
+
// Template options (new JUNO_CODE_* names)
|
|
226
|
+
JUNO_CODE_TEMPLATE: "template",
|
|
227
|
+
JUNO_CODE_FORCE: "force",
|
|
228
|
+
// Git options (new JUNO_CODE_* names)
|
|
229
|
+
JUNO_CODE_GIT_URL: "gitUrl",
|
|
230
|
+
// UI options (new JUNO_CODE_* names)
|
|
231
|
+
JUNO_CODE_NO_COLOR: "noColor",
|
|
232
|
+
JUNO_CODE_HEADLESS: "headless",
|
|
233
|
+
// Feedback options (new JUNO_CODE_* names)
|
|
234
|
+
JUNO_CODE_ENABLE_FEEDBACK: "enableFeedback",
|
|
235
|
+
// Legacy JUNO_TASK_* names for backward compatibility
|
|
208
236
|
JUNO_TASK_SUBAGENT: "subagent",
|
|
209
237
|
JUNO_TASK_PROMPT: "prompt",
|
|
210
238
|
JUNO_TASK_CWD: "cwd",
|
|
@@ -215,23 +243,18 @@ var init_types = __esm({
|
|
|
215
243
|
JUNO_TASK_QUIET: "quiet",
|
|
216
244
|
JUNO_TASK_INTERACTIVE: "interactive",
|
|
217
245
|
JUNO_TASK_CONFIG: "config",
|
|
218
|
-
// MCP options
|
|
219
246
|
JUNO_TASK_MCP_SERVER_PATH: "mcpServerPath",
|
|
220
247
|
JUNO_TASK_MCP_TIMEOUT: "mcpTimeout",
|
|
221
248
|
JUNO_TASK_MCP_RETRIES: "mcpRetries",
|
|
222
|
-
// Session options
|
|
223
249
|
JUNO_TASK_SESSION_DIR: "sessionDir",
|
|
224
250
|
JUNO_TASK_LOG_LEVEL: "logLevel",
|
|
225
|
-
// Template options
|
|
226
251
|
JUNO_TASK_TEMPLATE: "template",
|
|
227
252
|
JUNO_TASK_FORCE: "force",
|
|
228
|
-
// Git options
|
|
229
253
|
JUNO_TASK_GIT_URL: "gitUrl",
|
|
230
|
-
// UI options
|
|
231
254
|
JUNO_TASK_NO_COLOR: "noColor",
|
|
232
255
|
JUNO_TASK_HEADLESS: "headless",
|
|
233
|
-
// Feedback options
|
|
234
256
|
JUNO_TASK_ENABLE_FEEDBACK: "enableFeedback",
|
|
257
|
+
// Special aliases
|
|
235
258
|
JUNO_INTERACTIVE_FEEDBACK_MODE: "enableFeedback"
|
|
236
259
|
// Alias for enableFeedback
|
|
237
260
|
};
|
|
@@ -258,7 +281,7 @@ var init_types = __esm({
|
|
|
258
281
|
"cursor-agent": "cursor"
|
|
259
282
|
};
|
|
260
283
|
COMMAND_CATEGORIES = {
|
|
261
|
-
EXECUTION: ["juno-
|
|
284
|
+
EXECUTION: ["juno-code", "start"],
|
|
262
285
|
PROJECT: ["init", "setup-git"],
|
|
263
286
|
TESTING: ["test"],
|
|
264
287
|
SESSION: ["session"],
|
|
@@ -719,6 +742,7 @@ __export(config_exports, {
|
|
|
719
742
|
DEFAULT_CONFIG: () => DEFAULT_CONFIG,
|
|
720
743
|
ENV_VAR_MAPPING: () => ENV_VAR_MAPPING,
|
|
721
744
|
JunoTaskConfigSchema: () => JunoTaskConfigSchema,
|
|
745
|
+
LEGACY_ENV_VAR_MAPPING: () => LEGACY_ENV_VAR_MAPPING,
|
|
722
746
|
ProfileError: () => ProfileError,
|
|
723
747
|
ProfileExistsError: () => ProfileExistsError,
|
|
724
748
|
ProfileNotFoundError: () => ProfileNotFoundError,
|
|
@@ -750,6 +774,12 @@ function loadConfigFromEnv() {
|
|
|
750
774
|
config[configKey] = parseEnvValue(value);
|
|
751
775
|
}
|
|
752
776
|
}
|
|
777
|
+
for (const [envVar, configKey] of Object.entries(LEGACY_ENV_VAR_MAPPING)) {
|
|
778
|
+
const value = process.env[envVar];
|
|
779
|
+
if (value !== void 0 && config[configKey] === void 0) {
|
|
780
|
+
config[configKey] = parseEnvValue(value);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
753
783
|
return config;
|
|
754
784
|
}
|
|
755
785
|
async function loadJsonConfig(filePath) {
|
|
@@ -773,7 +803,7 @@ async function loadPackageJsonConfig(filePath) {
|
|
|
773
803
|
try {
|
|
774
804
|
const content = await nodeFs.promises.readFile(filePath, "utf-8");
|
|
775
805
|
const packageJson = JSON.parse(content);
|
|
776
|
-
return packageJson.
|
|
806
|
+
return packageJson.junoCode || {};
|
|
777
807
|
} catch (error) {
|
|
778
808
|
throw new Error(`Failed to load package.json config from ${filePath}: ${error}`);
|
|
779
809
|
}
|
|
@@ -902,13 +932,35 @@ async function loadConfig(options = {}) {
|
|
|
902
932
|
const mergedConfig = loader.merge();
|
|
903
933
|
return validateConfig(mergedConfig);
|
|
904
934
|
}
|
|
905
|
-
var ENV_VAR_MAPPING, SubagentTypeSchema, LogLevelSchema, HookTypeSchema, HookSchema, HooksSchema, JunoTaskConfigSchema, DEFAULT_CONFIG, GLOBAL_CONFIG_FILE_NAMES, PROJECT_CONFIG_FILE, ConfigLoader;
|
|
935
|
+
var ENV_VAR_MAPPING, LEGACY_ENV_VAR_MAPPING, SubagentTypeSchema, LogLevelSchema, HookTypeSchema, HookSchema, HooksSchema, JunoTaskConfigSchema, DEFAULT_CONFIG, GLOBAL_CONFIG_FILE_NAMES, PROJECT_CONFIG_FILE, ConfigLoader;
|
|
906
936
|
var init_config = __esm({
|
|
907
937
|
"src/core/config.ts"() {
|
|
908
938
|
init_version();
|
|
909
939
|
init_default_hooks();
|
|
910
940
|
init_profiles();
|
|
911
941
|
ENV_VAR_MAPPING = {
|
|
942
|
+
// Core settings
|
|
943
|
+
JUNO_CODE_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
944
|
+
JUNO_CODE_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
945
|
+
JUNO_CODE_DEFAULT_MODEL: "defaultModel",
|
|
946
|
+
// Logging settings
|
|
947
|
+
JUNO_CODE_LOG_LEVEL: "logLevel",
|
|
948
|
+
JUNO_CODE_LOG_FILE: "logFile",
|
|
949
|
+
JUNO_CODE_VERBOSE: "verbose",
|
|
950
|
+
JUNO_CODE_QUIET: "quiet",
|
|
951
|
+
// MCP settings
|
|
952
|
+
JUNO_CODE_MCP_TIMEOUT: "mcpTimeout",
|
|
953
|
+
JUNO_CODE_MCP_RETRIES: "mcpRetries",
|
|
954
|
+
JUNO_CODE_MCP_SERVER_PATH: "mcpServerPath",
|
|
955
|
+
JUNO_CODE_MCP_SERVER_NAME: "mcpServerName",
|
|
956
|
+
// TUI settings
|
|
957
|
+
JUNO_CODE_INTERACTIVE: "interactive",
|
|
958
|
+
JUNO_CODE_HEADLESS_MODE: "headlessMode",
|
|
959
|
+
// Paths
|
|
960
|
+
JUNO_CODE_WORKING_DIRECTORY: "workingDirectory",
|
|
961
|
+
JUNO_CODE_SESSION_DIRECTORY: "sessionDirectory"
|
|
962
|
+
};
|
|
963
|
+
LEGACY_ENV_VAR_MAPPING = {
|
|
912
964
|
// Core settings
|
|
913
965
|
JUNO_TASK_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
914
966
|
JUNO_TASK_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
@@ -985,12 +1037,12 @@ var init_config = __esm({
|
|
|
985
1037
|
hooks: getDefaultHooks()
|
|
986
1038
|
};
|
|
987
1039
|
GLOBAL_CONFIG_FILE_NAMES = [
|
|
988
|
-
"juno-
|
|
989
|
-
"juno-
|
|
990
|
-
".juno-
|
|
991
|
-
".juno-
|
|
1040
|
+
"juno-code.config.json",
|
|
1041
|
+
"juno-code.config.js",
|
|
1042
|
+
".juno-coderc.json",
|
|
1043
|
+
".juno-coderc.js",
|
|
992
1044
|
"package.json"
|
|
993
|
-
// Will look for '
|
|
1045
|
+
// Will look for 'junoCode' field
|
|
994
1046
|
];
|
|
995
1047
|
PROJECT_CONFIG_FILE = ".juno_task/config.json";
|
|
996
1048
|
ConfigLoader = class {
|
|
@@ -5975,8 +6027,8 @@ var init_concurrent_feedback_collector = __esm({
|
|
|
5975
6027
|
// Current feedback mode state
|
|
5976
6028
|
constructor(options = {}) {
|
|
5977
6029
|
this.options = {
|
|
5978
|
-
command: options.command || "juno-
|
|
5979
|
-
commandArgs: options.commandArgs || ["juno-
|
|
6030
|
+
command: options.command || "juno-code",
|
|
6031
|
+
commandArgs: options.commandArgs || ["juno-code", "feedback"],
|
|
5980
6032
|
verbose: options.verbose || false,
|
|
5981
6033
|
showHeader: options.showHeader !== void 0 ? options.showHeader : true,
|
|
5982
6034
|
progressInterval: options.progressInterval || 0,
|
|
@@ -6360,23 +6412,23 @@ var init_framework = __esm({
|
|
|
6360
6412
|
flags: "-v, --verbose",
|
|
6361
6413
|
description: "Enable verbose output with detailed progress",
|
|
6362
6414
|
defaultValue: false,
|
|
6363
|
-
env: "
|
|
6415
|
+
env: "JUNO_CODE_VERBOSE"
|
|
6364
6416
|
},
|
|
6365
6417
|
{
|
|
6366
6418
|
flags: "-q, --quiet",
|
|
6367
6419
|
description: "Disable rich formatting, use plain text",
|
|
6368
6420
|
defaultValue: false,
|
|
6369
|
-
env: "
|
|
6421
|
+
env: "JUNO_CODE_QUIET"
|
|
6370
6422
|
},
|
|
6371
6423
|
{
|
|
6372
6424
|
flags: "-c, --config <path>",
|
|
6373
6425
|
description: "Configuration file path (.json, .toml, pyproject.toml)",
|
|
6374
|
-
env: "
|
|
6426
|
+
env: "JUNO_CODE_CONFIG"
|
|
6375
6427
|
},
|
|
6376
6428
|
{
|
|
6377
6429
|
flags: "--log-file <path>",
|
|
6378
6430
|
description: "Log file path (auto-generated if not specified)",
|
|
6379
|
-
env: "
|
|
6431
|
+
env: "JUNO_CODE_LOG_FILE"
|
|
6380
6432
|
},
|
|
6381
6433
|
{
|
|
6382
6434
|
flags: "--no-color",
|
|
@@ -6387,24 +6439,24 @@ var init_framework = __esm({
|
|
|
6387
6439
|
description: "Log level for output (error, warn, info, debug, trace)",
|
|
6388
6440
|
defaultValue: "info",
|
|
6389
6441
|
choices: ["error", "warn", "info", "debug", "trace"],
|
|
6390
|
-
env: "
|
|
6442
|
+
env: "JUNO_CODE_LOG_LEVEL"
|
|
6391
6443
|
},
|
|
6392
6444
|
{
|
|
6393
6445
|
flags: "-s, --subagent <type>",
|
|
6394
6446
|
description: "Subagent to use",
|
|
6395
|
-
env: "
|
|
6447
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
6396
6448
|
},
|
|
6397
6449
|
{
|
|
6398
6450
|
flags: "--max-iterations <number>",
|
|
6399
6451
|
description: "Maximum iterations (-1 for unlimited)",
|
|
6400
6452
|
defaultValue: void 0,
|
|
6401
|
-
env: "
|
|
6453
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
6402
6454
|
},
|
|
6403
6455
|
{
|
|
6404
6456
|
flags: "--mcp-timeout <number>",
|
|
6405
6457
|
description: "MCP server timeout in milliseconds",
|
|
6406
6458
|
defaultValue: void 0,
|
|
6407
|
-
env: "
|
|
6459
|
+
env: "JUNO_CODE_MCP_TIMEOUT"
|
|
6408
6460
|
}
|
|
6409
6461
|
];
|
|
6410
6462
|
for (const option of this.globalOptions) {
|
|
@@ -6651,7 +6703,7 @@ ${helpText}
|
|
|
6651
6703
|
}
|
|
6652
6704
|
if (error.showHelp) {
|
|
6653
6705
|
console.error(chalk12__default.default.gray(`
|
|
6654
|
-
Use 'juno-
|
|
6706
|
+
Use 'juno-code ${commandName} --help' for usage information`));
|
|
6655
6707
|
}
|
|
6656
6708
|
const exitCode = Object.values(EXIT_CODES).includes(error.code) ? error.code : EXIT_CODES.UNEXPECTED_ERROR;
|
|
6657
6709
|
process.exit(exitCode);
|
|
@@ -6696,7 +6748,7 @@ ${helpText}
|
|
|
6696
6748
|
try {
|
|
6697
6749
|
await this.program.parseAsync(argv2);
|
|
6698
6750
|
} catch (error) {
|
|
6699
|
-
await this.handleCommandError(error, "juno-
|
|
6751
|
+
await this.handleCommandError(error, "juno-code", {});
|
|
6700
6752
|
}
|
|
6701
6753
|
}
|
|
6702
6754
|
/**
|
|
@@ -11202,7 +11254,7 @@ async function mainCommandHandler(args, options, command) {
|
|
|
11202
11254
|
`Invalid subagent: ${options.subagent}`,
|
|
11203
11255
|
[
|
|
11204
11256
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
11205
|
-
'Example: juno-
|
|
11257
|
+
'Example: juno-code claude "your prompt"',
|
|
11206
11258
|
"Use --help for more information"
|
|
11207
11259
|
]
|
|
11208
11260
|
);
|
|
@@ -11294,34 +11346,34 @@ function createMainCommand() {
|
|
|
11294
11346
|
description: "Subagent to use",
|
|
11295
11347
|
required: true,
|
|
11296
11348
|
choices: ["claude", "cursor", "codex", "gemini", "claude-code", "claude_code", "gemini-cli", "cursor-agent"],
|
|
11297
|
-
env: "
|
|
11349
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
11298
11350
|
}),
|
|
11299
11351
|
createOption({
|
|
11300
11352
|
flags: "-p, --prompt <text|file>",
|
|
11301
11353
|
description: "Prompt input (file path or inline text)",
|
|
11302
|
-
env: "
|
|
11354
|
+
env: "JUNO_CODE_PROMPT"
|
|
11303
11355
|
}),
|
|
11304
11356
|
createOption({
|
|
11305
11357
|
flags: "-w, --cwd <path>",
|
|
11306
11358
|
description: "Working directory",
|
|
11307
11359
|
defaultValue: process.cwd(),
|
|
11308
|
-
env: "
|
|
11360
|
+
env: "JUNO_CODE_CWD"
|
|
11309
11361
|
}),
|
|
11310
11362
|
createOption({
|
|
11311
11363
|
flags: "-i, --max-iterations <number>",
|
|
11312
11364
|
description: "Maximum iterations (-1 for unlimited)",
|
|
11313
|
-
env: "
|
|
11365
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
11314
11366
|
}),
|
|
11315
11367
|
createOption({
|
|
11316
11368
|
flags: "-m, --model <name>",
|
|
11317
11369
|
description: "Model to use (optional, subagent-specific)",
|
|
11318
|
-
env: "
|
|
11370
|
+
env: "JUNO_CODE_MODEL"
|
|
11319
11371
|
}),
|
|
11320
11372
|
createOption({
|
|
11321
11373
|
flags: "-I, --interactive",
|
|
11322
11374
|
description: "Interactive mode for typing/pasting prompts",
|
|
11323
11375
|
defaultValue: false,
|
|
11324
|
-
env: "
|
|
11376
|
+
env: "JUNO_CODE_INTERACTIVE"
|
|
11325
11377
|
}),
|
|
11326
11378
|
createOption({
|
|
11327
11379
|
flags: "--interactive-prompt",
|
|
@@ -11331,19 +11383,19 @@ function createMainCommand() {
|
|
|
11331
11383
|
],
|
|
11332
11384
|
examples: [
|
|
11333
11385
|
{
|
|
11334
|
-
command: 'juno-
|
|
11386
|
+
command: 'juno-code -s claude -p "Create a REST API"',
|
|
11335
11387
|
description: "Execute task with Claude using inline prompt"
|
|
11336
11388
|
},
|
|
11337
11389
|
{
|
|
11338
|
-
command: "juno-
|
|
11390
|
+
command: "juno-code -s cursor -p ./task.md -i 3",
|
|
11339
11391
|
description: "Execute task with Cursor using file prompt, max 3 iterations"
|
|
11340
11392
|
},
|
|
11341
11393
|
{
|
|
11342
|
-
command: "juno-
|
|
11394
|
+
command: "juno-code -s gemini --interactive",
|
|
11343
11395
|
description: "Use interactive mode to enter prompt"
|
|
11344
11396
|
},
|
|
11345
11397
|
{
|
|
11346
|
-
command: "juno-
|
|
11398
|
+
command: "juno-code -s claude --interactive-prompt",
|
|
11347
11399
|
description: "Use enhanced TUI prompt editor"
|
|
11348
11400
|
}
|
|
11349
11401
|
],
|
|
@@ -11383,10 +11435,10 @@ var init_main = __esm({
|
|
|
11383
11435
|
throw new ValidationError(
|
|
11384
11436
|
"Prompt is required for execution",
|
|
11385
11437
|
[
|
|
11386
|
-
'Provide prompt text: juno-
|
|
11387
|
-
"Use file input: juno-
|
|
11388
|
-
"Use interactive mode: juno-
|
|
11389
|
-
"Use TUI editor: juno-
|
|
11438
|
+
'Provide prompt text: juno-code claude "your prompt here"',
|
|
11439
|
+
"Use file input: juno-code claude prompt.txt",
|
|
11440
|
+
"Use interactive mode: juno-code claude --interactive",
|
|
11441
|
+
"Use TUI editor: juno-code claude --interactive-prompt",
|
|
11390
11442
|
"Create default prompt file: .juno_task/prompt.md"
|
|
11391
11443
|
]
|
|
11392
11444
|
);
|
|
@@ -11611,7 +11663,7 @@ var init_main = __esm({
|
|
|
11611
11663
|
this.enableFeedback = enableFeedback;
|
|
11612
11664
|
if (this.enableFeedback) {
|
|
11613
11665
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
11614
|
-
command: "juno-
|
|
11666
|
+
command: "juno-code",
|
|
11615
11667
|
commandArgs: ["feedback"],
|
|
11616
11668
|
verbose: this.config.verbose,
|
|
11617
11669
|
showHeader: true,
|
|
@@ -12089,7 +12141,7 @@ var SimpleInitTUI = class {
|
|
|
12089
12141
|
* Simplified gather method implementing the minimal flow
|
|
12090
12142
|
*/
|
|
12091
12143
|
async gather() {
|
|
12092
|
-
console.log(chalk12__default.default.blue.bold("\n\u{1F680} Juno
|
|
12144
|
+
console.log(chalk12__default.default.blue.bold("\n\u{1F680} Juno Code Project Initialization\n"));
|
|
12093
12145
|
console.log(chalk12__default.default.yellow("\u{1F4C1} Step 1: Project Directory"));
|
|
12094
12146
|
const targetDirectory = await this.promptForDirectory();
|
|
12095
12147
|
console.log(chalk12__default.default.yellow("\n\u{1F4DD} Step 2: Main Task"));
|
|
@@ -12501,7 +12553,7 @@ This directory contains detailed specifications for the project components.
|
|
|
12501
12553
|
|
|
12502
12554
|
## System Overview
|
|
12503
12555
|
|
|
12504
|
-
This project uses AI-assisted development with juno-
|
|
12556
|
+
This project uses AI-assisted development with juno-code to achieve: ${variables.TASK}
|
|
12505
12557
|
|
|
12506
12558
|
## Architectural Decisions
|
|
12507
12559
|
|
|
@@ -12524,7 +12576,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12524
12576
|
|
|
12525
12577
|
- **Language**: TypeScript
|
|
12526
12578
|
- **Runtime**: Node.js
|
|
12527
|
-
- **CLI**: juno-
|
|
12579
|
+
- **CLI**: juno-code with AI subagent integration
|
|
12528
12580
|
- **Version Control**: Git
|
|
12529
12581
|
- **Documentation**: Markdown-based
|
|
12530
12582
|
|
|
@@ -12583,7 +12635,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12583
12635
|
|
|
12584
12636
|
## Project Overview
|
|
12585
12637
|
|
|
12586
|
-
This project was initialized on ${variables.CURRENT_DATE} using juno-
|
|
12638
|
+
This project was initialized on ${variables.CURRENT_DATE} using juno-code.
|
|
12587
12639
|
|
|
12588
12640
|
**Main Task**: ${variables.TASK}
|
|
12589
12641
|
**Preferred Subagent**: ${variables.EDITOR}
|
|
@@ -12597,9 +12649,9 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12597
12649
|
- Use \`npm run test:binary\` for CLI testing
|
|
12598
12650
|
|
|
12599
12651
|
### Key Commands
|
|
12600
|
-
- \`juno-
|
|
12601
|
-
- \`juno-
|
|
12602
|
-
- \`juno-
|
|
12652
|
+
- \`juno-code start\` - Begin task execution
|
|
12653
|
+
- \`juno-code -s ${variables.EDITOR}\` - Quick execution with preferred subagent
|
|
12654
|
+
- \`juno-code feedback\` - Provide feedback on the process
|
|
12603
12655
|
|
|
12604
12656
|
## Project Structure
|
|
12605
12657
|
|
|
@@ -12721,27 +12773,27 @@ ${variables.DESCRIPTION}
|
|
|
12721
12773
|
|
|
12722
12774
|
## Overview
|
|
12723
12775
|
|
|
12724
|
-
This project uses juno-
|
|
12776
|
+
This project uses juno-code for AI-powered development with ${variables.EDITOR} as the primary AI subagent.
|
|
12725
12777
|
|
|
12726
12778
|
## Getting Started
|
|
12727
12779
|
|
|
12728
12780
|
### Prerequisites
|
|
12729
12781
|
|
|
12730
12782
|
- Node.js (v18 or higher)
|
|
12731
|
-
- juno-
|
|
12783
|
+
- juno-code CLI installed
|
|
12732
12784
|
- Git for version control
|
|
12733
12785
|
|
|
12734
12786
|
### Quick Start
|
|
12735
12787
|
|
|
12736
12788
|
\`\`\`bash
|
|
12737
12789
|
# Start task execution with production-ready AI instructions
|
|
12738
|
-
juno-
|
|
12790
|
+
juno-code start
|
|
12739
12791
|
|
|
12740
12792
|
# Or use main command with preferred subagent
|
|
12741
|
-
juno-
|
|
12793
|
+
juno-code -s ${variables.EDITOR}
|
|
12742
12794
|
|
|
12743
12795
|
# Provide feedback on the development process
|
|
12744
|
-
juno-
|
|
12796
|
+
juno-code feedback
|
|
12745
12797
|
\`\`\`
|
|
12746
12798
|
|
|
12747
12799
|
## Project Structure
|
|
@@ -12803,12 +12855,12 @@ ${variables.GIT_URL}` : ""}
|
|
|
12803
12855
|
1. **Review Task**: Check \`.juno_task/init.md\` for main task
|
|
12804
12856
|
2. **Check Plan**: Review \`.juno_task/plan.md\` for current priorities
|
|
12805
12857
|
3. **Track Implementation**: Follow \`.juno_task/implement.md\` for current implementation steps
|
|
12806
|
-
4. **Provide Feedback**: Use \`juno-
|
|
12858
|
+
4. **Provide Feedback**: Use \`juno-code feedback\` for issues or suggestions
|
|
12807
12859
|
5. **Monitor Progress**: Track AI development through \`.juno_task/prompt.md\`
|
|
12808
12860
|
|
|
12809
12861
|
---
|
|
12810
12862
|
|
|
12811
|
-
Created with juno-
|
|
12863
|
+
Created with juno-code on ${variables.CURRENT_DATE}
|
|
12812
12864
|
${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
12813
12865
|
`;
|
|
12814
12866
|
await fs__default.default.writeFile(path__namespace.join(targetDirectory, "README.md"), readmeContent);
|
|
@@ -13034,11 +13086,11 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
13034
13086
|
printNextSteps(targetDirectory, editor) {
|
|
13035
13087
|
console.log(chalk12__default.default.blue("\n\u{1F3AF} Next Steps:"));
|
|
13036
13088
|
console.log(chalk12__default.default.white(` cd ${targetDirectory}`));
|
|
13037
|
-
console.log(chalk12__default.default.white(" juno-
|
|
13038
|
-
console.log(chalk12__default.default.white(` juno-
|
|
13089
|
+
console.log(chalk12__default.default.white(" juno-code start # Start task execution"));
|
|
13090
|
+
console.log(chalk12__default.default.white(` juno-code -s ${editor} # Quick execution with ${editor}`));
|
|
13039
13091
|
console.log(chalk12__default.default.gray("\n\u{1F4A1} Tips:"));
|
|
13040
13092
|
console.log(chalk12__default.default.gray(" - Edit .juno_task/prompt.md to modify your main task"));
|
|
13041
|
-
console.log(chalk12__default.default.gray(' - Use "juno-
|
|
13093
|
+
console.log(chalk12__default.default.gray(' - Use "juno-code --help" to see all available commands'));
|
|
13042
13094
|
console.log(chalk12__default.default.gray(" - Run .juno_task/scripts/clean_logs_folder.sh to archive old logs"));
|
|
13043
13095
|
}
|
|
13044
13096
|
/**
|
|
@@ -13093,10 +13145,10 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
13093
13145
|
execSync("git add .", { cwd: targetDirectory, stdio: "ignore" });
|
|
13094
13146
|
const commitMessage = `Initial commit: ${this.context.task || "Project initialization"}
|
|
13095
13147
|
|
|
13096
|
-
\u{1F916} Generated with juno-
|
|
13148
|
+
\u{1F916} Generated with juno-code using ${this.context.subagent} subagent
|
|
13097
13149
|
\u{1F3AF} Main Task: ${this.context.task}
|
|
13098
13150
|
|
|
13099
|
-
\u{1F680} Generated with [juno-
|
|
13151
|
+
\u{1F680} Generated with [juno-code](https://github.com/owner/juno-code-ts)
|
|
13100
13152
|
|
|
13101
13153
|
Co-Authored-By: Claude <noreply@anthropic.com>`;
|
|
13102
13154
|
execSync(`git commit -m "${commitMessage}"`, {
|
|
@@ -13162,7 +13214,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13162
13214
|
try {
|
|
13163
13215
|
const globalOptions = command.parent?.opts() || {};
|
|
13164
13216
|
const allOptions2 = { ...options, ...globalOptions };
|
|
13165
|
-
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
13217
|
+
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - Simplified Initialization"));
|
|
13166
13218
|
let context;
|
|
13167
13219
|
const shouldUseInteractive = options.interactive || !options.task && !process.env.CI || process.env.FORCE_INTERACTIVE === "1";
|
|
13168
13220
|
if (shouldUseInteractive) {
|
|
@@ -13203,7 +13255,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13203
13255
|
}
|
|
13204
13256
|
}
|
|
13205
13257
|
function configureInitCommand(program) {
|
|
13206
|
-
program.command("init").description("Initialize new juno-
|
|
13258
|
+
program.command("init").description("Initialize new juno-code project with simple setup").argument("[directory]", "Target directory (default: current directory)").option("-f, --force", "Force overwrite existing files").option("-t, --task <description>", "Main task description").option("-g, --git-url <url>", "Git repository URL").option("-i, --interactive", "Launch simple interactive setup").action(async (directory, options, command) => {
|
|
13207
13259
|
const initOptions = {
|
|
13208
13260
|
directory,
|
|
13209
13261
|
force: options.force,
|
|
@@ -13221,9 +13273,9 @@ function configureInitCommand(program) {
|
|
|
13221
13273
|
await initCommandHandler([], initOptions, command);
|
|
13222
13274
|
}).addHelpText("after", `
|
|
13223
13275
|
Examples:
|
|
13224
|
-
$ juno-
|
|
13225
|
-
$ juno-
|
|
13226
|
-
$ juno-
|
|
13276
|
+
$ juno-code init # Initialize in current directory
|
|
13277
|
+
$ juno-code init my-project # Initialize in ./my-project
|
|
13278
|
+
$ juno-code init --interactive # Use simple interactive setup
|
|
13227
13279
|
|
|
13228
13280
|
Simplified Interactive Flow:
|
|
13229
13281
|
1. Project Root \u2192 Specify target directory
|
|
@@ -14996,7 +15048,7 @@ var ProjectContextLoader = class {
|
|
|
14996
15048
|
const junoTaskDir = path__namespace.join(this.directory, ".juno_task");
|
|
14997
15049
|
if (!await fs__default.default.pathExists(junoTaskDir)) {
|
|
14998
15050
|
throw new FileSystemError(
|
|
14999
|
-
'No .juno_task directory found. Run "juno-
|
|
15051
|
+
'No .juno_task directory found. Run "juno-code init" first.',
|
|
15000
15052
|
junoTaskDir
|
|
15001
15053
|
);
|
|
15002
15054
|
}
|
|
@@ -15065,7 +15117,7 @@ var ExecutionCoordinator = class {
|
|
|
15065
15117
|
this.sessionManager = await createSessionManager(this.config);
|
|
15066
15118
|
if (this.enableFeedback) {
|
|
15067
15119
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
15068
|
-
command: "juno-
|
|
15120
|
+
command: "juno-code",
|
|
15069
15121
|
commandArgs: ["feedback"],
|
|
15070
15122
|
verbose: this.config.verbose,
|
|
15071
15123
|
showHeader: true,
|
|
@@ -15213,7 +15265,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15213
15265
|
try {
|
|
15214
15266
|
const globalOptions = command.parent?.opts() || {};
|
|
15215
15267
|
const allOptions2 = { ...globalOptions, ...options };
|
|
15216
|
-
writeTerminalProgress(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
15268
|
+
writeTerminalProgress(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - Start Execution") + "\n");
|
|
15217
15269
|
const logLevel = allOptions2.logLevel ? LogLevel[allOptions2.logLevel.toUpperCase()] : 2 /* INFO */;
|
|
15218
15270
|
cliLogger.startTimer("start_command_total");
|
|
15219
15271
|
cliLogger.info("Starting execution command", { options: allOptions2, directory: allOptions2.directory || process.cwd() });
|
|
@@ -15263,7 +15315,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15263
15315
|
`Invalid subagent: ${allOptions2.subagent}`,
|
|
15264
15316
|
[
|
|
15265
15317
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
15266
|
-
"Run `juno-
|
|
15318
|
+
"Run `juno-code help start` for examples"
|
|
15267
15319
|
]
|
|
15268
15320
|
);
|
|
15269
15321
|
}
|
|
@@ -15305,7 +15357,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15305
15357
|
if (sessionId) {
|
|
15306
15358
|
writeTerminalProgress(chalk12__default.default.blue(`
|
|
15307
15359
|
\u{1F4C1} Session ID: ${sessionId}`) + "\n");
|
|
15308
|
-
writeTerminalProgress(chalk12__default.default.gray(' Use "juno-
|
|
15360
|
+
writeTerminalProgress(chalk12__default.default.gray(' Use "juno-code session info ' + sessionId + '" for detailed information') + "\n");
|
|
15309
15361
|
sessionLogger.info("Session completed", {
|
|
15310
15362
|
sessionId,
|
|
15311
15363
|
status: result.status,
|
|
@@ -15372,20 +15424,20 @@ function configureStartCommand(program) {
|
|
|
15372
15424
|
await startCommandHandler([], options, command);
|
|
15373
15425
|
}).addHelpText("after", `
|
|
15374
15426
|
Examples:
|
|
15375
|
-
$ juno-
|
|
15376
|
-
$ juno-
|
|
15377
|
-
$ juno-
|
|
15378
|
-
$ juno-
|
|
15379
|
-
$ juno-
|
|
15380
|
-
$ juno-
|
|
15381
|
-
$ juno-
|
|
15382
|
-
$ juno-
|
|
15383
|
-
$ juno-
|
|
15384
|
-
$ juno-
|
|
15385
|
-
$ juno-
|
|
15386
|
-
$ juno-
|
|
15387
|
-
$ juno-
|
|
15388
|
-
$ juno-
|
|
15427
|
+
$ juno-code start # Start execution in current directory
|
|
15428
|
+
$ juno-code start -s claude # Use claude subagent
|
|
15429
|
+
$ juno-code start --subagent cursor # Use cursor subagent
|
|
15430
|
+
$ juno-code start -s codex --max-iterations 10 # Use codex with 10 iterations
|
|
15431
|
+
$ juno-code start --model sonnet-4 # Use specific model
|
|
15432
|
+
$ juno-code start --directory ./my-project # Execute in specific directory
|
|
15433
|
+
$ juno-code start --enable-feedback # Enable feedback collection while running
|
|
15434
|
+
$ juno-code start --verbose # Show detailed progress
|
|
15435
|
+
$ juno-code start --quiet # Minimize output
|
|
15436
|
+
$ juno-code start --show-metrics # Display performance summary
|
|
15437
|
+
$ juno-code start --show-dashboard # Interactive performance dashboard
|
|
15438
|
+
$ juno-code start --show-trends # Show historical performance trends
|
|
15439
|
+
$ juno-code start --save-metrics # Save metrics to .juno_task/metrics.json
|
|
15440
|
+
$ juno-code start --save-metrics custom.json # Save metrics to custom file
|
|
15389
15441
|
|
|
15390
15442
|
Feedback Collection:
|
|
15391
15443
|
--enable-feedback Enable concurrent feedback collection
|
|
@@ -15401,13 +15453,13 @@ Performance Options:
|
|
|
15401
15453
|
--metrics-file <path> Custom metrics file path
|
|
15402
15454
|
|
|
15403
15455
|
Environment Variables:
|
|
15404
|
-
|
|
15405
|
-
|
|
15406
|
-
|
|
15407
|
-
|
|
15456
|
+
JUNO_CODE_MAX_ITERATIONS Default maximum iterations
|
|
15457
|
+
JUNO_CODE_MODEL Default model to use
|
|
15458
|
+
JUNO_CODE_MCP_SERVER_PATH Path to MCP server executable
|
|
15459
|
+
JUNO_CODE_MCP_TIMEOUT MCP operation timeout (ms)
|
|
15408
15460
|
|
|
15409
15461
|
Notes:
|
|
15410
|
-
- Requires .juno_task/init.md file (created by 'juno-
|
|
15462
|
+
- Requires .juno_task/init.md file (created by 'juno-code init')
|
|
15411
15463
|
- Creates a new session for tracking execution
|
|
15412
15464
|
- Progress is displayed in real-time
|
|
15413
15465
|
- Performance metrics are collected automatically
|
|
@@ -16473,18 +16525,18 @@ function configureTestCommand(program) {
|
|
|
16473
16525
|
await testCommandHandler(target, testOptions, command);
|
|
16474
16526
|
}).addHelpText("after", `
|
|
16475
16527
|
Examples:
|
|
16476
|
-
$ juno-
|
|
16477
|
-
$ juno-
|
|
16478
|
-
$ juno-
|
|
16479
|
-
$ juno-
|
|
16480
|
-
$ juno-
|
|
16481
|
-
$ juno-
|
|
16482
|
-
$ juno-
|
|
16483
|
-
$ juno-
|
|
16484
|
-
$ juno-
|
|
16485
|
-
$ juno-
|
|
16486
|
-
$ juno-
|
|
16487
|
-
$ juno-
|
|
16528
|
+
$ juno-code test --generate # Generate tests for current project
|
|
16529
|
+
$ juno-code test --run # Run existing tests
|
|
16530
|
+
$ juno-code test --generate --run # Generate and run tests
|
|
16531
|
+
$ juno-code test src/utils.ts --generate # Generate tests for specific file
|
|
16532
|
+
$ juno-code test --type unit --intelligence smart # Generate smart unit tests
|
|
16533
|
+
$ juno-code test --subagent cursor --generate # Use Cursor for test generation
|
|
16534
|
+
$ juno-code test --run --coverage # Run tests with coverage
|
|
16535
|
+
$ juno-code test --analyze --quality thorough # Analyze test quality thoroughly
|
|
16536
|
+
$ juno-code test --report --format html # Generate HTML report
|
|
16537
|
+
$ juno-code test --framework jest --generate # Generate Jest tests
|
|
16538
|
+
$ juno-code test --template api-integration # Use specific template
|
|
16539
|
+
$ juno-code test --watch # Run tests in watch mode
|
|
16488
16540
|
|
|
16489
16541
|
Test Types:
|
|
16490
16542
|
unit Unit tests for individual functions/classes
|
|
@@ -17056,7 +17108,7 @@ function getFeedbackFile(options) {
|
|
|
17056
17108
|
return options.file || path__namespace.join(process.cwd(), ".juno_task", "USER_FEEDBACK.md");
|
|
17057
17109
|
}
|
|
17058
17110
|
function configureFeedbackCommand(program) {
|
|
17059
|
-
program.command("feedback").description("Submit feedback about juno-
|
|
17111
|
+
program.command("feedback").description("Submit feedback about juno-code (enhanced interface)").argument("[feedback...]", "Feedback text or issue description").option("-f, --file <path>", "Feedback file path (default: .juno_task/USER_FEEDBACK.md)").option("--interactive", "Launch simple interactive feedback form").option("-is, --issue <description>", "Issue description").option("-d, --detail <description>", "Issue description (alternative form)").option("--details <description>", "Issue description (alternative form)").option("--description <description>", "Issue description (alternative form)").option("-t, --test <criteria>", "Test criteria or success factors").option("-tc, --test-criteria <criteria>", "Test criteria or success factors (alternative form)").action(async (feedback, options, command) => {
|
|
17060
17112
|
const feedbackOptions = {
|
|
17061
17113
|
file: options.file,
|
|
17062
17114
|
interactive: options.interactive,
|
|
@@ -17077,18 +17129,18 @@ function configureFeedbackCommand(program) {
|
|
|
17077
17129
|
await feedbackCommandHandler(args, feedbackOptions);
|
|
17078
17130
|
}).addHelpText("after", `
|
|
17079
17131
|
Examples:
|
|
17080
|
-
$ juno-
|
|
17081
|
-
$ juno-
|
|
17082
|
-
$ juno-
|
|
17083
|
-
$ juno-
|
|
17084
|
-
$ juno-
|
|
17085
|
-
$ juno-
|
|
17086
|
-
$ juno-
|
|
17087
|
-
$ juno-
|
|
17088
|
-
$ juno-
|
|
17089
|
-
$ juno-
|
|
17090
|
-
$ juno-
|
|
17091
|
-
$ juno-
|
|
17132
|
+
$ juno-code feedback # Interactive feedback form
|
|
17133
|
+
$ juno-code feedback "Issue with command" # Direct feedback text
|
|
17134
|
+
$ juno-code feedback --interactive # Use interactive form
|
|
17135
|
+
$ juno-code feedback --issue "Bug description" --test "Should work without errors" # Issue with test criteria
|
|
17136
|
+
$ juno-code feedback -is "Connection timeout" -t "Connect within 30 seconds" # Short form flags
|
|
17137
|
+
$ juno-code feedback -is "UI issue" -tc "Should be intuitive" # Alternative short form
|
|
17138
|
+
$ juno-code feedback --detail "Bug description" --test "Should work without errors" # Issue with test criteria
|
|
17139
|
+
$ juno-code feedback -d "Connection timeout" -t "Connect within 30 seconds" # Short form flags
|
|
17140
|
+
$ juno-code feedback --description "UI issue" --test "Should be intuitive" # Alternative form
|
|
17141
|
+
$ juno-code feedback archive # Archive resolved issues to keep file lean
|
|
17142
|
+
$ juno-code feedback compact # Compact CLAUDE.md and AGENTS.md
|
|
17143
|
+
$ juno-code feedback compact CLAUDE.md # Compact specific file
|
|
17092
17144
|
|
|
17093
17145
|
Enhanced Features:
|
|
17094
17146
|
1. Issue Description \u2192 Structured feedback with optional test criteria
|
|
@@ -17130,7 +17182,7 @@ async function handleCompactCommand(subArgs, options) {
|
|
|
17130
17182
|
if (filesToCompact.length === 0) {
|
|
17131
17183
|
console.log(chalk12__default.default.yellow("\u{1F4C4} No config files found to compact"));
|
|
17132
17184
|
console.log(chalk12__default.default.gray(" Looking for: CLAUDE.md, AGENTS.md"));
|
|
17133
|
-
console.log(chalk12__default.default.gray(" Usage: juno-
|
|
17185
|
+
console.log(chalk12__default.default.gray(" Usage: juno-code feedback compact [file1] [file2]"));
|
|
17134
17186
|
return;
|
|
17135
17187
|
}
|
|
17136
17188
|
console.log(chalk12__default.default.blue.bold("\n\u{1F5DC}\uFE0F File Compaction Process\n"));
|
|
@@ -17237,7 +17289,7 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17237
17289
|
if (!issueText.trim()) {
|
|
17238
17290
|
throw new ValidationError(
|
|
17239
17291
|
"Issue description is required when using --issue/-is/--detail/--description or --test/-tc flags",
|
|
17240
|
-
['Use: juno-
|
|
17292
|
+
['Use: juno-code feedback -is "Issue description" -t "Test criteria" or -tc "Test criteria"']
|
|
17241
17293
|
);
|
|
17242
17294
|
}
|
|
17243
17295
|
const feedbackFile = getFeedbackFile(options);
|
|
@@ -17287,10 +17339,10 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17287
17339
|
} else {
|
|
17288
17340
|
console.log(chalk12__default.default.yellow("Use --interactive mode, --issue/-is/--detail/--description flag, or provide feedback text"));
|
|
17289
17341
|
console.log(chalk12__default.default.gray("Examples:"));
|
|
17290
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17291
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17292
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17293
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17342
|
+
console.log(chalk12__default.default.gray(' juno-code feedback --issue "Bug description"'));
|
|
17343
|
+
console.log(chalk12__default.default.gray(' juno-code feedback -is "Issue" -t "Test criteria"'));
|
|
17344
|
+
console.log(chalk12__default.default.gray(' juno-code feedback --detail "Bug description"'));
|
|
17345
|
+
console.log(chalk12__default.default.gray(' juno-code feedback -d "Issue" -t "Test criteria"'));
|
|
17294
17346
|
}
|
|
17295
17347
|
break;
|
|
17296
17348
|
}
|
|
@@ -17548,14 +17600,14 @@ async function handleSessionInfo(args, options, sessionManager) {
|
|
|
17548
17600
|
const sessionId = args[0];
|
|
17549
17601
|
if (!sessionId) {
|
|
17550
17602
|
console.log(chalk12__default.default.red("Session ID is required"));
|
|
17551
|
-
console.log(chalk12__default.default.gray("Usage: juno-
|
|
17552
|
-
console.log(chalk12__default.default.gray('Use "juno-
|
|
17603
|
+
console.log(chalk12__default.default.gray("Usage: juno-code session info <session-id>"));
|
|
17604
|
+
console.log(chalk12__default.default.gray('Use "juno-code session list" to see available sessions'));
|
|
17553
17605
|
return;
|
|
17554
17606
|
}
|
|
17555
17607
|
const session = await sessionManager.getSession(sessionId);
|
|
17556
17608
|
if (!session) {
|
|
17557
17609
|
console.log(chalk12__default.default.red(`Session not found: ${sessionId}`));
|
|
17558
|
-
console.log(chalk12__default.default.gray('Use "juno-
|
|
17610
|
+
console.log(chalk12__default.default.gray('Use "juno-code session list" to see available sessions'));
|
|
17559
17611
|
return;
|
|
17560
17612
|
}
|
|
17561
17613
|
const formatter = new SessionDisplayFormatter(options.verbose);
|
|
@@ -17565,7 +17617,7 @@ async function handleSessionRemove(args, options, sessionManager) {
|
|
|
17565
17617
|
const sessionIds = args;
|
|
17566
17618
|
if (sessionIds.length === 0) {
|
|
17567
17619
|
console.log(chalk12__default.default.red("At least one session ID is required"));
|
|
17568
|
-
console.log(chalk12__default.default.gray("Usage: juno-
|
|
17620
|
+
console.log(chalk12__default.default.gray("Usage: juno-code session remove <session-id> [session-id...]"));
|
|
17569
17621
|
process.exit(1);
|
|
17570
17622
|
}
|
|
17571
17623
|
let successCount = 0;
|
|
@@ -17694,15 +17746,15 @@ Subcommands:
|
|
|
17694
17746
|
clean, cleanup Clean up old/empty sessions
|
|
17695
17747
|
|
|
17696
17748
|
Examples:
|
|
17697
|
-
$ juno-
|
|
17698
|
-
$ juno-
|
|
17699
|
-
$ juno-
|
|
17700
|
-
$ juno-
|
|
17701
|
-
$ juno-
|
|
17702
|
-
$ juno-
|
|
17703
|
-
$ juno-
|
|
17704
|
-
$ juno-
|
|
17705
|
-
$ juno-
|
|
17749
|
+
$ juno-code session # List all sessions
|
|
17750
|
+
$ juno-code session list --limit 10 # Show 10 most recent
|
|
17751
|
+
$ juno-code session list --subagent claude # Filter by subagent
|
|
17752
|
+
$ juno-code session list --status completed failed # Filter by status
|
|
17753
|
+
$ juno-code session info abc123 # Show session details
|
|
17754
|
+
$ juno-code session remove abc123 def456 # Remove sessions
|
|
17755
|
+
$ juno-code session remove abc123 --force # Skip confirmation
|
|
17756
|
+
$ juno-code session clean --days 30 # Remove sessions >30 days
|
|
17757
|
+
$ juno-code session clean --empty --force # Remove empty sessions
|
|
17706
17758
|
|
|
17707
17759
|
Environment Variables:
|
|
17708
17760
|
JUNO_TASK_SESSION_DIR Session storage directory
|
|
@@ -17999,7 +18051,7 @@ var GitManager = class {
|
|
|
17999
18051
|
/**
|
|
18000
18052
|
* Create initial commit
|
|
18001
18053
|
*/
|
|
18002
|
-
async createInitialCommit(message = "Initial commit - juno-
|
|
18054
|
+
async createInitialCommit(message = "Initial commit - juno-code project setup") {
|
|
18003
18055
|
try {
|
|
18004
18056
|
const { execa: execa2 } = await import('execa');
|
|
18005
18057
|
await execa2("git", ["add", "."], { cwd: this.workingDirectory });
|
|
@@ -18084,7 +18136,7 @@ GIT_URL: ${gitUrl}
|
|
|
18084
18136
|
}
|
|
18085
18137
|
await fs__default.default.writeFile(configPath, content, "utf-8");
|
|
18086
18138
|
} catch (error) {
|
|
18087
|
-
console.warn(`Warning: Failed to update juno-
|
|
18139
|
+
console.warn(`Warning: Failed to update juno-code configuration: ${error}`);
|
|
18088
18140
|
}
|
|
18089
18141
|
}
|
|
18090
18142
|
/**
|
|
@@ -18379,7 +18431,7 @@ var GitDisplayFormatter = class {
|
|
|
18379
18431
|
console.log(chalk12__default.default.gray(` git push -u origin ${info.currentBranch || "main"}`));
|
|
18380
18432
|
}
|
|
18381
18433
|
console.log(" 3. Start working on your project:");
|
|
18382
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
18434
|
+
console.log(chalk12__default.default.gray(" juno-code start"));
|
|
18383
18435
|
}
|
|
18384
18436
|
formatStatus(status) {
|
|
18385
18437
|
const statusColors = {
|
|
@@ -18494,7 +18546,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18494
18546
|
console.log(` Web URL: ${chalk12__default.default.blue(webUrl)}`);
|
|
18495
18547
|
} else {
|
|
18496
18548
|
console.log(chalk12__default.default.yellow("\n\u{1F517} No upstream repository configured"));
|
|
18497
|
-
console.log(chalk12__default.default.gray(" Use: juno-
|
|
18549
|
+
console.log(chalk12__default.default.gray(" Use: juno-code setup-git <url> to configure"));
|
|
18498
18550
|
}
|
|
18499
18551
|
return;
|
|
18500
18552
|
}
|
|
@@ -18502,7 +18554,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18502
18554
|
const info = await gitManager.getRepositoryInfo();
|
|
18503
18555
|
if (!info.isRepository) {
|
|
18504
18556
|
console.log(chalk12__default.default.yellow("\u274C Not a Git repository"));
|
|
18505
|
-
console.log(chalk12__default.default.gray(" Initialize with: juno-
|
|
18557
|
+
console.log(chalk12__default.default.gray(" Initialize with: juno-code setup-git --init"));
|
|
18506
18558
|
return;
|
|
18507
18559
|
}
|
|
18508
18560
|
const upstreamConfig = await gitManager.getUpstreamConfig();
|
|
@@ -18607,10 +18659,10 @@ function configureSetupGitCommand(program) {
|
|
|
18607
18659
|
await setupGitCommandHandler(args, options);
|
|
18608
18660
|
}).addHelpText("after", `
|
|
18609
18661
|
Examples:
|
|
18610
|
-
$ juno-
|
|
18611
|
-
$ juno-
|
|
18612
|
-
$ juno-
|
|
18613
|
-
$ juno-
|
|
18662
|
+
$ juno-code setup-git # Interactive setup
|
|
18663
|
+
$ juno-code setup-git https://github.com/owner/repo # Set specific URL
|
|
18664
|
+
$ juno-code setup-git --show # Show current config
|
|
18665
|
+
$ juno-code setup-git --remove # Remove upstream URL
|
|
18614
18666
|
|
|
18615
18667
|
Git URL Examples:
|
|
18616
18668
|
https://github.com/owner/repo.git # GitHub HTTPS
|
|
@@ -19262,16 +19314,16 @@ function configureLogsCommand(program) {
|
|
|
19262
19314
|
await logsCommandHandler([], options);
|
|
19263
19315
|
}).addHelpText("after", `
|
|
19264
19316
|
Examples:
|
|
19265
|
-
$ juno-
|
|
19266
|
-
$ juno-
|
|
19267
|
-
$ juno-
|
|
19268
|
-
$ juno-
|
|
19269
|
-
$ juno-
|
|
19270
|
-
$ juno-
|
|
19271
|
-
$ juno-
|
|
19272
|
-
$ juno-
|
|
19273
|
-
$ juno-
|
|
19274
|
-
$ juno-
|
|
19317
|
+
$ juno-code logs # Show recent logs
|
|
19318
|
+
$ juno-code logs --interactive # Interactive log viewer
|
|
19319
|
+
$ juno-code logs --level error # Show only errors
|
|
19320
|
+
$ juno-code logs --context mcp # Show only MCP logs
|
|
19321
|
+
$ juno-code logs --search "connection" # Search for connection logs
|
|
19322
|
+
$ juno-code logs --tail 100 # Show last 100 entries
|
|
19323
|
+
$ juno-code logs --follow # Follow logs in real-time
|
|
19324
|
+
$ juno-code logs --export logs.json # Export logs to file
|
|
19325
|
+
$ juno-code logs --stats # Show statistics only
|
|
19326
|
+
$ juno-code logs --format json # JSON output format
|
|
19275
19327
|
|
|
19276
19328
|
Interactive Viewer:
|
|
19277
19329
|
\u2191\u2193 or j/k Navigate entries
|
|
@@ -19952,22 +20004,22 @@ var QUICK_REFERENCE = [
|
|
|
19952
20004
|
{
|
|
19953
20005
|
name: "init",
|
|
19954
20006
|
description: "Initialize new project",
|
|
19955
|
-
usage: "juno-
|
|
20007
|
+
usage: "juno-code init [--interactive]"
|
|
19956
20008
|
},
|
|
19957
20009
|
{
|
|
19958
20010
|
name: "start",
|
|
19959
20011
|
description: "Execute task",
|
|
19960
|
-
usage: "juno-
|
|
20012
|
+
usage: "juno-code start [--max-iterations N]"
|
|
19961
20013
|
},
|
|
19962
20014
|
{
|
|
19963
20015
|
name: "logs",
|
|
19964
20016
|
description: "View application logs",
|
|
19965
|
-
usage: "juno-
|
|
20017
|
+
usage: "juno-code logs [--interactive]"
|
|
19966
20018
|
},
|
|
19967
20019
|
{
|
|
19968
20020
|
name: "session",
|
|
19969
20021
|
description: "Manage execution sessions",
|
|
19970
|
-
usage: "juno-
|
|
20022
|
+
usage: "juno-code session <list|info|remove>"
|
|
19971
20023
|
}
|
|
19972
20024
|
]
|
|
19973
20025
|
},
|
|
@@ -19977,22 +20029,22 @@ var QUICK_REFERENCE = [
|
|
|
19977
20029
|
{
|
|
19978
20030
|
name: "claude",
|
|
19979
20031
|
description: "Execute with Claude subagent",
|
|
19980
|
-
usage: 'juno-
|
|
20032
|
+
usage: 'juno-code claude "task description"'
|
|
19981
20033
|
},
|
|
19982
20034
|
{
|
|
19983
20035
|
name: "cursor",
|
|
19984
20036
|
description: "Execute with Cursor subagent",
|
|
19985
|
-
usage: 'juno-
|
|
20037
|
+
usage: 'juno-code cursor "task description"'
|
|
19986
20038
|
},
|
|
19987
20039
|
{
|
|
19988
20040
|
name: "codex",
|
|
19989
20041
|
description: "Execute with Codex subagent",
|
|
19990
|
-
usage: 'juno-
|
|
20042
|
+
usage: 'juno-code codex "task description"'
|
|
19991
20043
|
},
|
|
19992
20044
|
{
|
|
19993
20045
|
name: "gemini",
|
|
19994
20046
|
description: "Execute with Gemini subagent",
|
|
19995
|
-
usage: 'juno-
|
|
20047
|
+
usage: 'juno-code gemini "task description"'
|
|
19996
20048
|
}
|
|
19997
20049
|
]
|
|
19998
20050
|
},
|
|
@@ -20002,22 +20054,22 @@ var QUICK_REFERENCE = [
|
|
|
20002
20054
|
{
|
|
20003
20055
|
name: "feedback",
|
|
20004
20056
|
description: "Collect user feedback",
|
|
20005
|
-
usage: "juno-
|
|
20057
|
+
usage: "juno-code feedback [--interactive]"
|
|
20006
20058
|
},
|
|
20007
20059
|
{
|
|
20008
20060
|
name: "setup-git",
|
|
20009
20061
|
description: "Initialize Git repository",
|
|
20010
|
-
usage: "juno-
|
|
20062
|
+
usage: "juno-code setup-git <repository-url>"
|
|
20011
20063
|
},
|
|
20012
20064
|
{
|
|
20013
20065
|
name: "completion",
|
|
20014
20066
|
description: "Shell completion setup",
|
|
20015
|
-
usage: "juno-
|
|
20067
|
+
usage: "juno-code completion <install|uninstall>"
|
|
20016
20068
|
},
|
|
20017
20069
|
{
|
|
20018
20070
|
name: "help",
|
|
20019
20071
|
description: "Show help information",
|
|
20020
|
-
usage: "juno-
|
|
20072
|
+
usage: "juno-code help [--interactive]"
|
|
20021
20073
|
}
|
|
20022
20074
|
]
|
|
20023
20075
|
}
|
|
@@ -20036,15 +20088,15 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
20036
20088
|
|
|
20037
20089
|
**Solutions**:
|
|
20038
20090
|
1. Install MCP server (e.g., roundtable-mcp-server)
|
|
20039
|
-
2. Check configuration: \`juno-
|
|
20091
|
+
2. Check configuration: \`juno-code init --interactive\`
|
|
20040
20092
|
3. Verify server path: \`which roundtable-mcp-server\`
|
|
20041
|
-
4. Test connection: \`juno-
|
|
20093
|
+
4. Test connection: \`juno-code start --verbose\`
|
|
20042
20094
|
|
|
20043
20095
|
### \u{1F4C1} File System Issues
|
|
20044
20096
|
|
|
20045
20097
|
**Issue**: "init.md not found"
|
|
20046
20098
|
**Cause**: No project initialized in current directory
|
|
20047
|
-
**Solution**: Run \`juno-
|
|
20099
|
+
**Solution**: Run \`juno-code init\` to create project structure
|
|
20048
20100
|
|
|
20049
20101
|
**Issue**: "Permission denied"
|
|
20050
20102
|
**Cause**: Insufficient file permissions
|
|
@@ -20072,19 +20124,19 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
20072
20124
|
Get detailed debug information:
|
|
20073
20125
|
\`\`\`bash
|
|
20074
20126
|
# Verbose execution with debug logging
|
|
20075
|
-
juno-
|
|
20127
|
+
juno-code start --verbose --log-level debug
|
|
20076
20128
|
|
|
20077
20129
|
# View recent error logs
|
|
20078
|
-
juno-
|
|
20130
|
+
juno-code logs --level error --tail 50
|
|
20079
20131
|
|
|
20080
20132
|
# Export logs for analysis
|
|
20081
|
-
juno-
|
|
20133
|
+
juno-code logs --export debug.json --level debug
|
|
20082
20134
|
\`\`\`
|
|
20083
20135
|
|
|
20084
20136
|
## Getting More Help
|
|
20085
20137
|
|
|
20086
|
-
1. **Interactive Help**: \`juno-
|
|
20087
|
-
2. **View Logs**: \`juno-
|
|
20138
|
+
1. **Interactive Help**: \`juno-code help --interactive\`
|
|
20139
|
+
2. **View Logs**: \`juno-code logs --interactive\`
|
|
20088
20140
|
3. **Check Configuration**: Review .juno_task/config.json
|
|
20089
20141
|
4. **Test MCP Connection**: Use --verbose flag with any command
|
|
20090
20142
|
5. **Report Issues**: Include debug logs when reporting problems
|
|
@@ -20093,16 +20145,20 @@ juno-task logs --export debug.json --level debug
|
|
|
20093
20145
|
|
|
20094
20146
|
Useful for debugging:
|
|
20095
20147
|
\`\`\`bash
|
|
20148
|
+
export JUNO_CODE_VERBOSE=true
|
|
20149
|
+
export JUNO_CODE_LOG_LEVEL=debug
|
|
20150
|
+
export NO_COLOR=true # Disable colors for log analysis
|
|
20151
|
+
|
|
20152
|
+
# Legacy variables (still supported for backward compatibility)
|
|
20096
20153
|
export JUNO_TASK_VERBOSE=true
|
|
20097
20154
|
export JUNO_TASK_LOG_LEVEL=debug
|
|
20098
|
-
export NO_COLOR=true # Disable colors for log analysis
|
|
20099
20155
|
\`\`\`
|
|
20100
20156
|
`;
|
|
20101
20157
|
function displayQuickReference(formatter) {
|
|
20102
20158
|
console.log(formatter.panel(
|
|
20103
|
-
"Welcome to juno-
|
|
20159
|
+
"Welcome to juno-code! This quick reference shows the most commonly used commands.",
|
|
20104
20160
|
{
|
|
20105
|
-
title: "\u{1F680} juno-
|
|
20161
|
+
title: "\u{1F680} juno-code Quick Reference",
|
|
20106
20162
|
border: "rounded",
|
|
20107
20163
|
style: "success",
|
|
20108
20164
|
padding: 1
|
|
@@ -20119,8 +20175,8 @@ function displayQuickReference(formatter) {
|
|
|
20119
20175
|
});
|
|
20120
20176
|
});
|
|
20121
20177
|
console.log(formatter.panel(
|
|
20122
|
-
`Use ${chalk12__default.default.cyan("juno-
|
|
20123
|
-
Use ${chalk12__default.default.cyan("juno-
|
|
20178
|
+
`Use ${chalk12__default.default.cyan("juno-code help --interactive")} for comprehensive help with search and tutorials.
|
|
20179
|
+
Use ${chalk12__default.default.cyan("juno-code <command> --help")} for detailed command information.`,
|
|
20124
20180
|
{
|
|
20125
20181
|
title: "\u{1F4A1} Next Steps",
|
|
20126
20182
|
border: "rounded",
|
|
@@ -20171,8 +20227,8 @@ function listHelpTopics() {
|
|
|
20171
20227
|
console.log(`${icon} ${chalk12__default.default.cyan(topic.id.padEnd(20))} ${topic.title}`);
|
|
20172
20228
|
});
|
|
20173
20229
|
console.log(chalk12__default.default.yellow(`
|
|
20174
|
-
Use ${chalk12__default.default.cyan("juno-
|
|
20175
|
-
console.log(chalk12__default.default.yellow(`Use ${chalk12__default.default.cyan("juno-
|
|
20230
|
+
Use ${chalk12__default.default.cyan("juno-code help --topic <id>")} to view a specific topic`));
|
|
20231
|
+
console.log(chalk12__default.default.yellow(`Use ${chalk12__default.default.cyan("juno-code help --interactive")} for full interactive help`));
|
|
20176
20232
|
}
|
|
20177
20233
|
function searchHelpTopics(searchTerm) {
|
|
20178
20234
|
const matchingTopics = [
|
|
@@ -20192,7 +20248,7 @@ function searchHelpTopics(searchTerm) {
|
|
|
20192
20248
|
console.log(chalk12__default.default.cyan(`\u2022 ${topicId}`));
|
|
20193
20249
|
});
|
|
20194
20250
|
console.log(chalk12__default.default.yellow(`
|
|
20195
|
-
Use ${chalk12__default.default.cyan("juno-
|
|
20251
|
+
Use ${chalk12__default.default.cyan("juno-code help --topic <id>")} to view details`));
|
|
20196
20252
|
}
|
|
20197
20253
|
async function helpCommandHandler(args, options, command) {
|
|
20198
20254
|
try {
|
|
@@ -20246,12 +20302,12 @@ function configureHelpCommand(program) {
|
|
|
20246
20302
|
await helpCommandHandler([], options);
|
|
20247
20303
|
}).addHelpText("after", `
|
|
20248
20304
|
Examples:
|
|
20249
|
-
$ juno-
|
|
20250
|
-
$ juno-
|
|
20251
|
-
$ juno-
|
|
20252
|
-
$ juno-
|
|
20253
|
-
$ juno-
|
|
20254
|
-
$ juno-
|
|
20305
|
+
$ juno-code help # Quick reference guide
|
|
20306
|
+
$ juno-code help --interactive # Interactive help system
|
|
20307
|
+
$ juno-code help --topic quickstart # Specific topic
|
|
20308
|
+
$ juno-code help --search "mcp" # Search topics
|
|
20309
|
+
$ juno-code help --list # List all topics
|
|
20310
|
+
$ juno-code help --troubleshooting # Troubleshooting guide
|
|
20255
20311
|
|
|
20256
20312
|
Interactive Help Features:
|
|
20257
20313
|
- Browse help by category
|
|
@@ -20280,7 +20336,7 @@ Navigation (Interactive Mode):
|
|
|
20280
20336
|
Notes:
|
|
20281
20337
|
- Interactive help provides the most comprehensive assistance
|
|
20282
20338
|
- Use --verbose with any command for detailed output
|
|
20283
|
-
- Check logs with 'juno-
|
|
20339
|
+
- Check logs with 'juno-code logs' for debugging
|
|
20284
20340
|
- All help content is searchable and cross-referenced
|
|
20285
20341
|
`);
|
|
20286
20342
|
}
|
|
@@ -20296,7 +20352,7 @@ var ProfileDisplayFormatter = class {
|
|
|
20296
20352
|
formatProfileList(profiles, activeProfile) {
|
|
20297
20353
|
if (profiles.length === 0) {
|
|
20298
20354
|
console.log(chalk12__default.default.yellow("No configuration profiles found."));
|
|
20299
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20355
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config create <name>" to create your first profile.'));
|
|
20300
20356
|
return;
|
|
20301
20357
|
}
|
|
20302
20358
|
console.log(chalk12__default.default.blue.bold(`
|
|
@@ -20390,7 +20446,7 @@ async function listProfiles(options = {}) {
|
|
|
20390
20446
|
const formatter = new ProfileDisplayFormatter(options.verbose);
|
|
20391
20447
|
formatter.formatProfileList(profiles, activeProfile);
|
|
20392
20448
|
if (options.verbose && profiles.length > 0) {
|
|
20393
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20449
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config show <profile>" for detailed information.'));
|
|
20394
20450
|
}
|
|
20395
20451
|
} catch (error) {
|
|
20396
20452
|
const formatter = new ProfileDisplayFormatter();
|
|
@@ -20415,7 +20471,7 @@ async function showProfile(profileName, options = {}) {
|
|
|
20415
20471
|
const formatter = new ProfileDisplayFormatter();
|
|
20416
20472
|
if (error instanceof ProfileNotFoundError) {
|
|
20417
20473
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20418
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20474
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20419
20475
|
} else {
|
|
20420
20476
|
formatter.formatError(`Failed to show profile: ${error}`);
|
|
20421
20477
|
}
|
|
@@ -20433,7 +20489,7 @@ async function setActiveProfile(profileName) {
|
|
|
20433
20489
|
const formatter = new ProfileDisplayFormatter();
|
|
20434
20490
|
if (error instanceof ProfileNotFoundError) {
|
|
20435
20491
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20436
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20492
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20437
20493
|
} else {
|
|
20438
20494
|
formatter.formatError(`Failed to set active profile: ${error}`);
|
|
20439
20495
|
}
|
|
@@ -20462,13 +20518,13 @@ async function createProfile(profileName, options = {}) {
|
|
|
20462
20518
|
formatter.formatSuccess(`Profile '${profileName}' created successfully`);
|
|
20463
20519
|
if (options.interactive) {
|
|
20464
20520
|
console.log(chalk12__default.default.gray("\nYou can now configure this profile using:"));
|
|
20465
|
-
console.log(chalk12__default.default.cyan(` juno-
|
|
20521
|
+
console.log(chalk12__default.default.cyan(` juno-code config edit ${profileName}`));
|
|
20466
20522
|
}
|
|
20467
20523
|
} catch (error) {
|
|
20468
20524
|
const formatter = new ProfileDisplayFormatter();
|
|
20469
20525
|
if (error instanceof ProfileExistsError) {
|
|
20470
20526
|
formatter.formatError(`Profile '${profileName}' already exists.`);
|
|
20471
|
-
console.log(chalk12__default.default.gray('Use "juno-
|
|
20527
|
+
console.log(chalk12__default.default.gray('Use "juno-code config show <profile>" to view existing profile.'));
|
|
20472
20528
|
} else if (error instanceof CircularInheritanceError) {
|
|
20473
20529
|
formatter.formatError(`Circular inheritance detected: ${error.message}`);
|
|
20474
20530
|
} else {
|
|
@@ -20562,12 +20618,12 @@ function setupConfigCommand(program) {
|
|
|
20562
20618
|
configCmd.on("--help", () => {
|
|
20563
20619
|
console.log("");
|
|
20564
20620
|
console.log("Examples:");
|
|
20565
|
-
console.log(" $ juno-
|
|
20566
|
-
console.log(" $ juno-
|
|
20567
|
-
console.log(" $ juno-
|
|
20568
|
-
console.log(' $ juno-
|
|
20569
|
-
console.log(" $ juno-
|
|
20570
|
-
console.log(" $ juno-
|
|
20621
|
+
console.log(" $ juno-code config list # List all profiles");
|
|
20622
|
+
console.log(" $ juno-code config show development # Show development profile");
|
|
20623
|
+
console.log(" $ juno-code config set production # Set active profile");
|
|
20624
|
+
console.log(' $ juno-code config create dev --description "Development settings"');
|
|
20625
|
+
console.log(" $ juno-code config export prod prod.json # Export to file");
|
|
20626
|
+
console.log(" $ juno-code config import backup.json # Import from file");
|
|
20571
20627
|
console.log("");
|
|
20572
20628
|
});
|
|
20573
20629
|
}
|
|
@@ -20665,15 +20721,15 @@ var ShellDetector = class _ShellDetector {
|
|
|
20665
20721
|
switch (shell) {
|
|
20666
20722
|
case "bash":
|
|
20667
20723
|
if (process.platform === "darwin") {
|
|
20668
|
-
return path__namespace.join("/usr/local/etc/bash_completion.d", "juno-
|
|
20724
|
+
return path__namespace.join("/usr/local/etc/bash_completion.d", "juno-code");
|
|
20669
20725
|
}
|
|
20670
|
-
return path__namespace.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-
|
|
20726
|
+
return path__namespace.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-code");
|
|
20671
20727
|
case "zsh":
|
|
20672
|
-
return path__namespace.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-
|
|
20728
|
+
return path__namespace.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-code");
|
|
20673
20729
|
case "fish":
|
|
20674
|
-
return path__namespace.join(homeDir, ".config", "fish", "completions", "juno-
|
|
20730
|
+
return path__namespace.join(homeDir, ".config", "fish", "completions", "juno-code.fish");
|
|
20675
20731
|
case "powershell":
|
|
20676
|
-
return path__namespace.join(homeDir, ".config", "powershell", "completions", "juno-
|
|
20732
|
+
return path__namespace.join(homeDir, ".config", "powershell", "completions", "juno-code.ps1");
|
|
20677
20733
|
default:
|
|
20678
20734
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
20679
20735
|
}
|
|
@@ -20695,17 +20751,17 @@ var ShellDetector = class _ShellDetector {
|
|
|
20695
20751
|
getSourceCommand(shell, completionPath) {
|
|
20696
20752
|
switch (shell) {
|
|
20697
20753
|
case "bash":
|
|
20698
|
-
return `# juno-
|
|
20754
|
+
return `# juno-code completion
|
|
20699
20755
|
[ -f "${completionPath}" ] && source "${completionPath}"`;
|
|
20700
20756
|
case "zsh":
|
|
20701
20757
|
const zshDir = path__namespace.dirname(completionPath);
|
|
20702
|
-
return `# juno-
|
|
20758
|
+
return `# juno-code completion
|
|
20703
20759
|
fpath=("${zshDir}" $fpath)
|
|
20704
20760
|
autoload -U compinit && compinit`;
|
|
20705
20761
|
case "fish":
|
|
20706
|
-
return `# juno-
|
|
20762
|
+
return `# juno-code completion (automatically loaded)`;
|
|
20707
20763
|
case "powershell":
|
|
20708
|
-
return `# juno-
|
|
20764
|
+
return `# juno-code completion
|
|
20709
20765
|
. "${completionPath}"`;
|
|
20710
20766
|
default:
|
|
20711
20767
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
@@ -20720,7 +20776,7 @@ autoload -U compinit && compinit`;
|
|
|
20720
20776
|
return false;
|
|
20721
20777
|
}
|
|
20722
20778
|
const content = await fs__default.default.readFile(configPath, "utf-8");
|
|
20723
|
-
return content.includes("juno-
|
|
20779
|
+
return content.includes("juno-code completion");
|
|
20724
20780
|
} catch {
|
|
20725
20781
|
return false;
|
|
20726
20782
|
}
|
|
@@ -20979,7 +21035,7 @@ var CompletionInstaller = class {
|
|
|
20979
21035
|
}
|
|
20980
21036
|
await this.shellDetector.ensureCompletionDirectory(shell);
|
|
20981
21037
|
await this.shellDetector.ensureConfigDirectory(shell);
|
|
20982
|
-
const script = this.generateEnhancedCompletion(shell, "juno-
|
|
21038
|
+
const script = this.generateEnhancedCompletion(shell, "juno-code");
|
|
20983
21039
|
const completionPath = this.shellDetector.getCompletionPath(shell);
|
|
20984
21040
|
await fs__default.default.writeFile(completionPath, script, "utf-8");
|
|
20985
21041
|
const configPath = this.shellDetector.getConfigPath(shell);
|
|
@@ -21068,7 +21124,7 @@ ${sourceCommand}
|
|
|
21068
21124
|
return `#!/bin/bash
|
|
21069
21125
|
|
|
21070
21126
|
# ${commandName} enhanced completion script for bash
|
|
21071
|
-
# Generated by juno-
|
|
21127
|
+
# Generated by juno-code CLI with context-aware features
|
|
21072
21128
|
|
|
21073
21129
|
_${commandName}_completion() {
|
|
21074
21130
|
local cur prev opts base
|
|
@@ -21262,7 +21318,7 @@ complete -F _${commandName}_completion ${commandName}
|
|
|
21262
21318
|
return `#compdef ${commandName}
|
|
21263
21319
|
|
|
21264
21320
|
# ${commandName} enhanced completion script for zsh
|
|
21265
|
-
# Generated by juno-
|
|
21321
|
+
# Generated by juno-code CLI with context-aware features
|
|
21266
21322
|
|
|
21267
21323
|
_${commandName}() {
|
|
21268
21324
|
local context state line
|
|
@@ -21417,7 +21473,7 @@ _${commandName} "$@"
|
|
|
21417
21473
|
*/
|
|
21418
21474
|
generateEnhancedFishCompletion(commandName) {
|
|
21419
21475
|
return `# ${commandName} enhanced completion script for fish
|
|
21420
|
-
# Generated by juno-
|
|
21476
|
+
# Generated by juno-code CLI with context-aware features
|
|
21421
21477
|
|
|
21422
21478
|
# Context-aware model completion
|
|
21423
21479
|
function __${commandName}_complete_models
|
|
@@ -21673,7 +21729,7 @@ var CompletionCommand = class {
|
|
|
21673
21729
|
const uninstalledShells = completionStatus.filter((status) => !status.isInstalled && !status.error).map((status) => status.shell);
|
|
21674
21730
|
if (uninstalledShells.length > 0) {
|
|
21675
21731
|
console.log(chalk12__default.default.blue("\n\u{1F4A1} Suggestions:"));
|
|
21676
|
-
console.log(chalk12__default.default.white(` Install completion: juno-
|
|
21732
|
+
console.log(chalk12__default.default.white(` Install completion: juno-code completion install ${uninstalledShells.join(" ")}`));
|
|
21677
21733
|
}
|
|
21678
21734
|
const currentShell = this.shellDetector.getCurrentShell();
|
|
21679
21735
|
if (currentShell) {
|
|
@@ -21684,7 +21740,7 @@ var CompletionCommand = class {
|
|
|
21684
21740
|
} else {
|
|
21685
21741
|
console.log(chalk12__default.default.yellow(`
|
|
21686
21742
|
\u{1F3AF} Current shell (${currentShell}): Completion not installed`));
|
|
21687
|
-
console.log(chalk12__default.default.white(` Install: juno-
|
|
21743
|
+
console.log(chalk12__default.default.white(` Install: juno-code completion install ${currentShell}`));
|
|
21688
21744
|
}
|
|
21689
21745
|
}
|
|
21690
21746
|
} catch (error) {
|
|
@@ -21768,7 +21824,7 @@ var CompletionCommand = class {
|
|
|
21768
21824
|
console.log(chalk12__default.default.white("\u2022 Reload PowerShell"));
|
|
21769
21825
|
break;
|
|
21770
21826
|
}
|
|
21771
|
-
console.log(chalk12__default.default.white("\u2022 Test: juno-
|
|
21827
|
+
console.log(chalk12__default.default.white("\u2022 Test: juno-code <TAB>"));
|
|
21772
21828
|
}
|
|
21773
21829
|
};
|
|
21774
21830
|
var completion_default = CompletionCommand;
|
|
@@ -21834,7 +21890,7 @@ function setupMainCommand(program) {
|
|
|
21834
21890
|
const cwd2 = process.cwd();
|
|
21835
21891
|
const junoTaskDir = path20.join(cwd2, ".juno_task");
|
|
21836
21892
|
if (await fs18.pathExists(junoTaskDir)) {
|
|
21837
|
-
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
21893
|
+
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - Auto-detected Initialized Project\n"));
|
|
21838
21894
|
try {
|
|
21839
21895
|
const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
21840
21896
|
const config = await loadConfig2({
|
|
@@ -21867,13 +21923,13 @@ function setupMainCommand(program) {
|
|
|
21867
21923
|
}
|
|
21868
21924
|
}
|
|
21869
21925
|
if (!globalOptions.subagent && !options.prompt && !options.interactive && !options.interactivePrompt) {
|
|
21870
|
-
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
21926
|
+
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - TypeScript CLI for AI Subagent Orchestration\n"));
|
|
21871
21927
|
console.log(chalk12__default.default.white("To get started:"));
|
|
21872
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21873
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21874
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21875
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
21876
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21928
|
+
console.log(chalk12__default.default.gray(" juno-code init # Initialize new project"));
|
|
21929
|
+
console.log(chalk12__default.default.gray(" juno-code start # Start execution"));
|
|
21930
|
+
console.log(chalk12__default.default.gray(" juno-code test --generate --run # AI-powered testing"));
|
|
21931
|
+
console.log(chalk12__default.default.gray(' juno-code -s claude -p "prompt" # Quick execution with Claude'));
|
|
21932
|
+
console.log(chalk12__default.default.gray(" juno-code --help # Show all commands"));
|
|
21877
21933
|
console.log("");
|
|
21878
21934
|
return;
|
|
21879
21935
|
}
|
|
@@ -21887,7 +21943,7 @@ function setupMainCommand(program) {
|
|
|
21887
21943
|
function displayBanner(verbose = false) {
|
|
21888
21944
|
if (verbose) {
|
|
21889
21945
|
console.log(chalk12__default.default.blue.bold(`
|
|
21890
|
-
\u{1F3AF} Juno
|
|
21946
|
+
\u{1F3AF} Juno Code v${VERSION} - TypeScript CLI`));
|
|
21891
21947
|
console.log(chalk12__default.default.gray(` Node.js ${process.version} on ${process.platform}`));
|
|
21892
21948
|
console.log(chalk12__default.default.gray(` Working directory: ${process.cwd()}`));
|
|
21893
21949
|
console.log("");
|
|
@@ -21920,7 +21976,22 @@ function setupAliases(program) {
|
|
|
21920
21976
|
}
|
|
21921
21977
|
}
|
|
21922
21978
|
function configureEnvironment() {
|
|
21923
|
-
const
|
|
21979
|
+
const newEnvVars = [
|
|
21980
|
+
"JUNO_CODE_SUBAGENT",
|
|
21981
|
+
"JUNO_CODE_PROMPT",
|
|
21982
|
+
"JUNO_CODE_CWD",
|
|
21983
|
+
"JUNO_CODE_MAX_ITERATIONS",
|
|
21984
|
+
"JUNO_CODE_MODEL",
|
|
21985
|
+
"JUNO_CODE_LOG_FILE",
|
|
21986
|
+
"JUNO_CODE_VERBOSE",
|
|
21987
|
+
"JUNO_CODE_QUIET",
|
|
21988
|
+
"JUNO_CODE_CONFIG",
|
|
21989
|
+
"JUNO_CODE_MCP_SERVER_PATH",
|
|
21990
|
+
"JUNO_CODE_MCP_TIMEOUT",
|
|
21991
|
+
"JUNO_CODE_NO_COLOR",
|
|
21992
|
+
"JUNO_CODE_ENABLE_FEEDBACK"
|
|
21993
|
+
];
|
|
21994
|
+
const legacyEnvVars = [
|
|
21924
21995
|
"JUNO_TASK_SUBAGENT",
|
|
21925
21996
|
"JUNO_TASK_PROMPT",
|
|
21926
21997
|
"JUNO_TASK_CWD",
|
|
@@ -21935,10 +22006,10 @@ function configureEnvironment() {
|
|
|
21935
22006
|
"JUNO_TASK_NO_COLOR",
|
|
21936
22007
|
"JUNO_TASK_ENABLE_FEEDBACK"
|
|
21937
22008
|
];
|
|
21938
|
-
|
|
22009
|
+
const processEnvVar = (envVar, prefix) => {
|
|
21939
22010
|
const value = process.env[envVar];
|
|
21940
|
-
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(
|
|
21941
|
-
const option = envVar.toLowerCase().replace(
|
|
22011
|
+
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(prefix, "").replace(/_/g, "-")}`)) {
|
|
22012
|
+
const option = envVar.toLowerCase().replace(prefix, "").replace(/_/g, "-");
|
|
21942
22013
|
switch (option) {
|
|
21943
22014
|
case "verbose":
|
|
21944
22015
|
case "quiet":
|
|
@@ -21951,6 +22022,21 @@ function configureEnvironment() {
|
|
|
21951
22022
|
default:
|
|
21952
22023
|
process.argv.push(`--${option}`, value);
|
|
21953
22024
|
}
|
|
22025
|
+
return true;
|
|
22026
|
+
}
|
|
22027
|
+
return false;
|
|
22028
|
+
};
|
|
22029
|
+
const processedOptions = /* @__PURE__ */ new Set();
|
|
22030
|
+
for (const envVar of newEnvVars) {
|
|
22031
|
+
if (processEnvVar(envVar, "juno_code_")) {
|
|
22032
|
+
const option = envVar.toLowerCase().replace("juno_code_", "").replace(/_/g, "-");
|
|
22033
|
+
processedOptions.add(option);
|
|
22034
|
+
}
|
|
22035
|
+
}
|
|
22036
|
+
for (const envVar of legacyEnvVars) {
|
|
22037
|
+
const option = envVar.toLowerCase().replace("juno_task_", "").replace(/_/g, "-");
|
|
22038
|
+
if (!processedOptions.has(option)) {
|
|
22039
|
+
processEnvVar(envVar, "juno_task_");
|
|
21954
22040
|
}
|
|
21955
22041
|
}
|
|
21956
22042
|
if (!process.argv.includes("--enable-feedback")) {
|
|
@@ -21969,7 +22055,7 @@ function configureEnvironment() {
|
|
|
21969
22055
|
async function main() {
|
|
21970
22056
|
const program = new commander.Command();
|
|
21971
22057
|
configureEnvironment();
|
|
21972
|
-
program.name("juno-
|
|
22058
|
+
program.name("juno-code").description("TypeScript implementation of juno-code CLI tool for AI subagent orchestration").version(VERSION, "-V, --version", "Display version information").helpOption("-h, --help", "Display help information");
|
|
21973
22059
|
setupGlobalOptions(program);
|
|
21974
22060
|
const isVerbose = process.argv.includes("--verbose") || process.argv.includes("-v");
|
|
21975
22061
|
displayBanner(isVerbose);
|
|
@@ -22008,54 +22094,58 @@ async function main() {
|
|
|
22008
22094
|
setupAliases(program);
|
|
22009
22095
|
setupMainCommand(program);
|
|
22010
22096
|
program.addHelpText("beforeAll", `
|
|
22011
|
-
${chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
22097
|
+
${chalk12__default.default.blue.bold("\u{1F3AF} Juno Code")} - TypeScript CLI for AI Subagent Orchestration
|
|
22012
22098
|
|
|
22013
22099
|
`);
|
|
22014
22100
|
program.addHelpText("afterAll", `
|
|
22015
22101
|
${chalk12__default.default.blue.bold("Examples:")}
|
|
22016
22102
|
${chalk12__default.default.gray("# Initialize new project")}
|
|
22017
|
-
juno-
|
|
22103
|
+
juno-code init
|
|
22018
22104
|
|
|
22019
22105
|
${chalk12__default.default.gray("# Start execution using .juno_task/init.md")}
|
|
22020
|
-
juno-
|
|
22106
|
+
juno-code start
|
|
22021
22107
|
|
|
22022
22108
|
${chalk12__default.default.gray("# AI-powered testing")}
|
|
22023
|
-
juno-
|
|
22024
|
-
juno-
|
|
22025
|
-
juno-
|
|
22109
|
+
juno-code test --generate --run
|
|
22110
|
+
juno-code test src/utils.ts --subagent claude
|
|
22111
|
+
juno-code test --analyze --coverage
|
|
22026
22112
|
|
|
22027
22113
|
${chalk12__default.default.gray("# Quick execution with Claude")}
|
|
22028
|
-
juno-
|
|
22114
|
+
juno-code claude "Analyze this codebase and suggest improvements"
|
|
22029
22115
|
|
|
22030
22116
|
${chalk12__default.default.gray("# Interactive project setup")}
|
|
22031
|
-
juno-
|
|
22117
|
+
juno-code init --interactive
|
|
22032
22118
|
|
|
22033
22119
|
${chalk12__default.default.gray("# Manage sessions")}
|
|
22034
|
-
juno-
|
|
22035
|
-
juno-
|
|
22120
|
+
juno-code session list
|
|
22121
|
+
juno-code session info abc123
|
|
22036
22122
|
|
|
22037
22123
|
${chalk12__default.default.gray("# Enable feedback collection globally")}
|
|
22038
|
-
juno-
|
|
22124
|
+
juno-code --enable-feedback start
|
|
22039
22125
|
|
|
22040
22126
|
${chalk12__default.default.gray("# Collect feedback")}
|
|
22041
|
-
juno-
|
|
22127
|
+
juno-code feedback --interactive
|
|
22042
22128
|
|
|
22043
22129
|
${chalk12__default.default.gray("# Manage configuration profiles")}
|
|
22044
|
-
juno-
|
|
22045
|
-
juno-
|
|
22130
|
+
juno-code config list
|
|
22131
|
+
juno-code config create development
|
|
22046
22132
|
|
|
22047
22133
|
${chalk12__default.default.gray("# Setup Git repository")}
|
|
22048
|
-
juno-
|
|
22134
|
+
juno-code setup-git https://github.com/owner/repo
|
|
22049
22135
|
|
|
22050
22136
|
${chalk12__default.default.blue.bold("Environment Variables:")}
|
|
22051
|
-
|
|
22052
|
-
|
|
22053
|
-
|
|
22054
|
-
|
|
22055
|
-
|
|
22137
|
+
JUNO_CODE_SUBAGENT Default subagent (claude, cursor, codex, gemini)
|
|
22138
|
+
JUNO_CODE_MCP_SERVER_PATH Path to MCP server executable
|
|
22139
|
+
JUNO_CODE_CONFIG Configuration file path
|
|
22140
|
+
JUNO_CODE_VERBOSE Enable verbose output (true/false)
|
|
22141
|
+
JUNO_CODE_ENABLE_FEEDBACK Enable concurrent feedback collection (true/false)
|
|
22142
|
+
JUNO_CODE_MCP_TIMEOUT MCP server timeout in milliseconds
|
|
22056
22143
|
JUNO_INTERACTIVE_FEEDBACK_MODE Enable interactive feedback mode (true/false)
|
|
22057
22144
|
NO_COLOR Disable colored output (standard)
|
|
22058
22145
|
|
|
22146
|
+
${chalk12__default.default.gray("Legacy variables (backward compatibility):")}
|
|
22147
|
+
JUNO_TASK_* All JUNO_TASK_* variables still supported
|
|
22148
|
+
|
|
22059
22149
|
${chalk12__default.default.blue.bold("Configuration:")}
|
|
22060
22150
|
Configuration can be specified via:
|
|
22061
22151
|
1. Command line arguments (highest priority)
|
|
@@ -22064,8 +22154,8 @@ ${chalk12__default.default.blue.bold("Configuration:")}
|
|
|
22064
22154
|
4. Built-in defaults (lowest priority)
|
|
22065
22155
|
|
|
22066
22156
|
${chalk12__default.default.blue.bold("Support:")}
|
|
22067
|
-
Documentation: https://github.com/owner/juno-
|
|
22068
|
-
Issues: https://github.com/owner/juno-
|
|
22157
|
+
Documentation: https://github.com/owner/juno-code#readme
|
|
22158
|
+
Issues: https://github.com/owner/juno-code/issues
|
|
22069
22159
|
License: MIT
|
|
22070
22160
|
|
|
22071
22161
|
`);
|