Skip to content

Commit 23f7e91

Browse files
authored
Merge pull request #137 from odefun/feat/discord-settings-markdown-177194
fix: unify markdown messaging and simplify Discord settings UX
2 parents 20cc83d + c682edb commit 23f7e91

File tree

15 files changed

+179
-74
lines changed

15 files changed

+179
-74
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ode",
3-
"version": "0.0.90",
3+
"version": "0.0.91",
44
"description": "Coding anywhere with your coding agents connected",
55
"module": "packages/core/index.ts",
66
"type": "module",

packages/core/runtime.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ export function createCoreRuntime(deps: RuntimeDeps) {
152152

153153
if (finalChunks.length > 1) {
154154
if (statusFormat !== "aggressive" && !statusRateLimited) {
155-
await runtimeDeps.im.updateMessage(channelId, statusTs, "Final result posted below in multiple messages.", false);
155+
await runtimeDeps.im.updateMessage(channelId, statusTs, "Final result posted below in multiple messages.");
156156
} else if (statusRateLimited) {
157157
log.warn("Skipping final status update due to prior 429; posting final chunks as new messages", {
158158
channelId,
@@ -163,13 +163,13 @@ export function createCoreRuntime(deps: RuntimeDeps) {
163163
}
164164

165165
for (const chunk of finalChunks) {
166-
await runtimeDeps.im.sendMessage(channelId, threadId, chunk, true);
166+
await runtimeDeps.im.sendMessage(channelId, threadId, chunk);
167167
}
168168
return;
169169
}
170170

171171
if (statusFormat === "aggressive") {
172-
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk, true);
172+
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk);
173173
return;
174174
}
175175

@@ -180,18 +180,18 @@ export function createCoreRuntime(deps: RuntimeDeps) {
180180
statusTs,
181181
...(statusRateLimitError ? { error: statusRateLimitError } : {}),
182182
});
183-
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk, true);
183+
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk);
184184
return;
185185
}
186186

187187
const maxEditableMessageChars = runtimeDeps.im.maxEditableMessageChars;
188188
if (typeof maxEditableMessageChars === "number" && singleChunk.length > maxEditableMessageChars) {
189-
await runtimeDeps.im.updateMessage(channelId, statusTs, "Final result posted below.", false);
190-
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk, true);
189+
await runtimeDeps.im.updateMessage(channelId, statusTs, "Final result posted below.");
190+
await runtimeDeps.im.sendMessage(channelId, threadId, singleChunk);
191191
return;
192192
}
193193

194-
await runtimeDeps.im.updateMessage(channelId, statusTs, singleChunk, true);
194+
await runtimeDeps.im.updateMessage(channelId, statusTs, singleChunk);
195195
}
196196

