geeto 0.6.6 → 0.9.0

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.
Files changed (198) hide show
  1. package/README.md +23 -9
  2. package/lib/api/copilot-adapter.d.ts +14 -5
  3. package/lib/api/copilot-adapter.d.ts.map +1 -1
  4. package/lib/api/copilot-adapter.js +15 -21
  5. package/lib/api/copilot-adapter.js.map +1 -1
  6. package/lib/api/copilot-sdk.d.ts +3 -16
  7. package/lib/api/copilot-sdk.d.ts.map +1 -1
  8. package/lib/api/copilot-sdk.js +166 -456
  9. package/lib/api/copilot-sdk.js.map +1 -1
  10. package/lib/api/copilot.d.ts +3 -4
  11. package/lib/api/copilot.d.ts.map +1 -1
  12. package/lib/api/copilot.js +28 -28
  13. package/lib/api/copilot.js.map +1 -1
  14. package/lib/api/gemini-sdk.d.ts.map +1 -1
  15. package/lib/api/gemini-sdk.js +11 -77
  16. package/lib/api/gemini-sdk.js.map +1 -1
  17. package/lib/api/gemini.d.ts +2 -2
  18. package/lib/api/gemini.d.ts.map +1 -1
  19. package/lib/api/gemini.js +24 -19
  20. package/lib/api/gemini.js.map +1 -1
  21. package/lib/api/gitlab.d.ts +80 -0
  22. package/lib/api/gitlab.d.ts.map +1 -0
  23. package/lib/api/gitlab.js +192 -0
  24. package/lib/api/gitlab.js.map +1 -0
  25. package/lib/api/openrouter-sdk.d.ts.map +1 -1
  26. package/lib/api/openrouter-sdk.js +11 -76
  27. package/lib/api/openrouter-sdk.js.map +1 -1
  28. package/lib/api/openrouter.d.ts.map +1 -1
  29. package/lib/api/openrouter.js +2 -16
  30. package/lib/api/openrouter.js.map +1 -1
  31. package/lib/api/platform.d.ts +78 -0
  32. package/lib/api/platform.d.ts.map +1 -0
  33. package/lib/api/platform.js +218 -0
  34. package/lib/api/platform.js.map +1 -0
  35. package/lib/cli/input.d.ts +2 -2
  36. package/lib/cli/input.d.ts.map +1 -1
  37. package/lib/cli/input.js +23 -27
  38. package/lib/cli/input.js.map +1 -1
  39. package/lib/cli/menu.d.ts +1 -1
  40. package/lib/cli/menu.d.ts.map +1 -1
  41. package/lib/cli/menu.js +123 -100
  42. package/lib/cli/menu.js.map +1 -1
  43. package/lib/core/copilot-setup.d.ts +8 -7
  44. package/lib/core/copilot-setup.d.ts.map +1 -1
  45. package/lib/core/copilot-setup.js +59 -230
  46. package/lib/core/copilot-setup.js.map +1 -1
  47. package/lib/core/gemini-setup.js +7 -7
  48. package/lib/core/gemini-setup.js.map +1 -1
  49. package/lib/core/gitlab-setup.d.ts +5 -0
  50. package/lib/core/gitlab-setup.d.ts.map +1 -0
  51. package/lib/core/gitlab-setup.js +85 -0
  52. package/lib/core/gitlab-setup.js.map +1 -0
  53. package/lib/core/openrouter-setup.d.ts.map +1 -1
  54. package/lib/core/openrouter-setup.js +17 -0
  55. package/lib/core/openrouter-setup.js.map +1 -1
  56. package/lib/index.js +501 -704
  57. package/lib/index.js.map +1 -1
  58. package/lib/types/index.d.ts +10 -6
  59. package/lib/types/index.d.ts.map +1 -1
  60. package/lib/utils/ai-provider-helpers.d.ts +5 -0
  61. package/lib/utils/ai-provider-helpers.d.ts.map +1 -0
  62. package/lib/utils/ai-provider-helpers.js +23 -0
  63. package/lib/utils/ai-provider-helpers.js.map +1 -0
  64. package/lib/utils/ai-text.d.ts +23 -0
  65. package/lib/utils/ai-text.d.ts.map +1 -0
  66. package/lib/utils/ai-text.js +57 -0
  67. package/lib/utils/ai-text.js.map +1 -0
  68. package/lib/utils/ai-workflow.d.ts +18 -0
  69. package/lib/utils/ai-workflow.d.ts.map +1 -0
  70. package/lib/utils/ai-workflow.js +66 -0
  71. package/lib/utils/ai-workflow.js.map +1 -0
  72. package/lib/utils/branch-naming.d.ts.map +1 -1
  73. package/lib/utils/branch-naming.js +1 -3
  74. package/lib/utils/branch-naming.js.map +1 -1
  75. package/lib/utils/config.d.ts +13 -1
  76. package/lib/utils/config.d.ts.map +1 -1
  77. package/lib/utils/config.js +38 -1
  78. package/lib/utils/config.js.map +1 -1
  79. package/lib/utils/display.d.ts.map +1 -1
  80. package/lib/utils/display.js +4 -3
  81. package/lib/utils/display.js.map +1 -1
  82. package/lib/utils/git-ai.js +13 -13
  83. package/lib/utils/git-ai.js.map +1 -1
  84. package/lib/utils/git-errors.d.ts.map +1 -1
  85. package/lib/utils/git-errors.js +2 -6
  86. package/lib/utils/git-errors.js.map +1 -1
  87. package/lib/utils/git.d.ts.map +1 -1
  88. package/lib/utils/git.js +5 -0
  89. package/lib/utils/git.js.map +1 -1
  90. package/lib/utils/github-helpers.d.ts +33 -0
  91. package/lib/utils/github-helpers.d.ts.map +1 -0
  92. package/lib/utils/github-helpers.js +101 -0
  93. package/lib/utils/github-helpers.js.map +1 -0
  94. package/lib/utils/prompt-loader.d.ts +9 -0
  95. package/lib/utils/prompt-loader.d.ts.map +1 -0
  96. package/lib/utils/prompt-loader.js +42 -0
  97. package/lib/utils/prompt-loader.js.map +1 -0
  98. package/lib/utils/prompts-embedded.d.ts +2 -0
  99. package/lib/utils/prompts-embedded.d.ts.map +1 -0
  100. package/lib/utils/prompts-embedded.js +255 -0
  101. package/lib/utils/prompts-embedded.js.map +1 -0
  102. package/lib/utils/scramble.d.ts +9 -86
  103. package/lib/utils/scramble.d.ts.map +1 -1
  104. package/lib/utils/scramble.js +27 -279
  105. package/lib/utils/scramble.js.map +1 -1
  106. package/lib/version.d.ts +1 -1
  107. package/lib/version.js +1 -1
  108. package/lib/workflows/alias.d.ts.map +1 -1
  109. package/lib/workflows/alias.js +1 -0
  110. package/lib/workflows/alias.js.map +1 -1
  111. package/lib/workflows/amend.d.ts.map +1 -1
  112. package/lib/workflows/amend.js +1 -5
  113. package/lib/workflows/amend.js.map +1 -1
  114. package/lib/workflows/branch-helpers.d.ts.map +1 -1
  115. package/lib/workflows/branch-helpers.js +0 -1
  116. package/lib/workflows/branch-helpers.js.map +1 -1
  117. package/lib/workflows/commit.d.ts.map +1 -1
  118. package/lib/workflows/commit.js +160 -187
  119. package/lib/workflows/commit.js.map +1 -1
  120. package/lib/workflows/doctor.d.ts +7 -0
  121. package/lib/workflows/doctor.d.ts.map +1 -0
  122. package/lib/workflows/doctor.js +284 -0
  123. package/lib/workflows/doctor.js.map +1 -0
  124. package/lib/workflows/issue.d.ts +1 -1
  125. package/lib/workflows/issue.d.ts.map +1 -1
  126. package/lib/workflows/issue.js +28 -115
  127. package/lib/workflows/issue.js.map +1 -1
  128. package/lib/workflows/main-helpers.d.ts +34 -0
  129. package/lib/workflows/main-helpers.d.ts.map +1 -0
  130. package/lib/workflows/main-helpers.js +346 -0
  131. package/lib/workflows/main-helpers.js.map +1 -0
  132. package/lib/workflows/main-steps.d.ts.map +1 -1
  133. package/lib/workflows/main-steps.js +9 -134
  134. package/lib/workflows/main-steps.js.map +1 -1
  135. package/lib/workflows/main.d.ts +2 -6
  136. package/lib/workflows/main.d.ts.map +1 -1
  137. package/lib/workflows/main.js +44 -381
  138. package/lib/workflows/main.js.map +1 -1
  139. package/lib/workflows/pr.d.ts +2 -2
  140. package/lib/workflows/pr.d.ts.map +1 -1
  141. package/lib/workflows/pr.js +49 -137
  142. package/lib/workflows/pr.js.map +1 -1
  143. package/lib/workflows/prune.d.ts.map +1 -1
  144. package/lib/workflows/prune.js +2 -10
  145. package/lib/workflows/prune.js.map +1 -1
  146. package/lib/workflows/pull.d.ts.map +1 -1
  147. package/lib/workflows/pull.js +2 -24
  148. package/lib/workflows/pull.js.map +1 -1
  149. package/lib/workflows/release-merge.d.ts +12 -0
  150. package/lib/workflows/release-merge.d.ts.map +1 -0
  151. package/lib/workflows/release-merge.js +569 -0
  152. package/lib/workflows/release-merge.js.map +1 -0
  153. package/lib/workflows/release-notes.d.ts +13 -0
  154. package/lib/workflows/release-notes.d.ts.map +1 -0
  155. package/lib/workflows/release-notes.js +141 -0
  156. package/lib/workflows/release-notes.js.map +1 -0
  157. package/lib/workflows/release-recover.d.ts +5 -0
  158. package/lib/workflows/release-recover.d.ts.map +1 -0
  159. package/lib/workflows/release-recover.js +137 -0
  160. package/lib/workflows/release-recover.js.map +1 -0
  161. package/lib/workflows/release-sync.d.ts +7 -0
  162. package/lib/workflows/release-sync.d.ts.map +1 -0
  163. package/lib/workflows/release-sync.js +321 -0
  164. package/lib/workflows/release-sync.js.map +1 -0
  165. package/lib/workflows/release-utils.d.ts +36 -0
  166. package/lib/workflows/release-utils.d.ts.map +1 -0
  167. package/lib/workflows/release-utils.js +150 -0
  168. package/lib/workflows/release-utils.js.map +1 -0
  169. package/lib/workflows/release.d.ts.map +1 -1
  170. package/lib/workflows/release.js +92 -719
  171. package/lib/workflows/release.js.map +1 -1
  172. package/lib/workflows/repo-settings.d.ts +2 -2
  173. package/lib/workflows/repo-settings.d.ts.map +1 -1
  174. package/lib/workflows/repo-settings.js +33 -24
  175. package/lib/workflows/repo-settings.js.map +1 -1
  176. package/lib/workflows/reword.d.ts.map +1 -1
  177. package/lib/workflows/reword.js +154 -151
  178. package/lib/workflows/reword.js.map +1 -1
  179. package/lib/workflows/security-gate.d.ts.map +1 -1
  180. package/lib/workflows/security-gate.js +15 -75
  181. package/lib/workflows/security-gate.js.map +1 -1
  182. package/lib/workflows/settings.d.ts +2 -1
  183. package/lib/workflows/settings.d.ts.map +1 -1
  184. package/lib/workflows/settings.js +289 -19
  185. package/lib/workflows/settings.js.map +1 -1
  186. package/lib/workflows/trello-menu.d.ts +2 -5
  187. package/lib/workflows/trello-menu.d.ts.map +1 -1
  188. package/lib/workflows/trello-menu.js +67 -228
  189. package/lib/workflows/trello-menu.js.map +1 -1
  190. package/package.json +3 -6
  191. package/prompts/branch-name-prompt.md +4 -0
  192. package/prompts/commit-message-prompt.md +12 -0
  193. package/prompts/issue-prompt.md +19 -0
  194. package/prompts/issue-review.with-context.prompt.yml +77 -0
  195. package/prompts/pr-prompt.md +14 -0
  196. package/prompts/release-notes-prompt.md +35 -0
  197. package/prompts/repo-description-prompt.md +1 -0
  198. package/prompts/security-gate-prompt.md +80 -0
