@benzotti/jedi 0.1.22 → 0.1.24
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/workflow-template.yml +6 -0
- package/dist/index.js +108 -28
- package/package.json +1 -1
|
@@ -96,6 +96,12 @@ jobs:
|
|
|
96
96
|
grep -qxF "$pattern" .git/info/exclude 2>/dev/null || echo "$pattern" >> .git/info/exclude
|
|
97
97
|
done
|
|
98
98
|
|
|
99
|
+
# Configure git for Jedi commits (used when implementing changes on PR branches)
|
|
100
|
+
- name: Configure git
|
|
101
|
+
run: |
|
|
102
|
+
git config user.name "jedi[bot]"
|
|
103
|
+
git config user.email "jedi[bot]@users.noreply.github.com"
|
|
104
|
+
|
|
99
105
|
# Install Claude Code CLI (required by Jedi for AI invocations)
|
|
100
106
|
- name: Install Claude Code
|
|
101
107
|
run: bun install -g @anthropic-ai/claude-code
|
package/dist/index.js
CHANGED
|
@@ -9301,6 +9301,7 @@ You are Jedi, an AI development framework that uses specialised agents to plan,
|
|
|
9301
9301
|
You are **Jedi**, not Claude. Always refer to yourself as "Jedi" in your responses.
|
|
9302
9302
|
Use "Jedi" in summaries and status updates (e.g. "Jedi has completed..." not "Claude has completed...").
|
|
9303
9303
|
Do not add a signature line \u2014 the response is already branded by the Jedi CLI.
|
|
9304
|
+
Never include meta-commentary about agent activation (e.g. "You are now active as jdi-planner" or "Plan created as requested"). Just give the response directly.
|
|
9304
9305
|
|
|
9305
9306
|
## Framework
|
|
9306
9307
|
|
|
@@ -9328,7 +9329,8 @@ and saving it to \`.jdi/persistence/codebase-index.md\` for future runs.
|
|
|
9328
9329
|
|
|
9329
9330
|
Only do what was explicitly requested. Do not add extras, tooling, or features the user did not ask for.
|
|
9330
9331
|
If something is ambiguous, ask \u2014 do not guess.
|
|
9331
|
-
Use S/M/L t-shirt sizing
|
|
9332
|
+
NEVER use time estimates (minutes, hours, etc). Use S/M/L t-shirt sizing for all task and plan sizing.
|
|
9333
|
+
Follow response templates exactly as instructed in the prompt \u2014 do not improvise the layout or structure.
|
|
9332
9334
|
|
|
9333
9335
|
## Workflow Routing
|
|
9334
9336
|
|
|
@@ -9341,11 +9343,19 @@ Based on the user's request, follow the appropriate workflow:
|
|
|
9341
9343
|
- **PR feedback** ("feedback"): Address review comments using \`.jdi/framework/agents/jdi-pr-feedback.md\`. Extract learnings from reviewer preferences.
|
|
9342
9344
|
- **"do" + ClickUp URL**: Full flow \u2014 plan from ticket, then implement.
|
|
9343
9345
|
|
|
9346
|
+
## Auto-Commit (CI Mode)
|
|
9347
|
+
|
|
9348
|
+
You are running inside a GitHub Action on a PR branch. After implementing or making changes:
|
|
9349
|
+
1. Stage all changed files with \`git add\` (only files you changed \u2014 NOT .jdi/ or .claude/)
|
|
9350
|
+
2. Commit with a conventional commit message (e.g. "feat: implement X")
|
|
9351
|
+
3. Push to the current branch with \`git push\`
|
|
9352
|
+
Do NOT ask the user whether to commit \u2014 just do it. The user will review the PR diff directly.
|
|
9353
|
+
|
|
9344
9354
|
## Iterative Refinement
|
|
9345
9355
|
|
|
9346
9356
|
After completing any workflow, present a summary and ask for feedback.
|
|
9347
9357
|
When the user provides feedback, apply changes incrementally \u2014 do not restart from scratch.
|
|
9348
|
-
When the user approves ("approved", "lgtm", "looks good"), finalise the work.
|
|
9358
|
+
When the user approves ("approved", "lgtm", "looks good"), finalise the work \u2014 commit and push all outstanding changes.
|
|
9349
9359
|
|
|
9350
9360
|
## ClickUp Integration
|
|
9351
9361
|
|
|
@@ -11129,7 +11139,7 @@ async function fetchCommentThread(repo, issueNumber) {
|
|
|
11129
11139
|
author: parsed.author,
|
|
11130
11140
|
body: parsed.body,
|
|
11131
11141
|
createdAt: parsed.createdAt,
|
|
11132
|
-
isJedi: parsed.body.includes("
|
|
11142
|
+
isJedi: parsed.body.includes("Jedi <sup>")
|
|
11133
11143
|
});
|
|
11134
11144
|
} catch {}
|
|
11135
11145
|
}
|
|
@@ -11170,19 +11180,33 @@ function buildConversationContext(thread, currentCommentId) {
|
|
|
11170
11180
|
return { history: lines.join(`
|
|
11171
11181
|
`), previousJediRuns, isFollowUp };
|
|
11172
11182
|
}
|
|
11173
|
-
|
|
11183
|
+
var COMMAND_EMOJI = {
|
|
11184
|
+
plan: "\uD83D\uDD2E",
|
|
11185
|
+
implement: "\u25B6",
|
|
11186
|
+
quick: "\u26A1",
|
|
11187
|
+
review: "\uD83D\uDCA0",
|
|
11188
|
+
feedback: "\uD83C\uDF00",
|
|
11189
|
+
ping: "\uD83D\uDD39"
|
|
11190
|
+
};
|
|
11191
|
+
function formatJediComment(command, response) {
|
|
11192
|
+
const emoji = COMMAND_EMOJI[command] ?? "\u25C8";
|
|
11174
11193
|
return [
|
|
11175
|
-
|
|
11194
|
+
`<h3>${emoji} Jedi <sup>${command}</sup></h3>`,
|
|
11195
|
+
``,
|
|
11196
|
+
`---`,
|
|
11176
11197
|
``,
|
|
11177
11198
|
response
|
|
11178
11199
|
].join(`
|
|
11179
11200
|
`);
|
|
11180
11201
|
}
|
|
11181
11202
|
function formatErrorComment(command, summary) {
|
|
11203
|
+
const emoji = COMMAND_EMOJI[command] ?? "\u25C8";
|
|
11182
11204
|
return [
|
|
11183
|
-
|
|
11205
|
+
`<h3>${emoji} Jedi <sup>${command} \xB7 failed</sup></h3>`,
|
|
11184
11206
|
``,
|
|
11185
|
-
|
|
11207
|
+
`---`,
|
|
11208
|
+
``,
|
|
11209
|
+
summary
|
|
11186
11210
|
].join(`
|
|
11187
11211
|
`);
|
|
11188
11212
|
}
|
|
@@ -11304,9 +11328,14 @@ var actionCommand = defineCommand({
|
|
|
11304
11328
|
if (repo && commentId) {
|
|
11305
11329
|
await reactToComment(repo, commentId, "eyes").catch(() => {});
|
|
11306
11330
|
}
|
|
11331
|
+
const commandLabel = intent.isFeedback ? "feedback" : intent.command;
|
|
11307
11332
|
let placeholderCommentId = null;
|
|
11308
11333
|
if (repo && issueNumber) {
|
|
11309
|
-
const thinkingBody =
|
|
11334
|
+
const thinkingBody = `<h3>\uD83E\uDDE0 Jedi <sup>thinking</sup></h3>
|
|
11335
|
+
|
|
11336
|
+
---
|
|
11337
|
+
|
|
11338
|
+
_Working on it..._`;
|
|
11310
11339
|
placeholderCommentId = await postGitHubComment(repo, issueNumber, thinkingBody).catch(() => null);
|
|
11311
11340
|
}
|
|
11312
11341
|
if (intent.command === "ping") {
|
|
@@ -11336,7 +11365,7 @@ var actionCommand = defineCommand({
|
|
|
11336
11365
|
`| Version | \`${version}\` |`
|
|
11337
11366
|
].join(`
|
|
11338
11367
|
`);
|
|
11339
|
-
const finalBody = formatJediComment(statusBody);
|
|
11368
|
+
const finalBody = formatJediComment("ping", statusBody);
|
|
11340
11369
|
if (repo && placeholderCommentId) {
|
|
11341
11370
|
await updateGitHubComment(repo, placeholderCommentId, finalBody).catch((err) => {
|
|
11342
11371
|
consola.error("Failed to update ping comment:", err);
|
|
@@ -11408,7 +11437,7 @@ var actionCommand = defineCommand({
|
|
|
11408
11437
|
`Never silently make changes without explaining why.`,
|
|
11409
11438
|
``,
|
|
11410
11439
|
`- If the feedback is a **question** ("why did you...", "what about...", "can you explain..."), answer it conversationally first. If the answer implies a change is needed, explain that and then apply it.`,
|
|
11411
|
-
`- If the feedback is an **approval** ("approved", "lgtm", "looks good", "ship it"), finalise the current work \u2014
|
|
11440
|
+
`- If the feedback is an **approval** ("approved", "lgtm", "looks good", "ship it"), finalise the current work \u2014 commit all outstanding changes and push to the current branch. Do NOT ask \u2014 just do it.`,
|
|
11412
11441
|
`- If the feedback is a **refinement** ("change task 2", "use a different approach", "add error handling"), explain what you're changing and why, then apply the changes. Present an updated summary with the full updated plan in a collapsible block:`,
|
|
11413
11442
|
` <details>`,
|
|
11414
11443
|
` <summary>View full plan</summary>`,
|
|
@@ -11443,22 +11472,51 @@ Use the ClickUp ticket above as the primary requirements source.` : ``,
|
|
|
11443
11472
|
`## Scope Rules`,
|
|
11444
11473
|
`IMPORTANT: Only plan what was explicitly requested. Do NOT add extras like testing, linting, formatting, CI, or tooling unless the user asked for them.`,
|
|
11445
11474
|
`If something is ambiguous, ask \u2014 do not guess.`,
|
|
11475
|
+
`NEVER use time estimates (minutes, hours, etc). Use t-shirt sizes: S, M, L. This is mandatory.`,
|
|
11446
11476
|
``,
|
|
11447
11477
|
`## Learnings`,
|
|
11448
11478
|
`Before planning, read .jdi/persistence/learnings.md and .jdi/framework/learnings/ if they exist. Apply any team preferences found.`,
|
|
11449
11479
|
``,
|
|
11450
|
-
`##
|
|
11451
|
-
`Follow the planning workflow in your spec.
|
|
11452
|
-
|
|
11453
|
-
`2
|
|
11454
|
-
|
|
11455
|
-
|
|
11456
|
-
|
|
11457
|
-
|
|
11458
|
-
|
|
11459
|
-
|
|
11460
|
-
|
|
11461
|
-
|
|
11480
|
+
`## Response Format`,
|
|
11481
|
+
`Follow the planning workflow in your spec to write plan files. Then respond with EXACTLY this structure (no deviations, no meta-commentary like "You are now active as..." or "Plan created"):`,
|
|
11482
|
+
``,
|
|
11483
|
+
`1-2 sentence summary of the approach.`,
|
|
11484
|
+
``,
|
|
11485
|
+
`<details>`,
|
|
11486
|
+
`<summary>View full plan</summary>`,
|
|
11487
|
+
``,
|
|
11488
|
+
`## {Plan Name}`,
|
|
11489
|
+
``,
|
|
11490
|
+
`**Overall size:** {S|M|L}`,
|
|
11491
|
+
``,
|
|
11492
|
+
`### Tasks`,
|
|
11493
|
+
``,
|
|
11494
|
+
`| Task | Name | Size | Type | Wave |`,
|
|
11495
|
+
`|------|------|------|------|------|`,
|
|
11496
|
+
`| T1 | {name} | {S|M|L} | auto | 1 |`,
|
|
11497
|
+
``,
|
|
11498
|
+
`### T1 \u2014 {Task Name}`,
|
|
11499
|
+
`**Objective:** {what this achieves}`,
|
|
11500
|
+
``,
|
|
11501
|
+
`**Steps:**`,
|
|
11502
|
+
`1. {step}`,
|
|
11503
|
+
``,
|
|
11504
|
+
`**Done when:** {completion criterion}`,
|
|
11505
|
+
``,
|
|
11506
|
+
`---`,
|
|
11507
|
+
`(repeat for each task)`,
|
|
11508
|
+
``,
|
|
11509
|
+
`### Verification`,
|
|
11510
|
+
`- [ ] {check 1}`,
|
|
11511
|
+
`- [ ] {check 2}`,
|
|
11512
|
+
``,
|
|
11513
|
+
`</details>`,
|
|
11514
|
+
``,
|
|
11515
|
+
`**Optional additions** \u2014 not included in this plan:`,
|
|
11516
|
+
`1. {suggestion}`,
|
|
11517
|
+
`2. {suggestion}`,
|
|
11518
|
+
``,
|
|
11519
|
+
`Any changes before implementation?`
|
|
11462
11520
|
].join(`
|
|
11463
11521
|
`);
|
|
11464
11522
|
break;
|
|
@@ -11472,7 +11530,15 @@ Use the ClickUp ticket above as the primary requirements source.` : ``,
|
|
|
11472
11530
|
historyBlock,
|
|
11473
11531
|
`## Task`,
|
|
11474
11532
|
`Execute the current implementation plan. Read state.yaml for the active plan path.`,
|
|
11475
|
-
`Follow the implement-plan orchestration
|
|
11533
|
+
`Follow the implement-plan orchestration.`,
|
|
11534
|
+
``,
|
|
11535
|
+
`## Auto-Commit`,
|
|
11536
|
+
`You are running inside a GitHub Action on a PR branch. After implementing all changes:`,
|
|
11537
|
+
`1. Stage all changed files with \`git add\` (only files you changed \u2014 NOT .jdi/ or .claude/)`,
|
|
11538
|
+
`2. Commit with a conventional commit message (e.g. "feat: implement X")`,
|
|
11539
|
+
`3. Push to the current branch with \`git push\``,
|
|
11540
|
+
`Do NOT ask the user \u2014 just commit and push. The user will review the PR diff directly.`,
|
|
11541
|
+
`Present a summary of what was implemented and committed.`
|
|
11476
11542
|
].join(`
|
|
11477
11543
|
`);
|
|
11478
11544
|
break;
|
|
@@ -11484,7 +11550,14 @@ Use the ClickUp ticket above as the primary requirements source.` : ``,
|
|
|
11484
11550
|
historyBlock,
|
|
11485
11551
|
`## Task`,
|
|
11486
11552
|
`Make this quick change: ${intent.description}`,
|
|
11487
|
-
`Keep changes minimal and focused
|
|
11553
|
+
`Keep changes minimal and focused.`,
|
|
11554
|
+
``,
|
|
11555
|
+
`## Auto-Commit`,
|
|
11556
|
+
`You are running inside a GitHub Action on a PR branch. After making changes:`,
|
|
11557
|
+
`1. Stage all changed files with \`git add\` (only files you changed \u2014 NOT .jdi/ or .claude/)`,
|
|
11558
|
+
`2. Commit with a conventional commit message`,
|
|
11559
|
+
`3. Push to the current branch with \`git push\``,
|
|
11560
|
+
`Do NOT ask the user \u2014 just commit and push. Present what you changed.`
|
|
11488
11561
|
].join(`
|
|
11489
11562
|
`);
|
|
11490
11563
|
break;
|
|
@@ -11545,7 +11618,14 @@ Use the ClickUp ticket above as the primary requirements source.` : ``,
|
|
|
11545
11618
|
``,
|
|
11546
11619
|
`## Task`,
|
|
11547
11620
|
`Execute the most recently created implementation plan in .jdi/plans/.`,
|
|
11548
|
-
`Follow the implement-plan orchestration
|
|
11621
|
+
`Follow the implement-plan orchestration.`,
|
|
11622
|
+
``,
|
|
11623
|
+
`## Auto-Commit`,
|
|
11624
|
+
`You are running inside a GitHub Action on a PR branch. After implementing all changes:`,
|
|
11625
|
+
`1. Stage all changed files with \`git add\` (only files you changed \u2014 NOT .jdi/ or .claude/)`,
|
|
11626
|
+
`2. Commit with a conventional commit message (e.g. "feat: implement X")`,
|
|
11627
|
+
`3. Push to the current branch with \`git push\``,
|
|
11628
|
+
`Do NOT ask the user \u2014 just commit and push. Present a summary of what was implemented and committed.`
|
|
11549
11629
|
].join(`
|
|
11550
11630
|
`);
|
|
11551
11631
|
const implResult = await spawnClaude(implementPrompt, {
|
|
@@ -11576,11 +11656,11 @@ Use the ClickUp ticket above as the primary requirements source.` : ``,
|
|
|
11576
11656
|
const actionLabel = intent.isFeedback ? "feedback" : intent.command;
|
|
11577
11657
|
let commentBody;
|
|
11578
11658
|
if (success && fullResponse) {
|
|
11579
|
-
commentBody = formatJediComment(fullResponse);
|
|
11659
|
+
commentBody = formatJediComment(actionLabel, fullResponse);
|
|
11580
11660
|
} else if (!success) {
|
|
11581
11661
|
commentBody = formatErrorComment(actionLabel, "Check workflow logs for details.");
|
|
11582
11662
|
} else {
|
|
11583
|
-
commentBody = formatJediComment(`Executed \`${actionLabel}\` successfully.`);
|
|
11663
|
+
commentBody = formatJediComment(actionLabel, `Executed \`${actionLabel}\` successfully.`);
|
|
11584
11664
|
}
|
|
11585
11665
|
if (placeholderCommentId) {
|
|
11586
11666
|
await updateGitHubComment(repo, placeholderCommentId, commentBody).catch((err) => {
|
|
@@ -11662,7 +11742,7 @@ var setupActionCommand = defineCommand({
|
|
|
11662
11742
|
// package.json
|
|
11663
11743
|
var package_default = {
|
|
11664
11744
|
name: "@benzotti/jedi",
|
|
11665
|
-
version: "0.1.
|
|
11745
|
+
version: "0.1.24",
|
|
11666
11746
|
description: "JDI - Context-efficient AI development framework for Claude Code",
|
|
11667
11747
|
type: "module",
|
|
11668
11748
|
bin: {
|