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.
@@ -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 a numbered list** to the user:
14
+ 4. **Present options** to the user using the question tool:
15
15
 
16
16
  ```
17
- Found potential matches:
18
- 1. [PROJ-123]: Ticket title here
19
- 2. [PROJ-456]: Another ticket title
20
-
21
- Or create new ticket in:
22
- 3. Backend API (BACK)
23
- 4. Platform Infrastructure (PLAT)
24
- 5. Mobile App (MOB)
25
-
26
- Which one? (enter number)
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 to select a number**
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
- - Ask the user which Linear project to create it in
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 fs5.writeFile(HOOK_PATH, hookContent);
111433
- await fs5.chmod(HOOK_PATH, 493);
111434
- console.log(source_default.green(`✅ Pre-commit hook installed to ${HOOK_PATH}`));
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":"AAgDA,wBAAsB,eAAe,kBAkEpC;AAED,wBAAsB,SAAS,kBAyI9B"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAsEA,wBAAsB,eAAe,kBAmFpC;AAED,wBAAsB,SAAS,kBAyI9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gv-ai",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "Internal CLI tool for GV team - Linear ticket enforcement and automated Sentry issue resolution",
5
5
  "type": "module",
6
6
  "bin": {