197197
async function handleUserMessageInternal(context: CoreMessageContext, text: string): Promise<void> {

packages/core/runtime/event-stream.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,7 @@ export async function startEventStreamWatcher(
169169
workingPath,
170170
state: liveParsedState.get(messageKey),
171171
statusMessageFormat: resolveStatusMessageFormat(),
172-
}),
173-
false
172+
})
174173
);
175174
if (typeof updatedStatusTs === "string" && updatedStatusTs !== request.statusMessageTs) {
176175
request.statusMessageTs = updatedStatusTs;

packages/core/runtime/message-updates.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ type QueuedUpdate = {
66
channelId: string;
77
messageTs: string;
88
text: string;
9-
asMarkdown: boolean;
109
resolve: (messageTs?: string) => void;
1110
};
1211

@@ -44,7 +43,7 @@ export function createRateLimitedImAdapter(
4443

4544
globalLastUpdateAt = Date.now();
4645
try {
47-
const maybeUpdatedTs = await im.updateMessage(item.channelId, item.messageTs, item.text, item.asMarkdown);
46+
const maybeUpdatedTs = await im.updateMessage(item.channelId, item.messageTs, item.text);
4847
item.resolve(typeof maybeUpdatedTs === "string" ? maybeUpdatedTs : undefined);
4948
} catch (error) {
5049
if (isRateLimitError(error)) {
@@ -87,8 +86,7 @@ export function createRateLimitedImAdapter(
8786
updateMessage: async (
8887
channelId: string,
8988
messageTs: string,
90-
text: string,
91-
asMarkdown = true
89+
text: string
9290
): Promise<string | undefined> => {
9391
for (let i = queue.length - 1; i >= 0; i--) {
9492
const queued = queue[i];
@@ -99,7 +97,7 @@ export function createRateLimitedImAdapter(
9997
}
10098

10199
return new Promise<string | undefined>((resolve) => {
102-
queue.push({ channelId, messageTs, text, asMarkdown, resolve });
100+
queue.push({ channelId, messageTs, text, resolve });
103101
void processQueue();
104102
});
105103
},

packages/core/runtime/open-request.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ export async function runOpenRequest(params: {
6060
const initialStatusTs = await deps.im.sendMessage(
6161
context.channelId,
6262
context.replyThreadId,
63-
`${providerLabel} is running...`,
64-
false
63+
`${providerLabel} is running...`
6564
);
6665

6766
if (!initialStatusTs) {
@@ -126,7 +125,7 @@ export async function runOpenRequest(params: {
126125
statusMessageFormat: resolveStatusMessageFormat(),
127126
});
128127
if (!request.statusFrozen) {
129-
const updatedStatusTs = await deps.im.updateMessage(context.channelId, statusTs, statusText, false);
128+
const updatedStatusTs = await deps.im.updateMessage(context.channelId, statusTs, statusText);
130129
if (typeof updatedStatusTs === "string" && updatedStatusTs !== statusTs) {
131130
statusTs = updatedStatusTs;
132131
request.statusMessageTs = updatedStatusTs;

packages/core/runtime/pending-question.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export async function handlePendingQuestionReply(params: {
3333

3434
const trimmed = text.trim();
3535
if (!trimmed) {
36-
await deps.im.sendMessage(context.channelId, context.replyThreadId, "Please reply with an answer.", false);
36+
await deps.im.sendMessage(context.channelId, context.replyThreadId, "Please reply with an answer.");
3737
return true;
3838
}
3939

@@ -54,8 +54,7 @@ export async function handlePendingQuestionReply(params: {
5454
await deps.im.sendMessage(
5555
context.channelId,
5656
context.replyThreadId,
57-
"Failed to submit your answer. Please try again.",
58-
false
57+
"Failed to submit your answer. Please try again."
5958
);
6059
return true;
6160
}

packages/core/runtime/recovery.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ export async function recoverPendingRequests(
3333
await im.updateMessage(
3434
request.channelId,
3535
request.statusMessageTs,
36-
"_Bot restarted - please resend your message_",
37-
false
36+
"_Bot restarted - please resend your message_"
3837
);
3938

4039
clearActiveRequest(session.channelId, session.threadId);

packages/core/runtime/request-runner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export async function runTrackedRequest(
159159
liveParsedState.delete(getStatusMessageKey(request));
160160

161161
const errorStatus = `Error: ${message}\n_${suggestion}_`;
162-
await deps.im.updateMessage(request.channelId, request.statusMessageTs, errorStatus, false);
162+
await deps.im.updateMessage(request.channelId, request.statusMessageTs, errorStatus);
163163
onFail(message);
164164
return { responses: null };
165165
}

packages/core/runtime/selection-reply.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export async function handleSelectionReply(params: HandleSelectionReplyParams):
7373
const providerId = deps.agent.getProviderForSession(sessionId);
7474
const providerLabel = deps.agent.getDisplayNameForSession(sessionId);
7575

76-
const initialStatusTs = await deps.im.sendMessage(channelId, threadId, `${providerLabel} is running...`, false);
76+
const initialStatusTs = await deps.im.sendMessage(channelId, threadId, `${providerLabel} is running...`);
7777
if (!initialStatusTs) {
7878
log.error("Failed to send status message for button selection");
7979
return;
@@ -142,7 +142,7 @@ export async function handleSelectionReply(params: HandleSelectionReplyParams):
142142
state: state.liveParsedState.get(statusMessageKey),
143143
statusMessageFormat: resolveStatusMessageFormat(),
144144
});
145-
const updatedStatusTs = await deps.im.updateMessage(channelId, statusTs, statusText, false);
145+
const updatedStatusTs = await deps.im.updateMessage(channelId, statusTs, statusText);
146146
if (typeof updatedStatusTs === "string" && updatedStatusTs !== statusTs) {
147147
statusTs = updatedStatusTs;
148148
request.statusMessageTs = updatedStatusTs;

packages/core/runtime/session-bootstrap.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export async function prepareRuntimeSession(params: {
3232
try {
3333
cwd = resolveChannelCwd(channelId).cwd;
3434
} catch (err) {
35-
await deps.im.sendMessage(channelId, replyThreadId, `Error: ${String(err)}`, false);
35+
await deps.im.sendMessage(channelId, replyThreadId, `Error: ${String(err)}`);
3636
return null;
3737
}
3838

@@ -55,7 +55,7 @@ export async function prepareRuntimeSession(params: {
5555
threadId,
5656
error: String(err),
5757
});
58-
await deps.im.sendMessage(channelId, replyThreadId, `Error: ${message}\n_${suggestion}_`, false);
58+
await deps.im.sendMessage(channelId, replyThreadId, `Error: ${message}\n_${suggestion}_`);
5959
return null;
6060
}
6161

@@ -74,7 +74,7 @@ export async function prepareRuntimeSession(params: {
7474
gitIdentity,
7575
});
7676
if (worktree.skipped && worktree.message) {
77-
await deps.im.sendMessage(channelId, replyThreadId, worktree.message, false);
77+
await deps.im.sendMessage(channelId, replyThreadId, worktree.message);
7878
}
7979
cwd = resolvedCwd;
8080
} catch (err) {
@@ -85,7 +85,7 @@ export async function prepareRuntimeSession(params: {
8585
sessionId,
8686
error: message,
8787
});
88-
await deps.im.sendMessage(channelId, replyThreadId, `Error: Failed to prepare worktree. ${message}`, false);
88+
await deps.im.sendMessage(channelId, replyThreadId, `Error: Failed to prepare worktree. ${message}`);
8989
return null;
9090
}
9191
}

0 commit comments

Comments
 (0)