@benzotti/jedi 0.1.13 → 0.1.15

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
@@ -17,7 +17,7 @@ inputs:
17
17
  trigger_phrase:
18
18
  description: 'The trigger phrase to look for in comments'
19
19
  required: false
20
- default: '@jedi'
20
+ default: 'Hey Jedi'
21
21
  jedi_version:
22
22
  description: 'Version of @benzotti/jedi to install for init'
23
23
  required: false
@@ -9,12 +9,13 @@
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 @jedi followed by a command:
13
- # @jedi plan <description> — Create an implementation plan
14
- # @jedi quick <description> — Make a small, focused change
15
- # @jedi review — Review the current PR
16
- # @jedi feedback — Address PR review comments
17
- # @jedi do <clickup-ticket-url> — Full flow: plan + implement from ticket
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
+ # Hey Jedi ping — Check framework status
18
19
  #
19
20
  # Conversation: Jedi supports back-and-forth iteration. After Jedi responds,
20
21
  # reply with feedback to refine, or say "approved" to finalise.
@@ -39,11 +40,11 @@ permissions:
39
40
  id-token: write
40
41
 
41
42
  jobs:
42
- # ── Triggered by @jedi comments on issues/PRs ──
43
+ # ── Triggered by "Hey Jedi" comments on issues/PRs ──
43
44
  jedi:
44
45
  if: >-
