kodu 2.2.0 → 3.0.1

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 (233) hide show
  1. package/README.md +24 -3
  2. package/bin/kodu.js +23 -0
  3. package/package.json +11 -67
  4. package/scripts/postinstall.js +69 -0
  5. package/AGENTS.md +0 -214
  6. package/__tests__/core/fs/fs.service.test.ts +0 -72
  7. package/__tests__/core/registry/registry.service.test.ts +0 -82
  8. package/__tests__/shared/cleaner/cleaner.service.test.ts +0 -102
  9. package/__tests__/shared/git/git.service.test.ts +0 -84
  10. package/__tests__/shared/runbook/runbook.service.test.ts +0 -104
  11. package/__tests__/shared/tokenizer/tokenizer.service.test.ts +0 -45
  12. package/biome.json +0 -50
  13. package/dist/package.json +0 -96
  14. package/dist/src/app.module.d.ts +0 -2
  15. package/dist/src/app.module.js +0 -42
  16. package/dist/src/app.module.js.map +0 -1
  17. package/dist/src/commands/clean/clean.command.d.ts +0 -37
  18. package/dist/src/commands/clean/clean.command.js +0 -240
  19. package/dist/src/commands/clean/clean.command.js.map +0 -1
  20. package/dist/src/commands/clean/clean.module.d.ts +0 -2
  21. package/dist/src/commands/clean/clean.module.js +0 -26
  22. package/dist/src/commands/clean/clean.module.js.map +0 -1
  23. package/dist/src/commands/init/init.command.d.ts +0 -10
  24. package/dist/src/commands/init/init.command.js +0 -96
  25. package/dist/src/commands/init/init.command.js.map +0 -1
  26. package/dist/src/commands/init/init.module.d.ts +0 -2
  27. package/dist/src/commands/init/init.module.js +0 -22
  28. package/dist/src/commands/init/init.module.js.map +0 -1
  29. package/dist/src/commands/ops/ops-add.command.d.ts +0 -18
  30. package/dist/src/commands/ops/ops-add.command.js +0 -102
  31. package/dist/src/commands/ops/ops-add.command.js.map +0 -1
  32. package/dist/src/commands/ops/ops-init.command.d.ts +0 -22
  33. package/dist/src/commands/ops/ops-init.command.js +0 -130
  34. package/dist/src/commands/ops/ops-init.command.js.map +0 -1
  35. package/dist/src/commands/ops/ops-list.command.d.ts +0 -12
  36. package/dist/src/commands/ops/ops-list.command.js +0 -73
  37. package/dist/src/commands/ops/ops-list.command.js.map +0 -1
  38. package/dist/src/commands/ops/ops-path.command.d.ts +0 -9
  39. package/dist/src/commands/ops/ops-path.command.js +0 -52
  40. package/dist/src/commands/ops/ops-path.command.js.map +0 -1
  41. package/dist/src/commands/ops/ops-runbook.command.d.ts +0 -12
  42. package/dist/src/commands/ops/ops-runbook.command.js +0 -81
  43. package/dist/src/commands/ops/ops-runbook.command.js.map +0 -1
  44. package/dist/src/commands/ops/ops-status.command.d.ts +0 -11
  45. package/dist/src/commands/ops/ops-status.command.js +0 -62
  46. package/dist/src/commands/ops/ops-status.command.js.map +0 -1
  47. package/dist/src/commands/ops/ops-use.command.d.ts +0 -12
  48. package/dist/src/commands/ops/ops-use.command.js +0 -76
  49. package/dist/src/commands/ops/ops-use.command.js.map +0 -1
  50. package/dist/src/commands/ops/ops.command.d.ts +0 -7
  51. package/dist/src/commands/ops/ops.command.js +0 -56
  52. package/dist/src/commands/ops/ops.command.js.map +0 -1
  53. package/dist/src/commands/ops/ops.helpers.d.ts +0 -2
  54. package/dist/src/commands/ops/ops.helpers.js +0 -11
  55. package/dist/src/commands/ops/ops.helpers.js.map +0 -1
  56. package/dist/src/commands/ops/ops.module.d.ts +0 -2
  57. package/dist/src/commands/ops/ops.module.js +0 -36
  58. package/dist/src/commands/ops/ops.module.js.map +0 -1
  59. package/dist/src/commands/pack/pack.command.d.ts +0 -51
  60. package/dist/src/commands/pack/pack.command.js +0 -355
  61. package/dist/src/commands/pack/pack.command.js.map +0 -1
  62. package/dist/src/commands/pack/pack.module.d.ts +0 -2
  63. package/dist/src/commands/pack/pack.module.js +0 -27
  64. package/dist/src/commands/pack/pack.module.js.map +0 -1
  65. package/dist/src/core/config/config.module.d.ts +0 -2
  66. package/dist/src/core/config/config.module.js +0 -23
  67. package/dist/src/core/config/config.module.js.map +0 -1
  68. package/dist/src/core/config/config.schema.d.ts +0 -19
  69. package/dist/src/core/config/config.schema.js +0 -56
  70. package/dist/src/core/config/config.schema.js.map +0 -1
  71. package/dist/src/core/config/config.service.d.ts +0 -7
  72. package/dist/src/core/config/config.service.js +0 -49
  73. package/dist/src/core/config/config.service.js.map +0 -1
  74. package/dist/src/core/config/prompt.service.d.ts +0 -10
  75. package/dist/src/core/config/prompt.service.js +0 -80
  76. package/dist/src/core/config/prompt.service.js.map +0 -1
  77. package/dist/src/core/file-system/fs.module.d.ts +0 -2
  78. package/dist/src/core/file-system/fs.module.js +0 -21
  79. package/dist/src/core/file-system/fs.module.js.map +0 -1
  80. package/dist/src/core/file-system/fs.service.d.ts +0 -27
  81. package/dist/src/core/file-system/fs.service.js +0 -203
  82. package/dist/src/core/file-system/fs.service.js.map +0 -1
  83. package/dist/src/core/registry/registry.module.d.ts +0 -2
  84. package/dist/src/core/registry/registry.module.js +0 -22
  85. package/dist/src/core/registry/registry.module.js.map +0 -1
  86. package/dist/src/core/registry/registry.schema.d.ts +0 -24
  87. package/dist/src/core/registry/registry.schema.js +0 -21
  88. package/dist/src/core/registry/registry.schema.js.map +0 -1
  89. package/dist/src/core/registry/registry.service.d.ts +0 -16
  90. package/dist/src/core/registry/registry.service.js +0 -91
  91. package/dist/src/core/registry/registry.service.js.map +0 -1
  92. package/dist/src/core/ui/ui.module.d.ts +0 -2
  93. package/dist/src/core/ui/ui.module.js +0 -22
  94. package/dist/src/core/ui/ui.module.js.map +0 -1
  95. package/dist/src/core/ui/ui.service.d.ts +0 -22
  96. package/dist/src/core/ui/ui.service.js +0 -43
  97. package/dist/src/core/ui/ui.service.js.map +0 -1
  98. package/dist/src/main.d.ts +0 -2
  99. package/dist/src/main.js +0 -16
  100. package/dist/src/main.js.map +0 -1
  101. package/dist/src/shared/cleaner/cleaner.service.d.ts +0 -23
  102. package/dist/src/shared/cleaner/cleaner.service.js +0 -223
  103. package/dist/src/shared/cleaner/cleaner.service.js.map +0 -1
  104. package/dist/src/shared/cleaner/cleaner.types.d.ts +0 -21
  105. package/dist/src/shared/cleaner/cleaner.types.js +0 -3
  106. package/dist/src/shared/cleaner/cleaner.types.js.map +0 -1
  107. package/dist/src/shared/constants.d.ts +0 -4
  108. package/dist/src/shared/constants.js +0 -113
  109. package/dist/src/shared/constants.js.map +0 -1
  110. package/dist/src/shared/deps/deps.module.d.ts +0 -2
  111. package/dist/src/shared/deps/deps.module.js +0 -21
  112. package/dist/src/shared/deps/deps.module.js.map +0 -1
  113. package/dist/src/shared/deps/deps.service.d.ts +0 -15
  114. package/dist/src/shared/deps/deps.service.js +0 -114
  115. package/dist/src/shared/deps/deps.service.js.map +0 -1
  116. package/dist/src/shared/git/git.module.d.ts +0 -2
  117. package/dist/src/shared/git/git.module.js +0 -21
  118. package/dist/src/shared/git/git.module.js.map +0 -1
  119. package/dist/src/shared/git/git.service.d.ts +0 -5
  120. package/dist/src/shared/git/git.service.js +0 -56
  121. package/dist/src/shared/git/git.service.js.map +0 -1
  122. package/dist/src/shared/runbook/runbook.module.d.ts +0 -2
  123. package/dist/src/shared/runbook/runbook.module.js +0 -22
  124. package/dist/src/shared/runbook/runbook.module.js.map +0 -1
  125. package/dist/src/shared/runbook/runbook.service.d.ts +0 -20
  126. package/dist/src/shared/runbook/runbook.service.js +0 -118
  127. package/dist/src/shared/runbook/runbook.service.js.map +0 -1
  128. package/dist/src/shared/runbook/runbook.templates.d.ts +0 -6
  129. package/dist/src/shared/runbook/runbook.templates.js +0 -49
  130. package/dist/src/shared/runbook/runbook.templates.js.map +0 -1
  131. package/dist/src/shared/tokenizer/tokenizer.module.d.ts +0 -2
  132. package/dist/src/shared/tokenizer/tokenizer.module.js +0 -21
  133. package/dist/src/shared/tokenizer/tokenizer.module.js.map +0 -1
  134. package/dist/src/shared/tokenizer/tokenizer.service.d.ts +0 -10
  135. package/dist/src/shared/tokenizer/tokenizer.service.js +0 -36
  136. package/dist/src/shared/tokenizer/tokenizer.service.js.map +0 -1
  137. package/dist/tsconfig.build.tsbuildinfo +0 -1
  138. package/docs/todo.md +0 -7
  139. package/knip.json +0 -10
  140. package/kodu.json +0 -63
  141. package/kodu.schema.json +0 -100
  142. package/lefthook.yml +0 -11
  143. package/nest-cli.json +0 -8
  144. package/registry.schema.json +0 -39
  145. package/scripts/generate-json-schema.ts +0 -27
  146. package/skills/ac/SKILL.md +0 -239
  147. package/skills/al/SKILL.md +0 -98
  148. package/skills/audit/SKILL.md +0 -205
  149. package/skills/audit/audit-baseline-template.yml +0 -188
  150. package/skills/audit/runtime-detect.md +0 -64
  151. package/skills/audit/stacks/_generic.md +0 -41
  152. package/skills/audit/stacks/_registry.md +0 -47
  153. package/skills/audit/stacks/go.md +0 -66
  154. package/skills/audit/stacks/java.md +0 -44
  155. package/skills/audit/stacks/node.md +0 -57
  156. package/skills/audit/stacks/python.md +0 -45
  157. package/skills/audit/stacks/rust.md +0 -44
  158. package/skills/audit-api-contracts/SKILL.md +0 -201
  159. package/skills/audit-architecture/SKILL.md +0 -200
  160. package/skills/audit-bugs/SKILL.md +0 -226
  161. package/skills/audit-concurrency/SKILL.md +0 -197
  162. package/skills/audit-deployment/SKILL.md +0 -218
  163. package/skills/audit-docs/SKILL.md +0 -209
  164. package/skills/audit-errors/SKILL.md +0 -216
  165. package/skills/audit-logging/SKILL.md +0 -197
  166. package/skills/audit-matrix/SKILL.md +0 -245
  167. package/skills/audit-meta/SKILL.md +0 -120
  168. package/skills/audit-naming/SKILL.md +0 -200
  169. package/skills/audit-owasp/SKILL.md +0 -223
  170. package/skills/audit-performance/SKILL.md +0 -199
  171. package/skills/audit-reinvention/SKILL.md +0 -214
  172. package/skills/audit-secrets/SKILL.md +0 -198
  173. package/skills/audit-tests/SKILL.md +0 -210
  174. package/skills/audit-validation/SKILL.md +0 -206
  175. package/skills/audit-verify/SKILL.md +0 -139
  176. package/skills/audit-yagni/SKILL.md +0 -188
  177. package/skills/doc-gen/SKILL.md +0 -490
  178. package/skills/doc-gen/scripts/doc_gen.py +0 -911
  179. package/skills/generate-project-docs/SKILL.md +0 -380
  180. package/skills/implement-project/SKILL.md +0 -409
  181. package/skills/liteend-init/SKILL.md +0 -84
  182. package/skills/litefront-init/SKILL.md +0 -96
  183. package/skills/litefront-prototype/SKILL.md +0 -484
  184. package/skills/ops/SKILL.md +0 -94
  185. package/skills/post-call-task-builder/SKILL.md +0 -419
  186. package/skills/project-setup-standardizer/SKILL.md +0 -285
  187. package/skills/skills-best-practices/SKILL.md +0 -415
  188. package/skills/start/SKILL.md +0 -319
  189. package/skills/tech-blueprint/SKILL.md +0 -890
  190. package/skills/tech-blueprint/scripts/blueprint_validator.py +0 -417
  191. package/src/app.module.ts +0 -29
  192. package/src/commands/clean/clean.command.ts +0 -235
  193. package/src/commands/clean/clean.module.ts +0 -13
  194. package/src/commands/init/init.command.ts +0 -92
  195. package/src/commands/init/init.module.ts +0 -9
  196. package/src/commands/ops/ops-add.command.ts +0 -83
  197. package/src/commands/ops/ops-init.command.ts +0 -125
  198. package/src/commands/ops/ops-list.command.ts +0 -57
  199. package/src/commands/ops/ops-path.command.ts +0 -38
  200. package/src/commands/ops/ops-runbook.command.ts +0 -74
  201. package/src/commands/ops/ops-status.command.ts +0 -47
  202. package/src/commands/ops/ops-use.command.ts +0 -76
  203. package/src/commands/ops/ops.command.ts +0 -42
  204. package/src/commands/ops/ops.helpers.ts +0 -20
  205. package/src/commands/ops/ops.module.ts +0 -23
  206. package/src/commands/pack/pack.command.ts +0 -347
  207. package/src/commands/pack/pack.module.ts +0 -14
  208. package/src/core/config/config.module.ts +0 -10
  209. package/src/core/config/config.schema.ts +0 -58
  210. package/src/core/config/config.service.ts +0 -43
  211. package/src/core/config/prompt.service.ts +0 -80
  212. package/src/core/file-system/fs.module.ts +0 -8
  213. package/src/core/file-system/fs.service.ts +0 -248
  214. package/src/core/registry/registry.module.ts +0 -9
  215. package/src/core/registry/registry.schema.ts +0 -46
  216. package/src/core/registry/registry.service.ts +0 -128
  217. package/src/core/ui/ui.module.ts +0 -9
  218. package/src/core/ui/ui.service.ts +0 -39
  219. package/src/main.ts +0 -12
  220. package/src/shared/cleaner/cleaner.service.ts +0 -289
  221. package/src/shared/cleaner/cleaner.types.ts +0 -23
  222. package/src/shared/constants.ts +0 -118
  223. package/src/shared/deps/deps.module.ts +0 -8
  224. package/src/shared/deps/deps.service.ts +0 -175
  225. package/src/shared/git/git.module.ts +0 -8
  226. package/src/shared/git/git.service.ts +0 -47
  227. package/src/shared/runbook/runbook.module.ts +0 -9
  228. package/src/shared/runbook/runbook.service.ts +0 -164
  229. package/src/shared/runbook/runbook.templates.ts +0 -66
  230. package/src/shared/tokenizer/tokenizer.module.ts +0 -8
  231. package/src/shared/tokenizer/tokenizer.service.ts +0 -30
  232. package/tsconfig.build.json +0 -7
  233. package/tsconfig.json +0 -28
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.DepsModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const deps_service_1 = require("./deps.service");
12
- let DepsModule = class DepsModule {
13
- };
14
- exports.DepsModule = DepsModule;
15
- exports.DepsModule = DepsModule = __decorate([
16
- (0, common_1.Module)({
17
- providers: [deps_service_1.DepsService],
18
- exports: [deps_service_1.DepsService],
19
- })
20
- ], DepsModule);
21
- //# sourceMappingURL=deps.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.module.js","sourceRoot":"","sources":["../../../../src/shared/deps/deps.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iDAA6C;AAMtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAJtB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAAG"}
@@ -1,15 +0,0 @@
1
- export type DepsResult = {
2
- files: string[];
3
- explain: Map<string, string>;
4
- };
5
- type CollectOptions = {
6
- maxDepth?: number;
7
- includeTypes?: boolean;
8
- includeDynamic?: boolean;
9
- };
10
- export declare class DepsService {
11
- collectDependencies(entryFiles: string[], projectRoot: string, options?: CollectOptions): DepsResult;
12
- private collect;
13
- private findTsConfig;
14
- }
15
- export {};
@@ -1,114 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.DepsService = void 0;
13
- const node_path_1 = __importDefault(require("node:path"));
14
- const common_1 = require("@nestjs/common");
15
- const ts_morph_1 = require("ts-morph");
16
- let DepsService = class DepsService {
17
- collectDependencies(entryFiles, projectRoot, options = {}) {
18
- const { maxDepth = Infinity, includeTypes = true, includeDynamic = false, } = options;
19
- const tsConfigPath = this.findTsConfig(projectRoot);
20
- const project = tsConfigPath
21
- ? new ts_morph_1.Project({
22
- tsConfigFilePath: tsConfigPath,
23
- skipAddingFilesFromTsConfig: true,
24
- })
25
- : new ts_morph_1.Project({
26
- compilerOptions: {
27
- allowJs: true,
28
- resolveJsonModule: true,
29
- moduleResolution: 2,
30
- },
31
- });
32
- const visited = new Set();
33
- const explain = new Map();
34
- const absEntries = entryFiles.map((f) => node_path_1.default.isAbsolute(f) ? f : node_path_1.default.resolve(projectRoot, f));
35
- for (const entry of absEntries) {
36
- explain.set(entry, 'entry point');
37
- this.collect(project, entry, projectRoot, visited, explain, 0, maxDepth, includeTypes, includeDynamic);
38
- }
39
- const files = [...visited].map((abs) => node_path_1.default.relative(projectRoot, abs).split(node_path_1.default.sep).join(node_path_1.default.posix.sep));
40
- return { files, explain };
41
- }
42
- collect(project, absFile, projectRoot, visited, explain, depth, maxDepth, includeTypes, includeDynamic) {
43
- if (visited.has(absFile))
44
- return;
45
- visited.add(absFile);
46
- if (depth >= maxDepth)
47
- return;
48
- let sourceFile = project.getSourceFile(absFile);
49
- if (!sourceFile) {
50
- try {
51
- sourceFile = project.addSourceFileAtPath(absFile);
52
- }
53
- catch {
54
- return;
55
- }
56
- }
57
- const relFrom = node_path_1.default
58
- .relative(projectRoot, absFile)
59
- .split(node_path_1.default.sep)
60
- .join(node_path_1.default.posix.sep);
61
- for (const importDecl of sourceFile.getImportDeclarations()) {
62
- if (!includeTypes && importDecl.isTypeOnly())
63
- continue;
64
- const resolved = importDecl.getModuleSpecifierSourceFile();
65
- if (!resolved)
66
- continue;
67
- const absResolved = resolved.getFilePath();
68
- if (absResolved.includes('node_modules'))
69
- continue;
70
- if (!explain.has(absResolved)) {
71
- const what = importDecl.isTypeOnly() ? 'type import' : 'import';
72
- explain.set(absResolved, `${what} from ${relFrom}`);
73
- }
74
- this.collect(project, absResolved, projectRoot, visited, explain, depth + 1, maxDepth, includeTypes, includeDynamic);
75
- }
76
- void includeDynamic;
77
- for (const exportDecl of sourceFile.getExportDeclarations()) {
78
- const resolved = exportDecl.getModuleSpecifierSourceFile();
79
- if (!resolved)
80
- continue;
81
- const absResolved = resolved.getFilePath();
82
- if (absResolved.includes('node_modules'))
83
- continue;
84
- if (!explain.has(absResolved)) {
85
- const relFrom2 = node_path_1.default
86
- .relative(projectRoot, absFile)
87
- .split(node_path_1.default.sep)
88
- .join(node_path_1.default.posix.sep);
89
- explain.set(absResolved, `re-export from ${relFrom2}`);
90
- }
91
- this.collect(project, absResolved, projectRoot, visited, explain, depth + 1, maxDepth, includeTypes, includeDynamic);
92
- }
93
- }
94
- findTsConfig(projectRoot) {
95
- const candidates = [
96
- node_path_1.default.join(projectRoot, 'tsconfig.json'),
97
- node_path_1.default.join(projectRoot, 'tsconfig.base.json'),
98
- ];
99
- for (const c of candidates) {
100
- try {
101
- require('node:fs').accessSync(c);
102
- return c;
103
- }
104
- catch {
105
- }
106
- }
107
- return undefined;
108
- }
109
- };
110
- exports.DepsService = DepsService;
111
- exports.DepsService = DepsService = __decorate([
112
- (0, common_1.Injectable)()
113
- ], DepsService);
114
- //# sourceMappingURL=deps.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.service.js","sourceRoot":"","sources":["../../../../src/shared/deps/deps.service.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare class GitModule {
2
- }
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.GitModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const git_service_1 = require("./git.service");
12
- let GitModule = class GitModule {
13
- };
14
- exports.GitModule = GitModule;
15
- exports.GitModule = GitModule = __decorate([
16
- (0, common_1.Module)({
17
- providers: [git_service_1.GitService],
18
- exports: [git_service_1.GitService],
19
- })
20
- ], GitModule);
21
- //# sourceMappingURL=git.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.module.js","sourceRoot":"","sources":["../../../../src/shared/git/git.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAMpC,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAJrB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
@@ -1,5 +0,0 @@
1
- export declare class GitService {
2
- ensureRepo(): Promise<void>;
3
- getChangedFiles(): Promise<string[]>;
4
- getStagedFiles(): Promise<string[]>;
5
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.GitService = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const execa_1 = require("execa");
12
- let GitService = class GitService {
13
- async ensureRepo() {
14
- try {
15
- await (0, execa_1.execa)('git', ['rev-parse', '--is-inside-work-tree']);
16
- }
17
- catch (error) {
18
- const message = error instanceof Error && 'stderr' in error
19
- ? String(error.stderr ?? error.message)
20
- : 'Git repository not found. Initialize git before running the command.';
21
- throw new Error(message);
22
- }
23
- }
24
- async getChangedFiles() {
25
- await this.ensureRepo();
26
- const changed = new Set();
27
- const load = async (args) => {
28
- const { stdout } = await (0, execa_1.execa)('git', args);
29
- stdout
30
- .split('\n')
31
- .map((entry) => entry.trim())
32
- .filter((entry) => entry.length > 0)
33
- .forEach((entry) => {
34
- changed.add(entry);
35
- });
36
- };
37
- await load(['diff', '--name-only']);
38
- await load(['diff', '--name-only', '--staged']);
39
- await load(['ls-files', '--others', '--exclude-standard']);
40
- return [...changed].sort();
41
- }
42
- async getStagedFiles() {
43
- await this.ensureRepo();
44
- const { stdout } = await (0, execa_1.execa)('git', ['diff', '--name-only', '--staged']);
45
- return stdout
46
- .split('\n')
47
- .map((entry) => entry.trim())
48
- .filter((entry) => entry.length > 0)
49
- .sort();
50
- }
51
- };
52
- exports.GitService = GitService;
53
- exports.GitService = GitService = __decorate([
54
- (0, common_1.Injectable)()
55
- ], GitService);
56
- //# sourceMappingURL=git.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.service.js","sourceRoot":"","sources":["../../../../src/shared/git/git.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,iCAA8B;AAGvB,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK;gBACzC,CAAC,CAAC,MAAM,CAAE,KAA6B,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;gBAChE,CAAC,CAAC,sEAAsE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;YACpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM;iBACH,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBACnC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3E,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACnC,IAAI,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AA1CY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CA0CtB"}
@@ -1,2 +0,0 @@
1
- export declare class RunbookModule {
2
- }
@@ -1,22 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.RunbookModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const runbook_service_1 = require("./runbook.service");
12
- let RunbookModule = class RunbookModule {
13
- };
14
- exports.RunbookModule = RunbookModule;
15
- exports.RunbookModule = RunbookModule = __decorate([
16
- (0, common_1.Global)(),
17
- (0, common_1.Module)({
18
- providers: [runbook_service_1.RunbookService],
19
- exports: [runbook_service_1.RunbookService],
20
- })
21
- ], RunbookModule);
22
- //# sourceMappingURL=runbook.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runbook.module.js","sourceRoot":"","sources":["../../../../src/shared/runbook/runbook.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,uDAAmD;AAO5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IALzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
@@ -1,20 +0,0 @@
1
- import { type ProjectConfig } from '../../core/registry/registry.schema';
2
- import { type DetectedStack } from './runbook.templates';
3
- export type GitignoreResult = 'created' | 'added' | 'present' | 'no-git';
4
- export declare class RunbookService {
5
- dirPath(root?: string): string;
6
- configPath(root?: string): string;
7
- runbookPath(root?: string): string;
8
- exists(root?: string): Promise<boolean>;
9
- readConfig(root?: string): Promise<ProjectConfig>;
10
- writeConfig(config: ProjectConfig, root?: string): Promise<void>;
11
- readRunbook(root?: string): Promise<string>;
12
- scaffold(options: {
13
- project: string;
14
- stands: string[];
15
- activeStand: string;
16
- }, root?: string): Promise<void>;
17
- detectStack(root?: string): Promise<DetectedStack>;
18
- ensureGitignore(root?: string): Promise<GitignoreResult>;
19
- private pathExists;
20
- }
@@ -1,118 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RunbookService = void 0;
13
- const node_fs_1 = require("node:fs");
14
- const node_path_1 = __importDefault(require("node:path"));
15
- const common_1 = require("@nestjs/common");
16
- const registry_schema_1 = require("../../core/registry/registry.schema");
17
- const runbook_templates_1 = require("./runbook.templates");
18
- const RUNBOOK_DIR = '.runbook';
19
- const GITIGNORE_ENTRY = '/.runbook/';
20
- const GITIGNORE_EQUIVALENTS = new Set([
21
- '/.runbook/',
22
- '/.runbook',
23
- '.runbook/',
24
- '.runbook',
25
- ]);
26
- let RunbookService = class RunbookService {
27
- dirPath(root = process.cwd()) {
28
- return node_path_1.default.join(root, RUNBOOK_DIR);
29
- }
30
- configPath(root = process.cwd()) {
31
- return node_path_1.default.join(root, RUNBOOK_DIR, 'config.json');
32
- }
33
- runbookPath(root = process.cwd()) {
34
- return node_path_1.default.join(root, RUNBOOK_DIR, 'runbook.md');
35
- }
36
- async exists(root = process.cwd()) {
37
- return this.pathExists(this.configPath(root));
38
- }
39
- async readConfig(root = process.cwd()) {
40
- const content = await node_fs_1.promises.readFile(this.configPath(root), 'utf8');
41
- return registry_schema_1.projectConfigSchema.parse(JSON.parse(content));
42
- }
43
- async writeConfig(config, root = process.cwd()) {
44
- const validated = registry_schema_1.projectConfigSchema.parse(config);
45
- await node_fs_1.promises.mkdir(this.dirPath(root), { recursive: true });
46
- await node_fs_1.promises.writeFile(this.configPath(root), `${JSON.stringify(validated, null, 2)}\n`, 'utf8');
47
- }
48
- async readRunbook(root = process.cwd()) {
49
- return node_fs_1.promises.readFile(this.runbookPath(root), 'utf8');
50
- }
51
- async scaffold(options, root = process.cwd()) {
52
- await node_fs_1.promises.mkdir(this.dirPath(root), { recursive: true });
53
- await this.writeConfig({
54
- project: options.project,
55
- activeStand: options.activeStand,
56
- stands: options.stands,
57
- }, root);
58
- if (!(await this.pathExists(this.runbookPath(root)))) {
59
- const detected = await this.detectStack(root);
60
- const markdown = (0, runbook_templates_1.renderRunbook)(options.project, options.stands, detected);
61
- await node_fs_1.promises.writeFile(this.runbookPath(root), markdown, 'utf8');
62
- }
63
- }
64
- async detectStack(root = process.cwd()) {
65
- const [composeYml, composeYaml, dockerfile, envExample] = await Promise.all([
66
- this.pathExists(node_path_1.default.join(root, 'docker-compose.yml')),
67
- this.pathExists(node_path_1.default.join(root, 'docker-compose.yaml')),
68
- this.pathExists(node_path_1.default.join(root, 'Dockerfile')),
69
- this.pathExists(node_path_1.default.join(root, '.env.example')),
70
- ]);
71
- return {
72
- compose: composeYml || composeYaml,
73
- dockerfile,
74
- envExample,
75
- };
76
- }
77
- async ensureGitignore(root = process.cwd()) {
78
- if (!(await this.pathExists(node_path_1.default.join(root, '.git')))) {
79
- return 'no-git';
80
- }
81
- const gitignorePath = node_path_1.default.join(root, '.gitignore');
82
- let content = '';
83
- let fileExists = true;
84
- try {
85
- content = await node_fs_1.promises.readFile(gitignorePath, 'utf8');
86
- }
87
- catch {
88
- fileExists = false;
89
- }
90
- const alreadyIgnored = content
91
- .split(/\r?\n/)
92
- .map((line) => line.trim())
93
- .some((line) => GITIGNORE_EQUIVALENTS.has(line));
94
- if (alreadyIgnored) {
95
- return 'present';
96
- }
97
- const trimmed = content.trimEnd();
98
- const next = trimmed.length > 0
99
- ? `${trimmed}\n${GITIGNORE_ENTRY}\n`
100
- : `${GITIGNORE_ENTRY}\n`;
101
- await node_fs_1.promises.writeFile(gitignorePath, next, 'utf8');
102
- return fileExists ? 'added' : 'created';
103
- }
104
- async pathExists(target) {
105
- try {
106
- await node_fs_1.promises.access(target);
107
- return true;
108
- }
109
- catch {
110
- return false;
111
- }
112
- }
113
- };
114
- exports.RunbookService = RunbookService;
115
- exports.RunbookService = RunbookService = __decorate([
116
- (0, common_1.Injectable)()
117
- ], RunbookService);
118
- //# sourceMappingURL=runbook.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runbook.service.js","sourceRoot":"","sources":["../../../../src/shared/runbook/runbook.service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export type DetectedStack = {
2
- compose: boolean;
3
- dockerfile: boolean;
4
- envExample: boolean;
5
- };
6
- export declare function renderRunbook(project: string, stands: string[], detected: DetectedStack): string;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderRunbook = renderRunbook;
4
- const STAND_TITLES = {
5
- local: 'локальная разработка',
6
- dev: 'dev-стенд',
7
- stage: 'stage-стенд',
8
- prod: 'production (осторожно!)',
9
- };
10
- function renderStandSection(stand, detected) {
11
- const title = STAND_TITLES[stand] ?? stand;
12
- const startCmd = detected.compose
13
- ? 'docker compose up -d'
14
- : '<команда запуска, напр. docker compose up -d>';
15
- const logsCmd = detected.compose
16
- ? 'docker compose logs -f'
17
- : '<команда логов>';
18
- const envNote = detected.envExample
19
- ? 'Скопируй `.env.example` → `.env` и заполни значения.'
20
- : '<откуда взять переменные окружения / секреты>';
21
- return [
22
- `## Стенд: ${stand} (${title})`,
23
- '',
24
- '- **Где живёт / доступ**: <ssh user@host или localhost>',
25
- '- **Рабочая директория**: <путь на сервере или локально>',
26
- '- **Получить код**: `git clone <repo>` (первый раз) / `git pull` (обновить)',
27
- `- **Запуск**: \`${startCmd}\``,
28
- `- **Логи**: \`${logsCmd}\``,
29
- '- **Деплой**: <пошаговые команды деплоя на этот стенд>',
30
- '- **Откат**: <как откатиться, если что-то пошло не так>',
31
- `- **Переменные окружения / секреты**: ${envNote}`,
32
- '',
33
- ].join('\n');
34
- }
35
- function renderRunbook(project, stands, detected) {
36
- const header = [
37
- `# Runbook: ${project}`,
38
- '',
39
- '> Этот файл описывает, как работать со стендами проекта.',
40
- '> Он лежит в `.gitignore` и не коммитится — здесь могут быть хосты и пути.',
41
- '> Заполни плейсхолдеры `<...>` под свою инфраструктуру.',
42
- '',
43
- ].join('\n');
44
- const sections = stands
45
- .map((stand) => renderStandSection(stand, detected))
46
- .join('\n');
47
- return `${header}\n${sections}`;
48
- }
49
- //# sourceMappingURL=runbook.templates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runbook.templates.js","sourceRoot":"","sources":["../../../../src/shared/runbook/runbook.templates.ts"],"names":[],"mappings":";;AA8CA,sCAmBC;AA1DD,MAAM,YAAY,GAA2B;IAC3C,KAAK,EAAE,sBAAsB;IAC7B,GAAG,EAAE,WAAW;IAChB,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,yBAAyB;CAChC,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAa,EAAE,QAAuB;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;IAE3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO;QAC/B,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,+CAA+C,CAAC;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;QAC9B,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,iBAAiB,CAAC;IACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU;QACjC,CAAC,CAAC,sDAAsD;QACxD,CAAC,CAAC,+CAA+C,CAAC;IAEpD,OAAO;QACL,aAAa,KAAK,KAAK,KAAK,GAAG;QAC/B,EAAE;QACF,yDAAyD;QACzD,0DAA0D;QAC1D,6EAA6E;QAC7E,mBAAmB,QAAQ,IAAI;QAC/B,iBAAiB,OAAO,IAAI;QAC5B,wDAAwD;QACxD,yDAAyD;QACzD,yCAAyC,OAAO,EAAE;QAClD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAMD,SAAgB,aAAa,CAC3B,OAAe,EACf,MAAgB,EAChB,QAAuB;IAEvB,MAAM,MAAM,GAAG;QACb,cAAc,OAAO,EAAE;QACvB,EAAE;QACF,0DAA0D;QAC1D,4EAA4E;QAC5E,yDAAyD;QACzD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,MAAM;SACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACnD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare class TokenizerModule {
2
- }
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TokenizerModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const tokenizer_service_1 = require("./tokenizer.service");
12
- let TokenizerModule = class TokenizerModule {
13
- };
14
- exports.TokenizerModule = TokenizerModule;
15
- exports.TokenizerModule = TokenizerModule = __decorate([
16
- (0, common_1.Module)({
17
- providers: [tokenizer_service_1.TokenizerService],
18
- exports: [tokenizer_service_1.TokenizerService],
19
- })
20
- ], TokenizerModule);
21
- //# sourceMappingURL=tokenizer.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizer.module.js","sourceRoot":"","sources":["../../../../src/shared/tokenizer/tokenizer.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AAMhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAJ3B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,oCAAgB,CAAC;QAC7B,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
@@ -1,10 +0,0 @@
1
- type TokenEstimate = {
2
- tokens: number;
3
- usdEstimate: number;
4
- };
5
- export declare class TokenizerService {
6
- private encoder?;
7
- count(text: string): TokenEstimate;
8
- private getEncoder;
9
- }
10
- export {};
@@ -1,36 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TokenizerService = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const js_tiktoken_1 = require("js-tiktoken");
12
- const constants_1 = require("../constants");
13
- let TokenizerService = class TokenizerService {
14
- encoder;
15
- count(text) {
16
- const tokens = this.getEncoder().encode(text).length;
17
- const usdEstimate = (tokens / 1_000_000) * constants_1.DEFAULT_PRICE_PER_MILLION;
18
- return { tokens, usdEstimate };
19
- }
20
- getEncoder() {
21
- if (!this.encoder) {
22
- try {
23
- this.encoder = (0, js_tiktoken_1.encodingForModel)('gpt-4o');
24
- }
25
- catch {
26
- this.encoder = (0, js_tiktoken_1.getEncoding)('o200k_base');
27
- }
28
- }
29
- return this.encoder;
30
- }
31
- };
32
- exports.TokenizerService = TokenizerService;
33
- exports.TokenizerService = TokenizerService = __decorate([
34
- (0, common_1.Injectable)()
35
- ], TokenizerService);
36
- //# sourceMappingURL=tokenizer.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizer.service.js","sourceRoot":"","sources":["../../../../src/shared/tokenizer/tokenizer.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,6CAA4D;AAC5D,4CAAyD;AAQlD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACnB,OAAO,CAAkC;IAEjD,KAAK,CAAC,IAAY;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,qCAAyB,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,GAAG,IAAA,8BAAgB,EAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,OAAO,GAAG,IAAA,yBAAW,EAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF,CAAA;AAnBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAmB5B"}