Skip to content

Commit bb66624

Browse files
authored
Merge branch 'main' into changeset-release/main
2 parents 23c5c6a + 622dbe9 commit bb66624

38 files changed

Lines changed: 271 additions & 124 deletions
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Prevent cron ticks from continuing after an agent shuts down.

‎.changeset/use-unicode-ellipsis.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Use the Unicode ellipsis in terminal status and truncation text.

‎apps/pythinker-code/src/tui/commands/plugins.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ async function installFromPanel(
629629
if (official) {
630630
panel.setInstalling(truncateForStatus(label));
631631
} else {
632-
host.showStatus(`Installing or updating ${label} from marketplace...`);
632+
host.showStatus(`Installing or updating ${label} from marketplace…`);
633633
}
634634
host.state.ui.requestRender();
635635
try {

‎apps/pythinker-code/src/tui/components/dialogs/compaction.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ export class CompactionComponent extends Container {
165165
return `${bullet}${label}`;
166166
}
167167
const bullet = this.blinkOn ? currentTheme.fg('text', STATUS_BULLET) : ' ';
168-
const label = currentTheme.boldFg('primary', 'Compacting context...');
168+
const label = currentTheme.boldFg('primary', 'Compacting context…');
169169
const tip = this.tip ? currentTheme.fg('textDim', ` · Tip: ${this.tip}`) : '';
170170
return `${bullet}${label}${tip}`;
171171
}

‎apps/pythinker-code/src/tui/components/dialogs/question-dialog.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ export class QuestionDialogComponent extends Container implements Focusable {
469469
appendWrapped(lines, ' ', ' ', bodyLine, renderWidth, dim);
470470
}
471471
if (bodyLines.length > visibleBodyLines.length) {
472-
lines.push(dim(` ... ${String(bodyLines.length - visibleBodyLines.length)} more lines`));
472+
lines.push(dim(` … ${String(bodyLines.length - visibleBodyLines.length)} more lines`));
473473
}
474474
}
475475

