cast-code 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/app.module.js +45 -0
- package/dist/app.module.js.map +1 -0
- package/dist/common/common.module.js +49 -0
- package/dist/common/common.module.js.map +1 -0
- package/dist/common/constants/index.js +105 -0
- package/dist/common/constants/index.js.map +1 -0
- package/dist/common/index.js +24 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/services/config.service.js +119 -0
- package/dist/common/services/config.service.js.map +1 -0
- package/dist/common/services/llm.service.js +56 -0
- package/dist/common/services/llm.service.js.map +1 -0
- package/dist/common/services/markdown-parser.service.js +101 -0
- package/dist/common/services/markdown-parser.service.js.map +1 -0
- package/dist/common/services/markdown-renderer.service.js +220 -0
- package/dist/common/services/markdown-renderer.service.js.map +1 -0
- package/dist/common/services/multi-llm.service.js +115 -0
- package/dist/common/services/multi-llm.service.js.map +1 -0
- package/dist/common/types/index.js +20 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/markdown.types.js +6 -0
- package/dist/common/types/markdown.types.js.map +1 -0
- package/dist/main.js +84 -0
- package/dist/main.js.map +1 -0
- package/dist/modules/agents/agents.module.js +43 -0
- package/dist/modules/agents/agents.module.js.map +1 -0
- package/dist/modules/agents/definitions/architect.md +35 -0
- package/dist/modules/agents/definitions/backend.md +43 -0
- package/dist/modules/agents/definitions/coder.md +34 -0
- package/dist/modules/agents/definitions/devops.md +42 -0
- package/dist/modules/agents/definitions/frontend.md +46 -0
- package/dist/modules/agents/definitions/reviewer.md +35 -0
- package/dist/modules/agents/definitions/tester.md +41 -0
- package/dist/modules/agents/index.js +23 -0
- package/dist/modules/agents/index.js.map +1 -0
- package/dist/modules/agents/services/agent-loader.service.js +150 -0
- package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
- package/dist/modules/agents/services/agent-registry.service.js +108 -0
- package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
- package/dist/modules/agents/types/agent.types.js +6 -0
- package/dist/modules/agents/types/agent.types.js.map +1 -0
- package/dist/modules/agents/types/index.js +20 -0
- package/dist/modules/agents/types/index.js.map +1 -0
- package/dist/modules/config/config.module.js +38 -0
- package/dist/modules/config/config.module.js.map +1 -0
- package/dist/modules/config/index.js +24 -0
- package/dist/modules/config/index.js.map +1 -0
- package/dist/modules/config/services/config-commands.service.js +405 -0
- package/dist/modules/config/services/config-commands.service.js.map +1 -0
- package/dist/modules/config/services/config-manager.service.js +175 -0
- package/dist/modules/config/services/config-manager.service.js.map +1 -0
- package/dist/modules/config/services/init-config.service.js +238 -0
- package/dist/modules/config/services/init-config.service.js.map +1 -0
- package/dist/modules/config/types/config.types.js +163 -0
- package/dist/modules/config/types/config.types.js.map +1 -0
- package/dist/modules/config/types/index.js +20 -0
- package/dist/modules/config/types/index.js.map +1 -0
- package/dist/modules/core/core.module.js +60 -0
- package/dist/modules/core/core.module.js.map +1 -0
- package/dist/modules/core/index.js +22 -0
- package/dist/modules/core/index.js.map +1 -0
- package/dist/modules/core/services/deep-agent.service.js +575 -0
- package/dist/modules/core/services/deep-agent.service.js.map +1 -0
- package/dist/modules/core/services/plan-mode.service.js +225 -0
- package/dist/modules/core/services/plan-mode.service.js.map +1 -0
- package/dist/modules/git/git.module.js +48 -0
- package/dist/modules/git/git.module.js.map +1 -0
- package/dist/modules/git/index.js +23 -0
- package/dist/modules/git/index.js.map +1 -0
- package/dist/modules/git/services/code-review.service.js +330 -0
- package/dist/modules/git/services/code-review.service.js.map +1 -0
- package/dist/modules/git/services/commit-generator.service.js +403 -0
- package/dist/modules/git/services/commit-generator.service.js.map +1 -0
- package/dist/modules/git/services/index.js +21 -0
- package/dist/modules/git/services/index.js.map +1 -0
- package/dist/modules/git/services/monorepo-detector.service.js +338 -0
- package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
- package/dist/modules/git/services/pr-generator.service.js +429 -0
- package/dist/modules/git/services/pr-generator.service.js.map +1 -0
- package/dist/modules/git/services/release-notes.service.js +426 -0
- package/dist/modules/git/services/release-notes.service.js.map +1 -0
- package/dist/modules/git/types/git.types.js +6 -0
- package/dist/modules/git/types/git.types.js.map +1 -0
- package/dist/modules/git/types/index.js +20 -0
- package/dist/modules/git/types/index.js.map +1 -0
- package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
- package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
- package/dist/modules/mcp/index.js +23 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp.module.js +35 -0
- package/dist/modules/mcp/mcp.module.js.map +1 -0
- package/dist/modules/mcp/services/mcp-client.service.js +289 -0
- package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
- package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
- package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
- package/dist/modules/mcp/types/index.js +20 -0
- package/dist/modules/mcp/types/index.js.map +1 -0
- package/dist/modules/mcp/types/mcp.types.js +6 -0
- package/dist/modules/mcp/types/mcp.types.js.map +1 -0
- package/dist/modules/memory/index.js +23 -0
- package/dist/modules/memory/index.js.map +1 -0
- package/dist/modules/memory/memory.module.js +35 -0
- package/dist/modules/memory/memory.module.js.map +1 -0
- package/dist/modules/memory/services/memory-tools.service.js +78 -0
- package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
- package/dist/modules/memory/services/memory.service.js +169 -0
- package/dist/modules/memory/services/memory.service.js.map +1 -0
- package/dist/modules/memory/types/index.js +20 -0
- package/dist/modules/memory/types/index.js.map +1 -0
- package/dist/modules/memory/types/memory.types.js +6 -0
- package/dist/modules/memory/types/memory.types.js.map +1 -0
- package/dist/modules/mentions/index.js +22 -0
- package/dist/modules/mentions/index.js.map +1 -0
- package/dist/modules/mentions/mentions.module.js +32 -0
- package/dist/modules/mentions/mentions.module.js.map +1 -0
- package/dist/modules/mentions/services/mentions.service.js +336 -0
- package/dist/modules/mentions/services/mentions.service.js.map +1 -0
- package/dist/modules/mentions/types/index.js +20 -0
- package/dist/modules/mentions/types/index.js.map +1 -0
- package/dist/modules/mentions/types/mention.types.js +19 -0
- package/dist/modules/mentions/types/mention.types.js.map +1 -0
- package/dist/modules/permissions/index.js +23 -0
- package/dist/modules/permissions/index.js.map +1 -0
- package/dist/modules/permissions/permissions.module.js +35 -0
- package/dist/modules/permissions/permissions.module.js.map +1 -0
- package/dist/modules/permissions/services/permission.service.js +269 -0
- package/dist/modules/permissions/services/permission.service.js.map +1 -0
- package/dist/modules/permissions/services/prompt.service.js +116 -0
- package/dist/modules/permissions/services/prompt.service.js.map +1 -0
- package/dist/modules/permissions/types/permission.types.js +32 -0
- package/dist/modules/permissions/types/permission.types.js.map +1 -0
- package/dist/modules/project/index.js +24 -0
- package/dist/modules/project/index.js.map +1 -0
- package/dist/modules/project/project.module.js +38 -0
- package/dist/modules/project/project.module.js.map +1 -0
- package/dist/modules/project/services/project-analyzer.service.js +1063 -0
- package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
- package/dist/modules/project/services/project-context.service.js +62 -0
- package/dist/modules/project/services/project-context.service.js.map +1 -0
- package/dist/modules/project/services/project-loader.service.js +147 -0
- package/dist/modules/project/services/project-loader.service.js.map +1 -0
- package/dist/modules/project/types/index.js +20 -0
- package/dist/modules/project/types/index.js.map +1 -0
- package/dist/modules/project/types/project.types.js +6 -0
- package/dist/modules/project/types/project.types.js.map +1 -0
- package/dist/modules/repl/index.js +21 -0
- package/dist/modules/repl/index.js.map +1 -0
- package/dist/modules/repl/repl.module.js +66 -0
- package/dist/modules/repl/repl.module.js.map +1 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
- package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
- package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
- package/dist/modules/repl/services/repl.service.js +647 -0
- package/dist/modules/repl/services/repl.service.js.map +1 -0
- package/dist/modules/repl/services/smart-input.js +544 -0
- package/dist/modules/repl/services/smart-input.js.map +1 -0
- package/dist/modules/repl/services/welcome-screen.service.js +117 -0
- package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
- package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
- package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
- package/dist/modules/repl/utils/theme.js +185 -0
- package/dist/modules/repl/utils/theme.js.map +1 -0
- package/dist/modules/skills/definitions/general/file-operations.md +60 -0
- package/dist/modules/skills/definitions/general/git-operations.md +59 -0
- package/dist/modules/skills/definitions/general/planning.md +86 -0
- package/dist/modules/skills/definitions/general/search.md +59 -0
- package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
- package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
- package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
- package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
- package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
- package/dist/modules/skills/index.js +23 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/services/skill-loader.service.js +130 -0
- package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
- package/dist/modules/skills/services/skill-registry.service.js +96 -0
- package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
- package/dist/modules/skills/skills.module.js +38 -0
- package/dist/modules/skills/skills.module.js.map +1 -0
- package/dist/modules/skills/types/index.js +20 -0
- package/dist/modules/skills/types/index.js.map +1 -0
- package/dist/modules/skills/types/skill.types.js +6 -0
- package/dist/modules/skills/types/skill.types.js.map +1 -0
- package/dist/modules/tasks/index.js +24 -0
- package/dist/modules/tasks/index.js.map +1 -0
- package/dist/modules/tasks/services/plan-executor.service.js +199 -0
- package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-mode.service.js +118 -0
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
- package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
- package/dist/modules/tasks/services/task-management.service.js +255 -0
- package/dist/modules/tasks/services/task-management.service.js.map +1 -0
- package/dist/modules/tasks/services/task-tools.service.js +270 -0
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
- package/dist/modules/tasks/tasks.module.js +49 -0
- package/dist/modules/tasks/tasks.module.js.map +1 -0
- package/dist/modules/tasks/types/task.types.js +21 -0
- package/dist/modules/tasks/types/task.types.js.map +1 -0
- package/dist/modules/tools/index.js +24 -0
- package/dist/modules/tools/index.js.map +1 -0
- package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
- package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
- package/dist/modules/tools/services/search-tools.service.js +63 -0
- package/dist/modules/tools/services/search-tools.service.js.map +1 -0
- package/dist/modules/tools/services/shell-tools.service.js +194 -0
- package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
- package/dist/modules/tools/services/tools-registry.service.js +83 -0
- package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
- package/dist/modules/tools/tools.module.js +46 -0
- package/dist/modules/tools/tools.module.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "MarkdownParserService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return MarkdownParserService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _graymatter = /*#__PURE__*/ _interop_require_default(require("gray-matter"));
|
|
13
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
|
|
14
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
15
|
+
const _glob = require("glob");
|
|
16
|
+
function _interop_require_default(obj) {
|
|
17
|
+
return obj && obj.__esModule ? obj : {
|
|
18
|
+
default: obj
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
22
|
+
if (typeof WeakMap !== "function") return null;
|
|
23
|
+
var cacheBabelInterop = new WeakMap();
|
|
24
|
+
var cacheNodeInterop = new WeakMap();
|
|
25
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
26
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
27
|
+
})(nodeInterop);
|
|
28
|
+
}
|
|
29
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
30
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
34
|
+
return {
|
|
35
|
+
default: obj
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
39
|
+
if (cache && cache.has(obj)) {
|
|
40
|
+
return cache.get(obj);
|
|
41
|
+
}
|
|
42
|
+
var newObj = {
|
|
43
|
+
__proto__: null
|
|
44
|
+
};
|
|
45
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
46
|
+
for(var key in obj){
|
|
47
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
48
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
49
|
+
if (desc && (desc.get || desc.set)) {
|
|
50
|
+
Object.defineProperty(newObj, key, desc);
|
|
51
|
+
} else {
|
|
52
|
+
newObj[key] = obj[key];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
newObj.default = obj;
|
|
57
|
+
if (cache) {
|
|
58
|
+
cache.set(obj, newObj);
|
|
59
|
+
}
|
|
60
|
+
return newObj;
|
|
61
|
+
}
|
|
62
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
63
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
64
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
65
|
+
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;
|
|
66
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
67
|
+
}
|
|
68
|
+
let MarkdownParserService = class MarkdownParserService {
|
|
69
|
+
async parse(filePath) {
|
|
70
|
+
const content = await _promises.readFile(filePath, 'utf-8');
|
|
71
|
+
const { data, content: markdownContent } = (0, _graymatter.default)(content);
|
|
72
|
+
return {
|
|
73
|
+
frontmatter: data,
|
|
74
|
+
content: markdownContent.trim()
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
async parseAll(directory, pattern = '**/*.md') {
|
|
78
|
+
const files = await (0, _glob.glob)(_path.join(directory, pattern));
|
|
79
|
+
const results = new Map();
|
|
80
|
+
for (const file of files){
|
|
81
|
+
const relativePath = _path.relative(directory, file);
|
|
82
|
+
const name = relativePath.replace(/\.md$/, '');
|
|
83
|
+
const parsed = await this.parse(file);
|
|
84
|
+
results.set(name, parsed);
|
|
85
|
+
}
|
|
86
|
+
return results;
|
|
87
|
+
}
|
|
88
|
+
async exists(filePath) {
|
|
89
|
+
try {
|
|
90
|
+
await _promises.access(filePath);
|
|
91
|
+
return true;
|
|
92
|
+
} catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
MarkdownParserService = _ts_decorate([
|
|
98
|
+
(0, _common.Injectable)()
|
|
99
|
+
], MarkdownParserService);
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=markdown-parser.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/services/markdown-parser.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport matter from 'gray-matter';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { glob } from 'glob';\nimport { ParsedMarkdown } from '../types';\n\n@Injectable()\nexport class MarkdownParserService {\n async parse<T>(filePath: string): Promise<ParsedMarkdown<T>> {\n const content = await fs.readFile(filePath, 'utf-8');\n const { data, content: markdownContent } = matter(content);\n\n return {\n frontmatter: data as T,\n content: markdownContent.trim(),\n };\n }\n\n async parseAll<T>(directory: string, pattern = '**/*.md'): Promise<Map<string, ParsedMarkdown<T>>> {\n const files = await glob(path.join(directory, pattern));\n const results = new Map<string, ParsedMarkdown<T>>();\n\n for (const file of files) {\n const relativePath = path.relative(directory, file);\n const name = relativePath.replace(/\\.md$/, '');\n const parsed = await this.parse<T>(file);\n results.set(name, parsed);\n }\n\n return results;\n }\n\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n}\n"],"names":["MarkdownParserService","parse","filePath","content","fs","readFile","data","markdownContent","matter","frontmatter","trim","parseAll","directory","pattern","files","glob","path","join","results","Map","file","relativePath","relative","name","replace","parsed","set","exists","access"],"mappings":";;;;+BAQaA;;;eAAAA;;;wBARc;mEACR;kEACC;8DACE;sBACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAId,IAAA,AAAMA,wBAAN,MAAMA;IACX,MAAMC,MAASC,QAAgB,EAA8B;QAC3D,MAAMC,UAAU,MAAMC,UAAGC,QAAQ,CAACH,UAAU;QAC5C,MAAM,EAAEI,IAAI,EAAEH,SAASI,eAAe,EAAE,GAAGC,IAAAA,mBAAM,EAACL;QAElD,OAAO;YACLM,aAAaH;YACbH,SAASI,gBAAgBG,IAAI;QAC/B;IACF;IAEA,MAAMC,SAAYC,SAAiB,EAAEC,UAAU,SAAS,EAA2C;QACjG,MAAMC,QAAQ,MAAMC,IAAAA,UAAI,EAACC,MAAKC,IAAI,CAACL,WAAWC;QAC9C,MAAMK,UAAU,IAAIC;QAEpB,KAAK,MAAMC,QAAQN,MAAO;YACxB,MAAMO,eAAeL,MAAKM,QAAQ,CAACV,WAAWQ;YAC9C,MAAMG,OAAOF,aAAaG,OAAO,CAAC,SAAS;YAC3C,MAAMC,SAAS,MAAM,IAAI,CAACxB,KAAK,CAAImB;YACnCF,QAAQQ,GAAG,CAACH,MAAME;QACpB;QAEA,OAAOP;IACT;IAEA,MAAMS,OAAOzB,QAAgB,EAAoB;QAC/C,IAAI;YACF,MAAME,UAAGwB,MAAM,CAAC1B;YAChB,OAAO;QACT,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "MarkdownRendererService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return MarkdownRendererService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _theme = require("../../modules/repl/utils/theme");
|
|
13
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
14
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
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;
|
|
17
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
18
|
+
}
|
|
19
|
+
let MarkdownRendererService = class MarkdownRendererService {
|
|
20
|
+
render(markdown, options = {}) {
|
|
21
|
+
this.maxWidth = options.maxWidth || process.stdout.columns || 80;
|
|
22
|
+
let text = markdown;
|
|
23
|
+
// Headers (process before other elements)
|
|
24
|
+
text = this.renderHeaders(text);
|
|
25
|
+
// Code blocks
|
|
26
|
+
text = this.renderCodeBlocks(text);
|
|
27
|
+
// Inline code
|
|
28
|
+
text = this.renderInlineCode(text);
|
|
29
|
+
// Bold
|
|
30
|
+
text = this.renderBold(text);
|
|
31
|
+
// Italic
|
|
32
|
+
text = this.renderItalic(text);
|
|
33
|
+
// Blockquotes
|
|
34
|
+
text = this.renderBlockquotes(text);
|
|
35
|
+
// Lists
|
|
36
|
+
text = this.renderLists(text);
|
|
37
|
+
// Horizontal rules
|
|
38
|
+
text = this.renderHorizontalRules(text);
|
|
39
|
+
// Links
|
|
40
|
+
text = this.renderLinks(text);
|
|
41
|
+
// Tables
|
|
42
|
+
text = this.renderTables(text);
|
|
43
|
+
return text;
|
|
44
|
+
}
|
|
45
|
+
renderHeaders(text) {
|
|
46
|
+
// H1: # Title
|
|
47
|
+
text = text.replace(/^# (.+)$/gm, (match, content)=>{
|
|
48
|
+
return `\n${_theme.Colors.cyan}${_theme.Colors.bold}${'─'.repeat(this.maxWidth)}${_theme.Colors.reset}\n${_theme.Colors.cyan}${_theme.Colors.bold}${this.center(content.trim(), this.maxWidth)}${_theme.Colors.reset}\n${_theme.Colors.cyan}${_theme.Colors.bold}${'─'.repeat(this.maxWidth)}${_theme.Colors.reset}\n`;
|
|
49
|
+
});
|
|
50
|
+
// H2: ## Title
|
|
51
|
+
text = text.replace(/^## (.+)$/gm, (match, content)=>{
|
|
52
|
+
return `\n${_theme.Colors.cyan}${_theme.Colors.bold}${content.trim()}${_theme.Colors.reset}\n${_theme.Colors.dim}${'─'.repeat(content.trim().length)}${_theme.Colors.reset}\n`;
|
|
53
|
+
});
|
|
54
|
+
// H3: ### Title
|
|
55
|
+
text = text.replace(/^### (.+)$/gm, (match, content)=>{
|
|
56
|
+
return `\n${_theme.Colors.cyan}${_theme.Colors.bold}${_theme.Icons.arrow} ${content.trim()}${_theme.Colors.reset}\n`;
|
|
57
|
+
});
|
|
58
|
+
// H4-H6: #### Title
|
|
59
|
+
text = text.replace(/^####+ (.+)$/gm, (match, content)=>{
|
|
60
|
+
return `\n${_theme.Colors.bold}${content.trim()}${_theme.Colors.reset}\n`;
|
|
61
|
+
});
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
renderCodeBlocks(text) {
|
|
65
|
+
return text.replace(/```(\w+)?\n([\s\S]*?)```/g, (match, lang, code)=>{
|
|
66
|
+
const lines = code.trim().split('\n');
|
|
67
|
+
const maxLineLength = Math.max(...lines.map((l)=>l.length), 20);
|
|
68
|
+
const width = Math.min(maxLineLength + 2, this.maxWidth - 4);
|
|
69
|
+
let result = `\n${_theme.Colors.gray}${'┌' + '─'.repeat(width) + (lang ? ` ${lang} ` : '') + '─'.repeat(Math.max(0, width - (lang?.length || 0) - 2))}${_theme.Colors.reset}\n`;
|
|
70
|
+
for (const line of lines.slice(0, 20)){
|
|
71
|
+
const truncated = line.length > width ? line.slice(0, width - 3) + '...' : line;
|
|
72
|
+
result += `${_theme.Colors.gray}│${_theme.Colors.reset} ${_theme.Colors.dim}${truncated}${' '.repeat(Math.max(0, width - truncated.length - 1))}${_theme.Colors.gray}│${_theme.Colors.reset}\n`;
|
|
73
|
+
}
|
|
74
|
+
if (lines.length > 20) {
|
|
75
|
+
result += `${_theme.Colors.gray}│${_theme.Colors.reset} ${_theme.Colors.dim}... (${lines.length - 20} more lines)${' '.repeat(Math.max(0, width - 25))}${_theme.Colors.gray}│${_theme.Colors.reset}\n`;
|
|
76
|
+
}
|
|
77
|
+
result += `${_theme.Colors.gray}${'└' + '─'.repeat(width + 1)}${_theme.Colors.reset}\n`;
|
|
78
|
+
return result;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
renderInlineCode(text) {
|
|
82
|
+
return text.replace(/`([^`]+)`/g, (match, code)=>{
|
|
83
|
+
return `${_theme.Colors.gray}░${_theme.Colors.reset}${_theme.Colors.dim}${code.trim()}${_theme.Colors.reset}${_theme.Colors.gray}░${_theme.Colors.reset}`;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
renderBold(text) {
|
|
87
|
+
// **text** or __text__
|
|
88
|
+
return text.replace(/(\*\*|__)(.+?)\1/g, (match, markers, content)=>{
|
|
89
|
+
return `${_theme.Colors.bold}${_theme.Colors.white}${content.trim()}${_theme.Colors.reset}`;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
renderItalic(text) {
|
|
93
|
+
// *text* or _text_ (but not **)
|
|
94
|
+
return text.replace(/(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/g, (match, content)=>{
|
|
95
|
+
return `${_theme.Colors.italic}${content.trim()}${_theme.Colors.reset}`;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
renderBlockquotes(text) {
|
|
99
|
+
return text.replace(/^> (.+)$/gm, (match, content)=>{
|
|
100
|
+
return `${_theme.Colors.blue}┃${_theme.Colors.reset} ${_theme.Colors.dim}${content.trim()}${_theme.Colors.reset}`;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
renderLists(text) {
|
|
104
|
+
// Unordered lists
|
|
105
|
+
text = text.replace(/^(\s*)[-*] (.+)$/gm, (match, indent, content)=>{
|
|
106
|
+
const level = indent.length / 2;
|
|
107
|
+
const bullet = level === 0 ? _theme.Icons.bullet : ' ' + _theme.Icons.bullet;
|
|
108
|
+
return `${_theme.Colors.cyan}${bullet}${_theme.Colors.reset} ${content.trim()}`;
|
|
109
|
+
});
|
|
110
|
+
// Ordered lists
|
|
111
|
+
text = text.replace(/^(\s*)(\d+)\. (.+)$/gm, (match, indent, num, content)=>{
|
|
112
|
+
return `${_theme.Colors.cyan}${num}.${_theme.Colors.reset} ${content.trim()}`;
|
|
113
|
+
});
|
|
114
|
+
return text;
|
|
115
|
+
}
|
|
116
|
+
renderHorizontalRules(text) {
|
|
117
|
+
return text.replace(/^(---+|===+|___+|\*\*\*+)$/gm, ()=>{
|
|
118
|
+
return `${_theme.Colors.dim}${'─'.repeat(this.maxWidth)}${_theme.Colors.reset}`;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
renderLinks(text) {
|
|
122
|
+
// [text](url)
|
|
123
|
+
return text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (match, label, url)=>{
|
|
124
|
+
return `${_theme.Colors.underline}${_theme.Colors.blue}${label.trim()}${_theme.Colors.reset} ${_theme.Colors.dim}(${url})${_theme.Colors.reset}`;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
renderTables(text) {
|
|
128
|
+
// Simple table rendering
|
|
129
|
+
const tableRegex = /\|(.+)\|\n\|[-:| ]+\|\n((?:\|.+\|\n?)+)/g;
|
|
130
|
+
return text.replace(tableRegex, (match, headerRow, bodyRows)=>{
|
|
131
|
+
const headers = headerRow.split('|').map((h)=>h.trim()).filter(Boolean);
|
|
132
|
+
const rows = bodyRows.trim().split('\n').map((row)=>row.split('|').map((c)=>c.trim()).filter(Boolean));
|
|
133
|
+
if (headers.length === 0) return match;
|
|
134
|
+
const colWidth = Math.floor((this.maxWidth - 10) / headers.length);
|
|
135
|
+
let result = '\n';
|
|
136
|
+
// Header
|
|
137
|
+
result += `${_theme.Colors.cyan}┌${'─'.repeat(colWidth + 2)}┬${('─'.repeat(colWidth + 2) + '┬').repeat(headers.length - 1)}┐${_theme.Colors.reset}\n`;
|
|
138
|
+
result += `${_theme.Colors.cyan}│${_theme.Colors.reset}`;
|
|
139
|
+
for (const h of headers){
|
|
140
|
+
const padded = this.truncate(h, colWidth).padEnd(colWidth);
|
|
141
|
+
result += ` ${_theme.Colors.bold}${padded}${_theme.Colors.reset} ${_theme.Colors.cyan}│${_theme.Colors.reset}`;
|
|
142
|
+
}
|
|
143
|
+
result += '\n';
|
|
144
|
+
// Separator
|
|
145
|
+
result += `${_theme.Colors.cyan}├${'─'.repeat(colWidth + 2)}┼${('─'.repeat(colWidth + 2) + '┼').repeat(headers.length - 1)}┤${_theme.Colors.reset}\n`;
|
|
146
|
+
// Rows
|
|
147
|
+
for (const row of rows.slice(0, 10)){
|
|
148
|
+
result += `${_theme.Colors.cyan}│${_theme.Colors.reset}`;
|
|
149
|
+
for(let i = 0; i < headers.length; i++){
|
|
150
|
+
const cell = row[i] || '';
|
|
151
|
+
const padded = this.truncate(cell, colWidth).padEnd(colWidth);
|
|
152
|
+
result += ` ${_theme.Colors.dim}${padded}${_theme.Colors.reset} ${_theme.Colors.cyan}│${_theme.Colors.reset}`;
|
|
153
|
+
}
|
|
154
|
+
result += '\n';
|
|
155
|
+
}
|
|
156
|
+
// Footer
|
|
157
|
+
result += `${_theme.Colors.cyan}└${'─'.repeat(colWidth + 2)}┴${('─'.repeat(colWidth + 2) + '┴').repeat(headers.length - 1)}┘${_theme.Colors.reset}\n`;
|
|
158
|
+
return result;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
center(text, width) {
|
|
162
|
+
const padding = Math.max(0, width - text.length);
|
|
163
|
+
const leftPad = Math.floor(padding / 2);
|
|
164
|
+
const rightPad = padding - leftPad;
|
|
165
|
+
return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
|
|
166
|
+
}
|
|
167
|
+
truncate(text, maxLength) {
|
|
168
|
+
if (text.length <= maxLength) return text;
|
|
169
|
+
return text.slice(0, maxLength - 3) + '...';
|
|
170
|
+
}
|
|
171
|
+
// Helper to create a box around content
|
|
172
|
+
createBox(content, title) {
|
|
173
|
+
const lines = content.split('\n');
|
|
174
|
+
const maxLength = Math.max(...lines.map((l)=>l.replace(/\x1b\[\d+m/g, '').length), 20);
|
|
175
|
+
const width = Math.min(maxLength + 4, this.maxWidth);
|
|
176
|
+
let result = '';
|
|
177
|
+
// Top border
|
|
178
|
+
if (title) {
|
|
179
|
+
const titleLen = title.length;
|
|
180
|
+
const leftPad = Math.floor((width - titleLen - 2) / 2);
|
|
181
|
+
const rightPad = width - titleLen - 2 - leftPad;
|
|
182
|
+
result += `${_theme.Colors.cyan}╭${'─'.repeat(leftPad)} ${title} ${'─'.repeat(rightPad)}╮${_theme.Colors.reset}\n`;
|
|
183
|
+
} else {
|
|
184
|
+
result += `${_theme.Colors.cyan}╭${'─'.repeat(width)}╮${_theme.Colors.reset}\n`;
|
|
185
|
+
}
|
|
186
|
+
// Content
|
|
187
|
+
for (const line of lines){
|
|
188
|
+
const visibleLen = line.replace(/\x1b\[\d+m/g, '').length;
|
|
189
|
+
const padding = Math.max(0, width - 2 - visibleLen);
|
|
190
|
+
result += `${_theme.Colors.cyan}│${_theme.Colors.reset} ${line}${' '.repeat(padding)} ${_theme.Colors.cyan}│${_theme.Colors.reset}\n`;
|
|
191
|
+
}
|
|
192
|
+
// Bottom border
|
|
193
|
+
result += `${_theme.Colors.cyan}╰${'─'.repeat(width)}╯${_theme.Colors.reset}\n`;
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
// Helper to create a section with header
|
|
197
|
+
createSection(title, content) {
|
|
198
|
+
return `\n${_theme.Colors.cyan}${_theme.Colors.bold}${_theme.Icons.arrow} ${title}${_theme.Colors.reset}\n${_theme.Colors.dim}${'─'.repeat(title.length + 4)}${_theme.Colors.reset}\n${content}\n`;
|
|
199
|
+
}
|
|
200
|
+
// Helper to format tool usage
|
|
201
|
+
formatToolCall(toolName, input) {
|
|
202
|
+
const inputStr = Object.entries(input).map(([k, v])=>`${k}=${JSON.stringify(v).slice(0, 50)}`).join(', ');
|
|
203
|
+
return `${_theme.Colors.dim} ${_theme.Colors.cyan}⎿${_theme.Colors.reset}${_theme.Colors.dim} ${toolName} ${inputStr}${_theme.Colors.reset}`;
|
|
204
|
+
}
|
|
205
|
+
// Helper to format tool result
|
|
206
|
+
formatToolResult(output, maxLines = 5) {
|
|
207
|
+
const lines = output.split('\n');
|
|
208
|
+
const preview = lines.slice(0, maxLines).map((l)=>` ${_theme.Colors.dim}${l.slice(0, 100)}${_theme.Colors.reset}`).join('\n');
|
|
209
|
+
const more = lines.length > maxLines ? `\n ${_theme.Colors.dim}... (${lines.length - maxLines} more lines)${_theme.Colors.reset}` : '';
|
|
210
|
+
return preview + more;
|
|
211
|
+
}
|
|
212
|
+
constructor(){
|
|
213
|
+
this.maxWidth = 80;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
MarkdownRendererService = _ts_decorate([
|
|
217
|
+
(0, _common.Injectable)()
|
|
218
|
+
], MarkdownRendererService);
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=markdown-renderer.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/services/markdown-renderer.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { Colors, Icons } from '../../modules/repl/utils/theme';\n\ninterface RenderOptions {\n maxWidth?: number;\n codeTheme?: 'dark' | 'light';\n}\n\n@Injectable()\nexport class MarkdownRendererService {\n private maxWidth = 80;\n\n render(markdown: string, options: RenderOptions = {}): string {\n this.maxWidth = options.maxWidth || process.stdout.columns || 80;\n \n let text = markdown;\n \n // Headers (process before other elements)\n text = this.renderHeaders(text);\n \n // Code blocks\n text = this.renderCodeBlocks(text);\n \n // Inline code\n text = this.renderInlineCode(text);\n \n // Bold\n text = this.renderBold(text);\n \n // Italic\n text = this.renderItalic(text);\n \n // Blockquotes\n text = this.renderBlockquotes(text);\n \n // Lists\n text = this.renderLists(text);\n \n // Horizontal rules\n text = this.renderHorizontalRules(text);\n \n // Links\n text = this.renderLinks(text);\n \n // Tables\n text = this.renderTables(text);\n \n return text;\n }\n\n private renderHeaders(text: string): string {\n // H1: # Title\n text = text.replace(/^# (.+)$/gm, (match, content) => {\n return `\\n${Colors.cyan}${Colors.bold}${'─'.repeat(this.maxWidth)}${Colors.reset}\\n${Colors.cyan}${Colors.bold}${this.center(content.trim(), this.maxWidth)}${Colors.reset}\\n${Colors.cyan}${Colors.bold}${'─'.repeat(this.maxWidth)}${Colors.reset}\\n`;\n });\n \n // H2: ## Title\n text = text.replace(/^## (.+)$/gm, (match, content) => {\n return `\\n${Colors.cyan}${Colors.bold}${content.trim()}${Colors.reset}\\n${Colors.dim}${'─'.repeat(content.trim().length)}${Colors.reset}\\n`;\n });\n \n // H3: ### Title\n text = text.replace(/^### (.+)$/gm, (match, content) => {\n return `\\n${Colors.cyan}${Colors.bold}${Icons.arrow} ${content.trim()}${Colors.reset}\\n`;\n });\n \n // H4-H6: #### Title\n text = text.replace(/^####+ (.+)$/gm, (match, content) => {\n return `\\n${Colors.bold}${content.trim()}${Colors.reset}\\n`;\n });\n \n return text;\n }\n\n private renderCodeBlocks(text: string): string {\n return text.replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, (match, lang, code) => {\n const lines = code.trim().split('\\n');\n const maxLineLength = Math.max(...lines.map(l => l.length), 20);\n const width = Math.min(maxLineLength + 2, this.maxWidth - 4);\n \n let result = `\\n${Colors.gray}${'┌' + '─'.repeat(width) + (lang ? ` ${lang} ` : '') + '─'.repeat(Math.max(0, width - (lang?.length || 0) - 2))}${Colors.reset}\\n`;\n \n for (const line of lines.slice(0, 20)) {\n const truncated = line.length > width ? line.slice(0, width - 3) + '...' : line;\n result += `${Colors.gray}│${Colors.reset} ${Colors.dim}${truncated}${' '.repeat(Math.max(0, width - truncated.length - 1))}${Colors.gray}│${Colors.reset}\\n`;\n }\n \n if (lines.length > 20) {\n result += `${Colors.gray}│${Colors.reset} ${Colors.dim}... (${lines.length - 20} more lines)${' '.repeat(Math.max(0, width - 25))}${Colors.gray}│${Colors.reset}\\n`;\n }\n \n result += `${Colors.gray}${'└' + '─'.repeat(width + 1)}${Colors.reset}\\n`;\n return result;\n });\n }\n\n private renderInlineCode(text: string): string {\n return text.replace(/`([^`]+)`/g, (match, code) => {\n return `${Colors.gray}░${Colors.reset}${Colors.dim}${code.trim()}${Colors.reset}${Colors.gray}░${Colors.reset}`;\n });\n }\n\n private renderBold(text: string): string {\n // **text** or __text__\n return text.replace(/(\\*\\*|__)(.+?)\\1/g, (match, markers, content) => {\n return `${Colors.bold}${Colors.white}${content.trim()}${Colors.reset}`;\n });\n }\n\n private renderItalic(text: string): string {\n // *text* or _text_ (but not **)\n return text.replace(/(?<!\\*)\\*(?!\\*)(.+?)(?<!\\*)\\*(?!\\*)/g, (match, content) => {\n return `${Colors.italic}${content.trim()}${Colors.reset}`;\n });\n }\n\n private renderBlockquotes(text: string): string {\n return text.replace(/^> (.+)$/gm, (match, content) => {\n return `${Colors.blue}┃${Colors.reset} ${Colors.dim}${content.trim()}${Colors.reset}`;\n });\n }\n\n private renderLists(text: string): string {\n // Unordered lists\n text = text.replace(/^(\\s*)[-*] (.+)$/gm, (match, indent, content) => {\n const level = indent.length / 2;\n const bullet = level === 0 ? Icons.bullet : ' ' + Icons.bullet;\n return `${Colors.cyan}${bullet}${Colors.reset} ${content.trim()}`;\n });\n \n // Ordered lists\n text = text.replace(/^(\\s*)(\\d+)\\. (.+)$/gm, (match, indent, num, content) => {\n return `${Colors.cyan}${num}.${Colors.reset} ${content.trim()}`;\n });\n \n return text;\n }\n\n private renderHorizontalRules(text: string): string {\n return text.replace(/^(---+|===+|___+|\\*\\*\\*+)$/gm, () => {\n return `${Colors.dim}${'─'.repeat(this.maxWidth)}${Colors.reset}`;\n });\n }\n\n private renderLinks(text: string): string {\n // [text](url)\n return text.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (match, label, url) => {\n return `${Colors.underline}${Colors.blue}${label.trim()}${Colors.reset} ${Colors.dim}(${url})${Colors.reset}`;\n });\n }\n\n private renderTables(text: string): string {\n // Simple table rendering\n const tableRegex = /\\|(.+)\\|\\n\\|[-:| ]+\\|\\n((?:\\|.+\\|\\n?)+)/g;\n \n return text.replace(tableRegex, (match, headerRow, bodyRows) => {\n const headers = headerRow.split('|').map((h: string) => h.trim()).filter(Boolean);\n const rows = bodyRows.trim().split('\\n').map((row: string) => \n row.split('|').map((c: string) => c.trim()).filter(Boolean)\n );\n \n if (headers.length === 0) return match;\n \n const colWidth = Math.floor((this.maxWidth - 10) / headers.length);\n \n let result = '\\n';\n \n // Header\n result += `${Colors.cyan}┌${'─'.repeat(colWidth + 2)}┬${('─'.repeat(colWidth + 2) + '┬').repeat(headers.length - 1)}┐${Colors.reset}\\n`;\n result += `${Colors.cyan}│${Colors.reset}`;\n for (const h of headers) {\n const padded = this.truncate(h, colWidth).padEnd(colWidth);\n result += ` ${Colors.bold}${padded}${Colors.reset} ${Colors.cyan}│${Colors.reset}`;\n }\n result += '\\n';\n \n // Separator\n result += `${Colors.cyan}├${'─'.repeat(colWidth + 2)}┼${('─'.repeat(colWidth + 2) + '┼').repeat(headers.length - 1)}┤${Colors.reset}\\n`;\n \n // Rows\n for (const row of rows.slice(0, 10)) {\n result += `${Colors.cyan}│${Colors.reset}`;\n for (let i = 0; i < headers.length; i++) {\n const cell = row[i] || '';\n const padded = this.truncate(cell, colWidth).padEnd(colWidth);\n result += ` ${Colors.dim}${padded}${Colors.reset} ${Colors.cyan}│${Colors.reset}`;\n }\n result += '\\n';\n }\n \n // Footer\n result += `${Colors.cyan}└${'─'.repeat(colWidth + 2)}┴${('─'.repeat(colWidth + 2) + '┴').repeat(headers.length - 1)}┘${Colors.reset}\\n`;\n \n return result;\n });\n }\n\n private center(text: string, width: number): string {\n const padding = Math.max(0, width - text.length);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n }\n\n private truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength - 3) + '...';\n }\n\n // Helper to create a box around content\n createBox(content: string, title?: string): string {\n const lines = content.split('\\n');\n const maxLength = Math.max(...lines.map(l => l.replace(/\\x1b\\[\\d+m/g, '').length), 20);\n const width = Math.min(maxLength + 4, this.maxWidth);\n \n let result = '';\n \n // Top border\n if (title) {\n const titleLen = title.length;\n const leftPad = Math.floor((width - titleLen - 2) / 2);\n const rightPad = width - titleLen - 2 - leftPad;\n result += `${Colors.cyan}╭${'─'.repeat(leftPad)} ${title} ${'─'.repeat(rightPad)}╮${Colors.reset}\\n`;\n } else {\n result += `${Colors.cyan}╭${'─'.repeat(width)}╮${Colors.reset}\\n`;\n }\n \n // Content\n for (const line of lines) {\n const visibleLen = line.replace(/\\x1b\\[\\d+m/g, '').length;\n const padding = Math.max(0, width - 2 - visibleLen);\n result += `${Colors.cyan}│${Colors.reset} ${line}${' '.repeat(padding)} ${Colors.cyan}│${Colors.reset}\\n`;\n }\n \n // Bottom border\n result += `${Colors.cyan}╰${'─'.repeat(width)}╯${Colors.reset}\\n`;\n \n return result;\n }\n\n // Helper to create a section with header\n createSection(title: string, content: string): string {\n return `\\n${Colors.cyan}${Colors.bold}${Icons.arrow} ${title}${Colors.reset}\\n${Colors.dim}${'─'.repeat(title.length + 4)}${Colors.reset}\\n${content}\\n`;\n }\n\n // Helper to format tool usage\n formatToolCall(toolName: string, input: Record<string, any>): string {\n const inputStr = Object.entries(input)\n .map(([k, v]) => `${k}=${JSON.stringify(v).slice(0, 50)}`)\n .join(', ');\n \n return `${Colors.dim} ${Colors.cyan}⎿${Colors.reset}${Colors.dim} ${toolName} ${inputStr}${Colors.reset}`;\n }\n\n // Helper to format tool result\n formatToolResult(output: string, maxLines = 5): string {\n const lines = output.split('\\n');\n const preview = lines.slice(0, maxLines).map(l => ` ${Colors.dim}${l.slice(0, 100)}${Colors.reset}`).join('\\n');\n const more = lines.length > maxLines ? `\\n ${Colors.dim}... (${lines.length - maxLines} more lines)${Colors.reset}` : '';\n return preview + more;\n }\n}\n"],"names":["MarkdownRendererService","render","markdown","options","maxWidth","process","stdout","columns","text","renderHeaders","renderCodeBlocks","renderInlineCode","renderBold","renderItalic","renderBlockquotes","renderLists","renderHorizontalRules","renderLinks","renderTables","replace","match","content","Colors","cyan","bold","repeat","reset","center","trim","dim","length","Icons","arrow","lang","code","lines","split","maxLineLength","Math","max","map","l","width","min","result","gray","line","slice","truncated","markers","white","italic","blue","indent","level","bullet","num","label","url","underline","tableRegex","headerRow","bodyRows","headers","h","filter","Boolean","rows","row","c","colWidth","floor","padded","truncate","padEnd","i","cell","padding","leftPad","rightPad","maxLength","createBox","title","titleLen","visibleLen","createSection","formatToolCall","toolName","input","inputStr","Object","entries","k","v","JSON","stringify","join","formatToolResult","output","maxLines","preview","more"],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "MultiLlmService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return MultiLlmService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _openai = require("@langchain/openai");
|
|
13
|
+
const _ollama = require("@langchain/ollama");
|
|
14
|
+
const _anthropic = require("@langchain/anthropic");
|
|
15
|
+
const _googlegenai = require("@langchain/google-genai");
|
|
16
|
+
const _configmanagerservice = require("../../modules/config/services/config-manager.service");
|
|
17
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
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;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
}
|
|
23
|
+
function _ts_metadata(k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
}
|
|
26
|
+
let MultiLlmService = class MultiLlmService {
|
|
27
|
+
createModel(purpose = 'default', streaming = false) {
|
|
28
|
+
const modelConfig = this.configManager.getModelConfig(purpose);
|
|
29
|
+
if (!modelConfig) {
|
|
30
|
+
throw new Error(`No model configured for purpose "${purpose}". ` + 'Run "cast config init" to configure.');
|
|
31
|
+
}
|
|
32
|
+
const { provider, model, temperature } = modelConfig;
|
|
33
|
+
const providerConfig = this.configManager.getProviderConfig(provider);
|
|
34
|
+
if (!providerConfig) {
|
|
35
|
+
throw new Error(`Provider "${provider}" is not configured. ` + 'Run "cast config init" to configure.');
|
|
36
|
+
}
|
|
37
|
+
return this.createModelForProvider(provider, providerConfig, model, temperature, streaming);
|
|
38
|
+
}
|
|
39
|
+
createStreamingModel(purpose = 'default') {
|
|
40
|
+
return this.createModel(purpose, true);
|
|
41
|
+
}
|
|
42
|
+
createModelForProvider(provider, config, model, temperature, streaming) {
|
|
43
|
+
switch(provider){
|
|
44
|
+
case 'openai':
|
|
45
|
+
case 'deepseek':
|
|
46
|
+
case 'openrouter':
|
|
47
|
+
return new _openai.ChatOpenAI({
|
|
48
|
+
modelName: model,
|
|
49
|
+
...temperature !== undefined ? {
|
|
50
|
+
temperature
|
|
51
|
+
} : {},
|
|
52
|
+
openAIApiKey: config.apiKey,
|
|
53
|
+
configuration: {
|
|
54
|
+
baseURL: config.baseUrl
|
|
55
|
+
},
|
|
56
|
+
streaming,
|
|
57
|
+
streamUsage: streaming
|
|
58
|
+
});
|
|
59
|
+
case 'anthropic':
|
|
60
|
+
return new _anthropic.ChatAnthropic({
|
|
61
|
+
modelName: model,
|
|
62
|
+
...temperature !== undefined ? {
|
|
63
|
+
temperature
|
|
64
|
+
} : {},
|
|
65
|
+
anthropicApiKey: config.apiKey,
|
|
66
|
+
anthropicApiUrl: config.baseUrl,
|
|
67
|
+
streaming
|
|
68
|
+
});
|
|
69
|
+
case 'gemini':
|
|
70
|
+
return new _googlegenai.ChatGoogleGenerativeAI({
|
|
71
|
+
modelName: model,
|
|
72
|
+
...temperature !== undefined ? {
|
|
73
|
+
temperature
|
|
74
|
+
} : {},
|
|
75
|
+
apiKey: config.apiKey,
|
|
76
|
+
streaming
|
|
77
|
+
});
|
|
78
|
+
case 'kimi':
|
|
79
|
+
return new _openai.ChatOpenAI({
|
|
80
|
+
modelName: model,
|
|
81
|
+
...temperature !== undefined ? {
|
|
82
|
+
temperature
|
|
83
|
+
} : {},
|
|
84
|
+
openAIApiKey: config.apiKey,
|
|
85
|
+
configuration: {
|
|
86
|
+
baseURL: config.baseUrl || 'https://api.moonshot.cn/v1'
|
|
87
|
+
},
|
|
88
|
+
streaming,
|
|
89
|
+
streamUsage: streaming
|
|
90
|
+
});
|
|
91
|
+
case 'ollama':
|
|
92
|
+
return new _ollama.ChatOllama({
|
|
93
|
+
model,
|
|
94
|
+
...temperature !== undefined ? {
|
|
95
|
+
temperature
|
|
96
|
+
} : {},
|
|
97
|
+
baseUrl: config.baseUrl || 'http://localhost:11434'
|
|
98
|
+
});
|
|
99
|
+
default:
|
|
100
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
constructor(configManager){
|
|
104
|
+
this.configManager = configManager;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
MultiLlmService = _ts_decorate([
|
|
108
|
+
(0, _common.Injectable)(),
|
|
109
|
+
_ts_metadata("design:type", Function),
|
|
110
|
+
_ts_metadata("design:paramtypes", [
|
|
111
|
+
typeof _configmanagerservice.ConfigManagerService === "undefined" ? Object : _configmanagerservice.ConfigManagerService
|
|
112
|
+
])
|
|
113
|
+
], MultiLlmService);
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=multi-llm.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/services/multi-llm.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { ChatOpenAI } from '@langchain/openai';\nimport { ChatOllama } from '@langchain/ollama';\nimport { ChatAnthropic } from '@langchain/anthropic';\nimport { ChatGoogleGenerativeAI } from '@langchain/google-genai';\nimport { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport { ConfigManagerService } from '../../modules/config/services/config-manager.service';\nimport {\n ModelPurpose,\n ProviderType,\n} from '../../modules/config/types/config.types';\n\n@Injectable()\nexport class MultiLlmService {\n constructor(private readonly configManager: ConfigManagerService) {}\n\n createModel(purpose: ModelPurpose = 'default', streaming = false): BaseChatModel {\n const modelConfig = this.configManager.getModelConfig(purpose);\n\n if (!modelConfig) {\n throw new Error(\n `No model configured for purpose \"${purpose}\". ` +\n 'Run \"cast config init\" to configure.'\n );\n }\n\n const { provider, model, temperature } = modelConfig;\n const providerConfig = this.configManager.getProviderConfig(provider);\n\n if (!providerConfig) {\n throw new Error(\n `Provider \"${provider}\" is not configured. ` +\n 'Run \"cast config init\" to configure.'\n );\n }\n\n return this.createModelForProvider(\n provider,\n providerConfig,\n model,\n temperature,\n streaming\n );\n }\n\n createStreamingModel(purpose: ModelPurpose = 'default'): BaseChatModel {\n return this.createModel(purpose, true);\n }\n\n private createModelForProvider(\n provider: ProviderType,\n config: { apiKey?: string; baseUrl?: string },\n model: string,\n temperature: number | undefined,\n streaming: boolean\n ): BaseChatModel {\n switch (provider) {\n case 'openai':\n case 'deepseek':\n case 'openrouter':\n return new ChatOpenAI({\n modelName: model,\n ...(temperature !== undefined ? { temperature } : {}),\n openAIApiKey: config.apiKey,\n configuration: {\n baseURL: config.baseUrl,\n },\n streaming,\n streamUsage: streaming,\n });\n\n case 'anthropic':\n return new ChatAnthropic({\n modelName: model,\n ...(temperature !== undefined ? { temperature } : {}),\n anthropicApiKey: config.apiKey,\n anthropicApiUrl: config.baseUrl,\n streaming,\n });\n\n case 'gemini':\n return new ChatGoogleGenerativeAI({\n modelName: model,\n ...(temperature !== undefined ? { temperature } : {}),\n apiKey: config.apiKey,\n streaming,\n });\n\n case 'kimi':\n return new ChatOpenAI({\n modelName: model,\n ...(temperature !== undefined ? { temperature } : {}),\n openAIApiKey: config.apiKey,\n configuration: {\n baseURL: config.baseUrl || 'https://api.moonshot.cn/v1',\n },\n streaming,\n streamUsage: streaming,\n });\n\n case 'ollama':\n return new ChatOllama({\n model,\n ...(temperature !== undefined ? { temperature } : {}),\n baseUrl: config.baseUrl || 'http://localhost:11434',\n });\n\n default:\n throw new Error(`Unsupported provider: ${provider}`);\n }\n }\n}\n"],"names":["MultiLlmService","createModel","purpose","streaming","modelConfig","configManager","getModelConfig","Error","provider","model","temperature","providerConfig","getProviderConfig","createModelForProvider","createStreamingModel","config","ChatOpenAI","modelName","undefined","openAIApiKey","apiKey","configuration","baseURL","baseUrl","streamUsage","ChatAnthropic","anthropicApiKey","anthropicApiUrl","ChatGoogleGenerativeAI","ChatOllama"],"mappings":";;;;+BAaaA;;;eAAAA;;;wBAbc;wBACA;wBACA;2BACG;6BACS;sCAEF;;;;;;;;;;AAO9B,IAAA,AAAMA,kBAAN,MAAMA;IAGXC,YAAYC,UAAwB,SAAS,EAAEC,YAAY,KAAK,EAAiB;QAC/E,MAAMC,cAAc,IAAI,CAACC,aAAa,CAACC,cAAc,CAACJ;QAEtD,IAAI,CAACE,aAAa;YAChB,MAAM,IAAIG,MACR,CAAC,iCAAiC,EAAEL,QAAQ,GAAG,CAAC,GAC9C;QAEN;QAEA,MAAM,EAAEM,QAAQ,EAAEC,KAAK,EAAEC,WAAW,EAAE,GAAGN;QACzC,MAAMO,iBAAiB,IAAI,CAACN,aAAa,CAACO,iBAAiB,CAACJ;QAE5D,IAAI,CAACG,gBAAgB;YACnB,MAAM,IAAIJ,MACR,CAAC,UAAU,EAAEC,SAAS,qBAAqB,CAAC,GAC1C;QAEN;QAEA,OAAO,IAAI,CAACK,sBAAsB,CAChCL,UACAG,gBACAF,OACAC,aACAP;IAEJ;IAEAW,qBAAqBZ,UAAwB,SAAS,EAAiB;QACrE,OAAO,IAAI,CAACD,WAAW,CAACC,SAAS;IACnC;IAEQW,uBACNL,QAAsB,EACtBO,MAA6C,EAC7CN,KAAa,EACbC,WAA+B,EAC/BP,SAAkB,EACH;QACf,OAAQK;YACN,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAO,IAAIQ,kBAAU,CAAC;oBACpBC,WAAWR;oBACX,GAAIC,gBAAgBQ,YAAY;wBAAER;oBAAY,IAAI,CAAC,CAAC;oBACpDS,cAAcJ,OAAOK,MAAM;oBAC3BC,eAAe;wBACbC,SAASP,OAAOQ,OAAO;oBACzB;oBACApB;oBACAqB,aAAarB;gBACf;YAEF,KAAK;gBACH,OAAO,IAAIsB,wBAAa,CAAC;oBACvBR,WAAWR;oBACX,GAAIC,gBAAgBQ,YAAY;wBAAER;oBAAY,IAAI,CAAC,CAAC;oBACpDgB,iBAAiBX,OAAOK,MAAM;oBAC9BO,iBAAiBZ,OAAOQ,OAAO;oBAC/BpB;gBACF;YAEF,KAAK;gBACH,OAAO,IAAIyB,mCAAsB,CAAC;oBAChCX,WAAWR;oBACX,GAAIC,gBAAgBQ,YAAY;wBAAER;oBAAY,IAAI,CAAC,CAAC;oBACpDU,QAAQL,OAAOK,MAAM;oBACrBjB;gBACF;YAEF,KAAK;gBACH,OAAO,IAAIa,kBAAU,CAAC;oBACpBC,WAAWR;oBACX,GAAIC,gBAAgBQ,YAAY;wBAAER;oBAAY,IAAI,CAAC,CAAC;oBACpDS,cAAcJ,OAAOK,MAAM;oBAC3BC,eAAe;wBACbC,SAASP,OAAOQ,OAAO,IAAI;oBAC7B;oBACApB;oBACAqB,aAAarB;gBACf;YAEF,KAAK;gBACH,OAAO,IAAI0B,kBAAU,CAAC;oBACpBpB;oBACA,GAAIC,gBAAgBQ,YAAY;wBAAER;oBAAY,IAAI,CAAC,CAAC;oBACpDa,SAASR,OAAOQ,OAAO,IAAI;gBAC7B;YAEF;gBACE,MAAM,IAAIhB,MAAM,CAAC,sBAAsB,EAAEC,UAAU;QACvD;IACF;IAhGA,YAAY,AAAiBH,aAAmC,CAAE;aAArCA,gBAAAA;IAAsC;AAiGrE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./markdown.types"), exports);
|
|
6
|
+
function _export_star(from, to) {
|
|
7
|
+
Object.keys(from).forEach(function(k) {
|
|
8
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
9
|
+
Object.defineProperty(to, k, {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function() {
|
|
12
|
+
return from[k];
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return from;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/types/index.ts"],"sourcesContent":["export * from './markdown.types';\n"],"names":[],"mappings":";;;;qBAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/common/types/markdown.types.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
const _dotenv = require("dotenv");
|
|
8
|
+
const _core = require("@nestjs/core");
|
|
9
|
+
const _appmodule = require("./app.module");
|
|
10
|
+
const _replservice = require("./modules/repl/services/repl.service");
|
|
11
|
+
const _configmanagerservice = require("./modules/config/services/config-manager.service");
|
|
12
|
+
const _initconfigservice = require("./modules/config/services/init-config.service");
|
|
13
|
+
(0, _dotenv.config)();
|
|
14
|
+
async function checkAndRunSetup(configManager, initService) {
|
|
15
|
+
const hasConfig = await configManager.configExists();
|
|
16
|
+
if (!hasConfig) {
|
|
17
|
+
console.log('\n👋 Bem-vindo ao Cast Code!\n');
|
|
18
|
+
console.log('Parece que esta é a primeira vez que você executa o Cast.');
|
|
19
|
+
console.log('Vamos fazer a configuração inicial agora.\n');
|
|
20
|
+
try {
|
|
21
|
+
await initService.runInitialSetup();
|
|
22
|
+
} catch (error) {
|
|
23
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
24
|
+
console.error(`\n❌ Falha na configuração inicial: ${message}\n`);
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const created = await configManager.configExists();
|
|
28
|
+
if (!created) {
|
|
29
|
+
console.log('\n⚠️ Configuração não concluída. Rode: cast config init\n');
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
async function bootstrap() {
|
|
37
|
+
const args = process.argv.slice(2);
|
|
38
|
+
const command = args[0];
|
|
39
|
+
if (command === 'config' || command === 'init') {
|
|
40
|
+
const app = await _core.NestFactory.createApplicationContext(_appmodule.AppModule, {
|
|
41
|
+
logger: false
|
|
42
|
+
});
|
|
43
|
+
const configCommands = app.get(_initconfigservice.InitConfigService);
|
|
44
|
+
try {
|
|
45
|
+
await configCommands.runInitialSetup();
|
|
46
|
+
} catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.stack || error.message : String(error);
|
|
48
|
+
console.error('\nFailed to run initial setup:\n', message);
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
}
|
|
51
|
+
await app.close();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const app = await _core.NestFactory.createApplicationContext(_appmodule.AppModule, {
|
|
55
|
+
logger: false
|
|
56
|
+
});
|
|
57
|
+
const configManager = app.get(_configmanagerservice.ConfigManagerService);
|
|
58
|
+
const initService = app.get(_initconfigservice.InitConfigService);
|
|
59
|
+
const ready = await checkAndRunSetup(configManager, initService);
|
|
60
|
+
if (!ready) {
|
|
61
|
+
await app.close();
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
await configManager.loadConfig();
|
|
65
|
+
const repl = app.get(_replservice.ReplService);
|
|
66
|
+
process.on('SIGINT', ()=>{
|
|
67
|
+
repl.stop();
|
|
68
|
+
app.close();
|
|
69
|
+
process.exit(0);
|
|
70
|
+
});
|
|
71
|
+
try {
|
|
72
|
+
await repl.start();
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error('Failed to start:', error.message);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
bootstrap().catch((error)=>{
|
|
79
|
+
const message = error instanceof Error ? error.stack || error.message : String(error);
|
|
80
|
+
console.error('\nFatal bootstrap error:\n', message);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\nimport 'reflect-metadata';\nimport { config } from 'dotenv';\nimport { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { ReplService } from './modules/repl/services/repl.service';\nimport { ConfigManagerService } from './modules/config/services/config-manager.service';\nimport { InitConfigService } from './modules/config/services/init-config.service';\n\nconfig();\n\nasync function checkAndRunSetup(configManager: ConfigManagerService, initService: InitConfigService): Promise<boolean> {\n const hasConfig = await configManager.configExists();\n \n if (!hasConfig) {\n console.log('\\n👋 Bem-vindo ao Cast Code!\\n');\n console.log('Parece que esta é a primeira vez que você executa o Cast.');\n console.log('Vamos fazer a configuração inicial agora.\\n');\n\n try {\n await initService.runInitialSetup();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`\\n❌ Falha na configuração inicial: ${message}\\n`);\n return false;\n }\n\n const created = await configManager.configExists();\n if (!created) {\n console.log('\\n⚠️ Configuração não concluída. Rode: cast config init\\n');\n return false;\n }\n\n return true;\n }\n \n return true;\n}\n\nasync function bootstrap() {\n const args = process.argv.slice(2);\n const command = args[0];\n \n if (command === 'config' || command === 'init') {\n const app = await NestFactory.createApplicationContext(AppModule, {\n logger: false,\n });\n \n const configCommands = app.get(InitConfigService);\n try {\n await configCommands.runInitialSetup();\n } catch (error) {\n const message = error instanceof Error ? error.stack || error.message : String(error);\n console.error('\\nFailed to run initial setup:\\n', message);\n process.exitCode = 1;\n }\n await app.close();\n return;\n }\n\n const app = await NestFactory.createApplicationContext(AppModule, {\n logger: false,\n });\n\n const configManager = app.get(ConfigManagerService);\n const initService = app.get(InitConfigService);\n \n const ready = await checkAndRunSetup(configManager, initService);\n \n if (!ready) {\n await app.close();\n process.exit(1);\n }\n\n await configManager.loadConfig();\n\n const repl = app.get(ReplService);\n\n process.on('SIGINT', () => {\n repl.stop();\n app.close();\n process.exit(0);\n });\n\n try {\n await repl.start();\n } catch (error) {\n console.error('Failed to start:', (error as Error).message);\n process.exit(1);\n }\n}\n\nbootstrap().catch((error) => {\n const message = error instanceof Error ? error.stack || error.message : String(error);\n console.error('\\nFatal bootstrap error:\\n', message);\n process.exit(1);\n});\n"],"names":["config","checkAndRunSetup","configManager","initService","hasConfig","configExists","console","log","runInitialSetup","error","message","Error","String","created","bootstrap","args","process","argv","slice","command","app","NestFactory","createApplicationContext","AppModule","logger","configCommands","get","InitConfigService","stack","exitCode","close","ConfigManagerService","ready","exit","loadConfig","repl","ReplService","on","stop","start","catch"],"mappings":";;;;;QACO;wBACgB;sBACK;2BACF;6BACE;sCACS;mCACH;AAElCA,IAAAA,cAAM;AAEN,eAAeC,iBAAiBC,aAAmC,EAAEC,WAA8B;IACjG,MAAMC,YAAY,MAAMF,cAAcG,YAAY;IAElD,IAAI,CAACD,WAAW;QACdE,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QAEZ,IAAI;YACF,MAAMJ,YAAYK,eAAe;QACnC,EAAE,OAAOC,OAAO;YACd,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMC,OAAO,GAAGE,OAAOH;YAChEH,QAAQG,KAAK,CAAC,CAAC,mCAAmC,EAAEC,QAAQ,EAAE,CAAC;YAC/D,OAAO;QACT;QAEA,MAAMG,UAAU,MAAMX,cAAcG,YAAY;QAChD,IAAI,CAACQ,SAAS;YACZP,QAAQC,GAAG,CAAC;YACZ,OAAO;QACT;QAEA,OAAO;IACT;IAEA,OAAO;AACT;AAEA,eAAeO;IACb,MAAMC,OAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC;IAChC,MAAMC,UAAUJ,IAAI,CAAC,EAAE;IAEvB,IAAII,YAAY,YAAYA,YAAY,QAAQ;QAC9C,MAAMC,MAAM,MAAMC,iBAAW,CAACC,wBAAwB,CAACC,oBAAS,EAAE;YAChEC,QAAQ;QACV;QAEA,MAAMC,iBAAiBL,IAAIM,GAAG,CAACC,oCAAiB;QAChD,IAAI;YACF,MAAMF,eAAejB,eAAe;QACtC,EAAE,OAAOC,OAAO;YACd,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMmB,KAAK,IAAInB,MAAMC,OAAO,GAAGE,OAAOH;YAC/EH,QAAQG,KAAK,CAAC,oCAAoCC;YAClDM,QAAQa,QAAQ,GAAG;QACrB;QACA,MAAMT,IAAIU,KAAK;QACf;IACF;IAEA,MAAMV,MAAM,MAAMC,iBAAW,CAACC,wBAAwB,CAACC,oBAAS,EAAE;QAChEC,QAAQ;IACV;IAEA,MAAMtB,gBAAgBkB,IAAIM,GAAG,CAACK,0CAAoB;IAClD,MAAM5B,cAAciB,IAAIM,GAAG,CAACC,oCAAiB;IAE7C,MAAMK,QAAQ,MAAM/B,iBAAiBC,eAAeC;IAEpD,IAAI,CAAC6B,OAAO;QACV,MAAMZ,IAAIU,KAAK;QACfd,QAAQiB,IAAI,CAAC;IACf;IAEA,MAAM/B,cAAcgC,UAAU;IAE9B,MAAMC,OAAOf,IAAIM,GAAG,CAACU,wBAAW;IAEhCpB,QAAQqB,EAAE,CAAC,UAAU;QACnBF,KAAKG,IAAI;QACTlB,IAAIU,KAAK;QACTd,QAAQiB,IAAI,CAAC;IACf;IAEA,IAAI;QACF,MAAME,KAAKI,KAAK;IAClB,EAAE,OAAO9B,OAAO;QACdH,QAAQG,KAAK,CAAC,oBAAoB,AAACA,MAAgBC,OAAO;QAC1DM,QAAQiB,IAAI,CAAC;IACf;AACF;AAEAnB,YAAY0B,KAAK,CAAC,CAAC/B;IACjB,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMmB,KAAK,IAAInB,MAAMC,OAAO,GAAGE,OAAOH;IAC/EH,QAAQG,KAAK,CAAC,8BAA8BC;IAC5CM,QAAQiB,IAAI,CAAC;AACf"}
|