pulse-line 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/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +27 -0
- package/LICENSE +21 -0
- package/README.md +316 -0
- package/bin/pulse-line.js +12 -0
- package/commands/clear-cache.md +23 -0
- package/commands/config.md +25 -0
- package/commands/debug.md +25 -0
- package/commands/disable.md +27 -0
- package/commands/enable.md +27 -0
- package/commands/install.md +25 -0
- package/commands/language.md +27 -0
- package/commands/reload.md +23 -0
- package/commands/theme.md +27 -0
- package/commands/themes.md +23 -0
- package/commands/uninstall.md +23 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +242 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config/defaults.d.ts +2 -0
- package/dist/src/config/defaults.js +7 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/loader.d.ts +6 -0
- package/dist/src/config/loader.js +146 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/migrate-config.d.ts +2 -0
- package/dist/src/config/migrate-config.js +22 -0
- package/dist/src/config/migrate-config.js.map +1 -0
- package/dist/src/config/validator.d.ts +2 -0
- package/dist/src/config/validator.js +7 -0
- package/dist/src/config/validator.js.map +1 -0
- package/dist/src/extractors/account-usage.d.ts +20 -0
- package/dist/src/extractors/account-usage.js +293 -0
- package/dist/src/extractors/account-usage.js.map +1 -0
- package/dist/src/extractors/context.d.ts +7 -0
- package/dist/src/extractors/context.js +20 -0
- package/dist/src/extractors/context.js.map +1 -0
- package/dist/src/extractors/cost.d.ts +5 -0
- package/dist/src/extractors/cost.js +13 -0
- package/dist/src/extractors/cost.js.map +1 -0
- package/dist/src/extractors/git.d.ts +6 -0
- package/dist/src/extractors/git.js +35 -0
- package/dist/src/extractors/git.js.map +1 -0
- package/dist/src/extractors/index.d.ts +25 -0
- package/dist/src/extractors/index.js +33 -0
- package/dist/src/extractors/index.js.map +1 -0
- package/dist/src/extractors/mcp.d.ts +5 -0
- package/dist/src/extractors/mcp.js +72 -0
- package/dist/src/extractors/mcp.js.map +1 -0
- package/dist/src/extractors/model.d.ts +9 -0
- package/dist/src/extractors/model.js +20 -0
- package/dist/src/extractors/model.js.map +1 -0
- package/dist/src/extractors/output-style.d.ts +9 -0
- package/dist/src/extractors/output-style.js +13 -0
- package/dist/src/extractors/output-style.js.map +1 -0
- package/dist/src/extractors/rate-limits.d.ts +8 -0
- package/dist/src/extractors/rate-limits.js +39 -0
- package/dist/src/extractors/rate-limits.js.map +1 -0
- package/dist/src/extractors/session.d.ts +5 -0
- package/dist/src/extractors/session.js +67 -0
- package/dist/src/extractors/session.js.map +1 -0
- package/dist/src/extractors/thinking.d.ts +10 -0
- package/dist/src/extractors/thinking.js +16 -0
- package/dist/src/extractors/thinking.js.map +1 -0
- package/dist/src/extractors/third-party-api.d.ts +13 -0
- package/dist/src/extractors/third-party-api.js +193 -0
- package/dist/src/extractors/third-party-api.js.map +1 -0
- package/dist/src/extractors/transcript.d.ts +5 -0
- package/dist/src/extractors/transcript.js +67 -0
- package/dist/src/extractors/transcript.js.map +1 -0
- package/dist/src/extractors/workspace.d.ts +9 -0
- package/dist/src/extractors/workspace.js +43 -0
- package/dist/src/extractors/workspace.js.map +1 -0
- package/dist/src/formatters/duration.d.ts +1 -0
- package/dist/src/formatters/duration.js +19 -0
- package/dist/src/formatters/duration.js.map +1 -0
- package/dist/src/formatters/index.d.ts +7 -0
- package/dist/src/formatters/index.js +16 -0
- package/dist/src/formatters/index.js.map +1 -0
- package/dist/src/formatters/layout.d.ts +10 -0
- package/dist/src/formatters/layout.js +38 -0
- package/dist/src/formatters/layout.js.map +1 -0
- package/dist/src/formatters/progress-bar.d.ts +2 -0
- package/dist/src/formatters/progress-bar.js +23 -0
- package/dist/src/formatters/progress-bar.js.map +1 -0
- package/dist/src/formatters/segment.d.ts +9 -0
- package/dist/src/formatters/segment.js +18 -0
- package/dist/src/formatters/segment.js.map +1 -0
- package/dist/src/formatters/separator.d.ts +1 -0
- package/dist/src/formatters/separator.js +11 -0
- package/dist/src/formatters/separator.js.map +1 -0
- package/dist/src/i18n/index.d.ts +8 -0
- package/dist/src/i18n/index.js +31 -0
- package/dist/src/i18n/index.js.map +1 -0
- package/dist/src/i18n/locales/en.d.ts +1 -0
- package/dist/src/i18n/locales/en.js +26 -0
- package/dist/src/i18n/locales/en.js.map +1 -0
- package/dist/src/i18n/locales/zh.d.ts +1 -0
- package/dist/src/i18n/locales/zh.js +26 -0
- package/dist/src/i18n/locales/zh.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +176 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/parser/stdin-parser.d.ts +3 -0
- package/dist/src/parser/stdin-parser.js +58 -0
- package/dist/src/parser/stdin-parser.js.map +1 -0
- package/dist/src/themes/builtin/cyberpunk.d.ts +2 -0
- package/dist/src/themes/builtin/cyberpunk.js +47 -0
- package/dist/src/themes/builtin/cyberpunk.js.map +1 -0
- package/dist/src/themes/builtin/dark.d.ts +2 -0
- package/dist/src/themes/builtin/dark.js +47 -0
- package/dist/src/themes/builtin/dark.js.map +1 -0
- package/dist/src/themes/builtin/forest.d.ts +2 -0
- package/dist/src/themes/builtin/forest.js +47 -0
- package/dist/src/themes/builtin/forest.js.map +1 -0
- package/dist/src/themes/builtin/light.d.ts +2 -0
- package/dist/src/themes/builtin/light.js +47 -0
- package/dist/src/themes/builtin/light.js.map +1 -0
- package/dist/src/themes/builtin/ocean.d.ts +2 -0
- package/dist/src/themes/builtin/ocean.js +47 -0
- package/dist/src/themes/builtin/ocean.js.map +1 -0
- package/dist/src/themes/icon-provider.d.ts +2 -0
- package/dist/src/themes/icon-provider.js +10 -0
- package/dist/src/themes/icon-provider.js.map +1 -0
- package/dist/src/themes/icon-sets/nerd.d.ts +17 -0
- package/dist/src/themes/icon-sets/nerd.js +20 -0
- package/dist/src/themes/icon-sets/nerd.js.map +1 -0
- package/dist/src/themes/icon-sets/text.d.ts +17 -0
- package/dist/src/themes/icon-sets/text.js +21 -0
- package/dist/src/themes/icon-sets/text.js.map +1 -0
- package/dist/src/themes/index.d.ts +4 -0
- package/dist/src/themes/index.js +56 -0
- package/dist/src/themes/index.js.map +1 -0
- package/dist/src/types/pulse-config.d.ts +58 -0
- package/dist/src/types/pulse-config.js +50 -0
- package/dist/src/types/pulse-config.js.map +1 -0
- package/dist/src/types/pulse-input.d.ts +83 -0
- package/dist/src/types/pulse-input.js +4 -0
- package/dist/src/types/pulse-input.js.map +1 -0
- package/dist/src/types/theme.d.ts +50 -0
- package/dist/src/types/theme.js +4 -0
- package/dist/src/types/theme.js.map +1 -0
- package/dist/src/utils/ansi.d.ts +6 -0
- package/dist/src/utils/ansi.js +31 -0
- package/dist/src/utils/ansi.js.map +1 -0
- package/dist/src/utils/cache.d.ts +11 -0
- package/dist/src/utils/cache.js +128 -0
- package/dist/src/utils/cache.js.map +1 -0
- package/dist/src/utils/claude-settings-env.d.ts +11 -0
- package/dist/src/utils/claude-settings-env.js +108 -0
- package/dist/src/utils/claude-settings-env.js.map +1 -0
- package/dist/src/utils/constants.d.ts +3 -0
- package/dist/src/utils/constants.js +43 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/display-sanitize.d.ts +7 -0
- package/dist/src/utils/display-sanitize.js +69 -0
- package/dist/src/utils/display-sanitize.js.map +1 -0
- package/dist/src/utils/fs.d.ts +5 -0
- package/dist/src/utils/fs.js +79 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/git.d.ts +7 -0
- package/dist/src/utils/git.js +56 -0
- package/dist/src/utils/git.js.map +1 -0
- package/dist/src/utils/logger.d.ts +9 -0
- package/dist/src/utils/logger.js +53 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/model-display-env.d.ts +12 -0
- package/dist/src/utils/model-display-env.js +53 -0
- package/dist/src/utils/model-display-env.js.map +1 -0
- package/dist/src/utils/provider-credentials.d.ts +12 -0
- package/dist/src/utils/provider-credentials.js +145 -0
- package/dist/src/utils/provider-credentials.js.map +1 -0
- package/dist/test/advanced-extractors.test.d.ts +1 -0
- package/dist/test/advanced-extractors.test.js +96 -0
- package/dist/test/advanced-extractors.test.js.map +1 -0
- package/dist/test/benchmark.d.ts +1 -0
- package/dist/test/benchmark.js +67 -0
- package/dist/test/benchmark.js.map +1 -0
- package/dist/test/display-sanitize.test.d.ts +1 -0
- package/dist/test/display-sanitize.test.js +28 -0
- package/dist/test/display-sanitize.test.js.map +1 -0
- package/dist/test/extractors.test.d.ts +1 -0
- package/dist/test/extractors.test.js +261 -0
- package/dist/test/extractors.test.js.map +1 -0
- package/dist/test/formatters.test.d.ts +1 -0
- package/dist/test/formatters.test.js +62 -0
- package/dist/test/formatters.test.js.map +1 -0
- package/dist/test/git.test.d.ts +1 -0
- package/dist/test/git.test.js +85 -0
- package/dist/test/git.test.js.map +1 -0
- package/dist/test/migrate-config.test.d.ts +1 -0
- package/dist/test/migrate-config.test.js +23 -0
- package/dist/test/migrate-config.test.js.map +1 -0
- package/dist/test/model-display-env.test.d.ts +1 -0
- package/dist/test/model-display-env.test.js +125 -0
- package/dist/test/model-display-env.test.js.map +1 -0
- package/dist/test/parser.test.d.ts +1 -0
- package/dist/test/parser.test.js +108 -0
- package/dist/test/parser.test.js.map +1 -0
- package/dist/test/provider-credentials.test.d.ts +1 -0
- package/dist/test/provider-credentials.test.js +62 -0
- package/dist/test/provider-credentials.test.js.map +1 -0
- package/dist/test/themes.test.d.ts +1 -0
- package/dist/test/themes.test.js +83 -0
- package/dist/test/themes.test.js.map +1 -0
- package/dist/test/third-party-api.test.d.ts +1 -0
- package/dist/test/third-party-api.test.js +99 -0
- package/dist/test/third-party-api.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +43 -0
- package/skills/pulse-configuration/SKILL.md +267 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// test/parser.test.ts
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const os_1 = require("os");
|
|
12
|
+
(0, node_test_1.test)('parseStdinSync should parse valid JSON from stdin', () => {
|
|
13
|
+
const testFile = (0, path_1.join)((0, os_1.tmpdir)(), 'pulse-test-input.json');
|
|
14
|
+
const mockInput = {
|
|
15
|
+
cwd: '/Users/test/project',
|
|
16
|
+
session_id: 'session-123',
|
|
17
|
+
transcript_path: '/Users/test/.claude/sessions/session-123.jsonl',
|
|
18
|
+
model: { id: 'claude-opus-4', display_name: 'Opus 4' },
|
|
19
|
+
workspace: {
|
|
20
|
+
current_dir: '/Users/test/project',
|
|
21
|
+
project_dir: '/Users/test/project',
|
|
22
|
+
project_name: 'project',
|
|
23
|
+
read_only: false
|
|
24
|
+
},
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
output_style: { name: 'default' },
|
|
27
|
+
cost: {
|
|
28
|
+
total_cost_usd: 0.042,
|
|
29
|
+
input_cost_usd: 0.008,
|
|
30
|
+
output_cost_usd: 0.034
|
|
31
|
+
},
|
|
32
|
+
context_window: {
|
|
33
|
+
total_input_tokens: 1200,
|
|
34
|
+
total_output_tokens: 420,
|
|
35
|
+
context_window_size: 200000,
|
|
36
|
+
used_percentage: 65.0,
|
|
37
|
+
remaining_percentage: 99.4
|
|
38
|
+
},
|
|
39
|
+
exceeds_200k_tokens: false
|
|
40
|
+
};
|
|
41
|
+
try {
|
|
42
|
+
(0, fs_1.writeFileSync)(testFile, JSON.stringify(mockInput));
|
|
43
|
+
const raw = JSON.stringify(mockInput);
|
|
44
|
+
const result = JSON.parse(raw);
|
|
45
|
+
// Verify structure
|
|
46
|
+
node_assert_1.default.strictEqual(result.model.display_name, 'Opus 4');
|
|
47
|
+
node_assert_1.default.strictEqual(result.cost.total_cost_usd, 0.042);
|
|
48
|
+
node_assert_1.default.strictEqual(result.cwd, '/Users/test/project');
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
try {
|
|
52
|
+
(0, fs_1.unlinkSync)(testFile);
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
(0, node_test_1.test)('parseStdinSync should throw on invalid JSON', () => {
|
|
58
|
+
const invalidJson = 'not valid json{{{';
|
|
59
|
+
node_assert_1.default.throws(() => {
|
|
60
|
+
JSON.parse(invalidJson);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
(0, node_test_1.test)('parseStdinSync should handle optional fields', () => {
|
|
64
|
+
const minimal = {
|
|
65
|
+
cwd: '/tmp',
|
|
66
|
+
session_id: 's1',
|
|
67
|
+
transcript_path: '/tmp/s1.jsonl',
|
|
68
|
+
model: { id: 'claude-sonnet-4', display_name: 'Sonnet 4' },
|
|
69
|
+
workspace: { current_dir: '/tmp', read_only: false },
|
|
70
|
+
version: '1.0',
|
|
71
|
+
output_style: { name: 'default' },
|
|
72
|
+
cost: { total_cost_usd: 0.01 },
|
|
73
|
+
context_window: {
|
|
74
|
+
total_input_tokens: 0,
|
|
75
|
+
total_output_tokens: 0,
|
|
76
|
+
context_window_size: 200000,
|
|
77
|
+
used_percentage: 0,
|
|
78
|
+
remaining_percentage: 100
|
|
79
|
+
},
|
|
80
|
+
exceeds_200k_tokens: false
|
|
81
|
+
};
|
|
82
|
+
const result = minimal;
|
|
83
|
+
node_assert_1.default.strictEqual(result.model.display_name, 'Sonnet 4');
|
|
84
|
+
node_assert_1.default.strictEqual(result.rate_limits, undefined);
|
|
85
|
+
});
|
|
86
|
+
(0, node_test_1.test)('parseStdinSync should handle large context window', () => {
|
|
87
|
+
const largeCtx = {
|
|
88
|
+
cwd: '/tmp',
|
|
89
|
+
session_id: 's1',
|
|
90
|
+
transcript_path: '/tmp/s1.jsonl',
|
|
91
|
+
model: { id: 'claude-opus-4', display_name: 'Opus 4' },
|
|
92
|
+
workspace: { current_dir: '/tmp', read_only: false },
|
|
93
|
+
version: '1.0',
|
|
94
|
+
output_style: { name: 'default' },
|
|
95
|
+
cost: { total_cost_usd: 0.01 },
|
|
96
|
+
context_window: {
|
|
97
|
+
total_input_tokens: 190000,
|
|
98
|
+
total_output_tokens: 5000,
|
|
99
|
+
context_window_size: 200000,
|
|
100
|
+
used_percentage: 97.5,
|
|
101
|
+
remaining_percentage: 2.5
|
|
102
|
+
},
|
|
103
|
+
exceeds_200k_tokens: false
|
|
104
|
+
};
|
|
105
|
+
node_assert_1.default.strictEqual(largeCtx.context_window.used_percentage, 97.5);
|
|
106
|
+
node_assert_1.default.strictEqual(largeCtx.exceeds_200k_tokens, false);
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../test/parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// test/provider-credentials.test.ts
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
9
|
+
const provider_credentials_1 = require("../src/utils/provider-credentials");
|
|
10
|
+
(0, node_test_1.test)('zhipu resolves from ANTHROPIC_* when BASE_URL targets bigmodel.cn', () => {
|
|
11
|
+
const save = {};
|
|
12
|
+
for (const k of ['ANTHROPIC_BASE_URL', 'ANTHROPIC_AUTH_TOKEN', 'ZHIPU_API_KEY', 'ZHIPUAI_API_KEY',
|
|
13
|
+
'BIGMODEL_API_KEY', 'PULSE_ZHIPU_API_KEY', 'ANTHROPIC_API_KEY']) {
|
|
14
|
+
save[k] = process.env[k];
|
|
15
|
+
delete process.env[k];
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const merged = {
|
|
19
|
+
ANTHROPIC_BASE_URL: 'https://open.bigmodel.cn/api/anthropic',
|
|
20
|
+
ANTHROPIC_AUTH_TOKEN: 'test-bigmodel-token'
|
|
21
|
+
};
|
|
22
|
+
const c = (0, provider_credentials_1.resolveProviderCredentials)('zhipu', merged);
|
|
23
|
+
node_assert_1.default.ok(c);
|
|
24
|
+
node_assert_1.default.strictEqual(c.apiKey, 'test-bigmodel-token');
|
|
25
|
+
node_assert_1.default.strictEqual(c.baseUrl, 'https://open.bigmodel.cn');
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
for (const k of Object.keys(save)) {
|
|
29
|
+
const v = save[k];
|
|
30
|
+
if (v === undefined)
|
|
31
|
+
delete process.env[k];
|
|
32
|
+
else
|
|
33
|
+
process.env[k] = v;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
(0, node_test_1.test)('classic ZHIPU_API_KEY beats Anthropic-compat when both set', () => {
|
|
38
|
+
const save = {};
|
|
39
|
+
for (const k of ['ANTHROPIC_BASE_URL', 'ANTHROPIC_AUTH_TOKEN', 'ZHIPU_API_KEY']) {
|
|
40
|
+
save[k] = process.env[k];
|
|
41
|
+
delete process.env[k];
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const merged = {
|
|
45
|
+
ANTHROPIC_BASE_URL: 'https://open.bigmodel.cn/api/anthropic',
|
|
46
|
+
ANTHROPIC_AUTH_TOKEN: 'anthropic-route',
|
|
47
|
+
ZHIPU_API_KEY: 'dedicated-key'
|
|
48
|
+
};
|
|
49
|
+
const c = (0, provider_credentials_1.resolveProviderCredentials)('zhipu', merged);
|
|
50
|
+
node_assert_1.default.strictEqual(c.apiKey, 'dedicated-key');
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
for (const k of Object.keys(save)) {
|
|
54
|
+
const v = save[k];
|
|
55
|
+
if (v === undefined)
|
|
56
|
+
delete process.env[k];
|
|
57
|
+
else
|
|
58
|
+
process.env[k] = v;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=provider-credentials.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-credentials.test.js","sourceRoot":"","sources":["../../test/provider-credentials.test.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;AAEpC,yCAAiC;AACjC,8DAAiC;AACjC,4EAA+E;AAE/E,IAAA,gBAAI,EAAC,mEAAmE,EAAE,GAAG,EAAE;IAC7E,MAAM,IAAI,GAAuC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB;QAC/F,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAA2B;YACrC,kBAAkB,EAAE,wCAAwC;YAC5D,oBAAoB,EAAE,qBAAqB;SAC5C,CAAC;QACF,MAAM,CAAC,GAAG,IAAA,iDAA0B,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,qBAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,qBAAM,CAAC,WAAW,CAAC,CAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACrD,qBAAM,CAAC,WAAW,CAAC,CAAE,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;IAC7D,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,gBAAI,EAAC,4DAA4D,EAAE,GAAG,EAAE;IACtE,MAAM,IAAI,GAAuC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAA2B;YACrC,kBAAkB,EAAE,wCAAwC;YAC5D,oBAAoB,EAAE,iBAAiB;YACvC,aAAa,EAAE,eAAe;SAC/B,CAAC;QACF,MAAM,CAAC,GAAG,IAAA,iDAA0B,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,qBAAM,CAAC,WAAW,CAAC,CAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;gBACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// test/themes.test.ts
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
9
|
+
const themes_1 = require("../src/themes");
|
|
10
|
+
(0, node_test_1.test)('loadTheme should load dark theme', () => {
|
|
11
|
+
const theme = (0, themes_1.loadTheme)('dark', 'text');
|
|
12
|
+
node_assert_1.default.ok(theme);
|
|
13
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Deep Dark');
|
|
14
|
+
node_assert_1.default.ok(theme.colors.primary);
|
|
15
|
+
node_assert_1.default.ok(theme.components.model.fg);
|
|
16
|
+
});
|
|
17
|
+
(0, node_test_1.test)('loadTheme should load light theme', () => {
|
|
18
|
+
const theme = (0, themes_1.loadTheme)('light', 'text');
|
|
19
|
+
node_assert_1.default.ok(theme);
|
|
20
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Minimal Light');
|
|
21
|
+
});
|
|
22
|
+
(0, node_test_1.test)('loadTheme should load cyberpunk theme', () => {
|
|
23
|
+
const theme = (0, themes_1.loadTheme)('cyberpunk', 'text');
|
|
24
|
+
node_assert_1.default.ok(theme);
|
|
25
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Cyberpunk');
|
|
26
|
+
});
|
|
27
|
+
(0, node_test_1.test)('loadTheme should load forest theme', () => {
|
|
28
|
+
const theme = (0, themes_1.loadTheme)('forest', 'text');
|
|
29
|
+
node_assert_1.default.ok(theme);
|
|
30
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Forest');
|
|
31
|
+
});
|
|
32
|
+
(0, node_test_1.test)('loadTheme should load ocean theme', () => {
|
|
33
|
+
const theme = (0, themes_1.loadTheme)('ocean', 'text');
|
|
34
|
+
node_assert_1.default.ok(theme);
|
|
35
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Ocean');
|
|
36
|
+
});
|
|
37
|
+
(0, node_test_1.test)('loadTheme should fallback to dark for unknown theme', () => {
|
|
38
|
+
const theme = (0, themes_1.loadTheme)('nonexistent', 'text');
|
|
39
|
+
node_assert_1.default.ok(theme);
|
|
40
|
+
node_assert_1.default.strictEqual(theme.meta.name, 'Deep Dark');
|
|
41
|
+
});
|
|
42
|
+
(0, node_test_1.test)('loadTheme nerd overlays PUA icons and powerline sep', () => {
|
|
43
|
+
const t = (0, themes_1.loadTheme)('dark', 'nerd');
|
|
44
|
+
node_assert_1.default.notStrictEqual(t.components.model.icon, '[M]');
|
|
45
|
+
node_assert_1.default.strictEqual(t.separator.left, '\u{e0b0}');
|
|
46
|
+
});
|
|
47
|
+
(0, node_test_1.test)('getBuiltinThemeNames should return 5 themes', () => {
|
|
48
|
+
const names = (0, themes_1.getBuiltinThemeNames)();
|
|
49
|
+
node_assert_1.default.strictEqual(names.length, 5);
|
|
50
|
+
node_assert_1.default.ok(names.includes('dark'));
|
|
51
|
+
node_assert_1.default.ok(names.includes('light'));
|
|
52
|
+
node_assert_1.default.ok(names.includes('cyberpunk'));
|
|
53
|
+
node_assert_1.default.ok(names.includes('forest'));
|
|
54
|
+
node_assert_1.default.ok(names.includes('ocean'));
|
|
55
|
+
});
|
|
56
|
+
(0, node_test_1.test)('getAllThemes should return 5 themes', () => {
|
|
57
|
+
const themes = (0, themes_1.getAllThemes)();
|
|
58
|
+
node_assert_1.default.strictEqual(themes.length, 5);
|
|
59
|
+
});
|
|
60
|
+
(0, node_test_1.test)('all themes should have required color properties', () => {
|
|
61
|
+
const themes = (0, themes_1.getAllThemes)();
|
|
62
|
+
const requiredColors = ['primary', 'accent', 'success', 'warning', 'error', 'info', 'muted', 'dim'];
|
|
63
|
+
for (const theme of themes) {
|
|
64
|
+
for (const color of requiredColors) {
|
|
65
|
+
node_assert_1.default.ok(theme.colors[color], `Theme ${theme.meta.name} missing color: ${color}`);
|
|
66
|
+
node_assert_1.default.ok(theme.colors[color].startsWith('#'), `Theme ${theme.meta.name} color ${color} should be hex`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
(0, node_test_1.test)('all themes should have all component styles', () => {
|
|
71
|
+
const themes = (0, themes_1.getAllThemes)();
|
|
72
|
+
const requiredComponents = [
|
|
73
|
+
'model', 'context', 'contextBar', 'git', 'cost', 'duration',
|
|
74
|
+
'workspace', 'turns', 'cacheRatio', 'rateLimit', 'weeklyQuota',
|
|
75
|
+
'accountUsage', 'mcpStatus', 'thinking', 'outputStyle', 'separator'
|
|
76
|
+
];
|
|
77
|
+
for (const theme of themes) {
|
|
78
|
+
for (const comp of requiredComponents) {
|
|
79
|
+
node_assert_1.default.ok(theme.components[comp], `Theme ${theme.meta.name} missing component: ${comp}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=themes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.test.js","sourceRoot":"","sources":["../../test/themes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// test/third-party-api.test.ts
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const node_test_1 = require("node:test");
|
|
41
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const third_party_api_1 = require("../src/extractors/third-party-api");
|
|
46
|
+
const dark_1 = require("../src/themes/builtin/dark");
|
|
47
|
+
const claude_settings_env_1 = require("../src/utils/claude-settings-env");
|
|
48
|
+
const TMP_CWD = os.tmpdir();
|
|
49
|
+
(0, node_test_1.test)('extractThirdPartyApi should return empty array when no providers configured', async () => {
|
|
50
|
+
const results = await (0, third_party_api_1.extractThirdPartyApi)([], dark_1.darkTheme, 500, TMP_CWD);
|
|
51
|
+
node_assert_1.default.ok(Array.isArray(results));
|
|
52
|
+
node_assert_1.default.strictEqual(results.length, 0);
|
|
53
|
+
});
|
|
54
|
+
(0, node_test_1.test)('extractThirdPartyApi skips providers without keys in env/settings', async () => {
|
|
55
|
+
const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'pulse-no-keys-'));
|
|
56
|
+
const keys = [
|
|
57
|
+
'ZHIPU_API_KEY', 'ZHIPU_BASE_URL', 'ZHIPUAI_API_KEY', 'BIGMODEL_API_KEY', 'BIGMODEL_BASE_URL',
|
|
58
|
+
'DEEPSEEK_API_KEY', 'DEEPSEEK_BASE_URL',
|
|
59
|
+
'MINIMAX_API_KEY', 'MINIMAX_GROUP_ID', 'MINIMAX_BASE_URL',
|
|
60
|
+
'ANTHROPIC_BASE_URL', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_API_KEY',
|
|
61
|
+
'PULSE_PROVIDER',
|
|
62
|
+
'PULSE_ZHIPU_API_KEY', 'PULSE_ZHIPU_BASE_URL',
|
|
63
|
+
'PULSE_DEEPSEEK_API_KEY', 'PULSE_DEEPSEEK_BASE_URL'
|
|
64
|
+
];
|
|
65
|
+
const saved = {};
|
|
66
|
+
for (const k of keys) {
|
|
67
|
+
saved[k] = process.env[k];
|
|
68
|
+
delete process.env[k];
|
|
69
|
+
}
|
|
70
|
+
(0, claude_settings_env_1.__setTestEnvOverride)({});
|
|
71
|
+
try {
|
|
72
|
+
const results = await (0, third_party_api_1.extractThirdPartyApi)(['zhipu', 'deepseek'], dark_1.darkTheme, 500, cwd);
|
|
73
|
+
node_assert_1.default.ok(Array.isArray(results));
|
|
74
|
+
node_assert_1.default.strictEqual(results.length, 0);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
(0, claude_settings_env_1.__setTestEnvOverride)(null);
|
|
78
|
+
for (const k of keys) {
|
|
79
|
+
const v = saved[k];
|
|
80
|
+
if (v === undefined)
|
|
81
|
+
delete process.env[k];
|
|
82
|
+
else
|
|
83
|
+
process.env[k] = v;
|
|
84
|
+
}
|
|
85
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
(0, node_test_1.test)('extractThirdPartyApi should gracefully handle unknown provider ids', async () => {
|
|
89
|
+
const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'pulse-unknown-prov-'));
|
|
90
|
+
try {
|
|
91
|
+
const results = await (0, third_party_api_1.extractThirdPartyApi)(['nonexistent_provider'], dark_1.darkTheme, 500, cwd);
|
|
92
|
+
node_assert_1.default.ok(Array.isArray(results));
|
|
93
|
+
node_assert_1.default.strictEqual(results.length, 0);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
fs.rmSync(cwd, { recursive: true, force: true });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=third-party-api.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"third-party-api.test.js","sourceRoot":"","sources":["../../test/third-party-api.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/cli.ts","../src/index.ts","../src/config/defaults.ts","../src/config/loader.ts","../src/config/validator.ts","../src/extractors/account-usage.ts","../src/extractors/context.ts","../src/extractors/cost.ts","../src/extractors/git.ts","../src/extractors/index.ts","../src/extractors/mcp.ts","../src/extractors/model.ts","../src/extractors/output-style.ts","../src/extractors/rate-limits.ts","../src/extractors/session.ts","../src/extractors/thinking.ts","../src/extractors/third-party-api.ts","../src/extractors/transcript.ts","../src/extractors/workspace.ts","../src/formatters/duration.ts","../src/formatters/index.ts","../src/formatters/layout.ts","../src/formatters/progress-bar.ts","../src/formatters/segment.ts","../src/formatters/separator.ts","../src/parser/stdin-parser.ts","../src/themes/icon-provider.ts","../src/themes/index.ts","../src/themes/builtin/cyberpunk.ts","../src/themes/builtin/dark.ts","../src/themes/builtin/forest.ts","../src/themes/builtin/light.ts","../src/themes/builtin/ocean.ts","../src/themes/icon-sets/nerd.ts","../src/themes/icon-sets/text.ts","../src/types/pulse-config.ts","../src/types/pulse-input.ts","../src/types/theme.ts","../src/utils/ansi.ts","../src/utils/cache.ts","../src/utils/constants.ts","../src/utils/fs.ts","../src/utils/git.ts","../src/utils/logger.ts","../test/advanced-extractors.test.ts","../test/benchmark.ts","../test/extractors.test.ts","../test/formatters.test.ts","../test/git.test.ts","../test/parser.test.ts","../test/themes.test.ts","../test/third-party-api.test.ts"],"version":"5.9.3"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pulse-line",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Customizable status bar for Claude Code",
|
|
5
|
+
"main": "dist/src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pulse-line": "./bin/pulse-line.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"watch": "tsc -w",
|
|
12
|
+
"start": "node dist/src/index.js",
|
|
13
|
+
"dev": "ts-node src/index.ts",
|
|
14
|
+
"test": "node scripts/test.js",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/",
|
|
19
|
+
"bin/",
|
|
20
|
+
"commands/",
|
|
21
|
+
".claude-plugin/",
|
|
22
|
+
"skills/"
|
|
23
|
+
],
|
|
24
|
+
"keywords": [
|
|
25
|
+
"claude-code",
|
|
26
|
+
"statusline",
|
|
27
|
+
"status-bar",
|
|
28
|
+
"monitoring",
|
|
29
|
+
"pulse-line"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.0.0",
|
|
37
|
+
"ts-node": "^10.9.0",
|
|
38
|
+
"typescript": "^5.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"commander": "^14.0.3"
|
|
42
|
+
}
|
|
43
|
+
}
|