@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 +1 -1
- package/action/workflow-template.yml +10 -9
- package/dist/index.js +59 -12
- package/package.json +1 -1
package/action/action.yml
CHANGED
|
@@ -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
|
|
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
|
+
# 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
|
|
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, '
|
|
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: '
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
-
"
|
|
11507
|
-
"
|
|
11508
|
-
"
|
|
11509
|
-
"
|
|
11510
|
-
"
|
|
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.
|
|
11568
|
+
version: "0.1.15",
|
|
11522
11569
|
description: "JDI - Context-efficient AI development framework for Claude Code",
|
|
11523
11570
|
type: "module",
|
|
11524
11571
|
bin: {
|