kodu 2.2.0 → 3.0.2

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 (234) hide show
  1. package/README.md +24 -3
  2. package/bin/kodu.js +40 -0
  3. package/package.json +12 -67
  4. package/scripts/install.js +68 -0
  5. package/scripts/postinstall.js +22 -0
  6. package/AGENTS.md +0 -214
  7. package/__tests__/core/fs/fs.service.test.ts +0 -72
  8. package/__tests__/core/registry/registry.service.test.ts +0 -82
  9. package/__tests__/shared/cleaner/cleaner.service.test.ts +0 -102
  10. package/__tests__/shared/git/git.service.test.ts +0 -84
  11. package/__tests__/shared/runbook/runbook.service.test.ts +0 -104
  12. package/__tests__/shared/tokenizer/tokenizer.service.test.ts +0 -45
  13. package/biome.json +0 -50
  14. package/dist/package.json +0 -96
  15. package/dist/src/app.module.d.ts +0 -2
  16. package/dist/src/app.module.js +0 -42
  17. package/dist/src/app.module.js.map +0 -1
  18. package/dist/src/commands/clean/clean.command.d.ts +0 -37
  19. package/dist/src/commands/clean/clean.command.js +0 -240
  20. package/dist/src/commands/clean/clean.command.js.map +0 -1
  21. package/dist/src/commands/clean/clean.module.d.ts +0 -2
  22. package/dist/src/commands/clean/clean.module.js +0 -26
  23. package/dist/src/commands/clean/clean.module.js.map +0 -1
  24. package/dist/src/commands/init/init.command.d.ts +0 -10
  25. package/dist/src/commands/init/init.command.js +0 -96
  26. package/dist/src/commands/init/init.command.js.map +0 -1
  27. package/dist/src/commands/init/init.module.d.ts +0 -2
  28. package/dist/src/commands/init/init.module.js +0 -22
  29. package/dist/src/commands/init/init.module.js.map +0 -1
  30. package/dist/src/commands/ops/ops-add.command.d.ts +0 -18
  31. package/dist/src/commands/ops/ops-add.command.js +0 -102
  32. package/dist/src/commands/ops/ops-add.command.js.map +0 -1
  33. package/dist/src/commands/ops/ops-init.command.d.ts +0 -22
  34. package/dist/src/commands/ops/ops-init.command.js +0 -130
  35. package/dist/src/commands/ops/ops-init.command.js.map +0 -1
  36. package/dist/src/commands/ops/ops-list.command.d.ts +0 -12
  37. package/dist/src/commands/ops/ops-list.command.js +0 -73
  38. package/dist/src/commands/ops/ops-list.command.js.map +0 -1
  39. package/dist/src/commands/ops/ops-path.command.d.ts +0 -9
  40. package/dist/src/commands/ops/ops-path.command.js +0 -52
  41. package/dist/src/commands/ops/ops-path.command.js.map +0 -1
  42. package/dist/src/commands/ops/ops-runbook.command.d.ts +0 -12
  43. package/dist/src/commands/ops/ops-runbook.command.js +0 -81
  44. package/dist/src/commands/ops/ops-runbook.command.js.map +0 -1
  45. package/dist/src/commands/ops/ops-status.command.d.ts +0 -11
  46. package/dist/src/commands/ops/ops-status.command.js +0 -62
  47. package/dist/src/commands/ops/ops-status.command.js.map +0 -1
  48. package/dist/src/commands/ops/ops-use.command.d.ts +0 -12
  49. package/dist/src/commands/ops/ops-use.command.js +0 -76
  50. package/dist/src/commands/ops/ops-use.command.js.map +0 -1
  51. package/dist/src/commands/ops/ops.command.d.ts +0 -7
  52. package/dist/src/commands/ops/ops.command.js +0 -56
  53. package/dist/src/commands/ops/ops.command.js.map +0 -1
  54. package/dist/src/commands/ops/ops.helpers.d.ts +0 -2
  55. package/dist/src/commands/ops/ops.helpers.js +0 -11
  56. package/dist/src/commands/ops/ops.helpers.js.map +0 -1
  57. package/dist/src/commands/ops/ops.module.d.ts +0 -2
  58. package/dist/src/commands/ops/ops.module.js +0 -36
  59. package/dist/src/commands/ops/ops.module.js.map +0 -1
  60. package/dist/src/commands/pack/pack.command.d.ts +0 -51
  61. package/dist/src/commands/pack/pack.command.js +0 -355
  62. package/dist/src/commands/pack/pack.command.js.map +0 -1
  63. package/dist/src/commands/pack/pack.module.d.ts +0 -2
  64. package/dist/src/commands/pack/pack.module.js +0 -27
  65. package/dist/src/commands/pack/pack.module.js.map +0 -1
  66. package/dist/src/core/config/config.module.d.ts +0 -2
  67. package/dist/src/core/config/config.module.js +0 -23
  68. package/dist/src/core/config/config.module.js.map +0 -1
  69. package/dist/src/core/config/config.schema.d.ts +0 -19
  70. package/dist/src/core/config/config.schema.js +0 -56
  71. package/dist/src/core/config/config.schema.js.map +0 -1
  72. package/dist/src/core/config/config.service.d.ts +0 -7
  73. package/dist/src/core/config/config.service.js +0 -49
  74. package/dist/src/core/config/config.service.js.map +0 -1
  75. package/dist/src/core/config/prompt.service.d.ts +0 -10
  76. package/dist/src/core/config/prompt.service.js +0 -80
  77. package/dist/src/core/config/prompt.service.js.map +0 -1
  78. package/dist/src/core/file-system/fs.module.d.ts +0 -2
  79. package/dist/src/core/file-system/fs.module.js +0 -21
  80. package/dist/src/core/file-system/fs.module.js.map +0 -1
  81. package/dist/src/core/file-system/fs.service.d.ts +0 -27
  82. package/dist/src/core/file-system/fs.service.js +0 -203
  83. package/dist/src/core/file-system/fs.service.js.map +0 -1
  84. package/dist/src/core/registry/registry.module.d.ts +0 -2
  85. package/dist/src/core/registry/registry.module.js +0 -22
  86. package/dist/src/core/registry/registry.module.js.map +0 -1
  87. package/dist/src/core/registry/registry.schema.d.ts +0 -24
  88. package/dist/src/core/registry/registry.schema.js +0 -21
  89. package/dist/src/core/registry/registry.schema.js.map +0 -1
  90. package/dist/src/core/registry/registry.service.d.ts +0 -16
  91. package/dist/src/core/registry/registry.service.js +0 -91
  92. package/dist/src/core/registry/registry.service.js.map +0 -1
  93. package/dist/src/core/ui/ui.module.d.ts +0 -2
  94. package/dist/src/core/ui/ui.module.js +0 -22
  95. package/dist/src/core/ui/ui.module.js.map +0 -1
  96. package/dist/src/core/ui/ui.service.d.ts +0 -22
  97. package/dist/src/core/ui/ui.service.js +0 -43
  98. package/dist/src/core/ui/ui.service.js.map +0 -1
  99. package/dist/src/main.d.ts +0 -2
  100. package/dist/src/main.js +0 -16
  101. package/dist/src/main.js.map +0 -1
  102. package/dist/src/shared/cleaner/cleaner.service.d.ts +0 -23
  103. package/dist/src/shared/cleaner/cleaner.service.js +0 -223
  104. package/dist/src/shared/cleaner/cleaner.service.js.map +0 -1
  105. package/dist/src/shared/cleaner/cleaner.types.d.ts +0 -21
  106. package/dist/src/shared/cleaner/cleaner.types.js +0 -3
  107. package/dist/src/shared/cleaner/cleaner.types.js.map +0 -1
  108. package/dist/src/shared/constants.d.ts +0 -4
  109. package/dist/src/shared/constants.js +0 -113
  110. package/dist/src/shared/constants.js.map +0 -1
  111. package/dist/src/shared/deps/deps.module.d.ts +0 -2
  112. package/dist/src/shared/deps/deps.module.js +0 -21
  113. package/dist/src/shared/deps/deps.module.js.map +0 -1
  114. package/dist/src/shared/deps/deps.service.d.ts +0 -15
  115. package/dist/src/shared/deps/deps.service.js +0 -114
  116. package/dist/src/shared/deps/deps.service.js.map +0 -1
  117. package/dist/src/shared/git/git.module.d.ts +0 -2
  118. package/dist/src/shared/git/git.module.js +0 -21
  119. package/dist/src/shared/git/git.module.js.map +0 -1
  120. package/dist/src/shared/git/git.service.d.ts +0 -5
  121. package/dist/src/shared/git/git.service.js +0 -56
  122. package/dist/src/shared/git/git.service.js.map +0 -1
  123. package/dist/src/shared/runbook/runbook.module.d.ts +0 -2
  124. package/dist/src/shared/runbook/runbook.module.js +0 -22
  125. package/dist/src/shared/runbook/runbook.module.js.map +0 -1
  126. package/dist/src/shared/runbook/runbook.service.d.ts +0 -20
  127. package/dist/src/shared/runbook/runbook.service.js +0 -118
  128. package/dist/src/shared/runbook/runbook.service.js.map +0 -1
  129. package/dist/src/shared/runbook/runbook.templates.d.ts +0 -6
  130. package/dist/src/shared/runbook/runbook.templates.js +0 -49
  131. package/dist/src/shared/runbook/runbook.templates.js.map +0 -1
  132. package/dist/src/shared/tokenizer/tokenizer.module.d.ts +0 -2
  133. package/dist/src/shared/tokenizer/tokenizer.module.js +0 -21
  134. package/dist/src/shared/tokenizer/tokenizer.module.js.map +0 -1
  135. package/dist/src/shared/tokenizer/tokenizer.service.d.ts +0 -10
  136. package/dist/src/shared/tokenizer/tokenizer.service.js +0 -36
  137. package/dist/src/shared/tokenizer/tokenizer.service.js.map +0 -1
  138. package/dist/tsconfig.build.tsbuildinfo +0 -1
  139. package/docs/todo.md +0 -7
  140. package/knip.json +0 -10
  141. package/kodu.json +0 -63
  142. package/kodu.schema.json +0 -100
  143. package/lefthook.yml +0 -11
  144. package/nest-cli.json +0 -8
  145. package/registry.schema.json +0 -39
  146. package/scripts/generate-json-schema.ts +0 -27
  147. package/skills/ac/SKILL.md +0 -239
  148. package/skills/al/SKILL.md +0 -98
  149. package/skills/audit/SKILL.md +0 -205
  150. package/skills/audit/audit-baseline-template.yml +0 -188
  151. package/skills/audit/runtime-detect.md +0 -64
  152. package/skills/audit/stacks/_generic.md +0 -41
  153. package/skills/audit/stacks/_registry.md +0 -47
  154. package/skills/audit/stacks/go.md +0 -66
  155. package/skills/audit/stacks/java.md +0 -44
  156. package/skills/audit/stacks/node.md +0 -57
  157. package/skills/audit/stacks/python.md +0 -45
  158. package/skills/audit/stacks/rust.md +0 -44
  159. package/skills/audit-api-contracts/SKILL.md +0 -201
  160. package/skills/audit-architecture/SKILL.md +0 -200
  161. package/skills/audit-bugs/SKILL.md +0 -226
  162. package/skills/audit-concurrency/SKILL.md +0 -197
  163. package/skills/audit-deployment/SKILL.md +0 -218
  164. package/skills/audit-docs/SKILL.md +0 -209
  165. package/skills/audit-errors/SKILL.md +0 -216
  166. package/skills/audit-logging/SKILL.md +0 -197
  167. package/skills/audit-matrix/SKILL.md +0 -245
  168. package/skills/audit-meta/SKILL.md +0 -120
  169. package/skills/audit-naming/SKILL.md +0 -200
  170. package/skills/audit-owasp/SKILL.md +0 -223
  171. package/skills/audit-performance/SKILL.md +0 -199
  172. package/skills/audit-reinvention/SKILL.md +0 -214
  173. package/skills/audit-secrets/SKILL.md +0 -198
  174. package/skills/audit-tests/SKILL.md +0 -210
  175. package/skills/audit-validation/SKILL.md +0 -206
  176. package/skills/audit-verify/SKILL.md +0 -139
  177. package/skills/audit-yagni/SKILL.md +0 -188
  178. package/skills/doc-gen/SKILL.md +0 -490
  179. package/skills/doc-gen/scripts/doc_gen.py +0 -911
  180. package/skills/generate-project-docs/SKILL.md +0 -380
  181. package/skills/implement-project/SKILL.md +0 -409
  182. package/skills/liteend-init/SKILL.md +0 -84
  183. package/skills/litefront-init/SKILL.md +0 -96
  184. package/skills/litefront-prototype/SKILL.md +0 -484
  185. package/skills/ops/SKILL.md +0 -94
  186. package/skills/post-call-task-builder/SKILL.md +0 -419
  187. package/skills/project-setup-standardizer/SKILL.md +0 -285
  188. package/skills/skills-best-practices/SKILL.md +0 -415
  189. package/skills/start/SKILL.md +0 -319
  190. package/skills/tech-blueprint/SKILL.md +0 -890
  191. package/skills/tech-blueprint/scripts/blueprint_validator.py +0 -417
  192. package/src/app.module.ts +0 -29
  193. package/src/commands/clean/clean.command.ts +0 -235
  194. package/src/commands/clean/clean.module.ts +0 -13
  195. package/src/commands/init/init.command.ts +0 -92
  196. package/src/commands/init/init.module.ts +0 -9
  197. package/src/commands/ops/ops-add.command.ts +0 -83
  198. package/src/commands/ops/ops-init.command.ts +0 -125
  199. package/src/commands/ops/ops-list.command.ts +0 -57
  200. package/src/commands/ops/ops-path.command.ts +0 -38
  201. package/src/commands/ops/ops-runbook.command.ts +0 -74
  202. package/src/commands/ops/ops-status.command.ts +0 -47
  203. package/src/commands/ops/ops-use.command.ts +0 -76
  204. package/src/commands/ops/ops.command.ts +0 -42
  205. package/src/commands/ops/ops.helpers.ts +0 -20
  206. package/src/commands/ops/ops.module.ts +0 -23
  207. package/src/commands/pack/pack.command.ts +0 -347
  208. package/src/commands/pack/pack.module.ts +0 -14
  209. package/src/core/config/config.module.ts +0 -10
  210. package/src/core/config/config.schema.ts +0 -58
  211. package/src/core/config/config.service.ts +0 -43
  212. package/src/core/config/prompt.service.ts +0 -80
  213. package/src/core/file-system/fs.module.ts +0 -8
  214. package/src/core/file-system/fs.service.ts +0 -248
  215. package/src/core/registry/registry.module.ts +0 -9
  216. package/src/core/registry/registry.schema.ts +0 -46
  217. package/src/core/registry/registry.service.ts +0 -128
  218. package/src/core/ui/ui.module.ts +0 -9
  219. package/src/core/ui/ui.service.ts +0 -39
  220. package/src/main.ts +0 -12
  221. package/src/shared/cleaner/cleaner.service.ts +0 -289
  222. package/src/shared/cleaner/cleaner.types.ts +0 -23
  223. package/src/shared/constants.ts +0 -118
  224. package/src/shared/deps/deps.module.ts +0 -8
  225. package/src/shared/deps/deps.service.ts +0 -175
  226. package/src/shared/git/git.module.ts +0 -8
  227. package/src/shared/git/git.service.ts +0 -47
  228. package/src/shared/runbook/runbook.module.ts +0 -9
  229. package/src/shared/runbook/runbook.service.ts +0 -164
  230. package/src/shared/runbook/runbook.templates.ts +0 -66
  231. package/src/shared/tokenizer/tokenizer.module.ts +0 -8
  232. package/src/shared/tokenizer/tokenizer.service.ts +0 -30
  233. package/tsconfig.build.json +0 -7
  234. package/tsconfig.json +0 -28
