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.js
CHANGED
|
@@ -13639,12 +13639,16 @@ var init_script_installer = __esm({
|
|
|
13639
13639
|
* Required scripts include both standalone scripts and their dependencies.
|
|
13640
13640
|
* kanban.sh depends on install_requirements.sh for Python venv setup.
|
|
13641
13641
|
* Slack integration scripts allow fetching tasks from Slack and responding.
|
|
13642
|
+
* Hook scripts are stored in the hooks/ subdirectory.
|
|
13642
13643
|
*/
|
|
13643
13644
|
static REQUIRED_SCRIPTS = [
|
|
13644
13645
|
"run_until_completion.sh",
|
|
13645
13646
|
"kanban.sh",
|
|
13646
13647
|
"install_requirements.sh",
|
|
13647
13648
|
// Required by kanban.sh for Python venv creation
|
|
13649
|
+
// Shared utilities
|
|
13650
|
+
"attachment_downloader.py",
|
|
13651
|
+
// File attachment downloading utility (used by Slack/GitHub)
|
|
13648
13652
|
// Slack integration scripts
|
|
13649
13653
|
"slack_state.py",
|
|
13650
13654
|
// State management for Slack integration
|
|
@@ -13657,8 +13661,11 @@ var init_script_installer = __esm({
|
|
|
13657
13661
|
"slack_respond.sh",
|
|
13658
13662
|
// Wrapper script for Slack respond
|
|
13659
13663
|
// GitHub integration script (single-file architecture)
|
|
13660
|
-
"github.py"
|
|
13664
|
+
"github.py",
|
|
13661
13665
|
// Unified GitHub integration (fetch, respond, sync)
|
|
13666
|
+
// Claude Code hooks (stored in hooks/ subdirectory)
|
|
13667
|
+
"hooks/session_counter.sh"
|
|
13668
|
+
// Session message counter hook for warning about long sessions
|
|
13662
13669
|
];
|
|
13663
13670
|
/**
|
|
13664
13671
|
* Get the templates scripts directory from the package
|
|
@@ -13715,6 +13722,10 @@ var init_script_installer = __esm({
|
|
|
13715
13722
|
const destDir = path3__namespace.join(projectDir, ".juno_task", "scripts");
|
|
13716
13723
|
await fs3__default.default.ensureDir(destDir);
|
|
13717
13724
|
const destPath = path3__namespace.join(destDir, scriptName);
|
|
13725
|
+
const destParentDir = path3__namespace.dirname(destPath);
|
|
13726
|
+
if (destParentDir !== destDir) {
|
|
13727
|
+
await fs3__default.default.ensureDir(destParentDir);
|
|
13728
|
+
}
|
|
13718
13729
|
await fs3__default.default.copy(sourcePath, destPath, { overwrite: true });
|
|
13719
13730
|
if (scriptName.endsWith(".sh") || scriptName.endsWith(".py")) {
|
|
13720
13731
|
await fs3__default.default.chmod(destPath, 493);
|
|
@@ -14890,8 +14901,7 @@ After completing the proccess an implementer agent would start the job and go th
|
|
|
14890
14901
|
category: "core" /* CORE */,
|
|
14891
14902
|
content: `0a. study @.juno_task/implement.md.
|
|
14892
14903
|
|
|
14893
|
-
0b. When you discover a syntax, logic, UI, User Flow Error or bug. Immediately update
|
|
14894
|
-
|
|
14904
|
+
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.
|
|
14895
14905
|
|
|
14896
14906
|
999. Important: When authoring documentation capture the why tests and the backing implementation is important.
|
|
14897
14907
|
|
|
@@ -14981,7 +14991,7 @@ Tasks , USER_FEEDBACK and @{{AGENT_DOC_FILE}} should repesent truth. User Open I
|
|
|
14981
14991
|
description: "Implementation steps and current task breakdown",
|
|
14982
14992
|
category: "workflow" /* WORKFLOW */,
|
|
14983
14993
|
content: `---
|
|
14984
|
-
description: Execute the implementation plan by processing and executing all tasks defined in
|
|
14994
|
+
description: Execute the implementation plan by processing and executing all tasks defined in Kanban
|
|
14985
14995
|
---
|
|
14986
14996
|
|
|
14987
14997
|
## User Input
|
|
@@ -15040,7 +15050,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15040
15050
|
1. Run \`./.juno_task/scripts/kanban.sh list\` from repo root and check current project status.
|
|
15041
15051
|
|
|
15042
15052
|
2. Load and analyze the implementation context:
|
|
15043
|
-
- **REQUIRED**: Read
|
|
15053
|
+
- **REQUIRED**: Read Kanban for the complete task list and execution plan
|
|
15044
15054
|
- **REQUIRED**: Read plan.md for tech stack, architecture, and file structure
|
|
15045
15055
|
- **IF EXISTS**: Read data-model.md for entities and relationships
|
|
15046
15056
|
- **IF EXISTS**: Read contracts/ for API specifications and test requirements
|
|
@@ -15080,7 +15090,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15080
15090
|
- **Prettier**: \`node_modules/\`, \`dist/\`, \`build/\`, \`coverage/\`, \`package-lock.json\`, \`yarn.lock\`, \`pnpm-lock.yaml\`
|
|
15081
15091
|
- **Terraform**: \`.terraform/\`, \`*.tfstate*\`, \`*.tfvars\`, \`.terraform.lock.hcl\`
|
|
15082
15092
|
|
|
15083
|
-
5. Parse
|
|
15093
|
+
5. Parse Kanban structure and extract:
|
|
15084
15094
|
- **Task phases**: Setup, Tests, Core, Integration, Polish
|
|
15085
15095
|
- **Task dependencies**: Sequential vs parallel execution rules
|
|
15086
15096
|
- **Task details**: ID, description, file paths, parallel markers [P]
|
|
@@ -15129,7 +15139,7 @@ You **MUST** consider the user input before proceeding (if not empty).
|
|
|
15129
15139
|
|
|
15130
15140
|
|
|
15131
15141
|
|
|
15132
|
-
Note: This command assumes a complete task breakdown exists in
|
|
15142
|
+
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.
|
|
15133
15143
|
|
|
15134
15144
|
|
|
15135
15145
|
---
|
|
@@ -24764,7 +24774,7 @@ function handleCLIError(error, verbose = false) {
|
|
|
24764
24774
|
process.exit(EXIT_CODES.UNEXPECTED_ERROR);
|
|
24765
24775
|
}
|
|
24766
24776
|
function setupGlobalOptions(program) {
|
|
24767
|
-
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 commander.Option("--run-until-completion", "Alias for --til-completion").hideHelp()).addOption(new commander.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)');
|
|
24777
|
+
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 commander.Option("--run-until-completion", "Alias for --til-completion").hideHelp()).addOption(new commander.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)');
|
|
24768
24778
|
program.exitOverride((err) => {
|
|
24769
24779
|
if (err.code === "commander.helpDisplayed") {
|
|
24770
24780
|
process.exit(0);
|