juno-code 1.0.12 → 1.0.14
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 +350 -260
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +350 -260
- 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/bin/juno-code.sh +66 -0
- 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/bootstrap.sh +189 -0
- package/dist/templates/scripts/clean_logs_folder.sh +1 -1
- package/dist/templates/scripts/install_requirements.sh +257 -23
- package/package.json +8 -5
package/dist/bin/cli.mjs
CHANGED
|
@@ -121,7 +121,7 @@ var init_types = __esm({
|
|
|
121
121
|
if (availableCommands.length > 0) {
|
|
122
122
|
this.suggestions = [
|
|
123
123
|
`Available commands: ${availableCommands.join(", ")}`,
|
|
124
|
-
`Use 'juno-
|
|
124
|
+
`Use 'juno-code --help' for usage information`
|
|
125
125
|
];
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -155,7 +155,7 @@ var init_types = __esm({
|
|
|
155
155
|
this.suggestions = [
|
|
156
156
|
"Check session directory permissions",
|
|
157
157
|
"Verify sufficient disk space",
|
|
158
|
-
"Use juno-
|
|
158
|
+
"Use juno-code session clean to remove old sessions"
|
|
159
159
|
];
|
|
160
160
|
}
|
|
161
161
|
};
|
|
@@ -171,7 +171,35 @@ var init_types = __esm({
|
|
|
171
171
|
}
|
|
172
172
|
};
|
|
173
173
|
ENVIRONMENT_MAPPINGS = {
|
|
174
|
-
// Core options
|
|
174
|
+
// Core options (new JUNO_CODE_* names)
|
|
175
|
+
JUNO_CODE_SUBAGENT: "subagent",
|
|
176
|
+
JUNO_CODE_PROMPT: "prompt",
|
|
177
|
+
JUNO_CODE_CWD: "cwd",
|
|
178
|
+
JUNO_CODE_MAX_ITERATIONS: "maxIterations",
|
|
179
|
+
JUNO_CODE_MODEL: "model",
|
|
180
|
+
JUNO_CODE_LOG_FILE: "logFile",
|
|
181
|
+
JUNO_CODE_VERBOSE: "verbose",
|
|
182
|
+
JUNO_CODE_QUIET: "quiet",
|
|
183
|
+
JUNO_CODE_INTERACTIVE: "interactive",
|
|
184
|
+
JUNO_CODE_CONFIG: "config",
|
|
185
|
+
// MCP options (new JUNO_CODE_* names)
|
|
186
|
+
JUNO_CODE_MCP_SERVER_PATH: "mcpServerPath",
|
|
187
|
+
JUNO_CODE_MCP_TIMEOUT: "mcpTimeout",
|
|
188
|
+
JUNO_CODE_MCP_RETRIES: "mcpRetries",
|
|
189
|
+
// Session options (new JUNO_CODE_* names)
|
|
190
|
+
JUNO_CODE_SESSION_DIR: "sessionDir",
|
|
191
|
+
JUNO_CODE_LOG_LEVEL: "logLevel",
|
|
192
|
+
// Template options (new JUNO_CODE_* names)
|
|
193
|
+
JUNO_CODE_TEMPLATE: "template",
|
|
194
|
+
JUNO_CODE_FORCE: "force",
|
|
195
|
+
// Git options (new JUNO_CODE_* names)
|
|
196
|
+
JUNO_CODE_GIT_URL: "gitUrl",
|
|
197
|
+
// UI options (new JUNO_CODE_* names)
|
|
198
|
+
JUNO_CODE_NO_COLOR: "noColor",
|
|
199
|
+
JUNO_CODE_HEADLESS: "headless",
|
|
200
|
+
// Feedback options (new JUNO_CODE_* names)
|
|
201
|
+
JUNO_CODE_ENABLE_FEEDBACK: "enableFeedback",
|
|
202
|
+
// Legacy JUNO_TASK_* names for backward compatibility
|
|
175
203
|
JUNO_TASK_SUBAGENT: "subagent",
|
|
176
204
|
JUNO_TASK_PROMPT: "prompt",
|
|
177
205
|
JUNO_TASK_CWD: "cwd",
|
|
@@ -182,23 +210,18 @@ var init_types = __esm({
|
|
|
182
210
|
JUNO_TASK_QUIET: "quiet",
|
|
183
211
|
JUNO_TASK_INTERACTIVE: "interactive",
|
|
184
212
|
JUNO_TASK_CONFIG: "config",
|
|
185
|
-
// MCP options
|
|
186
213
|
JUNO_TASK_MCP_SERVER_PATH: "mcpServerPath",
|
|
187
214
|
JUNO_TASK_MCP_TIMEOUT: "mcpTimeout",
|
|
188
215
|
JUNO_TASK_MCP_RETRIES: "mcpRetries",
|
|
189
|
-
// Session options
|
|
190
216
|
JUNO_TASK_SESSION_DIR: "sessionDir",
|
|
191
217
|
JUNO_TASK_LOG_LEVEL: "logLevel",
|
|
192
|
-
// Template options
|
|
193
218
|
JUNO_TASK_TEMPLATE: "template",
|
|
194
219
|
JUNO_TASK_FORCE: "force",
|
|
195
|
-
// Git options
|
|
196
220
|
JUNO_TASK_GIT_URL: "gitUrl",
|
|
197
|
-
// UI options
|
|
198
221
|
JUNO_TASK_NO_COLOR: "noColor",
|
|
199
222
|
JUNO_TASK_HEADLESS: "headless",
|
|
200
|
-
// Feedback options
|
|
201
223
|
JUNO_TASK_ENABLE_FEEDBACK: "enableFeedback",
|
|
224
|
+
// Special aliases
|
|
202
225
|
JUNO_INTERACTIVE_FEEDBACK_MODE: "enableFeedback"
|
|
203
226
|
// Alias for enableFeedback
|
|
204
227
|
};
|
|
@@ -225,7 +248,7 @@ var init_types = __esm({
|
|
|
225
248
|
"cursor-agent": "cursor"
|
|
226
249
|
};
|
|
227
250
|
COMMAND_CATEGORIES = {
|
|
228
|
-
EXECUTION: ["juno-
|
|
251
|
+
EXECUTION: ["juno-code", "start"],
|
|
229
252
|
PROJECT: ["init", "setup-git"],
|
|
230
253
|
TESTING: ["test"],
|
|
231
254
|
SESSION: ["session"],
|
|
@@ -686,6 +709,7 @@ __export(config_exports, {
|
|
|
686
709
|
DEFAULT_CONFIG: () => DEFAULT_CONFIG,
|
|
687
710
|
ENV_VAR_MAPPING: () => ENV_VAR_MAPPING,
|
|
688
711
|
JunoTaskConfigSchema: () => JunoTaskConfigSchema,
|
|
712
|
+
LEGACY_ENV_VAR_MAPPING: () => LEGACY_ENV_VAR_MAPPING,
|
|
689
713
|
ProfileError: () => ProfileError,
|
|
690
714
|
ProfileExistsError: () => ProfileExistsError,
|
|
691
715
|
ProfileNotFoundError: () => ProfileNotFoundError,
|
|
@@ -717,6 +741,12 @@ function loadConfigFromEnv() {
|
|
|
717
741
|
config[configKey] = parseEnvValue(value);
|
|
718
742
|
}
|
|
719
743
|
}
|
|
744
|
+
for (const [envVar, configKey] of Object.entries(LEGACY_ENV_VAR_MAPPING)) {
|
|
745
|
+
const value = process.env[envVar];
|
|
746
|
+
if (value !== void 0 && config[configKey] === void 0) {
|
|
747
|
+
config[configKey] = parseEnvValue(value);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
720
750
|
return config;
|
|
721
751
|
}
|
|
722
752
|
async function loadJsonConfig(filePath) {
|
|
@@ -740,7 +770,7 @@ async function loadPackageJsonConfig(filePath) {
|
|
|
740
770
|
try {
|
|
741
771
|
const content = await promises.readFile(filePath, "utf-8");
|
|
742
772
|
const packageJson = JSON.parse(content);
|
|
743
|
-
return packageJson.
|
|
773
|
+
return packageJson.junoCode || {};
|
|
744
774
|
} catch (error) {
|
|
745
775
|
throw new Error(`Failed to load package.json config from ${filePath}: ${error}`);
|
|
746
776
|
}
|
|
@@ -869,13 +899,35 @@ async function loadConfig(options = {}) {
|
|
|
869
899
|
const mergedConfig = loader.merge();
|
|
870
900
|
return validateConfig(mergedConfig);
|
|
871
901
|
}
|
|
872
|
-
var ENV_VAR_MAPPING, SubagentTypeSchema, LogLevelSchema, HookTypeSchema, HookSchema, HooksSchema, JunoTaskConfigSchema, DEFAULT_CONFIG, GLOBAL_CONFIG_FILE_NAMES, PROJECT_CONFIG_FILE, ConfigLoader;
|
|
902
|
+
var ENV_VAR_MAPPING, LEGACY_ENV_VAR_MAPPING, SubagentTypeSchema, LogLevelSchema, HookTypeSchema, HookSchema, HooksSchema, JunoTaskConfigSchema, DEFAULT_CONFIG, GLOBAL_CONFIG_FILE_NAMES, PROJECT_CONFIG_FILE, ConfigLoader;
|
|
873
903
|
var init_config = __esm({
|
|
874
904
|
"src/core/config.ts"() {
|
|
875
905
|
init_version();
|
|
876
906
|
init_default_hooks();
|
|
877
907
|
init_profiles();
|
|
878
908
|
ENV_VAR_MAPPING = {
|
|
909
|
+
// Core settings
|
|
910
|
+
JUNO_CODE_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
911
|
+
JUNO_CODE_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
912
|
+
JUNO_CODE_DEFAULT_MODEL: "defaultModel",
|
|
913
|
+
// Logging settings
|
|
914
|
+
JUNO_CODE_LOG_LEVEL: "logLevel",
|
|
915
|
+
JUNO_CODE_LOG_FILE: "logFile",
|
|
916
|
+
JUNO_CODE_VERBOSE: "verbose",
|
|
917
|
+
JUNO_CODE_QUIET: "quiet",
|
|
918
|
+
// MCP settings
|
|
919
|
+
JUNO_CODE_MCP_TIMEOUT: "mcpTimeout",
|
|
920
|
+
JUNO_CODE_MCP_RETRIES: "mcpRetries",
|
|
921
|
+
JUNO_CODE_MCP_SERVER_PATH: "mcpServerPath",
|
|
922
|
+
JUNO_CODE_MCP_SERVER_NAME: "mcpServerName",
|
|
923
|
+
// TUI settings
|
|
924
|
+
JUNO_CODE_INTERACTIVE: "interactive",
|
|
925
|
+
JUNO_CODE_HEADLESS_MODE: "headlessMode",
|
|
926
|
+
// Paths
|
|
927
|
+
JUNO_CODE_WORKING_DIRECTORY: "workingDirectory",
|
|
928
|
+
JUNO_CODE_SESSION_DIRECTORY: "sessionDirectory"
|
|
929
|
+
};
|
|
930
|
+
LEGACY_ENV_VAR_MAPPING = {
|
|
879
931
|
// Core settings
|
|
880
932
|
JUNO_TASK_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
881
933
|
JUNO_TASK_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
@@ -952,12 +1004,12 @@ var init_config = __esm({
|
|
|
952
1004
|
hooks: getDefaultHooks()
|
|
953
1005
|
};
|
|
954
1006
|
GLOBAL_CONFIG_FILE_NAMES = [
|
|
955
|
-
"juno-
|
|
956
|
-
"juno-
|
|
957
|
-
".juno-
|
|
958
|
-
".juno-
|
|
1007
|
+
"juno-code.config.json",
|
|
1008
|
+
"juno-code.config.js",
|
|
1009
|
+
".juno-coderc.json",
|
|
1010
|
+
".juno-coderc.js",
|
|
959
1011
|
"package.json"
|
|
960
|
-
// Will look for '
|
|
1012
|
+
// Will look for 'junoCode' field
|
|
961
1013
|
];
|
|
962
1014
|
PROJECT_CONFIG_FILE = ".juno_task/config.json";
|
|
963
1015
|
ConfigLoader = class {
|
|
@@ -5942,8 +5994,8 @@ var init_concurrent_feedback_collector = __esm({
|
|
|
5942
5994
|
// Current feedback mode state
|
|
5943
5995
|
constructor(options = {}) {
|
|
5944
5996
|
this.options = {
|
|
5945
|
-
command: options.command || "juno-
|
|
5946
|
-
commandArgs: options.commandArgs || ["juno-
|
|
5997
|
+
command: options.command || "juno-code",
|
|
5998
|
+
commandArgs: options.commandArgs || ["juno-code", "feedback"],
|
|
5947
5999
|
verbose: options.verbose || false,
|
|
5948
6000
|
showHeader: options.showHeader !== void 0 ? options.showHeader : true,
|
|
5949
6001
|
progressInterval: options.progressInterval || 0,
|
|
@@ -6327,23 +6379,23 @@ var init_framework = __esm({
|
|
|
6327
6379
|
flags: "-v, --verbose",
|
|
6328
6380
|
description: "Enable verbose output with detailed progress",
|
|
6329
6381
|
defaultValue: false,
|
|
6330
|
-
env: "
|
|
6382
|
+
env: "JUNO_CODE_VERBOSE"
|
|
6331
6383
|
},
|
|
6332
6384
|
{
|
|
6333
6385
|
flags: "-q, --quiet",
|
|
6334
6386
|
description: "Disable rich formatting, use plain text",
|
|
6335
6387
|
defaultValue: false,
|
|
6336
|
-
env: "
|
|
6388
|
+
env: "JUNO_CODE_QUIET"
|
|
6337
6389
|
},
|
|
6338
6390
|
{
|
|
6339
6391
|
flags: "-c, --config <path>",
|
|
6340
6392
|
description: "Configuration file path (.json, .toml, pyproject.toml)",
|
|
6341
|
-
env: "
|
|
6393
|
+
env: "JUNO_CODE_CONFIG"
|
|
6342
6394
|
},
|
|
6343
6395
|
{
|
|
6344
6396
|
flags: "--log-file <path>",
|
|
6345
6397
|
description: "Log file path (auto-generated if not specified)",
|
|
6346
|
-
env: "
|
|
6398
|
+
env: "JUNO_CODE_LOG_FILE"
|
|
6347
6399
|
},
|
|
6348
6400
|
{
|
|
6349
6401
|
flags: "--no-color",
|
|
@@ -6354,24 +6406,24 @@ var init_framework = __esm({
|
|
|
6354
6406
|
description: "Log level for output (error, warn, info, debug, trace)",
|
|
6355
6407
|
defaultValue: "info",
|
|
6356
6408
|
choices: ["error", "warn", "info", "debug", "trace"],
|
|
6357
|
-
env: "
|
|
6409
|
+
env: "JUNO_CODE_LOG_LEVEL"
|
|
6358
6410
|
},
|
|
6359
6411
|
{
|
|
6360
6412
|
flags: "-s, --subagent <type>",
|
|
6361
6413
|
description: "Subagent to use",
|
|
6362
|
-
env: "
|
|
6414
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
6363
6415
|
},
|
|
6364
6416
|
{
|
|
6365
6417
|
flags: "--max-iterations <number>",
|
|
6366
6418
|
description: "Maximum iterations (-1 for unlimited)",
|
|
6367
6419
|
defaultValue: void 0,
|
|
6368
|
-
env: "
|
|
6420
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
6369
6421
|
},
|
|
6370
6422
|
{
|
|
6371
6423
|
flags: "--mcp-timeout <number>",
|
|
6372
6424
|
description: "MCP server timeout in milliseconds",
|
|
6373
6425
|
defaultValue: void 0,
|
|
6374
|
-
env: "
|
|
6426
|
+
env: "JUNO_CODE_MCP_TIMEOUT"
|
|
6375
6427
|
}
|
|
6376
6428
|
];
|
|
6377
6429
|
for (const option of this.globalOptions) {
|
|
@@ -6618,7 +6670,7 @@ ${helpText}
|
|
|
6618
6670
|
}
|
|
6619
6671
|
if (error.showHelp) {
|
|
6620
6672
|
console.error(chalk12.gray(`
|
|
6621
|
-
Use 'juno-
|
|
6673
|
+
Use 'juno-code ${commandName} --help' for usage information`));
|
|
6622
6674
|
}
|
|
6623
6675
|
const exitCode = Object.values(EXIT_CODES).includes(error.code) ? error.code : EXIT_CODES.UNEXPECTED_ERROR;
|
|
6624
6676
|
process.exit(exitCode);
|
|
@@ -6663,7 +6715,7 @@ ${helpText}
|
|
|
6663
6715
|
try {
|
|
6664
6716
|
await this.program.parseAsync(argv2);
|
|
6665
6717
|
} catch (error) {
|
|
6666
|
-
await this.handleCommandError(error, "juno-
|
|
6718
|
+
await this.handleCommandError(error, "juno-code", {});
|
|
6667
6719
|
}
|
|
6668
6720
|
}
|
|
6669
6721
|
/**
|
|
@@ -11169,7 +11221,7 @@ async function mainCommandHandler(args, options, command) {
|
|
|
11169
11221
|
`Invalid subagent: ${options.subagent}`,
|
|
11170
11222
|
[
|
|
11171
11223
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
11172
|
-
'Example: juno-
|
|
11224
|
+
'Example: juno-code claude "your prompt"',
|
|
11173
11225
|
"Use --help for more information"
|
|
11174
11226
|
]
|
|
11175
11227
|
);
|
|
@@ -11261,34 +11313,34 @@ function createMainCommand() {
|
|
|
11261
11313
|
description: "Subagent to use",
|
|
11262
11314
|
required: true,
|
|
11263
11315
|
choices: ["claude", "cursor", "codex", "gemini", "claude-code", "claude_code", "gemini-cli", "cursor-agent"],
|
|
11264
|
-
env: "
|
|
11316
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
11265
11317
|
}),
|
|
11266
11318
|
createOption({
|
|
11267
11319
|
flags: "-p, --prompt <text|file>",
|
|
11268
11320
|
description: "Prompt input (file path or inline text)",
|
|
11269
|
-
env: "
|
|
11321
|
+
env: "JUNO_CODE_PROMPT"
|
|
11270
11322
|
}),
|
|
11271
11323
|
createOption({
|
|
11272
11324
|
flags: "-w, --cwd <path>",
|
|
11273
11325
|
description: "Working directory",
|
|
11274
11326
|
defaultValue: process.cwd(),
|
|
11275
|
-
env: "
|
|
11327
|
+
env: "JUNO_CODE_CWD"
|
|
11276
11328
|
}),
|
|
11277
11329
|
createOption({
|
|
11278
11330
|
flags: "-i, --max-iterations <number>",
|
|
11279
11331
|
description: "Maximum iterations (-1 for unlimited)",
|
|
11280
|
-
env: "
|
|
11332
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
11281
11333
|
}),
|
|
11282
11334
|
createOption({
|
|
11283
11335
|
flags: "-m, --model <name>",
|
|
11284
11336
|
description: "Model to use (optional, subagent-specific)",
|
|
11285
|
-
env: "
|
|
11337
|
+
env: "JUNO_CODE_MODEL"
|
|
11286
11338
|
}),
|
|
11287
11339
|
createOption({
|
|
11288
11340
|
flags: "-I, --interactive",
|
|
11289
11341
|
description: "Interactive mode for typing/pasting prompts",
|
|
11290
11342
|
defaultValue: false,
|
|
11291
|
-
env: "
|
|
11343
|
+
env: "JUNO_CODE_INTERACTIVE"
|
|
11292
11344
|
}),
|
|
11293
11345
|
createOption({
|
|
11294
11346
|
flags: "--interactive-prompt",
|
|
@@ -11298,19 +11350,19 @@ function createMainCommand() {
|
|
|
11298
11350
|
],
|
|
11299
11351
|
examples: [
|
|
11300
11352
|
{
|
|
11301
|
-
command: 'juno-
|
|
11353
|
+
command: 'juno-code -s claude -p "Create a REST API"',
|
|
11302
11354
|
description: "Execute task with Claude using inline prompt"
|
|
11303
11355
|
},
|
|
11304
11356
|
{
|
|
11305
|
-
command: "juno-
|
|
11357
|
+
command: "juno-code -s cursor -p ./task.md -i 3",
|
|
11306
11358
|
description: "Execute task with Cursor using file prompt, max 3 iterations"
|
|
11307
11359
|
},
|
|
11308
11360
|
{
|
|
11309
|
-
command: "juno-
|
|
11361
|
+
command: "juno-code -s gemini --interactive",
|
|
11310
11362
|
description: "Use interactive mode to enter prompt"
|
|
11311
11363
|
},
|
|
11312
11364
|
{
|
|
11313
|
-
command: "juno-
|
|
11365
|
+
command: "juno-code -s claude --interactive-prompt",
|
|
11314
11366
|
description: "Use enhanced TUI prompt editor"
|
|
11315
11367
|
}
|
|
11316
11368
|
],
|
|
@@ -11350,10 +11402,10 @@ var init_main = __esm({
|
|
|
11350
11402
|
throw new ValidationError(
|
|
11351
11403
|
"Prompt is required for execution",
|
|
11352
11404
|
[
|
|
11353
|
-
'Provide prompt text: juno-
|
|
11354
|
-
"Use file input: juno-
|
|
11355
|
-
"Use interactive mode: juno-
|
|
11356
|
-
"Use TUI editor: juno-
|
|
11405
|
+
'Provide prompt text: juno-code claude "your prompt here"',
|
|
11406
|
+
"Use file input: juno-code claude prompt.txt",
|
|
11407
|
+
"Use interactive mode: juno-code claude --interactive",
|
|
11408
|
+
"Use TUI editor: juno-code claude --interactive-prompt",
|
|
11357
11409
|
"Create default prompt file: .juno_task/prompt.md"
|
|
11358
11410
|
]
|
|
11359
11411
|
);
|
|
@@ -11578,7 +11630,7 @@ var init_main = __esm({
|
|
|
11578
11630
|
this.enableFeedback = enableFeedback;
|
|
11579
11631
|
if (this.enableFeedback) {
|
|
11580
11632
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
11581
|
-
command: "juno-
|
|
11633
|
+
command: "juno-code",
|
|
11582
11634
|
commandArgs: ["feedback"],
|
|
11583
11635
|
verbose: this.config.verbose,
|
|
11584
11636
|
showHeader: true,
|
|
@@ -12056,7 +12108,7 @@ var SimpleInitTUI = class {
|
|
|
12056
12108
|
* Simplified gather method implementing the minimal flow
|
|
12057
12109
|
*/
|
|
12058
12110
|
async gather() {
|
|
12059
|
-
console.log(chalk12.blue.bold("\n\u{1F680} Juno
|
|
12111
|
+
console.log(chalk12.blue.bold("\n\u{1F680} Juno Code Project Initialization\n"));
|
|
12060
12112
|
console.log(chalk12.yellow("\u{1F4C1} Step 1: Project Directory"));
|
|
12061
12113
|
const targetDirectory = await this.promptForDirectory();
|
|
12062
12114
|
console.log(chalk12.yellow("\n\u{1F4DD} Step 2: Main Task"));
|
|
@@ -12468,7 +12520,7 @@ This directory contains detailed specifications for the project components.
|
|
|
12468
12520
|
|
|
12469
12521
|
## System Overview
|
|
12470
12522
|
|
|
12471
|
-
This project uses AI-assisted development with juno-
|
|
12523
|
+
This project uses AI-assisted development with juno-code to achieve: ${variables.TASK}
|
|
12472
12524
|
|
|
12473
12525
|
## Architectural Decisions
|
|
12474
12526
|
|
|
@@ -12491,7 +12543,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12491
12543
|
|
|
12492
12544
|
- **Language**: TypeScript
|
|
12493
12545
|
- **Runtime**: Node.js
|
|
12494
|
-
- **CLI**: juno-
|
|
12546
|
+
- **CLI**: juno-code with AI subagent integration
|
|
12495
12547
|
- **Version Control**: Git
|
|
12496
12548
|
- **Documentation**: Markdown-based
|
|
12497
12549
|
|
|
@@ -12550,7 +12602,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12550
12602
|
|
|
12551
12603
|
## Project Overview
|
|
12552
12604
|
|
|
12553
|
-
This project was initialized on ${variables.CURRENT_DATE} using juno-
|
|
12605
|
+
This project was initialized on ${variables.CURRENT_DATE} using juno-code.
|
|
12554
12606
|
|
|
12555
12607
|
**Main Task**: ${variables.TASK}
|
|
12556
12608
|
**Preferred Subagent**: ${variables.EDITOR}
|
|
@@ -12564,9 +12616,9 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12564
12616
|
- Use \`npm run test:binary\` for CLI testing
|
|
12565
12617
|
|
|
12566
12618
|
### Key Commands
|
|
12567
|
-
- \`juno-
|
|
12568
|
-
- \`juno-
|
|
12569
|
-
- \`juno-
|
|
12619
|
+
- \`juno-code start\` - Begin task execution
|
|
12620
|
+
- \`juno-code -s ${variables.EDITOR}\` - Quick execution with preferred subagent
|
|
12621
|
+
- \`juno-code feedback\` - Provide feedback on the process
|
|
12570
12622
|
|
|
12571
12623
|
## Project Structure
|
|
12572
12624
|
|
|
@@ -12688,27 +12740,27 @@ ${variables.DESCRIPTION}
|
|
|
12688
12740
|
|
|
12689
12741
|
## Overview
|
|
12690
12742
|
|
|
12691
|
-
This project uses juno-
|
|
12743
|
+
This project uses juno-code for AI-powered development with ${variables.EDITOR} as the primary AI subagent.
|
|
12692
12744
|
|
|
12693
12745
|
## Getting Started
|
|
12694
12746
|
|
|
12695
12747
|
### Prerequisites
|
|
12696
12748
|
|
|
12697
12749
|
- Node.js (v18 or higher)
|
|
12698
|
-
- juno-
|
|
12750
|
+
- juno-code CLI installed
|
|
12699
12751
|
- Git for version control
|
|
12700
12752
|
|
|
12701
12753
|
### Quick Start
|
|
12702
12754
|
|
|
12703
12755
|
\`\`\`bash
|
|
12704
12756
|
# Start task execution with production-ready AI instructions
|
|
12705
|
-
juno-
|
|
12757
|
+
juno-code start
|
|
12706
12758
|
|
|
12707
12759
|
# Or use main command with preferred subagent
|
|
12708
|
-
juno-
|
|
12760
|
+
juno-code -s ${variables.EDITOR}
|
|
12709
12761
|
|
|
12710
12762
|
# Provide feedback on the development process
|
|
12711
|
-
juno-
|
|
12763
|
+
juno-code feedback
|
|
12712
12764
|
\`\`\`
|
|
12713
12765
|
|
|
12714
12766
|
## Project Structure
|
|
@@ -12770,12 +12822,12 @@ ${variables.GIT_URL}` : ""}
|
|
|
12770
12822
|
1. **Review Task**: Check \`.juno_task/init.md\` for main task
|
|
12771
12823
|
2. **Check Plan**: Review \`.juno_task/plan.md\` for current priorities
|
|
12772
12824
|
3. **Track Implementation**: Follow \`.juno_task/implement.md\` for current implementation steps
|
|
12773
|
-
4. **Provide Feedback**: Use \`juno-
|
|
12825
|
+
4. **Provide Feedback**: Use \`juno-code feedback\` for issues or suggestions
|
|
12774
12826
|
5. **Monitor Progress**: Track AI development through \`.juno_task/prompt.md\`
|
|
12775
12827
|
|
|
12776
12828
|
---
|
|
12777
12829
|
|
|
12778
|
-
Created with juno-
|
|
12830
|
+
Created with juno-code on ${variables.CURRENT_DATE}
|
|
12779
12831
|
${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
12780
12832
|
`;
|
|
12781
12833
|
await fs.writeFile(path.join(targetDirectory, "README.md"), readmeContent);
|
|
@@ -12838,18 +12890,17 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12838
12890
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
12839
12891
|
const __filename = fileURLToPath(import.meta.url);
|
|
12840
12892
|
const __dirname = path.dirname(__filename);
|
|
12841
|
-
|
|
12893
|
+
process.env.JUNO_TASK_MCP_SERVER_PATH || path.join(__dirname, "../../../roundtable_mcp_server/roundtable_mcp_server/server.py");
|
|
12842
12894
|
const mcpContent = {
|
|
12843
12895
|
mcpServers: {
|
|
12844
12896
|
"roundtable-ai": {
|
|
12845
12897
|
name: "roundtable-ai",
|
|
12846
|
-
command: "
|
|
12847
|
-
args: [
|
|
12898
|
+
command: "roundtable-ai",
|
|
12899
|
+
args: [],
|
|
12848
12900
|
timeout: 7200,
|
|
12849
12901
|
enable_default_progress_callback: true,
|
|
12850
12902
|
suppress_subprocess_logs: true,
|
|
12851
12903
|
env: {
|
|
12852
|
-
PYTHONPATH: path.resolve(__dirname, "../.."),
|
|
12853
12904
|
ROUNDTABLE_DEBUG: "false"
|
|
12854
12905
|
},
|
|
12855
12906
|
_metadata: {
|
|
@@ -12963,7 +13014,8 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12963
13014
|
const { execSync } = await import('child_process');
|
|
12964
13015
|
try {
|
|
12965
13016
|
const output = execSync(installScript, {
|
|
12966
|
-
cwd:
|
|
13017
|
+
cwd: process.cwd(),
|
|
13018
|
+
// FIXED: Run from project root, not .juno_task
|
|
12967
13019
|
encoding: "utf8",
|
|
12968
13020
|
stdio: "pipe"
|
|
12969
13021
|
// Capture output instead of inheriting
|
|
@@ -13001,11 +13053,11 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
13001
13053
|
printNextSteps(targetDirectory, editor) {
|
|
13002
13054
|
console.log(chalk12.blue("\n\u{1F3AF} Next Steps:"));
|
|
13003
13055
|
console.log(chalk12.white(` cd ${targetDirectory}`));
|
|
13004
|
-
console.log(chalk12.white(" juno-
|
|
13005
|
-
console.log(chalk12.white(` juno-
|
|
13056
|
+
console.log(chalk12.white(" juno-code start # Start task execution"));
|
|
13057
|
+
console.log(chalk12.white(` juno-code -s ${editor} # Quick execution with ${editor}`));
|
|
13006
13058
|
console.log(chalk12.gray("\n\u{1F4A1} Tips:"));
|
|
13007
13059
|
console.log(chalk12.gray(" - Edit .juno_task/prompt.md to modify your main task"));
|
|
13008
|
-
console.log(chalk12.gray(' - Use "juno-
|
|
13060
|
+
console.log(chalk12.gray(' - Use "juno-code --help" to see all available commands'));
|
|
13009
13061
|
console.log(chalk12.gray(" - Run .juno_task/scripts/clean_logs_folder.sh to archive old logs"));
|
|
13010
13062
|
}
|
|
13011
13063
|
/**
|
|
@@ -13060,10 +13112,10 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
13060
13112
|
execSync("git add .", { cwd: targetDirectory, stdio: "ignore" });
|
|
13061
13113
|
const commitMessage = `Initial commit: ${this.context.task || "Project initialization"}
|
|
13062
13114
|
|
|
13063
|
-
\u{1F916} Generated with juno-
|
|
13115
|
+
\u{1F916} Generated with juno-code using ${this.context.subagent} subagent
|
|
13064
13116
|
\u{1F3AF} Main Task: ${this.context.task}
|
|
13065
13117
|
|
|
13066
|
-
\u{1F680} Generated with [juno-
|
|
13118
|
+
\u{1F680} Generated with [juno-code](https://github.com/owner/juno-code-ts)
|
|
13067
13119
|
|
|
13068
13120
|
Co-Authored-By: Claude <noreply@anthropic.com>`;
|
|
13069
13121
|
execSync(`git commit -m "${commitMessage}"`, {
|
|
@@ -13129,7 +13181,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13129
13181
|
try {
|
|
13130
13182
|
const globalOptions = command.parent?.opts() || {};
|
|
13131
13183
|
const allOptions2 = { ...options, ...globalOptions };
|
|
13132
|
-
console.log(chalk12.blue.bold("\u{1F3AF} Juno
|
|
13184
|
+
console.log(chalk12.blue.bold("\u{1F3AF} Juno Code - Simplified Initialization"));
|
|
13133
13185
|
let context;
|
|
13134
13186
|
const shouldUseInteractive = options.interactive || !options.task && !process.env.CI || process.env.FORCE_INTERACTIVE === "1";
|
|
13135
13187
|
if (shouldUseInteractive) {
|
|
@@ -13170,7 +13222,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13170
13222
|
}
|
|
13171
13223
|
}
|
|
13172
13224
|
function configureInitCommand(program) {
|
|
13173
|
-
program.command("init").description("Initialize new juno-
|
|
13225
|
+
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) => {
|
|
13174
13226
|
const initOptions = {
|
|
13175
13227
|
directory,
|
|
13176
13228
|
force: options.force,
|
|
@@ -13188,9 +13240,9 @@ function configureInitCommand(program) {
|
|
|
13188
13240
|
await initCommandHandler([], initOptions, command);
|
|
13189
13241
|
}).addHelpText("after", `
|
|
13190
13242
|
Examples:
|
|
13191
|
-
$ juno-
|
|
13192
|
-
$ juno-
|
|
13193
|
-
$ juno-
|
|
13243
|
+
$ juno-code init # Initialize in current directory
|
|
13244
|
+
$ juno-code init my-project # Initialize in ./my-project
|
|
13245
|
+
$ juno-code init --interactive # Use simple interactive setup
|
|
13194
13246
|
|
|
13195
13247
|
Simplified Interactive Flow:
|
|
13196
13248
|
1. Project Root \u2192 Specify target directory
|
|
@@ -14963,7 +15015,7 @@ var ProjectContextLoader = class {
|
|
|
14963
15015
|
const junoTaskDir = path.join(this.directory, ".juno_task");
|
|
14964
15016
|
if (!await fs.pathExists(junoTaskDir)) {
|
|
14965
15017
|
throw new FileSystemError(
|
|
14966
|
-
'No .juno_task directory found. Run "juno-
|
|
15018
|
+
'No .juno_task directory found. Run "juno-code init" first.',
|
|
14967
15019
|
junoTaskDir
|
|
14968
15020
|
);
|
|
14969
15021
|
}
|
|
@@ -15032,7 +15084,7 @@ var ExecutionCoordinator = class {
|
|
|
15032
15084
|
this.sessionManager = await createSessionManager(this.config);
|
|
15033
15085
|
if (this.enableFeedback) {
|
|
15034
15086
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
15035
|
-
command: "juno-
|
|
15087
|
+
command: "juno-code",
|
|
15036
15088
|
commandArgs: ["feedback"],
|
|
15037
15089
|
verbose: this.config.verbose,
|
|
15038
15090
|
showHeader: true,
|
|
@@ -15180,7 +15232,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15180
15232
|
try {
|
|
15181
15233
|
const globalOptions = command.parent?.opts() || {};
|
|
15182
15234
|
const allOptions2 = { ...globalOptions, ...options };
|
|
15183
|
-
writeTerminalProgress(chalk12.blue.bold("\u{1F3AF} Juno
|
|
15235
|
+
writeTerminalProgress(chalk12.blue.bold("\u{1F3AF} Juno Code - Start Execution") + "\n");
|
|
15184
15236
|
const logLevel = allOptions2.logLevel ? LogLevel[allOptions2.logLevel.toUpperCase()] : 2 /* INFO */;
|
|
15185
15237
|
cliLogger.startTimer("start_command_total");
|
|
15186
15238
|
cliLogger.info("Starting execution command", { options: allOptions2, directory: allOptions2.directory || process.cwd() });
|
|
@@ -15230,7 +15282,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15230
15282
|
`Invalid subagent: ${allOptions2.subagent}`,
|
|
15231
15283
|
[
|
|
15232
15284
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
15233
|
-
"Run `juno-
|
|
15285
|
+
"Run `juno-code help start` for examples"
|
|
15234
15286
|
]
|
|
15235
15287
|
);
|
|
15236
15288
|
}
|
|
@@ -15272,7 +15324,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15272
15324
|
if (sessionId) {
|
|
15273
15325
|
writeTerminalProgress(chalk12.blue(`
|
|
15274
15326
|
\u{1F4C1} Session ID: ${sessionId}`) + "\n");
|
|
15275
|
-
writeTerminalProgress(chalk12.gray(' Use "juno-
|
|
15327
|
+
writeTerminalProgress(chalk12.gray(' Use "juno-code session info ' + sessionId + '" for detailed information') + "\n");
|
|
15276
15328
|
sessionLogger.info("Session completed", {
|
|
15277
15329
|
sessionId,
|
|
15278
15330
|
status: result.status,
|
|
@@ -15339,20 +15391,20 @@ function configureStartCommand(program) {
|
|
|
15339
15391
|
await startCommandHandler([], options, command);
|
|
15340
15392
|
}).addHelpText("after", `
|
|
15341
15393
|
Examples:
|
|
15342
|
-
$ juno-
|
|
15343
|
-
$ juno-
|
|
15344
|
-
$ juno-
|
|
15345
|
-
$ juno-
|
|
15346
|
-
$ juno-
|
|
15347
|
-
$ juno-
|
|
15348
|
-
$ juno-
|
|
15349
|
-
$ juno-
|
|
15350
|
-
$ juno-
|
|
15351
|
-
$ juno-
|
|
15352
|
-
$ juno-
|
|
15353
|
-
$ juno-
|
|
15354
|
-
$ juno-
|
|
15355
|
-
$ juno-
|
|
15394
|
+
$ juno-code start # Start execution in current directory
|
|
15395
|
+
$ juno-code start -s claude # Use claude subagent
|
|
15396
|
+
$ juno-code start --subagent cursor # Use cursor subagent
|
|
15397
|
+
$ juno-code start -s codex --max-iterations 10 # Use codex with 10 iterations
|
|
15398
|
+
$ juno-code start --model sonnet-4 # Use specific model
|
|
15399
|
+
$ juno-code start --directory ./my-project # Execute in specific directory
|
|
15400
|
+
$ juno-code start --enable-feedback # Enable feedback collection while running
|
|
15401
|
+
$ juno-code start --verbose # Show detailed progress
|
|
15402
|
+
$ juno-code start --quiet # Minimize output
|
|
15403
|
+
$ juno-code start --show-metrics # Display performance summary
|
|
15404
|
+
$ juno-code start --show-dashboard # Interactive performance dashboard
|
|
15405
|
+
$ juno-code start --show-trends # Show historical performance trends
|
|
15406
|
+
$ juno-code start --save-metrics # Save metrics to .juno_task/metrics.json
|
|
15407
|
+
$ juno-code start --save-metrics custom.json # Save metrics to custom file
|
|
15356
15408
|
|
|
15357
15409
|
Feedback Collection:
|
|
15358
15410
|
--enable-feedback Enable concurrent feedback collection
|
|
@@ -15368,13 +15420,13 @@ Performance Options:
|
|
|
15368
15420
|
--metrics-file <path> Custom metrics file path
|
|
15369
15421
|
|
|
15370
15422
|
Environment Variables:
|
|
15371
|
-
|
|
15372
|
-
|
|
15373
|
-
|
|
15374
|
-
|
|
15423
|
+
JUNO_CODE_MAX_ITERATIONS Default maximum iterations
|
|
15424
|
+
JUNO_CODE_MODEL Default model to use
|
|
15425
|
+
JUNO_CODE_MCP_SERVER_PATH Path to MCP server executable
|
|
15426
|
+
JUNO_CODE_MCP_TIMEOUT MCP operation timeout (ms)
|
|
15375
15427
|
|
|
15376
15428
|
Notes:
|
|
15377
|
-
- Requires .juno_task/init.md file (created by 'juno-
|
|
15429
|
+
- Requires .juno_task/init.md file (created by 'juno-code init')
|
|
15378
15430
|
- Creates a new session for tracking execution
|
|
15379
15431
|
- Progress is displayed in real-time
|
|
15380
15432
|
- Performance metrics are collected automatically
|
|
@@ -16440,18 +16492,18 @@ function configureTestCommand(program) {
|
|
|
16440
16492
|
await testCommandHandler(target, testOptions, command);
|
|
16441
16493
|
}).addHelpText("after", `
|
|
16442
16494
|
Examples:
|
|
16443
|
-
$ juno-
|
|
16444
|
-
$ juno-
|
|
16445
|
-
$ juno-
|
|
16446
|
-
$ juno-
|
|
16447
|
-
$ juno-
|
|
16448
|
-
$ juno-
|
|
16449
|
-
$ juno-
|
|
16450
|
-
$ juno-
|
|
16451
|
-
$ juno-
|
|
16452
|
-
$ juno-
|
|
16453
|
-
$ juno-
|
|
16454
|
-
$ juno-
|
|
16495
|
+
$ juno-code test --generate # Generate tests for current project
|
|
16496
|
+
$ juno-code test --run # Run existing tests
|
|
16497
|
+
$ juno-code test --generate --run # Generate and run tests
|
|
16498
|
+
$ juno-code test src/utils.ts --generate # Generate tests for specific file
|
|
16499
|
+
$ juno-code test --type unit --intelligence smart # Generate smart unit tests
|
|
16500
|
+
$ juno-code test --subagent cursor --generate # Use Cursor for test generation
|
|
16501
|
+
$ juno-code test --run --coverage # Run tests with coverage
|
|
16502
|
+
$ juno-code test --analyze --quality thorough # Analyze test quality thoroughly
|
|
16503
|
+
$ juno-code test --report --format html # Generate HTML report
|
|
16504
|
+
$ juno-code test --framework jest --generate # Generate Jest tests
|
|
16505
|
+
$ juno-code test --template api-integration # Use specific template
|
|
16506
|
+
$ juno-code test --watch # Run tests in watch mode
|
|
16455
16507
|
|
|
16456
16508
|
Test Types:
|
|
16457
16509
|
unit Unit tests for individual functions/classes
|
|
@@ -17023,7 +17075,7 @@ function getFeedbackFile(options) {
|
|
|
17023
17075
|
return options.file || path.join(process.cwd(), ".juno_task", "USER_FEEDBACK.md");
|
|
17024
17076
|
}
|
|
17025
17077
|
function configureFeedbackCommand(program) {
|
|
17026
|
-
program.command("feedback").description("Submit feedback about juno-
|
|
17078
|
+
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) => {
|
|
17027
17079
|
const feedbackOptions = {
|
|
17028
17080
|
file: options.file,
|
|
17029
17081
|
interactive: options.interactive,
|
|
@@ -17044,18 +17096,18 @@ function configureFeedbackCommand(program) {
|
|
|
17044
17096
|
await feedbackCommandHandler(args, feedbackOptions);
|
|
17045
17097
|
}).addHelpText("after", `
|
|
17046
17098
|
Examples:
|
|
17047
|
-
$ juno-
|
|
17048
|
-
$ juno-
|
|
17049
|
-
$ juno-
|
|
17050
|
-
$ juno-
|
|
17051
|
-
$ juno-
|
|
17052
|
-
$ juno-
|
|
17053
|
-
$ juno-
|
|
17054
|
-
$ juno-
|
|
17055
|
-
$ juno-
|
|
17056
|
-
$ juno-
|
|
17057
|
-
$ juno-
|
|
17058
|
-
$ juno-
|
|
17099
|
+
$ juno-code feedback # Interactive feedback form
|
|
17100
|
+
$ juno-code feedback "Issue with command" # Direct feedback text
|
|
17101
|
+
$ juno-code feedback --interactive # Use interactive form
|
|
17102
|
+
$ juno-code feedback --issue "Bug description" --test "Should work without errors" # Issue with test criteria
|
|
17103
|
+
$ juno-code feedback -is "Connection timeout" -t "Connect within 30 seconds" # Short form flags
|
|
17104
|
+
$ juno-code feedback -is "UI issue" -tc "Should be intuitive" # Alternative short form
|
|
17105
|
+
$ juno-code feedback --detail "Bug description" --test "Should work without errors" # Issue with test criteria
|
|
17106
|
+
$ juno-code feedback -d "Connection timeout" -t "Connect within 30 seconds" # Short form flags
|
|
17107
|
+
$ juno-code feedback --description "UI issue" --test "Should be intuitive" # Alternative form
|
|
17108
|
+
$ juno-code feedback archive # Archive resolved issues to keep file lean
|
|
17109
|
+
$ juno-code feedback compact # Compact CLAUDE.md and AGENTS.md
|
|
17110
|
+
$ juno-code feedback compact CLAUDE.md # Compact specific file
|
|
17059
17111
|
|
|
17060
17112
|
Enhanced Features:
|
|
17061
17113
|
1. Issue Description \u2192 Structured feedback with optional test criteria
|
|
@@ -17097,7 +17149,7 @@ async function handleCompactCommand(subArgs, options) {
|
|
|
17097
17149
|
if (filesToCompact.length === 0) {
|
|
17098
17150
|
console.log(chalk12.yellow("\u{1F4C4} No config files found to compact"));
|
|
17099
17151
|
console.log(chalk12.gray(" Looking for: CLAUDE.md, AGENTS.md"));
|
|
17100
|
-
console.log(chalk12.gray(" Usage: juno-
|
|
17152
|
+
console.log(chalk12.gray(" Usage: juno-code feedback compact [file1] [file2]"));
|
|
17101
17153
|
return;
|
|
17102
17154
|
}
|
|
17103
17155
|
console.log(chalk12.blue.bold("\n\u{1F5DC}\uFE0F File Compaction Process\n"));
|
|
@@ -17204,7 +17256,7 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17204
17256
|
if (!issueText.trim()) {
|
|
17205
17257
|
throw new ValidationError(
|
|
17206
17258
|
"Issue description is required when using --issue/-is/--detail/--description or --test/-tc flags",
|
|
17207
|
-
['Use: juno-
|
|
17259
|
+
['Use: juno-code feedback -is "Issue description" -t "Test criteria" or -tc "Test criteria"']
|
|
17208
17260
|
);
|
|
17209
17261
|
}
|
|
17210
17262
|
const feedbackFile = getFeedbackFile(options);
|
|
@@ -17254,10 +17306,10 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17254
17306
|
} else {
|
|
17255
17307
|
console.log(chalk12.yellow("Use --interactive mode, --issue/-is/--detail/--description flag, or provide feedback text"));
|
|
17256
17308
|
console.log(chalk12.gray("Examples:"));
|
|
17257
|
-
console.log(chalk12.gray(' juno-
|
|
17258
|
-
console.log(chalk12.gray(' juno-
|
|
17259
|
-
console.log(chalk12.gray(' juno-
|
|
17260
|
-
console.log(chalk12.gray(' juno-
|
|
17309
|
+
console.log(chalk12.gray(' juno-code feedback --issue "Bug description"'));
|
|
17310
|
+
console.log(chalk12.gray(' juno-code feedback -is "Issue" -t "Test criteria"'));
|
|
17311
|
+
console.log(chalk12.gray(' juno-code feedback --detail "Bug description"'));
|
|
17312
|
+
console.log(chalk12.gray(' juno-code feedback -d "Issue" -t "Test criteria"'));
|
|
17261
17313
|
}
|
|
17262
17314
|
break;
|
|
17263
17315
|
}
|
|
@@ -17515,14 +17567,14 @@ async function handleSessionInfo(args, options, sessionManager) {
|
|
|
17515
17567
|
const sessionId = args[0];
|
|
17516
17568
|
if (!sessionId) {
|
|
17517
17569
|
console.log(chalk12.red("Session ID is required"));
|
|
17518
|
-
console.log(chalk12.gray("Usage: juno-
|
|
17519
|
-
console.log(chalk12.gray('Use "juno-
|
|
17570
|
+
console.log(chalk12.gray("Usage: juno-code session info <session-id>"));
|
|
17571
|
+
console.log(chalk12.gray('Use "juno-code session list" to see available sessions'));
|
|
17520
17572
|
return;
|
|
17521
17573
|
}
|
|
17522
17574
|
const session = await sessionManager.getSession(sessionId);
|
|
17523
17575
|
if (!session) {
|
|
17524
17576
|
console.log(chalk12.red(`Session not found: ${sessionId}`));
|
|
17525
|
-
console.log(chalk12.gray('Use "juno-
|
|
17577
|
+
console.log(chalk12.gray('Use "juno-code session list" to see available sessions'));
|
|
17526
17578
|
return;
|
|
17527
17579
|
}
|
|
17528
17580
|
const formatter = new SessionDisplayFormatter(options.verbose);
|
|
@@ -17532,7 +17584,7 @@ async function handleSessionRemove(args, options, sessionManager) {
|
|
|
17532
17584
|
const sessionIds = args;
|
|
17533
17585
|
if (sessionIds.length === 0) {
|
|
17534
17586
|
console.log(chalk12.red("At least one session ID is required"));
|
|
17535
|
-
console.log(chalk12.gray("Usage: juno-
|
|
17587
|
+
console.log(chalk12.gray("Usage: juno-code session remove <session-id> [session-id...]"));
|
|
17536
17588
|
process.exit(1);
|
|
17537
17589
|
}
|
|
17538
17590
|
let successCount = 0;
|
|
@@ -17661,15 +17713,15 @@ Subcommands:
|
|
|
17661
17713
|
clean, cleanup Clean up old/empty sessions
|
|
17662
17714
|
|
|
17663
17715
|
Examples:
|
|
17664
|
-
$ juno-
|
|
17665
|
-
$ juno-
|
|
17666
|
-
$ juno-
|
|
17667
|
-
$ juno-
|
|
17668
|
-
$ juno-
|
|
17669
|
-
$ juno-
|
|
17670
|
-
$ juno-
|
|
17671
|
-
$ juno-
|
|
17672
|
-
$ juno-
|
|
17716
|
+
$ juno-code session # List all sessions
|
|
17717
|
+
$ juno-code session list --limit 10 # Show 10 most recent
|
|
17718
|
+
$ juno-code session list --subagent claude # Filter by subagent
|
|
17719
|
+
$ juno-code session list --status completed failed # Filter by status
|
|
17720
|
+
$ juno-code session info abc123 # Show session details
|
|
17721
|
+
$ juno-code session remove abc123 def456 # Remove sessions
|
|
17722
|
+
$ juno-code session remove abc123 --force # Skip confirmation
|
|
17723
|
+
$ juno-code session clean --days 30 # Remove sessions >30 days
|
|
17724
|
+
$ juno-code session clean --empty --force # Remove empty sessions
|
|
17673
17725
|
|
|
17674
17726
|
Environment Variables:
|
|
17675
17727
|
JUNO_TASK_SESSION_DIR Session storage directory
|
|
@@ -17966,7 +18018,7 @@ var GitManager = class {
|
|
|
17966
18018
|
/**
|
|
17967
18019
|
* Create initial commit
|
|
17968
18020
|
*/
|
|
17969
|
-
async createInitialCommit(message = "Initial commit - juno-
|
|
18021
|
+
async createInitialCommit(message = "Initial commit - juno-code project setup") {
|
|
17970
18022
|
try {
|
|
17971
18023
|
const { execa: execa2 } = await import('execa');
|
|
17972
18024
|
await execa2("git", ["add", "."], { cwd: this.workingDirectory });
|
|
@@ -18051,7 +18103,7 @@ GIT_URL: ${gitUrl}
|
|
|
18051
18103
|
}
|
|
18052
18104
|
await fs.writeFile(configPath, content, "utf-8");
|
|
18053
18105
|
} catch (error) {
|
|
18054
|
-
console.warn(`Warning: Failed to update juno-
|
|
18106
|
+
console.warn(`Warning: Failed to update juno-code configuration: ${error}`);
|
|
18055
18107
|
}
|
|
18056
18108
|
}
|
|
18057
18109
|
/**
|
|
@@ -18346,7 +18398,7 @@ var GitDisplayFormatter = class {
|
|
|
18346
18398
|
console.log(chalk12.gray(` git push -u origin ${info.currentBranch || "main"}`));
|
|
18347
18399
|
}
|
|
18348
18400
|
console.log(" 3. Start working on your project:");
|
|
18349
|
-
console.log(chalk12.gray(" juno-
|
|
18401
|
+
console.log(chalk12.gray(" juno-code start"));
|
|
18350
18402
|
}
|
|
18351
18403
|
formatStatus(status) {
|
|
18352
18404
|
const statusColors = {
|
|
@@ -18461,7 +18513,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18461
18513
|
console.log(` Web URL: ${chalk12.blue(webUrl)}`);
|
|
18462
18514
|
} else {
|
|
18463
18515
|
console.log(chalk12.yellow("\n\u{1F517} No upstream repository configured"));
|
|
18464
|
-
console.log(chalk12.gray(" Use: juno-
|
|
18516
|
+
console.log(chalk12.gray(" Use: juno-code setup-git <url> to configure"));
|
|
18465
18517
|
}
|
|
18466
18518
|
return;
|
|
18467
18519
|
}
|
|
@@ -18469,7 +18521,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18469
18521
|
const info = await gitManager.getRepositoryInfo();
|
|
18470
18522
|
if (!info.isRepository) {
|
|
18471
18523
|
console.log(chalk12.yellow("\u274C Not a Git repository"));
|
|
18472
|
-
console.log(chalk12.gray(" Initialize with: juno-
|
|
18524
|
+
console.log(chalk12.gray(" Initialize with: juno-code setup-git --init"));
|
|
18473
18525
|
return;
|
|
18474
18526
|
}
|
|
18475
18527
|
const upstreamConfig = await gitManager.getUpstreamConfig();
|
|
@@ -18574,10 +18626,10 @@ function configureSetupGitCommand(program) {
|
|
|
18574
18626
|
await setupGitCommandHandler(args, options);
|
|
18575
18627
|
}).addHelpText("after", `
|
|
18576
18628
|
Examples:
|
|
18577
|
-
$ juno-
|
|
18578
|
-
$ juno-
|
|
18579
|
-
$ juno-
|
|
18580
|
-
$ juno-
|
|
18629
|
+
$ juno-code setup-git # Interactive setup
|
|
18630
|
+
$ juno-code setup-git https://github.com/owner/repo # Set specific URL
|
|
18631
|
+
$ juno-code setup-git --show # Show current config
|
|
18632
|
+
$ juno-code setup-git --remove # Remove upstream URL
|
|
18581
18633
|
|
|
18582
18634
|
Git URL Examples:
|
|
18583
18635
|
https://github.com/owner/repo.git # GitHub HTTPS
|
|
@@ -19229,16 +19281,16 @@ function configureLogsCommand(program) {
|
|
|
19229
19281
|
await logsCommandHandler([], options);
|
|
19230
19282
|
}).addHelpText("after", `
|
|
19231
19283
|
Examples:
|
|
19232
|
-
$ juno-
|
|
19233
|
-
$ juno-
|
|
19234
|
-
$ juno-
|
|
19235
|
-
$ juno-
|
|
19236
|
-
$ juno-
|
|
19237
|
-
$ juno-
|
|
19238
|
-
$ juno-
|
|
19239
|
-
$ juno-
|
|
19240
|
-
$ juno-
|
|
19241
|
-
$ juno-
|
|
19284
|
+
$ juno-code logs # Show recent logs
|
|
19285
|
+
$ juno-code logs --interactive # Interactive log viewer
|
|
19286
|
+
$ juno-code logs --level error # Show only errors
|
|
19287
|
+
$ juno-code logs --context mcp # Show only MCP logs
|
|
19288
|
+
$ juno-code logs --search "connection" # Search for connection logs
|
|
19289
|
+
$ juno-code logs --tail 100 # Show last 100 entries
|
|
19290
|
+
$ juno-code logs --follow # Follow logs in real-time
|
|
19291
|
+
$ juno-code logs --export logs.json # Export logs to file
|
|
19292
|
+
$ juno-code logs --stats # Show statistics only
|
|
19293
|
+
$ juno-code logs --format json # JSON output format
|
|
19242
19294
|
|
|
19243
19295
|
Interactive Viewer:
|
|
19244
19296
|
\u2191\u2193 or j/k Navigate entries
|
|
@@ -19919,22 +19971,22 @@ var QUICK_REFERENCE = [
|
|
|
19919
19971
|
{
|
|
19920
19972
|
name: "init",
|
|
19921
19973
|
description: "Initialize new project",
|
|
19922
|
-
usage: "juno-
|
|
19974
|
+
usage: "juno-code init [--interactive]"
|
|
19923
19975
|
},
|
|
19924
19976
|
{
|
|
19925
19977
|
name: "start",
|
|
19926
19978
|
description: "Execute task",
|
|
19927
|
-
usage: "juno-
|
|
19979
|
+
usage: "juno-code start [--max-iterations N]"
|
|
19928
19980
|
},
|
|
19929
19981
|
{
|
|
19930
19982
|
name: "logs",
|
|
19931
19983
|
description: "View application logs",
|
|
19932
|
-
usage: "juno-
|
|
19984
|
+
usage: "juno-code logs [--interactive]"
|
|
19933
19985
|
},
|
|
19934
19986
|
{
|
|
19935
19987
|
name: "session",
|
|
19936
19988
|
description: "Manage execution sessions",
|
|
19937
|
-
usage: "juno-
|
|
19989
|
+
usage: "juno-code session <list|info|remove>"
|
|
19938
19990
|
}
|
|
19939
19991
|
]
|
|
19940
19992
|
},
|
|
@@ -19944,22 +19996,22 @@ var QUICK_REFERENCE = [
|
|
|
19944
19996
|
{
|
|
19945
19997
|
name: "claude",
|
|
19946
19998
|
description: "Execute with Claude subagent",
|
|
19947
|
-
usage: 'juno-
|
|
19999
|
+
usage: 'juno-code claude "task description"'
|
|
19948
20000
|
},
|
|
19949
20001
|
{
|
|
19950
20002
|
name: "cursor",
|
|
19951
20003
|
description: "Execute with Cursor subagent",
|
|
19952
|
-
usage: 'juno-
|
|
20004
|
+
usage: 'juno-code cursor "task description"'
|
|
19953
20005
|
},
|
|
19954
20006
|
{
|
|
19955
20007
|
name: "codex",
|
|
19956
20008
|
description: "Execute with Codex subagent",
|
|
19957
|
-
usage: 'juno-
|
|
20009
|
+
usage: 'juno-code codex "task description"'
|
|
19958
20010
|
},
|
|
19959
20011
|
{
|
|
19960
20012
|
name: "gemini",
|
|
19961
20013
|
description: "Execute with Gemini subagent",
|
|
19962
|
-
usage: 'juno-
|
|
20014
|
+
usage: 'juno-code gemini "task description"'
|
|
19963
20015
|
}
|
|
19964
20016
|
]
|
|
19965
20017
|
},
|
|
@@ -19969,22 +20021,22 @@ var QUICK_REFERENCE = [
|
|
|
19969
20021
|
{
|
|
19970
20022
|
name: "feedback",
|
|
19971
20023
|
description: "Collect user feedback",
|
|
19972
|
-
usage: "juno-
|
|
20024
|
+
usage: "juno-code feedback [--interactive]"
|
|
19973
20025
|
},
|
|
19974
20026
|
{
|
|
19975
20027
|
name: "setup-git",
|
|
19976
20028
|
description: "Initialize Git repository",
|
|
19977
|
-
usage: "juno-
|
|
20029
|
+
usage: "juno-code setup-git <repository-url>"
|
|
19978
20030
|
},
|
|
19979
20031
|
{
|
|
19980
20032
|
name: "completion",
|
|
19981
20033
|
description: "Shell completion setup",
|
|
19982
|
-
usage: "juno-
|
|
20034
|
+
usage: "juno-code completion <install|uninstall>"
|
|
19983
20035
|
},
|
|
19984
20036
|
{
|
|
19985
20037
|
name: "help",
|
|
19986
20038
|
description: "Show help information",
|
|
19987
|
-
usage: "juno-
|
|
20039
|
+
usage: "juno-code help [--interactive]"
|
|
19988
20040
|
}
|
|
19989
20041
|
]
|
|
19990
20042
|
}
|
|
@@ -20003,15 +20055,15 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
20003
20055
|
|
|
20004
20056
|
**Solutions**:
|
|
20005
20057
|
1. Install MCP server (e.g., roundtable-mcp-server)
|
|
20006
|
-
2. Check configuration: \`juno-
|
|
20058
|
+
2. Check configuration: \`juno-code init --interactive\`
|
|
20007
20059
|
3. Verify server path: \`which roundtable-mcp-server\`
|
|
20008
|
-
4. Test connection: \`juno-
|
|
20060
|
+
4. Test connection: \`juno-code start --verbose\`
|
|
20009
20061
|
|
|
20010
20062
|
### \u{1F4C1} File System Issues
|
|
20011
20063
|
|
|
20012
20064
|
**Issue**: "init.md not found"
|
|
20013
20065
|
**Cause**: No project initialized in current directory
|
|
20014
|
-
**Solution**: Run \`juno-
|
|
20066
|
+
**Solution**: Run \`juno-code init\` to create project structure
|
|
20015
20067
|
|
|
20016
20068
|
**Issue**: "Permission denied"
|
|
20017
20069
|
**Cause**: Insufficient file permissions
|
|
@@ -20039,19 +20091,19 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
20039
20091
|
Get detailed debug information:
|
|
20040
20092
|
\`\`\`bash
|
|
20041
20093
|
# Verbose execution with debug logging
|
|
20042
|
-
juno-
|
|
20094
|
+
juno-code start --verbose --log-level debug
|
|
20043
20095
|
|
|
20044
20096
|
# View recent error logs
|
|
20045
|
-
juno-
|
|
20097
|
+
juno-code logs --level error --tail 50
|
|
20046
20098
|
|
|
20047
20099
|
# Export logs for analysis
|
|
20048
|
-
juno-
|
|
20100
|
+
juno-code logs --export debug.json --level debug
|
|
20049
20101
|
\`\`\`
|
|
20050
20102
|
|
|
20051
20103
|
## Getting More Help
|
|
20052
20104
|
|
|
20053
|
-
1. **Interactive Help**: \`juno-
|
|
20054
|
-
2. **View Logs**: \`juno-
|
|
20105
|
+
1. **Interactive Help**: \`juno-code help --interactive\`
|
|
20106
|
+
2. **View Logs**: \`juno-code logs --interactive\`
|
|
20055
20107
|
3. **Check Configuration**: Review .juno_task/config.json
|
|
20056
20108
|
4. **Test MCP Connection**: Use --verbose flag with any command
|
|
20057
20109
|
5. **Report Issues**: Include debug logs when reporting problems
|
|
@@ -20060,16 +20112,20 @@ juno-task logs --export debug.json --level debug
|
|
|
20060
20112
|
|
|
20061
20113
|
Useful for debugging:
|
|
20062
20114
|
\`\`\`bash
|
|
20115
|
+
export JUNO_CODE_VERBOSE=true
|
|
20116
|
+
export JUNO_CODE_LOG_LEVEL=debug
|
|
20117
|
+
export NO_COLOR=true # Disable colors for log analysis
|
|
20118
|
+
|
|
20119
|
+
# Legacy variables (still supported for backward compatibility)
|
|
20063
20120
|
export JUNO_TASK_VERBOSE=true
|
|
20064
20121
|
export JUNO_TASK_LOG_LEVEL=debug
|
|
20065
|
-
export NO_COLOR=true # Disable colors for log analysis
|
|
20066
20122
|
\`\`\`
|
|
20067
20123
|
`;
|
|
20068
20124
|
function displayQuickReference(formatter) {
|
|
20069
20125
|
console.log(formatter.panel(
|
|
20070
|
-
"Welcome to juno-
|
|
20126
|
+
"Welcome to juno-code! This quick reference shows the most commonly used commands.",
|
|
20071
20127
|
{
|
|
20072
|
-
title: "\u{1F680} juno-
|
|
20128
|
+
title: "\u{1F680} juno-code Quick Reference",
|
|
20073
20129
|
border: "rounded",
|
|
20074
20130
|
style: "success",
|
|
20075
20131
|
padding: 1
|
|
@@ -20086,8 +20142,8 @@ function displayQuickReference(formatter) {
|
|
|
20086
20142
|
});
|
|
20087
20143
|
});
|
|
20088
20144
|
console.log(formatter.panel(
|
|
20089
|
-
`Use ${chalk12.cyan("juno-
|
|
20090
|
-
Use ${chalk12.cyan("juno-
|
|
20145
|
+
`Use ${chalk12.cyan("juno-code help --interactive")} for comprehensive help with search and tutorials.
|
|
20146
|
+
Use ${chalk12.cyan("juno-code <command> --help")} for detailed command information.`,
|
|
20091
20147
|
{
|
|
20092
20148
|
title: "\u{1F4A1} Next Steps",
|
|
20093
20149
|
border: "rounded",
|
|
@@ -20138,8 +20194,8 @@ function listHelpTopics() {
|
|
|
20138
20194
|
console.log(`${icon} ${chalk12.cyan(topic.id.padEnd(20))} ${topic.title}`);
|
|
20139
20195
|
});
|
|
20140
20196
|
console.log(chalk12.yellow(`
|
|
20141
|
-
Use ${chalk12.cyan("juno-
|
|
20142
|
-
console.log(chalk12.yellow(`Use ${chalk12.cyan("juno-
|
|
20197
|
+
Use ${chalk12.cyan("juno-code help --topic <id>")} to view a specific topic`));
|
|
20198
|
+
console.log(chalk12.yellow(`Use ${chalk12.cyan("juno-code help --interactive")} for full interactive help`));
|
|
20143
20199
|
}
|
|
20144
20200
|
function searchHelpTopics(searchTerm) {
|
|
20145
20201
|
const matchingTopics = [
|
|
@@ -20159,7 +20215,7 @@ function searchHelpTopics(searchTerm) {
|
|
|
20159
20215
|
console.log(chalk12.cyan(`\u2022 ${topicId}`));
|
|
20160
20216
|
});
|
|
20161
20217
|
console.log(chalk12.yellow(`
|
|
20162
|
-
Use ${chalk12.cyan("juno-
|
|
20218
|
+
Use ${chalk12.cyan("juno-code help --topic <id>")} to view details`));
|
|
20163
20219
|
}
|
|
20164
20220
|
async function helpCommandHandler(args, options, command) {
|
|
20165
20221
|
try {
|
|
@@ -20213,12 +20269,12 @@ function configureHelpCommand(program) {
|
|
|
20213
20269
|
await helpCommandHandler([], options);
|
|
20214
20270
|
}).addHelpText("after", `
|
|
20215
20271
|
Examples:
|
|
20216
|
-
$ juno-
|
|
20217
|
-
$ juno-
|
|
20218
|
-
$ juno-
|
|
20219
|
-
$ juno-
|
|
20220
|
-
$ juno-
|
|
20221
|
-
$ juno-
|
|
20272
|
+
$ juno-code help # Quick reference guide
|
|
20273
|
+
$ juno-code help --interactive # Interactive help system
|
|
20274
|
+
$ juno-code help --topic quickstart # Specific topic
|
|
20275
|
+
$ juno-code help --search "mcp" # Search topics
|
|
20276
|
+
$ juno-code help --list # List all topics
|
|
20277
|
+
$ juno-code help --troubleshooting # Troubleshooting guide
|
|
20222
20278
|
|
|
20223
20279
|
Interactive Help Features:
|
|
20224
20280
|
- Browse help by category
|
|
@@ -20247,7 +20303,7 @@ Navigation (Interactive Mode):
|
|
|
20247
20303
|
Notes:
|
|
20248
20304
|
- Interactive help provides the most comprehensive assistance
|
|
20249
20305
|
- Use --verbose with any command for detailed output
|
|
20250
|
-
- Check logs with 'juno-
|
|
20306
|
+
- Check logs with 'juno-code logs' for debugging
|
|
20251
20307
|
- All help content is searchable and cross-referenced
|
|
20252
20308
|
`);
|
|
20253
20309
|
}
|
|
@@ -20263,7 +20319,7 @@ var ProfileDisplayFormatter = class {
|
|
|
20263
20319
|
formatProfileList(profiles, activeProfile) {
|
|
20264
20320
|
if (profiles.length === 0) {
|
|
20265
20321
|
console.log(chalk12.yellow("No configuration profiles found."));
|
|
20266
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20322
|
+
console.log(chalk12.gray('\nUse "juno-code config create <name>" to create your first profile.'));
|
|
20267
20323
|
return;
|
|
20268
20324
|
}
|
|
20269
20325
|
console.log(chalk12.blue.bold(`
|
|
@@ -20357,7 +20413,7 @@ async function listProfiles(options = {}) {
|
|
|
20357
20413
|
const formatter = new ProfileDisplayFormatter(options.verbose);
|
|
20358
20414
|
formatter.formatProfileList(profiles, activeProfile);
|
|
20359
20415
|
if (options.verbose && profiles.length > 0) {
|
|
20360
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20416
|
+
console.log(chalk12.gray('\nUse "juno-code config show <profile>" for detailed information.'));
|
|
20361
20417
|
}
|
|
20362
20418
|
} catch (error) {
|
|
20363
20419
|
const formatter = new ProfileDisplayFormatter();
|
|
@@ -20382,7 +20438,7 @@ async function showProfile(profileName, options = {}) {
|
|
|
20382
20438
|
const formatter = new ProfileDisplayFormatter();
|
|
20383
20439
|
if (error instanceof ProfileNotFoundError) {
|
|
20384
20440
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20385
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20441
|
+
console.log(chalk12.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20386
20442
|
} else {
|
|
20387
20443
|
formatter.formatError(`Failed to show profile: ${error}`);
|
|
20388
20444
|
}
|
|
@@ -20400,7 +20456,7 @@ async function setActiveProfile(profileName) {
|
|
|
20400
20456
|
const formatter = new ProfileDisplayFormatter();
|
|
20401
20457
|
if (error instanceof ProfileNotFoundError) {
|
|
20402
20458
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20403
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20459
|
+
console.log(chalk12.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20404
20460
|
} else {
|
|
20405
20461
|
formatter.formatError(`Failed to set active profile: ${error}`);
|
|
20406
20462
|
}
|
|
@@ -20429,13 +20485,13 @@ async function createProfile(profileName, options = {}) {
|
|
|
20429
20485
|
formatter.formatSuccess(`Profile '${profileName}' created successfully`);
|
|
20430
20486
|
if (options.interactive) {
|
|
20431
20487
|
console.log(chalk12.gray("\nYou can now configure this profile using:"));
|
|
20432
|
-
console.log(chalk12.cyan(` juno-
|
|
20488
|
+
console.log(chalk12.cyan(` juno-code config edit ${profileName}`));
|
|
20433
20489
|
}
|
|
20434
20490
|
} catch (error) {
|
|
20435
20491
|
const formatter = new ProfileDisplayFormatter();
|
|
20436
20492
|
if (error instanceof ProfileExistsError) {
|
|
20437
20493
|
formatter.formatError(`Profile '${profileName}' already exists.`);
|
|
20438
|
-
console.log(chalk12.gray('Use "juno-
|
|
20494
|
+
console.log(chalk12.gray('Use "juno-code config show <profile>" to view existing profile.'));
|
|
20439
20495
|
} else if (error instanceof CircularInheritanceError) {
|
|
20440
20496
|
formatter.formatError(`Circular inheritance detected: ${error.message}`);
|
|
20441
20497
|
} else {
|
|
@@ -20529,12 +20585,12 @@ function setupConfigCommand(program) {
|
|
|
20529
20585
|
configCmd.on("--help", () => {
|
|
20530
20586
|
console.log("");
|
|
20531
20587
|
console.log("Examples:");
|
|
20532
|
-
console.log(" $ juno-
|
|
20533
|
-
console.log(" $ juno-
|
|
20534
|
-
console.log(" $ juno-
|
|
20535
|
-
console.log(' $ juno-
|
|
20536
|
-
console.log(" $ juno-
|
|
20537
|
-
console.log(" $ juno-
|
|
20588
|
+
console.log(" $ juno-code config list # List all profiles");
|
|
20589
|
+
console.log(" $ juno-code config show development # Show development profile");
|
|
20590
|
+
console.log(" $ juno-code config set production # Set active profile");
|
|
20591
|
+
console.log(' $ juno-code config create dev --description "Development settings"');
|
|
20592
|
+
console.log(" $ juno-code config export prod prod.json # Export to file");
|
|
20593
|
+
console.log(" $ juno-code config import backup.json # Import from file");
|
|
20538
20594
|
console.log("");
|
|
20539
20595
|
});
|
|
20540
20596
|
}
|
|
@@ -20632,15 +20688,15 @@ var ShellDetector = class _ShellDetector {
|
|
|
20632
20688
|
switch (shell) {
|
|
20633
20689
|
case "bash":
|
|
20634
20690
|
if (process.platform === "darwin") {
|
|
20635
|
-
return path.join("/usr/local/etc/bash_completion.d", "juno-
|
|
20691
|
+
return path.join("/usr/local/etc/bash_completion.d", "juno-code");
|
|
20636
20692
|
}
|
|
20637
|
-
return path.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-
|
|
20693
|
+
return path.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-code");
|
|
20638
20694
|
case "zsh":
|
|
20639
|
-
return path.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-
|
|
20695
|
+
return path.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-code");
|
|
20640
20696
|
case "fish":
|
|
20641
|
-
return path.join(homeDir, ".config", "fish", "completions", "juno-
|
|
20697
|
+
return path.join(homeDir, ".config", "fish", "completions", "juno-code.fish");
|
|
20642
20698
|
case "powershell":
|
|
20643
|
-
return path.join(homeDir, ".config", "powershell", "completions", "juno-
|
|
20699
|
+
return path.join(homeDir, ".config", "powershell", "completions", "juno-code.ps1");
|
|
20644
20700
|
default:
|
|
20645
20701
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
20646
20702
|
}
|
|
@@ -20662,17 +20718,17 @@ var ShellDetector = class _ShellDetector {
|
|
|
20662
20718
|
getSourceCommand(shell, completionPath) {
|
|
20663
20719
|
switch (shell) {
|
|
20664
20720
|
case "bash":
|
|
20665
|
-
return `# juno-
|
|
20721
|
+
return `# juno-code completion
|
|
20666
20722
|
[ -f "${completionPath}" ] && source "${completionPath}"`;
|
|
20667
20723
|
case "zsh":
|
|
20668
20724
|
const zshDir = path.dirname(completionPath);
|
|
20669
|
-
return `# juno-
|
|
20725
|
+
return `# juno-code completion
|
|
20670
20726
|
fpath=("${zshDir}" $fpath)
|
|
20671
20727
|
autoload -U compinit && compinit`;
|
|
20672
20728
|
case "fish":
|
|
20673
|
-
return `# juno-
|
|
20729
|
+
return `# juno-code completion (automatically loaded)`;
|
|
20674
20730
|
case "powershell":
|
|
20675
|
-
return `# juno-
|
|
20731
|
+
return `# juno-code completion
|
|
20676
20732
|
. "${completionPath}"`;
|
|
20677
20733
|
default:
|
|
20678
20734
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
@@ -20687,7 +20743,7 @@ autoload -U compinit && compinit`;
|
|
|
20687
20743
|
return false;
|
|
20688
20744
|
}
|
|
20689
20745
|
const content = await fs.readFile(configPath, "utf-8");
|
|
20690
|
-
return content.includes("juno-
|
|
20746
|
+
return content.includes("juno-code completion");
|
|
20691
20747
|
} catch {
|
|
20692
20748
|
return false;
|
|
20693
20749
|
}
|
|
@@ -20946,7 +21002,7 @@ var CompletionInstaller = class {
|
|
|
20946
21002
|
}
|
|
20947
21003
|
await this.shellDetector.ensureCompletionDirectory(shell);
|
|
20948
21004
|
await this.shellDetector.ensureConfigDirectory(shell);
|
|
20949
|
-
const script = this.generateEnhancedCompletion(shell, "juno-
|
|
21005
|
+
const script = this.generateEnhancedCompletion(shell, "juno-code");
|
|
20950
21006
|
const completionPath = this.shellDetector.getCompletionPath(shell);
|
|
20951
21007
|
await fs.writeFile(completionPath, script, "utf-8");
|
|
20952
21008
|
const configPath = this.shellDetector.getConfigPath(shell);
|
|
@@ -21035,7 +21091,7 @@ ${sourceCommand}
|
|
|
21035
21091
|
return `#!/bin/bash
|
|
21036
21092
|
|
|
21037
21093
|
# ${commandName} enhanced completion script for bash
|
|
21038
|
-
# Generated by juno-
|
|
21094
|
+
# Generated by juno-code CLI with context-aware features
|
|
21039
21095
|
|
|
21040
21096
|
_${commandName}_completion() {
|
|
21041
21097
|
local cur prev opts base
|
|
@@ -21229,7 +21285,7 @@ complete -F _${commandName}_completion ${commandName}
|
|
|
21229
21285
|
return `#compdef ${commandName}
|
|
21230
21286
|
|
|
21231
21287
|
# ${commandName} enhanced completion script for zsh
|
|
21232
|
-
# Generated by juno-
|
|
21288
|
+
# Generated by juno-code CLI with context-aware features
|
|
21233
21289
|
|
|
21234
21290
|
_${commandName}() {
|
|
21235
21291
|
local context state line
|
|
@@ -21384,7 +21440,7 @@ _${commandName} "$@"
|
|
|
21384
21440
|
*/
|
|
21385
21441
|
generateEnhancedFishCompletion(commandName) {
|
|
21386
21442
|
return `# ${commandName} enhanced completion script for fish
|
|
21387
|
-
# Generated by juno-
|
|
21443
|
+
# Generated by juno-code CLI with context-aware features
|
|
21388
21444
|
|
|
21389
21445
|
# Context-aware model completion
|
|
21390
21446
|
function __${commandName}_complete_models
|
|
@@ -21640,7 +21696,7 @@ var CompletionCommand = class {
|
|
|
21640
21696
|
const uninstalledShells = completionStatus.filter((status) => !status.isInstalled && !status.error).map((status) => status.shell);
|
|
21641
21697
|
if (uninstalledShells.length > 0) {
|
|
21642
21698
|
console.log(chalk12.blue("\n\u{1F4A1} Suggestions:"));
|
|
21643
|
-
console.log(chalk12.white(` Install completion: juno-
|
|
21699
|
+
console.log(chalk12.white(` Install completion: juno-code completion install ${uninstalledShells.join(" ")}`));
|
|
21644
21700
|
}
|
|
21645
21701
|
const currentShell = this.shellDetector.getCurrentShell();
|
|
21646
21702
|
if (currentShell) {
|
|
@@ -21651,7 +21707,7 @@ var CompletionCommand = class {
|
|
|
21651
21707
|
} else {
|
|
21652
21708
|
console.log(chalk12.yellow(`
|
|
21653
21709
|
\u{1F3AF} Current shell (${currentShell}): Completion not installed`));
|
|
21654
|
-
console.log(chalk12.white(` Install: juno-
|
|
21710
|
+
console.log(chalk12.white(` Install: juno-code completion install ${currentShell}`));
|
|
21655
21711
|
}
|
|
21656
21712
|
}
|
|
21657
21713
|
} catch (error) {
|
|
@@ -21735,7 +21791,7 @@ var CompletionCommand = class {
|
|
|
21735
21791
|
console.log(chalk12.white("\u2022 Reload PowerShell"));
|
|
21736
21792
|
break;
|
|
21737
21793
|
}
|
|
21738
|
-
console.log(chalk12.white("\u2022 Test: juno-
|
|
21794
|
+
console.log(chalk12.white("\u2022 Test: juno-code <TAB>"));
|
|
21739
21795
|
}
|
|
21740
21796
|
};
|
|
21741
21797
|
var completion_default = CompletionCommand;
|
|
@@ -21801,7 +21857,7 @@ function setupMainCommand(program) {
|
|
|
21801
21857
|
const cwd2 = process.cwd();
|
|
21802
21858
|
const junoTaskDir = path20.join(cwd2, ".juno_task");
|
|
21803
21859
|
if (await fs18.pathExists(junoTaskDir)) {
|
|
21804
|
-
console.log(chalk12.blue.bold("\u{1F3AF} Juno
|
|
21860
|
+
console.log(chalk12.blue.bold("\u{1F3AF} Juno Code - Auto-detected Initialized Project\n"));
|
|
21805
21861
|
try {
|
|
21806
21862
|
const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
21807
21863
|
const config = await loadConfig2({
|
|
@@ -21834,13 +21890,13 @@ function setupMainCommand(program) {
|
|
|
21834
21890
|
}
|
|
21835
21891
|
}
|
|
21836
21892
|
if (!globalOptions.subagent && !options.prompt && !options.interactive && !options.interactivePrompt) {
|
|
21837
|
-
console.log(chalk12.blue.bold("\u{1F3AF} Juno
|
|
21893
|
+
console.log(chalk12.blue.bold("\u{1F3AF} Juno Code - TypeScript CLI for AI Subagent Orchestration\n"));
|
|
21838
21894
|
console.log(chalk12.white("To get started:"));
|
|
21839
|
-
console.log(chalk12.gray(" juno-
|
|
21840
|
-
console.log(chalk12.gray(" juno-
|
|
21841
|
-
console.log(chalk12.gray(" juno-
|
|
21842
|
-
console.log(chalk12.gray(' juno-
|
|
21843
|
-
console.log(chalk12.gray(" juno-
|
|
21895
|
+
console.log(chalk12.gray(" juno-code init # Initialize new project"));
|
|
21896
|
+
console.log(chalk12.gray(" juno-code start # Start execution"));
|
|
21897
|
+
console.log(chalk12.gray(" juno-code test --generate --run # AI-powered testing"));
|
|
21898
|
+
console.log(chalk12.gray(' juno-code -s claude -p "prompt" # Quick execution with Claude'));
|
|
21899
|
+
console.log(chalk12.gray(" juno-code --help # Show all commands"));
|
|
21844
21900
|
console.log("");
|
|
21845
21901
|
return;
|
|
21846
21902
|
}
|
|
@@ -21854,7 +21910,7 @@ function setupMainCommand(program) {
|
|
|
21854
21910
|
function displayBanner(verbose = false) {
|
|
21855
21911
|
if (verbose) {
|
|
21856
21912
|
console.log(chalk12.blue.bold(`
|
|
21857
|
-
\u{1F3AF} Juno
|
|
21913
|
+
\u{1F3AF} Juno Code v${VERSION} - TypeScript CLI`));
|
|
21858
21914
|
console.log(chalk12.gray(` Node.js ${process.version} on ${process.platform}`));
|
|
21859
21915
|
console.log(chalk12.gray(` Working directory: ${process.cwd()}`));
|
|
21860
21916
|
console.log("");
|
|
@@ -21887,7 +21943,22 @@ function setupAliases(program) {
|
|
|
21887
21943
|
}
|
|
21888
21944
|
}
|
|
21889
21945
|
function configureEnvironment() {
|
|
21890
|
-
const
|
|
21946
|
+
const newEnvVars = [
|
|
21947
|
+
"JUNO_CODE_SUBAGENT",
|
|
21948
|
+
"JUNO_CODE_PROMPT",
|
|
21949
|
+
"JUNO_CODE_CWD",
|
|
21950
|
+
"JUNO_CODE_MAX_ITERATIONS",
|
|
21951
|
+
"JUNO_CODE_MODEL",
|
|
21952
|
+
"JUNO_CODE_LOG_FILE",
|
|
21953
|
+
"JUNO_CODE_VERBOSE",
|
|
21954
|
+
"JUNO_CODE_QUIET",
|
|
21955
|
+
"JUNO_CODE_CONFIG",
|
|
21956
|
+
"JUNO_CODE_MCP_SERVER_PATH",
|
|
21957
|
+
"JUNO_CODE_MCP_TIMEOUT",
|
|
21958
|
+
"JUNO_CODE_NO_COLOR",
|
|
21959
|
+
"JUNO_CODE_ENABLE_FEEDBACK"
|
|
21960
|
+
];
|
|
21961
|
+
const legacyEnvVars = [
|
|
21891
21962
|
"JUNO_TASK_SUBAGENT",
|
|
21892
21963
|
"JUNO_TASK_PROMPT",
|
|
21893
21964
|
"JUNO_TASK_CWD",
|
|
@@ -21902,10 +21973,10 @@ function configureEnvironment() {
|
|
|
21902
21973
|
"JUNO_TASK_NO_COLOR",
|
|
21903
21974
|
"JUNO_TASK_ENABLE_FEEDBACK"
|
|
21904
21975
|
];
|
|
21905
|
-
|
|
21976
|
+
const processEnvVar = (envVar, prefix) => {
|
|
21906
21977
|
const value = process.env[envVar];
|
|
21907
|
-
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(
|
|
21908
|
-
const option = envVar.toLowerCase().replace(
|
|
21978
|
+
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(prefix, "").replace(/_/g, "-")}`)) {
|
|
21979
|
+
const option = envVar.toLowerCase().replace(prefix, "").replace(/_/g, "-");
|
|
21909
21980
|
switch (option) {
|
|
21910
21981
|
case "verbose":
|
|
21911
21982
|
case "quiet":
|
|
@@ -21918,6 +21989,21 @@ function configureEnvironment() {
|
|
|
21918
21989
|
default:
|
|
21919
21990
|
process.argv.push(`--${option}`, value);
|
|
21920
21991
|
}
|
|
21992
|
+
return true;
|
|
21993
|
+
}
|
|
21994
|
+
return false;
|
|
21995
|
+
};
|
|
21996
|
+
const processedOptions = /* @__PURE__ */ new Set();
|
|
21997
|
+
for (const envVar of newEnvVars) {
|
|
21998
|
+
if (processEnvVar(envVar, "juno_code_")) {
|
|
21999
|
+
const option = envVar.toLowerCase().replace("juno_code_", "").replace(/_/g, "-");
|
|
22000
|
+
processedOptions.add(option);
|
|
22001
|
+
}
|
|
22002
|
+
}
|
|
22003
|
+
for (const envVar of legacyEnvVars) {
|
|
22004
|
+
const option = envVar.toLowerCase().replace("juno_task_", "").replace(/_/g, "-");
|
|
22005
|
+
if (!processedOptions.has(option)) {
|
|
22006
|
+
processEnvVar(envVar, "juno_task_");
|
|
21921
22007
|
}
|
|
21922
22008
|
}
|
|
21923
22009
|
if (!process.argv.includes("--enable-feedback")) {
|
|
@@ -21936,7 +22022,7 @@ function configureEnvironment() {
|
|
|
21936
22022
|
async function main() {
|
|
21937
22023
|
const program = new Command();
|
|
21938
22024
|
configureEnvironment();
|
|
21939
|
-
program.name("juno-
|
|
22025
|
+
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");
|
|
21940
22026
|
setupGlobalOptions(program);
|
|
21941
22027
|
const isVerbose = process.argv.includes("--verbose") || process.argv.includes("-v");
|
|
21942
22028
|
displayBanner(isVerbose);
|
|
@@ -21975,54 +22061,58 @@ async function main() {
|
|
|
21975
22061
|
setupAliases(program);
|
|
21976
22062
|
setupMainCommand(program);
|
|
21977
22063
|
program.addHelpText("beforeAll", `
|
|
21978
|
-
${chalk12.blue.bold("\u{1F3AF} Juno
|
|
22064
|
+
${chalk12.blue.bold("\u{1F3AF} Juno Code")} - TypeScript CLI for AI Subagent Orchestration
|
|
21979
22065
|
|
|
21980
22066
|
`);
|
|
21981
22067
|
program.addHelpText("afterAll", `
|
|
21982
22068
|
${chalk12.blue.bold("Examples:")}
|
|
21983
22069
|
${chalk12.gray("# Initialize new project")}
|
|
21984
|
-
juno-
|
|
22070
|
+
juno-code init
|
|
21985
22071
|
|
|
21986
22072
|
${chalk12.gray("# Start execution using .juno_task/init.md")}
|
|
21987
|
-
juno-
|
|
22073
|
+
juno-code start
|
|
21988
22074
|
|
|
21989
22075
|
${chalk12.gray("# AI-powered testing")}
|
|
21990
|
-
juno-
|
|
21991
|
-
juno-
|
|
21992
|
-
juno-
|
|
22076
|
+
juno-code test --generate --run
|
|
22077
|
+
juno-code test src/utils.ts --subagent claude
|
|
22078
|
+
juno-code test --analyze --coverage
|
|
21993
22079
|
|
|
21994
22080
|
${chalk12.gray("# Quick execution with Claude")}
|
|
21995
|
-
juno-
|
|
22081
|
+
juno-code claude "Analyze this codebase and suggest improvements"
|
|
21996
22082
|
|
|
21997
22083
|
${chalk12.gray("# Interactive project setup")}
|
|
21998
|
-
juno-
|
|
22084
|
+
juno-code init --interactive
|
|
21999
22085
|
|
|
22000
22086
|
${chalk12.gray("# Manage sessions")}
|
|
22001
|
-
juno-
|
|
22002
|
-
juno-
|
|
22087
|
+
juno-code session list
|
|
22088
|
+
juno-code session info abc123
|
|
22003
22089
|
|
|
22004
22090
|
${chalk12.gray("# Enable feedback collection globally")}
|
|
22005
|
-
juno-
|
|
22091
|
+
juno-code --enable-feedback start
|
|
22006
22092
|
|
|
22007
22093
|
${chalk12.gray("# Collect feedback")}
|
|
22008
|
-
juno-
|
|
22094
|
+
juno-code feedback --interactive
|
|
22009
22095
|
|
|
22010
22096
|
${chalk12.gray("# Manage configuration profiles")}
|
|
22011
|
-
juno-
|
|
22012
|
-
juno-
|
|
22097
|
+
juno-code config list
|
|
22098
|
+
juno-code config create development
|
|
22013
22099
|
|
|
22014
22100
|
${chalk12.gray("# Setup Git repository")}
|
|
22015
|
-
juno-
|
|
22101
|
+
juno-code setup-git https://github.com/owner/repo
|
|
22016
22102
|
|
|
22017
22103
|
${chalk12.blue.bold("Environment Variables:")}
|
|
22018
|
-
|
|
22019
|
-
|
|
22020
|
-
|
|
22021
|
-
|
|
22022
|
-
|
|
22104
|
+
JUNO_CODE_SUBAGENT Default subagent (claude, cursor, codex, gemini)
|
|
22105
|
+
JUNO_CODE_MCP_SERVER_PATH Path to MCP server executable
|
|
22106
|
+
JUNO_CODE_CONFIG Configuration file path
|
|
22107
|
+
JUNO_CODE_VERBOSE Enable verbose output (true/false)
|
|
22108
|
+
JUNO_CODE_ENABLE_FEEDBACK Enable concurrent feedback collection (true/false)
|
|
22109
|
+
JUNO_CODE_MCP_TIMEOUT MCP server timeout in milliseconds
|
|
22023
22110
|
JUNO_INTERACTIVE_FEEDBACK_MODE Enable interactive feedback mode (true/false)
|
|
22024
22111
|
NO_COLOR Disable colored output (standard)
|
|
22025
22112
|
|
|
22113
|
+
${chalk12.gray("Legacy variables (backward compatibility):")}
|
|
22114
|
+
JUNO_TASK_* All JUNO_TASK_* variables still supported
|
|
22115
|
+
|
|
22026
22116
|
${chalk12.blue.bold("Configuration:")}
|
|
22027
22117
|
Configuration can be specified via:
|
|
22028
22118
|
1. Command line arguments (highest priority)
|
|
@@ -22031,8 +22121,8 @@ ${chalk12.blue.bold("Configuration:")}
|
|
|
22031
22121
|
4. Built-in defaults (lowest priority)
|
|
22032
22122
|
|
|
22033
22123
|
${chalk12.blue.bold("Support:")}
|
|
22034
|
-
Documentation: https://github.com/owner/juno-
|
|
22035
|
-
Issues: https://github.com/owner/juno-
|
|
22124
|
+
Documentation: https://github.com/owner/juno-code#readme
|
|
22125
|
+
Issues: https://github.com/owner/juno-code/issues
|
|
22036
22126
|
License: MIT
|
|
22037
22127
|
|
|
22038
22128
|
`);
|