@@ -1,164 +0,0 @@
1
- import { promises as fs } from 'node:fs';
2
- import path from 'node:path';
3
- import { Injectable } from '@nestjs/common';
4
- import {
5
- type ProjectConfig,
6
- projectConfigSchema,
7
- } from '../../core/registry/registry.schema';
8
- import { type DetectedStack, renderRunbook } from './runbook.templates';
9
-
10
- const RUNBOOK_DIR = '.runbook';
11
- const GITIGNORE_ENTRY = '/.runbook/';
12
- /** Эквивалентные записи `.runbook/` в `.gitignore` — считаем дублем. */
13
- const GITIGNORE_EQUIVALENTS = new Set([
14
- '/.runbook/',
15
- '/.runbook',
16
- '.runbook/',
17
- '.runbook',
18
- ]);
19
-
20
- /** Результат настройки `.gitignore`. */
21
- export type GitignoreResult = 'created' | 'added' | 'present' | 'no-git';
22
-
23
- /**
24
- * Работа с per-project директорией `.runbook/`: скаффолд, чтение/запись
25
- * `config.json`, чтение `runbook.md` и идемпотентная настройка `.gitignore`.
26
- */
27
- @Injectable()
28
- export class RunbookService {
29
- dirPath(root: string = process.cwd()): string {
30
- return path.join(root, RUNBOOK_DIR);
31
- }
32
-
33
- configPath(root: string = process.cwd()): string {
34
- return path.join(root, RUNBOOK_DIR, 'config.json');
35
- }
36
-
37
- runbookPath(root: string = process.cwd()): string {
38
- return path.join(root, RUNBOOK_DIR, 'runbook.md');
39
- }
40
-
41
- /** Инициализирован ли проект (есть `.runbook/config.json`). */
42
- async exists(root: string = process.cwd()): Promise<boolean> {
43
- return this.pathExists(this.configPath(root));
44
- }
45
-
46
- async readConfig(root: string = process.cwd()): Promise<ProjectConfig> {
47
- const content = await fs.readFile(this.configPath(root), 'utf8');
48
- return projectConfigSchema.parse(JSON.parse(content));
49
- }
50
-
51
- async writeConfig(
52
- config: ProjectConfig,
53
- root: string = process.cwd(),
54
- ): Promise<void> {
55
- const validated = projectConfigSchema.parse(config);
56
- await fs.mkdir(this.dirPath(root), { recursive: true });
57
- await fs.writeFile(
58
- this.configPath(root),
59
- `${JSON.stringify(validated, null, 2)}\n`,
60
- 'utf8',
61
- );
62
- }
63
-
64
- async readRunbook(root: string = process.cwd()): Promise<string> {
65
- return fs.readFile(this.runbookPath(root), 'utf8');
66
- }
67
-
68
- /**
69
- * Создаёт `.runbook/` с config.json и (если ещё нет) runbook.md.
70
- * Существующий runbook.md не перезаписывается — ручные правки сохраняются.
71
- */
72
- async scaffold(
73
- options: { project: string; stands: string[]; activeStand: string },
74
- root: string = process.cwd(),
75
- ): Promise<void> {
76
- await fs.mkdir(this.dirPath(root), { recursive: true });
77
-
78
- await this.writeConfig(
79
- {
80
- project: options.project,
81
- activeStand: options.activeStand,
82
- stands: options.stands,
83
- },
84
- root,
85
- );
86
-
87
- if (!(await this.pathExists(this.runbookPath(root)))) {
88
- const detected = await this.detectStack(root);
89
- const markdown = renderRunbook(options.project, options.stands, detected);
90
- await fs.writeFile(this.runbookPath(root), markdown, 'utf8');
91
- }
92
- }
93
-
94
- /** Определяет наличие docker-compose / Dockerfile / .env.example. */
95
- async detectStack(root: string = process.cwd()): Promise<DetectedStack> {
96
- const [composeYml, composeYaml, dockerfile, envExample] = await Promise.all(
97
- [
98
- this.pathExists(path.join(root, 'docker-compose.yml')),
99
- this.pathExists(path.join(root, 'docker-compose.yaml')),
100
- this.pathExists(path.join(root, 'Dockerfile')),
101
- this.pathExists(path.join(root, '.env.example')),
102
- ],
103
- );
104
-
105
- return {
106
- compose: composeYml || composeYaml,
107
- dockerfile,
108
- envExample,
109
- };
110
- }
111
-
112
- /**
113
- * Гарантирует, что `.runbook/` игнорируется git — автоматически и идемпотентно.
114
- * - не git-репозиторий → ничего не пишем, возвращаем 'no-git';
115
- * - запись уже есть → 'present';
116
- * - `.gitignore` отсутствует → создаём с записью → 'created';
117
- * - иначе дописываем в конец → 'added'.
118
- */
119
- async ensureGitignore(
120
- root: string = process.cwd(),
121
- ): Promise<GitignoreResult> {
122
- if (!(await this.pathExists(path.join(root, '.git')))) {
123
- return 'no-git';
124
- }
125
-
126
- const gitignorePath = path.join(root, '.gitignore');
127
- let content = '';
128
- let fileExists = true;
129
-
130
- try {
131
- content = await fs.readFile(gitignorePath, 'utf8');
132
- } catch {
133
- fileExists = false;
134
- }
135
-
136
- const alreadyIgnored = content
137
- .split(/\r?\n/)
138
- .map((line) => line.trim())
139
- .some((line) => GITIGNORE_EQUIVALENTS.has(line));
140
-
141
- if (alreadyIgnored) {
142
- return 'present';
143
- }
144
-
145
- const trimmed = content.trimEnd();
146
- const next =
147
- trimmed.length > 0
148
- ? `${trimmed}\n${GITIGNORE_ENTRY}\n`
149
- : `${GITIGNORE_ENTRY}\n`;
150
-
151
- await fs.writeFile(gitignorePath, next, 'utf8');
152
-
153
- return fileExists ? 'added' : 'created';
154
- }
155
-
156
- private async pathExists(target: string): Promise<boolean> {
157
- try {
158
- await fs.access(target);
159
- return true;
160
- } catch {
161
- return false;
162
- }
163
- }
164
- }
@@ -1,66 +0,0 @@
1
- /** Что удалось определить про проект (для подсказок в runbook). */
2
- export type DetectedStack = {
3
- compose: boolean;
4
- dockerfile: boolean;
5
- envExample: boolean;
6
- };
7
-
8
- const STAND_TITLES: Record<string, string> = {
9
- local: 'локальная разработка',
10
- dev: 'dev-стенд',
11
- stage: 'stage-стенд',
12
- prod: 'production (осторожно!)',
13
- };
14
-
15
- function renderStandSection(stand: string, detected: DetectedStack): string {
16
- const title = STAND_TITLES[stand] ?? stand;
17
-
18
- const startCmd = detected.compose
19
- ? 'docker compose up -d'
20
- : '<команда запуска, напр. docker compose up -d>';
21
- const logsCmd = detected.compose
22
- ? 'docker compose logs -f'
23
- : '<команда логов>';
24
- const envNote = detected.envExample
25
- ? 'Скопируй `.env.example` → `.env` и заполни значения.'
26
- : '<откуда взять переменные окружения / секреты>';
27
-
28
- return [
29
- `## Стенд: ${stand} (${title})`,
30
- '',
31
- '- **Где живёт / доступ**: <ssh user@host или localhost>',
32
- '- **Рабочая директория**: <путь на сервере или локально>',
33
- '- **Получить код**: `git clone <repo>` (первый раз) / `git pull` (обновить)',
34
- `- **Запуск**: \`${startCmd}\``,
35
- `- **Логи**: \`${logsCmd}\``,
36
- '- **Деплой**: <пошаговые команды деплоя на этот стенд>',
37
- '- **Откат**: <как откатиться, если что-то пошло не так>',
38
- `- **Переменные окружения / секреты**: ${envNote}`,
39
- '',
40
- ].join('\n');
41
- }
42
-
43
- /**
44
- * Стартовый runbook для проекта. Заполняется человеком/агентом — конкретные
45
- * команды и пути подставляются под реальную инфраструктуру.
46
- */
47
- export function renderRunbook(
48
- project: string,
49
- stands: string[],
50
- detected: DetectedStack,
51
- ): string {
52
- const header = [
53
- `# Runbook: ${project}`,
54
- '',
55
- '> Этот файл описывает, как работать со стендами проекта.',
56
- '> Он лежит в `.gitignore` и не коммитится — здесь могут быть хосты и пути.',
57
- '> Заполни плейсхолдеры `<...>` под свою инфраструктуру.',
58
- '',
59
- ].join('\n');
60
-
61
- const sections = stands
62
- .map((stand) => renderStandSection(stand, detected))
63
- .join('\n');
64
-
65
- return `${header}\n${sections}`;
66
- }
@@ -1,8 +0,0 @@
1
- import { Module } from '@nestjs/common';
2
- import { TokenizerService } from './tokenizer.service';
3
-
4
- @Module({
5
- providers: [TokenizerService],
6
- exports: [TokenizerService],
7
- })
8
- export class TokenizerModule {}
@@ -1,30 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { encodingForModel, getEncoding } from 'js-tiktoken';
3
- import { DEFAULT_PRICE_PER_MILLION } from '../constants';
4
-
5
- type TokenEstimate = {
6
- tokens: number;
7
- usdEstimate: number;
8
- };
9
-
10
- @Injectable()
11
- export class TokenizerService {
12
- private encoder?: ReturnType<typeof getEncoding>;
13
-
14
- count(text: string): TokenEstimate {
15
- const tokens = this.getEncoder().encode(text).length;
16
- const usdEstimate = (tokens / 1_000_000) * DEFAULT_PRICE_PER_MILLION;
17
- return { tokens, usdEstimate };
18
- }
19
-
20
- private getEncoder() {
21
- if (!this.encoder) {
22
- try {
23
- this.encoder = encodingForModel('gpt-4o');
24
- } catch {
25
- this.encoder = getEncoding('o200k_base');
26
- }
27
- }
28
- return this.encoder;
29
- }
30
- }
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "noEmit": false
5
- },
6
- "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
7
- }
package/tsconfig.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2023",
4
- "module": "nodenext",
5
- "moduleResolution": "nodenext",
6
- "resolvePackageJsonExports": true,
7
- "esModuleInterop": true,
8
- "isolatedModules": true,
9
- "declaration": true,
10
- "removeComments": true,
11
- "emitDecoratorMetadata": true,
12
- "experimentalDecorators": true,
13
- "allowSyntheticDefaultImports": true,
14
- "sourceMap": true,
15
- "outDir": "./dist",
16
- "baseUrl": "./",
17
- "incremental": true,
18
- "skipLibCheck": true,
19
- "strict": true,
20
- "strictNullChecks": true,
21
- "forceConsistentCasingInFileNames": true,
22
- "noImplicitAny": false,
23
- "noEmit": true,
24
- "strictBindCallApply": false,
25
- "noFallthroughCasesInSwitch": false
26
- },
27
- "include": ["src", "*.ts"]
28
- }