juno-code 1.0.29 → 1.0.31

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.
@@ -33,6 +33,13 @@ class ClaudeService:
33
33
  ":opus": "claude-opus-4-5-20251101",
34
34
  }
35
35
 
36
+ # Default allowed tools (used with --append-allowed-tools)
37
+ DEFAULT_ALLOWED_TOOLS = [
38
+ "Task", "Bash", "Glob", "Grep", "ExitPlanMode", "Read", "Edit", "Write",
39
+ "NotebookEdit", "WebFetch", "TodoWrite", "WebSearch", "BashOutput",
40
+ "KillShell", "Skill", "SlashCommand", "EnterPlanMode"
41
+ ]
42
+
36
43
  def __init__(self):
37
44
  self.model_name = self.DEFAULT_MODEL
38
45
  self.permission_mode = self.DEFAULT_PERMISSION_MODE
@@ -83,9 +90,15 @@ class ClaudeService:
83
90
  Examples:
84
91
  %(prog)s -p "Write a hello world function"
85
92
  %(prog)s -pp prompt.txt --cd /path/to/project
86
- %(prog)s -p "Add tests" -m :opus --tool "Bash Edit"
87
- %(prog)s -p "Quick task" -m :haiku
88
- %(prog)s -p "Complex task" -m claude-opus-4-20250514
93
+ %(prog)s -p "Add tests" -m :opus --tool Bash --tool Edit
94
+ %(prog)s -p "Quick task" -m :haiku --disallowed-tool Bash
95
+ %(prog)s -p "Complex task" -m claude-opus-4-20250514 --tool Read --tool Write
96
+ %(prog)s -p "Multi-tool task" --allowed-tools Bash Edit Read Write
97
+ %(prog)s -p "Restricted task" --disallowed-tools Bash WebSearch
98
+
99
+ Default Tools (enabled by default when no --allowed-tools specified):
100
+ Task, Bash, Glob, Grep, ExitPlanMode, Read, Edit, Write, NotebookEdit,
101
+ WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, Skill, SlashCommand, EnterPlanMode
89
102
 
90
103
  Environment Variables:
91
104
  CLAUDE_PROJECT_PATH Project path (default: current directory)
@@ -133,10 +146,31 @@ Environment Variables:
133
146
  )
134
147
 
135
148
  parser.add_argument(
136
- "--tool",
149
+ "--tools",
150
+ action="append",
151
+ dest="tools",
152
+ help="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\"). Forwarded to claude CLI."
153
+ )
154
+
155
+ parser.add_argument(
156
+ "--allowedTools", "--allowed-tools",
137
157
  action="append",
138
158
  dest="allowed_tools",
139
- help="Allowed tools (can be used multiple times, e.g. 'Bash' 'Edit')"
159
+ help="Permission-based filtering of specific tool instances (e.g. 'Bash(git:*)' 'Edit'). Accepts both --allowedTools and --allowed-tools. Default when not specified: Task, Bash, Glob, Grep, ExitPlanMode, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, Skill, SlashCommand, EnterPlanMode"
160
+ )
161
+
162
+ parser.add_argument(
163
+ "--disallowedTools", "--disallowed-tools",
164
+ action="append",
165
+ dest="disallowed_tools",
166
+ help="Disallowed tools (can be used multiple times, e.g. 'Bash' 'Edit'). Accepts both --disallowedTools and --disallowed-tools. By default, no tools are disallowed"
167
+ )
168
+
169
+ parser.add_argument(
170
+ "--appendAllowedTools", "--append-allowed-tools",
171
+ action="append",
172
+ dest="append_allowed_tools",
173
+ help="Append tools to the default allowed-tools list (mutually exclusive with --allowed-tools). Accepts both --appendAllowedTools and --append-allowed-tools."
140
174
  )
141
175
 
142
176
  parser.add_argument(
@@ -213,24 +247,40 @@ Environment Variables:
213
247
  ]
214
248
 
215
249
  # Build the full prompt (auto_instruction + user prompt)
