viveworker 0.8.2 → 0.8.4
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/README.md +7 -4
- package/package.json +1 -1
- package/scripts/com.viveworker.moltbook-scout.plist.sample +2 -2
- package/scripts/moltbook-api.mjs +178 -2
- package/scripts/moltbook-cli.mjs +134 -8
- package/scripts/moltbook-scout-auto.sh +100 -10
- package/scripts/moltbook-watcher.mjs +10 -0
- package/scripts/share-cli.mjs +127 -54
- package/scripts/viveworker-bridge.mjs +758 -46
- package/web/app.css +33 -0
- package/web/app.js +86 -19
- package/web/build-id.js +1 -1
- package/web/i18n.js +26 -2
- package/web/remote-pairing/api-router.js +168 -15
- package/web/remote-pairing/transport.js +27 -3
package/web/app.css
CHANGED
|
@@ -2755,6 +2755,39 @@ pre code {
|
|
|
2755
2755
|
color: rgba(236, 248, 255, 0.66);
|
|
2756
2756
|
}
|
|
2757
2757
|
|
|
2758
|
+
.timeline-entry--activity {
|
|
2759
|
+
cursor: default;
|
|
2760
|
+
border-color: rgba(121, 196, 255, 0.18);
|
|
2761
|
+
background:
|
|
2762
|
+
linear-gradient(180deg, rgba(121, 196, 255, 0.11), rgba(20, 31, 40, 0.94)),
|
|
2763
|
+
var(--card);
|
|
2764
|
+
}
|
|
2765
|
+
|
|
2766
|
+
.timeline-entry__activity-pulse {
|
|
2767
|
+
width: 0.58rem;
|
|
2768
|
+
height: 0.58rem;
|
|
2769
|
+
flex: 0 0 auto;
|
|
2770
|
+
border-radius: 999px;
|
|
2771
|
+
background: rgba(121, 196, 255, 0.9);
|
|
2772
|
+
box-shadow: 0 0 0 0 rgba(121, 196, 255, 0.26);
|
|
2773
|
+
animation: timeline-activity-pulse 1.6s ease-out infinite;
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
@keyframes timeline-activity-pulse {
|
|
2777
|
+
0% {
|
|
2778
|
+
box-shadow: 0 0 0 0 rgba(121, 196, 255, 0.26);
|
|
2779
|
+
opacity: 0.95;
|
|
2780
|
+
}
|
|
2781
|
+
70% {
|
|
2782
|
+
box-shadow: 0 0 0 0.56rem rgba(121, 196, 255, 0);
|
|
2783
|
+
opacity: 0.72;
|
|
2784
|
+
}
|
|
2785
|
+
100% {
|
|
2786
|
+
box-shadow: 0 0 0 0 rgba(121, 196, 255, 0);
|
|
2787
|
+
opacity: 0.95;
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2758
2791
|
.timeline-entry--message .timeline-entry__title {
|
|
2759
2792
|
font-size: 1.03rem;
|
|
2760
2793
|
line-height: 1.55;
|
package/web/app.js
CHANGED
|
@@ -43,6 +43,7 @@ const DETAIL_REFRESH_FALLBACK_TIMEOUT_MS = 2_500;
|
|
|
43
43
|
const DETAIL_STICKY_LAN_PROBE_TIMEOUT_MS = 350;
|
|
44
44
|
const COMPLETION_REPLY_SEND_TIMEOUT_MS = 22_000;
|
|
45
45
|
const COMPLETION_REPLY_OPTIMISTIC_SENT_MS = 1_600;
|
|
46
|
+
const LAN_FETCH_TIMEOUT_MESSAGE = "LAN fetch timed out";
|
|
46
47
|
const TIMELINE_REFRESH_TIMEOUT_MS = 8_000;
|
|
47
48
|
const TIMELINE_POLL_TIMEOUT_MS = 4_500;
|
|
48
49
|
const FAST_POLL_STEP_TIMEOUT_MS = 4_500;
|
|
@@ -897,7 +898,7 @@ async function forceAppRefreshFromLan() {
|
|
|
897
898
|
const keys = await caches.keys();
|
|
898
899
|
await Promise.all(
|
|
899
900
|
keys
|
|
900
|
-
.filter((key) => /^viveworker
|
|
901
|
+
.filter((key) => /^viveworker-/u.test(key))
|
|
901
902
|
.map((key) => caches.delete(key))
|
|
902
903
|
);
|
|
903
904
|
}
|
|
@@ -1930,17 +1931,26 @@ function currentTimelineKindFilterOption() {
|
|
|
1930
1931
|
|
|
1931
1932
|
function timelineEntryMatchesKindFilter(entry, filterId) {
|
|
1932
1933
|
const kind = normalizeClientText(entry?.kind || entry?.item?.kind || "");
|
|
1934
|
+
const fileEventType = normalizeClientText(entry?.fileEventType || entry?.item?.fileEventType || "");
|
|
1935
|
+
const activityPhase = normalizeClientText(entry?.activityPhase || entry?.item?.activityPhase || "");
|
|
1933
1936
|
switch (filterId) {
|
|
1934
1937
|
case "messages":
|
|
1935
|
-
return TIMELINE_MESSAGE_KINDS.has(kind);
|
|
1938
|
+
return TIMELINE_MESSAGE_KINDS.has(kind) || (kind === "activity_status" && activityPhase === "thinking");
|
|
1936
1939
|
case "suggestions":
|
|
1937
1940
|
return kind === "ambient_suggestions";
|
|
1938
1941
|
case "files":
|
|
1939
|
-
return
|
|
1942
|
+
return (
|
|
1943
|
+
(kind === "file_event" && fileEventType !== "git") ||
|
|
1944
|
+
(kind === "activity_status" && ["reading", "searching", "editing"].includes(activityPhase))
|
|
1945
|
+
);
|
|
1940
1946
|
case "commands":
|
|
1941
|
-
return
|
|
1947
|
+
return (
|
|
1948
|
+
kind === "command_event" ||
|
|
1949
|
+
(kind === "file_event" && fileEventType === "git") ||
|
|
1950
|
+
(kind === "activity_status" && activityPhase === "running_command")
|
|
1951
|
+
);
|
|
1942
1952
|
case "approvals":
|
|
1943
|
-
return kind === "approval";
|
|
1953
|
+
return kind === "approval" || (kind === "activity_status" && activityPhase === "awaiting_approval");
|
|
1944
1954
|
case "plans":
|
|
1945
1955
|
return kind === "plan" || kind === "plan_ready";
|
|
1946
1956
|
case "choices":
|
|
@@ -2746,6 +2756,11 @@ function completionReplyWarningMatchesSentText(error, text, attachmentCount = 0)
|
|
|
2746
2756
|
return Boolean(warningText && sentText && warningText === sentText);
|
|
2747
2757
|
}
|
|
2748
2758
|
|
|
2759
|
+
function isCompletionReplyLateNetworkResult(error) {
|
|
2760
|
+
return error?.errorKey === "request-timeout" ||
|
|
2761
|
+
error?.message === LAN_FETCH_TIMEOUT_MESSAGE;
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2749
2764
|
function normalizeCompletionReplyAttachments(values) {
|
|
2750
2765
|
const rawValues = Array.isArray(values)
|
|
2751
2766
|
? values
|
|
@@ -3773,6 +3788,7 @@ function renderTimelineEntry(entry, { desktop }) {
|
|
|
3773
3788
|
const isMessageLike = TIMELINE_MESSAGE_KINDS.has(item.kind) || isMoltbookOrA2A;
|
|
3774
3789
|
const isFileEvent = item.kind === "file_event";
|
|
3775
3790
|
const isCommandEvent = item.kind === "command_event";
|
|
3791
|
+
const isActivityStatus = item.kind === "activity_status";
|
|
3776
3792
|
const imageUrls = Array.isArray(item.imageUrls) ? item.imageUrls.filter(Boolean) : [];
|
|
3777
3793
|
const fileRefs = normalizeClientFileRefs(item.fileRefs);
|
|
3778
3794
|
const primaryText = timelineEntryPrimaryText(item, entry.status, { isMessageLike, isFileEvent, isCommandEvent });
|
|
@@ -3783,13 +3799,15 @@ function renderTimelineEntry(entry, { desktop }) {
|
|
|
3783
3799
|
const fileEventFileSummary = isFileEvent ? timelineFileEventFileSummary(item) : "";
|
|
3784
3800
|
const fileEventDiffStatsHtml = isFileEvent ? renderDiffEntryStatsHtml(item) : "";
|
|
3785
3801
|
const toolEventCommand = timelineToolEventCommand(item);
|
|
3802
|
+
const tagName = isActivityStatus ? "div" : "button";
|
|
3803
|
+
const openAttrs = isActivityStatus
|
|
3804
|
+
? `role="status" aria-live="polite"`
|
|
3805
|
+
: `data-open-item-kind="${escapeHtml(item.kind)}" data-open-item-token="${escapeHtml(item.token)}" data-source-tab="timeline"`;
|
|
3786
3806
|
|
|
3787
3807
|
return `
|
|
3788
|
-
|
|
3789
|
-
class="timeline-entry timeline-entry--${kindClassName} timeline-entry--kind-${kindNameClass} ${isMessageLike ? "timeline-entry--message" : "timeline-entry--operational"}"
|
|
3790
|
-
|
|
3791
|
-
data-open-item-token="${escapeHtml(item.token)}"
|
|
3792
|
-
data-source-tab="timeline"
|
|
3808
|
+
<${tagName}
|
|
3809
|
+
class="timeline-entry timeline-entry--${kindClassName} timeline-entry--kind-${kindNameClass} ${isMessageLike ? "timeline-entry--message" : "timeline-entry--operational"} ${isActivityStatus ? "timeline-entry--activity" : ""}"
|
|
3810
|
+
${openAttrs}
|
|
3793
3811
|
>
|
|
3794
3812
|
<div class="timeline-entry__meta">
|
|
3795
3813
|
<span class="timeline-entry__kind">
|
|
@@ -3799,7 +3817,7 @@ function renderTimelineEntry(entry, { desktop }) {
|
|
|
3799
3817
|
</span>
|
|
3800
3818
|
<span class="timeline-entry__meta-right">
|
|
3801
3819
|
<span class="timeline-entry__time">${escapeHtml(timestampLabel)}</span>
|
|
3802
|
-
|
|
3820
|
+
${isActivityStatus ? `<span class="timeline-entry__activity-pulse" aria-hidden="true"></span>` : `<span class="timeline-entry__chevron" aria-hidden="true">${renderIcon("chevron-right")}</span>`}
|
|
3803
3821
|
</span>
|
|
3804
3822
|
</div>
|
|
3805
3823
|
${threadLabel ? `<p class="timeline-entry__thread">${escapeHtml(threadLabel)}</p>` : ""}
|
|
@@ -3821,7 +3839,7 @@ function renderTimelineEntry(entry, { desktop }) {
|
|
|
3821
3839
|
${isFileEvent ? "" : renderTimelineEntryFileStrip(fileRefs)}
|
|
3822
3840
|
</div>
|
|
3823
3841
|
${statusLabel ? `<div class="timeline-entry__footer"><span class="timeline-entry__status">${escapeHtml(statusLabel)}</span></div>` : ""}
|
|
3824
|
-
|
|
3842
|
+
</${tagName}>
|
|
3825
3843
|
`;
|
|
3826
3844
|
}
|
|
3827
3845
|
|
|
@@ -4059,10 +4077,13 @@ function shouldRenderFileEventCommand(item) {
|
|
|
4059
4077
|
if (item?.kind !== "file_event") {
|
|
4060
4078
|
return false;
|
|
4061
4079
|
}
|
|
4062
|
-
return ["read", "search"].includes(normalizeClientText(item?.fileEventType || ""));
|
|
4080
|
+
return ["read", "search", "git"].includes(normalizeClientText(item?.fileEventType || ""));
|
|
4063
4081
|
}
|
|
4064
4082
|
|
|
4065
4083
|
function timelineToolEventCommand(item) {
|
|
4084
|
+
if (item?.kind === "activity_status") {
|
|
4085
|
+
return truncateUiText(item?.commandText || "", 220);
|
|
4086
|
+
}
|
|
4066
4087
|
if (item?.kind === "command_event") {
|
|
4067
4088
|
return timelineCommandEventCommand(item);
|
|
4068
4089
|
}
|
|
@@ -4078,6 +4099,8 @@ function fileEventDisplayLabel(fileEventType) {
|
|
|
4078
4099
|
return L("fileEvent.read");
|
|
4079
4100
|
case "search":
|
|
4080
4101
|
return L("fileEvent.search");
|
|
4102
|
+
case "git":
|
|
4103
|
+
return L("fileEvent.command");
|
|
4081
4104
|
case "command":
|
|
4082
4105
|
return L("fileEvent.command");
|
|
4083
4106
|
case "write":
|
|
@@ -4095,15 +4118,24 @@ function fileEventDisplayLabel(fileEventType) {
|
|
|
4095
4118
|
|
|
4096
4119
|
function fileEventTimelineCountLabel(item) {
|
|
4097
4120
|
const fileEventType = normalizeClientText(item?.fileEventType || "");
|
|
4098
|
-
const
|
|
4121
|
+
const fileRefs = normalizeClientFileRefs(item?.fileRefs);
|
|
4122
|
+
const count = fileRefs.length;
|
|
4099
4123
|
if (count <= 0) {
|
|
4100
4124
|
return fileEventDisplayLabel(fileEventType) || L("common.fileEvent");
|
|
4101
4125
|
}
|
|
4102
4126
|
switch (fileEventType) {
|
|
4103
4127
|
case "read":
|
|
4128
|
+
if (count === 1) {
|
|
4129
|
+
return L("fileEvent.read");
|
|
4130
|
+
}
|
|
4104
4131
|
return L("fileEvent.timeline.read", { count });
|
|
4105
4132
|
case "search":
|
|
4133
|
+
if (count === 1) {
|
|
4134
|
+
return L("fileEvent.search");
|
|
4135
|
+
}
|
|
4106
4136
|
return L("fileEvent.timeline.search", { count });
|
|
4137
|
+
case "git":
|
|
4138
|
+
return L("fileEvent.timeline.command", { count });
|
|
4107
4139
|
case "command":
|
|
4108
4140
|
return L("fileEvent.timeline.command", { count });
|
|
4109
4141
|
case "write":
|
|
@@ -5448,20 +5480,29 @@ function recentAutoPilotEntries(limit = 5) {
|
|
|
5448
5480
|
}
|
|
5449
5481
|
|
|
5450
5482
|
function isAutoPilotApprovalEntry(entry) {
|
|
5483
|
+
const mode = normalizeClientText(entry?.autoPilotMode || "");
|
|
5451
5484
|
const stableId = normalizeClientText(entry?.stableId || "");
|
|
5452
5485
|
return (
|
|
5453
5486
|
normalizeClientText(entry?.kind || "") === "approval" &&
|
|
5454
5487
|
normalizeClientText(entry?.outcome || "") === "approved" &&
|
|
5455
|
-
(stableId.endsWith(":autopilot") || stableId.includes(":autopilot-write"))
|
|
5488
|
+
(mode === "read" || mode === "write" || stableId.endsWith(":autopilot") || stableId.includes(":autopilot-write"))
|
|
5456
5489
|
);
|
|
5457
5490
|
}
|
|
5458
5491
|
|
|
5459
5492
|
function autoPilotEntryMode(item) {
|
|
5493
|
+
const mode = normalizeClientText(item?.autoPilotMode || "");
|
|
5494
|
+
if (mode === "read" || mode === "write") {
|
|
5495
|
+
return mode;
|
|
5496
|
+
}
|
|
5460
5497
|
const stableId = normalizeClientText(item?.stableId || "");
|
|
5461
5498
|
return stableId.includes(":autopilot-write") ? "write" : "read";
|
|
5462
5499
|
}
|
|
5463
5500
|
|
|
5464
5501
|
function autoPilotEntryWriteLane(item) {
|
|
5502
|
+
const projected = normalizeClientText(item?.autoPilotWriteLane || "");
|
|
5503
|
+
if (projected) {
|
|
5504
|
+
return projected;
|
|
5505
|
+
}
|
|
5465
5506
|
const stableId = normalizeClientText(item?.stableId || "");
|
|
5466
5507
|
const match = stableId.match(/:autopilot-write:([a-z_-]+)$/u);
|
|
5467
5508
|
return normalizeClientText(match?.[1] || "");
|
|
@@ -7627,7 +7668,7 @@ function renderMoltbookDraftComposer(detail, options = {}) {
|
|
|
7627
7668
|
? `
|
|
7628
7669
|
<div class="actions actions--stack${options.mobile ? " actions--sticky" : ""}">
|
|
7629
7670
|
<button type="submit" data-action="approve" class="primary primary--wide">${escapeHtml(approveLabel)}</button>
|
|
7630
|
-
<button type="submit" data-action="deny" class="danger danger--wide"
|
|
7671
|
+
<button type="submit" data-action="deny" class="danger danger--wide">${escapeHtml(L("moltbook.draft.deny"))}</button>
|
|
7631
7672
|
</div>
|
|
7632
7673
|
`
|
|
7633
7674
|
: `<p class="muted reply-composer__description">${escapeHtml(L("moltbook.draft.resolved"))}</p>`;
|
|
@@ -8800,7 +8841,7 @@ function bindShellInteractions() {
|
|
|
8800
8841
|
buildActionOutcomeDetail({
|
|
8801
8842
|
kind: "approval",
|
|
8802
8843
|
title: state.currentDetail?.title,
|
|
8803
|
-
message: approvalOutcomeMessage(actionUrl, activeItem?.provider),
|
|
8844
|
+
message: approvalOutcomeMessage(actionUrl, state.currentDetail?.provider || activeItem?.provider),
|
|
8804
8845
|
})
|
|
8805
8846
|
);
|
|
8806
8847
|
await renderShell();
|
|
@@ -9712,7 +9753,9 @@ for (const button of document.querySelectorAll("[data-wallet-address-copy]")) {
|
|
|
9712
9753
|
labelCache.set(btn, btn.innerHTML);
|
|
9713
9754
|
btn.disabled = true;
|
|
9714
9755
|
if (btn.dataset.action === submittedAction) {
|
|
9715
|
-
btn.innerHTML = submittedAction === "approve"
|
|
9756
|
+
btn.innerHTML = submittedAction === "approve"
|
|
9757
|
+
? escapeHtml(L("moltbook.draft.submittingApprove"))
|
|
9758
|
+
: escapeHtml(L("moltbook.draft.submittingDeny"));
|
|
9716
9759
|
btn.classList.add("is-loading");
|
|
9717
9760
|
} else {
|
|
9718
9761
|
btn.classList.add("is-dimmed");
|
|
@@ -9990,7 +10033,7 @@ for (const button of document.querySelectorAll("[data-wallet-address-copy]")) {
|
|
|
9990
10033
|
} catch (error) {
|
|
9991
10034
|
const optimisticDraft = getCompletionReplyDraft(token);
|
|
9992
10035
|
if (
|
|
9993
|
-
error
|
|
10036
|
+
isCompletionReplyLateNetworkResult(error) &&
|
|
9994
10037
|
optimisticDraft.collapsedAfterSend &&
|
|
9995
10038
|
optimisticDraft.sentText === text
|
|
9996
10039
|
) {
|
|
@@ -10582,6 +10625,8 @@ function kindMeta(kind, item) {
|
|
|
10582
10625
|
return { label: L("common.assistantCommentary"), tone: "plan", icon: "assistant-commentary" };
|
|
10583
10626
|
case "assistant_final":
|
|
10584
10627
|
return { label: L("common.assistantFinal"), tone: "completion", icon: "assistant-final" };
|
|
10628
|
+
case "activity_status":
|
|
10629
|
+
return { label: L("server.title.activityStatus"), tone: "plan", icon: activityStatusIcon(item?.activityPhase) };
|
|
10585
10630
|
case "ambient_suggestions":
|
|
10586
10631
|
return { label: L("common.ambientSuggestions"), tone: "neutral", icon: "suggestions" };
|
|
10587
10632
|
case "approval":
|
|
@@ -10596,6 +10641,9 @@ function kindMeta(kind, item) {
|
|
|
10596
10641
|
case "diff_thread":
|
|
10597
10642
|
return { label: L("common.diff"), tone: "neutral", icon: "diff" };
|
|
10598
10643
|
case "file_event":
|
|
10644
|
+
if (normalizeClientText(item?.fileEventType || "") === "git") {
|
|
10645
|
+
return { label: L("common.commandEvent"), tone: "neutral", icon: "command" };
|
|
10646
|
+
}
|
|
10599
10647
|
return { label: L("common.fileEvent"), tone: "neutral", icon: "file-event" };
|
|
10600
10648
|
case "command_event":
|
|
10601
10649
|
return { label: L("common.commandEvent"), tone: "neutral", icon: "command" };
|
|
@@ -10616,6 +10664,24 @@ function kindMeta(kind, item) {
|
|
|
10616
10664
|
}
|
|
10617
10665
|
}
|
|
10618
10666
|
|
|
10667
|
+
function activityStatusIcon(phase) {
|
|
10668
|
+
switch (normalizeClientText(phase || "")) {
|
|
10669
|
+
case "reading":
|
|
10670
|
+
return "file-event";
|
|
10671
|
+
case "searching":
|
|
10672
|
+
return "filter";
|
|
10673
|
+
case "editing":
|
|
10674
|
+
return "diff";
|
|
10675
|
+
case "running_command":
|
|
10676
|
+
return "command";
|
|
10677
|
+
case "awaiting_approval":
|
|
10678
|
+
return "approval";
|
|
10679
|
+
case "thinking":
|
|
10680
|
+
default:
|
|
10681
|
+
return "pending";
|
|
10682
|
+
}
|
|
10683
|
+
}
|
|
10684
|
+
|
|
10619
10685
|
function renderTypePillContent(kindInfo) {
|
|
10620
10686
|
return `
|
|
10621
10687
|
<span class="type-pill__icon" aria-hidden="true">${renderIcon(kindInfo.icon)}</span>
|
|
@@ -11444,6 +11510,7 @@ function localizeApiError(value) {
|
|
|
11444
11510
|
"completion-reply-image-limit": "error.completionReplyImageLimit",
|
|
11445
11511
|
"completion-reply-image-invalid-upload": "error.completionReplyImageInvalidUpload",
|
|
11446
11512
|
"codex-ipc-not-connected": "error.codexIpcNotConnected",
|
|
11513
|
+
"codex-client-not-found": "error.codexClientNotFound",
|
|
11447
11514
|
"approval-not-found": "error.approvalNotFound",
|
|
11448
11515
|
"approval-already-handled": "error.approvalAlreadyHandled",
|
|
11449
11516
|
"plan-request-not-found": "error.planRequestNotFound",
|
package/web/build-id.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const APP_BUILD_ID = "
|
|
1
|
+
export const APP_BUILD_ID = "20260514-lan-timeout-reply-ack";
|
package/web/i18n.js
CHANGED
|
@@ -463,7 +463,7 @@ const translations = {
|
|
|
463
463
|
"settings.row.defaultLanguage": "Setup default",
|
|
464
464
|
"settings.moltbook.title": "Moltbook",
|
|
465
465
|
"settings.moltbook.subtitle": "Auto-scout & notifications",
|
|
466
|
-
"settings.moltbook.copy": "View
|
|
466
|
+
"settings.moltbook.copy": "View incoming reply drafts, feed scouting, and today's posting quota.",
|
|
467
467
|
"settings.moltbook.unavailable": "Moltbook is not configured.",
|
|
468
468
|
"settings.row.moltbookAccount": "Profile",
|
|
469
469
|
"settings.row.moltbookQuota": "Replies today",
|
|
@@ -484,6 +484,9 @@ const translations = {
|
|
|
484
484
|
"moltbook.draft.titleLabel": "Title",
|
|
485
485
|
"moltbook.draft.approvePost": "Approve & publish",
|
|
486
486
|
"moltbook.draft.approveReply": "Approve & post",
|
|
487
|
+
"moltbook.draft.deny": "Deny",
|
|
488
|
+
"moltbook.draft.submittingApprove": "Publishing...",
|
|
489
|
+
"moltbook.draft.submittingDeny": "Denying...",
|
|
487
490
|
"moltbook.draft.editHint": "Edit if needed, then approve to publish or deny to skip.",
|
|
488
491
|
"moltbook.draft.resolved": "This draft has already been resolved.",
|
|
489
492
|
"moltbook.draft.greetMorning": "Good morning! Share yesterday's highlights?",
|
|
@@ -755,6 +758,7 @@ const translations = {
|
|
|
755
758
|
"error.completionReplyImageLimit": "Attach up to {count} images at a time.",
|
|
756
759
|
"error.completionReplyImageInvalidUpload": "That image could not be uploaded.",
|
|
757
760
|
"error.codexIpcNotConnected": "Codex desktop is not connected right now.",
|
|
761
|
+
"error.codexClientNotFound": "Codex changed its active client. Reopen the thread on your PC and try again.",
|
|
758
762
|
"error.approvalNotFound": "This approval is no longer available.",
|
|
759
763
|
"error.approvalAlreadyHandled": "This approval was already handled.",
|
|
760
764
|
"error.planRequestNotFound": "This plan request is no longer available.",
|
|
@@ -780,6 +784,7 @@ const translations = {
|
|
|
780
784
|
"server.title.userMessage": "User",
|
|
781
785
|
"server.title.assistantCommentary": "Update",
|
|
782
786
|
"server.title.assistantFinal": "Final reply",
|
|
787
|
+
"server.title.activityStatus": "Working",
|
|
783
788
|
"server.title.ambientSuggestions": "Suggested next steps",
|
|
784
789
|
"server.title.threadShare": "Thread Share",
|
|
785
790
|
"server.action.review": "Review",
|
|
@@ -814,6 +819,13 @@ const translations = {
|
|
|
814
819
|
"server.message.choiceSummarySubmitted": "Selected answers sent.",
|
|
815
820
|
"server.message.choiceSummaryReceivedTest": "Test answers received.",
|
|
816
821
|
"server.message.questionAnswered": "Your answer was sent to {provider}.",
|
|
822
|
+
"server.activity.thinking": "Thinking...",
|
|
823
|
+
"server.activity.reading": "Reading files...",
|
|
824
|
+
"server.activity.searching": "Searching...",
|
|
825
|
+
"server.activity.editing": "Editing...",
|
|
826
|
+
"server.activity.runningCommand": "Running command...",
|
|
827
|
+
"server.activity.awaitingApproval": "Waiting for approval...",
|
|
828
|
+
"server.activity.working": "Working...",
|
|
817
829
|
"claudePlan.title": "Plan from {provider}",
|
|
818
830
|
"claudePlan.approve": "Approve plan",
|
|
819
831
|
"claudePlan.reject": "Reject plan",
|
|
@@ -1529,7 +1541,7 @@ const translations = {
|
|
|
1529
1541
|
"settings.row.defaultLanguage": "setup 時の既定値",
|
|
1530
1542
|
"settings.moltbook.title": "Moltbook",
|
|
1531
1543
|
"settings.moltbook.subtitle": "自動スカウト・通知連携",
|
|
1532
|
-
"settings.moltbook.copy": "
|
|
1544
|
+
"settings.moltbook.copy": "自分宛コメントの返信案、フィード巡回、本日の投稿上限を確認できます。",
|
|
1533
1545
|
"settings.moltbook.unavailable": "Moltbook が設定されていません。",
|
|
1534
1546
|
"settings.row.moltbookAccount": "プロフィール",
|
|
1535
1547
|
"settings.row.moltbookQuota": "本日の返信数",
|
|
@@ -1550,6 +1562,9 @@ const translations = {
|
|
|
1550
1562
|
"moltbook.draft.titleLabel": "タイトル",
|
|
1551
1563
|
"moltbook.draft.approvePost": "承認して投稿",
|
|
1552
1564
|
"moltbook.draft.approveReply": "承認して返信",
|
|
1565
|
+
"moltbook.draft.deny": "拒否",
|
|
1566
|
+
"moltbook.draft.submittingApprove": "投稿中…",
|
|
1567
|
+
"moltbook.draft.submittingDeny": "拒否中…",
|
|
1553
1568
|
"moltbook.draft.editHint": "必要に応じて編集し、承認して投稿するか、拒否してスキップします。",
|
|
1554
1569
|
"moltbook.draft.resolved": "このドラフトは既に処理済みです。",
|
|
1555
1570
|
"moltbook.draft.greetMorning": "おはようございます!昨日の成果をシェアしませんか?",
|
|
@@ -1821,6 +1836,7 @@ const translations = {
|
|
|
1821
1836
|
"error.completionReplyImageLimit": "画像は最大 {count} 枚まで添付できます。",
|
|
1822
1837
|
"error.completionReplyImageInvalidUpload": "この画像はアップロードできませんでした。",
|
|
1823
1838
|
"error.codexIpcNotConnected": "いまは Codex desktop に接続できていません。",
|
|
1839
|
+
"error.codexClientNotFound": "Codex 側の接続先が切り替わりました。PC で対象スレッドを開き直して、もう一度送信してください。",
|
|
1824
1840
|
"error.approvalNotFound": "この承認はもう利用できません。",
|
|
1825
1841
|
"error.approvalAlreadyHandled": "この承認はすでに処理済みです。",
|
|
1826
1842
|
"error.planRequestNotFound": "このプラン確認はもう利用できません。",
|
|
@@ -1846,6 +1862,7 @@ const translations = {
|
|
|
1846
1862
|
"server.title.userMessage": "ユーザー",
|
|
1847
1863
|
"server.title.assistantCommentary": "途中経過",
|
|
1848
1864
|
"server.title.assistantFinal": "最終回答",
|
|
1865
|
+
"server.title.activityStatus": "作業中",
|
|
1849
1866
|
"server.title.ambientSuggestions": "次の候補",
|
|
1850
1867
|
"server.title.threadShare": "スレッド共有",
|
|
1851
1868
|
"server.action.review": "判断する",
|
|
@@ -1880,6 +1897,13 @@ const translations = {
|
|
|
1880
1897
|
"server.message.choiceSummarySubmitted": "選択内容を送信しました。",
|
|
1881
1898
|
"server.message.choiceSummaryReceivedTest": "テスト回答を受信しました。",
|
|
1882
1899
|
"server.message.questionAnswered": "回答を {provider} に送信しました。",
|
|
1900
|
+
"server.activity.thinking": "考え中...",
|
|
1901
|
+
"server.activity.reading": "ファイルを読んでいます...",
|
|
1902
|
+
"server.activity.searching": "検索しています...",
|
|
1903
|
+
"server.activity.editing": "編集中...",
|
|
1904
|
+
"server.activity.runningCommand": "コマンドを実行中...",
|
|
1905
|
+
"server.activity.awaitingApproval": "承認待ち...",
|
|
1906
|
+
"server.activity.working": "作業中...",
|
|
1883
1907
|
"claudePlan.title": "{provider} からのプラン",
|
|
1884
1908
|
"claudePlan.approve": "プランを承認",
|
|
1885
1909
|
"claudePlan.reject": "プランを却下",
|