juno-code 1.0.10 → 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 +444 -265
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +444 -265
- 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 +62 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +59 -16
- package/dist/index.mjs.map +1 -1
- package/dist/templates/scripts/clean_logs_folder.sh +1 -1
- package/dist/templates/scripts/cleanup_feedback.sh +3 -0
- package/dist/templates/scripts/install_requirements.sh +183 -16
- package/dist/templates/scripts/kanban.sh +19 -0
- 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"],
|
|
@@ -277,6 +300,28 @@ var init_types = __esm({
|
|
|
277
300
|
};
|
|
278
301
|
}
|
|
279
302
|
});
|
|
303
|
+
|
|
304
|
+
// src/templates/default-hooks.ts
|
|
305
|
+
function getDefaultHooks() {
|
|
306
|
+
return JSON.parse(JSON.stringify(DEFAULT_HOOKS));
|
|
307
|
+
}
|
|
308
|
+
var DEFAULT_HOOKS;
|
|
309
|
+
var init_default_hooks = __esm({
|
|
310
|
+
"src/templates/default-hooks.ts"() {
|
|
311
|
+
init_version();
|
|
312
|
+
DEFAULT_HOOKS = {
|
|
313
|
+
START_ITERATION: {
|
|
314
|
+
commands: [
|
|
315
|
+
// Monitor CLAUDE.md file size
|
|
316
|
+
'file="CLAUDE.md"; lines=$(wc -l < "$file" 2>/dev/null || echo 0); chars=$(wc -m < "$file" 2>/dev/null || echo 0); if [ "$lines" -gt 450 ] || [ "$chars" -gt 60000 ]; then juno-kanban "[Critical] file $file is too large, keep it lean and useful for every run of the agent."; fi',
|
|
317
|
+
// Monitor AGENTS.md file size
|
|
318
|
+
'file="AGENTS.md"; lines=$(wc -l < "$file" 2>/dev/null || echo 0); chars=$(wc -m < "$file" 2>/dev/null || echo 0); if [ "$lines" -gt 450 ] || [ "$chars" -gt 60000 ]; then juno-kanban "[Critical] file $file is too large, keep it lean and useful for every run of the agent."; fi',
|
|
319
|
+
"./.juno_task/scripts/cleanup_feedback.sh"
|
|
320
|
+
]
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
});
|
|
280
325
|
function createProfileManager(configDir) {
|
|
281
326
|
return new ProfileManager(configDir);
|
|
282
327
|
}
|
|
@@ -697,6 +742,7 @@ __export(config_exports, {
|
|
|
697
742
|
DEFAULT_CONFIG: () => DEFAULT_CONFIG,
|
|
698
743
|
ENV_VAR_MAPPING: () => ENV_VAR_MAPPING,
|
|
699
744
|
JunoTaskConfigSchema: () => JunoTaskConfigSchema,
|
|
745
|
+
LEGACY_ENV_VAR_MAPPING: () => LEGACY_ENV_VAR_MAPPING,
|
|
700
746
|
ProfileError: () => ProfileError,
|
|
701
747
|
ProfileExistsError: () => ProfileExistsError,
|
|
702
748
|
ProfileNotFoundError: () => ProfileNotFoundError,
|
|
@@ -728,6 +774,12 @@ function loadConfigFromEnv() {
|
|
|
728
774
|
config[configKey] = parseEnvValue(value);
|
|
729
775
|
}
|
|
730
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
|
+
}
|
|
731
783
|
return config;
|
|
732
784
|
}
|
|
733
785
|
async function loadJsonConfig(filePath) {
|
|
@@ -751,7 +803,7 @@ async function loadPackageJsonConfig(filePath) {
|
|
|
751
803
|
try {
|
|
752
804
|
const content = await nodeFs.promises.readFile(filePath, "utf-8");
|
|
753
805
|
const packageJson = JSON.parse(content);
|
|
754
|
-
return packageJson.
|
|
806
|
+
return packageJson.junoCode || {};
|
|
755
807
|
} catch (error) {
|
|
756
808
|
throw new Error(`Failed to load package.json config from ${filePath}: ${error}`);
|
|
757
809
|
}
|
|
@@ -838,12 +890,7 @@ async function ensureHooksConfig(baseDir) {
|
|
|
838
890
|
const configPath = path__namespace.join(configDir, "config.json");
|
|
839
891
|
await fs__default.default.ensureDir(configDir);
|
|
840
892
|
const configExists = await fs__default.default.pathExists(configPath);
|
|
841
|
-
const allHookTypes =
|
|
842
|
-
START_RUN: { commands: [] },
|
|
843
|
-
START_ITERATION: { commands: [] },
|
|
844
|
-
END_ITERATION: { commands: [] },
|
|
845
|
-
END_RUN: { commands: [] }
|
|
846
|
-
};
|
|
893
|
+
const allHookTypes = getDefaultHooks();
|
|
847
894
|
if (!configExists) {
|
|
848
895
|
const defaultConfig = {
|
|
849
896
|
...DEFAULT_CONFIG,
|
|
@@ -885,12 +932,35 @@ async function loadConfig(options = {}) {
|
|
|
885
932
|
const mergedConfig = loader.merge();
|
|
886
933
|
return validateConfig(mergedConfig);
|
|
887
934
|
}
|
|
888
|
-
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;
|
|
889
936
|
var init_config = __esm({
|
|
890
937
|
"src/core/config.ts"() {
|
|
891
938
|
init_version();
|
|
939
|
+
init_default_hooks();
|
|
892
940
|
init_profiles();
|
|
893
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 = {
|
|
894
964
|
// Core settings
|
|
895
965
|
JUNO_TASK_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
896
966
|
JUNO_TASK_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
@@ -963,16 +1033,16 @@ var init_config = __esm({
|
|
|
963
1033
|
// Paths
|
|
964
1034
|
workingDirectory: process.cwd(),
|
|
965
1035
|
sessionDirectory: path__namespace.join(process.cwd(), ".juno_task"),
|
|
966
|
-
// Hooks configuration
|
|
967
|
-
hooks:
|
|
1036
|
+
// Hooks configuration - populated with default hooks template
|
|
1037
|
+
hooks: getDefaultHooks()
|
|
968
1038
|
};
|
|
969
1039
|
GLOBAL_CONFIG_FILE_NAMES = [
|
|
970
|
-
"juno-
|
|
971
|
-
"juno-
|
|
972
|
-
".juno-
|
|
973
|
-
".juno-
|
|
1040
|
+
"juno-code.config.json",
|
|
1041
|
+
"juno-code.config.js",
|
|
1042
|
+
".juno-coderc.json",
|
|
1043
|
+
".juno-coderc.js",
|
|
974
1044
|
"package.json"
|
|
975
|
-
// Will look for '
|
|
1045
|
+
// Will look for 'junoCode' field
|
|
976
1046
|
];
|
|
977
1047
|
PROJECT_CONFIG_FILE = ".juno_task/config.json";
|
|
978
1048
|
ConfigLoader = class {
|
|
@@ -5957,8 +6027,8 @@ var init_concurrent_feedback_collector = __esm({
|
|
|
5957
6027
|
// Current feedback mode state
|
|
5958
6028
|
constructor(options = {}) {
|
|
5959
6029
|
this.options = {
|
|
5960
|
-
command: options.command || "juno-
|
|
5961
|
-
commandArgs: options.commandArgs || ["juno-
|
|
6030
|
+
command: options.command || "juno-code",
|
|
6031
|
+
commandArgs: options.commandArgs || ["juno-code", "feedback"],
|
|
5962
6032
|
verbose: options.verbose || false,
|
|
5963
6033
|
showHeader: options.showHeader !== void 0 ? options.showHeader : true,
|
|
5964
6034
|
progressInterval: options.progressInterval || 0,
|
|
@@ -6342,23 +6412,23 @@ var init_framework = __esm({
|
|
|
6342
6412
|
flags: "-v, --verbose",
|
|
6343
6413
|
description: "Enable verbose output with detailed progress",
|
|
6344
6414
|
defaultValue: false,
|
|
6345
|
-
env: "
|
|
6415
|
+
env: "JUNO_CODE_VERBOSE"
|
|
6346
6416
|
},
|
|
6347
6417
|
{
|
|
6348
6418
|
flags: "-q, --quiet",
|
|
6349
6419
|
description: "Disable rich formatting, use plain text",
|
|
6350
6420
|
defaultValue: false,
|
|
6351
|
-
env: "
|
|
6421
|
+
env: "JUNO_CODE_QUIET"
|
|
6352
6422
|
},
|
|
6353
6423
|
{
|
|
6354
6424
|
flags: "-c, --config <path>",
|
|
6355
6425
|
description: "Configuration file path (.json, .toml, pyproject.toml)",
|
|
6356
|
-
env: "
|
|
6426
|
+
env: "JUNO_CODE_CONFIG"
|
|
6357
6427
|
},
|
|
6358
6428
|
{
|
|
6359
6429
|
flags: "--log-file <path>",
|
|
6360
6430
|
description: "Log file path (auto-generated if not specified)",
|
|
6361
|
-
env: "
|
|
6431
|
+
env: "JUNO_CODE_LOG_FILE"
|
|
6362
6432
|
},
|
|
6363
6433
|
{
|
|
6364
6434
|
flags: "--no-color",
|
|
@@ -6369,24 +6439,24 @@ var init_framework = __esm({
|
|
|
6369
6439
|
description: "Log level for output (error, warn, info, debug, trace)",
|
|
6370
6440
|
defaultValue: "info",
|
|
6371
6441
|
choices: ["error", "warn", "info", "debug", "trace"],
|
|
6372
|
-
env: "
|
|
6442
|
+
env: "JUNO_CODE_LOG_LEVEL"
|
|
6373
6443
|
},
|
|
6374
6444
|
{
|
|
6375
6445
|
flags: "-s, --subagent <type>",
|
|
6376
6446
|
description: "Subagent to use",
|
|
6377
|
-
env: "
|
|
6447
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
6378
6448
|
},
|
|
6379
6449
|
{
|
|
6380
6450
|
flags: "--max-iterations <number>",
|
|
6381
6451
|
description: "Maximum iterations (-1 for unlimited)",
|
|
6382
6452
|
defaultValue: void 0,
|
|
6383
|
-
env: "
|
|
6453
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
6384
6454
|
},
|
|
6385
6455
|
{
|
|
6386
6456
|
flags: "--mcp-timeout <number>",
|
|
6387
6457
|
description: "MCP server timeout in milliseconds",
|
|
6388
6458
|
defaultValue: void 0,
|
|
6389
|
-
env: "
|
|
6459
|
+
env: "JUNO_CODE_MCP_TIMEOUT"
|
|
6390
6460
|
}
|
|
6391
6461
|
];
|
|
6392
6462
|
for (const option of this.globalOptions) {
|
|
@@ -6633,7 +6703,7 @@ ${helpText}
|
|
|
6633
6703
|
}
|
|
6634
6704
|
if (error.showHelp) {
|
|
6635
6705
|
console.error(chalk12__default.default.gray(`
|
|
6636
|
-
Use 'juno-
|
|
6706
|
+
Use 'juno-code ${commandName} --help' for usage information`));
|
|
6637
6707
|
}
|
|
6638
6708
|
const exitCode = Object.values(EXIT_CODES).includes(error.code) ? error.code : EXIT_CODES.UNEXPECTED_ERROR;
|
|
6639
6709
|
process.exit(exitCode);
|
|
@@ -6678,7 +6748,7 @@ ${helpText}
|
|
|
6678
6748
|
try {
|
|
6679
6749
|
await this.program.parseAsync(argv2);
|
|
6680
6750
|
} catch (error) {
|
|
6681
|
-
await this.handleCommandError(error, "juno-
|
|
6751
|
+
await this.handleCommandError(error, "juno-code", {});
|
|
6682
6752
|
}
|
|
6683
6753
|
}
|
|
6684
6754
|
/**
|
|
@@ -11184,7 +11254,7 @@ async function mainCommandHandler(args, options, command) {
|
|
|
11184
11254
|
`Invalid subagent: ${options.subagent}`,
|
|
11185
11255
|
[
|
|
11186
11256
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
11187
|
-
'Example: juno-
|
|
11257
|
+
'Example: juno-code claude "your prompt"',
|
|
11188
11258
|
"Use --help for more information"
|
|
11189
11259
|
]
|
|
11190
11260
|
);
|
|
@@ -11276,34 +11346,34 @@ function createMainCommand() {
|
|
|
11276
11346
|
description: "Subagent to use",
|
|
11277
11347
|
required: true,
|
|
11278
11348
|
choices: ["claude", "cursor", "codex", "gemini", "claude-code", "claude_code", "gemini-cli", "cursor-agent"],
|
|
11279
|
-
env: "
|
|
11349
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
11280
11350
|
}),
|
|
11281
11351
|
createOption({
|
|
11282
11352
|
flags: "-p, --prompt <text|file>",
|
|
11283
11353
|
description: "Prompt input (file path or inline text)",
|
|
11284
|
-
env: "
|
|
11354
|
+
env: "JUNO_CODE_PROMPT"
|
|
11285
11355
|
}),
|
|
11286
11356
|
createOption({
|
|
11287
11357
|
flags: "-w, --cwd <path>",
|
|
11288
11358
|
description: "Working directory",
|
|
11289
11359
|
defaultValue: process.cwd(),
|
|
11290
|
-
env: "
|
|
11360
|
+
env: "JUNO_CODE_CWD"
|
|
11291
11361
|
}),
|
|
11292
11362
|
createOption({
|
|
11293
11363
|
flags: "-i, --max-iterations <number>",
|
|
11294
11364
|
description: "Maximum iterations (-1 for unlimited)",
|
|
11295
|
-
env: "
|
|
11365
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
11296
11366
|
}),
|
|
11297
11367
|
createOption({
|
|
11298
11368
|
flags: "-m, --model <name>",
|
|
11299
11369
|
description: "Model to use (optional, subagent-specific)",
|
|
11300
|
-
env: "
|
|
11370
|
+
env: "JUNO_CODE_MODEL"
|
|
11301
11371
|
}),
|
|
11302
11372
|
createOption({
|
|
11303
11373
|
flags: "-I, --interactive",
|
|
11304
11374
|
description: "Interactive mode for typing/pasting prompts",
|
|
11305
11375
|
defaultValue: false,
|
|
11306
|
-
env: "
|
|
11376
|
+
env: "JUNO_CODE_INTERACTIVE"
|
|
11307
11377
|
}),
|
|
11308
11378
|
createOption({
|
|
11309
11379
|
flags: "--interactive-prompt",
|
|
@@ -11313,19 +11383,19 @@ function createMainCommand() {
|
|
|
11313
11383
|
],
|
|
11314
11384
|
examples: [
|
|
11315
11385
|
{
|
|
11316
|
-
command: 'juno-
|
|
11386
|
+
command: 'juno-code -s claude -p "Create a REST API"',
|
|
11317
11387
|
description: "Execute task with Claude using inline prompt"
|
|
11318
11388
|
},
|
|
11319
11389
|
{
|
|
11320
|
-
command: "juno-
|
|
11390
|
+
command: "juno-code -s cursor -p ./task.md -i 3",
|
|
11321
11391
|
description: "Execute task with Cursor using file prompt, max 3 iterations"
|
|
11322
11392
|
},
|
|
11323
11393
|
{
|
|
11324
|
-
command: "juno-
|
|
11394
|
+
command: "juno-code -s gemini --interactive",
|
|
11325
11395
|
description: "Use interactive mode to enter prompt"
|
|
11326
11396
|
},
|
|
11327
11397
|
{
|
|
11328
|
-
command: "juno-
|
|
11398
|
+
command: "juno-code -s claude --interactive-prompt",
|
|
11329
11399
|
description: "Use enhanced TUI prompt editor"
|
|
11330
11400
|
}
|
|
11331
11401
|
],
|
|
@@ -11365,10 +11435,10 @@ var init_main = __esm({
|
|
|
11365
11435
|
throw new ValidationError(
|
|
11366
11436
|
"Prompt is required for execution",
|
|
11367
11437
|
[
|
|
11368
|
-
'Provide prompt text: juno-
|
|
11369
|
-
"Use file input: juno-
|
|
11370
|
-
"Use interactive mode: juno-
|
|
11371
|
-
"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",
|
|
11372
11442
|
"Create default prompt file: .juno_task/prompt.md"
|
|
11373
11443
|
]
|
|
11374
11444
|
);
|
|
@@ -11593,7 +11663,7 @@ var init_main = __esm({
|
|
|
11593
11663
|
this.enableFeedback = enableFeedback;
|
|
11594
11664
|
if (this.enableFeedback) {
|
|
11595
11665
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
11596
|
-
command: "juno-
|
|
11666
|
+
command: "juno-code",
|
|
11597
11667
|
commandArgs: ["feedback"],
|
|
11598
11668
|
verbose: this.config.verbose,
|
|
11599
11669
|
showHeader: true,
|
|
@@ -12062,6 +12132,7 @@ async function promptInputOnce(question, defaultValue = "") {
|
|
|
12062
12132
|
}
|
|
12063
12133
|
|
|
12064
12134
|
// src/cli/commands/init.ts
|
|
12135
|
+
init_default_hooks();
|
|
12065
12136
|
init_types();
|
|
12066
12137
|
var SimpleInitTUI = class {
|
|
12067
12138
|
context = {};
|
|
@@ -12070,7 +12141,7 @@ var SimpleInitTUI = class {
|
|
|
12070
12141
|
* Simplified gather method implementing the minimal flow
|
|
12071
12142
|
*/
|
|
12072
12143
|
async gather() {
|
|
12073
|
-
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"));
|
|
12074
12145
|
console.log(chalk12__default.default.yellow("\u{1F4C1} Step 1: Project Directory"));
|
|
12075
12146
|
const targetDirectory = await this.promptForDirectory();
|
|
12076
12147
|
console.log(chalk12__default.default.yellow("\n\u{1F4DD} Step 2: Main Task"));
|
|
@@ -12353,6 +12424,65 @@ Items will be added here as we discover what needs to be implemented.
|
|
|
12353
12424
|
- Task defined: ${variables.TASK}
|
|
12354
12425
|
`;
|
|
12355
12426
|
await fs__default.default.writeFile(path__namespace.join(junoTaskDir, "plan.md"), planContent);
|
|
12427
|
+
const implementContent = `# Implementation Guide
|
|
12428
|
+
|
|
12429
|
+
## Current Focus
|
|
12430
|
+
|
|
12431
|
+
**Main Task**: ${variables.TASK}
|
|
12432
|
+
|
|
12433
|
+
## Implementation Steps
|
|
12434
|
+
|
|
12435
|
+
### Step 1: Analysis and Planning
|
|
12436
|
+
- [ ] Review existing codebase structure
|
|
12437
|
+
- [ ] Identify key components and dependencies
|
|
12438
|
+
- [ ] Document current state in @.juno_task/plan.md
|
|
12439
|
+
- [ ] Create detailed specifications in @.juno_task/specs/
|
|
12440
|
+
|
|
12441
|
+
### Step 2: Design and Architecture
|
|
12442
|
+
- [ ] Define system architecture
|
|
12443
|
+
- [ ] Design data models and APIs
|
|
12444
|
+
- [ ] Plan integration points
|
|
12445
|
+
- [ ] Document architecture decisions
|
|
12446
|
+
|
|
12447
|
+
### Step 3: Implementation
|
|
12448
|
+
- [ ] Implement core functionality
|
|
12449
|
+
- [ ] Write comprehensive tests
|
|
12450
|
+
- [ ] Ensure code quality and documentation
|
|
12451
|
+
- [ ] Follow coding standards and best practices
|
|
12452
|
+
|
|
12453
|
+
### Step 4: Testing and Validation
|
|
12454
|
+
- [ ] Unit tests with >90% coverage
|
|
12455
|
+
- [ ] Integration tests
|
|
12456
|
+
- [ ] Performance testing
|
|
12457
|
+
- [ ] Security review
|
|
12458
|
+
|
|
12459
|
+
### Step 5: Documentation and Deployment
|
|
12460
|
+
- [ ] Update all documentation
|
|
12461
|
+
- [ ] Create deployment guides
|
|
12462
|
+
- [ ] Version control and tagging
|
|
12463
|
+
- [ ] Final review and sign-off
|
|
12464
|
+
|
|
12465
|
+
## Current Tasks
|
|
12466
|
+
|
|
12467
|
+
Update this section with specific tasks for the current iteration:
|
|
12468
|
+
|
|
12469
|
+
1. **Task 1**: Study existing codebase and create specifications
|
|
12470
|
+
- Status: Not Started
|
|
12471
|
+
- Owner: ${variables.EDITOR}
|
|
12472
|
+
- Priority: High
|
|
12473
|
+
|
|
12474
|
+
## Notes and Considerations
|
|
12475
|
+
|
|
12476
|
+
- Keep this file updated as implementation progresses
|
|
12477
|
+
- Document any blockers or issues encountered
|
|
12478
|
+
- Reference related specs and plan items
|
|
12479
|
+
- Track progress and update status regularly
|
|
12480
|
+
|
|
12481
|
+
---
|
|
12482
|
+
*Last updated: ${variables.CURRENT_DATE}*
|
|
12483
|
+
*Primary subagent: ${variables.EDITOR}*
|
|
12484
|
+
`;
|
|
12485
|
+
await fs__default.default.writeFile(path__namespace.join(junoTaskDir, "implement.md"), implementContent);
|
|
12356
12486
|
const specsDir = path__namespace.join(junoTaskDir, "specs");
|
|
12357
12487
|
await fs__default.default.ensureDir(specsDir);
|
|
12358
12488
|
const specsReadmeContent = `# Project Specifications
|
|
@@ -12423,7 +12553,7 @@ This directory contains detailed specifications for the project components.
|
|
|
12423
12553
|
|
|
12424
12554
|
## System Overview
|
|
12425
12555
|
|
|
12426
|
-
This project uses AI-assisted development with juno-
|
|
12556
|
+
This project uses AI-assisted development with juno-code to achieve: ${variables.TASK}
|
|
12427
12557
|
|
|
12428
12558
|
## Architectural Decisions
|
|
12429
12559
|
|
|
@@ -12446,7 +12576,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12446
12576
|
|
|
12447
12577
|
- **Language**: TypeScript
|
|
12448
12578
|
- **Runtime**: Node.js
|
|
12449
|
-
- **CLI**: juno-
|
|
12579
|
+
- **CLI**: juno-code with AI subagent integration
|
|
12450
12580
|
- **Version Control**: Git
|
|
12451
12581
|
- **Documentation**: Markdown-based
|
|
12452
12582
|
|
|
@@ -12505,7 +12635,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12505
12635
|
|
|
12506
12636
|
## Project Overview
|
|
12507
12637
|
|
|
12508
|
-
This project was initialized on ${variables.CURRENT_DATE} using juno-
|
|
12638
|
+
This project was initialized on ${variables.CURRENT_DATE} using juno-code.
|
|
12509
12639
|
|
|
12510
12640
|
**Main Task**: ${variables.TASK}
|
|
12511
12641
|
**Preferred Subagent**: ${variables.EDITOR}
|
|
@@ -12519,9 +12649,9 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12519
12649
|
- Use \`npm run test:binary\` for CLI testing
|
|
12520
12650
|
|
|
12521
12651
|
### Key Commands
|
|
12522
|
-
- \`juno-
|
|
12523
|
-
- \`juno-
|
|
12524
|
-
- \`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
|
|
12525
12655
|
|
|
12526
12656
|
## Project Structure
|
|
12527
12657
|
|
|
@@ -12531,6 +12661,7 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12531
12661
|
\u2502 \u251C\u2500\u2500 prompt.md # Main task definition with AI instructions
|
|
12532
12662
|
\u2502 \u251C\u2500\u2500 init.md # Initial task breakdown and constraints
|
|
12533
12663
|
\u2502 \u251C\u2500\u2500 plan.md # Dynamic planning and priority tracking
|
|
12664
|
+
\u2502 \u251C\u2500\u2500 implement.md # Implementation guide and current tasks
|
|
12534
12665
|
\u2502 \u251C\u2500\u2500 USER_FEEDBACK.md # User feedback and issue tracking
|
|
12535
12666
|
\u2502 \u251C\u2500\u2500 scripts/ # Utility scripts for project maintenance
|
|
12536
12667
|
\u2502 \u2502 \u2514\u2500\u2500 clean_logs_folder.sh # Archive old log files
|
|
@@ -12642,27 +12773,27 @@ ${variables.DESCRIPTION}
|
|
|
12642
12773
|
|
|
12643
12774
|
## Overview
|
|
12644
12775
|
|
|
12645
|
-
This project uses juno-
|
|
12776
|
+
This project uses juno-code for AI-powered development with ${variables.EDITOR} as the primary AI subagent.
|
|
12646
12777
|
|
|
12647
12778
|
## Getting Started
|
|
12648
12779
|
|
|
12649
12780
|
### Prerequisites
|
|
12650
12781
|
|
|
12651
12782
|
- Node.js (v18 or higher)
|
|
12652
|
-
- juno-
|
|
12783
|
+
- juno-code CLI installed
|
|
12653
12784
|
- Git for version control
|
|
12654
12785
|
|
|
12655
12786
|
### Quick Start
|
|
12656
12787
|
|
|
12657
12788
|
\`\`\`bash
|
|
12658
12789
|
# Start task execution with production-ready AI instructions
|
|
12659
|
-
juno-
|
|
12790
|
+
juno-code start
|
|
12660
12791
|
|
|
12661
12792
|
# Or use main command with preferred subagent
|
|
12662
|
-
juno-
|
|
12793
|
+
juno-code -s ${variables.EDITOR}
|
|
12663
12794
|
|
|
12664
12795
|
# Provide feedback on the development process
|
|
12665
|
-
juno-
|
|
12796
|
+
juno-code feedback
|
|
12666
12797
|
\`\`\`
|
|
12667
12798
|
|
|
12668
12799
|
## Project Structure
|
|
@@ -12673,8 +12804,10 @@ juno-task feedback
|
|
|
12673
12804
|
\u2502 \u251C\u2500\u2500 prompt.md # Production-ready AI instructions
|
|
12674
12805
|
\u2502 \u251C\u2500\u2500 init.md # Task breakdown and constraints
|
|
12675
12806
|
\u2502 \u251C\u2500\u2500 plan.md # Dynamic planning and tracking
|
|
12807
|
+
\u2502 \u251C\u2500\u2500 implement.md # Implementation guide and current tasks
|
|
12676
12808
|
\u2502 \u251C\u2500\u2500 USER_FEEDBACK.md # User feedback and issue tracking
|
|
12677
12809
|
\u2502 \u251C\u2500\u2500 scripts/ # Utility scripts for project maintenance
|
|
12810
|
+
\u2502 \u2502 \u251C\u2500\u2500 install_requirements.sh # Install Python dependencies
|
|
12678
12811
|
\u2502 \u2502 \u2514\u2500\u2500 clean_logs_folder.sh # Archive old log files (3+ days)
|
|
12679
12812
|
\u2502 \u2514\u2500\u2500 specs/ # Comprehensive specifications
|
|
12680
12813
|
\u2502 \u251C\u2500\u2500 README.md # Specs overview and guide
|
|
@@ -12721,12 +12854,13 @@ ${variables.GIT_URL}` : ""}
|
|
|
12721
12854
|
|
|
12722
12855
|
1. **Review Task**: Check \`.juno_task/init.md\` for main task
|
|
12723
12856
|
2. **Check Plan**: Review \`.juno_task/plan.md\` for current priorities
|
|
12724
|
-
3. **
|
|
12725
|
-
4. **
|
|
12857
|
+
3. **Track Implementation**: Follow \`.juno_task/implement.md\` for current implementation steps
|
|
12858
|
+
4. **Provide Feedback**: Use \`juno-code feedback\` for issues or suggestions
|
|
12859
|
+
5. **Monitor Progress**: Track AI development through \`.juno_task/prompt.md\`
|
|
12726
12860
|
|
|
12727
12861
|
---
|
|
12728
12862
|
|
|
12729
|
-
Created with juno-
|
|
12863
|
+
Created with juno-code on ${variables.CURRENT_DATE}
|
|
12730
12864
|
${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
12731
12865
|
`;
|
|
12732
12866
|
await fs__default.default.writeFile(path__namespace.join(targetDirectory, "README.md"), readmeContent);
|
|
@@ -12776,7 +12910,9 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12776
12910
|
headlessMode: false,
|
|
12777
12911
|
// Paths
|
|
12778
12912
|
workingDirectory: targetDirectory,
|
|
12779
|
-
sessionDirectory: path__namespace.join(targetDirectory, ".juno_task")
|
|
12913
|
+
sessionDirectory: path__namespace.join(targetDirectory, ".juno_task"),
|
|
12914
|
+
// Hooks configuration with default file size monitoring
|
|
12915
|
+
hooks: getDefaultHooks()
|
|
12780
12916
|
};
|
|
12781
12917
|
const configPath = path__namespace.join(junoTaskDir, "config.json");
|
|
12782
12918
|
await fs__default.default.writeFile(configPath, JSON.stringify(configContent, null, 2));
|
|
@@ -12950,11 +13086,11 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12950
13086
|
printNextSteps(targetDirectory, editor) {
|
|
12951
13087
|
console.log(chalk12__default.default.blue("\n\u{1F3AF} Next Steps:"));
|
|
12952
13088
|
console.log(chalk12__default.default.white(` cd ${targetDirectory}`));
|
|
12953
|
-
console.log(chalk12__default.default.white(" juno-
|
|
12954
|
-
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}`));
|
|
12955
13091
|
console.log(chalk12__default.default.gray("\n\u{1F4A1} Tips:"));
|
|
12956
13092
|
console.log(chalk12__default.default.gray(" - Edit .juno_task/prompt.md to modify your main task"));
|
|
12957
|
-
console.log(chalk12__default.default.gray(' - Use "juno-
|
|
13093
|
+
console.log(chalk12__default.default.gray(' - Use "juno-code --help" to see all available commands'));
|
|
12958
13094
|
console.log(chalk12__default.default.gray(" - Run .juno_task/scripts/clean_logs_folder.sh to archive old logs"));
|
|
12959
13095
|
}
|
|
12960
13096
|
/**
|
|
@@ -13009,10 +13145,10 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
13009
13145
|
execSync("git add .", { cwd: targetDirectory, stdio: "ignore" });
|
|
13010
13146
|
const commitMessage = `Initial commit: ${this.context.task || "Project initialization"}
|
|
13011
13147
|
|
|
13012
|
-
\u{1F916} Generated with juno-
|
|
13148
|
+
\u{1F916} Generated with juno-code using ${this.context.subagent} subagent
|
|
13013
13149
|
\u{1F3AF} Main Task: ${this.context.task}
|
|
13014
13150
|
|
|
13015
|
-
\u{1F680} Generated with [juno-
|
|
13151
|
+
\u{1F680} Generated with [juno-code](https://github.com/owner/juno-code-ts)
|
|
13016
13152
|
|
|
13017
13153
|
Co-Authored-By: Claude <noreply@anthropic.com>`;
|
|
13018
13154
|
execSync(`git commit -m "${commitMessage}"`, {
|
|
@@ -13057,10 +13193,15 @@ var SimpleHeadlessInit = class {
|
|
|
13057
13193
|
createSimpleVariables(targetDirectory, task, editor, gitUrl) {
|
|
13058
13194
|
const projectName = path__namespace.basename(targetDirectory);
|
|
13059
13195
|
const currentDate = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
13196
|
+
let AGENTMD = "AGENTS.md";
|
|
13197
|
+
if (editor == "claude") {
|
|
13198
|
+
AGENTMD = "CLAUDE.md";
|
|
13199
|
+
}
|
|
13060
13200
|
return {
|
|
13061
13201
|
PROJECT_NAME: projectName,
|
|
13062
13202
|
TASK: task,
|
|
13063
13203
|
EDITOR: editor,
|
|
13204
|
+
AGENTMD,
|
|
13064
13205
|
CURRENT_DATE: currentDate,
|
|
13065
13206
|
VERSION: "1.0.0",
|
|
13066
13207
|
AUTHOR: "Development Team",
|
|
@@ -13073,7 +13214,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13073
13214
|
try {
|
|
13074
13215
|
const globalOptions = command.parent?.opts() || {};
|
|
13075
13216
|
const allOptions2 = { ...options, ...globalOptions };
|
|
13076
|
-
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
13217
|
+
console.log(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - Simplified Initialization"));
|
|
13077
13218
|
let context;
|
|
13078
13219
|
const shouldUseInteractive = options.interactive || !options.task && !process.env.CI || process.env.FORCE_INTERACTIVE === "1";
|
|
13079
13220
|
if (shouldUseInteractive) {
|
|
@@ -13114,7 +13255,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13114
13255
|
}
|
|
13115
13256
|
}
|
|
13116
13257
|
function configureInitCommand(program) {
|
|
13117
|
-
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) => {
|
|
13118
13259
|
const initOptions = {
|
|
13119
13260
|
directory,
|
|
13120
13261
|
force: options.force,
|
|
@@ -13132,9 +13273,9 @@ function configureInitCommand(program) {
|
|
|
13132
13273
|
await initCommandHandler([], initOptions, command);
|
|
13133
13274
|
}).addHelpText("after", `
|
|
13134
13275
|
Examples:
|
|
13135
|
-
$ juno-
|
|
13136
|
-
$ juno-
|
|
13137
|
-
$ 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
|
|
13138
13279
|
|
|
13139
13280
|
Simplified Interactive Flow:
|
|
13140
13281
|
1. Project Root \u2192 Specify target directory
|
|
@@ -14907,7 +15048,7 @@ var ProjectContextLoader = class {
|
|
|
14907
15048
|
const junoTaskDir = path__namespace.join(this.directory, ".juno_task");
|
|
14908
15049
|
if (!await fs__default.default.pathExists(junoTaskDir)) {
|
|
14909
15050
|
throw new FileSystemError(
|
|
14910
|
-
'No .juno_task directory found. Run "juno-
|
|
15051
|
+
'No .juno_task directory found. Run "juno-code init" first.',
|
|
14911
15052
|
junoTaskDir
|
|
14912
15053
|
);
|
|
14913
15054
|
}
|
|
@@ -14976,7 +15117,7 @@ var ExecutionCoordinator = class {
|
|
|
14976
15117
|
this.sessionManager = await createSessionManager(this.config);
|
|
14977
15118
|
if (this.enableFeedback) {
|
|
14978
15119
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
14979
|
-
command: "juno-
|
|
15120
|
+
command: "juno-code",
|
|
14980
15121
|
commandArgs: ["feedback"],
|
|
14981
15122
|
verbose: this.config.verbose,
|
|
14982
15123
|
showHeader: true,
|
|
@@ -15124,7 +15265,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15124
15265
|
try {
|
|
15125
15266
|
const globalOptions = command.parent?.opts() || {};
|
|
15126
15267
|
const allOptions2 = { ...globalOptions, ...options };
|
|
15127
|
-
writeTerminalProgress(chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
15268
|
+
writeTerminalProgress(chalk12__default.default.blue.bold("\u{1F3AF} Juno Code - Start Execution") + "\n");
|
|
15128
15269
|
const logLevel = allOptions2.logLevel ? LogLevel[allOptions2.logLevel.toUpperCase()] : 2 /* INFO */;
|
|
15129
15270
|
cliLogger.startTimer("start_command_total");
|
|
15130
15271
|
cliLogger.info("Starting execution command", { options: allOptions2, directory: allOptions2.directory || process.cwd() });
|
|
@@ -15174,7 +15315,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15174
15315
|
`Invalid subagent: ${allOptions2.subagent}`,
|
|
15175
15316
|
[
|
|
15176
15317
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
15177
|
-
"Run `juno-
|
|
15318
|
+
"Run `juno-code help start` for examples"
|
|
15178
15319
|
]
|
|
15179
15320
|
);
|
|
15180
15321
|
}
|
|
@@ -15216,7 +15357,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15216
15357
|
if (sessionId) {
|
|
15217
15358
|
writeTerminalProgress(chalk12__default.default.blue(`
|
|
15218
15359
|
\u{1F4C1} Session ID: ${sessionId}`) + "\n");
|
|
15219
|
-
writeTerminalProgress(chalk12__default.default.gray(' Use "juno-
|
|
15360
|
+
writeTerminalProgress(chalk12__default.default.gray(' Use "juno-code session info ' + sessionId + '" for detailed information') + "\n");
|
|
15220
15361
|
sessionLogger.info("Session completed", {
|
|
15221
15362
|
sessionId,
|
|
15222
15363
|
status: result.status,
|
|
@@ -15283,20 +15424,20 @@ function configureStartCommand(program) {
|
|
|
15283
15424
|
await startCommandHandler([], options, command);
|
|
15284
15425
|
}).addHelpText("after", `
|
|
15285
15426
|
Examples:
|
|
15286
|
-
$ juno-
|
|
15287
|
-
$ juno-
|
|
15288
|
-
$ juno-
|
|
15289
|
-
$ juno-
|
|
15290
|
-
$ juno-
|
|
15291
|
-
$ juno-
|
|
15292
|
-
$ juno-
|
|
15293
|
-
$ juno-
|
|
15294
|
-
$ juno-
|
|
15295
|
-
$ juno-
|
|
15296
|
-
$ juno-
|
|
15297
|
-
$ juno-
|
|
15298
|
-
$ juno-
|
|
15299
|
-
$ 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
|
|
15300
15441
|
|
|
15301
15442
|
Feedback Collection:
|
|
15302
15443
|
--enable-feedback Enable concurrent feedback collection
|
|
@@ -15312,13 +15453,13 @@ Performance Options:
|
|
|
15312
15453
|
--metrics-file <path> Custom metrics file path
|
|
15313
15454
|
|
|
15314
15455
|
Environment Variables:
|
|
15315
|
-
|
|
15316
|
-
|
|
15317
|
-
|
|
15318
|
-
|
|
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)
|
|
15319
15460
|
|
|
15320
15461
|
Notes:
|
|
15321
|
-
- Requires .juno_task/init.md file (created by 'juno-
|
|
15462
|
+
- Requires .juno_task/init.md file (created by 'juno-code init')
|
|
15322
15463
|
- Creates a new session for tracking execution
|
|
15323
15464
|
- Progress is displayed in real-time
|
|
15324
15465
|
- Performance metrics are collected automatically
|
|
@@ -16384,18 +16525,18 @@ function configureTestCommand(program) {
|
|
|
16384
16525
|
await testCommandHandler(target, testOptions, command);
|
|
16385
16526
|
}).addHelpText("after", `
|
|
16386
16527
|
Examples:
|
|
16387
|
-
$ juno-
|
|
16388
|
-
$ juno-
|
|
16389
|
-
$ juno-
|
|
16390
|
-
$ juno-
|
|
16391
|
-
$ juno-
|
|
16392
|
-
$ juno-
|
|
16393
|
-
$ juno-
|
|
16394
|
-
$ juno-
|
|
16395
|
-
$ juno-
|
|
16396
|
-
$ juno-
|
|
16397
|
-
$ juno-
|
|
16398
|
-
$ 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
|
|
16399
16540
|
|
|
16400
16541
|
Test Types:
|
|
16401
16542
|
unit Unit tests for individual functions/classes
|
|
@@ -16967,7 +17108,7 @@ function getFeedbackFile(options) {
|
|
|
16967
17108
|
return options.file || path__namespace.join(process.cwd(), ".juno_task", "USER_FEEDBACK.md");
|
|
16968
17109
|
}
|
|
16969
17110
|
function configureFeedbackCommand(program) {
|
|
16970
|
-
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) => {
|
|
16971
17112
|
const feedbackOptions = {
|
|
16972
17113
|
file: options.file,
|
|
16973
17114
|
interactive: options.interactive,
|
|
@@ -16988,18 +17129,18 @@ function configureFeedbackCommand(program) {
|
|
|
16988
17129
|
await feedbackCommandHandler(args, feedbackOptions);
|
|
16989
17130
|
}).addHelpText("after", `
|
|
16990
17131
|
Examples:
|
|
16991
|
-
$ juno-
|
|
16992
|
-
$ juno-
|
|
16993
|
-
$ juno-
|
|
16994
|
-
$ juno-
|
|
16995
|
-
$ juno-
|
|
16996
|
-
$ juno-
|
|
16997
|
-
$ juno-
|
|
16998
|
-
$ juno-
|
|
16999
|
-
$ juno-
|
|
17000
|
-
$ juno-
|
|
17001
|
-
$ juno-
|
|
17002
|
-
$ 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
|
|
17003
17144
|
|
|
17004
17145
|
Enhanced Features:
|
|
17005
17146
|
1. Issue Description \u2192 Structured feedback with optional test criteria
|
|
@@ -17041,7 +17182,7 @@ async function handleCompactCommand(subArgs, options) {
|
|
|
17041
17182
|
if (filesToCompact.length === 0) {
|
|
17042
17183
|
console.log(chalk12__default.default.yellow("\u{1F4C4} No config files found to compact"));
|
|
17043
17184
|
console.log(chalk12__default.default.gray(" Looking for: CLAUDE.md, AGENTS.md"));
|
|
17044
|
-
console.log(chalk12__default.default.gray(" Usage: juno-
|
|
17185
|
+
console.log(chalk12__default.default.gray(" Usage: juno-code feedback compact [file1] [file2]"));
|
|
17045
17186
|
return;
|
|
17046
17187
|
}
|
|
17047
17188
|
console.log(chalk12__default.default.blue.bold("\n\u{1F5DC}\uFE0F File Compaction Process\n"));
|
|
@@ -17148,7 +17289,7 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17148
17289
|
if (!issueText.trim()) {
|
|
17149
17290
|
throw new ValidationError(
|
|
17150
17291
|
"Issue description is required when using --issue/-is/--detail/--description or --test/-tc flags",
|
|
17151
|
-
['Use: juno-
|
|
17292
|
+
['Use: juno-code feedback -is "Issue description" -t "Test criteria" or -tc "Test criteria"']
|
|
17152
17293
|
);
|
|
17153
17294
|
}
|
|
17154
17295
|
const feedbackFile = getFeedbackFile(options);
|
|
@@ -17198,10 +17339,10 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17198
17339
|
} else {
|
|
17199
17340
|
console.log(chalk12__default.default.yellow("Use --interactive mode, --issue/-is/--detail/--description flag, or provide feedback text"));
|
|
17200
17341
|
console.log(chalk12__default.default.gray("Examples:"));
|
|
17201
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17202
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17203
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
17204
|
-
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"'));
|
|
17205
17346
|
}
|
|
17206
17347
|
break;
|
|
17207
17348
|
}
|
|
@@ -17459,14 +17600,14 @@ async function handleSessionInfo(args, options, sessionManager) {
|
|
|
17459
17600
|
const sessionId = args[0];
|
|
17460
17601
|
if (!sessionId) {
|
|
17461
17602
|
console.log(chalk12__default.default.red("Session ID is required"));
|
|
17462
|
-
console.log(chalk12__default.default.gray("Usage: juno-
|
|
17463
|
-
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'));
|
|
17464
17605
|
return;
|
|
17465
17606
|
}
|
|
17466
17607
|
const session = await sessionManager.getSession(sessionId);
|
|
17467
17608
|
if (!session) {
|
|
17468
17609
|
console.log(chalk12__default.default.red(`Session not found: ${sessionId}`));
|
|
17469
|
-
console.log(chalk12__default.default.gray('Use "juno-
|
|
17610
|
+
console.log(chalk12__default.default.gray('Use "juno-code session list" to see available sessions'));
|
|
17470
17611
|
return;
|
|
17471
17612
|
}
|
|
17472
17613
|
const formatter = new SessionDisplayFormatter(options.verbose);
|
|
@@ -17476,7 +17617,7 @@ async function handleSessionRemove(args, options, sessionManager) {
|
|
|
17476
17617
|
const sessionIds = args;
|
|
17477
17618
|
if (sessionIds.length === 0) {
|
|
17478
17619
|
console.log(chalk12__default.default.red("At least one session ID is required"));
|
|
17479
|
-
console.log(chalk12__default.default.gray("Usage: juno-
|
|
17620
|
+
console.log(chalk12__default.default.gray("Usage: juno-code session remove <session-id> [session-id...]"));
|
|
17480
17621
|
process.exit(1);
|
|
17481
17622
|
}
|
|
17482
17623
|
let successCount = 0;
|
|
@@ -17605,15 +17746,15 @@ Subcommands:
|
|
|
17605
17746
|
clean, cleanup Clean up old/empty sessions
|
|
17606
17747
|
|
|
17607
17748
|
Examples:
|
|
17608
|
-
$ juno-
|
|
17609
|
-
$ juno-
|
|
17610
|
-
$ juno-
|
|
17611
|
-
$ juno-
|
|
17612
|
-
$ juno-
|
|
17613
|
-
$ juno-
|
|
17614
|
-
$ juno-
|
|
17615
|
-
$ juno-
|
|
17616
|
-
$ 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
|
|
17617
17758
|
|
|
17618
17759
|
Environment Variables:
|
|
17619
17760
|
JUNO_TASK_SESSION_DIR Session storage directory
|
|
@@ -17910,7 +18051,7 @@ var GitManager = class {
|
|
|
17910
18051
|
/**
|
|
17911
18052
|
* Create initial commit
|
|
17912
18053
|
*/
|
|
17913
|
-
async createInitialCommit(message = "Initial commit - juno-
|
|
18054
|
+
async createInitialCommit(message = "Initial commit - juno-code project setup") {
|
|
17914
18055
|
try {
|
|
17915
18056
|
const { execa: execa2 } = await import('execa');
|
|
17916
18057
|
await execa2("git", ["add", "."], { cwd: this.workingDirectory });
|
|
@@ -17995,7 +18136,7 @@ GIT_URL: ${gitUrl}
|
|
|
17995
18136
|
}
|
|
17996
18137
|
await fs__default.default.writeFile(configPath, content, "utf-8");
|
|
17997
18138
|
} catch (error) {
|
|
17998
|
-
console.warn(`Warning: Failed to update juno-
|
|
18139
|
+
console.warn(`Warning: Failed to update juno-code configuration: ${error}`);
|
|
17999
18140
|
}
|
|
18000
18141
|
}
|
|
18001
18142
|
/**
|
|
@@ -18290,7 +18431,7 @@ var GitDisplayFormatter = class {
|
|
|
18290
18431
|
console.log(chalk12__default.default.gray(` git push -u origin ${info.currentBranch || "main"}`));
|
|
18291
18432
|
}
|
|
18292
18433
|
console.log(" 3. Start working on your project:");
|
|
18293
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
18434
|
+
console.log(chalk12__default.default.gray(" juno-code start"));
|
|
18294
18435
|
}
|
|
18295
18436
|
formatStatus(status) {
|
|
18296
18437
|
const statusColors = {
|
|
@@ -18405,7 +18546,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18405
18546
|
console.log(` Web URL: ${chalk12__default.default.blue(webUrl)}`);
|
|
18406
18547
|
} else {
|
|
18407
18548
|
console.log(chalk12__default.default.yellow("\n\u{1F517} No upstream repository configured"));
|
|
18408
|
-
console.log(chalk12__default.default.gray(" Use: juno-
|
|
18549
|
+
console.log(chalk12__default.default.gray(" Use: juno-code setup-git <url> to configure"));
|
|
18409
18550
|
}
|
|
18410
18551
|
return;
|
|
18411
18552
|
}
|
|
@@ -18413,7 +18554,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18413
18554
|
const info = await gitManager.getRepositoryInfo();
|
|
18414
18555
|
if (!info.isRepository) {
|
|
18415
18556
|
console.log(chalk12__default.default.yellow("\u274C Not a Git repository"));
|
|
18416
|
-
console.log(chalk12__default.default.gray(" Initialize with: juno-
|
|
18557
|
+
console.log(chalk12__default.default.gray(" Initialize with: juno-code setup-git --init"));
|
|
18417
18558
|
return;
|
|
18418
18559
|
}
|
|
18419
18560
|
const upstreamConfig = await gitManager.getUpstreamConfig();
|
|
@@ -18518,10 +18659,10 @@ function configureSetupGitCommand(program) {
|
|
|
18518
18659
|
await setupGitCommandHandler(args, options);
|
|
18519
18660
|
}).addHelpText("after", `
|
|
18520
18661
|
Examples:
|
|
18521
|
-
$ juno-
|
|
18522
|
-
$ juno-
|
|
18523
|
-
$ juno-
|
|
18524
|
-
$ 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
|
|
18525
18666
|
|
|
18526
18667
|
Git URL Examples:
|
|
18527
18668
|
https://github.com/owner/repo.git # GitHub HTTPS
|
|
@@ -19173,16 +19314,16 @@ function configureLogsCommand(program) {
|
|
|
19173
19314
|
await logsCommandHandler([], options);
|
|
19174
19315
|
}).addHelpText("after", `
|
|
19175
19316
|
Examples:
|
|
19176
|
-
$ juno-
|
|
19177
|
-
$ juno-
|
|
19178
|
-
$ juno-
|
|
19179
|
-
$ juno-
|
|
19180
|
-
$ juno-
|
|
19181
|
-
$ juno-
|
|
19182
|
-
$ juno-
|
|
19183
|
-
$ juno-
|
|
19184
|
-
$ juno-
|
|
19185
|
-
$ 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
|
|
19186
19327
|
|
|
19187
19328
|
Interactive Viewer:
|
|
19188
19329
|
\u2191\u2193 or j/k Navigate entries
|
|
@@ -19863,22 +20004,22 @@ var QUICK_REFERENCE = [
|
|
|
19863
20004
|
{
|
|
19864
20005
|
name: "init",
|
|
19865
20006
|
description: "Initialize new project",
|
|
19866
|
-
usage: "juno-
|
|
20007
|
+
usage: "juno-code init [--interactive]"
|
|
19867
20008
|
},
|
|
19868
20009
|
{
|
|
19869
20010
|
name: "start",
|
|
19870
20011
|
description: "Execute task",
|
|
19871
|
-
usage: "juno-
|
|
20012
|
+
usage: "juno-code start [--max-iterations N]"
|
|
19872
20013
|
},
|
|
19873
20014
|
{
|
|
19874
20015
|
name: "logs",
|
|
19875
20016
|
description: "View application logs",
|
|
19876
|
-
usage: "juno-
|
|
20017
|
+
usage: "juno-code logs [--interactive]"
|
|
19877
20018
|
},
|
|
19878
20019
|
{
|
|
19879
20020
|
name: "session",
|
|
19880
20021
|
description: "Manage execution sessions",
|
|
19881
|
-
usage: "juno-
|
|
20022
|
+
usage: "juno-code session <list|info|remove>"
|
|
19882
20023
|
}
|
|
19883
20024
|
]
|
|
19884
20025
|
},
|
|
@@ -19888,22 +20029,22 @@ var QUICK_REFERENCE = [
|
|
|
19888
20029
|
{
|
|
19889
20030
|
name: "claude",
|
|
19890
20031
|
description: "Execute with Claude subagent",
|
|
19891
|
-
usage: 'juno-
|
|
20032
|
+
usage: 'juno-code claude "task description"'
|
|
19892
20033
|
},
|
|
19893
20034
|
{
|
|
19894
20035
|
name: "cursor",
|
|
19895
20036
|
description: "Execute with Cursor subagent",
|
|
19896
|
-
usage: 'juno-
|
|
20037
|
+
usage: 'juno-code cursor "task description"'
|
|
19897
20038
|
},
|
|
19898
20039
|
{
|
|
19899
20040
|
name: "codex",
|
|
19900
20041
|
description: "Execute with Codex subagent",
|
|
19901
|
-
usage: 'juno-
|
|
20042
|
+
usage: 'juno-code codex "task description"'
|
|
19902
20043
|
},
|
|
19903
20044
|
{
|
|
19904
20045
|
name: "gemini",
|
|
19905
20046
|
description: "Execute with Gemini subagent",
|
|
19906
|
-
usage: 'juno-
|
|
20047
|
+
usage: 'juno-code gemini "task description"'
|
|
19907
20048
|
}
|
|
19908
20049
|
]
|
|
19909
20050
|
},
|
|
@@ -19913,22 +20054,22 @@ var QUICK_REFERENCE = [
|
|
|
19913
20054
|
{
|
|
19914
20055
|
name: "feedback",
|
|
19915
20056
|
description: "Collect user feedback",
|
|
19916
|
-
usage: "juno-
|
|
20057
|
+
usage: "juno-code feedback [--interactive]"
|
|
19917
20058
|
},
|
|
19918
20059
|
{
|
|
19919
20060
|
name: "setup-git",
|
|
19920
20061
|
description: "Initialize Git repository",
|
|
19921
|
-
usage: "juno-
|
|
20062
|
+
usage: "juno-code setup-git <repository-url>"
|
|
19922
20063
|
},
|
|
19923
20064
|
{
|
|
19924
20065
|
name: "completion",
|
|
19925
20066
|
description: "Shell completion setup",
|
|
19926
|
-
usage: "juno-
|
|
20067
|
+
usage: "juno-code completion <install|uninstall>"
|
|
19927
20068
|
},
|
|
19928
20069
|
{
|
|
19929
20070
|
name: "help",
|
|
19930
20071
|
description: "Show help information",
|
|
19931
|
-
usage: "juno-
|
|
20072
|
+
usage: "juno-code help [--interactive]"
|
|
19932
20073
|
}
|
|
19933
20074
|
]
|
|
19934
20075
|
}
|
|
@@ -19947,15 +20088,15 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
19947
20088
|
|
|
19948
20089
|
**Solutions**:
|
|
19949
20090
|
1. Install MCP server (e.g., roundtable-mcp-server)
|
|
19950
|
-
2. Check configuration: \`juno-
|
|
20091
|
+
2. Check configuration: \`juno-code init --interactive\`
|
|
19951
20092
|
3. Verify server path: \`which roundtable-mcp-server\`
|
|
19952
|
-
4. Test connection: \`juno-
|
|
20093
|
+
4. Test connection: \`juno-code start --verbose\`
|
|
19953
20094
|
|
|
19954
20095
|
### \u{1F4C1} File System Issues
|
|
19955
20096
|
|
|
19956
20097
|
**Issue**: "init.md not found"
|
|
19957
20098
|
**Cause**: No project initialized in current directory
|
|
19958
|
-
**Solution**: Run \`juno-
|
|
20099
|
+
**Solution**: Run \`juno-code init\` to create project structure
|
|
19959
20100
|
|
|
19960
20101
|
**Issue**: "Permission denied"
|
|
19961
20102
|
**Cause**: Insufficient file permissions
|
|
@@ -19983,19 +20124,19 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
19983
20124
|
Get detailed debug information:
|
|
19984
20125
|
\`\`\`bash
|
|
19985
20126
|
# Verbose execution with debug logging
|
|
19986
|
-
juno-
|
|
20127
|
+
juno-code start --verbose --log-level debug
|
|
19987
20128
|
|
|
19988
20129
|
# View recent error logs
|
|
19989
|
-
juno-
|
|
20130
|
+
juno-code logs --level error --tail 50
|
|
19990
20131
|
|
|
19991
20132
|
# Export logs for analysis
|
|
19992
|
-
juno-
|
|
20133
|
+
juno-code logs --export debug.json --level debug
|
|
19993
20134
|
\`\`\`
|
|
19994
20135
|
|
|
19995
20136
|
## Getting More Help
|
|
19996
20137
|
|
|
19997
|
-
1. **Interactive Help**: \`juno-
|
|
19998
|
-
2. **View Logs**: \`juno-
|
|
20138
|
+
1. **Interactive Help**: \`juno-code help --interactive\`
|
|
20139
|
+
2. **View Logs**: \`juno-code logs --interactive\`
|
|
19999
20140
|
3. **Check Configuration**: Review .juno_task/config.json
|
|
20000
20141
|
4. **Test MCP Connection**: Use --verbose flag with any command
|
|
20001
20142
|
5. **Report Issues**: Include debug logs when reporting problems
|
|
@@ -20004,16 +20145,20 @@ juno-task logs --export debug.json --level debug
|
|
|
20004
20145
|
|
|
20005
20146
|
Useful for debugging:
|
|
20006
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)
|
|
20007
20153
|
export JUNO_TASK_VERBOSE=true
|
|
20008
20154
|
export JUNO_TASK_LOG_LEVEL=debug
|
|
20009
|
-
export NO_COLOR=true # Disable colors for log analysis
|
|
20010
20155
|
\`\`\`
|
|
20011
20156
|
`;
|
|
20012
20157
|
function displayQuickReference(formatter) {
|
|
20013
20158
|
console.log(formatter.panel(
|
|
20014
|
-
"Welcome to juno-
|
|
20159
|
+
"Welcome to juno-code! This quick reference shows the most commonly used commands.",
|
|
20015
20160
|
{
|
|
20016
|
-
title: "\u{1F680} juno-
|
|
20161
|
+
title: "\u{1F680} juno-code Quick Reference",
|
|
20017
20162
|
border: "rounded",
|
|
20018
20163
|
style: "success",
|
|
20019
20164
|
padding: 1
|
|
@@ -20030,8 +20175,8 @@ function displayQuickReference(formatter) {
|
|
|
20030
20175
|
});
|
|
20031
20176
|
});
|
|
20032
20177
|
console.log(formatter.panel(
|
|
20033
|
-
`Use ${chalk12__default.default.cyan("juno-
|
|
20034
|
-
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.`,
|
|
20035
20180
|
{
|
|
20036
20181
|
title: "\u{1F4A1} Next Steps",
|
|
20037
20182
|
border: "rounded",
|
|
@@ -20082,8 +20227,8 @@ function listHelpTopics() {
|
|
|
20082
20227
|
console.log(`${icon} ${chalk12__default.default.cyan(topic.id.padEnd(20))} ${topic.title}`);
|
|
20083
20228
|
});
|
|
20084
20229
|
console.log(chalk12__default.default.yellow(`
|
|
20085
|
-
Use ${chalk12__default.default.cyan("juno-
|
|
20086
|
-
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`));
|
|
20087
20232
|
}
|
|
20088
20233
|
function searchHelpTopics(searchTerm) {
|
|
20089
20234
|
const matchingTopics = [
|
|
@@ -20103,7 +20248,7 @@ function searchHelpTopics(searchTerm) {
|
|
|
20103
20248
|
console.log(chalk12__default.default.cyan(`\u2022 ${topicId}`));
|
|
20104
20249
|
});
|
|
20105
20250
|
console.log(chalk12__default.default.yellow(`
|
|
20106
|
-
Use ${chalk12__default.default.cyan("juno-
|
|
20251
|
+
Use ${chalk12__default.default.cyan("juno-code help --topic <id>")} to view details`));
|
|
20107
20252
|
}
|
|
20108
20253
|
async function helpCommandHandler(args, options, command) {
|
|
20109
20254
|
try {
|
|
@@ -20157,12 +20302,12 @@ function configureHelpCommand(program) {
|
|
|
20157
20302
|
await helpCommandHandler([], options);
|
|
20158
20303
|
}).addHelpText("after", `
|
|
20159
20304
|
Examples:
|
|
20160
|
-
$ juno-
|
|
20161
|
-
$ juno-
|
|
20162
|
-
$ juno-
|
|
20163
|
-
$ juno-
|
|
20164
|
-
$ juno-
|
|
20165
|
-
$ 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
|
|
20166
20311
|
|
|
20167
20312
|
Interactive Help Features:
|
|
20168
20313
|
- Browse help by category
|
|
@@ -20191,7 +20336,7 @@ Navigation (Interactive Mode):
|
|
|
20191
20336
|
Notes:
|
|
20192
20337
|
- Interactive help provides the most comprehensive assistance
|
|
20193
20338
|
- Use --verbose with any command for detailed output
|
|
20194
|
-
- Check logs with 'juno-
|
|
20339
|
+
- Check logs with 'juno-code logs' for debugging
|
|
20195
20340
|
- All help content is searchable and cross-referenced
|
|
20196
20341
|
`);
|
|
20197
20342
|
}
|
|
@@ -20207,7 +20352,7 @@ var ProfileDisplayFormatter = class {
|
|
|
20207
20352
|
formatProfileList(profiles, activeProfile) {
|
|
20208
20353
|
if (profiles.length === 0) {
|
|
20209
20354
|
console.log(chalk12__default.default.yellow("No configuration profiles found."));
|
|
20210
|
-
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.'));
|
|
20211
20356
|
return;
|
|
20212
20357
|
}
|
|
20213
20358
|
console.log(chalk12__default.default.blue.bold(`
|
|
@@ -20301,7 +20446,7 @@ async function listProfiles(options = {}) {
|
|
|
20301
20446
|
const formatter = new ProfileDisplayFormatter(options.verbose);
|
|
20302
20447
|
formatter.formatProfileList(profiles, activeProfile);
|
|
20303
20448
|
if (options.verbose && profiles.length > 0) {
|
|
20304
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20449
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config show <profile>" for detailed information.'));
|
|
20305
20450
|
}
|
|
20306
20451
|
} catch (error) {
|
|
20307
20452
|
const formatter = new ProfileDisplayFormatter();
|
|
@@ -20326,7 +20471,7 @@ async function showProfile(profileName, options = {}) {
|
|
|
20326
20471
|
const formatter = new ProfileDisplayFormatter();
|
|
20327
20472
|
if (error instanceof ProfileNotFoundError) {
|
|
20328
20473
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20329
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20474
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20330
20475
|
} else {
|
|
20331
20476
|
formatter.formatError(`Failed to show profile: ${error}`);
|
|
20332
20477
|
}
|
|
@@ -20344,7 +20489,7 @@ async function setActiveProfile(profileName) {
|
|
|
20344
20489
|
const formatter = new ProfileDisplayFormatter();
|
|
20345
20490
|
if (error instanceof ProfileNotFoundError) {
|
|
20346
20491
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20347
|
-
console.log(chalk12__default.default.gray('\nUse "juno-
|
|
20492
|
+
console.log(chalk12__default.default.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20348
20493
|
} else {
|
|
20349
20494
|
formatter.formatError(`Failed to set active profile: ${error}`);
|
|
20350
20495
|
}
|
|
@@ -20373,13 +20518,13 @@ async function createProfile(profileName, options = {}) {
|
|
|
20373
20518
|
formatter.formatSuccess(`Profile '${profileName}' created successfully`);
|
|
20374
20519
|
if (options.interactive) {
|
|
20375
20520
|
console.log(chalk12__default.default.gray("\nYou can now configure this profile using:"));
|
|
20376
|
-
console.log(chalk12__default.default.cyan(` juno-
|
|
20521
|
+
console.log(chalk12__default.default.cyan(` juno-code config edit ${profileName}`));
|
|
20377
20522
|
}
|
|
20378
20523
|
} catch (error) {
|
|
20379
20524
|
const formatter = new ProfileDisplayFormatter();
|
|
20380
20525
|
if (error instanceof ProfileExistsError) {
|
|
20381
20526
|
formatter.formatError(`Profile '${profileName}' already exists.`);
|
|
20382
|
-
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.'));
|
|
20383
20528
|
} else if (error instanceof CircularInheritanceError) {
|
|
20384
20529
|
formatter.formatError(`Circular inheritance detected: ${error.message}`);
|
|
20385
20530
|
} else {
|
|
@@ -20473,12 +20618,12 @@ function setupConfigCommand(program) {
|
|
|
20473
20618
|
configCmd.on("--help", () => {
|
|
20474
20619
|
console.log("");
|
|
20475
20620
|
console.log("Examples:");
|
|
20476
|
-
console.log(" $ juno-
|
|
20477
|
-
console.log(" $ juno-
|
|
20478
|
-
console.log(" $ juno-
|
|
20479
|
-
console.log(' $ juno-
|
|
20480
|
-
console.log(" $ juno-
|
|
20481
|
-
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");
|
|
20482
20627
|
console.log("");
|
|
20483
20628
|
});
|
|
20484
20629
|
}
|
|
@@ -20576,15 +20721,15 @@ var ShellDetector = class _ShellDetector {
|
|
|
20576
20721
|
switch (shell) {
|
|
20577
20722
|
case "bash":
|
|
20578
20723
|
if (process.platform === "darwin") {
|
|
20579
|
-
return path__namespace.join("/usr/local/etc/bash_completion.d", "juno-
|
|
20724
|
+
return path__namespace.join("/usr/local/etc/bash_completion.d", "juno-code");
|
|
20580
20725
|
}
|
|
20581
|
-
return path__namespace.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-
|
|
20726
|
+
return path__namespace.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-code");
|
|
20582
20727
|
case "zsh":
|
|
20583
|
-
return path__namespace.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-
|
|
20728
|
+
return path__namespace.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-code");
|
|
20584
20729
|
case "fish":
|
|
20585
|
-
return path__namespace.join(homeDir, ".config", "fish", "completions", "juno-
|
|
20730
|
+
return path__namespace.join(homeDir, ".config", "fish", "completions", "juno-code.fish");
|
|
20586
20731
|
case "powershell":
|
|
20587
|
-
return path__namespace.join(homeDir, ".config", "powershell", "completions", "juno-
|
|
20732
|
+
return path__namespace.join(homeDir, ".config", "powershell", "completions", "juno-code.ps1");
|
|
20588
20733
|
default:
|
|
20589
20734
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
20590
20735
|
}
|
|
@@ -20606,17 +20751,17 @@ var ShellDetector = class _ShellDetector {
|
|
|
20606
20751
|
getSourceCommand(shell, completionPath) {
|
|
20607
20752
|
switch (shell) {
|
|
20608
20753
|
case "bash":
|
|
20609
|
-
return `# juno-
|
|
20754
|
+
return `# juno-code completion
|
|
20610
20755
|
[ -f "${completionPath}" ] && source "${completionPath}"`;
|
|
20611
20756
|
case "zsh":
|
|
20612
20757
|
const zshDir = path__namespace.dirname(completionPath);
|
|
20613
|
-
return `# juno-
|
|
20758
|
+
return `# juno-code completion
|
|
20614
20759
|
fpath=("${zshDir}" $fpath)
|
|
20615
20760
|
autoload -U compinit && compinit`;
|
|
20616
20761
|
case "fish":
|
|
20617
|
-
return `# juno-
|
|
20762
|
+
return `# juno-code completion (automatically loaded)`;
|
|
20618
20763
|
case "powershell":
|
|
20619
|
-
return `# juno-
|
|
20764
|
+
return `# juno-code completion
|
|
20620
20765
|
. "${completionPath}"`;
|
|
20621
20766
|
default:
|
|
20622
20767
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
@@ -20631,7 +20776,7 @@ autoload -U compinit && compinit`;
|
|
|
20631
20776
|
return false;
|
|
20632
20777
|
}
|
|
20633
20778
|
const content = await fs__default.default.readFile(configPath, "utf-8");
|
|
20634
|
-
return content.includes("juno-
|
|
20779
|
+
return content.includes("juno-code completion");
|
|
20635
20780
|
} catch {
|
|
20636
20781
|
return false;
|
|
20637
20782
|
}
|
|
@@ -20890,7 +21035,7 @@ var CompletionInstaller = class {
|
|
|
20890
21035
|
}
|
|
20891
21036
|
await this.shellDetector.ensureCompletionDirectory(shell);
|
|
20892
21037
|
await this.shellDetector.ensureConfigDirectory(shell);
|
|
20893
|
-
const script = this.generateEnhancedCompletion(shell, "juno-
|
|
21038
|
+
const script = this.generateEnhancedCompletion(shell, "juno-code");
|
|
20894
21039
|
const completionPath = this.shellDetector.getCompletionPath(shell);
|
|
20895
21040
|
await fs__default.default.writeFile(completionPath, script, "utf-8");
|
|
20896
21041
|
const configPath = this.shellDetector.getConfigPath(shell);
|
|
@@ -20979,7 +21124,7 @@ ${sourceCommand}
|
|
|
20979
21124
|
return `#!/bin/bash
|
|
20980
21125
|
|
|
20981
21126
|
# ${commandName} enhanced completion script for bash
|
|
20982
|
-
# Generated by juno-
|
|
21127
|
+
# Generated by juno-code CLI with context-aware features
|
|
20983
21128
|
|
|
20984
21129
|
_${commandName}_completion() {
|
|
20985
21130
|
local cur prev opts base
|
|
@@ -21173,7 +21318,7 @@ complete -F _${commandName}_completion ${commandName}
|
|
|
21173
21318
|
return `#compdef ${commandName}
|
|
21174
21319
|
|
|
21175
21320
|
# ${commandName} enhanced completion script for zsh
|
|
21176
|
-
# Generated by juno-
|
|
21321
|
+
# Generated by juno-code CLI with context-aware features
|
|
21177
21322
|
|
|
21178
21323
|
_${commandName}() {
|
|
21179
21324
|
local context state line
|
|
@@ -21328,7 +21473,7 @@ _${commandName} "$@"
|
|
|
21328
21473
|
*/
|
|
21329
21474
|
generateEnhancedFishCompletion(commandName) {
|
|
21330
21475
|
return `# ${commandName} enhanced completion script for fish
|
|
21331
|
-
# Generated by juno-
|
|
21476
|
+
# Generated by juno-code CLI with context-aware features
|
|
21332
21477
|
|
|
21333
21478
|
# Context-aware model completion
|
|
21334
21479
|
function __${commandName}_complete_models
|
|
@@ -21584,7 +21729,7 @@ var CompletionCommand = class {
|
|
|
21584
21729
|
const uninstalledShells = completionStatus.filter((status) => !status.isInstalled && !status.error).map((status) => status.shell);
|
|
21585
21730
|
if (uninstalledShells.length > 0) {
|
|
21586
21731
|
console.log(chalk12__default.default.blue("\n\u{1F4A1} Suggestions:"));
|
|
21587
|
-
console.log(chalk12__default.default.white(` Install completion: juno-
|
|
21732
|
+
console.log(chalk12__default.default.white(` Install completion: juno-code completion install ${uninstalledShells.join(" ")}`));
|
|
21588
21733
|
}
|
|
21589
21734
|
const currentShell = this.shellDetector.getCurrentShell();
|
|
21590
21735
|
if (currentShell) {
|
|
@@ -21595,7 +21740,7 @@ var CompletionCommand = class {
|
|
|
21595
21740
|
} else {
|
|
21596
21741
|
console.log(chalk12__default.default.yellow(`
|
|
21597
21742
|
\u{1F3AF} Current shell (${currentShell}): Completion not installed`));
|
|
21598
|
-
console.log(chalk12__default.default.white(` Install: juno-
|
|
21743
|
+
console.log(chalk12__default.default.white(` Install: juno-code completion install ${currentShell}`));
|
|
21599
21744
|
}
|
|
21600
21745
|
}
|
|
21601
21746
|
} catch (error) {
|
|
@@ -21679,7 +21824,7 @@ var CompletionCommand = class {
|
|
|
21679
21824
|
console.log(chalk12__default.default.white("\u2022 Reload PowerShell"));
|
|
21680
21825
|
break;
|
|
21681
21826
|
}
|
|
21682
|
-
console.log(chalk12__default.default.white("\u2022 Test: juno-
|
|
21827
|
+
console.log(chalk12__default.default.white("\u2022 Test: juno-code <TAB>"));
|
|
21683
21828
|
}
|
|
21684
21829
|
};
|
|
21685
21830
|
var completion_default = CompletionCommand;
|
|
@@ -21745,7 +21890,7 @@ function setupMainCommand(program) {
|
|
|
21745
21890
|
const cwd2 = process.cwd();
|
|
21746
21891
|
const junoTaskDir = path20.join(cwd2, ".juno_task");
|
|
21747
21892
|
if (await fs18.pathExists(junoTaskDir)) {
|
|
21748
|
-
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"));
|
|
21749
21894
|
try {
|
|
21750
21895
|
const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
21751
21896
|
const config = await loadConfig2({
|
|
@@ -21778,13 +21923,13 @@ function setupMainCommand(program) {
|
|
|
21778
21923
|
}
|
|
21779
21924
|
}
|
|
21780
21925
|
if (!globalOptions.subagent && !options.prompt && !options.interactive && !options.interactivePrompt) {
|
|
21781
|
-
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"));
|
|
21782
21927
|
console.log(chalk12__default.default.white("To get started:"));
|
|
21783
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21784
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21785
|
-
console.log(chalk12__default.default.gray(" juno-
|
|
21786
|
-
console.log(chalk12__default.default.gray(' juno-
|
|
21787
|
-
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"));
|
|
21788
21933
|
console.log("");
|
|
21789
21934
|
return;
|
|
21790
21935
|
}
|
|
@@ -21798,7 +21943,7 @@ function setupMainCommand(program) {
|
|
|
21798
21943
|
function displayBanner(verbose = false) {
|
|
21799
21944
|
if (verbose) {
|
|
21800
21945
|
console.log(chalk12__default.default.blue.bold(`
|
|
21801
|
-
\u{1F3AF} Juno
|
|
21946
|
+
\u{1F3AF} Juno Code v${VERSION} - TypeScript CLI`));
|
|
21802
21947
|
console.log(chalk12__default.default.gray(` Node.js ${process.version} on ${process.platform}`));
|
|
21803
21948
|
console.log(chalk12__default.default.gray(` Working directory: ${process.cwd()}`));
|
|
21804
21949
|
console.log("");
|
|
@@ -21831,7 +21976,22 @@ function setupAliases(program) {
|
|
|
21831
21976
|
}
|
|
21832
21977
|
}
|
|
21833
21978
|
function configureEnvironment() {
|
|
21834
|
-
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 = [
|
|
21835
21995
|
"JUNO_TASK_SUBAGENT",
|
|
21836
21996
|
"JUNO_TASK_PROMPT",
|
|
21837
21997
|
"JUNO_TASK_CWD",
|
|
@@ -21846,10 +22006,10 @@ function configureEnvironment() {
|
|
|
21846
22006
|
"JUNO_TASK_NO_COLOR",
|
|
21847
22007
|
"JUNO_TASK_ENABLE_FEEDBACK"
|
|
21848
22008
|
];
|
|
21849
|
-
|
|
22009
|
+
const processEnvVar = (envVar, prefix) => {
|
|
21850
22010
|
const value = process.env[envVar];
|
|
21851
|
-
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(
|
|
21852
|
-
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, "-");
|
|
21853
22013
|
switch (option) {
|
|
21854
22014
|
case "verbose":
|
|
21855
22015
|
case "quiet":
|
|
@@ -21862,6 +22022,21 @@ function configureEnvironment() {
|
|
|
21862
22022
|
default:
|
|
21863
22023
|
process.argv.push(`--${option}`, value);
|
|
21864
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_");
|
|
21865
22040
|
}
|
|
21866
22041
|
}
|
|
21867
22042
|
if (!process.argv.includes("--enable-feedback")) {
|
|
@@ -21880,7 +22055,7 @@ function configureEnvironment() {
|
|
|
21880
22055
|
async function main() {
|
|
21881
22056
|
const program = new commander.Command();
|
|
21882
22057
|
configureEnvironment();
|
|
21883
|
-
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");
|
|
21884
22059
|
setupGlobalOptions(program);
|
|
21885
22060
|
const isVerbose = process.argv.includes("--verbose") || process.argv.includes("-v");
|
|
21886
22061
|
displayBanner(isVerbose);
|
|
@@ -21919,54 +22094,58 @@ async function main() {
|
|
|
21919
22094
|
setupAliases(program);
|
|
21920
22095
|
setupMainCommand(program);
|
|
21921
22096
|
program.addHelpText("beforeAll", `
|
|
21922
|
-
${chalk12__default.default.blue.bold("\u{1F3AF} Juno
|
|
22097
|
+
${chalk12__default.default.blue.bold("\u{1F3AF} Juno Code")} - TypeScript CLI for AI Subagent Orchestration
|
|
21923
22098
|
|
|
21924
22099
|
`);
|
|
21925
22100
|
program.addHelpText("afterAll", `
|
|
21926
22101
|
${chalk12__default.default.blue.bold("Examples:")}
|
|
21927
22102
|
${chalk12__default.default.gray("# Initialize new project")}
|
|
21928
|
-
juno-
|
|
22103
|
+
juno-code init
|
|
21929
22104
|
|
|
21930
22105
|
${chalk12__default.default.gray("# Start execution using .juno_task/init.md")}
|
|
21931
|
-
juno-
|
|
22106
|
+
juno-code start
|
|
21932
22107
|
|
|
21933
22108
|
${chalk12__default.default.gray("# AI-powered testing")}
|
|
21934
|
-
juno-
|
|
21935
|
-
juno-
|
|
21936
|
-
juno-
|
|
22109
|
+
juno-code test --generate --run
|
|
22110
|
+
juno-code test src/utils.ts --subagent claude
|
|
22111
|
+
juno-code test --analyze --coverage
|
|
21937
22112
|
|
|
21938
22113
|
${chalk12__default.default.gray("# Quick execution with Claude")}
|
|
21939
|
-
juno-
|
|
22114
|
+
juno-code claude "Analyze this codebase and suggest improvements"
|
|
21940
22115
|
|
|
21941
22116
|
${chalk12__default.default.gray("# Interactive project setup")}
|
|
21942
|
-
juno-
|
|
22117
|
+
juno-code init --interactive
|
|
21943
22118
|
|
|
21944
22119
|
${chalk12__default.default.gray("# Manage sessions")}
|
|
21945
|
-
juno-
|
|
21946
|
-
juno-
|
|
22120
|
+
juno-code session list
|
|
22121
|
+
juno-code session info abc123
|
|
21947
22122
|
|
|
21948
22123
|
${chalk12__default.default.gray("# Enable feedback collection globally")}
|
|
21949
|
-
juno-
|
|
22124
|
+
juno-code --enable-feedback start
|
|
21950
22125
|
|
|
21951
22126
|
${chalk12__default.default.gray("# Collect feedback")}
|
|
21952
|
-
juno-
|
|
22127
|
+
juno-code feedback --interactive
|
|
21953
22128
|
|
|
21954
22129
|
${chalk12__default.default.gray("# Manage configuration profiles")}
|
|
21955
|
-
juno-
|
|
21956
|
-
juno-
|
|
22130
|
+
juno-code config list
|
|
22131
|
+
juno-code config create development
|
|
21957
22132
|
|
|
21958
22133
|
${chalk12__default.default.gray("# Setup Git repository")}
|
|
21959
|
-
juno-
|
|
22134
|
+
juno-code setup-git https://github.com/owner/repo
|
|
21960
22135
|
|
|
21961
22136
|
${chalk12__default.default.blue.bold("Environment Variables:")}
|
|
21962
|
-
|
|
21963
|
-
|
|
21964
|
-
|
|
21965
|
-
|
|
21966
|
-
|
|
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
|
|
21967
22143
|
JUNO_INTERACTIVE_FEEDBACK_MODE Enable interactive feedback mode (true/false)
|
|
21968
22144
|
NO_COLOR Disable colored output (standard)
|
|
21969
22145
|
|
|
22146
|
+
${chalk12__default.default.gray("Legacy variables (backward compatibility):")}
|
|
22147
|
+
JUNO_TASK_* All JUNO_TASK_* variables still supported
|
|
22148
|
+
|
|
21970
22149
|
${chalk12__default.default.blue.bold("Configuration:")}
|
|
21971
22150
|
Configuration can be specified via:
|
|
21972
22151
|
1. Command line arguments (highest priority)
|
|
@@ -21975,8 +22154,8 @@ ${chalk12__default.default.blue.bold("Configuration:")}
|
|
|
21975
22154
|
4. Built-in defaults (lowest priority)
|
|
21976
22155
|
|
|
21977
22156
|
${chalk12__default.default.blue.bold("Support:")}
|
|
21978
|
-
Documentation: https://github.com/owner/juno-
|
|
21979
|
-
Issues: https://github.com/owner/juno-
|
|
22157
|
+
Documentation: https://github.com/owner/juno-code#readme
|
|
22158
|
+
Issues: https://github.com/owner/juno-code/issues
|
|
21980
22159
|
License: MIT
|
|
21981
22160
|
|
|
21982
22161
|
`);
|