‎apps/pythinker-code/src/tui/components/dialogs/session-picker.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ export class SessionPickerComponent extends Container implements Focusable {
264264
if (this.loading) {
265265
lines.push(currentTheme.boldFg('primary', truncateToWidth(title, width, ELLIPSIS)));
266266
lines.push(
267-
currentTheme.fg('textMuted', truncateToWidth('Loading sessions...', width, ELLIPSIS)),
267+
currentTheme.fg('textMuted', truncateToWidth('Loading sessions…', width, ELLIPSIS)),
268268
);
269269
lines.push(currentTheme.fg('primary', '─'.repeat(width)));
270270
return lines;

‎apps/pythinker-code/src/tui/components/messages/agent-dynamic-workflow-progress.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ const AGENT_DYNAMIC_WORKFLOW_LEFT_INDENT = ' ';
3333
const AGENT_DYNAMIC_WORKFLOW_RIGHT_GAP = 1;
3434
const AGENT_DYNAMIC_WORKFLOW_NON_GRID_LINES = 6;
3535
const COMPACT_TERMINAL_MARK_WIDTH = 1;
36-
const ORCHESTRATING_LABEL = 'Orchestrating...';
37-
const PROMPTING_LABEL = 'Prompting...';
38-
const WORKING_LABEL = 'Working...';
36+
const ORCHESTRATING_LABEL = 'Orchestrating…';
37+
const PROMPTING_LABEL = 'Prompting…';
38+
const WORKING_LABEL = 'Working…';
3939
const COMPLETED_LABEL = 'Completed.';
4040
const FAILED_LABEL = 'Failed.';
4141
const ABORTED_LABEL = 'Aborted.';
4242
const CANCELLED_LABEL = 'Cancelled.';
43-
const QUEUED_LABEL = 'Queued...';
44-
const SUSPENDED_LABEL = 'Rate limited...';
43+
const QUEUED_LABEL = 'Queued…';
44+
const SUSPENDED_LABEL = 'Rate limited…';
4545
const RESUMED_ITEM_LABEL = '(resumed)';
4646
const CANCELLED_LABEL_DARKEN_FACTOR = 0.72;
4747
const AGENT_ID_TOKENS = [

‎apps/pythinker-code/src/tui/components/messages/shell-run.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const TIMER_INTERVAL_MS = 1000;
1717
const MAX_COMBINED_CHARS = 256 * 1024;
1818
const KEEP_COMBINED_CHARS = 64 * 1024;
1919

20-
const TRUNCATED_RUNNING_NOTICE = '... (output truncated)';
20+
const TRUNCATED_RUNNING_NOTICE = '… (output truncated)';
2121

2222
/**
2323
* Live view for a user-initiated `!` shell command. Two phases:

‎apps/pythinker-code/src/tui/components/messages/thinking.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export class ThinkingComponent implements Component {
123123
rendered = [];
124124
} else {
125125
const contentLines = this.renderContent(width);
126-
const hint = `... (${String(contentLines.length)} more lines, ctrl+o to expand)`;
126+
const hint = `… (${String(contentLines.length)} more lines, ctrl+o to expand)`;
127127
const prefix = this.showMarker ? currentTheme.fg('textDim', STATUS_BULLET) : MESSAGE_INDENT;
128128
const styledHint = currentTheme.fg(
129129
'textDim',

‎apps/pythinker-code/src/tui/components/messages/tool-call.ts‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ function truncateArgValue(key: string, value: string): string {
381381
// still tell which file is being touched.
382382
return '…' + value.slice(value.length - (MAX_ARG_LENGTH - 1));
383383
}
384-
return value.slice(0, MAX_ARG_LENGTH - 3) + '...';
384+
return value.slice(0, MAX_ARG_LENGTH - 1) + '…';
385385
}
386386

387387
function makeWorkspaceRelativePath(filePath: string, workspaceDir: string | undefined): string {
@@ -813,7 +813,7 @@ export class ToolCallComponent extends Container {
813813
if (this.result !== undefined || text.length === 0) return;
814814
this.liveOutput += text;
815815
if (this.liveOutput.length > MAX_LIVE_OUTPUT_CHARS) {
816-
this.liveOutput = `[...truncated]\n${this.liveOutput.slice(
816+
this.liveOutput = `[…truncated]\n${this.liveOutput.slice(
817817
this.liveOutput.length - MAX_LIVE_OUTPUT_CHARS,
818818
)}`;
819819
}
@@ -1422,7 +1422,7 @@ export class ToolCallComponent extends Container {
14221422
const existingOutput = options?.replace === true ? '' : (activity?.output ?? '');
14231423
let output = existingOutput + text;
14241424
if (output.length > MAX_LIVE_OUTPUT_CHARS) {
1425-
output = `[...truncated]\n${output.slice(output.length - MAX_LIVE_OUTPUT_CHARS)}`;
1425+
output = `[…truncated]\n${output.slice(output.length - MAX_LIVE_OUTPUT_CHARS)}`;
14261426
}
14271427
this.upsertSubToolActivity(id, name, args, activity?.phase ?? 'ongoing', output);
14281428
this.rebuildContent();
@@ -1673,7 +1673,7 @@ export class ToolCallComponent extends Container {
16731673
const suffix = this.hiddenSubCallCount > 1 ? 's' : '';
16741674
this.addChild(
16751675
new Text(
1676-
currentTheme.italic(currentTheme.dim(` ${String(this.hiddenSubCallCount)} more tool call${suffix} ...`)),
1676+
currentTheme.italic(currentTheme.dim(` ${String(this.hiddenSubCallCount)} more tool call${suffix} …`)),
16771677
0,
16781678
0,
16791679
),
@@ -2043,7 +2043,7 @@ export class ToolCallComponent extends Container {
20432043
this.addChild(
20442044
new Text(
20452045
currentTheme.dim(
2046-
`... (${String(remaining)} more lines, ${String(allLines.length)} total, ctrl+o to expand)`,
2046+
`… (${String(remaining)} more lines, ${String(allLines.length)} total, ctrl+o to expand)`,
20472047
),
20482048
2,
20492049
0,
@@ -2130,7 +2130,7 @@ export class ToolCallComponent extends Container {
21302130
const elapsedSeconds =
21312131
startedAtMs === undefined ? 0 : Math.max(0, Math.floor((Date.now() - startedAtMs) / 1000));
21322132
const target = filePath.length > 0 ? ` for ${filePath}` : '';
2133-
const progress = `Preparing changes${target}... ${formatByteSize(bytes)} · ${formatElapsed(
2133+
const progress = `Preparing changes${target}… ${formatByteSize(bytes)} · ${formatElapsed(
21342134
elapsedSeconds,
21352135
)} elapsed`;
21362136
this.addChild(new Text(currentTheme.dim(progress), 2, 0));

0 commit comments

Comments
 (0)