charness 3.5.0 → 3.6.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 (146) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/DEVELOPMENT.md +12 -1
  3. package/README.md +16 -1
  4. package/SETUP.md +199 -1
  5. package/dist/adapters/adapterEventRouting.d.ts +2 -2
  6. package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
  7. package/dist/adapters/adapterEventRouting.js +4 -3
  8. package/dist/adapters/adapterEventRouting.js.map +1 -1
  9. package/dist/adapters/claudeJsonStreamAdapter.d.ts +74 -5
  10. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  11. package/dist/adapters/claudeJsonStreamAdapter.js +188 -9
  12. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  13. package/dist/adapters/createAdapter.d.ts +12 -0
  14. package/dist/adapters/createAdapter.d.ts.map +1 -1
  15. package/dist/adapters/createAdapter.js +38 -2
  16. package/dist/adapters/createAdapter.js.map +1 -1
  17. package/dist/adapters/openCodeAdapter.d.ts +5 -0
  18. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  19. package/dist/adapters/openCodeAdapter.js +7 -0
  20. package/dist/adapters/openCodeAdapter.js.map +1 -1
  21. package/dist/bot.d.ts.map +1 -1
  22. package/dist/bot.js +299 -82
  23. package/dist/bot.js.map +1 -1
  24. package/dist/connectors/jira/connector.d.ts +2 -0
  25. package/dist/connectors/jira/connector.d.ts.map +1 -1
  26. package/dist/connectors/jira/connector.js +5 -4
  27. package/dist/connectors/jira/connector.js.map +1 -1
  28. package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -1
  29. package/dist/connectors/telegram/commands/compaction.js +39 -8
  30. package/dist/connectors/telegram/commands/compaction.js.map +1 -1
  31. package/dist/connectors/telegram/forumTopicCreated.d.ts +20 -0
  32. package/dist/connectors/telegram/forumTopicCreated.d.ts.map +1 -0
  33. package/dist/connectors/telegram/forumTopicCreated.js +16 -0
  34. package/dist/connectors/telegram/forumTopicCreated.js.map +1 -0
  35. package/dist/i18n/de.d.ts.map +1 -1
  36. package/dist/i18n/de.js +14 -0
  37. package/dist/i18n/de.js.map +1 -1
  38. package/dist/i18n/en.d.ts.map +1 -1
  39. package/dist/i18n/en.js +14 -0
  40. package/dist/i18n/en.js.map +1 -1
  41. package/dist/i18n/es.d.ts.map +1 -1
  42. package/dist/i18n/es.js +14 -0
  43. package/dist/i18n/es.js.map +1 -1
  44. package/dist/i18n/fr.d.ts.map +1 -1
  45. package/dist/i18n/fr.js +14 -0
  46. package/dist/i18n/fr.js.map +1 -1
  47. package/dist/i18n/hi.d.ts.map +1 -1
  48. package/dist/i18n/hi.js +14 -0
  49. package/dist/i18n/hi.js.map +1 -1
  50. package/dist/i18n/ja.d.ts.map +1 -1
  51. package/dist/i18n/ja.js +14 -0
  52. package/dist/i18n/ja.js.map +1 -1
  53. package/dist/i18n/ka.d.ts.map +1 -1
  54. package/dist/i18n/ka.js +14 -0
  55. package/dist/i18n/ka.js.map +1 -1
  56. package/dist/i18n/pt.d.ts.map +1 -1
  57. package/dist/i18n/pt.js +14 -0
  58. package/dist/i18n/pt.js.map +1 -1
  59. package/dist/i18n/ru.d.ts.map +1 -1
  60. package/dist/i18n/ru.js +14 -0
  61. package/dist/i18n/ru.js.map +1 -1
  62. package/dist/i18n/uk.d.ts.map +1 -1
  63. package/dist/i18n/uk.js +14 -0
  64. package/dist/i18n/uk.js.map +1 -1
  65. package/dist/i18n/uz.d.ts.map +1 -1
  66. package/dist/i18n/uz.js +14 -0
  67. package/dist/i18n/uz.js.map +1 -1
  68. package/dist/i18n/zh.d.ts.map +1 -1
  69. package/dist/i18n/zh.js +14 -0
  70. package/dist/i18n/zh.js.map +1 -1
  71. package/dist/i18n.d.ts +2 -0
  72. package/dist/i18n.d.ts.map +1 -1
  73. package/dist/i18n.js.map +1 -1
  74. package/dist/rateLimiter.d.ts +6 -0
  75. package/dist/rateLimiter.d.ts.map +1 -1
  76. package/dist/rateLimiter.js +9 -0
  77. package/dist/rateLimiter.js.map +1 -1
  78. package/dist/requests/wakeUpEngine.d.ts +4 -0
  79. package/dist/requests/wakeUpEngine.d.ts.map +1 -1
  80. package/dist/requests/wakeUpEngine.js +3 -3
  81. package/dist/requests/wakeUpEngine.js.map +1 -1
  82. package/dist/requests/wakeUpRules.d.ts +2 -1
  83. package/dist/requests/wakeUpRules.d.ts.map +1 -1
  84. package/dist/requests/wakeUpRules.js +3 -2
  85. package/dist/requests/wakeUpRules.js.map +1 -1
  86. package/dist/scheduler/mcpSurface.js +1 -1
  87. package/dist/selfUpdate/updateMessages.d.ts +1 -1
  88. package/dist/selfUpdate/updateMessages.d.ts.map +1 -1
  89. package/dist/selfUpdate/updateMessages.js.map +1 -1
  90. package/dist/state.d.ts +36 -5
  91. package/dist/state.d.ts.map +1 -1
  92. package/dist/state.js +40 -7
  93. package/dist/state.js.map +1 -1
  94. package/dist/testTimings.d.ts +45 -0
  95. package/dist/testTimings.d.ts.map +1 -0
  96. package/dist/testTimings.js +89 -0
  97. package/dist/testTimings.js.map +1 -0
  98. package/dist/types.d.ts +43 -0
  99. package/dist/types.d.ts.map +1 -1
  100. package/dist/utils/adapterSwitchSessionIds.d.ts +5 -1
  101. package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -1
  102. package/dist/utils/adapterSwitchSessionIds.js +1 -1
  103. package/dist/utils/adapterSwitchSessionIds.js.map +1 -1
  104. package/dist/utils/adoptedToolList.d.ts +16 -21
  105. package/dist/utils/adoptedToolList.d.ts.map +1 -1
  106. package/dist/utils/adoptedToolList.js +18 -17
  107. package/dist/utils/adoptedToolList.js.map +1 -1
  108. package/dist/utils/claudeScheduledJobs.d.ts +49 -0
  109. package/dist/utils/claudeScheduledJobs.d.ts.map +1 -0
  110. package/dist/utils/claudeScheduledJobs.js +62 -0
  111. package/dist/utils/claudeScheduledJobs.js.map +1 -0
  112. package/dist/utils/claudeStreamJson.d.ts +31 -1
  113. package/dist/utils/claudeStreamJson.d.ts.map +1 -1
  114. package/dist/utils/claudeStreamJson.js +25 -8
  115. package/dist/utils/claudeStreamJson.js.map +1 -1
  116. package/dist/utils/compactOnIdle.d.ts +12 -0
  117. package/dist/utils/compactOnIdle.d.ts.map +1 -1
  118. package/dist/utils/compactOnIdle.js +15 -1
  119. package/dist/utils/compactOnIdle.js.map +1 -1
  120. package/dist/utils/doctorLine.d.ts +13 -0
  121. package/dist/utils/doctorLine.d.ts.map +1 -0
  122. package/dist/utils/doctorLine.js +18 -0
  123. package/dist/utils/doctorLine.js.map +1 -0
  124. package/dist/utils/effortPickerPlan.d.ts +1 -2
  125. package/dist/utils/effortPickerPlan.d.ts.map +1 -1
  126. package/dist/utils/effortPickerPlan.js.map +1 -1
  127. package/dist/utils/jsonStreamHost.d.ts +19 -7
  128. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  129. package/dist/utils/jsonStreamHost.js +25 -11
  130. package/dist/utils/jsonStreamHost.js.map +1 -1
  131. package/dist/utils/jsonStreamPendingWork.d.ts +44 -0
  132. package/dist/utils/jsonStreamPendingWork.d.ts.map +1 -0
  133. package/dist/utils/jsonStreamPendingWork.js +48 -0
  134. package/dist/utils/jsonStreamPendingWork.js.map +1 -0
  135. package/dist/utils/lostWork.d.ts +117 -0
  136. package/dist/utils/lostWork.d.ts.map +1 -0
  137. package/dist/utils/lostWork.js +187 -0
  138. package/dist/utils/lostWork.js.map +1 -0
  139. package/dist/utils/nativeWindows.d.ts +29 -0
  140. package/dist/utils/nativeWindows.d.ts.map +1 -0
  141. package/dist/utils/nativeWindows.js +50 -0
  142. package/dist/utils/nativeWindows.js.map +1 -0
  143. package/dist/utils/updateScreenPlan.d.ts +1 -1
  144. package/dist/utils/updateScreenPlan.d.ts.map +1 -1
  145. package/dist/utils/updateScreenPlan.js.map +1 -1
  146. package/package.json +2 -2
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * @description The agent's own pending work that a json-stream process took with it when it ended anyway: a crash,
4
+ * a process found gone after a restart, a `/model` / `/effort` / account re-spawn, or the pending-work hold running
5
+ * out (`utils/jsonStreamPendingWork.ts`). Nothing else would ever tell the agent — a background task's result, its
6
+ * `CronCreate` jobs and a finished task it had not read yet are gone with the process, so the agent would keep waiting
7
+ * for a notification that never comes. The bot tells it once, in a short prompt, and the topic gets one plain line.
8
+ *
9
+ * A turn the bot itself cut off (a re-spawn, a backend switch) is lost work too: nothing else re-prompts it. A turn a
10
+ * crash cut off is the request core's: it re-posts and wakes an open request (R21). An explicit release (`/quit`,
11
+ * `/new`) drops the record — the person ended that conversation.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.lostWorkResumeCooldownMs = void 0;
15
+ exports.checkHasLostWork = checkHasLostWork;
16
+ exports.checkHasLostBackgroundWork = checkHasLostBackgroundWork;
17
+ exports.getLostWorkFromTailRecord = getLostWorkFromTailRecord;
18
+ exports.getTailRecordWithoutPendingWork = getTailRecordWithoutPendingWork;
19
+ exports.getLostWorkPlan = getLostWorkPlan;
20
+ exports.getHeldLostWorkPlan = getHeldLostWorkPlan;
21
+ exports.buildLostWorkNote = buildLostWorkNote;
22
+ exports.mergeLostWorkRecords = mergeLostWorkRecords;
23
+ exports.formatLostWorkTopicLine = formatLostWorkTopicLine;
24
+ /**
25
+ * Within this long after an automatic resume, a second loss does not resume the conversation again: a process that
26
+ * keeps dying with work pending must not be restarted in a loop. The note then waits for the next message.
27
+ */
28
+ exports.lostWorkResumeCooldownMs = 10 * 60 * 1000;
29
+ /** @description Whether any work was lost. */
30
+ function checkHasLostWork(lostWork) {
31
+ return lostWork.backgroundTasks.length > 0 || lostWork.scheduledJobCount > 0 || lostWork.hasUnreadTaskResult || lostWork.wasTurnInFlight;
32
+ }
33
+ /**
34
+ * @description Whether the loss holds background work the operator is told was stopped by a switch: background tasks,
35
+ * scheduled jobs or a finished task's unread result — a cut-off turn alone is no background work.
36
+ */
37
+ function checkHasLostBackgroundWork(lostWork) {
38
+ return lostWork !== null && (lostWork.backgroundTasks.length > 0 || lostWork.scheduledJobCount > 0 || lostWork.hasUnreadTaskResult);
39
+ }
40
+ const noLostWork = { backgroundTasks: [], scheduledJobCount: 0, hasUnreadTaskResult: false, wasTurnInFlight: false };
41
+ /**
42
+ * @description What a process that is GONE held, by its persisted tail record — read for a process found dead at
43
+ * boot. A process that ended while the bot watched left no pending work in its record ({@link getTailRecordWithoutPendingWork}).
44
+ * A record of another conversation holds nothing of this one, and neither does a record written before the pending work
45
+ * was tracked (its bare `backgroundTaskIds` were never cleared after a crash: they may be weeks old) — only a record that
46
+ * carries the hold's start or an announced turn speaks for a process that was alive with work pending.
47
+ */
48
+ function getLostWorkFromTailRecord(tail, claudeSessionId) {
49
+ if (tail === null || tail.sessionId !== claudeSessionId)
50
+ return noLostWork;
51
+ if (tail.lastTurnEndedAtMs === undefined && tail.notificationTurnPendingSinceMs === undefined)
52
+ return noLostWork;
53
+ return {
54
+ backgroundTasks: tail.backgroundTasks ?? [],
55
+ scheduledJobCount: tail.scheduledJobs?.length ?? 0,
56
+ // The bot was away: an announced turn that the record still holds never reached it.
57
+ hasUnreadTaskResult: tail.notificationTurnPendingSinceMs !== undefined,
58
+ // A turn in flight at a crash is the request core's (see the module).
59
+ wasTurnInFlight: false,
60
+ };
61
+ }
62
+ /** @description The tail record of a process whose pending work was handled (told, or released): the rest as it was. */
63
+ function getTailRecordWithoutPendingWork(tail) {
64
+ const { backgroundTasks: _backgroundTasks, scheduledJobs: _scheduledJobs, notificationTurnPendingSinceMs: _notificationTurnPendingSinceMs, lastTurnEndedAtMs: _lastTurnEndedAtMs, ...rest } = tail;
65
+ return { ...rest, backgroundTaskIds: [] };
66
+ }
67
+ /**
68
+ * @description What the bot does about a loss. A spent hold means nobody heard from the work for hours: the agent is
69
+ * told on the next message, not woken (it would only re-arm the same forgotten task). An armed usage-limit wait has
70
+ * its own resume, whose nudge carries the note. A loss right after an automatic resume waits for a person. A
71
+ * conversation that answers only through a request (a tracker issue, `isRequestRequired`) is not resumed by a bare
72
+ * note it could not answer: the note rides its next request's prompt.
73
+ */
74
+ function getLostWorkPlan(input) {
75
+ const isInCooldown = input.msSinceLastAutoResume !== null && input.msSinceLastAutoResume < exports.lostWorkResumeCooldownMs;
76
+ const isAutoResume = input.reason !== 'holdExpired' && input.reason !== 'switched' && !input.isLimitWaitArmed && !isInCooldown && !input.isRequestRequired;
77
+ return isAutoResume ? { isAutoResume: true, isResumedByNextMessage: false } : getHeldLostWorkPlan(input);
78
+ }
79
+ /**
80
+ * @description The plan of a loss whose note waits for the next prompt — no automatic resume, or one that failed: the
81
+ * person's next message resumes a STOPPED process; a live one (a re-spawn, a switch) or an armed limit wait's own
82
+ * resume hears it with the next prompt it gets.
83
+ */
84
+ function getHeldLostWorkPlan(input) {
85
+ const isProcessAlive = input.reason === 'restarted' || input.reason === 'switched';
86
+ return { isAutoResume: false, isResumedByNextMessage: !isProcessAlive && !input.isLimitWaitArmed };
87
+ }
88
+ /** The agent-facing wording of each reason (English on purpose, like every agent-facing template). */
89
+ const lostWorkReasonTexts = {
90
+ exited: 'it exited unexpectedly',
91
+ foundDead: 'it was gone when the bot came back after a restart',
92
+ restarted: 'the bot restarted it for a model, effort or account change',
93
+ holdExpired: 'the bot stopped it after a long time without a turn',
94
+ switched: 'the conversation moved to another backend',
95
+ };
96
+ /** @description What was lost, as the agent reads it: the tasks by id and description, the jobs, the unread result. */
97
+ function describeLostWorkForAgent(lostWork) {
98
+ const parts = [];
99
+ if (lostWork.backgroundTasks.length > 0) {
100
+ const tasks = lostWork.backgroundTasks.map((task) => (task.description ? `${task.taskId} «${task.description}»` : task.taskId));
101
+ parts.push(`background tasks ${tasks.join(', ')}`);
102
+ }
103
+ if (lostWork.scheduledJobCount > 0)
104
+ parts.push(`${lostWork.scheduledJobCount} session-only CronCreate job(s)`);
105
+ if (lostWork.hasUnreadTaskResult)
106
+ parts.push('the result of a background task that had just finished, which you had not read');
107
+ if (lostWork.wasTurnInFlight)
108
+ parts.push('the turn you were in the middle of, which was cut off');
109
+ return parts.join('; ');
110
+ }
111
+ /**
112
+ * @description The note the agent gets — as the automatic resume's prompt, or ahead of the next prompt. English with
113
+ * the baked reply-language directive (`replyLanguage` is the topic's language endonym).
114
+ */
115
+ function buildLostWorkNote(record, replyLanguage) {
116
+ // Only what the other agent could have started again: its tasks and jobs, not a result or a cut-off turn.
117
+ const restartableTold = record.otherAgentTold
118
+ ? { ...noLostWork, backgroundTasks: record.otherAgentTold.backgroundTasks, scheduledJobCount: record.otherAgentTold.scheduledJobCount }
119
+ : null;
120
+ return [
121
+ `[charness] This conversation's agent process ended while its own work was still pending (${lostWorkReasonTexts[record.reason]}): ${describeLostWorkForAgent(record)}.`,
122
+ 'That work died with the process: no notification will ever arrive for it.',
123
+ ...(restartableTold && checkHasLostWork(restartableTold)
124
+ ? [`The agent this conversation moved to meanwhile was told first about ${describeLostWorkForAgent(restartableTold)}, and may have started some of it again: look before you start that twice.`]
125
+ : []),
126
+ `Check its state yourself (output files, processes, the repository), start again what is still needed — prefer the bot's schedule_* tools for anything that must survive a restart — and tell the user in one or two lines what happened, IN ${replyLanguage}.`,
127
+ ].join('\n');
128
+ }
129
+ /**
130
+ * @description One loss from two: a loss the agent was not told about yet stays, and a newer one adds to it — the
131
+ * tasks by id, the larger job count, the reason and time of the newer loss. The parts another agent was told first
132
+ * merge only with each other, never with the rest.
133
+ */
134
+ function mergeLostWorkRecords(untold, newer) {
135
+ if (!untold)
136
+ return newer;
137
+ const otherAgentTold = untold.otherAgentTold && newer.otherAgentTold
138
+ ? mergeLostWork(untold.otherAgentTold, newer.otherAgentTold)
139
+ : untold.otherAgentTold ?? newer.otherAgentTold;
140
+ return {
141
+ ...mergeLostWork(untold, newer),
142
+ reason: newer.reason,
143
+ lostAt: newer.lostAt,
144
+ ...(otherAgentTold ? { otherAgentTold } : {}),
145
+ };
146
+ }
147
+ /** Two losses as one: the tasks by id, the larger job count, either flag. */
148
+ function mergeLostWork(older, newer) {
149
+ const tasksById = new Map(older.backgroundTasks.map((task) => [task.taskId, task]));
150
+ for (const task of newer.backgroundTasks)
151
+ tasksById.set(task.taskId, task);
152
+ return {
153
+ backgroundTasks: [...tasksById.values()],
154
+ scheduledJobCount: Math.max(older.scheduledJobCount, newer.scheduledJobCount),
155
+ hasUnreadTaskResult: older.hasUnreadTaskResult || newer.hasUnreadTaskResult,
156
+ wasTurnInFlight: older.wasTurnInFlight || newer.wasTurnInFlight,
157
+ };
158
+ }
159
+ /** How a background task is named in the topic line: its description, else its id. */
160
+ function getTopicTaskName(task) {
161
+ return task.description ? `«${task.description}»` : task.taskId;
162
+ }
163
+ /** The topic line's ending: resumed now, resumed by the person's next message, or told with the next prompt it gets. */
164
+ function getTopicLineKey(plan) {
165
+ if (plan.isAutoResume)
166
+ return 'lostWork.line.resumed';
167
+ return plan.isResumedByNextMessage ? 'lostWork.line.held' : 'lostWork.line.toldNext';
168
+ }
169
+ /**
170
+ * @description The ONE plain line a topic gets about a loss (never pinned: no action is needed from the person) —
171
+ * what ended, what was pending, and when the agent hears about it. `holdHours` names the pending-work hold for a
172
+ * `holdExpired` loss.
173
+ */
174
+ function formatLostWorkTopicLine(record, plan, holdHours, translate) {
175
+ const parts = [];
176
+ if (record.backgroundTasks.length > 0)
177
+ parts.push(translate('lostWork.work.tasks', { list: record.backgroundTasks.map(getTopicTaskName).join(', ') }));
178
+ if (record.scheduledJobCount > 0)
179
+ parts.push(translate('lostWork.work.jobs', { count: record.scheduledJobCount }));
180
+ if (record.hasUnreadTaskResult)
181
+ parts.push(translate('lostWork.work.unreadResult'));
182
+ if (record.wasTurnInFlight)
183
+ parts.push(translate('lostWork.work.turn'));
184
+ const reason = translate(`lostWork.reason.${record.reason}`, { hours: holdHours });
185
+ return translate(getTopicLineKey(plan), { reason, work: parts.join('; ') });
186
+ }
187
+ //# sourceMappingURL=lostWork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lostWork.js","sourceRoot":"","sources":["../../src/utils/lostWork.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Translate } from '../i18n';
2
+ import type { DoctorLine } from './doctorLine';
3
+ /**
4
+ * Charness on native Windows (not inside WSL2) starts and serves, but part of it cannot work there: the Claude backends need
5
+ * tmux, a self-update cannot restart the process in place (no `process.execve`), hot mode refuses to start and the local
6
+ * speech engine's installer is POSIX-only. The bot says so instead of failing one feature at a time; WSL2 is the supported way.
7
+ */
8
+ /** Where the WSL2 recipe lives, shown in the notice. */
9
+ export declare const nativeWindowsSetupUrl = "https://github.com/olosegres/charness/blob/main/SETUP.md#windows-wsl2";
10
+ /** @description Whether this process runs on native Windows. The platform is a parameter so tests need no Windows. */
11
+ export declare function checkIsNativeWindows(platform: typeof process.platform): boolean;
12
+ /**
13
+ * @description The "native Windows is limited" sentence in the active language, or `null` off Windows. One text serves the
14
+ * console, the General notice and `/doctor`.
15
+ */
16
+ export declare function getNativeWindowsNotice(platform: typeof process.platform, translate: Translate): string | null;
17
+ /** @description The startup console line, or `null` off Windows. */
18
+ export declare function getNativeWindowsConsoleLine(platform: typeof process.platform, translate: Translate): string | null;
19
+ /**
20
+ * @description The notice to post in General at boot, or `null`: once per cold start — a hot reload (the hot supervisor never
21
+ * runs on Windows, but a quick restart classifies the same way) stays silent.
22
+ */
23
+ export declare function getNativeWindowsGeneralNotice(input: {
24
+ platform: typeof process.platform;
25
+ isHotReload: boolean;
26
+ }, translate: Translate): string | null;
27
+ /** @description The `/doctor` line, or `null` off Windows. */
28
+ export declare function getNativeWindowsDoctorLine(platform: typeof process.platform, translate: Translate): DoctorLine | null;
29
+ //# sourceMappingURL=nativeWindows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeWindows.d.ts","sourceRoot":"","sources":["../../src/utils/nativeWindows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;GAIG;AAEH,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,0EAA0E,CAAC;AAM7G,sHAAsH;AACtH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,CAE/E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAE7G;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAGlH;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE;IAAE,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,EAClE,SAAS,EAAE,SAAS,GACnB,MAAM,GAAG,IAAI,CAIf;AAED,8DAA8D;AAC9D,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAGrH"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nativeWindowsSetupUrl = void 0;
4
+ exports.checkIsNativeWindows = checkIsNativeWindows;
5
+ exports.getNativeWindowsNotice = getNativeWindowsNotice;
6
+ exports.getNativeWindowsConsoleLine = getNativeWindowsConsoleLine;
7
+ exports.getNativeWindowsGeneralNotice = getNativeWindowsGeneralNotice;
8
+ exports.getNativeWindowsDoctorLine = getNativeWindowsDoctorLine;
9
+ /**
10
+ * Charness on native Windows (not inside WSL2) starts and serves, but part of it cannot work there: the Claude backends need
11
+ * tmux, a self-update cannot restart the process in place (no `process.execve`), hot mode refuses to start and the local
12
+ * speech engine's installer is POSIX-only. The bot says so instead of failing one feature at a time; WSL2 is the supported way.
13
+ */
14
+ /** Where the WSL2 recipe lives, shown in the notice. */
15
+ exports.nativeWindowsSetupUrl = 'https://github.com/olosegres/charness/blob/main/SETUP.md#windows-wsl2';
16
+ const windowsPlatform = 'win32';
17
+ const generalNoticePrefix = '⚠️ ';
18
+ const consoleLinePrefix = '[platform] ';
19
+ /** @description Whether this process runs on native Windows. The platform is a parameter so tests need no Windows. */
20
+ function checkIsNativeWindows(platform) {
21
+ return platform === windowsPlatform;
22
+ }
23
+ /**
24
+ * @description The "native Windows is limited" sentence in the active language, or `null` off Windows. One text serves the
25
+ * console, the General notice and `/doctor`.
26
+ */
27
+ function getNativeWindowsNotice(platform, translate) {
28
+ return checkIsNativeWindows(platform) ? translate('nativeWindows.limitedNotice', { setupUrl: exports.nativeWindowsSetupUrl }) : null;
29
+ }
30
+ /** @description The startup console line, or `null` off Windows. */
31
+ function getNativeWindowsConsoleLine(platform, translate) {
32
+ const notice = getNativeWindowsNotice(platform, translate);
33
+ return notice === null ? null : `${consoleLinePrefix}${notice}`;
34
+ }
35
+ /**
36
+ * @description The notice to post in General at boot, or `null`: once per cold start — a hot reload (the hot supervisor never
37
+ * runs on Windows, but a quick restart classifies the same way) stays silent.
38
+ */
39
+ function getNativeWindowsGeneralNotice(input, translate) {
40
+ if (input.isHotReload)
41
+ return null;
42
+ const notice = getNativeWindowsNotice(input.platform, translate);
43
+ return notice === null ? null : `${generalNoticePrefix}${notice}`;
44
+ }
45
+ /** @description The `/doctor` line, or `null` off Windows. */
46
+ function getNativeWindowsDoctorLine(platform, translate) {
47
+ const notice = getNativeWindowsNotice(platform, translate);
48
+ return notice === null ? null : { status: 'warn', label: notice };
49
+ }
50
+ //# sourceMappingURL=nativeWindows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeWindows.js","sourceRoot":"","sources":["../../src/utils/nativeWindows.ts"],"names":[],"mappings":";;;AAiBA,oDAEC;AAMD,wDAEC;AAGD,kEAGC;AAMD,sEAOC;AAGD,gEAGC;AAjDD;;;;GAIG;AAEH,wDAAwD;AAC3C,QAAA,qBAAqB,GAAG,uEAAuE,CAAC;AAE7G,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC,sHAAsH;AACtH,SAAgB,oBAAoB,CAAC,QAAiC;IACpE,OAAO,QAAQ,KAAK,eAAe,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,QAAiC,EAAE,SAAoB;IAC5F,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,6BAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/H,CAAC;AAED,oEAAoE;AACpE,SAAgB,2BAA2B,CAAC,QAAiC,EAAE,SAAoB;IACjG,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,MAAM,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAgB,6BAA6B,CAC3C,KAAkE,EAClE,SAAoB;IAEpB,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,8DAA8D;AAC9D,SAAgB,0BAA0B,CAAC,QAAiC,EAAE,SAAoB;IAChG,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { UpdateOffer, UpdateStatus } from '../selfUpdate/updateEngine';
2
- import { type Translate } from '../selfUpdate/updateMessages';
2
+ import type { Translate } from '../i18n';
3
3
  /**
4
4
  * @description Pure plan of the `/update` screen (text + buttons), shared by the command and its buttons in
5
5
  * `connectors/telegram/commands/selfUpdate.ts` so the text and the ✓ can never drift between the first render and the
@@ -1 +1 @@
1
- {"version":3,"file":"updateScreenPlan.d.ts","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGpI;;;;;GAKG;AAEH,eAAO,MAAM,wBAAwB,cAAc,CAAC;AACpD,eAAO,MAAM,4BAA4B,eAAe,CAAC;AACzD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,QAAqD,CAAC;AAC1F,+FAA+F;AAC/F,eAAO,MAAM,mCAAmC,QAAiE,CAAC;AAMlH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAKzE;AAoCD,wIAAwI;AACxI,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAG1G;AA4DD,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAO9F"}
1
+ {"version":3,"file":"updateScreenPlan.d.ts","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC;;;;;GAKG;AAEH,eAAO,MAAM,wBAAwB,cAAc,CAAC;AACpD,eAAO,MAAM,4BAA4B,eAAe,CAAC;AACzD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,QAAqD,CAAC;AAC1F,+FAA+F;AAC/F,eAAO,MAAM,mCAAmC,QAAiE,CAAC;AAMlH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAKzE;AAoCD,wIAAwI;AACxI,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAG1G;AA4DD,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAO9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateScreenPlan.js","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updateScreenPlan.js","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "charness",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "license": "MIT",
5
5
  "author": "Sergei Solo",
6
6
  "description": "Charness (formerly TelegramCode): Telegram forum-supergroup bot for Claude Code / OpenCode — one topic per task, isolated sessions, per-thread MCP",
@@ -65,7 +65,7 @@
65
65
  "version": "tsx src/release/cli.ts changelog && git add CHANGELOG.md",
66
66
  "test": "yarn test:unit && yarn test:flows",
67
67
  "test:unit": "node --import tsx --import ./src/__tests__/globalTestSetup.ts --test --test-timeout=120000 'src/__tests__/**/!(*E2e|*Live).test.ts'",
68
- "test:flows": "node --import tsx --import ./src/__tests__/globalTestSetup.ts --test --test-timeout=1200000 'src/__tests__/**/*E2e.test.ts'",
68
+ "test:flows": "node --import tsx --import ./src/__tests__/globalTestSetup.ts --test --test-timeout=1200000 --test-concurrency=16 'src/__tests__/**/*E2e.test.ts'",
69
69
  "claude": "UID=$(id -u) GID=$(id -g) docker compose run --rm claude"
70
70
  },
71
71
  "dependencies": {