juno-code 1.0.44 → 1.0.45
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/dist/bin/cli.js +18 -8
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +18 -8
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/templates/scripts/__pycache__/attachment_downloader.cpython-38.pyc +0 -0
- package/dist/templates/scripts/__pycache__/github.cpython-38.pyc +0 -0
- package/dist/templates/scripts/__pycache__/slack_fetch.cpython-38.pyc +0 -0
- package/dist/templates/scripts/__pycache__/slack_state.cpython-38.pyc +0 -0
- package/dist/templates/scripts/attachment_downloader.py +405 -0
- package/dist/templates/scripts/github.py +282 -7
- package/dist/templates/scripts/hooks/session_counter.sh +328 -0
- package/dist/templates/scripts/kanban.sh +22 -4
- package/dist/templates/scripts/slack_fetch.py +232 -20
- package/dist/templates/services/claude.py +48 -0
- package/package.json +1 -1
package/dist/bin/cli.mjs
CHANGED
|
@@ -13604,12 +13604,16 @@ var init_script_installer = __esm({
|
|
|
13604
13604
|
* Required scripts include both standalone scripts and their dependencies.
|
|
13605
13605
|
* kanban.sh depends on install_requirements.sh for Python venv setup.
|
|
13606
13606
|
* Slack integration scripts allow fetching tasks from Slack and responding.
|
|
13607
|
+
* Hook scripts are stored in the hooks/ subdirectory.
|
|
13607
13608
|
*/
|
|
13608
13609
|
static REQUIRED_SCRIPTS = [
|
|
13609
13610
|
"run_until_completion.sh",
|
|
13610
13611
|
"kanban.sh",
|
|
13611
13612
|
"install_requirements.sh",
|
|
13612
13613
|
// Required by kanban.sh for Python venv creation
|
|
13614
|
+
// Shared utilities
|
|
13615
|
+
"attachment_downloader.py",
|
|
13616
|
+
// File attachment downloading utility (used by Slack/GitHub)
|
|
13613
13617
|
// Slack integration scripts
|
|
13614
13618
|
"slack_state.py",
|
|
13615
13619
|
// State management for Slack integration
|
|
@@ -13622,8 +13626,11 @@ var init_script_installer = __esm({
|
|
|
13622
13626
|
"slack_respond.sh",
|
|
13623
13627
|
// Wrapper script for Slack respond
|
|
13624
13628
|
// GitHub integration script (single-file architecture)
|
|
13625
|
-
"github.py"
|
|
13629
|
+
"github.py",
|
|
13626
13630
|
// Unified GitHub integration (fetch, respond, sync)
|
|
13631
|
+
// Claude Code hooks (stored in hooks/ subdirectory)
|
|
13632
|
+
"hooks/session_counter.sh"
|
|
13633
|
+
// Session message counter hook for warning about long sessions
|
|
13627
13634
|
];
|
|
13628
13635
|
/**
|
|
13629
13636
|
* Get the templates scripts directory from the package
|
|
@@ -13680,6 +13687,10 @@ var init_script_installer = __esm({
|
|
|
13680
13687
|
const destDir = path3.join(projectDir, ".juno_task", "scripts");
|
|
13681
13688
|
await fs3.ensureDir(destDir);
|
|
13682
13689
|
const destPath = path3.join(destDir, scriptName);
|
|
13690
|
+
const destParentDir = path3.dirname(destPath);
|
|
13691
|
+
if (destParentDir !== destDir) {
|
|
13692
|
+
await fs3.ensureDir(destParentDir);
|
|
13693
|
+
}
|
|
13683
13694
|
await fs3.copy(sourcePath, destPath, { overwrite: true });
|
|
13684
13695
|
if (scriptName.endsWith(".sh") || scriptName.endsWith(".py")) {
|
|
13685
13696
|
await fs3.chmod(destPath, 493);
|
|
@@ -14855,8 +14866,7 @@ After completing the proccess an implementer agent would start the job and go th
|
|
|
14855
14866
|
category: "core" /* CORE */,
|
|
14856
14867
|
content: `0a. study @.juno_task/implement.md.
|
|
14857
14868
|
|
|
14858
|
-
0b. When you discover a syntax, logic, UI, User Flow Error or bug. Immediately update
|
|
14859
|
-
|
|
14869
|
+
0b. When you discover a syntax, logic, UI, User Flow Error or bug. Immediately update Kanban with your findings using a {{SUBAGENT}} subagent. When the issue is resolved, update Kanban.
|
|
14860
14870
|
|
|
14861
14871
|
999. Important: When authoring documentation capture the why tests and the backing implementation is important.
|
|
14862
14872
|
|
|
@@ -14946,7 +14956,7 @@ Tasks , USER_FEEDBACK and @{{AGENT_DOC_FILE}} should repesent truth. User Open I
|
|
|
14946
14956
|
description: "Implementation steps and current task breakdown",
|
|
14947
14957
|
category: "workflow" /* WORKFLOW */,
|
|
14948
14958
|
content: `---
|
|
14949
|
-
description: Execute the implementation plan by processing and executing all tasks defined in
|
|
14959
|
+
description: Execute the implementation plan by processing and executing all tasks defined in Kanban
|
|
14950
14960
|
---
|
|
14951
14961
|
|
|
14952
14962
|
## User Input
|
|
@@ -15005,7 +15015,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15005
15015
|
1. Run \`./.juno_task/scripts/kanban.sh list\` from repo root and check current project status.
|
|
15006
15016
|
|
|
15007
15017
|
2. Load and analyze the implementation context:
|
|
15008
|
-
- **REQUIRED**: Read
|
|
15018
|
+
- **REQUIRED**: Read Kanban for the complete task list and execution plan
|
|
15009
15019
|
- **REQUIRED**: Read plan.md for tech stack, architecture, and file structure
|
|
15010
15020
|
- **IF EXISTS**: Read data-model.md for entities and relationships
|
|
15011
15021
|
- **IF EXISTS**: Read contracts/ for API specifications and test requirements
|
|
@@ -15045,7 +15055,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15045
15055
|
- **Prettier**: \`node_modules/\`, \`dist/\`, \`build/\`, \`coverage/\`, \`package-lock.json\`, \`yarn.lock\`, \`pnpm-lock.yaml\`
|
|
15046
15056
|
- **Terraform**: \`.terraform/\`, \`*.tfstate*\`, \`*.tfvars\`, \`.terraform.lock.hcl\`
|
|
15047
15057
|
|
|
15048
|
-
5. Parse
|
|
15058
|
+
5. Parse Kanban structure and extract:
|
|
15049
15059
|
- **Task phases**: Setup, Tests, Core, Integration, Polish
|
|
15050
15060
|
- **Task dependencies**: Sequential vs parallel execution rules
|
|
15051
15061
|
- **Task details**: ID, description, file paths, parallel markers [P]
|
|
@@ -15094,7 +15104,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15094
15104
|
|
|
15095
15105
|
|
|
15096
15106
|
|
|
15097
|
-
Note: This command assumes a complete task breakdown exists in
|
|
15107
|
+
Note: This command assumes a complete task breakdown exists in Kanban. If tasks are incomplete or missing, suggest running \`/tasks\` first to regenerate the task list.
|
|
15098
15108
|
|
|
15099
15109
|
|
|
15100
15110
|
---
|
|
@@ -24729,7 +24739,7 @@ function handleCLIError(error, verbose = false) {
|
|
|
24729
24739
|
process.exit(EXIT_CODES.UNEXPECTED_ERROR);
|
|
24730
24740
|
}
|
|
24731
24741
|
function setupGlobalOptions(program) {
|
|
24732
|
-
program.option("-v, --verbose", "Enable verbose output with detailed progress").option("-q, --quiet", "Disable rich formatting, use plain text").option("-c, --config <path>", "Configuration file path (.json, .toml, pyproject.toml)").option("-l, --log-file <path>", "Log file path (auto-generated if not specified)").option("--no-color", "Disable colored output").option("--log-level <level>", "Log level for output (error, warn, info, debug, trace)", "info").option("-s, --subagent <name>", "Subagent to use (claude, cursor, codex, gemini)").option("-b, --backend <type>", "Backend to use (mcp, shell) - default: shell").option("-m, --model <name>", "Model to use (subagent-specific)").option("--agents <config>", "Agents configuration (forwarded to shell backend, ignored for MCP)").option("--tools <tools...>", 'Specify the list of available tools from the built-in set (only works with --print mode). Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read"). Passed to shell backend, ignored for MCP.').option("--allowed-tools <tools...>", 'Permission-based filtering of specific tool instances (e.g. "Bash(git:*) Edit"). Default when not specified: Task, Bash, Glob, Grep, ExitPlanMode, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, Skill, SlashCommand, EnterPlanMode. Passed to shell backend, ignored for MCP.').option("--disallowed-tools <tools...>", "Disallowed tools for Claude (passed to shell backend, ignored for MCP). By default, no tools are disallowed").option("--append-allowed-tools <tools...>", "Append tools to the default allowed-tools list (mutually exclusive with --allowed-tools). Passed to shell backend, ignored for MCP.").option("--mcp-timeout <number>", "MCP server timeout in milliseconds", parseInt).option("--enable-feedback", "Enable interactive feedback mode (F+Enter to enter, Q+Enter to submit)").option("-r, --resume <sessionId>", "Resume a conversation by session ID (shell backend only)").option("--continue", "Continue the most recent conversation (shell backend only)").option("--til-completion", "Run juno-code in a loop until all kanban tasks are complete (aliases: --until-completion, --run-until-completion, --till-complete)").option("--until-completion", "Alias for --til-completion").addOption(new Option("--run-until-completion", "Alias for --til-completion").hideHelp()).addOption(new Option("--till-complete", "Alias for --til-completion").hideHelp()).option("--pre-run-hook <hooks...>", "Execute named hooks from .juno_task/config.json before each iteration (only with --til-completion)").option("--force-update", "Force update scripts, services, and Python dependencies (bypasses 24-hour cache)").option("--on-hourly-limit <behavior>", 'Behavior when Claude hourly quota limit is reached: "wait" to sleep until reset, "raise" to exit immediately (default: raise)');
|
|
24742
|
+
program.option("-v, --verbose", "Enable verbose output with detailed progress").option("-q, --quiet", "Disable rich formatting, use plain text").option("-c, --config <path>", "Configuration file path (.json, .toml, pyproject.toml)").option("-l, --log-file <path>", "Log file path (auto-generated if not specified)").option("--no-color", "Disable colored output").option("--log-level <level>", "Log level for output (error, warn, info, debug, trace)", "info").option("-s, --subagent <name>", "Subagent to use (claude, cursor, codex, gemini)").option("-b, --backend <type>", "Backend to use (mcp, shell) - default: shell").option("-m, --model <name>", "Model to use (subagent-specific)").option("--agents <config>", "Agents configuration (forwarded to shell backend, ignored for MCP)").option("--tools <tools...>", 'Specify the list of available tools from the built-in set (only works with --print mode). Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read"). Passed to shell backend, ignored for MCP.').option("--allowed-tools <tools...>", 'Permission-based filtering of specific tool instances (e.g. "Bash(git:*) Edit"). Default when not specified: Task, Bash, Glob, Grep, ExitPlanMode, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, Skill, SlashCommand, EnterPlanMode. Passed to shell backend, ignored for MCP.').option("--disallowed-tools <tools...>", "Disallowed tools for Claude (passed to shell backend, ignored for MCP). By default, no tools are disallowed").option("--append-allowed-tools <tools...>", "Append tools to the default allowed-tools list (mutually exclusive with --allowed-tools). Passed to shell backend, ignored for MCP.").option("--mcp-timeout <number>", "MCP server timeout in milliseconds", parseInt).option("--enable-feedback", "Enable interactive feedback mode (F+Enter to enter, Q+Enter to submit)").option("-r, --resume <sessionId>", "Resume a conversation by session ID (shell backend only)").option("--continue", "Continue the most recent conversation (shell backend only)").option("--til-completion", "Run juno-code in a loop until all kanban tasks are complete (aliases: --until-completion, --run-until-completion, --till-complete)").option("--until-completion", "Alias for --til-completion").addOption(new Option("--run-until-completion", "Alias for --til-completion").hideHelp()).addOption(new Option("--till-complete", "Alias for --til-completion").hideHelp()).option("--pre-run-hook <hooks...>", "Execute named hooks from .juno_task/config.json before each iteration (only with --til-completion)").option("--stale-threshold <n>", "Number of stale iterations before exiting (default: 3). Set to 0 to disable. (only with --til-completion)", parseInt).option("--no-stale-check", "Disable stale iteration detection (alias for --stale-threshold 0). (only with --til-completion)").option("--force-update", "Force update scripts, services, and Python dependencies (bypasses 24-hour cache)").option("--on-hourly-limit <behavior>", 'Behavior when Claude hourly quota limit is reached: "wait" to sleep until reset, "raise" to exit immediately (default: raise)');
|
|
24733
24743
|
program.exitOverride((err) => {
|
|
24734
24744
|
if (err.code === "commander.helpDisplayed") {
|
|
24735
24745
|
process.exit(0);
|