@@ -0,0 +1,101 @@
1
+ import { hasGithubConfig, hasGitlabConfig } from './config.js';
2
+ import { execSilent } from './exec.js';
3
+ import { log } from './logging.js';
4
+ import { parseRepoFromUrl } from '../api/github.js';
5
+ import { detectPlatform, parseRemoteUrl } from '../api/platform.js';
6
+ import { setupGithubConfigInteractive } from '../core/github-setup.js';
7
+ import { setupGitlabConfigInteractive } from '../core/gitlab-setup.js';
8
+ /**
9
+ * Ensure GitHub config is available, prompting interactive setup if missing.
10
+ * Returns true if config is available, false if setup was cancelled.
11
+ */
12
+ export const validateGithubConfig = () => {
13
+ if (!hasGithubConfig()) {
14
+ const ok = setupGithubConfigInteractive();
15
+ if (!ok) {
16
+ log.info('Setup cancelled. Run --setup-github later.');
17
+ return false;
18
+ }
19
+ console.log('');
20
+ }
21
+ return true;
22
+ };
23
+ /**
24
+ * Validate platform config (GitHub or GitLab), prompting setup if missing.
25
+ */
26
+ export const validatePlatformConfig = (platform) => {
27
+ if (platform === 'github')
28
+ return validateGithubConfig();
29
+ if (!hasGitlabConfig()) {
30
+ const ok = setupGitlabConfigInteractive();
31
+ if (!ok) {
32
+ log.info('Setup cancelled. Run --setup-gitlab later.');
33
+ return false;
34
+ }
35
+ console.log('');
36
+ }
37
+ return true;
38
+ };
39
+ /**
40
+ * Resolve GitHub owner/repo from the git remote "origin".
41
+ * Returns null and logs errors if the remote is missing or unparseable.
42
+ */
43
+ export const getRepoFromRemote = () => {
44
+ let remoteUrl = '';
45
+ try {
46
+ remoteUrl = execSilent('git remote get-url origin').trim();
47
+ }
48
+ catch {
49
+ log.error('No git remote "origin" found.');
50
+ log.info('Add a remote: git remote add origin <url>');
51
+ return null;
52
+ }
53
+ const repoInfo = parseRepoFromUrl(remoteUrl);
54
+ if (!repoInfo) {
55
+ log.error('Could not parse GitHub owner/repo from remote URL.');
56
+ log.info(`Remote: ${remoteUrl}`);
57
+ return null;
58
+ }
59
+ return repoInfo;
60
+ };
61
+ /**
62
+ * Detect platform and resolve repo info from git remote "origin".
63
+ * Returns PlatformRepo or null if remote is missing/unparseable.
64
+ */
65
+ export const getPlatformRepoFromRemote = () => {
66
+ let remoteUrl = '';
67
+ try {
68
+ remoteUrl = execSilent('git remote get-url origin').trim();
69
+ }
70
+ catch {
71
+ log.error('No git remote "origin" found.');
72
+ log.info('Add a remote: git remote add origin <url>');
73
+ return null;
74
+ }
75
+ const repoInfo = parseRemoteUrl(remoteUrl);
76
+ if (!repoInfo) {
77
+ log.error('Could not parse owner/repo from remote URL.');
78
+ log.info(`Remote: ${remoteUrl}`);
79
+ return null;
80
+ }
81
+ return repoInfo;
82
+ };
83
+ /**
84
+ * Detect platform from remote URL. Returns null if undetectable.
85
+ */
86
+ export const detectPlatformFromRemote = () => {
87
+ try {
88
+ const remoteUrl = execSilent('git remote get-url origin').trim();
89
+ return detectPlatform(remoteUrl);
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ };
95
+ /**
96
+ * Get the CLI tool name for the detected platform (gh or glab).
97
+ */
98
+ export const getPlatformCLI = (platform) => {
99
+ return platform === 'github' ? 'gh' : 'glab';
100
+ };
101
+ //# sourceMappingURL=github-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-helpers.js","sourceRoot":"","sources":["../../src/utils/github-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Load a prompt file from the prompts/ directory. Results are cached.
3
+ * Falls back to embedded prompts when filesystem path is unavailable
4
+ * (e.g. in compiled binaries where import.meta.url resolves to binary path).
5
+ */
6
+ export declare const loadPrompt: (filename: string) => string;
7
+ /** Load a prompt and replace `{{key}}` placeholders with provided values. */
8
+ export declare const loadPromptWithVars: (filename: string, vars: Record<string, string>) => string;
9
+ //# sourceMappingURL=prompt-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-loader.d.ts","sourceRoot":"","sources":["../../src/utils/prompt-loader.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,KAAG,MAiB7C,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAQnF,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { EMBEDDED_PROMPTS } from './prompts-embedded.js';
5
+ const currentFile = fileURLToPath(import.meta.url);
6
+ const currentDir = path.dirname(currentFile);
7
+ // From src/utils/ or lib/utils/, go up 2 levels to project root
8
+ const PROMPTS_DIR = path.join(currentDir, '..', '..', 'prompts');
9
+ // In-memory cache to avoid repeated filesystem reads
10
+ const cache = new Map();
11
+ /**
12
+ * Load a prompt file from the prompts/ directory. Results are cached.
13
+ * Falls back to embedded prompts when filesystem path is unavailable
14
+ * (e.g. in compiled binaries where import.meta.url resolves to binary path).
15
+ */
16
+ export const loadPrompt = (filename) => {
17
+ const cached = cache.get(filename);
18
+ if (cached)
19
+ return cached;
20
+ let content;
21
+ const filepath = path.join(PROMPTS_DIR, filename);
22
+ if (existsSync(filepath)) {
23
+ content = readFileSync(filepath, 'utf8').trim();
24
+ }
25
+ else {
26
+ const embedded = EMBEDDED_PROMPTS[filename];
27
+ if (!embedded)
28
+ throw new Error(`Prompt file not found: ${filename}`);
29
+ content = embedded.trim();
30
+ }
31
+ cache.set(filename, content);
32
+ return content;
33
+ };
34
+ /** Load a prompt and replace `{{key}}` placeholders with provided values. */
35
+ export const loadPromptWithVars = (filename, vars) => {
36
+ let content = loadPrompt(filename);
37
+ for (const [key, value] of Object.entries(vars)) {
38
+ content = content.replaceAll(`{{${key}}}`, value);
39
+ }
40
+ return content;
41
+ };
42
+ //# sourceMappingURL=prompt-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-loader.js","sourceRoot":"","sources":["../../src/utils/prompt-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;AAE5C,gEAAgE;AAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;AAEhE,qDAAqD;AACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE;IACrD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,IAAI,OAAe,CAAA;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAEjD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAA;QACpE,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC5B,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,IAA4B,EAAU,EAAE;IAC3F,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const EMBEDDED_PROMPTS: Record<string, string>;
2
+ //# sourceMappingURL=prompts-embedded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts-embedded.d.ts","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2PnD,CAAA"}
@@ -0,0 +1,255 @@
1
+ // Auto-generated by scripts/generate-prompts.ts — DO NOT EDIT
2
+ // Regenerate: bun scripts/generate-prompts.ts
3
+ export const EMBEDDED_PROMPTS = {
4
+ 'branch-name-prompt.md': `Generate a SHORT git branch name suffix from this input. Output ONLY the kebab-case suffix (lowercase-with-hyphens), max 2-3 words, 3-25 chars. Be concise — pick the core noun/verb only.
5
+
6
+ Good: fix-auth, add-cache, user-roles, db-migrate
7
+ Bad: add-ai-prompts-and-utils, fix-authentication-module-error, update-user-profile-page
8
+ `,
9
+ 'commit-message-prompt.md': `Generate a conventional commit message from this git diff. Output ONLY the commit message in this format:
10
+
11
+ <type>(<scope>): <short summary>
12
+
13
+ <Detailed multi-line body explaining the change. Wrap lines at ~72 characters. LIMITS: subject max 100 chars; body max 360 chars. Include why the change was made and any important notes. Separate subject and body by a single blank line. Do not include any extraneous commentary or markers. Use imperative mood.
14
+
15
+ Example:
16
+ refactor(ai): migrate providers to SDKs
17
+
18
+ Replaces direct API/CLI calls for Copilot and Gemini with SDK integrations.
19
+ This simplifies code, improves maintainability, and adds dynamic model
20
+ fetching. Updates .gitignore for geeto binaries.
21
+ `,
22
+ 'issue-prompt.md': `Generate a GitHub Issue title and body from this description.
23
+ IMPORTANT: Always write in English regardless of the input language.
24
+ Output ONLY in this exact format (no extra markers):
25
+
26
+ TITLE: <concise issue title, max 72 chars>
27
+
28
+ BODY:
29
+
30
+ ## Description
31
+
32
+ <clear description of the issue>
33
+
34
+ ## Expected Behavior / Goal
35
+
36
+ <what should happen or what is the goal>
37
+
38
+ ## Additional Context
39
+
40
+ <any relevant details>
41
+ `,
42
+ 'issue-review.with-context.prompt.yml': `messages:
43
+ - role: system
44
+ content: >+
45
+ PROJECT CONTEXT (short):
46
+ Name: geeto
47
+ Type: Node.js/TypeScript CLI toolkit integrating AI providers and Git workflows.
48
+ Layout:
49
+ - \`src/\` TypeScript sources (api, cli, core, utils, workflows)
50
+ - \`lib/\` compiled JS used by the CLI
51
+ - \`.github/workflows/\` contains CI workflows; \`auto-add-ai-label-on-open.yml\` runs AI assessments on new issues.
52
+ - \`README.md\` is full documentation.
53
+
54
+ GUIDELINES for using this context:
55
+ - Use this short context to ground AI replies about repository behavior, conventions, and where code lives.
56
+ - Prefer short labels: \`bug\`, \`feature\`, \`docs\`, \`usage\`, \`help\`, \`tool\`, \`question\`.
57
+ - Keep public issue comments concise; include structured sections (Type, Assessment, Details, Suggested labels, Questions, Next steps, Summary).
58
+
59
+ Presentation & tone:
60
+ - Start with a friendly reply that feels personal.
61
+ - Explain findings in a logical, step-by-step way (use numbered or short bullet steps) so readers can follow troubleshooting or implementation advice.
62
+ - End with a short closing summary that restates the recommended next step(s).
63
+
64
+ Off-topic handling:
65
+ - If the issue is clearly outside this repository's scope (e.g., asking about unrelated frameworks, third-party services not integrated here, or general programming homework), respond with a short, polite nudge explaining it's off-topic and point to the right resources.
66
+ - Use a light, slightly witty tone (a gentle "disindir") but never rude or insulting. Always be helpful: offer where to ask instead (Stack Overflow, relevant project, or documentation) and include a link to \`CONTRIBUTING.md\` and \`README.md\` for repo-specific guidance.
67
+ - Suggested labels to add when off-topic: \`off-topic\`, \`needs-info\`, \`question\`.
68
+ - Example (Indonesian): "Sepertinya masalah ini di luar lingkup repo ini — sepertinya terkait [tool X]. Coba tanyakan di repo/tool tersebut atau di Stack Overflow. Baca juga CONTRIBUTING.md untuk pedoman kontribusi."
69
+ - Example (English): "This looks outside this repository's scope — it seems related to [tool X]. Please ask the maintainer/project for that tool or try Stack Overflow. See CONTRIBUTING.md for contribution guidelines."
70
+
71
+ - role: system
72
+ content: >+
73
+ You are an experienced project issue reviewer. Use the PROJECT CONTEXT above when assessing issues so replies reference the repository layout and conventions.
74
+
75
+ For the given issue ({{input}}), perform the following checks and provide a concise structured output.
76
+
77
+ 1) Categorize the issue as one of: \`bug\`, \`feature request\`, \`docs\`, \`usage/help\`, or \`other\`.
78
+
79
+ 2) For BUGs:
80
+ - Determine severity: \`critical\` / \`high\` / \`medium\` / \`low\`.
81
+ - Determine reproducibility: \`always\` / \`often\` / \`sometimes\` / \`rare\` / \`cannot reproduce\`.
82
+ - Summarize 1–3 reproduction steps if present; otherwise state \`Reproduction steps: missing\`.
83
+ - Suggest likely module/area involved (e.g., \`cli\`, \`installer\`, \`core\`, \`docs\`).
84
+ - Recommend triage actions (request logs, version, minimal repro, or small PR/patch).
85
+
86
+ 3) For FEATURE REQUESTs:
87
+ - Summarize the feature goal and benefit in one sentence.
88
+ - Propose short acceptance criteria (1–3 items).
89
+ - Estimate implementation complexity: \`low\` / \`medium\` / \`high\`.
90
+
91
+ 4) For ALL issues:
92
+ - If relevant, extract a brief \`How to use (from README):\` block (2–6 commands) to help reproduce or test, but keep it short.
93
+ - Ask up to 3 direct QUESTIONS if information is missing.
94
+ - Suggest 1–3 short labels (single words) such as \`bug\`, \`feature\`, \`docs\`, \`usage\`, \`help\`, \`tool\`.
95
+
96
+ 5) Format output in the following structured sections (concise and clear):
97
+ - \`Type:\` (bug / feature / docs / usage / other)
98
+ - \`Assessment:\` (for bugs: severity & reproducibility; for features: goal & complexity)
99
+ - \`Details:\` (reproduction steps, modules implicated, brief README excerpt if relevant)
100
+ - \`Suggested labels:\` (list of short labels)
101
+ - \`Questions:\` (0–3 short questions if needed)
102
+ - \`Next steps:\` (3 brief actions for triage or implementation)
103
+ - \`Summary:\` one-sentence final summary
104
+
105
+ 6) Language:
106
+ - Answer in the same language as the issue. If the issue is written in Indonesian, answer in Indonesian. If the issue is written in English, answer in English.
107
+
108
+ 7) Limit output: keep it concise (max ~300 words), use simple markdown, and include short examples when helpful.
109
+
110
+ - role: user
111
+ content: '{{input}}'
112
+ model: openai/gpt-4o-mini
113
+ modelParameters:
114
+ max_tokens: 700
115
+ temperature: 0.2
116
+
117
+ testData: []
118
+ evaluators: []
119
+ `,
120
+ 'pr-prompt.md': `Generate a Pull Request title and body from this git diff.
121
+ Output ONLY in this exact format (no extra markers):
122
+
123
+ TITLE: <concise PR title, max 72 chars, imperative mood>
124
+
125
+ BODY:
126
+
127
+ ## Summary
128
+
129
+ <1-2 sentence summary of what this PR does>
130
+
131
+ ## Changes
132
+
133
+ <bullet list of key changes>
134
+ `,
135
+ 'release-notes-prompt.md': `You are a release notes writer. Given a list of git commit messages, generate user-friendly release notes in {{langLabel}}. Output ONLY the release notes content (no title/heading, no version number, no date — those are added separately).
136
+
137
+ Rules:
138
+
139
+ - Start with "### What's New?" as the top-level section
140
+ - Group changes into subsections: "#### New Features", "#### Bug Fixes", "#### Other Improvements"
141
+ - Only include subsections that have items (skip empty ones)
142
+ - Use simple, non-technical language that end users can understand
143
+ - Each item should be a bullet point starting with "-"
144
+ - Strip conventional commit prefixes (feat:, fix:, chore:, etc.)
145
+ - Keep it concise but informative
146
+ - If there are breaking changes, add a "#### Breaking Changes" subsection at the top
147
+ - Do NOT include commit hashes or author names
148
+
149
+ Formatting (follow EXACTLY — this is markdownlint-compliant):
150
+
151
+ - Always put ONE blank line after EVERY heading (### or ####) before the first bullet
152
+ - Always put ONE blank line after the last bullet in a section before the next #### heading
153
+ - Never have more than one consecutive blank line
154
+ - Example output:
155
+
156
+ ### What's New?
157
+
158
+ #### New Features
159
+
160
+ - Feature description here
161
+ - Another feature
162
+
163
+ #### Bug Fixes
164
+
165
+ - Fix description here
166
+
167
+ #### Other Improvements
168
+
169
+ - Improvement here
170
+ `,
171
+ 'repo-description-prompt.md': `Analyze this README and write a short GitHub repo description (max 150 chars). Concise, informative. Output ONLY the text, no quotes.
172
+ `,
173
+ 'security-gate-prompt.md': `You are an AI Security Reviewer for application code.
174
+
175
+ **Context:**
176
+
177
+ - Files changed: {{filesCount}}
178
+ - Changed files: {{changedFiles}}
179
+ - Dependency changes: {{hasDependencies}}
180
+
181
+ **Code Changes (diff):**
182
+
183
+ \`\`\`diff
184
+ {{diff}}
185
+ \`\`\`
186
+
187
+ **Your Task:**
188
+ Analyze the code for potential security and quality issues.
189
+
190
+ **Security Analysis - Look for:**
191
+
192
+ 1. Hardcoded secrets (API keys, passwords, tokens)
193
+ 2. Exposed credentials or sensitive data
194
+ 3. Risky dependencies or known vulnerabilities
195
+ 4. Vulnerable code patterns:
196
+ - SQL injection risks
197
+ - XSS (Cross-Site Scripting) vulnerabilities
198
+ - Command injection
199
+ - Path traversal
200
+ - Insecure random number generation
201
+ - Weak cryptography
202
+ - Authentication/authorization bypasses
203
+ 5. Configuration issues (exposed debug mode, unsafe CORS, etc.)
204
+
205
+ **Quality Analysis - Look for:**
206
+
207
+ 1. Overly complex logic (nested loops, deep conditionals)
208
+ 2. Code duplication
209
+ 3. Violations of common best practices
210
+ 4. Missing error handling
211
+ 5. Inconsistent naming or patterns
212
+
213
+ **Important:**
214
+
215
+ - Focus on REAL issues, not theoretical ones
216
+ - Provide practical explanations: WHY is it dangerous or problematic?
217
+ - Suggest realistic, actionable fixes
218
+ - Do NOT block the workflow - focus on education and risk mitigation
219
+ - If no issues found, say so clearly
220
+
221
+ **Output Format (use this exact structure):**
222
+
223
+ SECURITY_WARNINGS:
224
+ [If found, list each warning as:]
225
+
226
+ - SEVERITY: [high/medium/low]
227
+ - TITLE: [short title]
228
+ - DESCRIPTION: [why is this dangerous?]
229
+ - LOCATION: [file:line or general area]
230
+ - SUGGESTION: [how to fix it]
231
+
232
+ [If no security warnings:]
233
+
234
+ - None detected
235
+
236
+ QUALITY_ISSUES:
237
+ [If found, list each issue as:]
238
+
239
+ - SEVERITY: [high/medium/low]
240
+ - TITLE: [short title]
241
+ - DESCRIPTION: [what's the problem?]
242
+ - LOCATION: [file:line or general area]
243
+ - SUGGESTION: [how to improve it]
244
+
245
+ [If no quality issues:]
246
+
247
+ - None detected
248
+
249
+ OVERALL_RISK: [high/medium/low/none]
250
+
251
+ SUMMARY:
252
+ [1-2 sentence summary of findings]
253
+ `,
254
+ };
255
+ //# sourceMappingURL=prompts-embedded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts-embedded.js","sourceRoot":"","sources":["../../src/utils/prompts-embedded.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,8CAA8C;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,uBAAuB,EAAE;;;;CAI1B;IACC,0BAA0B,EAAE;;;;;;;;;;;;CAY7B;IACC,iBAAiB,EAAE;;;;;;;;;;;;;;;;;;;CAmBpB;IACC,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EzC;IACC,cAAc,EAAE;;;;;;;;;;;;;;CAcjB;IACC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B;IACC,4BAA4B,EAAE;CAC/B;IACC,yBAAyB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5B;CACA,CAAA"}
@@ -1,47 +1,9 @@
1
1
  /**
2
- * Hacker-style scramble/decode text animation for terminal.
2
+ * Progress spinner that replaces the old scramble animation.
3
3
  *
4
- * Characters start as random symbols and gradually resolve
5
- * from left to right into the target text.
4
+ * Accepts the same StepInput[] API as before but shows a clean
5
+ * spinner with the last step's text instead of multi-line animation.
6
6
  */
7
- export interface ScrambleOptions {
8
- /** Milliseconds per animation frame (default: 35). */
9
- frameDelay?: number;
10
- /** How many characters to reveal per tick (default: 1). */
11
- charsPerTick?: number;
12
- /** Extra scramble-only frames before reveal starts (default: 6). */
13
- scrambleFrames?: number;
14
- }
15
- /**
16
- * Animate a single line of text with a scramble→reveal effect.
17
- *
18
- * Uses `\r` overwrite so the cursor stays on one line.
19
- * Returns a promise that resolves when the animation completes.
20
- */
21
- export declare const scrambleLine: (text: string, opts?: ScrambleOptions) => Promise<void>;
22
- export interface ScrambleSequenceStep {
23
- /** Text to display. */
24
- text: string;
25
- /** Optional pause in ms after this step completes (default: 200). */
26
- pauseAfter?: number;
27
- }
28
- /**
29
- * Run a sequence of scramble animations.
30
- *
31
- * Each step animates on its own line (in-place overwrite),
32
- * then moves down for the next step.
33
- *
34
- * Example:
35
- * ```
36
- * await scrambleSequence([
37
- * { text: 'collecting...' },
38
- * { text: 'compressing...' },
39
- * { text: 'delivering...' },
40
- * { text: 'done ✓', pauseAfter: 0 },
41
- * ])
42
- * ```
43
- */
44
- export declare const scrambleSequence: (steps: ScrambleSequenceStep[], opts?: ScrambleOptions) => Promise<void>;
45
7
  /** Single counter definition for multi-counter steps. */
46
8
  export interface CounterDef {
47
9
  to: number;
@@ -58,60 +20,21 @@ export type StepInput = string | {
58
20
  counts: CounterDef[];
59
21
  };
60
22
  /**
61
- * Multi-step scramble progress indicator.
62
- *
63
- * Animates a sequence of text lines with scramble→reveal, each staying
64
- * on screen once decoded. The final step enters an idle-glitch mode
65
- * with an elapsed-time counter until `.stop()` / `.succeed()` is called.
23
+ * Drop-in replacement for the old ScrambleProgress.
66
24
  *
67
- * Steps that include a `countTo` value get an extra count-up animation
68
- * after the base text is revealed:
69
- * `collecting objects (1)...` → `(45)...` → `(89)...`
70
- *
71
- * API (drop-in replacement for `log.spinner()`):
72
- * `.start(steps)`, `.stop()`, `.succeed(text)`, `.fail(text)`
25
+ * Same API: `.start(steps)`, `.addSteps(steps)`, `.stop()`, `.succeed(text)`, `.fail(text)`
26
+ * Now renders a single-line spinner instead of multi-line scramble animation.
73
27
  */
74
28
  export declare class ScrambleProgress {
75
29
  private interval;
76
- private stepInputs;
77
- private currentStep;
78
- private revealed;
79
- private scrambleCount;
30
+ private frame;
31
+ private message;
80
32
  private startTime;
81
- private pauseCount;
82
- private countFrames;
83
- private phase;
84
- /** Number of step lines printed with \\n (above the current animated line). */
85
- private linesAbove;
86
- private readonly scrambleFrames;
87
- private readonly charsPerTick;
88
- private readonly frameDelay;
89
- private readonly pauseFrames;
90
- private readonly countTotalFrames;
91
- /** Check if a step input is a single-counter step. */
92
- private isSingleCount;
93
- /** Check if a step input is a multi-counter step. */
94
- private isMultiCount;
95
- /** Get the base display text for a step (without count). */
96
- private getBaseText;
97
- /** Get the full display text for a step (with count at given progress 0–1). */
98
- private getFullText;
99
- /** Check if a step has a count-up animation. */
100
- private hasCount;
101
33
  start(steps: StepInput[]): void;
102
- private cleanup;
103
- /**
104
- * Append more steps to a running animation.
105
- *
106
- * If the animation is currently in `idle` (last step glitching),
107
- * it will finalise that line and start animating the new steps.
108
- */
109
34
  addSteps(steps: StepInput[]): void;
110
- /** Stop the animation silently (clear current line). */
35
+ private cleanup;
111
36
  stop(): void;
112
- /** Stop and print a green `✓ message`. */
113
37
  succeed(message: string): void;
114
- /** Stop and print a red `✗ message`. */
115
38
  fail(message: string): void;
116
39
  }
117
40
  //# sourceMappingURL=scramble.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scramble.d.ts","sourceRoot":"","sources":["../../src/utils/scramble.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,OAAM,eAAoB,KAAG,OAAO,CAAC,IAAI,CAuCnF,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,oBAAoB,EAAE,EAC7B,OAAM,eAAoB,KACzB,OAAO,CAAC,IAAI,CAQd,CAAA;AAED,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,kEAAkE;AAClE,MAAM,MAAM,SAAS,GACjB,MAAM,GACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AAE1C;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,QAAQ,CAAI;IACpB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,KAAK,CAAiE;IAC9E,+EAA+E;IAC/E,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAI;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAI;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAI;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAK;IAEtC,sDAAsD;IACtD,OAAO,CAAC,aAAa;IAMrB,qDAAqD;IACrD,OAAO,CAAC,YAAY;IAIpB,4DAA4D;IAC5D,OAAO,CAAC,WAAW;IAMnB,+EAA+E;IAC/E,OAAO,CAAC,WAAW;IAmBnB,gDAAgD;IAChD,OAAO,CAAC,QAAQ;IAQhB,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAkH/B,OAAO,CAAC,OAAO;IAcf;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAuBlC,wDAAwD;IACxD,IAAI,IAAI,IAAI;IAIZ,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,wCAAwC;IACxC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAI5B"}
1
+ {"version":3,"file":"scramble.d.ts","sourceRoot":"","sources":["../../src/utils/scramble.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,kEAAkE;AAClE,MAAM,MAAM,SAAS,GACjB,MAAM,GACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,CAAA;AAK1C;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAI;IAErB,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAgB/B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAMlC,OAAO,CAAC,OAAO;IASf,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAI5B"}