216
- # IMPORTANT: Prompt must come BEFORE --allowed-tools
217
- # because --allowed-tools consumes all following arguments as tool names
250
+ # IMPORTANT: Prompt must come BEFORE tool-related flags
251
+ # because some flags consume all following arguments
218
252
  full_prompt = f"{self.auto_instruction}\n\n{self.prompt}"
219
253
  cmd.append(full_prompt)
220
254
 
221
- # Add allowed tools if specified (AFTER the prompt)
255
+ # Add available tools from built-in set if specified (AFTER the prompt)
256
+ # Note: --tools controls which built-in Claude tools are available (only works with --print mode)
257
+ if args.tools:
258
+ cmd.append("--tools")
259
+ cmd.extend(args.tools)
260
+ # No else block: By default Claude enables all tools
261
+
262
+ # Handle allowed tools (either --allowed-tools or --append-allowed-tools, but not both)
263
+ # These are mutually exclusive - validation already done above
264
+ # When neither is specified, use the default allowed-tools list
222
265
  if args.allowed_tools:
223
- cmd.append("--allowed-tools")
266
+ # Use the explicitly specified allowed tools (replaces default)
267
+ cmd.append("--allowedTools")
224
268
  cmd.extend(args.allowed_tools)
269
+ elif args.append_allowed_tools:
270
+ # Append specified tools to the default list
271
+ combined_tools = self.DEFAULT_ALLOWED_TOOLS + args.append_allowed_tools
272
+ cmd.append("--allowedTools")
273
+ cmd.extend(combined_tools)
225
274
  else:
226
- # Default allowed tools similar to claude_code.py
227
- default_tools = [
228
- "Read", "Write", "Edit", "MultiEdit",
229
- "Bash", "Glob", "Grep", "WebFetch",
230
- "WebSearch", "TodoWrite"
231
- ]
232
- cmd.append("--allowed-tools")
233
- cmd.extend(default_tools)
275
+ # Use default allowed-tools list when no explicit list is provided
276
+ cmd.append("--allowedTools")
277
+ cmd.extend(self.DEFAULT_ALLOWED_TOOLS)
278
+
279
+ # Add disallowed tools if specified (AFTER the prompt)
280
+ # Note: claude CLI expects camelCase --disallowedTools (not kebab-case --disallowed-tools)
281
+ if args.disallowed_tools:
282
+ cmd.append("--disallowedTools")
283
+ cmd.extend(args.disallowed_tools)
234
284
 
235
285
  # Add continue flag if specified
236
286
  if args.continue_conversation:
@@ -529,6 +579,14 @@ Environment Variables:
529
579
  # Parse arguments first to handle --help
530
580
  args = self.parse_arguments()
531
581
 
582
+ # Validate that --allowed-tools and --append-allowed-tools are mutually exclusive
583
+ if args.allowed_tools and args.append_allowed_tools:
584
+ print(
585
+ "Error: --allowed-tools and --append-allowed-tools are mutually exclusive. Use one or the other.",
586
+ file=sys.stderr
587
+ )
588
+ return 1
589
+
532
590
  # Check if prompt is provided
533
591
  if not args.prompt and not args.prompt_file:
534
592
  print(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juno-code",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "TypeScript CLI tool for AI subagent orchestration with code automation",
5
5
  "keywords": [
6
6
  "ai",
@@ -129,16 +129,16 @@
129
129
  },
130
130
  "repository": {
131
131
  "type": "git",
132
- "url": "https://github.com/owner/juno-code.git"
132
+ "url": "https://github.com/askbudi/juno-code.git"
133
133
  },
134
134
  "bugs": {
135
- "url": "https://github.com/owner/juno-code/issues"
135
+ "url": "https://github.com/askbudi/juno-code/issues"
136
136
  },
137
- "homepage": "https://github.com/owner/juno-code#readme",
137
+ "homepage": "https://askbudi.ai/juno-code#readme",
138
138
  "license": "MIT",
139
139
  "author": {
140
- "name": "Development Team",
141
- "email": "dev@example.com"
140
+ "name": "Juno AI INC.",
141
+ "email": "golchin@askdev.ai"
142
142
  },
143
143
  "publishConfig": {
144
144
  "access": "public"