@kodus/cli 0.2.3 → 0.3.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 (261) hide show
  1. package/README.md +78 -27
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +20 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auth/index.d.ts.map +1 -1
  6. package/dist/commands/auth/index.js +1 -2
  7. package/dist/commands/auth/index.js.map +1 -1
  8. package/dist/commands/auth/login.d.ts.map +1 -1
  9. package/dist/commands/auth/login.js +44 -45
  10. package/dist/commands/auth/login.js.map +1 -1
  11. package/dist/commands/auth/logout.d.ts.map +1 -1
  12. package/dist/commands/auth/logout.js +5 -3
  13. package/dist/commands/auth/logout.js.map +1 -1
  14. package/dist/commands/auth/status.d.ts.map +1 -1
  15. package/dist/commands/auth/status.js +28 -25
  16. package/dist/commands/auth/status.js.map +1 -1
  17. package/dist/commands/auth/team-key.d.ts.map +1 -1
  18. package/dist/commands/auth/team-key.js +49 -29
  19. package/dist/commands/auth/team-key.js.map +1 -1
  20. package/dist/commands/auth/token.d.ts.map +1 -1
  21. package/dist/commands/auth/token.js +12 -10
  22. package/dist/commands/auth/token.js.map +1 -1
  23. package/dist/commands/hook/index.d.ts.map +1 -1
  24. package/dist/commands/hook/index.js +1 -2
  25. package/dist/commands/hook/index.js.map +1 -1
  26. package/dist/commands/hook/install.d.ts.map +1 -1
  27. package/dist/commands/hook/install.js +21 -22
  28. package/dist/commands/hook/install.js.map +1 -1
  29. package/dist/commands/hook/status.d.ts.map +1 -1
  30. package/dist/commands/hook/status.js +10 -8
  31. package/dist/commands/hook/status.js.map +1 -1
  32. package/dist/commands/hook/uninstall.d.ts.map +1 -1
  33. package/dist/commands/hook/uninstall.js +7 -5
  34. package/dist/commands/hook/uninstall.js.map +1 -1
  35. package/dist/commands/memory/capture.d.ts.map +1 -1
  36. package/dist/commands/memory/capture.js +28 -14
  37. package/dist/commands/memory/capture.js.map +1 -1
  38. package/dist/commands/memory/disable.d.ts.map +1 -1
  39. package/dist/commands/memory/disable.js +9 -7
  40. package/dist/commands/memory/disable.js.map +1 -1
  41. package/dist/commands/memory/enable.d.ts.map +1 -1
  42. package/dist/commands/memory/enable.js +18 -14
  43. package/dist/commands/memory/enable.js.map +1 -1
  44. package/dist/commands/memory/hooks.d.ts.map +1 -1
  45. package/dist/commands/memory/hooks.js +37 -17
  46. package/dist/commands/memory/hooks.js.map +1 -1
  47. package/dist/commands/memory/index.d.ts.map +1 -1
  48. package/dist/commands/memory/index.js +1 -2
  49. package/dist/commands/memory/index.js.map +1 -1
  50. package/dist/commands/memory/promote.d.ts.map +1 -1
  51. package/dist/commands/memory/promote.js +14 -10
  52. package/dist/commands/memory/promote.js.map +1 -1
  53. package/dist/commands/memory/show.d.ts.map +1 -1
  54. package/dist/commands/memory/show.js +11 -10
  55. package/dist/commands/memory/show.js.map +1 -1
  56. package/dist/commands/memory/status.d.ts.map +1 -1
  57. package/dist/commands/memory/status.js +22 -20
  58. package/dist/commands/memory/status.js.map +1 -1
  59. package/dist/commands/pr.d.ts.map +1 -1
  60. package/dist/commands/pr.js +131 -13
  61. package/dist/commands/pr.js.map +1 -1
  62. package/dist/commands/review.d.ts.map +1 -1
  63. package/dist/commands/review.js +57 -38
  64. package/dist/commands/review.js.map +1 -1
  65. package/dist/commands/status.d.ts +3 -0
  66. package/dist/commands/status.d.ts.map +1 -0
  67. package/dist/commands/status.js +119 -0
  68. package/dist/commands/status.js.map +1 -0
  69. package/dist/commands/subscribe.d.ts +4 -0
  70. package/dist/commands/subscribe.d.ts.map +1 -0
  71. package/dist/commands/subscribe.js +25 -0
  72. package/dist/commands/subscribe.js.map +1 -0
  73. package/dist/commands/update.d.ts +9 -0
  74. package/dist/commands/update.d.ts.map +1 -0
  75. package/dist/commands/update.js +74 -0
  76. package/dist/commands/update.js.map +1 -0
  77. package/dist/formatters/json.d.ts.map +1 -1
  78. package/dist/formatters/json.js.map +1 -1
  79. package/dist/formatters/markdown.d.ts.map +1 -1
  80. package/dist/formatters/markdown.js.map +1 -1
  81. package/dist/formatters/prompt.d.ts.map +1 -1
  82. package/dist/formatters/prompt.js +6 -6
  83. package/dist/formatters/prompt.js.map +1 -1
  84. package/dist/formatters/terminal.d.ts.map +1 -1
  85. package/dist/formatters/terminal.js +7 -4
  86. package/dist/formatters/terminal.js.map +1 -1
  87. package/dist/index.js +28 -5
  88. package/dist/index.js.map +1 -1
  89. package/dist/services/api/api.interface.d.ts +10 -1
  90. package/dist/services/api/api.interface.d.ts.map +1 -1
  91. package/dist/services/api/api.real.d.ts +14 -0
  92. package/dist/services/api/api.real.d.ts.map +1 -1
  93. package/dist/services/api/api.real.js +163 -58
  94. package/dist/services/api/api.real.js.map +1 -1
  95. package/dist/services/api/index.d.ts +2 -2
  96. package/dist/services/api/index.js +1 -1
  97. package/dist/services/auth.service.d.ts +1 -0
  98. package/dist/services/auth.service.d.ts.map +1 -1
  99. package/dist/services/auth.service.js +21 -2
  100. package/dist/services/auth.service.js.map +1 -1
  101. package/dist/services/context.service.d.ts +4 -1
  102. package/dist/services/context.service.d.ts.map +1 -1
  103. package/dist/services/context.service.js +30 -19
  104. package/dist/services/context.service.js.map +1 -1
  105. package/dist/services/fix.service.d.ts.map +1 -1
  106. package/dist/services/fix.service.js +3 -2
  107. package/dist/services/fix.service.js.map +1 -1
  108. package/dist/services/git.service.d.ts +1 -0
  109. package/dist/services/git.service.d.ts.map +1 -1
  110. package/dist/services/git.service.js +123 -48
  111. package/dist/services/git.service.js.map +1 -1
  112. package/dist/services/memory.service.d.ts.map +1 -1
  113. package/dist/services/memory.service.js +93 -35
  114. package/dist/services/memory.service.js.map +1 -1
  115. package/dist/services/review.service.d.ts +12 -1
  116. package/dist/services/review.service.d.ts.map +1 -1
  117. package/dist/services/review.service.js +88 -65
  118. package/dist/services/review.service.js.map +1 -1
  119. package/dist/services/transcript-parser.service.d.ts.map +1 -1
  120. package/dist/services/transcript-parser.service.js +46 -15
  121. package/dist/services/transcript-parser.service.js.map +1 -1
  122. package/dist/types/index.d.ts +12 -1
  123. package/dist/types/index.d.ts.map +1 -1
  124. package/dist/types/index.js.map +1 -1
  125. package/dist/types/memory.d.ts.map +1 -1
  126. package/dist/ui/interactive.d.ts.map +1 -1
  127. package/dist/ui/interactive.js +86 -92
  128. package/dist/ui/interactive.js.map +1 -1
  129. package/dist/utils/banner.d.ts +2 -0
  130. package/dist/utils/banner.d.ts.map +1 -0
  131. package/dist/utils/banner.js +190 -0
  132. package/dist/utils/banner.js.map +1 -0
  133. package/dist/utils/cli-exit.d.ts +13 -0
  134. package/dist/utils/cli-exit.d.ts.map +1 -0
  135. package/dist/utils/cli-exit.js +29 -0
  136. package/dist/utils/cli-exit.js.map +1 -0
  137. package/dist/utils/clipboard.d.ts +2 -0
  138. package/dist/utils/clipboard.d.ts.map +1 -0
  139. package/dist/utils/clipboard.js +11 -0
  140. package/dist/utils/clipboard.js.map +1 -0
  141. package/dist/utils/config.d.ts +3 -0
  142. package/dist/utils/config.d.ts.map +1 -1
  143. package/dist/utils/config.js.map +1 -1
  144. package/dist/utils/credentials.d.ts.map +1 -1
  145. package/dist/utils/credentials.js.map +1 -1
  146. package/dist/utils/device.d.ts.map +1 -1
  147. package/dist/utils/device.js +17 -6
  148. package/dist/utils/device.js.map +1 -1
  149. package/dist/utils/logger.d.ts +13 -0
  150. package/dist/utils/logger.d.ts.map +1 -0
  151. package/dist/utils/logger.js +48 -0
  152. package/dist/utils/logger.js.map +1 -0
  153. package/dist/utils/module-matcher.d.ts.map +1 -1
  154. package/dist/utils/module-matcher.js +12 -7
  155. package/dist/utils/module-matcher.js.map +1 -1
  156. package/dist/utils/rate-limit.d.ts.map +1 -1
  157. package/dist/utils/rate-limit.js +12 -3
  158. package/dist/utils/rate-limit.js.map +1 -1
  159. package/dist/utils/recent-activity.d.ts +9 -0
  160. package/dist/utils/recent-activity.d.ts.map +1 -0
  161. package/dist/utils/recent-activity.js +139 -0
  162. package/dist/utils/recent-activity.js.map +1 -0
  163. package/dist/utils/skills.d.ts +2 -0
  164. package/dist/utils/skills.d.ts.map +1 -0
  165. package/dist/utils/skills.js +40 -0
  166. package/dist/utils/skills.js.map +1 -0
  167. package/dist/utils/update-check.d.ts +1 -2
  168. package/dist/utils/update-check.d.ts.map +1 -1
  169. package/dist/utils/update-check.js +21 -97
  170. package/dist/utils/update-check.js.map +1 -1
  171. package/package.json +83 -59
  172. package/skills/README.md +49 -0
  173. package/skills/business-rules-validation/SKILL.md +43 -0
  174. package/skills/kodus-pr-suggestions-resolver/SKILL.md +61 -0
  175. package/skills/kodus-review/SKILL.md +40 -0
  176. package/skills/kodus-review-dev/SKILL.md +41 -0
  177. package/skills/kodus-review-dev/scripts/run-local-cli.sh +49 -0
  178. package/dist/commands/__tests__/auth.login-logout.test.d.ts +0 -2
  179. package/dist/commands/__tests__/auth.login-logout.test.d.ts.map +0 -1
  180. package/dist/commands/__tests__/auth.login-logout.test.js +0 -125
  181. package/dist/commands/__tests__/auth.login-logout.test.js.map +0 -1
  182. package/dist/commands/__tests__/auth.team-key.test.d.ts +0 -2
  183. package/dist/commands/__tests__/auth.team-key.test.d.ts.map +0 -1
  184. package/dist/commands/__tests__/auth.team-key.test.js +0 -145
  185. package/dist/commands/__tests__/auth.team-key.test.js.map +0 -1
  186. package/dist/commands/__tests__/capture-api.test.d.ts +0 -2
  187. package/dist/commands/__tests__/capture-api.test.d.ts.map +0 -1
  188. package/dist/commands/__tests__/capture-api.test.js +0 -88
  189. package/dist/commands/__tests__/capture-api.test.js.map +0 -1
  190. package/dist/commands/__tests__/disable.test.d.ts +0 -2
  191. package/dist/commands/__tests__/disable.test.d.ts.map +0 -1
  192. package/dist/commands/__tests__/disable.test.js +0 -103
  193. package/dist/commands/__tests__/disable.test.js.map +0 -1
  194. package/dist/commands/__tests__/enable.test.d.ts +0 -2
  195. package/dist/commands/__tests__/enable.test.d.ts.map +0 -1
  196. package/dist/commands/__tests__/enable.test.js +0 -103
  197. package/dist/commands/__tests__/enable.test.js.map +0 -1
  198. package/dist/commands/__tests__/hook.test.d.ts +0 -2
  199. package/dist/commands/__tests__/hook.test.d.ts.map +0 -1
  200. package/dist/commands/__tests__/hook.test.js +0 -105
  201. package/dist/commands/__tests__/hook.test.js.map +0 -1
  202. package/dist/commands/__tests__/install-merge-hook.test.d.ts +0 -2
  203. package/dist/commands/__tests__/install-merge-hook.test.d.ts.map +0 -1
  204. package/dist/commands/__tests__/install-merge-hook.test.js +0 -54
  205. package/dist/commands/__tests__/install-merge-hook.test.js.map +0 -1
  206. package/dist/commands/upgrade.d.ts +0 -3
  207. package/dist/commands/upgrade.d.ts.map +0 -1
  208. package/dist/commands/upgrade.js +0 -35
  209. package/dist/commands/upgrade.js.map +0 -1
  210. package/dist/services/__tests__/auth.service.test.d.ts +0 -2
  211. package/dist/services/__tests__/auth.service.test.d.ts.map +0 -1
  212. package/dist/services/__tests__/auth.service.test.js +0 -201
  213. package/dist/services/__tests__/auth.service.test.js.map +0 -1
  214. package/dist/services/__tests__/git.service.test.d.ts +0 -2
  215. package/dist/services/__tests__/git.service.test.d.ts.map +0 -1
  216. package/dist/services/__tests__/git.service.test.js +0 -61
  217. package/dist/services/__tests__/git.service.test.js.map +0 -1
  218. package/dist/services/__tests__/memory.service.test.d.ts +0 -2
  219. package/dist/services/__tests__/memory.service.test.d.ts.map +0 -1
  220. package/dist/services/__tests__/memory.service.test.js +0 -279
  221. package/dist/services/__tests__/memory.service.test.js.map +0 -1
  222. package/dist/services/__tests__/review.service.auth-fallback.test.d.ts +0 -2
  223. package/dist/services/__tests__/review.service.auth-fallback.test.d.ts.map +0 -1
  224. package/dist/services/__tests__/review.service.auth-fallback.test.js +0 -63
  225. package/dist/services/__tests__/review.service.auth-fallback.test.js.map +0 -1
  226. package/dist/services/__tests__/review.service.test.d.ts +0 -2
  227. package/dist/services/__tests__/review.service.test.d.ts.map +0 -1
  228. package/dist/services/__tests__/review.service.test.js +0 -132
  229. package/dist/services/__tests__/review.service.test.js.map +0 -1
  230. package/dist/services/__tests__/review.suggestions-auth.test.d.ts +0 -2
  231. package/dist/services/__tests__/review.suggestions-auth.test.d.ts.map +0 -1
  232. package/dist/services/__tests__/review.suggestions-auth.test.js +0 -81
  233. package/dist/services/__tests__/review.suggestions-auth.test.js.map +0 -1
  234. package/dist/services/__tests__/transcript-parser.service.test.d.ts +0 -2
  235. package/dist/services/__tests__/transcript-parser.service.test.d.ts.map +0 -1
  236. package/dist/services/__tests__/transcript-parser.service.test.js +0 -134
  237. package/dist/services/__tests__/transcript-parser.service.test.js.map +0 -1
  238. package/dist/services/api/__tests__/api.real.test.d.ts +0 -2
  239. package/dist/services/api/__tests__/api.real.test.d.ts.map +0 -1
  240. package/dist/services/api/__tests__/api.real.test.js +0 -182
  241. package/dist/services/api/__tests__/api.real.test.js.map +0 -1
  242. package/dist/utils/__tests__/config.test.d.ts +0 -2
  243. package/dist/utils/__tests__/config.test.d.ts.map +0 -1
  244. package/dist/utils/__tests__/config.test.js +0 -79
  245. package/dist/utils/__tests__/config.test.js.map +0 -1
  246. package/dist/utils/__tests__/credentials.test.d.ts +0 -2
  247. package/dist/utils/__tests__/credentials.test.d.ts.map +0 -1
  248. package/dist/utils/__tests__/credentials.test.js +0 -89
  249. package/dist/utils/__tests__/credentials.test.js.map +0 -1
  250. package/dist/utils/__tests__/device.test.d.ts +0 -2
  251. package/dist/utils/__tests__/device.test.d.ts.map +0 -1
  252. package/dist/utils/__tests__/device.test.js +0 -108
  253. package/dist/utils/__tests__/device.test.js.map +0 -1
  254. package/dist/utils/__tests__/module-matcher.test.d.ts +0 -2
  255. package/dist/utils/__tests__/module-matcher.test.d.ts.map +0 -1
  256. package/dist/utils/__tests__/module-matcher.test.js +0 -164
  257. package/dist/utils/__tests__/module-matcher.test.js.map +0 -1
  258. package/dist/utils/__tests__/update-check.test.d.ts +0 -2
  259. package/dist/utils/__tests__/update-check.test.d.ts.map +0 -1
  260. package/dist/utils/__tests__/update-check.test.js +0 -26
  261. package/dist/utils/__tests__/update-check.test.js.map +0 -1