45
46
  (github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment')
46
- && contains(github.event.comment.body, '@jedi')
47
+ && contains(github.event.comment.body, 'Hey Jedi')
47
48
  runs-on: ubuntu-latest
48
49
  steps:
49
50
  - uses: actions/checkout@v4
@@ -94,7 +95,7 @@ jobs:
94
95
  uses: anthropics/claude-code-action@v1
95
96
  with:
96
97
  anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
97
- trigger_phrase: '@jedi'
98
+ trigger_phrase: 'Hey Jedi'
98
99
  bot_name: 'jedi[bot]'
99
100
  env:
100
101
  CLICKUP_API_TOKEN: ${{ secrets.CLICKUP_API_TOKEN }}
package/dist/index.js CHANGED
@@ -11097,7 +11097,7 @@ function buildConversationContext(thread, currentCommentId) {
11097
11097
  for (const comment of thread) {
11098
11098
  if (comment.id === currentCommentId)
11099
11099
  break;
11100
- if (comment.body.includes("@jedi")) {
11100
+ if (/hey\s+jedi/i.test(comment.body)) {
11101
11101
  inJediConversation = true;
11102
11102
  jediSegments.push(comment);
11103
11103
  } else if (inJediConversation) {
@@ -11147,7 +11147,7 @@ function formatResultComment(command, success, summary) {
11147
11147
 
11148
11148
  // src/commands/action.ts
11149
11149
  function parseComment(comment, isFollowUp) {
11150
- const match = comment.match(/@jedi\s+(.+)/is);
11150
+ const match = comment.match(/hey\s+jedi\s+(.+)/is);
11151
11151
  if (!match) {
11152
11152
  if (isFollowUp) {
11153
11153
  return {
@@ -11165,6 +11165,9 @@ function parseComment(comment, isFollowUp) {
11165
11165
  const clickUpUrl = clickUpMatch ? clickUpMatch[1] : null;
11166
11166
  const description = body.replace(/(https?:\/\/[^\s]*clickup\.com\/t\/[a-z0-9]+)/i, "").replace(/\s+/g, " ").trim();
11167
11167
  const lower = body.toLowerCase();
11168
+ if (lower.startsWith("ping") || lower.startsWith("status")) {
11169
+ return { command: "ping", description: "", clickUpUrl: null, fullFlow: false, isFeedback: false };
11170
+ }
11168
11171
  if (lower.startsWith("plan ")) {
11169
11172
  return { command: "plan", description, clickUpUrl, fullFlow: false, isFeedback: false };
11170
11173
  }
@@ -11209,12 +11212,12 @@ function parseComment(comment, isFollowUp) {
11209
11212
  var actionCommand = defineCommand({
11210
11213
  meta: {
11211
11214
  name: "action",
11212
- description: "GitHub Action entry point \u2014 parse @jedi comment and run workflow"
11215
+ description: "GitHub Action entry point \u2014 parse 'Hey Jedi' comment and run workflow"
11213
11216
  },
11214
11217
  args: {
11215
11218
  comment: {
11216
11219
  type: "positional",
11217
- description: "The raw comment body containing @jedi mention",
11220
+ description: "The raw comment body containing 'Hey Jedi' mention",
11218
11221
  required: true
11219
11222
  },
11220
11223
  "comment-id": {
@@ -11252,13 +11255,56 @@ var actionCommand = defineCommand({
11252
11255
  }
11253
11256
  const intent = parseComment(args.comment, isFollowUp);
11254
11257
  if (!intent) {
11255
- consola.error("Could not parse @jedi intent from comment");
11258
+ consola.error("Could not parse 'Hey Jedi' intent from comment");
11256
11259
  process.exit(1);
11257
11260
  }
11258
11261
  consola.info(`Parsed intent: ${intent.isFeedback ? "feedback on previous" : intent.command}${intent.fullFlow ? " (full flow)" : ""}`);
11259
11262
  if (repo && commentId) {
11260
11263
  await reactToComment(repo, commentId, "eyes").catch(() => {});
11261
11264
  }
11265
+ if (intent.command === "ping") {
11266
+ const { existsSync: existsSync13 } = await import("fs");
11267
+ const { join: join12 } = await import("path");
11268
+ const frameworkExists = existsSync13(join12(cwd, ".jdi/framework"));
11269
+ const claudeMdExists = existsSync13(join12(cwd, ".claude/CLAUDE.md"));
11270
+ const stateExists = existsSync13(join12(cwd, ".jdi/config/state.yaml"));
11271
+ const learningsExists = existsSync13(join12(cwd, ".jdi/persistence/learnings.md"));
11272
+ let version = "unknown";
11273
+ try {
11274
+ const pkgPath = join12(cwd, "node_modules/@benzotti/jedi/package.json");
11275
+ if (existsSync13(pkgPath)) {
11276
+ const pkg = JSON.parse(await Bun.file(pkgPath).text());
11277
+ version = pkg.version;
11278
+ }
11279
+ } catch {}
11280
+ const lines = [
11281
+ `### Jedi Framework Status`,
11282
+ ``,
11283
+ `| Component | Status |`,
11284
+ `|-----------|--------|`,
11285
+ `| Framework files | ${frameworkExists ? "found" : "missing"} |`,
11286
+ `| CLAUDE.md | ${claudeMdExists ? "found" : "missing"} |`,
11287
+ `| State config | ${stateExists ? "found" : "missing"} |`,
11288
+ `| Learnings | ${learningsExists ? "found" : "missing"} |`,
11289
+ `| Version | \`${version}\` |`,
11290
+ ``,
11291
+ `---`,
11292
+ `_Powered by [@benzotti/jedi](https://github.com/zottiben/jedi)_`
11293
+ ];
11294
+ if (repo && issueNumber) {
11295
+ await postGitHubComment(repo, issueNumber, lines.join(`
11296
+ `)).catch((err) => {
11297
+ consola.error("Failed to post ping comment:", err);
11298
+ });
11299
+ } else {
11300
+ console.log(lines.join(`
11301
+ `));
11302
+ }
11303
+ if (repo && commentId) {
11304
+ await reactToComment(repo, commentId, "+1").catch(() => {});
11305
+ }
11306
+ return;
11307
+ }
11262
11308
  const storage = await createStorage(cwd);
11263
11309
  const { learningsPath, codebaseIndexPath } = await loadPersistedState(cwd, storage);
11264
11310
  let ticketContext = "";
@@ -11491,7 +11537,7 @@ var setupActionCommand = defineCommand({
11491
11537
  "Jedi GitHub Action Setup",
11492
11538
  "",
11493
11539
  "Uses: anthropics/claude-code-action@v1",
11494
- "Trigger: @jedi in issue/PR comments",
11540
+ "Trigger: 'Hey Jedi' in issue/PR comments",
11495
11541
  "",
11496
11542
  "Required secrets (set via GitHub UI or CLI):",
11497
11543
  "",
@@ -11503,11 +11549,12 @@ var setupActionCommand = defineCommand({
11503
11549
  "",
11504
11550
  "Usage: Comment on any issue or PR with:",
11505
11551
  "",
11506
- " @jedi plan <description>",
11507
- " @jedi quick <small fix>",
11508
- " @jedi do <clickup-ticket-url>",
11509
- " @jedi review",
11510
- " @jedi feedback",
11552
+ " Hey Jedi plan <description>",
11553
+ " Hey Jedi quick <small fix>",
11554
+ " Hey Jedi do <clickup-ticket-url>",
11555
+ " Hey Jedi review",
11556
+ " Hey Jedi feedback",
11557
+ " Hey Jedi ping",
11511
11558
  "",
11512
11559
  "Conversation: Reply to Jedi with feedback to iterate,",
11513
11560
  "or say 'approved' to finalise."
@@ -11518,7 +11565,7 @@ var setupActionCommand = defineCommand({
11518
11565
  // package.json
11519
11566
  var package_default = {
11520
11567
  name: "@benzotti/jedi",
11521
- version: "0.1.13",
11568
+ version: "0.1.15",
11522
11569
  description: "JDI - Context-efficient AI development framework for Claude Code",
11523
11570
  type: "module",
11524
11571
  bin: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benzotti/jedi",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "JDI - Context-efficient AI development framework for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {