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,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"}