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.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"],
|
|
@@ -244,6 +267,28 @@ var init_types = __esm({
|
|
|
244
267
|
};
|
|
245
268
|
}
|
|
246
269
|
});
|
|
270
|
+
|
|
271
|
+
// src/templates/default-hooks.ts
|
|
272
|
+
function getDefaultHooks() {
|
|
273
|
+
return JSON.parse(JSON.stringify(DEFAULT_HOOKS));
|
|
274
|
+
}
|
|
275
|
+
var DEFAULT_HOOKS;
|
|
276
|
+
var init_default_hooks = __esm({
|
|
277
|
+
"src/templates/default-hooks.ts"() {
|
|
278
|
+
init_version();
|
|
279
|
+
DEFAULT_HOOKS = {
|
|
280
|
+
START_ITERATION: {
|
|
281
|
+
commands: [
|
|
282
|
+
// Monitor CLAUDE.md file size
|
|
283
|
+
'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',
|
|
284
|
+
// Monitor AGENTS.md file size
|
|
285
|
+
'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',
|
|
286
|
+
"./.juno_task/scripts/cleanup_feedback.sh"
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
});
|
|
247
292
|
function createProfileManager(configDir) {
|
|
248
293
|
return new ProfileManager(configDir);
|
|
249
294
|
}
|
|
@@ -664,6 +709,7 @@ __export(config_exports, {
|
|
|
664
709
|
DEFAULT_CONFIG: () => DEFAULT_CONFIG,
|
|
665
710
|
ENV_VAR_MAPPING: () => ENV_VAR_MAPPING,
|
|
666
711
|
JunoTaskConfigSchema: () => JunoTaskConfigSchema,
|
|
712
|
+
LEGACY_ENV_VAR_MAPPING: () => LEGACY_ENV_VAR_MAPPING,
|
|
667
713
|
ProfileError: () => ProfileError,
|
|
668
714
|
ProfileExistsError: () => ProfileExistsError,
|
|
669
715
|
ProfileNotFoundError: () => ProfileNotFoundError,
|
|
@@ -695,6 +741,12 @@ function loadConfigFromEnv() {
|
|
|
695
741
|
config[configKey] = parseEnvValue(value);
|
|
696
742
|
}
|
|
697
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
|
+
}
|
|
698
750
|
return config;
|
|
699
751
|
}
|
|
700
752
|
async function loadJsonConfig(filePath) {
|
|
@@ -718,7 +770,7 @@ async function loadPackageJsonConfig(filePath) {
|
|
|
718
770
|
try {
|
|
719
771
|
const content = await promises.readFile(filePath, "utf-8");
|
|
720
772
|
const packageJson = JSON.parse(content);
|
|
721
|
-
return packageJson.
|
|
773
|
+
return packageJson.junoCode || {};
|
|
722
774
|
} catch (error) {
|
|
723
775
|
throw new Error(`Failed to load package.json config from ${filePath}: ${error}`);
|
|
724
776
|
}
|
|
@@ -805,12 +857,7 @@ async function ensureHooksConfig(baseDir) {
|
|
|
805
857
|
const configPath = path.join(configDir, "config.json");
|
|
806
858
|
await fs.ensureDir(configDir);
|
|
807
859
|
const configExists = await fs.pathExists(configPath);
|
|
808
|
-
const allHookTypes =
|
|
809
|
-
START_RUN: { commands: [] },
|
|
810
|
-
START_ITERATION: { commands: [] },
|
|
811
|
-
END_ITERATION: { commands: [] },
|
|
812
|
-
END_RUN: { commands: [] }
|
|
813
|
-
};
|
|
860
|
+
const allHookTypes = getDefaultHooks();
|
|
814
861
|
if (!configExists) {
|
|
815
862
|
const defaultConfig = {
|
|
816
863
|
...DEFAULT_CONFIG,
|
|
@@ -852,12 +899,35 @@ async function loadConfig(options = {}) {
|
|
|
852
899
|
const mergedConfig = loader.merge();
|
|
853
900
|
return validateConfig(mergedConfig);
|
|
854
901
|
}
|
|
855
|
-
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;
|
|
856
903
|
var init_config = __esm({
|
|
857
904
|
"src/core/config.ts"() {
|
|
858
905
|
init_version();
|
|
906
|
+
init_default_hooks();
|
|
859
907
|
init_profiles();
|
|
860
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 = {
|
|
861
931
|
// Core settings
|
|
862
932
|
JUNO_TASK_DEFAULT_SUBAGENT: "defaultSubagent",
|
|
863
933
|
JUNO_TASK_DEFAULT_MAX_ITERATIONS: "defaultMaxIterations",
|
|
@@ -930,16 +1000,16 @@ var init_config = __esm({
|
|
|
930
1000
|
// Paths
|
|
931
1001
|
workingDirectory: process.cwd(),
|
|
932
1002
|
sessionDirectory: path.join(process.cwd(), ".juno_task"),
|
|
933
|
-
// Hooks configuration
|
|
934
|
-
hooks:
|
|
1003
|
+
// Hooks configuration - populated with default hooks template
|
|
1004
|
+
hooks: getDefaultHooks()
|
|
935
1005
|
};
|
|
936
1006
|
GLOBAL_CONFIG_FILE_NAMES = [
|
|
937
|
-
"juno-
|
|
938
|
-
"juno-
|
|
939
|
-
".juno-
|
|
940
|
-
".juno-
|
|
1007
|
+
"juno-code.config.json",
|
|
1008
|
+
"juno-code.config.js",
|
|
1009
|
+
".juno-coderc.json",
|
|
1010
|
+
".juno-coderc.js",
|
|
941
1011
|
"package.json"
|
|
942
|
-
// Will look for '
|
|
1012
|
+
// Will look for 'junoCode' field
|
|
943
1013
|
];
|
|
944
1014
|
PROJECT_CONFIG_FILE = ".juno_task/config.json";
|
|
945
1015
|
ConfigLoader = class {
|
|
@@ -5924,8 +5994,8 @@ var init_concurrent_feedback_collector = __esm({
|
|
|
5924
5994
|
// Current feedback mode state
|
|
5925
5995
|
constructor(options = {}) {
|
|
5926
5996
|
this.options = {
|
|
5927
|
-
command: options.command || "juno-
|
|
5928
|
-
commandArgs: options.commandArgs || ["juno-
|
|
5997
|
+
command: options.command || "juno-code",
|
|
5998
|
+
commandArgs: options.commandArgs || ["juno-code", "feedback"],
|
|
5929
5999
|
verbose: options.verbose || false,
|
|
5930
6000
|
showHeader: options.showHeader !== void 0 ? options.showHeader : true,
|
|
5931
6001
|
progressInterval: options.progressInterval || 0,
|
|
@@ -6309,23 +6379,23 @@ var init_framework = __esm({
|
|
|
6309
6379
|
flags: "-v, --verbose",
|
|
6310
6380
|
description: "Enable verbose output with detailed progress",
|
|
6311
6381
|
defaultValue: false,
|
|
6312
|
-
env: "
|
|
6382
|
+
env: "JUNO_CODE_VERBOSE"
|
|
6313
6383
|
},
|
|
6314
6384
|
{
|
|
6315
6385
|
flags: "-q, --quiet",
|
|
6316
6386
|
description: "Disable rich formatting, use plain text",
|
|
6317
6387
|
defaultValue: false,
|
|
6318
|
-
env: "
|
|
6388
|
+
env: "JUNO_CODE_QUIET"
|
|
6319
6389
|
},
|
|
6320
6390
|
{
|
|
6321
6391
|
flags: "-c, --config <path>",
|
|
6322
6392
|
description: "Configuration file path (.json, .toml, pyproject.toml)",
|
|
6323
|
-
env: "
|
|
6393
|
+
env: "JUNO_CODE_CONFIG"
|
|
6324
6394
|
},
|
|
6325
6395
|
{
|
|
6326
6396
|
flags: "--log-file <path>",
|
|
6327
6397
|
description: "Log file path (auto-generated if not specified)",
|
|
6328
|
-
env: "
|
|
6398
|
+
env: "JUNO_CODE_LOG_FILE"
|
|
6329
6399
|
},
|
|
6330
6400
|
{
|
|
6331
6401
|
flags: "--no-color",
|
|
@@ -6336,24 +6406,24 @@ var init_framework = __esm({
|
|
|
6336
6406
|
description: "Log level for output (error, warn, info, debug, trace)",
|
|
6337
6407
|
defaultValue: "info",
|
|
6338
6408
|
choices: ["error", "warn", "info", "debug", "trace"],
|
|
6339
|
-
env: "
|
|
6409
|
+
env: "JUNO_CODE_LOG_LEVEL"
|
|
6340
6410
|
},
|
|
6341
6411
|
{
|
|
6342
6412
|
flags: "-s, --subagent <type>",
|
|
6343
6413
|
description: "Subagent to use",
|
|
6344
|
-
env: "
|
|
6414
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
6345
6415
|
},
|
|
6346
6416
|
{
|
|
6347
6417
|
flags: "--max-iterations <number>",
|
|
6348
6418
|
description: "Maximum iterations (-1 for unlimited)",
|
|
6349
6419
|
defaultValue: void 0,
|
|
6350
|
-
env: "
|
|
6420
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
6351
6421
|
},
|
|
6352
6422
|
{
|
|
6353
6423
|
flags: "--mcp-timeout <number>",
|
|
6354
6424
|
description: "MCP server timeout in milliseconds",
|
|
6355
6425
|
defaultValue: void 0,
|
|
6356
|
-
env: "
|
|
6426
|
+
env: "JUNO_CODE_MCP_TIMEOUT"
|
|
6357
6427
|
}
|
|
6358
6428
|
];
|
|
6359
6429
|
for (const option of this.globalOptions) {
|
|
@@ -6600,7 +6670,7 @@ ${helpText}
|
|
|
6600
6670
|
}
|
|
6601
6671
|
if (error.showHelp) {
|
|
6602
6672
|
console.error(chalk12.gray(`
|
|
6603
|
-
Use 'juno-
|
|
6673
|
+
Use 'juno-code ${commandName} --help' for usage information`));
|
|
6604
6674
|
}
|
|
6605
6675
|
const exitCode = Object.values(EXIT_CODES).includes(error.code) ? error.code : EXIT_CODES.UNEXPECTED_ERROR;
|
|
6606
6676
|
process.exit(exitCode);
|
|
@@ -6645,7 +6715,7 @@ ${helpText}
|
|
|
6645
6715
|
try {
|
|
6646
6716
|
await this.program.parseAsync(argv2);
|
|
6647
6717
|
} catch (error) {
|
|
6648
|
-
await this.handleCommandError(error, "juno-
|
|
6718
|
+
await this.handleCommandError(error, "juno-code", {});
|
|
6649
6719
|
}
|
|
6650
6720
|
}
|
|
6651
6721
|
/**
|
|
@@ -11151,7 +11221,7 @@ async function mainCommandHandler(args, options, command) {
|
|
|
11151
11221
|
`Invalid subagent: ${options.subagent}`,
|
|
11152
11222
|
[
|
|
11153
11223
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
11154
|
-
'Example: juno-
|
|
11224
|
+
'Example: juno-code claude "your prompt"',
|
|
11155
11225
|
"Use --help for more information"
|
|
11156
11226
|
]
|
|
11157
11227
|
);
|
|
@@ -11243,34 +11313,34 @@ function createMainCommand() {
|
|
|
11243
11313
|
description: "Subagent to use",
|
|
11244
11314
|
required: true,
|
|
11245
11315
|
choices: ["claude", "cursor", "codex", "gemini", "claude-code", "claude_code", "gemini-cli", "cursor-agent"],
|
|
11246
|
-
env: "
|
|
11316
|
+
env: "JUNO_CODE_SUBAGENT"
|
|
11247
11317
|
}),
|
|
11248
11318
|
createOption({
|
|
11249
11319
|
flags: "-p, --prompt <text|file>",
|
|
11250
11320
|
description: "Prompt input (file path or inline text)",
|
|
11251
|
-
env: "
|
|
11321
|
+
env: "JUNO_CODE_PROMPT"
|
|
11252
11322
|
}),
|
|
11253
11323
|
createOption({
|
|
11254
11324
|
flags: "-w, --cwd <path>",
|
|
11255
11325
|
description: "Working directory",
|
|
11256
11326
|
defaultValue: process.cwd(),
|
|
11257
|
-
env: "
|
|
11327
|
+
env: "JUNO_CODE_CWD"
|
|
11258
11328
|
}),
|
|
11259
11329
|
createOption({
|
|
11260
11330
|
flags: "-i, --max-iterations <number>",
|
|
11261
11331
|
description: "Maximum iterations (-1 for unlimited)",
|
|
11262
|
-
env: "
|
|
11332
|
+
env: "JUNO_CODE_MAX_ITERATIONS"
|
|
11263
11333
|
}),
|
|
11264
11334
|
createOption({
|
|
11265
11335
|
flags: "-m, --model <name>",
|
|
11266
11336
|
description: "Model to use (optional, subagent-specific)",
|
|
11267
|
-
env: "
|
|
11337
|
+
env: "JUNO_CODE_MODEL"
|
|
11268
11338
|
}),
|
|
11269
11339
|
createOption({
|
|
11270
11340
|
flags: "-I, --interactive",
|
|
11271
11341
|
description: "Interactive mode for typing/pasting prompts",
|
|
11272
11342
|
defaultValue: false,
|
|
11273
|
-
env: "
|
|
11343
|
+
env: "JUNO_CODE_INTERACTIVE"
|
|
11274
11344
|
}),
|
|
11275
11345
|
createOption({
|
|
11276
11346
|
flags: "--interactive-prompt",
|
|
@@ -11280,19 +11350,19 @@ function createMainCommand() {
|
|
|
11280
11350
|
],
|
|
11281
11351
|
examples: [
|
|
11282
11352
|
{
|
|
11283
|
-
command: 'juno-
|
|
11353
|
+
command: 'juno-code -s claude -p "Create a REST API"',
|
|
11284
11354
|
description: "Execute task with Claude using inline prompt"
|
|
11285
11355
|
},
|
|
11286
11356
|
{
|
|
11287
|
-
command: "juno-
|
|
11357
|
+
command: "juno-code -s cursor -p ./task.md -i 3",
|
|
11288
11358
|
description: "Execute task with Cursor using file prompt, max 3 iterations"
|
|
11289
11359
|
},
|
|
11290
11360
|
{
|
|
11291
|
-
command: "juno-
|
|
11361
|
+
command: "juno-code -s gemini --interactive",
|
|
11292
11362
|
description: "Use interactive mode to enter prompt"
|
|
11293
11363
|
},
|
|
11294
11364
|
{
|
|
11295
|
-
command: "juno-
|
|
11365
|
+
command: "juno-code -s claude --interactive-prompt",
|
|
11296
11366
|
description: "Use enhanced TUI prompt editor"
|
|
11297
11367
|
}
|
|
11298
11368
|
],
|
|
@@ -11332,10 +11402,10 @@ var init_main = __esm({
|
|
|
11332
11402
|
throw new ValidationError(
|
|
11333
11403
|
"Prompt is required for execution",
|
|
11334
11404
|
[
|
|
11335
|
-
'Provide prompt text: juno-
|
|
11336
|
-
"Use file input: juno-
|
|
11337
|
-
"Use interactive mode: juno-
|
|
11338
|
-
"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",
|
|
11339
11409
|
"Create default prompt file: .juno_task/prompt.md"
|
|
11340
11410
|
]
|
|
11341
11411
|
);
|
|
@@ -11560,7 +11630,7 @@ var init_main = __esm({
|
|
|
11560
11630
|
this.enableFeedback = enableFeedback;
|
|
11561
11631
|
if (this.enableFeedback) {
|
|
11562
11632
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
11563
|
-
command: "juno-
|
|
11633
|
+
command: "juno-code",
|
|
11564
11634
|
commandArgs: ["feedback"],
|
|
11565
11635
|
verbose: this.config.verbose,
|
|
11566
11636
|
showHeader: true,
|
|
@@ -12029,6 +12099,7 @@ async function promptInputOnce(question, defaultValue = "") {
|
|
|
12029
12099
|
}
|
|
12030
12100
|
|
|
12031
12101
|
// src/cli/commands/init.ts
|
|
12102
|
+
init_default_hooks();
|
|
12032
12103
|
init_types();
|
|
12033
12104
|
var SimpleInitTUI = class {
|
|
12034
12105
|
context = {};
|
|
@@ -12037,7 +12108,7 @@ var SimpleInitTUI = class {
|
|
|
12037
12108
|
* Simplified gather method implementing the minimal flow
|
|
12038
12109
|
*/
|
|
12039
12110
|
async gather() {
|
|
12040
|
-
console.log(chalk12.blue.bold("\n\u{1F680} Juno
|
|
12111
|
+
console.log(chalk12.blue.bold("\n\u{1F680} Juno Code Project Initialization\n"));
|
|
12041
12112
|
console.log(chalk12.yellow("\u{1F4C1} Step 1: Project Directory"));
|
|
12042
12113
|
const targetDirectory = await this.promptForDirectory();
|
|
12043
12114
|
console.log(chalk12.yellow("\n\u{1F4DD} Step 2: Main Task"));
|
|
@@ -12320,6 +12391,65 @@ Items will be added here as we discover what needs to be implemented.
|
|
|
12320
12391
|
- Task defined: ${variables.TASK}
|
|
12321
12392
|
`;
|
|
12322
12393
|
await fs.writeFile(path.join(junoTaskDir, "plan.md"), planContent);
|
|
12394
|
+
const implementContent = `# Implementation Guide
|
|
12395
|
+
|
|
12396
|
+
## Current Focus
|
|
12397
|
+
|
|
12398
|
+
**Main Task**: ${variables.TASK}
|
|
12399
|
+
|
|
12400
|
+
## Implementation Steps
|
|
12401
|
+
|
|
12402
|
+
### Step 1: Analysis and Planning
|
|
12403
|
+
- [ ] Review existing codebase structure
|
|
12404
|
+
- [ ] Identify key components and dependencies
|
|
12405
|
+
- [ ] Document current state in @.juno_task/plan.md
|
|
12406
|
+
- [ ] Create detailed specifications in @.juno_task/specs/
|
|
12407
|
+
|
|
12408
|
+
### Step 2: Design and Architecture
|
|
12409
|
+
- [ ] Define system architecture
|
|
12410
|
+
- [ ] Design data models and APIs
|
|
12411
|
+
- [ ] Plan integration points
|
|
12412
|
+
- [ ] Document architecture decisions
|
|
12413
|
+
|
|
12414
|
+
### Step 3: Implementation
|
|
12415
|
+
- [ ] Implement core functionality
|
|
12416
|
+
- [ ] Write comprehensive tests
|
|
12417
|
+
- [ ] Ensure code quality and documentation
|
|
12418
|
+
- [ ] Follow coding standards and best practices
|
|
12419
|
+
|
|
12420
|
+
### Step 4: Testing and Validation
|
|
12421
|
+
- [ ] Unit tests with >90% coverage
|
|
12422
|
+
- [ ] Integration tests
|
|
12423
|
+
- [ ] Performance testing
|
|
12424
|
+
- [ ] Security review
|
|
12425
|
+
|
|
12426
|
+
### Step 5: Documentation and Deployment
|
|
12427
|
+
- [ ] Update all documentation
|
|
12428
|
+
- [ ] Create deployment guides
|
|
12429
|
+
- [ ] Version control and tagging
|
|
12430
|
+
- [ ] Final review and sign-off
|
|
12431
|
+
|
|
12432
|
+
## Current Tasks
|
|
12433
|
+
|
|
12434
|
+
Update this section with specific tasks for the current iteration:
|
|
12435
|
+
|
|
12436
|
+
1. **Task 1**: Study existing codebase and create specifications
|
|
12437
|
+
- Status: Not Started
|
|
12438
|
+
- Owner: ${variables.EDITOR}
|
|
12439
|
+
- Priority: High
|
|
12440
|
+
|
|
12441
|
+
## Notes and Considerations
|
|
12442
|
+
|
|
12443
|
+
- Keep this file updated as implementation progresses
|
|
12444
|
+
- Document any blockers or issues encountered
|
|
12445
|
+
- Reference related specs and plan items
|
|
12446
|
+
- Track progress and update status regularly
|
|
12447
|
+
|
|
12448
|
+
---
|
|
12449
|
+
*Last updated: ${variables.CURRENT_DATE}*
|
|
12450
|
+
*Primary subagent: ${variables.EDITOR}*
|
|
12451
|
+
`;
|
|
12452
|
+
await fs.writeFile(path.join(junoTaskDir, "implement.md"), implementContent);
|
|
12323
12453
|
const specsDir = path.join(junoTaskDir, "specs");
|
|
12324
12454
|
await fs.ensureDir(specsDir);
|
|
12325
12455
|
const specsReadmeContent = `# Project Specifications
|
|
@@ -12390,7 +12520,7 @@ This directory contains detailed specifications for the project components.
|
|
|
12390
12520
|
|
|
12391
12521
|
## System Overview
|
|
12392
12522
|
|
|
12393
|
-
This project uses AI-assisted development with juno-
|
|
12523
|
+
This project uses AI-assisted development with juno-code to achieve: ${variables.TASK}
|
|
12394
12524
|
|
|
12395
12525
|
## Architectural Decisions
|
|
12396
12526
|
|
|
@@ -12413,7 +12543,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12413
12543
|
|
|
12414
12544
|
- **Language**: TypeScript
|
|
12415
12545
|
- **Runtime**: Node.js
|
|
12416
|
-
- **CLI**: juno-
|
|
12546
|
+
- **CLI**: juno-code with AI subagent integration
|
|
12417
12547
|
- **Version Control**: Git
|
|
12418
12548
|
- **Documentation**: Markdown-based
|
|
12419
12549
|
|
|
@@ -12472,7 +12602,7 @@ This project uses AI-assisted development with juno-task to achieve: ${variables
|
|
|
12472
12602
|
|
|
12473
12603
|
## Project Overview
|
|
12474
12604
|
|
|
12475
|
-
This project was initialized on ${variables.CURRENT_DATE} using juno-
|
|
12605
|
+
This project was initialized on ${variables.CURRENT_DATE} using juno-code.
|
|
12476
12606
|
|
|
12477
12607
|
**Main Task**: ${variables.TASK}
|
|
12478
12608
|
**Preferred Subagent**: ${variables.EDITOR}
|
|
@@ -12486,9 +12616,9 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12486
12616
|
- Use \`npm run test:binary\` for CLI testing
|
|
12487
12617
|
|
|
12488
12618
|
### Key Commands
|
|
12489
|
-
- \`juno-
|
|
12490
|
-
- \`juno-
|
|
12491
|
-
- \`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
|
|
12492
12622
|
|
|
12493
12623
|
## Project Structure
|
|
12494
12624
|
|
|
@@ -12498,6 +12628,7 @@ This project was initialized on ${variables.CURRENT_DATE} using juno-task.
|
|
|
12498
12628
|
\u2502 \u251C\u2500\u2500 prompt.md # Main task definition with AI instructions
|
|
12499
12629
|
\u2502 \u251C\u2500\u2500 init.md # Initial task breakdown and constraints
|
|
12500
12630
|
\u2502 \u251C\u2500\u2500 plan.md # Dynamic planning and priority tracking
|
|
12631
|
+
\u2502 \u251C\u2500\u2500 implement.md # Implementation guide and current tasks
|
|
12501
12632
|
\u2502 \u251C\u2500\u2500 USER_FEEDBACK.md # User feedback and issue tracking
|
|
12502
12633
|
\u2502 \u251C\u2500\u2500 scripts/ # Utility scripts for project maintenance
|
|
12503
12634
|
\u2502 \u2502 \u2514\u2500\u2500 clean_logs_folder.sh # Archive old log files
|
|
@@ -12609,27 +12740,27 @@ ${variables.DESCRIPTION}
|
|
|
12609
12740
|
|
|
12610
12741
|
## Overview
|
|
12611
12742
|
|
|
12612
|
-
This project uses juno-
|
|
12743
|
+
This project uses juno-code for AI-powered development with ${variables.EDITOR} as the primary AI subagent.
|
|
12613
12744
|
|
|
12614
12745
|
## Getting Started
|
|
12615
12746
|
|
|
12616
12747
|
### Prerequisites
|
|
12617
12748
|
|
|
12618
12749
|
- Node.js (v18 or higher)
|
|
12619
|
-
- juno-
|
|
12750
|
+
- juno-code CLI installed
|
|
12620
12751
|
- Git for version control
|
|
12621
12752
|
|
|
12622
12753
|
### Quick Start
|
|
12623
12754
|
|
|
12624
12755
|
\`\`\`bash
|
|
12625
12756
|
# Start task execution with production-ready AI instructions
|
|
12626
|
-
juno-
|
|
12757
|
+
juno-code start
|
|
12627
12758
|
|
|
12628
12759
|
# Or use main command with preferred subagent
|
|
12629
|
-
juno-
|
|
12760
|
+
juno-code -s ${variables.EDITOR}
|
|
12630
12761
|
|
|
12631
12762
|
# Provide feedback on the development process
|
|
12632
|
-
juno-
|
|
12763
|
+
juno-code feedback
|
|
12633
12764
|
\`\`\`
|
|
12634
12765
|
|
|
12635
12766
|
## Project Structure
|
|
@@ -12640,8 +12771,10 @@ juno-task feedback
|
|
|
12640
12771
|
\u2502 \u251C\u2500\u2500 prompt.md # Production-ready AI instructions
|
|
12641
12772
|
\u2502 \u251C\u2500\u2500 init.md # Task breakdown and constraints
|
|
12642
12773
|
\u2502 \u251C\u2500\u2500 plan.md # Dynamic planning and tracking
|
|
12774
|
+
\u2502 \u251C\u2500\u2500 implement.md # Implementation guide and current tasks
|
|
12643
12775
|
\u2502 \u251C\u2500\u2500 USER_FEEDBACK.md # User feedback and issue tracking
|
|
12644
12776
|
\u2502 \u251C\u2500\u2500 scripts/ # Utility scripts for project maintenance
|
|
12777
|
+
\u2502 \u2502 \u251C\u2500\u2500 install_requirements.sh # Install Python dependencies
|
|
12645
12778
|
\u2502 \u2502 \u2514\u2500\u2500 clean_logs_folder.sh # Archive old log files (3+ days)
|
|
12646
12779
|
\u2502 \u2514\u2500\u2500 specs/ # Comprehensive specifications
|
|
12647
12780
|
\u2502 \u251C\u2500\u2500 README.md # Specs overview and guide
|
|
@@ -12688,12 +12821,13 @@ ${variables.GIT_URL}` : ""}
|
|
|
12688
12821
|
|
|
12689
12822
|
1. **Review Task**: Check \`.juno_task/init.md\` for main task
|
|
12690
12823
|
2. **Check Plan**: Review \`.juno_task/plan.md\` for current priorities
|
|
12691
|
-
3. **
|
|
12692
|
-
4. **
|
|
12824
|
+
3. **Track Implementation**: Follow \`.juno_task/implement.md\` for current implementation steps
|
|
12825
|
+
4. **Provide Feedback**: Use \`juno-code feedback\` for issues or suggestions
|
|
12826
|
+
5. **Monitor Progress**: Track AI development through \`.juno_task/prompt.md\`
|
|
12693
12827
|
|
|
12694
12828
|
---
|
|
12695
12829
|
|
|
12696
|
-
Created with juno-
|
|
12830
|
+
Created with juno-code on ${variables.CURRENT_DATE}
|
|
12697
12831
|
${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
12698
12832
|
`;
|
|
12699
12833
|
await fs.writeFile(path.join(targetDirectory, "README.md"), readmeContent);
|
|
@@ -12743,7 +12877,9 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12743
12877
|
headlessMode: false,
|
|
12744
12878
|
// Paths
|
|
12745
12879
|
workingDirectory: targetDirectory,
|
|
12746
|
-
sessionDirectory: path.join(targetDirectory, ".juno_task")
|
|
12880
|
+
sessionDirectory: path.join(targetDirectory, ".juno_task"),
|
|
12881
|
+
// Hooks configuration with default file size monitoring
|
|
12882
|
+
hooks: getDefaultHooks()
|
|
12747
12883
|
};
|
|
12748
12884
|
const configPath = path.join(junoTaskDir, "config.json");
|
|
12749
12885
|
await fs.writeFile(configPath, JSON.stringify(configContent, null, 2));
|
|
@@ -12917,11 +13053,11 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12917
13053
|
printNextSteps(targetDirectory, editor) {
|
|
12918
13054
|
console.log(chalk12.blue("\n\u{1F3AF} Next Steps:"));
|
|
12919
13055
|
console.log(chalk12.white(` cd ${targetDirectory}`));
|
|
12920
|
-
console.log(chalk12.white(" juno-
|
|
12921
|
-
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}`));
|
|
12922
13058
|
console.log(chalk12.gray("\n\u{1F4A1} Tips:"));
|
|
12923
13059
|
console.log(chalk12.gray(" - Edit .juno_task/prompt.md to modify your main task"));
|
|
12924
|
-
console.log(chalk12.gray(' - Use "juno-
|
|
13060
|
+
console.log(chalk12.gray(' - Use "juno-code --help" to see all available commands'));
|
|
12925
13061
|
console.log(chalk12.gray(" - Run .juno_task/scripts/clean_logs_folder.sh to archive old logs"));
|
|
12926
13062
|
}
|
|
12927
13063
|
/**
|
|
@@ -12976,10 +13112,10 @@ ${variables.EDITOR ? `using ${variables.EDITOR} as primary AI subagent` : ""}
|
|
|
12976
13112
|
execSync("git add .", { cwd: targetDirectory, stdio: "ignore" });
|
|
12977
13113
|
const commitMessage = `Initial commit: ${this.context.task || "Project initialization"}
|
|
12978
13114
|
|
|
12979
|
-
\u{1F916} Generated with juno-
|
|
13115
|
+
\u{1F916} Generated with juno-code using ${this.context.subagent} subagent
|
|
12980
13116
|
\u{1F3AF} Main Task: ${this.context.task}
|
|
12981
13117
|
|
|
12982
|
-
\u{1F680} Generated with [juno-
|
|
13118
|
+
\u{1F680} Generated with [juno-code](https://github.com/owner/juno-code-ts)
|
|
12983
13119
|
|
|
12984
13120
|
Co-Authored-By: Claude <noreply@anthropic.com>`;
|
|
12985
13121
|
execSync(`git commit -m "${commitMessage}"`, {
|
|
@@ -13024,10 +13160,15 @@ var SimpleHeadlessInit = class {
|
|
|
13024
13160
|
createSimpleVariables(targetDirectory, task, editor, gitUrl) {
|
|
13025
13161
|
const projectName = path.basename(targetDirectory);
|
|
13026
13162
|
const currentDate = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
13163
|
+
let AGENTMD = "AGENTS.md";
|
|
13164
|
+
if (editor == "claude") {
|
|
13165
|
+
AGENTMD = "CLAUDE.md";
|
|
13166
|
+
}
|
|
13027
13167
|
return {
|
|
13028
13168
|
PROJECT_NAME: projectName,
|
|
13029
13169
|
TASK: task,
|
|
13030
13170
|
EDITOR: editor,
|
|
13171
|
+
AGENTMD,
|
|
13031
13172
|
CURRENT_DATE: currentDate,
|
|
13032
13173
|
VERSION: "1.0.0",
|
|
13033
13174
|
AUTHOR: "Development Team",
|
|
@@ -13040,7 +13181,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13040
13181
|
try {
|
|
13041
13182
|
const globalOptions = command.parent?.opts() || {};
|
|
13042
13183
|
const allOptions2 = { ...options, ...globalOptions };
|
|
13043
|
-
console.log(chalk12.blue.bold("\u{1F3AF} Juno
|
|
13184
|
+
console.log(chalk12.blue.bold("\u{1F3AF} Juno Code - Simplified Initialization"));
|
|
13044
13185
|
let context;
|
|
13045
13186
|
const shouldUseInteractive = options.interactive || !options.task && !process.env.CI || process.env.FORCE_INTERACTIVE === "1";
|
|
13046
13187
|
if (shouldUseInteractive) {
|
|
@@ -13081,7 +13222,7 @@ async function initCommandHandler(args, options, command) {
|
|
|
13081
13222
|
}
|
|
13082
13223
|
}
|
|
13083
13224
|
function configureInitCommand(program) {
|
|
13084
|
-
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) => {
|
|
13085
13226
|
const initOptions = {
|
|
13086
13227
|
directory,
|
|
13087
13228
|
force: options.force,
|
|
@@ -13099,9 +13240,9 @@ function configureInitCommand(program) {
|
|
|
13099
13240
|
await initCommandHandler([], initOptions, command);
|
|
13100
13241
|
}).addHelpText("after", `
|
|
13101
13242
|
Examples:
|
|
13102
|
-
$ juno-
|
|
13103
|
-
$ juno-
|
|
13104
|
-
$ 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
|
|
13105
13246
|
|
|
13106
13247
|
Simplified Interactive Flow:
|
|
13107
13248
|
1. Project Root \u2192 Specify target directory
|
|
@@ -14874,7 +15015,7 @@ var ProjectContextLoader = class {
|
|
|
14874
15015
|
const junoTaskDir = path.join(this.directory, ".juno_task");
|
|
14875
15016
|
if (!await fs.pathExists(junoTaskDir)) {
|
|
14876
15017
|
throw new FileSystemError(
|
|
14877
|
-
'No .juno_task directory found. Run "juno-
|
|
15018
|
+
'No .juno_task directory found. Run "juno-code init" first.',
|
|
14878
15019
|
junoTaskDir
|
|
14879
15020
|
);
|
|
14880
15021
|
}
|
|
@@ -14943,7 +15084,7 @@ var ExecutionCoordinator = class {
|
|
|
14943
15084
|
this.sessionManager = await createSessionManager(this.config);
|
|
14944
15085
|
if (this.enableFeedback) {
|
|
14945
15086
|
this.feedbackCollector = new ConcurrentFeedbackCollector({
|
|
14946
|
-
command: "juno-
|
|
15087
|
+
command: "juno-code",
|
|
14947
15088
|
commandArgs: ["feedback"],
|
|
14948
15089
|
verbose: this.config.verbose,
|
|
14949
15090
|
showHeader: true,
|
|
@@ -15091,7 +15232,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15091
15232
|
try {
|
|
15092
15233
|
const globalOptions = command.parent?.opts() || {};
|
|
15093
15234
|
const allOptions2 = { ...globalOptions, ...options };
|
|
15094
|
-
writeTerminalProgress(chalk12.blue.bold("\u{1F3AF} Juno
|
|
15235
|
+
writeTerminalProgress(chalk12.blue.bold("\u{1F3AF} Juno Code - Start Execution") + "\n");
|
|
15095
15236
|
const logLevel = allOptions2.logLevel ? LogLevel[allOptions2.logLevel.toUpperCase()] : 2 /* INFO */;
|
|
15096
15237
|
cliLogger.startTimer("start_command_total");
|
|
15097
15238
|
cliLogger.info("Starting execution command", { options: allOptions2, directory: allOptions2.directory || process.cwd() });
|
|
@@ -15141,7 +15282,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15141
15282
|
`Invalid subagent: ${allOptions2.subagent}`,
|
|
15142
15283
|
[
|
|
15143
15284
|
`Use one of: ${validSubagents.join(", ")}`,
|
|
15144
|
-
"Run `juno-
|
|
15285
|
+
"Run `juno-code help start` for examples"
|
|
15145
15286
|
]
|
|
15146
15287
|
);
|
|
15147
15288
|
}
|
|
@@ -15183,7 +15324,7 @@ async function startCommandHandler(args, options, command) {
|
|
|
15183
15324
|
if (sessionId) {
|
|
15184
15325
|
writeTerminalProgress(chalk12.blue(`
|
|
15185
15326
|
\u{1F4C1} Session ID: ${sessionId}`) + "\n");
|
|
15186
|
-
writeTerminalProgress(chalk12.gray(' Use "juno-
|
|
15327
|
+
writeTerminalProgress(chalk12.gray(' Use "juno-code session info ' + sessionId + '" for detailed information') + "\n");
|
|
15187
15328
|
sessionLogger.info("Session completed", {
|
|
15188
15329
|
sessionId,
|
|
15189
15330
|
status: result.status,
|
|
@@ -15250,20 +15391,20 @@ function configureStartCommand(program) {
|
|
|
15250
15391
|
await startCommandHandler([], options, command);
|
|
15251
15392
|
}).addHelpText("after", `
|
|
15252
15393
|
Examples:
|
|
15253
|
-
$ juno-
|
|
15254
|
-
$ juno-
|
|
15255
|
-
$ juno-
|
|
15256
|
-
$ juno-
|
|
15257
|
-
$ juno-
|
|
15258
|
-
$ juno-
|
|
15259
|
-
$ juno-
|
|
15260
|
-
$ juno-
|
|
15261
|
-
$ juno-
|
|
15262
|
-
$ juno-
|
|
15263
|
-
$ juno-
|
|
15264
|
-
$ juno-
|
|
15265
|
-
$ juno-
|
|
15266
|
-
$ 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
|
|
15267
15408
|
|
|
15268
15409
|
Feedback Collection:
|
|
15269
15410
|
--enable-feedback Enable concurrent feedback collection
|
|
@@ -15279,13 +15420,13 @@ Performance Options:
|
|
|
15279
15420
|
--metrics-file <path> Custom metrics file path
|
|
15280
15421
|
|
|
15281
15422
|
Environment Variables:
|
|
15282
|
-
|
|
15283
|
-
|
|
15284
|
-
|
|
15285
|
-
|
|
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)
|
|
15286
15427
|
|
|
15287
15428
|
Notes:
|
|
15288
|
-
- Requires .juno_task/init.md file (created by 'juno-
|
|
15429
|
+
- Requires .juno_task/init.md file (created by 'juno-code init')
|
|
15289
15430
|
- Creates a new session for tracking execution
|
|
15290
15431
|
- Progress is displayed in real-time
|
|
15291
15432
|
- Performance metrics are collected automatically
|
|
@@ -16351,18 +16492,18 @@ function configureTestCommand(program) {
|
|
|
16351
16492
|
await testCommandHandler(target, testOptions, command);
|
|
16352
16493
|
}).addHelpText("after", `
|
|
16353
16494
|
Examples:
|
|
16354
|
-
$ juno-
|
|
16355
|
-
$ juno-
|
|
16356
|
-
$ juno-
|
|
16357
|
-
$ juno-
|
|
16358
|
-
$ juno-
|
|
16359
|
-
$ juno-
|
|
16360
|
-
$ juno-
|
|
16361
|
-
$ juno-
|
|
16362
|
-
$ juno-
|
|
16363
|
-
$ juno-
|
|
16364
|
-
$ juno-
|
|
16365
|
-
$ 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
|
|
16366
16507
|
|
|
16367
16508
|
Test Types:
|
|
16368
16509
|
unit Unit tests for individual functions/classes
|
|
@@ -16934,7 +17075,7 @@ function getFeedbackFile(options) {
|
|
|
16934
17075
|
return options.file || path.join(process.cwd(), ".juno_task", "USER_FEEDBACK.md");
|
|
16935
17076
|
}
|
|
16936
17077
|
function configureFeedbackCommand(program) {
|
|
16937
|
-
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) => {
|
|
16938
17079
|
const feedbackOptions = {
|
|
16939
17080
|
file: options.file,
|
|
16940
17081
|
interactive: options.interactive,
|
|
@@ -16955,18 +17096,18 @@ function configureFeedbackCommand(program) {
|
|
|
16955
17096
|
await feedbackCommandHandler(args, feedbackOptions);
|
|
16956
17097
|
}).addHelpText("after", `
|
|
16957
17098
|
Examples:
|
|
16958
|
-
$ juno-
|
|
16959
|
-
$ juno-
|
|
16960
|
-
$ juno-
|
|
16961
|
-
$ juno-
|
|
16962
|
-
$ juno-
|
|
16963
|
-
$ juno-
|
|
16964
|
-
$ juno-
|
|
16965
|
-
$ juno-
|
|
16966
|
-
$ juno-
|
|
16967
|
-
$ juno-
|
|
16968
|
-
$ juno-
|
|
16969
|
-
$ 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
|
|
16970
17111
|
|
|
16971
17112
|
Enhanced Features:
|
|
16972
17113
|
1. Issue Description \u2192 Structured feedback with optional test criteria
|
|
@@ -17008,7 +17149,7 @@ async function handleCompactCommand(subArgs, options) {
|
|
|
17008
17149
|
if (filesToCompact.length === 0) {
|
|
17009
17150
|
console.log(chalk12.yellow("\u{1F4C4} No config files found to compact"));
|
|
17010
17151
|
console.log(chalk12.gray(" Looking for: CLAUDE.md, AGENTS.md"));
|
|
17011
|
-
console.log(chalk12.gray(" Usage: juno-
|
|
17152
|
+
console.log(chalk12.gray(" Usage: juno-code feedback compact [file1] [file2]"));
|
|
17012
17153
|
return;
|
|
17013
17154
|
}
|
|
17014
17155
|
console.log(chalk12.blue.bold("\n\u{1F5DC}\uFE0F File Compaction Process\n"));
|
|
@@ -17115,7 +17256,7 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17115
17256
|
if (!issueText.trim()) {
|
|
17116
17257
|
throw new ValidationError(
|
|
17117
17258
|
"Issue description is required when using --issue/-is/--detail/--description or --test/-tc flags",
|
|
17118
|
-
['Use: juno-
|
|
17259
|
+
['Use: juno-code feedback -is "Issue description" -t "Test criteria" or -tc "Test criteria"']
|
|
17119
17260
|
);
|
|
17120
17261
|
}
|
|
17121
17262
|
const feedbackFile = getFeedbackFile(options);
|
|
@@ -17165,10 +17306,10 @@ async function feedbackCommandHandler(args, options, command) {
|
|
|
17165
17306
|
} else {
|
|
17166
17307
|
console.log(chalk12.yellow("Use --interactive mode, --issue/-is/--detail/--description flag, or provide feedback text"));
|
|
17167
17308
|
console.log(chalk12.gray("Examples:"));
|
|
17168
|
-
console.log(chalk12.gray(' juno-
|
|
17169
|
-
console.log(chalk12.gray(' juno-
|
|
17170
|
-
console.log(chalk12.gray(' juno-
|
|
17171
|
-
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"'));
|
|
17172
17313
|
}
|
|
17173
17314
|
break;
|
|
17174
17315
|
}
|
|
@@ -17426,14 +17567,14 @@ async function handleSessionInfo(args, options, sessionManager) {
|
|
|
17426
17567
|
const sessionId = args[0];
|
|
17427
17568
|
if (!sessionId) {
|
|
17428
17569
|
console.log(chalk12.red("Session ID is required"));
|
|
17429
|
-
console.log(chalk12.gray("Usage: juno-
|
|
17430
|
-
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'));
|
|
17431
17572
|
return;
|
|
17432
17573
|
}
|
|
17433
17574
|
const session = await sessionManager.getSession(sessionId);
|
|
17434
17575
|
if (!session) {
|
|
17435
17576
|
console.log(chalk12.red(`Session not found: ${sessionId}`));
|
|
17436
|
-
console.log(chalk12.gray('Use "juno-
|
|
17577
|
+
console.log(chalk12.gray('Use "juno-code session list" to see available sessions'));
|
|
17437
17578
|
return;
|
|
17438
17579
|
}
|
|
17439
17580
|
const formatter = new SessionDisplayFormatter(options.verbose);
|
|
@@ -17443,7 +17584,7 @@ async function handleSessionRemove(args, options, sessionManager) {
|
|
|
17443
17584
|
const sessionIds = args;
|
|
17444
17585
|
if (sessionIds.length === 0) {
|
|
17445
17586
|
console.log(chalk12.red("At least one session ID is required"));
|
|
17446
|
-
console.log(chalk12.gray("Usage: juno-
|
|
17587
|
+
console.log(chalk12.gray("Usage: juno-code session remove <session-id> [session-id...]"));
|
|
17447
17588
|
process.exit(1);
|
|
17448
17589
|
}
|
|
17449
17590
|
let successCount = 0;
|
|
@@ -17572,15 +17713,15 @@ Subcommands:
|
|
|
17572
17713
|
clean, cleanup Clean up old/empty sessions
|
|
17573
17714
|
|
|
17574
17715
|
Examples:
|
|
17575
|
-
$ juno-
|
|
17576
|
-
$ juno-
|
|
17577
|
-
$ juno-
|
|
17578
|
-
$ juno-
|
|
17579
|
-
$ juno-
|
|
17580
|
-
$ juno-
|
|
17581
|
-
$ juno-
|
|
17582
|
-
$ juno-
|
|
17583
|
-
$ 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
|
|
17584
17725
|
|
|
17585
17726
|
Environment Variables:
|
|
17586
17727
|
JUNO_TASK_SESSION_DIR Session storage directory
|
|
@@ -17877,7 +18018,7 @@ var GitManager = class {
|
|
|
17877
18018
|
/**
|
|
17878
18019
|
* Create initial commit
|
|
17879
18020
|
*/
|
|
17880
|
-
async createInitialCommit(message = "Initial commit - juno-
|
|
18021
|
+
async createInitialCommit(message = "Initial commit - juno-code project setup") {
|
|
17881
18022
|
try {
|
|
17882
18023
|
const { execa: execa2 } = await import('execa');
|
|
17883
18024
|
await execa2("git", ["add", "."], { cwd: this.workingDirectory });
|
|
@@ -17962,7 +18103,7 @@ GIT_URL: ${gitUrl}
|
|
|
17962
18103
|
}
|
|
17963
18104
|
await fs.writeFile(configPath, content, "utf-8");
|
|
17964
18105
|
} catch (error) {
|
|
17965
|
-
console.warn(`Warning: Failed to update juno-
|
|
18106
|
+
console.warn(`Warning: Failed to update juno-code configuration: ${error}`);
|
|
17966
18107
|
}
|
|
17967
18108
|
}
|
|
17968
18109
|
/**
|
|
@@ -18257,7 +18398,7 @@ var GitDisplayFormatter = class {
|
|
|
18257
18398
|
console.log(chalk12.gray(` git push -u origin ${info.currentBranch || "main"}`));
|
|
18258
18399
|
}
|
|
18259
18400
|
console.log(" 3. Start working on your project:");
|
|
18260
|
-
console.log(chalk12.gray(" juno-
|
|
18401
|
+
console.log(chalk12.gray(" juno-code start"));
|
|
18261
18402
|
}
|
|
18262
18403
|
formatStatus(status) {
|
|
18263
18404
|
const statusColors = {
|
|
@@ -18372,7 +18513,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18372
18513
|
console.log(` Web URL: ${chalk12.blue(webUrl)}`);
|
|
18373
18514
|
} else {
|
|
18374
18515
|
console.log(chalk12.yellow("\n\u{1F517} No upstream repository configured"));
|
|
18375
|
-
console.log(chalk12.gray(" Use: juno-
|
|
18516
|
+
console.log(chalk12.gray(" Use: juno-code setup-git <url> to configure"));
|
|
18376
18517
|
}
|
|
18377
18518
|
return;
|
|
18378
18519
|
}
|
|
@@ -18380,7 +18521,7 @@ async function setupGitCommandHandler(args, options, command) {
|
|
|
18380
18521
|
const info = await gitManager.getRepositoryInfo();
|
|
18381
18522
|
if (!info.isRepository) {
|
|
18382
18523
|
console.log(chalk12.yellow("\u274C Not a Git repository"));
|
|
18383
|
-
console.log(chalk12.gray(" Initialize with: juno-
|
|
18524
|
+
console.log(chalk12.gray(" Initialize with: juno-code setup-git --init"));
|
|
18384
18525
|
return;
|
|
18385
18526
|
}
|
|
18386
18527
|
const upstreamConfig = await gitManager.getUpstreamConfig();
|
|
@@ -18485,10 +18626,10 @@ function configureSetupGitCommand(program) {
|
|
|
18485
18626
|
await setupGitCommandHandler(args, options);
|
|
18486
18627
|
}).addHelpText("after", `
|
|
18487
18628
|
Examples:
|
|
18488
|
-
$ juno-
|
|
18489
|
-
$ juno-
|
|
18490
|
-
$ juno-
|
|
18491
|
-
$ 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
|
|
18492
18633
|
|
|
18493
18634
|
Git URL Examples:
|
|
18494
18635
|
https://github.com/owner/repo.git # GitHub HTTPS
|
|
@@ -19140,16 +19281,16 @@ function configureLogsCommand(program) {
|
|
|
19140
19281
|
await logsCommandHandler([], options);
|
|
19141
19282
|
}).addHelpText("after", `
|
|
19142
19283
|
Examples:
|
|
19143
|
-
$ juno-
|
|
19144
|
-
$ juno-
|
|
19145
|
-
$ juno-
|
|
19146
|
-
$ juno-
|
|
19147
|
-
$ juno-
|
|
19148
|
-
$ juno-
|
|
19149
|
-
$ juno-
|
|
19150
|
-
$ juno-
|
|
19151
|
-
$ juno-
|
|
19152
|
-
$ 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
|
|
19153
19294
|
|
|
19154
19295
|
Interactive Viewer:
|
|
19155
19296
|
\u2191\u2193 or j/k Navigate entries
|
|
@@ -19830,22 +19971,22 @@ var QUICK_REFERENCE = [
|
|
|
19830
19971
|
{
|
|
19831
19972
|
name: "init",
|
|
19832
19973
|
description: "Initialize new project",
|
|
19833
|
-
usage: "juno-
|
|
19974
|
+
usage: "juno-code init [--interactive]"
|
|
19834
19975
|
},
|
|
19835
19976
|
{
|
|
19836
19977
|
name: "start",
|
|
19837
19978
|
description: "Execute task",
|
|
19838
|
-
usage: "juno-
|
|
19979
|
+
usage: "juno-code start [--max-iterations N]"
|
|
19839
19980
|
},
|
|
19840
19981
|
{
|
|
19841
19982
|
name: "logs",
|
|
19842
19983
|
description: "View application logs",
|
|
19843
|
-
usage: "juno-
|
|
19984
|
+
usage: "juno-code logs [--interactive]"
|
|
19844
19985
|
},
|
|
19845
19986
|
{
|
|
19846
19987
|
name: "session",
|
|
19847
19988
|
description: "Manage execution sessions",
|
|
19848
|
-
usage: "juno-
|
|
19989
|
+
usage: "juno-code session <list|info|remove>"
|
|
19849
19990
|
}
|
|
19850
19991
|
]
|
|
19851
19992
|
},
|
|
@@ -19855,22 +19996,22 @@ var QUICK_REFERENCE = [
|
|
|
19855
19996
|
{
|
|
19856
19997
|
name: "claude",
|
|
19857
19998
|
description: "Execute with Claude subagent",
|
|
19858
|
-
usage: 'juno-
|
|
19999
|
+
usage: 'juno-code claude "task description"'
|
|
19859
20000
|
},
|
|
19860
20001
|
{
|
|
19861
20002
|
name: "cursor",
|
|
19862
20003
|
description: "Execute with Cursor subagent",
|
|
19863
|
-
usage: 'juno-
|
|
20004
|
+
usage: 'juno-code cursor "task description"'
|
|
19864
20005
|
},
|
|
19865
20006
|
{
|
|
19866
20007
|
name: "codex",
|
|
19867
20008
|
description: "Execute with Codex subagent",
|
|
19868
|
-
usage: 'juno-
|
|
20009
|
+
usage: 'juno-code codex "task description"'
|
|
19869
20010
|
},
|
|
19870
20011
|
{
|
|
19871
20012
|
name: "gemini",
|
|
19872
20013
|
description: "Execute with Gemini subagent",
|
|
19873
|
-
usage: 'juno-
|
|
20014
|
+
usage: 'juno-code gemini "task description"'
|
|
19874
20015
|
}
|
|
19875
20016
|
]
|
|
19876
20017
|
},
|
|
@@ -19880,22 +20021,22 @@ var QUICK_REFERENCE = [
|
|
|
19880
20021
|
{
|
|
19881
20022
|
name: "feedback",
|
|
19882
20023
|
description: "Collect user feedback",
|
|
19883
|
-
usage: "juno-
|
|
20024
|
+
usage: "juno-code feedback [--interactive]"
|
|
19884
20025
|
},
|
|
19885
20026
|
{
|
|
19886
20027
|
name: "setup-git",
|
|
19887
20028
|
description: "Initialize Git repository",
|
|
19888
|
-
usage: "juno-
|
|
20029
|
+
usage: "juno-code setup-git <repository-url>"
|
|
19889
20030
|
},
|
|
19890
20031
|
{
|
|
19891
20032
|
name: "completion",
|
|
19892
20033
|
description: "Shell completion setup",
|
|
19893
|
-
usage: "juno-
|
|
20034
|
+
usage: "juno-code completion <install|uninstall>"
|
|
19894
20035
|
},
|
|
19895
20036
|
{
|
|
19896
20037
|
name: "help",
|
|
19897
20038
|
description: "Show help information",
|
|
19898
|
-
usage: "juno-
|
|
20039
|
+
usage: "juno-code help [--interactive]"
|
|
19899
20040
|
}
|
|
19900
20041
|
]
|
|
19901
20042
|
}
|
|
@@ -19914,15 +20055,15 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
19914
20055
|
|
|
19915
20056
|
**Solutions**:
|
|
19916
20057
|
1. Install MCP server (e.g., roundtable-mcp-server)
|
|
19917
|
-
2. Check configuration: \`juno-
|
|
20058
|
+
2. Check configuration: \`juno-code init --interactive\`
|
|
19918
20059
|
3. Verify server path: \`which roundtable-mcp-server\`
|
|
19919
|
-
4. Test connection: \`juno-
|
|
20060
|
+
4. Test connection: \`juno-code start --verbose\`
|
|
19920
20061
|
|
|
19921
20062
|
### \u{1F4C1} File System Issues
|
|
19922
20063
|
|
|
19923
20064
|
**Issue**: "init.md not found"
|
|
19924
20065
|
**Cause**: No project initialized in current directory
|
|
19925
|
-
**Solution**: Run \`juno-
|
|
20066
|
+
**Solution**: Run \`juno-code init\` to create project structure
|
|
19926
20067
|
|
|
19927
20068
|
**Issue**: "Permission denied"
|
|
19928
20069
|
**Cause**: Insufficient file permissions
|
|
@@ -19950,19 +20091,19 @@ var TROUBLESHOOTING_GUIDE = `# Troubleshooting Guide
|
|
|
19950
20091
|
Get detailed debug information:
|
|
19951
20092
|
\`\`\`bash
|
|
19952
20093
|
# Verbose execution with debug logging
|
|
19953
|
-
juno-
|
|
20094
|
+
juno-code start --verbose --log-level debug
|
|
19954
20095
|
|
|
19955
20096
|
# View recent error logs
|
|
19956
|
-
juno-
|
|
20097
|
+
juno-code logs --level error --tail 50
|
|
19957
20098
|
|
|
19958
20099
|
# Export logs for analysis
|
|
19959
|
-
juno-
|
|
20100
|
+
juno-code logs --export debug.json --level debug
|
|
19960
20101
|
\`\`\`
|
|
19961
20102
|
|
|
19962
20103
|
## Getting More Help
|
|
19963
20104
|
|
|
19964
|
-
1. **Interactive Help**: \`juno-
|
|
19965
|
-
2. **View Logs**: \`juno-
|
|
20105
|
+
1. **Interactive Help**: \`juno-code help --interactive\`
|
|
20106
|
+
2. **View Logs**: \`juno-code logs --interactive\`
|
|
19966
20107
|
3. **Check Configuration**: Review .juno_task/config.json
|
|
19967
20108
|
4. **Test MCP Connection**: Use --verbose flag with any command
|
|
19968
20109
|
5. **Report Issues**: Include debug logs when reporting problems
|
|
@@ -19971,16 +20112,20 @@ juno-task logs --export debug.json --level debug
|
|
|
19971
20112
|
|
|
19972
20113
|
Useful for debugging:
|
|
19973
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)
|
|
19974
20120
|
export JUNO_TASK_VERBOSE=true
|
|
19975
20121
|
export JUNO_TASK_LOG_LEVEL=debug
|
|
19976
|
-
export NO_COLOR=true # Disable colors for log analysis
|
|
19977
20122
|
\`\`\`
|
|
19978
20123
|
`;
|
|
19979
20124
|
function displayQuickReference(formatter) {
|
|
19980
20125
|
console.log(formatter.panel(
|
|
19981
|
-
"Welcome to juno-
|
|
20126
|
+
"Welcome to juno-code! This quick reference shows the most commonly used commands.",
|
|
19982
20127
|
{
|
|
19983
|
-
title: "\u{1F680} juno-
|
|
20128
|
+
title: "\u{1F680} juno-code Quick Reference",
|
|
19984
20129
|
border: "rounded",
|
|
19985
20130
|
style: "success",
|
|
19986
20131
|
padding: 1
|
|
@@ -19997,8 +20142,8 @@ function displayQuickReference(formatter) {
|
|
|
19997
20142
|
});
|
|
19998
20143
|
});
|
|
19999
20144
|
console.log(formatter.panel(
|
|
20000
|
-
`Use ${chalk12.cyan("juno-
|
|
20001
|
-
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.`,
|
|
20002
20147
|
{
|
|
20003
20148
|
title: "\u{1F4A1} Next Steps",
|
|
20004
20149
|
border: "rounded",
|
|
@@ -20049,8 +20194,8 @@ function listHelpTopics() {
|
|
|
20049
20194
|
console.log(`${icon} ${chalk12.cyan(topic.id.padEnd(20))} ${topic.title}`);
|
|
20050
20195
|
});
|
|
20051
20196
|
console.log(chalk12.yellow(`
|
|
20052
|
-
Use ${chalk12.cyan("juno-
|
|
20053
|
-
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`));
|
|
20054
20199
|
}
|
|
20055
20200
|
function searchHelpTopics(searchTerm) {
|
|
20056
20201
|
const matchingTopics = [
|
|
@@ -20070,7 +20215,7 @@ function searchHelpTopics(searchTerm) {
|
|
|
20070
20215
|
console.log(chalk12.cyan(`\u2022 ${topicId}`));
|
|
20071
20216
|
});
|
|
20072
20217
|
console.log(chalk12.yellow(`
|
|
20073
|
-
Use ${chalk12.cyan("juno-
|
|
20218
|
+
Use ${chalk12.cyan("juno-code help --topic <id>")} to view details`));
|
|
20074
20219
|
}
|
|
20075
20220
|
async function helpCommandHandler(args, options, command) {
|
|
20076
20221
|
try {
|
|
@@ -20124,12 +20269,12 @@ function configureHelpCommand(program) {
|
|
|
20124
20269
|
await helpCommandHandler([], options);
|
|
20125
20270
|
}).addHelpText("after", `
|
|
20126
20271
|
Examples:
|
|
20127
|
-
$ juno-
|
|
20128
|
-
$ juno-
|
|
20129
|
-
$ juno-
|
|
20130
|
-
$ juno-
|
|
20131
|
-
$ juno-
|
|
20132
|
-
$ 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
|
|
20133
20278
|
|
|
20134
20279
|
Interactive Help Features:
|
|
20135
20280
|
- Browse help by category
|
|
@@ -20158,7 +20303,7 @@ Navigation (Interactive Mode):
|
|
|
20158
20303
|
Notes:
|
|
20159
20304
|
- Interactive help provides the most comprehensive assistance
|
|
20160
20305
|
- Use --verbose with any command for detailed output
|
|
20161
|
-
- Check logs with 'juno-
|
|
20306
|
+
- Check logs with 'juno-code logs' for debugging
|
|
20162
20307
|
- All help content is searchable and cross-referenced
|
|
20163
20308
|
`);
|
|
20164
20309
|
}
|
|
@@ -20174,7 +20319,7 @@ var ProfileDisplayFormatter = class {
|
|
|
20174
20319
|
formatProfileList(profiles, activeProfile) {
|
|
20175
20320
|
if (profiles.length === 0) {
|
|
20176
20321
|
console.log(chalk12.yellow("No configuration profiles found."));
|
|
20177
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20322
|
+
console.log(chalk12.gray('\nUse "juno-code config create <name>" to create your first profile.'));
|
|
20178
20323
|
return;
|
|
20179
20324
|
}
|
|
20180
20325
|
console.log(chalk12.blue.bold(`
|
|
@@ -20268,7 +20413,7 @@ async function listProfiles(options = {}) {
|
|
|
20268
20413
|
const formatter = new ProfileDisplayFormatter(options.verbose);
|
|
20269
20414
|
formatter.formatProfileList(profiles, activeProfile);
|
|
20270
20415
|
if (options.verbose && profiles.length > 0) {
|
|
20271
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20416
|
+
console.log(chalk12.gray('\nUse "juno-code config show <profile>" for detailed information.'));
|
|
20272
20417
|
}
|
|
20273
20418
|
} catch (error) {
|
|
20274
20419
|
const formatter = new ProfileDisplayFormatter();
|
|
@@ -20293,7 +20438,7 @@ async function showProfile(profileName, options = {}) {
|
|
|
20293
20438
|
const formatter = new ProfileDisplayFormatter();
|
|
20294
20439
|
if (error instanceof ProfileNotFoundError) {
|
|
20295
20440
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20296
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20441
|
+
console.log(chalk12.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20297
20442
|
} else {
|
|
20298
20443
|
formatter.formatError(`Failed to show profile: ${error}`);
|
|
20299
20444
|
}
|
|
@@ -20311,7 +20456,7 @@ async function setActiveProfile(profileName) {
|
|
|
20311
20456
|
const formatter = new ProfileDisplayFormatter();
|
|
20312
20457
|
if (error instanceof ProfileNotFoundError) {
|
|
20313
20458
|
formatter.formatError(`Profile '${profileName}' not found.`);
|
|
20314
|
-
console.log(chalk12.gray('\nUse "juno-
|
|
20459
|
+
console.log(chalk12.gray('\nUse "juno-code config list" to see available profiles.'));
|
|
20315
20460
|
} else {
|
|
20316
20461
|
formatter.formatError(`Failed to set active profile: ${error}`);
|
|
20317
20462
|
}
|
|
@@ -20340,13 +20485,13 @@ async function createProfile(profileName, options = {}) {
|
|
|
20340
20485
|
formatter.formatSuccess(`Profile '${profileName}' created successfully`);
|
|
20341
20486
|
if (options.interactive) {
|
|
20342
20487
|
console.log(chalk12.gray("\nYou can now configure this profile using:"));
|
|
20343
|
-
console.log(chalk12.cyan(` juno-
|
|
20488
|
+
console.log(chalk12.cyan(` juno-code config edit ${profileName}`));
|
|
20344
20489
|
}
|
|
20345
20490
|
} catch (error) {
|
|
20346
20491
|
const formatter = new ProfileDisplayFormatter();
|
|
20347
20492
|
if (error instanceof ProfileExistsError) {
|
|
20348
20493
|
formatter.formatError(`Profile '${profileName}' already exists.`);
|
|
20349
|
-
console.log(chalk12.gray('Use "juno-
|
|
20494
|
+
console.log(chalk12.gray('Use "juno-code config show <profile>" to view existing profile.'));
|
|
20350
20495
|
} else if (error instanceof CircularInheritanceError) {
|
|
20351
20496
|
formatter.formatError(`Circular inheritance detected: ${error.message}`);
|
|
20352
20497
|
} else {
|
|
@@ -20440,12 +20585,12 @@ function setupConfigCommand(program) {
|
|
|
20440
20585
|
configCmd.on("--help", () => {
|
|
20441
20586
|
console.log("");
|
|
20442
20587
|
console.log("Examples:");
|
|
20443
|
-
console.log(" $ juno-
|
|
20444
|
-
console.log(" $ juno-
|
|
20445
|
-
console.log(" $ juno-
|
|
20446
|
-
console.log(' $ juno-
|
|
20447
|
-
console.log(" $ juno-
|
|
20448
|
-
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");
|
|
20449
20594
|
console.log("");
|
|
20450
20595
|
});
|
|
20451
20596
|
}
|
|
@@ -20543,15 +20688,15 @@ var ShellDetector = class _ShellDetector {
|
|
|
20543
20688
|
switch (shell) {
|
|
20544
20689
|
case "bash":
|
|
20545
20690
|
if (process.platform === "darwin") {
|
|
20546
|
-
return path.join("/usr/local/etc/bash_completion.d", "juno-
|
|
20691
|
+
return path.join("/usr/local/etc/bash_completion.d", "juno-code");
|
|
20547
20692
|
}
|
|
20548
|
-
return path.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-
|
|
20693
|
+
return path.join(homeDir, ".local", "share", "bash-completion", "completions", "juno-code");
|
|
20549
20694
|
case "zsh":
|
|
20550
|
-
return path.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-
|
|
20695
|
+
return path.join(homeDir, ".local", "share", "zsh", "site-functions", "_juno-code");
|
|
20551
20696
|
case "fish":
|
|
20552
|
-
return path.join(homeDir, ".config", "fish", "completions", "juno-
|
|
20697
|
+
return path.join(homeDir, ".config", "fish", "completions", "juno-code.fish");
|
|
20553
20698
|
case "powershell":
|
|
20554
|
-
return path.join(homeDir, ".config", "powershell", "completions", "juno-
|
|
20699
|
+
return path.join(homeDir, ".config", "powershell", "completions", "juno-code.ps1");
|
|
20555
20700
|
default:
|
|
20556
20701
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
20557
20702
|
}
|
|
@@ -20573,17 +20718,17 @@ var ShellDetector = class _ShellDetector {
|
|
|
20573
20718
|
getSourceCommand(shell, completionPath) {
|
|
20574
20719
|
switch (shell) {
|
|
20575
20720
|
case "bash":
|
|
20576
|
-
return `# juno-
|
|
20721
|
+
return `# juno-code completion
|
|
20577
20722
|
[ -f "${completionPath}" ] && source "${completionPath}"`;
|
|
20578
20723
|
case "zsh":
|
|
20579
20724
|
const zshDir = path.dirname(completionPath);
|
|
20580
|
-
return `# juno-
|
|
20725
|
+
return `# juno-code completion
|
|
20581
20726
|
fpath=("${zshDir}" $fpath)
|
|
20582
20727
|
autoload -U compinit && compinit`;
|
|
20583
20728
|
case "fish":
|
|
20584
|
-
return `# juno-
|
|
20729
|
+
return `# juno-code completion (automatically loaded)`;
|
|
20585
20730
|
case "powershell":
|
|
20586
|
-
return `# juno-
|
|
20731
|
+
return `# juno-code completion
|
|
20587
20732
|
. "${completionPath}"`;
|
|
20588
20733
|
default:
|
|
20589
20734
|
throw new Error(`Unsupported shell: ${shell}`);
|
|
@@ -20598,7 +20743,7 @@ autoload -U compinit && compinit`;
|
|
|
20598
20743
|
return false;
|
|
20599
20744
|
}
|
|
20600
20745
|
const content = await fs.readFile(configPath, "utf-8");
|
|
20601
|
-
return content.includes("juno-
|
|
20746
|
+
return content.includes("juno-code completion");
|
|
20602
20747
|
} catch {
|
|
20603
20748
|
return false;
|
|
20604
20749
|
}
|
|
@@ -20857,7 +21002,7 @@ var CompletionInstaller = class {
|
|
|
20857
21002
|
}
|
|
20858
21003
|
await this.shellDetector.ensureCompletionDirectory(shell);
|
|
20859
21004
|
await this.shellDetector.ensureConfigDirectory(shell);
|
|
20860
|
-
const script = this.generateEnhancedCompletion(shell, "juno-
|
|
21005
|
+
const script = this.generateEnhancedCompletion(shell, "juno-code");
|
|
20861
21006
|
const completionPath = this.shellDetector.getCompletionPath(shell);
|
|
20862
21007
|
await fs.writeFile(completionPath, script, "utf-8");
|
|
20863
21008
|
const configPath = this.shellDetector.getConfigPath(shell);
|
|
@@ -20946,7 +21091,7 @@ ${sourceCommand}
|
|
|
20946
21091
|
return `#!/bin/bash
|
|
20947
21092
|
|
|
20948
21093
|
# ${commandName} enhanced completion script for bash
|
|
20949
|
-
# Generated by juno-
|
|
21094
|
+
# Generated by juno-code CLI with context-aware features
|
|
20950
21095
|
|
|
20951
21096
|
_${commandName}_completion() {
|
|
20952
21097
|
local cur prev opts base
|
|
@@ -21140,7 +21285,7 @@ complete -F _${commandName}_completion ${commandName}
|
|
|
21140
21285
|
return `#compdef ${commandName}
|
|
21141
21286
|
|
|
21142
21287
|
# ${commandName} enhanced completion script for zsh
|
|
21143
|
-
# Generated by juno-
|
|
21288
|
+
# Generated by juno-code CLI with context-aware features
|
|
21144
21289
|
|
|
21145
21290
|
_${commandName}() {
|
|
21146
21291
|
local context state line
|
|
@@ -21295,7 +21440,7 @@ _${commandName} "$@"
|
|
|
21295
21440
|
*/
|
|
21296
21441
|
generateEnhancedFishCompletion(commandName) {
|
|
21297
21442
|
return `# ${commandName} enhanced completion script for fish
|
|
21298
|
-
# Generated by juno-
|
|
21443
|
+
# Generated by juno-code CLI with context-aware features
|
|
21299
21444
|
|
|
21300
21445
|
# Context-aware model completion
|
|
21301
21446
|
function __${commandName}_complete_models
|
|
@@ -21551,7 +21696,7 @@ var CompletionCommand = class {
|
|
|
21551
21696
|
const uninstalledShells = completionStatus.filter((status) => !status.isInstalled && !status.error).map((status) => status.shell);
|
|
21552
21697
|
if (uninstalledShells.length > 0) {
|
|
21553
21698
|
console.log(chalk12.blue("\n\u{1F4A1} Suggestions:"));
|
|
21554
|
-
console.log(chalk12.white(` Install completion: juno-
|
|
21699
|
+
console.log(chalk12.white(` Install completion: juno-code completion install ${uninstalledShells.join(" ")}`));
|
|
21555
21700
|
}
|
|
21556
21701
|
const currentShell = this.shellDetector.getCurrentShell();
|
|
21557
21702
|
if (currentShell) {
|
|
@@ -21562,7 +21707,7 @@ var CompletionCommand = class {
|
|
|
21562
21707
|
} else {
|
|
21563
21708
|
console.log(chalk12.yellow(`
|
|
21564
21709
|
\u{1F3AF} Current shell (${currentShell}): Completion not installed`));
|
|
21565
|
-
console.log(chalk12.white(` Install: juno-
|
|
21710
|
+
console.log(chalk12.white(` Install: juno-code completion install ${currentShell}`));
|
|
21566
21711
|
}
|
|
21567
21712
|
}
|
|
21568
21713
|
} catch (error) {
|
|
@@ -21646,7 +21791,7 @@ var CompletionCommand = class {
|
|
|
21646
21791
|
console.log(chalk12.white("\u2022 Reload PowerShell"));
|
|
21647
21792
|
break;
|
|
21648
21793
|
}
|
|
21649
|
-
console.log(chalk12.white("\u2022 Test: juno-
|
|
21794
|
+
console.log(chalk12.white("\u2022 Test: juno-code <TAB>"));
|
|
21650
21795
|
}
|
|
21651
21796
|
};
|
|
21652
21797
|
var completion_default = CompletionCommand;
|
|
@@ -21712,7 +21857,7 @@ function setupMainCommand(program) {
|
|
|
21712
21857
|
const cwd2 = process.cwd();
|
|
21713
21858
|
const junoTaskDir = path20.join(cwd2, ".juno_task");
|
|
21714
21859
|
if (await fs18.pathExists(junoTaskDir)) {
|
|
21715
|
-
console.log(chalk12.blue.bold("\u{1F3AF} Juno
|
|
21860
|
+
console.log(chalk12.blue.bold("\u{1F3AF} Juno Code - Auto-detected Initialized Project\n"));
|
|
21716
21861
|
try {
|
|
21717
21862
|
const { loadConfig: loadConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
21718
21863
|
const config = await loadConfig2({
|
|
@@ -21745,13 +21890,13 @@ function setupMainCommand(program) {
|
|
|
21745
21890
|
}
|
|
21746
21891
|
}
|
|
21747
21892
|
if (!globalOptions.subagent && !options.prompt && !options.interactive && !options.interactivePrompt) {
|
|
21748
|
-
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"));
|
|
21749
21894
|
console.log(chalk12.white("To get started:"));
|
|
21750
|
-
console.log(chalk12.gray(" juno-
|
|
21751
|
-
console.log(chalk12.gray(" juno-
|
|
21752
|
-
console.log(chalk12.gray(" juno-
|
|
21753
|
-
console.log(chalk12.gray(' juno-
|
|
21754
|
-
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"));
|
|
21755
21900
|
console.log("");
|
|
21756
21901
|
return;
|
|
21757
21902
|
}
|
|
@@ -21765,7 +21910,7 @@ function setupMainCommand(program) {
|
|
|
21765
21910
|
function displayBanner(verbose = false) {
|
|
21766
21911
|
if (verbose) {
|
|
21767
21912
|
console.log(chalk12.blue.bold(`
|
|
21768
|
-
\u{1F3AF} Juno
|
|
21913
|
+
\u{1F3AF} Juno Code v${VERSION} - TypeScript CLI`));
|
|
21769
21914
|
console.log(chalk12.gray(` Node.js ${process.version} on ${process.platform}`));
|
|
21770
21915
|
console.log(chalk12.gray(` Working directory: ${process.cwd()}`));
|
|
21771
21916
|
console.log("");
|
|
@@ -21798,7 +21943,22 @@ function setupAliases(program) {
|
|
|
21798
21943
|
}
|
|
21799
21944
|
}
|
|
21800
21945
|
function configureEnvironment() {
|
|
21801
|
-
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 = [
|
|
21802
21962
|
"JUNO_TASK_SUBAGENT",
|
|
21803
21963
|
"JUNO_TASK_PROMPT",
|
|
21804
21964
|
"JUNO_TASK_CWD",
|
|
@@ -21813,10 +21973,10 @@ function configureEnvironment() {
|
|
|
21813
21973
|
"JUNO_TASK_NO_COLOR",
|
|
21814
21974
|
"JUNO_TASK_ENABLE_FEEDBACK"
|
|
21815
21975
|
];
|
|
21816
|
-
|
|
21976
|
+
const processEnvVar = (envVar, prefix) => {
|
|
21817
21977
|
const value = process.env[envVar];
|
|
21818
|
-
if (value && !process.argv.includes(`--${envVar.toLowerCase().replace(
|
|
21819
|
-
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, "-");
|
|
21820
21980
|
switch (option) {
|
|
21821
21981
|
case "verbose":
|
|
21822
21982
|
case "quiet":
|
|
@@ -21829,6 +21989,21 @@ function configureEnvironment() {
|
|
|
21829
21989
|
default:
|
|
21830
21990
|
process.argv.push(`--${option}`, value);
|
|
21831
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_");
|
|
21832
22007
|
}
|
|
21833
22008
|
}
|
|
21834
22009
|
if (!process.argv.includes("--enable-feedback")) {
|
|
@@ -21847,7 +22022,7 @@ function configureEnvironment() {
|
|
|
21847
22022
|
async function main() {
|
|
21848
22023
|
const program = new Command();
|
|
21849
22024
|
configureEnvironment();
|
|
21850
|
-
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");
|
|
21851
22026
|
setupGlobalOptions(program);
|
|
21852
22027
|
const isVerbose = process.argv.includes("--verbose") || process.argv.includes("-v");
|
|
21853
22028
|
displayBanner(isVerbose);
|
|
@@ -21886,54 +22061,58 @@ async function main() {
|
|
|
21886
22061
|
setupAliases(program);
|
|
21887
22062
|
setupMainCommand(program);
|
|
21888
22063
|
program.addHelpText("beforeAll", `
|
|
21889
|
-
${chalk12.blue.bold("\u{1F3AF} Juno
|
|
22064
|
+
${chalk12.blue.bold("\u{1F3AF} Juno Code")} - TypeScript CLI for AI Subagent Orchestration
|
|
21890
22065
|
|
|
21891
22066
|
`);
|
|
21892
22067
|
program.addHelpText("afterAll", `
|
|
21893
22068
|
${chalk12.blue.bold("Examples:")}
|
|
21894
22069
|
${chalk12.gray("# Initialize new project")}
|
|
21895
|
-
juno-
|
|
22070
|
+
juno-code init
|
|
21896
22071
|
|
|
21897
22072
|
${chalk12.gray("# Start execution using .juno_task/init.md")}
|
|
21898
|
-
juno-
|
|
22073
|
+
juno-code start
|
|
21899
22074
|
|
|
21900
22075
|
${chalk12.gray("# AI-powered testing")}
|
|
21901
|
-
juno-
|
|
21902
|
-
juno-
|
|
21903
|
-
juno-
|
|
22076
|
+
juno-code test --generate --run
|
|
22077
|
+
juno-code test src/utils.ts --subagent claude
|
|
22078
|
+
juno-code test --analyze --coverage
|
|
21904
22079
|
|
|
21905
22080
|
${chalk12.gray("# Quick execution with Claude")}
|
|
21906
|
-
juno-
|
|
22081
|
+
juno-code claude "Analyze this codebase and suggest improvements"
|
|
21907
22082
|
|
|
21908
22083
|
${chalk12.gray("# Interactive project setup")}
|
|
21909
|
-
juno-
|
|
22084
|
+
juno-code init --interactive
|
|
21910
22085
|
|
|
21911
22086
|
${chalk12.gray("# Manage sessions")}
|
|
21912
|
-
juno-
|
|
21913
|
-
juno-
|
|
22087
|
+
juno-code session list
|
|
22088
|
+
juno-code session info abc123
|
|
21914
22089
|
|
|
21915
22090
|
${chalk12.gray("# Enable feedback collection globally")}
|
|
21916
|
-
juno-
|
|
22091
|
+
juno-code --enable-feedback start
|
|
21917
22092
|
|
|
21918
22093
|
${chalk12.gray("# Collect feedback")}
|
|
21919
|
-
juno-
|
|
22094
|
+
juno-code feedback --interactive
|
|
21920
22095
|
|
|
21921
22096
|
${chalk12.gray("# Manage configuration profiles")}
|
|
21922
|
-
juno-
|
|
21923
|
-
juno-
|
|
22097
|
+
juno-code config list
|
|
22098
|
+
juno-code config create development
|
|
21924
22099
|
|
|
21925
22100
|
${chalk12.gray("# Setup Git repository")}
|
|
21926
|
-
juno-
|
|
22101
|
+
juno-code setup-git https://github.com/owner/repo
|
|
21927
22102
|
|
|
21928
22103
|
${chalk12.blue.bold("Environment Variables:")}
|
|
21929
|
-
|
|
21930
|
-
|
|
21931
|
-
|
|
21932
|
-
|
|
21933
|
-
|
|
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
|
|
21934
22110
|
JUNO_INTERACTIVE_FEEDBACK_MODE Enable interactive feedback mode (true/false)
|
|
21935
22111
|
NO_COLOR Disable colored output (standard)
|
|
21936
22112
|
|
|
22113
|
+
${chalk12.gray("Legacy variables (backward compatibility):")}
|
|
22114
|
+
JUNO_TASK_* All JUNO_TASK_* variables still supported
|
|
22115
|
+
|
|
21937
22116
|
${chalk12.blue.bold("Configuration:")}
|
|
21938
22117
|
Configuration can be specified via:
|
|
21939
22118
|
1. Command line arguments (highest priority)
|
|
@@ -21942,8 +22121,8 @@ ${chalk12.blue.bold("Configuration:")}
|
|
|
21942
22121
|
4. Built-in defaults (lowest priority)
|
|
21943
22122
|
|
|
21944
22123
|
${chalk12.blue.bold("Support:")}
|
|
21945
|
-
Documentation: https://github.com/owner/juno-
|
|
21946
|
-
Issues: https://github.com/owner/juno-
|
|
22124
|
+
Documentation: https://github.com/owner/juno-code#readme
|
|
22125
|
+
Issues: https://github.com/owner/juno-code/issues
|
|
21947
22126
|
License: MIT
|
|
21948
22127
|
|
|
21949
22128
|
`);
|