dsh-working-activity 0.2.6 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -28
- package/README.i18n.yaml +6 -6
- package/README.md +122 -122
- package/README.zh.md +113 -113
- package/cordis.patch.yml +19 -19
- package/lib/client.js +6 -6
- package/lib/client.js.map +1 -1
- package/lib/types/config.d.ts +68 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +141 -0
- package/lib/types/frames.d.ts +37 -0
- package/lib/types/frames.d.ts.map +1 -0
- package/lib/types/frames.js +126 -0
- package/lib/types/index.d.ts +16 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +35 -6
- package/lib/types/lang.d.ts +100 -0
- package/lib/types/lang.d.ts.map +1 -0
- package/lib/types/lang.js +132 -0
- package/lib/types/phrases.d.ts +125 -6
- package/lib/types/phrases.d.ts.map +1 -1
- package/lib/types/phrases.js +362 -27
- package/lib/types/status.d.ts +62 -0
- package/lib/types/status.d.ts.map +1 -1
- package/lib/types/status.js +202 -22
- package/package.json +12 -2
- package/src/client/WorkingLine.module.css +74 -74
- package/src/client/WorkingLine.tsx +42 -42
- package/src/client/activity.ts +50 -50
- package/src/client/css-modules.d.ts +6 -6
- package/src/client/index.ts +42 -42
- package/src/config.ts +174 -0
- package/src/events.ts +45 -45
- package/src/frames.ts +138 -0
- package/src/index.ts +278 -228
- package/src/invariant.ts +69 -69
- package/src/lang.ts +145 -0
- package/src/phrases.ts +584 -180
- package/src/registration.ts +99 -99
- package/src/status.ts +706 -501
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language resolution + copy dictionary for the working-activity plugin.
|
|
3
|
+
*
|
|
4
|
+
* The plugin follows the dsh-tui UI language without importing it: the same
|
|
5
|
+
* chain dsh-tui resolves (`DSH_TUI_LANG` env → `~/.dsh-tui/lang.json` → OS
|
|
6
|
+
* locale → zh) is read here directly, so a `/lang en|zh` switch (or the
|
|
7
|
+
* /settings language pick) hot-swaps this plugin's narration and status-line
|
|
8
|
+
* copy on the next render tick.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
* 1. `setLangOverride()` — a plugin-level `lang: zh|en` config key
|
|
12
|
+
* (cordis.yml) or an explicit test pin.
|
|
13
|
+
* 2. `DSH_TUI_LANG` env var — pinned at process start.
|
|
14
|
+
* 3. `~/.dsh-tui/lang.json` — the persisted dsh-tui choice, mtime-cached
|
|
15
|
+
* so the per-tick status render never re-reads an unchanged file.
|
|
16
|
+
* 4. OS locale guess (`LC_ALL` / `LC_MESSAGES` / `LANG`); POSIX/C means
|
|
17
|
+
* "no locale selected" and maps to English.
|
|
18
|
+
* 5. `zh` — the original hard-coded language.
|
|
19
|
+
*
|
|
20
|
+
* The dictionary is a flat key → per-language string map; `t(key, params)`
|
|
21
|
+
* substitutes `{{name}}` placeholders. Missing keys render the key itself so
|
|
22
|
+
* a typo is visible instead of silently blank.
|
|
23
|
+
* @module @deepseek-ai/dsh-working-activity/lang
|
|
24
|
+
*/
|
|
25
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
26
|
+
import { homedir } from 'node:os';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
/** The languages shipped with the plugin, in display order. */
|
|
29
|
+
export const LANGS = ['zh', 'en'];
|
|
30
|
+
/** The dsh-tui prefs file this plugin mirrors (shared language contract). */
|
|
31
|
+
const LANG_FILE = join(homedir(), '.dsh-tui', 'lang.json');
|
|
32
|
+
const dict = {
|
|
33
|
+
// ── ⏵ self-narration contract (system prompt, /lang aware) ──────────
|
|
34
|
+
'narrate-instruction': {
|
|
35
|
+
zh: '[状态栏] 你有一个状态栏展示给用户。【必须】在每个步骤/子任务开始时(不只是调用工具前),在回复正文的最前面单独写一行:⏵ 你在做的具体事情(不超过20字),然后换行继续正常回复。整轮回复只写一行 ⏵,不要重复。信息为主——让人一眼知道你在干什么,风格自然、可以带点俏皮。例:⏵ 修复登录页样式、⏵ 查一下报错原因、⏵ 给补丁跑个验证。切换任务时必须更新。',
|
|
36
|
+
en: '[Status line] You have a status line visible to the user. [Required] At the start of each step or subtask (not only before tool calls), write exactly one standalone line at the very beginning of your response: ⏵ a concrete description of what you are doing (20 words max), then continue with the normal response on the next line. Write only one ⏵ line per response and do not repeat it. Prioritize information so the user can understand the current work at a glance; keep the style natural and optionally playful. Examples: ⏵ Fixing the login page styles, ⏵ Investigating the error, ⏵ Running validation for the patch. Update it when the task changes.',
|
|
37
|
+
},
|
|
38
|
+
// ── status-line structural copy ─────────────────────────────────────
|
|
39
|
+
/** Plain (non-playful) phase labels. */
|
|
40
|
+
'waiting-label': { zh: '等待模型响应', en: 'Waiting for model' },
|
|
41
|
+
'thinking-label': { zh: '思考中', en: 'Thinking' },
|
|
42
|
+
/** Elapsed suffix: zh glues the char, en keeps a space. */
|
|
43
|
+
'line-elapsed': { zh: '总{{elapsed}}', en: 'total {{elapsed}}' },
|
|
44
|
+
/** Plain-mode completion prefix (playful pools pick their own). */
|
|
45
|
+
'done-prefix': { zh: '搞定 ✓', en: 'Finished' },
|
|
46
|
+
/** Turn-completion summary. */
|
|
47
|
+
'done-summary': {
|
|
48
|
+
zh: '{{tools}} · 想{{thinking}} 干{{tooling}}',
|
|
49
|
+
en: '{{tools}} · thought {{thinking}} worked {{tooling}}',
|
|
50
|
+
},
|
|
51
|
+
'tool-count-one': { zh: '{{count}} 工具', en: '{{count}} tool' },
|
|
52
|
+
'tool-count-many': { zh: '{{count}} 工具', en: '{{count}} tools' },
|
|
53
|
+
/** Subagent count in the done summary. */
|
|
54
|
+
'subagent-count': { zh: '子代理 {{count}} 个', en: '{{count}} subagents' },
|
|
55
|
+
/** Work-reminder copy after `workRemindAt` turn-hours. */
|
|
56
|
+
'work-remind': { zh: '已连续工作 {{hours}} 小时,歇会儿?', en: 'Worked {{hours}}h straight — take a break?' },
|
|
57
|
+
};
|
|
58
|
+
/** Explicit pin set by plugin config or tests; `auto` restores the chain. */
|
|
59
|
+
let override = 'auto';
|
|
60
|
+
/** Force (or release) the active language; `auto` re-enables the chain. */
|
|
61
|
+
export function setLangOverride(lang) {
|
|
62
|
+
override = lang;
|
|
63
|
+
}
|
|
64
|
+
/** The currently active language. */
|
|
65
|
+
export function langNow() {
|
|
66
|
+
if (override !== 'auto')
|
|
67
|
+
return override;
|
|
68
|
+
const env = process.env.DSH_TUI_LANG;
|
|
69
|
+
if (env === 'zh' || env === 'en')
|
|
70
|
+
return env;
|
|
71
|
+
return readLangFile() ?? detectLocaleLang();
|
|
72
|
+
}
|
|
73
|
+
/** Translate a dictionary key, substituting `{{name}}` placeholders. */
|
|
74
|
+
export function t(key, params = {}) {
|
|
75
|
+
const entry = dict[key];
|
|
76
|
+
const template = entry?.[langNow()] ?? key;
|
|
77
|
+
return template.replace(/\{\{(\w+)\}\}/g, (match, name) => name in params ? String(params[name]) : match);
|
|
78
|
+
}
|
|
79
|
+
/** Is a value a valid shipped language code? */
|
|
80
|
+
export function isLang(value) {
|
|
81
|
+
return value === 'zh' || value === 'en';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Read the persisted dsh-tui language choice, mtime-cached so the per-tick
|
|
85
|
+
* status render never re-reads an unchanged file. `undefined` when the file
|
|
86
|
+
* is absent or holds no valid `{ lang }` value.
|
|
87
|
+
*/
|
|
88
|
+
export function readLangFile() {
|
|
89
|
+
let mtimeMs;
|
|
90
|
+
try {
|
|
91
|
+
mtimeMs = statSync(LANG_FILE).mtimeMs;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (cachedMtime === mtimeMs)
|
|
97
|
+
return cachedLang;
|
|
98
|
+
try {
|
|
99
|
+
const parsed = JSON.parse(readFileSync(LANG_FILE, 'utf8'));
|
|
100
|
+
const lang = parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
101
|
+
? parsed.lang
|
|
102
|
+
: undefined;
|
|
103
|
+
cachedLang = isLang(lang) ? lang : undefined;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
cachedLang = undefined;
|
|
107
|
+
}
|
|
108
|
+
cachedMtime = mtimeMs;
|
|
109
|
+
return cachedLang;
|
|
110
|
+
}
|
|
111
|
+
let cachedMtime = -1;
|
|
112
|
+
let cachedLang;
|
|
113
|
+
/**
|
|
114
|
+
* Guess the language from the OS locale (`LC_ALL`, `LC_MESSAGES`, `LANG`),
|
|
115
|
+
* defaulting to `zh`. POSIX/C means "no locale selected" and conventionally
|
|
116
|
+
* maps to English (what CI runners report). An absent locale variable
|
|
117
|
+
* (typical on Windows) defaults to `zh`.
|
|
118
|
+
*/
|
|
119
|
+
export function detectLocaleLang() {
|
|
120
|
+
const raw = process.env.LC_ALL ||
|
|
121
|
+
process.env.LC_MESSAGES ||
|
|
122
|
+
process.env.LANG ||
|
|
123
|
+
'';
|
|
124
|
+
const locale = raw.split('.')[0]?.toLowerCase() ?? '';
|
|
125
|
+
if (locale.startsWith('zh'))
|
|
126
|
+
return 'zh';
|
|
127
|
+
if (locale.startsWith('en'))
|
|
128
|
+
return 'en';
|
|
129
|
+
if (locale === 'c' || locale === 'posix')
|
|
130
|
+
return 'en';
|
|
131
|
+
return 'zh';
|
|
132
|
+
}
|
package/lib/types/phrases.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copy pools for the working-activity status line: short, colloquial, playful
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* fragments with a "live person" vibe, in both Chinese and English. The zh
|
|
4
|
+
* pools are the original copy; the en pools mirror the same tone — deadpan,
|
|
5
|
+
* meme-y, occasionally unhinged. Everything here is pure data + pure pickers;
|
|
6
|
+
* the active language is resolved per pick via `langNow()`.
|
|
5
7
|
* @module @deepseek-ai/dsh-working-activity/phrases
|
|
6
8
|
*/
|
|
7
9
|
/** A pool of copy fragments. */
|
|
@@ -31,21 +33,138 @@ export declare const FAIL_PHRASES: readonly string[];
|
|
|
31
33
|
export declare const DONE_PHRASES: readonly string[];
|
|
32
34
|
/** Night-owl phrases mixed in between 00:00 and 06:00 local time. */
|
|
33
35
|
export declare const NIGHT_PHRASES: readonly string[];
|
|
36
|
+
/** English thinking phrases — casual, meme-y, alive. */
|
|
37
|
+
export declare const EN_THINKING_PHRASES: readonly string[];
|
|
38
|
+
/** English tiered phrases when thinking runs long. */
|
|
39
|
+
export declare const EN_THINKING_TIERS: readonly {
|
|
40
|
+
readonly atMs: number;
|
|
41
|
+
readonly pool: readonly string[];
|
|
42
|
+
}[];
|
|
43
|
+
/** English phrases while waiting for the first token. */
|
|
44
|
+
export declare const EN_WAITING_PHRASES: readonly string[];
|
|
45
|
+
/** English tool-name → action verbs. */
|
|
46
|
+
export declare const EN_ACTION_MAP: readonly {
|
|
47
|
+
readonly test: RegExp;
|
|
48
|
+
readonly actions: readonly string[];
|
|
49
|
+
}[];
|
|
50
|
+
/** English fallback verbs for unknown tools. */
|
|
51
|
+
export declare const EN_FALLBACK_ACTIONS: readonly string[];
|
|
52
|
+
/** English tool failure phrases. */
|
|
53
|
+
export declare const EN_FAIL_PHRASES: readonly string[];
|
|
54
|
+
/** English turn-completion phrases. */
|
|
55
|
+
export declare const EN_DONE_PHRASES: readonly string[];
|
|
56
|
+
/** English night-owl phrases. */
|
|
57
|
+
export declare const EN_NIGHT_PHRASES: readonly string[];
|
|
58
|
+
/** Rare easter-egg phrases (1/150 draw, pi `RARE_PHRASES`). */
|
|
59
|
+
export declare const RARE_PHRASES: readonly string[];
|
|
60
|
+
/** English rare easter-egg phrases. */
|
|
61
|
+
export declare const EN_RARE_PHRASES: readonly string[];
|
|
62
|
+
/** Chance of drawing a rare phrase per thinking rotation. */
|
|
63
|
+
export declare const RARE_CHANCE: number;
|
|
64
|
+
/** Weekend-greeting phrases (once per turn on Sat/Sun). */
|
|
65
|
+
export declare const WEEKEND_PHRASES: readonly string[];
|
|
66
|
+
/** English weekend greetings. */
|
|
67
|
+
export declare const EN_WEEKEND_PHRASES: readonly string[];
|
|
68
|
+
/** Whether `date` falls on a weekend. */
|
|
69
|
+
export declare function isWeekend(date: Date): boolean;
|
|
70
|
+
/** Holiday copy keyed by `MM-DD` (zh). */
|
|
71
|
+
export declare const HOLIDAY_PHRASES: Readonly<Record<string, readonly string[]>>;
|
|
72
|
+
/** English holiday copy keyed by `MM-DD`. */
|
|
73
|
+
export declare const EN_HOLIDAY_PHRASES: Readonly<Record<string, readonly string[]>>;
|
|
74
|
+
/** Lunar New Year copy (approximated by Gregorian dates, extended yearly). */
|
|
75
|
+
export declare const LUNAR_NEW_YEAR_PHRASES: readonly string[];
|
|
76
|
+
/** English Lunar New Year copy. */
|
|
77
|
+
export declare const EN_LUNAR_NEW_YEAR_PHRASES: readonly string[];
|
|
78
|
+
/** Gregorian dates marked as Lunar New Year (2025–2027, extend yearly). */
|
|
79
|
+
export declare const LUNAR_NEW_YEAR_DAYS: Readonly<Record<string, true>>;
|
|
80
|
+
/** Phrases shown after the user interrupts and the model resumes. */
|
|
81
|
+
export declare const CONTINUE_PHRASES: readonly string[];
|
|
82
|
+
/** English post-interruption phrases. */
|
|
83
|
+
export declare const EN_CONTINUE_PHRASES: readonly string[];
|
|
84
|
+
/** Phrases after a successful context compaction. */
|
|
85
|
+
export declare const COMPACT_PHRASES: readonly string[];
|
|
86
|
+
/** English post-compaction phrases. */
|
|
87
|
+
export declare const EN_COMPACT_PHRASES: readonly string[];
|
|
88
|
+
/** Urgent phrases when compaction is forced by overflow. */
|
|
89
|
+
export declare const OVERFLOW_PHRASES: readonly string[];
|
|
90
|
+
/** English overflow phrases. */
|
|
91
|
+
export declare const EN_OVERFLOW_PHRASES: readonly string[];
|
|
92
|
+
/** Phrases when retrying after a forced compaction. */
|
|
93
|
+
export declare const COMPACT_RETRY_PHRASES: readonly string[];
|
|
94
|
+
/** English compact-retry phrases. */
|
|
95
|
+
export declare const EN_COMPACT_RETRY_PHRASES: readonly string[];
|
|
96
|
+
/** Model-switch quips keyed by a lowercase substring of the model id. */
|
|
97
|
+
export declare const MODEL_QUIPS: Readonly<Record<string, readonly string[]>>;
|
|
98
|
+
/** English model-switch quips. */
|
|
99
|
+
export declare const EN_MODEL_QUIPS: Readonly<Record<string, readonly string[]>>;
|
|
100
|
+
/** Detect a holiday for `date`, Lunar New Year first. */
|
|
101
|
+
export declare function holidayPhrase(date: Date): string | null;
|
|
102
|
+
/** Pick a rare easter-egg phrase in the active language. */
|
|
103
|
+
export declare function rarePhrase(previous?: string): string;
|
|
104
|
+
/** Pick a weekend greeting in the active language. */
|
|
105
|
+
export declare function weekendPhrase(previous?: string): string;
|
|
106
|
+
/** Pick a post-interruption phrase in the active language. */
|
|
107
|
+
export declare function continuePhrase(): string;
|
|
108
|
+
/** Pick a post-compaction phrase in the active language. */
|
|
109
|
+
export declare function compactPhrase(): string;
|
|
110
|
+
/** Pick an overflow phrase in the active language. */
|
|
111
|
+
export declare function overflowPhrase(): string;
|
|
112
|
+
/** Pick a compact-retry phrase in the active language. */
|
|
113
|
+
export declare function compactRetryPhrase(): string;
|
|
114
|
+
/**
|
|
115
|
+
* Quip for a model id (substring match), or null when no pool matches.
|
|
116
|
+
* @param modelId - Model id, e.g. `deepseek-chat` or `gpt-4o`.
|
|
117
|
+
*/
|
|
118
|
+
export declare function modelQuip(modelId: string): string | null;
|
|
119
|
+
/** Feature toggles for the lively phrase selector. */
|
|
120
|
+
export interface LivelyFeatures {
|
|
121
|
+
/** Allow rare 1/150 easter eggs. */
|
|
122
|
+
readonly rareEggs?: boolean;
|
|
123
|
+
/** Allow weekend greetings on Sat/Sun. */
|
|
124
|
+
readonly weekend?: boolean;
|
|
125
|
+
/** Allow date-matched holiday / Lunar New Year copy. */
|
|
126
|
+
readonly holidays?: boolean;
|
|
127
|
+
/** Mix night-owl copy between 00:00 and 06:00. */
|
|
128
|
+
readonly nightPhrases?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Pick a thinking phrase with the pi extension's egg order: holiday first,
|
|
132
|
+
* then rare (1/150), then weekend, then the elapsed-time tiers with night
|
|
133
|
+
* mixing. Every egg is gated by `features` (defaults all on).
|
|
134
|
+
* @param elapsedMs - Milliseconds spent thinking in the current phase.
|
|
135
|
+
* @param previous - Previously shown phrase, to avoid repeats.
|
|
136
|
+
* @param night - Whether the night window is active (mixes night copy).
|
|
137
|
+
* @param now - Current wall-clock time (injectable for tests).
|
|
138
|
+
* @param features - Feature toggles; absent flags default to on.
|
|
139
|
+
* @param extra - User custom phrases appended to the base thinking pool.
|
|
140
|
+
*/
|
|
141
|
+
export declare function livelyThinkingPhrase(elapsedMs: number, previous?: string, night?: boolean, now?: Date, features?: LivelyFeatures, extra?: readonly string[]): string;
|
|
34
142
|
/** Common git tool names / bash commands containing `git `. */
|
|
35
143
|
export declare const GIT_TOOL_RE: RegExp;
|
|
36
144
|
/** Detect the 00:00–06:00 night window (local time). */
|
|
37
145
|
export declare function isNight(hour: number): boolean;
|
|
146
|
+
/** The zh or en base waiting pool by the active language. */
|
|
147
|
+
export declare function waitingPool(): readonly string[];
|
|
38
148
|
/**
|
|
39
|
-
* Pick a thinking phrase appropriate for the elapsed thinking time
|
|
149
|
+
* Pick a thinking phrase appropriate for the elapsed thinking time, in the
|
|
150
|
+
* active language.
|
|
40
151
|
* @param elapsedMs - Milliseconds spent thinking in the current phase.
|
|
41
152
|
* @param previous - Previously shown phrase, to avoid repeats.
|
|
42
153
|
* @param night - Mix night-owl copy into the pool.
|
|
154
|
+
* @param extra - User custom phrases appended to the base (non-tier) pool.
|
|
43
155
|
*/
|
|
44
|
-
export declare function thinkingPhrase(elapsedMs: number, previous?: string, night?: boolean): string;
|
|
156
|
+
export declare function thinkingPhrase(elapsedMs: number, previous?: string, night?: boolean, extra?: readonly string[]): string;
|
|
157
|
+
/** Pick a waiting phrase in the active language. */
|
|
158
|
+
export declare function waitingPhrase(previous?: string): string;
|
|
159
|
+
/** Pick a tool-failure phrase in the active language. */
|
|
160
|
+
export declare function failPhrase(): string;
|
|
161
|
+
/** Pick a turn-completion phrase in the active language. */
|
|
162
|
+
export declare function donePhrase(): string;
|
|
45
163
|
/**
|
|
46
|
-
* Map a tool name to a playful action verb.
|
|
164
|
+
* Map a tool name to a playful action verb, in the active language.
|
|
47
165
|
* @param toolName - Registry tool name (unqualified).
|
|
48
|
-
* @param custom - Exact-name custom action pools, matched case-insensitively
|
|
166
|
+
* @param custom - Exact-name custom action pools, matched case-insensitively
|
|
167
|
+
* (user-owned copy, used verbatim in any language).
|
|
49
168
|
*/
|
|
50
169
|
export declare function actionFor(toolName: string, custom?: Readonly<Record<string, readonly string[]>>): string;
|
|
51
170
|
/** Whether a tool is a git operation (name match, or a shell command containing `git `). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phrases.d.ts","sourceRoot":"","sources":["../../src/phrases.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"phrases.d.ts","sourceRoot":"","sources":["../../src/phrases.ts"],"names":[],"mappings":"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"}
|