@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.
@@ -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, never time estimates.
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("### \u2694\uFE0F Jedi")
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
- function formatJediComment(response) {
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
- `### \u2694\uFE0F Jedi`,
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
- `### \u2694\uFE0F Jedi`,
11205
+ `<h3>${emoji} Jedi <sup>${command} \xB7 failed</sup></h3>`,
11184
11206
  ``,
11185
- `**${command} failed.** ${summary}`
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 = formatJediComment("_Thinking..._");
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 create commits and/or a PR as appropriate.`,
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
- `## Presentation`,
11451
- `Follow the planning workflow in your spec. When presenting the plan:`,
11452
- `1. Start with a brief summary of the approach`,
11453
- `2. Include the FULL plan in a collapsible details block using this format:`,
11454
- ` <details>`,
11455
- ` <summary>View full plan</summary>`,
11456
- ` `,
11457
- ` [full plan content here as markdown]`,
11458
- ` `,
11459
- ` </details>`,
11460
- `3. After the plan, suggest 3-5 optional additions the user might want (e.g. "Would you also like testing? linting? state management?"). These are NOT part of the plan.`,
11461
- `4. Ask for feedback. The user will respond via another GitHub comment.`
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. Present a summary when complete and ask for feedback.`
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. Commit when done. Present what you changed.`
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. Present a summary when complete.`
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.22",
11745
+ version: "0.1.24",
11666
11746
  description: "JDI - Context-efficient AI development framework for Claude Code",
11667
11747
  type: "module",
11668
11748
  bin: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benzotti/jedi",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "JDI - Context-efficient AI development framework for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {