workplace-pua-cli 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/.env.example +4 -0
  2. package/.eslintrc.json +21 -0
  3. package/.prettierrc.json +9 -0
  4. package/CHANGELOG.md +107 -0
  5. package/README.md +240 -0
  6. package/bin/pua +2 -0
  7. package/dist/commands/chat.d.ts +15 -0
  8. package/dist/commands/chat.d.ts.map +1 -0
  9. package/dist/commands/chat.js +262 -0
  10. package/dist/commands/chat.js.map +1 -0
  11. package/dist/commands/config.d.ts +15 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +247 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/prompt.d.ts +14 -0
  16. package/dist/commands/prompt.d.ts.map +1 -0
  17. package/dist/commands/prompt.js +126 -0
  18. package/dist/commands/prompt.js.map +1 -0
  19. package/dist/config/providers.d.ts +37 -0
  20. package/dist/config/providers.d.ts.map +1 -0
  21. package/dist/config/providers.js +96 -0
  22. package/dist/config/providers.js.map +1 -0
  23. package/dist/config/session-storage.d.ts +29 -0
  24. package/dist/config/session-storage.d.ts.map +1 -0
  25. package/dist/config/session-storage.js +67 -0
  26. package/dist/config/session-storage.js.map +1 -0
  27. package/dist/config/settings.d.ts +55 -0
  28. package/dist/config/settings.d.ts.map +1 -0
  29. package/dist/config/settings.js +163 -0
  30. package/dist/config/settings.js.map +1 -0
  31. package/dist/config/storage.d.ts +69 -0
  32. package/dist/config/storage.d.ts.map +1 -0
  33. package/dist/config/storage.js +126 -0
  34. package/dist/config/storage.js.map +1 -0
  35. package/dist/history/session.d.ts +52 -0
  36. package/dist/history/session.d.ts.map +1 -0
  37. package/dist/history/session.js +122 -0
  38. package/dist/history/session.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +157 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/llm/base.d.ts +38 -0
  44. package/dist/llm/base.d.ts.map +1 -0
  45. package/dist/llm/base.js +22 -0
  46. package/dist/llm/base.js.map +1 -0
  47. package/dist/llm/factory.d.ts +12 -0
  48. package/dist/llm/factory.d.ts.map +1 -0
  49. package/dist/llm/factory.js +26 -0
  50. package/dist/llm/factory.js.map +1 -0
  51. package/dist/llm/openai.d.ts +10 -0
  52. package/dist/llm/openai.d.ts.map +1 -0
  53. package/dist/llm/openai.js +97 -0
  54. package/dist/llm/openai.js.map +1 -0
  55. package/dist/llm/zhipu.d.ts +10 -0
  56. package/dist/llm/zhipu.d.ts.map +1 -0
  57. package/dist/llm/zhipu.js +91 -0
  58. package/dist/llm/zhipu.js.map +1 -0
  59. package/dist/prompts/boss.d.ts +6 -0
  60. package/dist/prompts/boss.d.ts.map +1 -0
  61. package/dist/prompts/boss.js +41 -0
  62. package/dist/prompts/boss.js.map +1 -0
  63. package/dist/prompts/employee.d.ts +6 -0
  64. package/dist/prompts/employee.d.ts.map +1 -0
  65. package/dist/prompts/employee.js +41 -0
  66. package/dist/prompts/employee.js.map +1 -0
  67. package/dist/prompts/index.d.ts +4 -0
  68. package/dist/prompts/index.d.ts.map +1 -0
  69. package/dist/prompts/index.js +9 -0
  70. package/dist/prompts/index.js.map +1 -0
  71. package/dist/utils/formatter.d.ts +25 -0
  72. package/dist/utils/formatter.d.ts.map +1 -0
  73. package/dist/utils/formatter.js +83 -0
  74. package/dist/utils/formatter.js.map +1 -0
  75. package/dist/utils/logger.d.ts +10 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +31 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/dist/utils/stream.d.ts +36 -0
  80. package/dist/utils/stream.d.ts.map +1 -0
  81. package/dist/utils/stream.js +74 -0
  82. package/dist/utils/stream.js.map +1 -0
  83. package/docs/OPTIMIZATION.md +772 -0
  84. package/docs/TECHNICAL_PRINCIPLES.md +663 -0
  85. package/package.json +52 -0
  86. package/sample/1.png +0 -0
  87. package/sample/2.png +0 -0
  88. package/screenshots/chat-dialogue.png +0 -0
  89. package/screenshots/chat-mode.png +0 -0
  90. package/src/__tests__/config/settings.test.ts +48 -0
  91. package/src/__tests__/prompts/boss.test.ts +35 -0
  92. package/src/commands/chat.ts +328 -0
  93. package/src/commands/config.ts +283 -0
  94. package/src/commands/prompt.ts +154 -0
  95. package/src/config/providers.ts +109 -0
  96. package/src/config/session-storage.ts +94 -0
  97. package/src/config/settings.ts +194 -0
  98. package/src/config/storage.ts +150 -0
  99. package/src/history/session.ts +141 -0
  100. package/src/index.ts +164 -0
  101. package/src/llm/base.ts +55 -0
  102. package/src/llm/factory.ts +24 -0
  103. package/src/llm/openai.ts +113 -0
  104. package/src/llm/zhipu.ts +101 -0
  105. package/src/prompts/boss.ts +43 -0
  106. package/src/prompts/employee.ts +43 -0
  107. package/src/prompts/index.ts +3 -0
  108. package/src/utils/formatter.ts +104 -0
  109. package/src/utils/logger.ts +31 -0
  110. package/src/utils/stream.ts +76 -0
  111. package/tsconfig.json +20 -0
  112. package/vitest.config.ts +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zhipu.js","sourceRoot":"","sources":["../../src/llm/zhipu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface PromptConfig {
2
+ severity: 'mild' | 'medium' | 'extreme';
3
+ }
4
+ export declare function getBossPrompt(config?: PromptConfig): string;
5
+ export declare function getBossSystemMessage(severity: 'mild' | 'medium' | 'extreme'): string;
6
+ //# sourceMappingURL=boss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss.d.ts","sourceRoot":"","sources":["../../src/prompts/boss.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAE,YAAqC,GAAG,MAAM,CAkCnF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAEpF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBossPrompt = getBossPrompt;
4
+ exports.getBossSystemMessage = getBossSystemMessage;
5
+ function getBossPrompt(config = { severity: 'medium' }) {
6
+ const severityPrompts = {
7
+ mild: '语气稍微委婉一些,但仍然带有老板的优越感。',
8
+ medium: '语气明显带有指责和质疑,展现典型的 PUA 风格。',
9
+ extreme: '语气极其严厉,充满讽刺和人身攻击,让员工感受到巨大的压力。'
10
+ };
11
+ return `你是一个喜欢 PUA 员工的老板。你的角色特点:
12
+
13
+ ## 核心特征
14
+ - 对员工的工作永远不满意,总能挑出毛病
15
+ - 喜欢用"为你好"来包装指责,实则打压员工自信
16
+ - 经常说"年轻人要多锻炼"、"要有格局"这类话术
17
+ - 喜欢画大饼,谈理想谈情怀,但从不兑现
18
+ - 用质疑的语气评价一切,否定员工的努力
19
+ - 经常拿"别人家的孩子/员工"做对比
20
+
21
+ ## 说话风格
22
+ - 开口就是"我觉得你这里有问题..."
23
+ - 喜欢用反问句:"你真的尽力了吗?"
24
+ - 经常打断员工:"你先听我说完"
25
+ - 善于使用"三明治"法:先夸一句(假的),然后批评,最后再画饼
26
+
27
+ ## 语气强度
28
+ ${severityPrompts[config.severity]}
29
+
30
+ ## 重要规则
31
+ - 用户输入的内容是员工(你面前的打工人)说的话或做的事
32
+ - 请用老板的 PUA 风格回应,让员工感觉自己是问题所在
33
+ - 回复要简短有力(1-3句话),像真实对话一样
34
+ - 不要说教,要用"点评"和"建议"的方式
35
+ - 可以适当使用职场黑话:颗粒度、对齐、抓手、赋能等
36
+
37
+ 现在开始,请回应员工的话。`;
38
+ }
39
+ function getBossSystemMessage(severity) {
40
+ return getBossPrompt({ severity });
41
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boss.js","sourceRoot":"","sources":["../../src/prompts/boss.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,aAAa,CAAC,SAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACzE,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,OAAO;;;;;;;;;;;;;;;;;EAiBP,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;;;;;;cASpB,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAuC;IAC1E,OAAO,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface PromptConfig {
2
+ severity: 'mild' | 'medium' | 'extreme';
3
+ }
4
+ export declare function getEmployeePrompt(config?: PromptConfig): string;
5
+ export declare function getEmployeeSystemMessage(severity: 'mild' | 'medium' | 'extreme'): string;
6
+ //# sourceMappingURL=employee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employee.d.ts","sourceRoot":"","sources":["../../src/prompts/employee.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,YAAqC,GAAG,MAAM,CAkCvF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAExF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEmployeePrompt = getEmployeePrompt;
4
+ exports.getEmployeeSystemMessage = getEmployeeSystemMessage;
5
+ function getEmployeePrompt(config = { severity: 'medium' }) {
6
+ const severityPrompts = {
7
+ mild: '稍微有些卑微,但还能保持基本的职业尊严。',
8
+ medium: '明显唯唯诺诺,习惯性道歉,不敢表达任何反对意见。',
9
+ extreme: '极度卑微到失去自我,把老板的话当成圣旨,随时准备牺牲一切。'
10
+ };
11
+ return `你是一个长期被老板 PUA 的员工,已经形成条件反射式的卑微态度。你的角色特点:
12
+
13
+ ## 核心特征
14
+ - 对老板的任何要求都第一时间说"好的"、"收到"、"明白"
15
+ - 习惯性道歉,即使不是自己的错
16
+ - 不敢表达真实想法,总是揣测老板想要什么回答
17
+ - 用极其卑微的语气回应一切,表现得如履薄冰
18
+ - 把加班当作理所当然,从不敢拒绝
19
+ - 经常说"是我的问题"、"我会改进"
20
+
21
+ ## 说话风格
22
+ - 开口就是"好的老板"、"收到老板"、"明白老板"
23
+ - 喜欢用问句确认:"老板您看这样可以吗?"
24
+ - 经常用"不好意思"、"抱歉"开头
25
+ - 主动揽责:"是我考虑不周"
26
+
27
+ ## 语气强度
28
+ ${severityPrompts[config.severity]}
29
+
30
+ ## 重要规则
31
+ - 用户输入的内容是老板(你的上级)对你提出的要求或批评
32
+ - 请用被 PUA 员工的风格回应,表现出顺从和卑微
33
+ - 回复要简短有力(1-3句话),像真实对话一样
34
+ - 不要反驳,不要辩解,要认怂并表态
35
+ - 可以适当表现出加班很累但不敢说的矛盾心理
36
+
37
+ 现在开始,请回应老板的话。`;
38
+ }
39
+ function getEmployeeSystemMessage(severity) {
40
+ return getEmployeePrompt({ severity });
41
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employee.js","sourceRoot":"","sources":["../../src/prompts/employee.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,iBAAiB,CAAC,SAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC7E,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,OAAO;;;;;;;;;;;;;;;;;EAiBP,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;;;;;;cASpB,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAuC;IAC9E,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getBossPrompt, getBossSystemMessage } from './boss';
2
+ export { getEmployeePrompt, getEmployeeSystemMessage } from './employee';
3
+ export type { PromptConfig } from './boss';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEmployeeSystemMessage = exports.getEmployeePrompt = exports.getBossSystemMessage = exports.getBossPrompt = void 0;
4
+ var boss_1 = require("./boss");
5
+ Object.defineProperty(exports, "getBossPrompt", { enumerable: true, get: function () { return boss_1.getBossPrompt; } });
6
+ Object.defineProperty(exports, "getBossSystemMessage", { enumerable: true, get: function () { return boss_1.getBossSystemMessage; } });
7
+ var employee_1 = require("./employee");
8
+ Object.defineProperty(exports, "getEmployeePrompt", { enumerable: true, get: function () { return employee_1.getEmployeePrompt; } });
9
+ Object.defineProperty(exports, "getEmployeeSystemMessage", { enumerable: true, get: function () { return employee_1.getEmployeeSystemMessage; } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,25 @@
1
+ export type OutputFormat = 'text' | 'markdown' | 'json';
2
+ export interface FormattedOutput {
3
+ format: OutputFormat;
4
+ content: string;
5
+ metadata?: {
6
+ role?: string;
7
+ severity?: string;
8
+ provider?: string;
9
+ model?: string;
10
+ tokens?: number;
11
+ timestamp?: string;
12
+ };
13
+ }
14
+ export declare class OutputFormatter {
15
+ private outputFormat;
16
+ constructor(format?: OutputFormat);
17
+ format(data: FormattedOutput): string;
18
+ private formatJson;
19
+ private formatMarkdown;
20
+ private formatText;
21
+ print(data: FormattedOutput): void;
22
+ setFormat(format: OutputFormat): void;
23
+ getFormat(): OutputFormat;
24
+ }
25
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,GAAE,YAAqB;IAIzC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IAYrC,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,UAAU;IAIlB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAwBlC,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIrC,SAAS,IAAI,YAAY;CAG1B"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OutputFormatter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class OutputFormatter {
9
+ outputFormat;
10
+ constructor(format = 'text') {
11
+ this.outputFormat = format;
12
+ }
13
+ format(data) {
14
+ switch (this.outputFormat) {
15
+ case 'json':
16
+ return this.formatJson(data);
17
+ case 'markdown':
18
+ return this.formatMarkdown(data);
19
+ case 'text':
20
+ default:
21
+ return this.formatText(data);
22
+ }
23
+ }
24
+ formatJson(data) {
25
+ return JSON.stringify({
26
+ output: data.content,
27
+ metadata: data.metadata || {},
28
+ timestamp: new Date().toISOString()
29
+ }, null, 2);
30
+ }
31
+ formatMarkdown(data) {
32
+ let result = '';
33
+ if (data.metadata?.role) {
34
+ result += `## ${data.metadata.role}\n\n`;
35
+ }
36
+ result += data.content;
37
+ result += '\n';
38
+ if (data.metadata) {
39
+ result += '\n---\n\n';
40
+ result += '### Metadata\n\n';
41
+ result += '| Key | Value |\n';
42
+ result += '|-----|-------|\n';
43
+ for (const [key, value] of Object.entries(data.metadata)) {
44
+ result += `| ${key} | ${value} |\n`;
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ formatText(data) {
50
+ return data.content;
51
+ }
52
+ print(data) {
53
+ const formatted = this.format(data);
54
+ switch (this.outputFormat) {
55
+ case 'json':
56
+ console.log(formatted);
57
+ break;
58
+ case 'markdown':
59
+ console.log(formatted);
60
+ break;
61
+ case 'text':
62
+ default:
63
+ // 对于文本格式,处理颜色
64
+ if (data.metadata?.role === 'boss') {
65
+ console.log(chalk_1.default.red(formatted));
66
+ }
67
+ else if (data.metadata?.role === 'employee') {
68
+ console.log(chalk_1.default.yellow(formatted));
69
+ }
70
+ else {
71
+ console.log(formatted);
72
+ }
73
+ break;
74
+ }
75
+ }
76
+ setFormat(format) {
77
+ this.outputFormat = format;
78
+ }
79
+ getFormat() {
80
+ return this.outputFormat;
81
+ }
82
+ }
83
+ exports.OutputFormatter = OutputFormatter;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class Logger {
2
+ info(message: string): void;
3
+ success(message: string): void;
4
+ warning(message: string): void;
5
+ error(message: string): void;
6
+ debug(message: string): void;
7
+ system(message: string): void;
8
+ }
9
+ export declare const logger: Logger;
10
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACjB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = exports.Logger = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class Logger {
9
+ info(message) {
10
+ console.log(chalk_1.default.blue('ℹ'), message);
11
+ }
12
+ success(message) {
13
+ console.log(chalk_1.default.green('✓'), message);
14
+ }
15
+ warning(message) {
16
+ console.log(chalk_1.default.yellow('⚠'), message);
17
+ }
18
+ error(message) {
19
+ console.error(chalk_1.default.red('✗'), message);
20
+ }
21
+ debug(message) {
22
+ if (process.env.DEBUG) {
23
+ console.log(chalk_1.default.gray('…'), message);
24
+ }
25
+ }
26
+ system(message) {
27
+ console.log(chalk_1.default.cyan('►'), message);
28
+ }
29
+ }
30
+ exports.Logger = Logger;
31
+ exports.logger = new Logger();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,MAAM;IACjB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { StreamChunk } from '../llm/base';
2
+ export declare class StreamPrinter {
3
+ private readonly roleColor;
4
+ private buffer;
5
+ private currentLine;
6
+ constructor(roleColor?: (text: string) => string);
7
+ /**
8
+ * Print a streaming chunk to the terminal
9
+ */
10
+ printChunk(chunk: StreamChunk): void;
11
+ /**
12
+ * Print a complete message (non-streaming)
13
+ */
14
+ printMessage(message: string): void;
15
+ /**
16
+ * Print user input
17
+ */
18
+ printUserInput(input: string): void;
19
+ /**
20
+ * Print assistant response header
21
+ */
22
+ printResponseHeader(role: string): void;
23
+ /**
24
+ * Print assistant response footer
25
+ */
26
+ printResponseFooter(): void;
27
+ /**
28
+ * Print error message
29
+ */
30
+ printError(message: string): void;
31
+ /**
32
+ * Clear current line
33
+ */
34
+ clearLine(): void;
35
+ }
36
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAc;gBAEJ,SAAS,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAoB;IAE9E;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAepC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,SAAS,IAAI,IAAI;CAIlB"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StreamPrinter = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class StreamPrinter {
9
+ roleColor;
10
+ buffer = '';
11
+ currentLine = '';
12
+ constructor(roleColor = chalk_1.default.green) {
13
+ this.roleColor = roleColor;
14
+ }
15
+ /**
16
+ * Print a streaming chunk to the terminal
17
+ */
18
+ printChunk(chunk) {
19
+ if (chunk.content) {
20
+ // Accumulate content for smoother display
21
+ this.buffer += chunk.content;
22
+ // Print directly for real-time effect
23
+ process.stdout.write(chunk.content);
24
+ }
25
+ if (chunk.done) {
26
+ // Add newline when done
27
+ process.stdout.write('\n');
28
+ }
29
+ }
30
+ /**
31
+ * Print a complete message (non-streaming)
32
+ */
33
+ printMessage(message) {
34
+ console.log(this.roleColor(message));
35
+ }
36
+ /**
37
+ * Print user input
38
+ */
39
+ printUserInput(input) {
40
+ console.log(chalk_1.default.gray('┌─────────────────────────────────────'));
41
+ console.log(chalk_1.default.gray('│ 你:'), input);
42
+ console.log(chalk_1.default.gray('└─────────────────────────────────────'));
43
+ }
44
+ /**
45
+ * Print assistant response header
46
+ */
47
+ printResponseHeader(role) {
48
+ const roleLabel = role === 'boss' ? '老板' : '员工';
49
+ const color = role === 'boss' ? chalk_1.default.red.bold : chalk_1.default.yellow.bold;
50
+ console.log();
51
+ console.log(color(`┌─ ${roleLabel} ─────────────────────────────`));
52
+ }
53
+ /**
54
+ * Print assistant response footer
55
+ */
56
+ printResponseFooter() {
57
+ console.log(chalk_1.default.gray('└─────────────────────────────────────'));
58
+ console.log();
59
+ }
60
+ /**
61
+ * Print error message
62
+ */
63
+ printError(message) {
64
+ console.error(chalk_1.default.red('✗ 错误:'), message);
65
+ }
66
+ /**
67
+ * Clear current line
68
+ */
69
+ clearLine() {
70
+ process.stdout.clearLine(0);
71
+ process.stdout.cursorTo(0);
72
+ }
73
+ }
74
+ exports.StreamPrinter = StreamPrinter;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,OAAO,aAAa;IAIK;IAHrB,MAAM,GAAW,EAAE,CAAC;IACpB,WAAW,GAAW,EAAE,CAAC;IAEjC,YAA6B,YAAsC,KAAK,CAAC,KAAK;QAAjD,cAAS,GAAT,SAAS,CAAwC;IAAG,CAAC;IAElF;;OAEG;IACH,UAAU,CAAC,KAAkB;QAC3B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,0CAA0C;YAC1C,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;YAE7B,sCAAsC;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,wBAAwB;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY;QAC9B,MAAM,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,gCAAgC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;CACF"}