@@ -17,8 +17,9 @@ export async function loadConfig(repoRoot) {
17
17
  }
18
18
  const modules = [];
19
19
  for (const item of obj['modules']) {
20
- if (!item || typeof item !== 'object' || Array.isArray(item))
20
+ if (!item || typeof item !== 'object' || Array.isArray(item)) {
21
21
  continue;
22
+ }
22
23
  const entry = item;
23
24
  const id = typeof entry['id'] === 'string' ? entry['id'] : undefined;
24
25
  const name = typeof entry['name'] === 'string' ? entry['name'] : id;
@@ -28,8 +29,9 @@ export async function loadConfig(repoRoot) {
28
29
  const memoryFile = typeof entry['memoryFile'] === 'string'
29
30
  ? entry['memoryFile']
30
31
  : `.kody/memory/${id}.md`;
31
- if (!id || paths.length === 0)
32
+ if (!id || paths.length === 0) {
32
33
  continue;
34
+ }
33
35
  modules.push({ id, name: name ?? id, paths, memoryFile });
34
36
  }
35
37
  return { version: 1, modules };
@@ -61,7 +63,8 @@ function fileMatchesModule(filePath, patterns) {
61
63
  }
62
64
  else if (normalizedPattern.endsWith('/*')) {
63
65
  const prefix = normalizedPattern.slice(0, -2);
64
- if (normalized.startsWith(prefix + '/') && !normalized.slice(prefix.length + 1).includes('/')) {
66
+ if (normalized.startsWith(prefix + '/') &&
67
+ !normalized.slice(prefix.length + 1).includes('/')) {
65
68
  return true;
66
69
  }
67
70
  }
@@ -73,7 +76,8 @@ function fileMatchesModule(filePath, patterns) {
73
76
  }
74
77
  else {
75
78
  // Exact prefix match (directory or file path)
76
- if (normalized.startsWith(normalizedPattern + '/') || normalized === normalizedPattern) {
79
+ if (normalized.startsWith(normalizedPattern + '/') ||
80
+ normalized === normalizedPattern) {
77
81
  return true;
78
82
  }
79
83
  }
@@ -82,13 +86,14 @@ function fileMatchesModule(filePath, patterns) {
82
86
  }
83
87
  function patternToRegex(pattern) {
84
88
  const escaped = pattern
85
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
86
89
  .replace(/\*\*/g, '§GLOBSTAR§')
87
- .replace(/\*/g, '[^/]*')
90
+ .replace(/\*/g, '§GLOB§')
91
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
88
92
  // Preserve globstar "zero or more directories" semantics when used mid-path.
89
93
  // Example: a/**/b must match both a/b and a/x/y/b.
90
94
  .replace(/\/§GLOBSTAR§\//g, '(?:/[^/]+)*/')
91
- .replace(/§GLOBSTAR§/g, '.*');
95
+ .replace(/§GLOBSTAR§/g, '.*')
96
+ .replace(/§GLOB§/g, '[^/]*');
92
97
  return new RegExp(`^${escaped}$`);
93
98
  }
94
99
  //# sourceMappingURL=module-matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-matcher.js","sourceRoot":"","sources":["../../src/utils/module-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-matcher.js","sourceRoot":"","sources":["../../src/utils/module-matcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAkB1D;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAG7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAgB9D"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CA0B1D;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAG7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAgB9D"}
@@ -4,6 +4,7 @@ import os from 'os';
4
4
  import chalk from 'chalk';
5
5
  import { api } from '../services/api/index.js';
6
6
  import { gitService } from '../services/git.service.js';
7
+ import { cliInfo } from './logger.js';
7
8
  const { machineIdSync } = machineId;
8
9
  export async function getTrialIdentifier() {
9
10
  try {
@@ -17,11 +18,19 @@ export async function getTrialIdentifier() {
17
18
  repoPath = process.cwd();
18
19
  }
19
20
  const raw = `${machineId}:${username}:${repoPath}`;
20
- return crypto.createHash('sha256').update(raw).digest('hex').substring(0, 32);
21
+ return crypto
22
+ .createHash('sha256')
23
+ .update(raw)
24
+ .digest('hex')
25
+ .substring(0, 32);
21
26
  }
22
27
  catch {
23
28
  const fallback = `${os.hostname()}:${os.userInfo().username}:${Date.now()}`;
24
- return crypto.createHash('sha256').update(fallback).digest('hex').substring(0, 32);
29
+ return crypto
30
+ .createHash('sha256')
31
+ .update(fallback)
32
+ .digest('hex')
33
+ .substring(0, 32);
25
34
  }
26
35
  }
27
36
  export async function checkTrialStatus() {
@@ -42,6 +51,6 @@ ${chalk.yellow('│')}
42
51
  ${chalk.yellow('│')} ${chalk.dim('→')} ${chalk.cyan('kodus auth login')} ${chalk.yellow('│')}
43
52
  ${chalk.yellow('╰──────────────────────────────────────────────────────────╯')}
44
53
  `;
45
- console.log(box);
54
+ cliInfo(box);
46
55
  }
47
56
  //# sourceMappingURL=rate-limit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/utils/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/utils/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface RecentActivityEntry {
2
+ command: string;
3
+ timestamp: number;
4
+ }
5
+ export declare function loadRecentActivity(): Promise<RecentActivityEntry[]>;
6
+ export declare function recordRecentActivity(rawArgs: string[]): Promise<void>;
7
+ export declare function formatRelativeTime(timestamp: number, now?: number): string;
8
+ export declare function getRecentActivityLines(maxItems?: number): Promise<string[]>;
9
+ //# sourceMappingURL=recent-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-activity.d.ts","sourceRoot":"","sources":["../../src/utils/recent-activity.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAkED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA+BzE;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3E;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,GAAG,SAAa,GACjB,MAAM,CAkBR;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAY5E"}
@@ -0,0 +1,139 @@
1
+ import fs from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ const KODUS_DIR = path.join(os.homedir(), '.kodus');
5
+ const RECENT_ACTIVITY_FILE = path.join(KODUS_DIR, 'recent-activity.json');
6
+ const MAX_ENTRIES = 10;
7
+ const SENSITIVE_FLAGS = new Set([
8
+ '--key',
9
+ '--team-key',
10
+ '--token',
11
+ '--access-token',
12
+ '--refresh-token',
13
+ '--password',
14
+ ]);
15
+ function isJsonParseError(error) {
16
+ return error instanceof SyntaxError;
17
+ }
18
+ async function ensureConfigDir() {
19
+ try {
20
+ await fs.mkdir(KODUS_DIR, { recursive: true, mode: 0o700 });
21
+ }
22
+ catch (error) {
23
+ if (error.code !== 'EEXIST') {
24
+ throw error;
25
+ }
26
+ }
27
+ }
28
+ function sanitizeArgs(args) {
29
+ const sanitized = [];
30
+ for (let i = 0; i < args.length; i += 1) {
31
+ const arg = args[i] ?? '';
32
+ if (arg.startsWith('--')) {
33
+ const [flag, value] = arg.split('=', 2);
34
+ if (SENSITIVE_FLAGS.has(flag)) {
35
+ if (value !== undefined) {
36
+ sanitized.push(`${flag}=[REDACTED]`);
37
+ }
38
+ else {
39
+ sanitized.push(flag);
40
+ if (i + 1 < args.length) {
41
+ sanitized.push('[REDACTED]');
42
+ i += 1;
43
+ }
44
+ }
45
+ continue;
46
+ }
47
+ }
48
+ sanitized.push(arg);
49
+ }
50
+ return sanitized;
51
+ }
52
+ function shouldRecordCommand(args) {
53
+ if (args.length === 0) {
54
+ return false;
55
+ }
56
+ const firstArg = args[0];
57
+ if (!firstArg) {
58
+ return false;
59
+ }
60
+ if (firstArg === '--help' ||
61
+ firstArg === '-h' ||
62
+ firstArg === '--version' ||
63
+ firstArg === '-V') {
64
+ return false;
65
+ }
66
+ return true;
67
+ }
68
+ export async function loadRecentActivity() {
69
+ try {
70
+ const content = await fs.readFile(RECENT_ACTIVITY_FILE, 'utf-8');
71
+ const parsed = JSON.parse(content);
72
+ if (!parsed || !Array.isArray(parsed.entries)) {
73
+ return [];
74
+ }
75
+ return parsed.entries
76
+ .filter((entry) => entry &&
77
+ typeof entry.command === 'string' &&
78
+ typeof entry.timestamp === 'number')
79
+ .sort((a, b) => b.timestamp - a.timestamp);
80
+ }
81
+ catch (error) {
82
+ const code = error.code;
83
+ if (code === 'ENOENT') {
84
+ return [];
85
+ }
86
+ if (isJsonParseError(error)) {
87
+ const brokenFile = `${RECENT_ACTIVITY_FILE}.corrupted.${Date.now()}`;
88
+ await fs.rename(RECENT_ACTIVITY_FILE, brokenFile).catch(() => { });
89
+ return [];
90
+ }
91
+ throw error;
92
+ }
93
+ }
94
+ export async function recordRecentActivity(rawArgs) {
95
+ if (!shouldRecordCommand(rawArgs)) {
96
+ return;
97
+ }
98
+ const args = sanitizeArgs(rawArgs);
99
+ const command = `kodus ${args.join(' ').trim()}`.trim();
100
+ if (!command || command === 'kodus') {
101
+ return;
102
+ }
103
+ const existing = await loadRecentActivity();
104
+ const nextEntries = [
105
+ { command, timestamp: Date.now() },
106
+ ...existing.filter((entry) => entry.command !== command),
107
+ ].slice(0, MAX_ENTRIES);
108
+ await ensureConfigDir();
109
+ const tmpFile = `${RECENT_ACTIVITY_FILE}.${process.pid}.${Date.now()}.tmp`;
110
+ const payload = JSON.stringify({ entries: nextEntries }, null, 2);
111
+ await fs.writeFile(tmpFile, payload, { encoding: 'utf-8', mode: 0o600 });
112
+ await fs.rename(tmpFile, RECENT_ACTIVITY_FILE);
113
+ }
114
+ export function formatRelativeTime(timestamp, now = Date.now()) {
115
+ const diffSeconds = Math.max(0, Math.floor((now - timestamp) / 1000));
116
+ if (diffSeconds < 60) {
117
+ return `${diffSeconds}s ago`;
118
+ }
119
+ const diffMinutes = Math.floor(diffSeconds / 60);
120
+ if (diffMinutes < 60) {
121
+ return `${diffMinutes}m ago`;
122
+ }
123
+ const diffHours = Math.floor(diffMinutes / 60);
124
+ if (diffHours < 24) {
125
+ return `${diffHours}h ago`;
126
+ }
127
+ const diffDays = Math.floor(diffHours / 24);
128
+ return `${diffDays}d ago`;
129
+ }
130
+ export async function getRecentActivityLines(maxItems = 2) {
131
+ const entries = await loadRecentActivity();
132
+ if (entries.length === 0) {
133
+ return ['No recent activity yet'];
134
+ }
135
+ return entries
136
+ .slice(0, Math.max(1, maxItems))
137
+ .map((entry) => `${entry.command} - ${formatRelativeTime(entry.timestamp)}`);
138
+ }
139
+ //# sourceMappingURL=recent-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-activity.js","sourceRoot":"","sources":["../../src/utils/recent-activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function listBundledSkills(): Promise<string[]>;
2
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"AAYA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAkC3D"}
@@ -0,0 +1,40 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ function resolveSkillsCandidates() {
5
+ const here = path.dirname(fileURLToPath(import.meta.url));
6
+ return [
7
+ path.resolve(here, '../../skills'),
8
+ path.resolve(here, '../skills'),
9
+ ];
10
+ }
11
+ export async function listBundledSkills() {
12
+ for (const dir of resolveSkillsCandidates()) {
13
+ try {
14
+ const entries = await fs.readdir(dir, { withFileTypes: true });
15
+ const skills = await Promise.all(entries
16
+ .filter((entry) => entry.isDirectory())
17
+ .map(async (entry) => {
18
+ const skillFile = path.join(dir, entry.name, 'SKILL.md');
19
+ try {
20
+ await fs.access(skillFile);
21
+ return entry.name;
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }));
27
+ const normalized = skills
28
+ .filter((name) => !!name)
29
+ .sort((a, b) => a.localeCompare(b));
30
+ if (normalized.length > 0) {
31
+ return normalized;
32
+ }
33
+ }
34
+ catch {
35
+ // Ignore missing candidate and continue.
36
+ }
37
+ }
38
+ return [];
39
+ }
40
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,SAAS,uBAAuB;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;KAClC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,OAAO;iBACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;iBACtC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACvB,GAAG,EACH,KAAK,CAAC,IAAI,EACV,UAAU,CACb,CAAC;gBACF,IAAI,CAAC;oBACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC3B,OAAO,KAAK,CAAC,IAAI,CAAC;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC,CAAC,CACT,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM;iBACpB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,UAAU,CAAC;YACtB,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,yCAAyC;QAC7C,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -1,3 +1,2 @@
1
- export declare function isNewerVersion(current: string, latest: string): boolean;
2
- export declare function checkForUpdates(currentVersion: string): Promise<void>;
1
+ export declare function checkForUpdates(): Promise<void>;
3
2
  //# sourceMappingURL=update-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"AAeA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAavE;AAsED,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB3E"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"AAuBA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAWrD"}
@@ -1,106 +1,30 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import os from 'os';
4
- import chalk from 'chalk';
5
- const KODUS_DIR = path.join(os.homedir(), '.kodus');
6
- const CACHE_FILE = path.join(KODUS_DIR, 'update-check.json');
7
- const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
8
- const FETCH_TIMEOUT_MS = 3000;
9
- export function isNewerVersion(current, latest) {
10
- const currentParts = current.split('.').map(Number);
11
- const latestParts = latest.split('.').map(Number);
12
- const len = Math.max(currentParts.length, latestParts.length);
13
- for (let i = 0; i < len; i++) {
14
- const a = currentParts[i] ?? 0;
15
- const b = latestParts[i] ?? 0;
16
- if (b > a)
17
- return true;
18
- if (b < a)
19
- return false;
20
- }
21
- return false;
22
- }
23
- function printUpdateBanner(currentVersion, latestVersion) {
24
- const message = `Update available: ${currentVersion} → ${latestVersion}`;
25
- const command = 'Run `npm install -g @kodus/cli`';
26
- const inner = Math.max(message.length, command.length) + 4;
27
- const pad = (text) => {
28
- const remaining = inner - text.length;
29
- const left = Math.floor(remaining / 2);
30
- const right = remaining - left;
31
- return ' '.repeat(left) + text + ' '.repeat(right);
32
- };
33
- const top = `╭${'─'.repeat(inner)}╮`;
34
- const bottom = `╰${'─'.repeat(inner)}╯`;
35
- const empty = `│${' '.repeat(inner)}│`;
36
- console.log();
37
- console.log(chalk.yellow(top));
38
- console.log(chalk.yellow(empty));
39
- console.log(chalk.yellow('│') + pad(`${chalk.dim(currentVersion)} ${chalk.yellow('→')} ${chalk.green(latestVersion)}`) + chalk.yellow('│'));
40
- console.log(chalk.yellow('│') + pad(chalk.cyan('Run `npm install -g @kodus/cli`')) + chalk.yellow('│'));
41
- console.log(chalk.yellow(empty));
42
- console.log(chalk.yellow(bottom));
43
- console.log();
44
- }
45
- async function readCache() {
1
+ import { constants as fsConstants } from 'node:fs';
2
+ import fs from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import updateNotifier from 'update-notifier';
6
+ import { createRequire } from 'node:module';
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require('../../package.json');
9
+ async function canUseUpdateNotifier() {
10
+ const configRoot = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config');
46
11
  try {
47
- const content = await fs.readFile(CACHE_FILE, 'utf-8');
48
- return JSON.parse(content);
12
+ await fs.mkdir(configRoot, { recursive: true });
13
+ await fs.access(configRoot, fsConstants.W_OK);
14
+ return true;
49
15
  }
50
16
  catch {
51
- return null;
17
+ return false;
52
18
  }
53
19
  }
54
- async function writeCache(cache) {
55
- try {
56
- await fs.mkdir(KODUS_DIR, { recursive: true, mode: 0o700 });
57
- await fs.writeFile(CACHE_FILE, JSON.stringify(cache, null, 2), {
58
- encoding: 'utf-8',
59
- mode: 0o600,
60
- });
20
+ export async function checkForUpdates() {
21
+ if (process.env.KODUS_DISABLE_UPDATE_CHECK === '1') {
22
+ return;
61
23
  }
62
- catch {
63
- // silently ignore cache write failures
64
- }
65
- }
66
- async function fetchLatestVersion() {
67
- try {
68
- const controller = new AbortController();
69
- const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
70
- const response = await fetch('https://registry.npmjs.org/@kodus/cli/latest', {
71
- signal: controller.signal,
72
- headers: { 'Accept': 'application/json' },
73
- });
74
- clearTimeout(timeout);
75
- if (!response.ok)
76
- return null;
77
- const data = (await response.json());
78
- return data.version ?? null;
79
- }
80
- catch {
81
- return null;
82
- }
83
- }
84
- export async function checkForUpdates(currentVersion) {
85
- try {
86
- const cache = await readCache();
87
- const now = Date.now();
88
- if (cache && (now - cache.lastCheck) < CHECK_INTERVAL_MS) {
89
- if (isNewerVersion(currentVersion, cache.latestVersion)) {
90
- printUpdateBanner(currentVersion, cache.latestVersion);
91
- }
92
- return;
93
- }
94
- const latestVersion = await fetchLatestVersion();
95
- if (!latestVersion)
96
- return;
97
- await writeCache({ lastCheck: now, latestVersion });
98
- if (isNewerVersion(currentVersion, latestVersion)) {
99
- printUpdateBanner(currentVersion, latestVersion);
100
- }
101
- }
102
- catch {
103
- // silently ignore any errors — update check must never break the CLI
24
+ if (!(await canUseUpdateNotifier())) {
25
+ return;
104
26
  }
27
+ // Update check is non-blocking (runs in background process)
28
+ updateNotifier({ pkg, updateCheckInterval: 1000 * 60 * 60 * 12 }).notify();
105
29
  }
106
30
  //# sourceMappingURL=update-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/utils/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1C,KAAK,UAAU,oBAAoB;IAC/B,MAAM,UAAU,GACZ,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAEtE,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO;IACX,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,oBAAoB,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO;IACX,CAAC;IAED,4DAA4D;IAC5D,cAAc,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/E,CAAC"}