gv-ai 1.1.2 → 1.1.3
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/.opencode/memory/2026-01-18.logfmt +1 -0
- package/AGENTS.md +26 -13
- package/dist/cli.js +38 -3
- package/dist/commands/review.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ts=2026-01-18T21:37:13.278Z type=context scope=project content="User has set up the work-logger agent for daily standup logging." tags=work-logger,standup,agent
|
package/AGENTS.md
CHANGED
|
@@ -11,22 +11,23 @@ When the user requests implementation work:
|
|
|
11
11
|
1. **Ask what they're working on** (if not clear from context)
|
|
12
12
|
2. **Search Linear for relevant tickets** using Linear MCP tools
|
|
13
13
|
3. **Fetch all Linear projects** to show available options
|
|
14
|
-
4. **Present
|
|
14
|
+
4. **Present options** to the user using the question tool:
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
Use the question tool to ask:
|
|
18
|
+
- header: "Select Ticket"
|
|
19
|
+
- question: "Which ticket should I associate this work with?"
|
|
20
|
+
- options: [
|
|
21
|
+
{ label: "[PROJ-123]", description: "Ticket title here" },
|
|
22
|
+
{ label: "[PROJ-456]", description: "Another ticket title" },
|
|
23
|
+
{ label: "Backend API", description: "Create new ticket in BACK project" },
|
|
24
|
+
{ label: "Platform Infrastructure", description: "Create new ticket in PLAT project" },
|
|
25
|
+
{ label: "Mobile App", description: "Create new ticket in MOB project" }
|
|
26
|
+
]
|
|
27
|
+
- multiple: false
|
|
27
28
|
```
|
|
28
29
|
|
|
29
|
-
5. **Wait for user
|
|
30
|
+
5. **Wait for user's answer**
|
|
30
31
|
6. **Confirm the selection** before proceeding with any implementation
|
|
31
32
|
|
|
32
33
|
### Free Actions (No Ticket Required)
|
|
@@ -75,7 +76,19 @@ If work touches multiple features or areas:
|
|
|
75
76
|
### Ad-hoc Tickets
|
|
76
77
|
|
|
77
78
|
When creating a new ad-hoc ticket:
|
|
78
|
-
-
|
|
79
|
+
- Use the question tool to ask which project to create it in:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Use the question tool to ask:
|
|
83
|
+
- header: "Create Ticket"
|
|
84
|
+
- question: "Which project should I create this ticket in?"
|
|
85
|
+
- options: [
|
|
86
|
+
{ label: "Backend API", description: "Create in BACK project" },
|
|
87
|
+
{ label: "Platform Infrastructure", description: "Create in PLAT project" },
|
|
88
|
+
{ label: "Mobile App", description: "Create in MOB project" }
|
|
89
|
+
]
|
|
90
|
+
- multiple: false
|
|
91
|
+
```
|
|
79
92
|
- Use the user's description as the ticket title
|
|
80
93
|
- Automatically add an "ad-hoc" label
|
|
81
94
|
- Assign the ticket to the current user (if possible)
|
package/dist/cli.js
CHANGED
|
@@ -111354,6 +111354,27 @@ Output Format:
|
|
|
111354
111354
|
- A structured list of issues found.
|
|
111355
111355
|
- Format: - [SEVERITY] [File]: Issue (Found by: ModelName)
|
|
111356
111356
|
- End with a Verdict: "GO" or "NO-GO" (with reasons).`;
|
|
111357
|
+
async function isHuskyInstalled() {
|
|
111358
|
+
try {
|
|
111359
|
+
if (await fs5.access(".husky", fs5.constants.F_OK).then(() => true).catch(() => false)) {
|
|
111360
|
+
return true;
|
|
111361
|
+
}
|
|
111362
|
+
const pkgRaw = await fs5.readFile("package.json", "utf-8").catch(() => null);
|
|
111363
|
+
if (pkgRaw) {
|
|
111364
|
+
const pkg = JSON.parse(pkgRaw);
|
|
111365
|
+
if (pkg.dependencies?.husky || pkg.devDependencies?.husky) {
|
|
111366
|
+
return true;
|
|
111367
|
+
}
|
|
111368
|
+
}
|
|
111369
|
+
const hookRaw = await fs5.readFile(HOOK_PATH, "utf-8").catch(() => null);
|
|
111370
|
+
if (hookRaw && hookRaw.includes("husky.sh")) {
|
|
111371
|
+
return true;
|
|
111372
|
+
}
|
|
111373
|
+
return false;
|
|
111374
|
+
} catch {
|
|
111375
|
+
return false;
|
|
111376
|
+
}
|
|
111377
|
+
}
|
|
111357
111378
|
async function setupReviewHook() {
|
|
111358
111379
|
console.log(source_default.bold.blue(`
|
|
111359
111380
|
\uD83E\uDD16 AI Pre-commit Review Setup
|
|
@@ -111429,9 +111450,23 @@ else
|
|
|
111429
111450
|
npx gv-ai review run
|
|
111430
111451
|
fi
|
|
111431
111452
|
`;
|
|
111432
|
-
await
|
|
111433
|
-
|
|
111434
|
-
|
|
111453
|
+
const useHusky = await isHuskyInstalled();
|
|
111454
|
+
if (useHusky) {
|
|
111455
|
+
try {
|
|
111456
|
+
await fs5.mkdir(".husky", { recursive: true });
|
|
111457
|
+
} catch (e) {}
|
|
111458
|
+
const huskyHookContent = `#!/usr/bin/env sh
|
|
111459
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
|
111460
|
+
|
|
111461
|
+
${hookContent}`;
|
|
111462
|
+
await fs5.writeFile(".husky/pre-commit", huskyHookContent);
|
|
111463
|
+
await fs5.chmod(".husky/pre-commit", 493);
|
|
111464
|
+
console.log(source_default.green(`✅ Pre-commit hook installed to .husky/pre-commit (husky detected)`));
|
|
111465
|
+
} else {
|
|
111466
|
+
await fs5.writeFile(HOOK_PATH, hookContent);
|
|
111467
|
+
await fs5.chmod(HOOK_PATH, 493);
|
|
111468
|
+
console.log(source_default.green(`✅ Pre-commit hook installed to ${HOOK_PATH}`));
|
|
111469
|
+
}
|
|
111435
111470
|
}
|
|
111436
111471
|
async function runReview() {
|
|
111437
111472
|
process.on("SIGINT", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAsEA,wBAAsB,eAAe,kBAmFpC;AAED,wBAAsB,SAAS,kBAyI9B"}
|