@benzotti/jedi 0.1.12 → 0.1.14
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/action/action.yml
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
# - Set CLICKUP_API_TOKEN secret for ClickUp ticket integration
|
|
10
10
|
# - Run `npx @benzotti/jedi init` locally to customise framework files
|
|
11
11
|
#
|
|
12
|
-
# Usage: Comment on any issue or PR with
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
12
|
+
# Usage: Comment on any issue or PR with "Hey Jedi" followed by a command:
|
|
13
|
+
# Hey Jedi plan <description> — Create an implementation plan
|
|
14
|
+
# Hey Jedi quick <description> — Make a small, focused change
|
|
15
|
+
# Hey Jedi review — Review the current PR
|
|
16
|
+
# Hey Jedi feedback — Address PR review comments
|
|
17
|
+
# Hey Jedi do <clickup-ticket-url> — Full flow: plan + implement from ticket
|
|
18
18
|
#
|
|
19
19
|
# Conversation: Jedi supports back-and-forth iteration. After Jedi responds,
|
|
20
20
|
# reply with feedback to refine, or say "approved" to finalise.
|
|
@@ -39,11 +39,11 @@ permissions:
|
|
|
39
39
|
id-token: write
|
|
40
40
|
|
|
41
41
|
jobs:
|
|
42
|
-
# ── Triggered by
|
|
42
|
+
# ── Triggered by "Hey Jedi" comments on issues/PRs ──
|
|
43
43
|
jedi:
|
|
44
44
|
if: >-
|
|
45
45
|
(github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment')
|
|
46
|
-
&& contains(github.event.comment.body, '
|
|
46
|
+
&& contains(github.event.comment.body, 'Hey Jedi')
|
|
47
47
|
runs-on: ubuntu-latest
|
|
48
48
|
steps:
|
|
49
49
|
- uses: actions/checkout@v4
|
|
@@ -94,7 +94,7 @@ jobs:
|
|
|
94
94
|
uses: anthropics/claude-code-action@v1
|
|
95
95
|
with:
|
|
96
96
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
97
|
-
trigger_phrase: '
|
|
97
|
+
trigger_phrase: 'Hey Jedi'
|
|
98
98
|
bot_name: 'jedi[bot]'
|
|
99
99
|
env:
|
|
100
100
|
CLICKUP_API_TOKEN: ${{ secrets.CLICKUP_API_TOKEN }}
|
package/dist/index.js
CHANGED
|
@@ -9250,7 +9250,7 @@ async function copyFrameworkFiles(cwd, projectType, force, ci = false) {
|
|
|
9250
9250
|
const frameworkDest = join2(cwd, ".jdi", "framework");
|
|
9251
9251
|
const glob = new Bun.Glob("**/*");
|
|
9252
9252
|
for await (const file of glob.scan({ cwd: frameworkDir })) {
|
|
9253
|
-
if (file.startsWith("adapters/")
|
|
9253
|
+
if (file.startsWith("adapters/"))
|
|
9254
9254
|
continue;
|
|
9255
9255
|
const src2 = join2(frameworkDir, file);
|
|
9256
9256
|
const dest = join2(frameworkDest, file);
|
|
@@ -9366,6 +9366,8 @@ Recognise natural language JDI intents and invoke the matching skill via the Ski
|
|
|
9366
9366
|
|
|
9367
9367
|
Extract flags from context: "in a worktree" \u2192 \`--worktree\`, "lightweight" \u2192 \`--worktree-lightweight\`, "single agent" \u2192 \`--single\`, "use teams" \u2192 \`--team\`. If the intent is unclear, ask. Never guess.
|
|
9368
9368
|
|
|
9369
|
+
Planning and implementation are separate gates \u2014 NEVER auto-proceed to implementation after plan approval.
|
|
9370
|
+
|
|
9369
9371
|
## Iterative Refinement
|
|
9370
9372
|
|
|
9371
9373
|
After \`/jdi:create-plan\` or \`/jdi:implement-plan\` completes, the conversation continues naturally \u2014 no new command invocation needed. When the user provides feedback (e.g. "change task 2", "move this to a helper", "add error handling"), apply the changes directly, update state, and present the updated summary. When the user approves (e.g. "approved", "looks good", "lgtm"), finalise the review state. The conversation IS the feedback loop.
|
|
@@ -9388,6 +9390,8 @@ Recognise natural language JDI intents and invoke the matching skill via the Ski
|
|
|
9388
9390
|
|
|
9389
9391
|
Extract flags from context: "in a worktree" \u2192 \`--worktree\`, "lightweight" \u2192 \`--worktree-lightweight\`, "single agent" \u2192 \`--single\`, "use teams" \u2192 \`--team\`. If the intent is unclear, ask. Never guess.
|
|
9390
9392
|
|
|
9393
|
+
Planning and implementation are separate gates \u2014 NEVER auto-proceed to implementation after plan approval.
|
|
9394
|
+
|
|
9391
9395
|
## Iterative Refinement
|
|
9392
9396
|
|
|
9393
9397
|
After \`/jdi:create-plan\` or \`/jdi:implement-plan\` completes, the conversation continues naturally \u2014 no new command invocation needed. When the user provides feedback (e.g. "change task 2", "move this to a helper", "add error handling"), apply the changes directly, update state, and present the updated summary. When the user approves (e.g. "approved", "looks good", "lgtm"), finalise the review state. The conversation IS the feedback loop.
|
|
@@ -11093,7 +11097,7 @@ function buildConversationContext(thread, currentCommentId) {
|
|
|
11093
11097
|
for (const comment of thread) {
|
|
11094
11098
|
if (comment.id === currentCommentId)
|
|
11095
11099
|
break;
|
|
11096
|
-
if (comment.body
|
|
11100
|
+
if (/hey\s+jedi/i.test(comment.body)) {
|
|
11097
11101
|
inJediConversation = true;
|
|
11098
11102
|
jediSegments.push(comment);
|
|
11099
11103
|
} else if (inJediConversation) {
|
|
@@ -11143,7 +11147,7 @@ function formatResultComment(command, success, summary) {
|
|
|
11143
11147
|
|
|
11144
11148
|
// src/commands/action.ts
|
|
11145
11149
|
function parseComment(comment, isFollowUp) {
|
|
11146
|
-
const match = comment.match(
|
|
11150
|
+
const match = comment.match(/hey\s+jedi\s+(.+)/is);
|
|
11147
11151
|
if (!match) {
|
|
11148
11152
|
if (isFollowUp) {
|
|
11149
11153
|
return {
|
|
@@ -11205,12 +11209,12 @@ function parseComment(comment, isFollowUp) {
|
|
|
11205
11209
|
var actionCommand = defineCommand({
|
|
11206
11210
|
meta: {
|
|
11207
11211
|
name: "action",
|
|
11208
|
-
description: "GitHub Action entry point \u2014 parse
|
|
11212
|
+
description: "GitHub Action entry point \u2014 parse 'Hey Jedi' comment and run workflow"
|
|
11209
11213
|
},
|
|
11210
11214
|
args: {
|
|
11211
11215
|
comment: {
|
|
11212
11216
|
type: "positional",
|
|
11213
|
-
description: "The raw comment body containing
|
|
11217
|
+
description: "The raw comment body containing 'Hey Jedi' mention",
|
|
11214
11218
|
required: true
|
|
11215
11219
|
},
|
|
11216
11220
|
"comment-id": {
|
|
@@ -11248,7 +11252,7 @@ var actionCommand = defineCommand({
|
|
|
11248
11252
|
}
|
|
11249
11253
|
const intent = parseComment(args.comment, isFollowUp);
|
|
11250
11254
|
if (!intent) {
|
|
11251
|
-
consola.error("Could not parse
|
|
11255
|
+
consola.error("Could not parse 'Hey Jedi' intent from comment");
|
|
11252
11256
|
process.exit(1);
|
|
11253
11257
|
}
|
|
11254
11258
|
consola.info(`Parsed intent: ${intent.isFeedback ? "feedback on previous" : intent.command}${intent.fullFlow ? " (full flow)" : ""}`);
|
|
@@ -11487,7 +11491,7 @@ var setupActionCommand = defineCommand({
|
|
|
11487
11491
|
"Jedi GitHub Action Setup",
|
|
11488
11492
|
"",
|
|
11489
11493
|
"Uses: anthropics/claude-code-action@v1",
|
|
11490
|
-
"Trigger:
|
|
11494
|
+
"Trigger: 'Hey Jedi' in issue/PR comments",
|
|
11491
11495
|
"",
|
|
11492
11496
|
"Required secrets (set via GitHub UI or CLI):",
|
|
11493
11497
|
"",
|
|
@@ -11499,11 +11503,11 @@ var setupActionCommand = defineCommand({
|
|
|
11499
11503
|
"",
|
|
11500
11504
|
"Usage: Comment on any issue or PR with:",
|
|
11501
11505
|
"",
|
|
11502
|
-
"
|
|
11503
|
-
"
|
|
11504
|
-
"
|
|
11505
|
-
"
|
|
11506
|
-
"
|
|
11506
|
+
" Hey Jedi plan <description>",
|
|
11507
|
+
" Hey Jedi quick <small fix>",
|
|
11508
|
+
" Hey Jedi do <clickup-ticket-url>",
|
|
11509
|
+
" Hey Jedi review",
|
|
11510
|
+
" Hey Jedi feedback",
|
|
11507
11511
|
"",
|
|
11508
11512
|
"Conversation: Reply to Jedi with feedback to iterate,",
|
|
11509
11513
|
"or say 'approved' to finalise."
|
|
@@ -11514,7 +11518,7 @@ var setupActionCommand = defineCommand({
|
|
|
11514
11518
|
// package.json
|
|
11515
11519
|
var package_default = {
|
|
11516
11520
|
name: "@benzotti/jedi",
|
|
11517
|
-
version: "0.1.
|
|
11521
|
+
version: "0.1.14",
|
|
11518
11522
|
description: "JDI - Context-efficient AI development framework for Claude Code",
|
|
11519
11523
|
type: "module",
|
|
11520
11524
|
bin: {
|
|
@@ -27,6 +27,6 @@ Create an implementation plan using a single planner agent (includes research).
|
|
|
27
27
|
9. **Present summary** (name, objective, task table, files) then ask: _"Provide feedback to refine, or say **approved** to finalise."_
|
|
28
28
|
10. **Review loop**: approval → update state to `"approved"`, confirm. Feedback → revise plan in-place, increment revision, re-present summary. Repeat until approved. This is natural conversation — no separate command needed.
|
|
29
29
|
|
|
30
|
-
Agent base (read FIRST for cache):
|
|
30
|
+
Agent base (read FIRST for cache): .jdi/framework/components/meta/AgentBase.md | Agent spec: .jdi/framework/agents/jdi-planner.md
|
|
31
31
|
|
|
32
32
|
Feature to plan: $ARGUMENTS
|
|
@@ -26,8 +26,8 @@ Execute a PLAN.md with complexity-based routing.
|
|
|
26
26
|
11. **Present summary** (tasks completed, files changed, verification results, deviations) then ask: _"Provide feedback to adjust, or say **approved** to finalise."_
|
|
27
27
|
12. **Review loop**: approval → update state to `"complete"`, suggest commit/PR. Feedback → apply code changes, run tests, increment revision, re-present. Repeat until approved. Natural conversation — no separate command needed.
|
|
28
28
|
|
|
29
|
-
Agent base (read FIRST for cache):
|
|
30
|
-
Orchestration:
|
|
29
|
+
Agent base (read FIRST for cache): .jdi/framework/components/meta/AgentBase.md | Agent specs: .jdi/framework/agents/jdi-backend.md, .jdi/framework/agents/jdi-frontend.md
|
|
30
|
+
Orchestration: .jdi/framework/components/meta/AgentTeamsOrchestration.md | Routing: .jdi/framework/components/meta/ComplexityRouter.md
|
|
31
31
|
|
|
32
32
|
When spawning agents, detect project type and include a `## Project Context` block (type, tech stack, quality gates, working directory) in the spawn prompt. This saves agents 2-3 discovery tool calls.
|
|
33
33
|
|
|
@@ -27,6 +27,6 @@ Remove a git worktree and clean up all associated resources.
|
|
|
27
27
|
7. **Update state**: set `worktree.active: false`, clear `worktree.path`, `worktree.branch` in `.jdi/config/state.yaml`
|
|
28
28
|
8. **Report**: what was removed
|
|
29
29
|
|
|
30
|
-
Reference:
|
|
30
|
+
Reference: .jdi/framework/hooks/jdi-worktree-cleanup.md
|
|
31
31
|
|
|
32
32
|
Worktree to remove: $ARGUMENTS
|