mulmoclaude 0.1.2 → 0.4.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.
- package/bin/mulmoclaude.js +7 -24
- package/client/assets/html2canvas-Cx501zZr-Cv5snK9D.js +5 -0
- package/client/assets/index-CubzmCVK.css +2 -0
- package/client/assets/{index-D8rhwXLq.js → index-DtcyExH9.js} +80 -61
- package/client/assets/{index.es-D4YyL_Dg-BfRHLTZV.js → index.es-D4YyL_Dg-DnizuhIY.js} +5 -5
- package/client/index.html +2 -4
- package/package.json +13 -13
- package/server/agent/attachmentConverter.ts +2 -2
- package/server/agent/config.ts +12 -12
- package/server/agent/index.ts +9 -3
- package/server/agent/mcp-server.ts +19 -19
- package/server/agent/mcp-tools/index.ts +6 -6
- package/server/agent/mcp-tools/x.ts +7 -6
- package/server/agent/prompt.ts +195 -29
- package/server/agent/resumeFailover.ts +5 -5
- package/server/agent/sandboxMounts.ts +10 -10
- package/server/agent/stream.ts +4 -4
- package/server/api/auth/bearerAuth.ts +3 -3
- package/server/api/auth/token.ts +2 -2
- package/server/api/routes/agent.ts +21 -3
- package/server/api/routes/config.ts +1 -1
- package/server/api/routes/files.ts +22 -21
- package/server/api/routes/html.ts +2 -2
- package/server/api/routes/image.ts +7 -7
- package/server/api/routes/mulmo-script.ts +33 -31
- package/server/api/routes/pdf.ts +2 -2
- package/server/api/routes/plugins.ts +16 -6
- package/server/api/routes/roles.ts +2 -2
- package/server/api/routes/scheduler.ts +14 -12
- package/server/api/routes/schedulerHandlers.ts +12 -12
- package/server/api/routes/schedulerTasks.ts +19 -17
- package/server/api/routes/sessions.ts +26 -26
- package/server/api/routes/sessionsCursor.ts +4 -4
- package/server/api/routes/skills.ts +5 -5
- package/server/api/routes/sources.ts +3 -3
- package/server/api/routes/todosColumnsHandlers.ts +30 -30
- package/server/api/routes/todosHandlers.ts +1 -1
- package/server/api/routes/todosItemsHandlers.ts +14 -14
- package/server/api/routes/wiki.ts +36 -22
- package/server/api/sandboxStatus.ts +1 -1
- package/server/events/notifications.ts +6 -6
- package/server/events/pub-sub/index.ts +3 -3
- package/server/events/relay-client.ts +17 -16
- package/server/events/scheduler-adapter.ts +20 -20
- package/server/events/session-store/index.ts +10 -10
- package/server/events/task-manager/index.ts +7 -7
- package/server/index.ts +59 -65
- package/server/system/config.ts +5 -5
- package/server/system/credentials.ts +7 -5
- package/server/system/env.ts +5 -5
- package/server/utils/date.ts +18 -18
- package/server/utils/files/atomic.ts +16 -16
- package/server/utils/files/html-io.ts +5 -5
- package/server/utils/files/image-store.ts +19 -8
- package/server/utils/files/journal-io.ts +4 -4
- package/server/utils/files/json.ts +5 -5
- package/server/utils/files/markdown-store.ts +4 -4
- package/server/utils/files/naming.ts +2 -2
- package/server/utils/files/reference-dirs-io.ts +3 -3
- package/server/utils/files/roles-io.ts +12 -12
- package/server/utils/files/safe.ts +14 -14
- package/server/utils/files/scheduler-io.ts +5 -5
- package/server/utils/files/scheduler-overrides-io.ts +2 -2
- package/server/utils/files/session-io.ts +35 -35
- package/server/utils/files/spreadsheet-store.ts +7 -7
- package/server/utils/files/todos-io.ts +9 -9
- package/server/utils/files/user-tasks-io.ts +5 -5
- package/server/utils/files/workspace-io.ts +12 -12
- package/server/utils/gemini.ts +2 -2
- package/server/utils/gitignore.ts +9 -9
- package/server/utils/json.ts +5 -5
- package/server/utils/logBackgroundError.ts +12 -3
- package/server/utils/markdown.ts +5 -5
- package/server/utils/port.d.mts +6 -0
- package/server/utils/port.mjs +48 -0
- package/server/utils/request.ts +12 -6
- package/server/utils/spawn.ts +1 -1
- package/server/utils/types.ts +2 -2
- package/server/workspace/chat-index/indexer.ts +15 -15
- package/server/workspace/chat-index/summarizer.ts +4 -4
- package/server/workspace/custom-dirs.ts +16 -16
- package/server/workspace/journal/archivist.ts +35 -35
- package/server/workspace/journal/dailyPass.ts +31 -28
- package/server/workspace/journal/diff.ts +2 -2
- package/server/workspace/journal/index.ts +4 -4
- package/server/workspace/journal/indexFile.ts +29 -25
- package/server/workspace/journal/optimizationPass.ts +2 -2
- package/server/workspace/journal/state.ts +6 -6
- package/server/workspace/paths.ts +3 -3
- package/server/workspace/reference-dirs.ts +20 -20
- package/server/workspace/roles.ts +6 -6
- package/server/workspace/skills/discovery.ts +4 -4
- package/server/workspace/skills/parser.ts +6 -6
- package/server/workspace/skills/scheduler.ts +3 -3
- package/server/workspace/skills/user-tasks.ts +34 -34
- package/server/workspace/skills/writer.ts +3 -3
- package/server/workspace/sources/arxivDiscovery.ts +10 -10
- package/server/workspace/sources/classifier.ts +7 -7
- package/server/workspace/sources/fetchers/arxiv.ts +7 -7
- package/server/workspace/sources/fetchers/githubIssues.ts +7 -7
- package/server/workspace/sources/fetchers/githubReleases.ts +7 -7
- package/server/workspace/sources/fetchers/rss.ts +5 -5
- package/server/workspace/sources/fetchers/rssParser.ts +4 -4
- package/server/workspace/sources/interests.ts +12 -12
- package/server/workspace/sources/paths.ts +6 -6
- package/server/workspace/sources/pipeline/fetch.ts +36 -13
- package/server/workspace/sources/pipeline/index.ts +8 -13
- package/server/workspace/sources/pipeline/notify.ts +3 -3
- package/server/workspace/sources/pipeline/plan.ts +15 -13
- package/server/workspace/sources/pipeline/write.ts +5 -5
- package/server/workspace/sources/rateLimiter.ts +1 -1
- package/server/workspace/sources/registry.ts +16 -16
- package/server/workspace/sources/robots.ts +14 -14
- package/server/workspace/sources/sourceState.ts +17 -10
- package/server/workspace/sources/types.ts +9 -0
- package/server/workspace/sources/urls.ts +1 -1
- package/server/workspace/tool-trace/classify.ts +4 -4
- package/server/workspace/tool-trace/index.ts +1 -1
- package/server/workspace/tool-trace/writeSearch.ts +26 -16
- package/server/workspace/wiki-backlinks/index.ts +8 -8
- package/server/workspace/wiki-backlinks/sessionBacklinks.ts +15 -15
- package/server/workspace/workspace.ts +7 -7
- package/src/App.vue +315 -141
- package/src/components/CanvasViewToggle.vue +10 -7
- package/src/components/ChatInput.vue +67 -33
- package/src/components/FileContentHeader.vue +7 -4
- package/src/components/FileContentRenderer.vue +20 -6
- package/src/components/FileTree.vue +6 -3
- package/src/components/FileTreePane.vue +11 -8
- package/src/components/FilesView.vue +5 -3
- package/src/components/LockStatusPopup.vue +17 -14
- package/src/components/NotificationBell.vue +14 -5
- package/src/components/NotificationToast.vue +6 -3
- package/src/components/PluginLauncher.vue +19 -56
- package/src/components/RightSidebar.vue +13 -10
- package/src/components/RoleSelector.vue +2 -2
- package/src/components/SessionHistoryPanel.vue +38 -34
- package/src/components/SessionTabBar.vue +8 -10
- package/src/components/SettingsMcpTab.vue +49 -36
- package/src/components/SettingsModal.vue +24 -22
- package/src/components/SettingsReferenceDirsTab.vue +39 -34
- package/src/components/SettingsWorkspaceDirsTab.vue +37 -27
- package/src/components/SidebarHeader.vue +25 -4
- package/src/components/StackView.vue +4 -1
- package/src/components/SuggestionsPanel.vue +7 -4
- package/src/components/TodoExplorer.vue +26 -15
- package/src/components/ToolResultsPanel.vue +27 -13
- package/src/components/todo/TodoAddDialog.vue +19 -14
- package/src/components/todo/TodoEditDialog.vue +7 -2
- package/src/components/todo/TodoEditPanel.vue +17 -12
- package/src/components/todo/TodoKanbanView.vue +10 -5
- package/src/components/todo/TodoListView.vue +10 -7
- package/src/components/todo/TodoTableView.vue +5 -2
- package/src/composables/useAppApi.ts +9 -0
- package/src/composables/useClickOutside.ts +2 -2
- package/src/composables/useDynamicFavicon.ts +172 -37
- package/src/composables/useEventListeners.ts +7 -8
- package/src/composables/useFaviconState.ts +13 -2
- package/src/composables/useFileSelection.ts +24 -6
- package/src/composables/useFreshPluginData.ts +3 -3
- package/src/composables/useKeyNavigation.ts +11 -11
- package/src/composables/useLayoutMode.ts +32 -0
- package/src/composables/useMcpTools.ts +2 -2
- package/src/composables/useNotifications.ts +3 -3
- package/src/composables/usePdfDownload.ts +4 -4
- package/src/composables/usePendingCalls.ts +1 -1
- package/src/composables/usePubSub.ts +10 -10
- package/src/composables/useRoles.ts +1 -1
- package/src/composables/useSandboxStatus.ts +1 -1
- package/src/composables/useSessionDerived.ts +3 -3
- package/src/composables/useSessionHistory.ts +7 -17
- package/src/composables/useSessionSync.ts +8 -8
- package/src/composables/useViewLayout.ts +20 -34
- package/src/config/roles.ts +2 -2
- package/src/lang/de.ts +536 -0
- package/src/lang/en.ts +558 -0
- package/src/lang/es.ts +543 -0
- package/src/lang/fr.ts +536 -0
- package/src/lang/ja.ts +536 -0
- package/src/lang/ko.ts +540 -0
- package/src/lang/pt-BR.ts +534 -0
- package/src/lang/zh.ts +537 -0
- package/src/lib/vue-i18n.ts +97 -0
- package/src/main.ts +2 -0
- package/src/plugins/canvas/View.vue +102 -186
- package/src/plugins/canvas/definition.ts +0 -8
- package/src/plugins/chart/Preview.vue +5 -5
- package/src/plugins/chart/View.vue +9 -4
- package/src/plugins/manageRoles/Preview.vue +4 -1
- package/src/plugins/manageRoles/View.vue +59 -43
- package/src/plugins/manageSkills/Preview.vue +8 -3
- package/src/plugins/manageSkills/View.vue +29 -25
- package/src/plugins/manageSource/Preview.vue +2 -2
- package/src/plugins/manageSource/View.vue +73 -52
- package/src/plugins/markdown/Preview.vue +1 -1
- package/src/plugins/markdown/View.vue +26 -36
- package/src/plugins/presentHtml/Preview.vue +1 -1
- package/src/plugins/presentHtml/View.vue +7 -4
- package/src/plugins/presentHtml/helpers.ts +8 -8
- package/src/plugins/presentMulmoScript/Preview.vue +1 -1
- package/src/plugins/presentMulmoScript/View.vue +40 -30
- package/src/plugins/presentMulmoScript/helpers.ts +1 -1
- package/src/plugins/scheduler/Preview.vue +13 -10
- package/src/plugins/scheduler/TasksTab.vue +57 -28
- package/src/plugins/scheduler/View.vue +28 -19
- package/src/plugins/scheduler/formatSchedule.ts +93 -0
- package/src/plugins/spreadsheet/Preview.vue +8 -3
- package/src/plugins/spreadsheet/View.vue +21 -12
- package/src/plugins/textResponse/Preview.vue +15 -58
- package/src/plugins/textResponse/View.vue +29 -9
- package/src/plugins/todo/Preview.vue +13 -8
- package/src/plugins/todo/View.vue +38 -24
- package/src/plugins/todo/composables/useTodos.ts +5 -5
- package/src/plugins/ui-image/ImagePreview.vue +6 -3
- package/src/plugins/ui-image/ImageView.vue +7 -4
- package/src/plugins/wiki/Preview.vue +10 -7
- package/src/plugins/wiki/View.vue +202 -81
- package/src/plugins/wiki/helpers.ts +4 -4
- package/src/plugins/wiki/route.ts +112 -0
- package/src/router/guards.ts +46 -28
- package/src/router/index.ts +41 -26
- package/src/types/session.ts +4 -3
- package/src/types/vue-i18n.d.ts +20 -0
- package/src/utils/agent/request.ts +22 -3
- package/src/utils/canvas/layoutMode.ts +26 -0
- package/src/utils/dom/scrollable.ts +2 -2
- package/src/utils/files/expandedDirs.ts +1 -1
- package/src/utils/files/sortChildren.ts +6 -6
- package/src/utils/format/frontmatter.ts +6 -6
- package/src/utils/image/cacheBust.ts +16 -0
- package/src/utils/image/resolve.ts +16 -0
- package/src/utils/image/rewriteMarkdownImageRefs.ts +5 -5
- package/src/utils/markdown/extractFirstH1.ts +2 -2
- package/src/utils/path/relativeLink.ts +15 -15
- package/src/utils/path/workspaceLinkRouter.ts +81 -0
- package/src/utils/role/icon.ts +2 -2
- package/src/utils/role/merge.ts +2 -2
- package/src/utils/role/plugins.ts +1 -1
- package/src/utils/session/sessionFactory.ts +2 -2
- package/src/utils/session/sessionHelpers.ts +2 -2
- package/src/utils/tools/dedup.ts +4 -4
- package/src/utils/tools/result.ts +3 -3
- package/src/utils/types.ts +2 -2
- package/src/vite-env.d.ts +9 -0
- package/client/assets/chunk-vKJrgz-R-C_I3GbVV.js +0 -1
- package/client/assets/html2canvas-Cx501zZr-BF5dYYkY.js +0 -5
- package/client/assets/index-KNLBjwuh.css +0 -1
- package/client/assets/typeof-DBp4T-Ny-BC0P-2DM.js +0 -1
- package/src/composables/useCanvasViewMode.ts +0 -121
- package/src/utils/canvas/viewMode.ts +0 -46
- /package/client/assets/{purify.es-Fx1Nqyry-PeS5RUhs.js → purify.es-Fx1Nqyry-BwJECkqS.js} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// Composable for the session-history
|
|
1
|
+
// Composable for the session-history view at `/history`.
|
|
2
2
|
//
|
|
3
|
-
// Owns the `sessions` list (what the server knows about)
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
3
|
+
// Owns the `sessions` list (what the server knows about) plus the
|
|
4
|
+
// fetch helper. The view's open/closed state is now URL-backed (see
|
|
5
|
+
// plans/feat-history-url-route.md) — callers watch `route.name` and
|
|
6
|
+
// invoke `fetchSessions()` on route enter rather than going through
|
|
7
|
+
// an in-memory toggle flag.
|
|
8
8
|
//
|
|
9
9
|
// Since #205, `fetchSessions()` sends the server's last-issued
|
|
10
10
|
// cursor back as `?since=<cursor>` so the server can reply with
|
|
@@ -26,15 +26,12 @@ interface SessionsResponse {
|
|
|
26
26
|
|
|
27
27
|
export function useSessionHistory(): {
|
|
28
28
|
sessions: Ref<SessionSummary[]>;
|
|
29
|
-
showHistory: Ref<boolean>;
|
|
30
29
|
historyError: Ref<string | null>;
|
|
31
30
|
fetchSessions: () => Promise<SessionSummary[]>;
|
|
32
|
-
toggleHistory: () => Promise<void>;
|
|
33
31
|
} {
|
|
34
32
|
const sessions = ref<SessionSummary[]>([]);
|
|
35
|
-
const showHistory = ref(false);
|
|
36
33
|
// Surfaces the most recent fetch failure. Kept alongside the (stale)
|
|
37
|
-
// sessions list rather than wiping it — a
|
|
34
|
+
// sessions list rather than wiping it — a panel that goes blank
|
|
38
35
|
// the moment the network hiccups is worse UX than one that shows
|
|
39
36
|
// "⚠ using cached list" with the last-known good entries.
|
|
40
37
|
const historyError = ref<string | null>(null);
|
|
@@ -66,16 +63,9 @@ export function useSessionHistory(): {
|
|
|
66
63
|
return sessions.value;
|
|
67
64
|
}
|
|
68
65
|
|
|
69
|
-
async function toggleHistory(): Promise<void> {
|
|
70
|
-
showHistory.value = !showHistory.value;
|
|
71
|
-
if (showHistory.value) await fetchSessions();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
66
|
return {
|
|
75
67
|
sessions,
|
|
76
|
-
showHistory,
|
|
77
68
|
historyError,
|
|
78
69
|
fetchSessions,
|
|
79
|
-
toggleHistory,
|
|
80
70
|
};
|
|
81
71
|
}
|
|
@@ -29,20 +29,20 @@ export function useSessionSync(opts: {
|
|
|
29
29
|
console.warn("[session-sync] failed to fetch sessions:", err);
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
for (const
|
|
33
|
-
const live = sessionMap.get(
|
|
32
|
+
for (const summary of summaries) {
|
|
33
|
+
const live = sessionMap.get(summary.id);
|
|
34
34
|
if (!live) continue;
|
|
35
|
-
live.isRunning =
|
|
36
|
-
live.statusMessage =
|
|
37
|
-
const unread =
|
|
38
|
-
if (!(unread &&
|
|
35
|
+
live.isRunning = summary.isRunning ?? false;
|
|
36
|
+
live.statusMessage = summary.statusMessage ?? "";
|
|
37
|
+
const unread = summary.hasUnread ?? false;
|
|
38
|
+
if (!(unread && summary.id === currentSessionId.value)) {
|
|
39
39
|
live.hasUnread = unread;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
async function markSessionRead(
|
|
45
|
-
const result = await apiPost<{ ok: boolean }>(API_ROUTES.sessions.markRead.replace(":id", encodeURIComponent(
|
|
44
|
+
async function markSessionRead(sessionId: string): Promise<void> {
|
|
45
|
+
const result = await apiPost<{ ok: boolean }>(API_ROUTES.sessions.markRead.replace(":id", encodeURIComponent(sessionId)));
|
|
46
46
|
if (!result.ok || result.data.ok === false) {
|
|
47
47
|
await refreshSessionStates();
|
|
48
48
|
}
|
|
@@ -1,44 +1,31 @@
|
|
|
1
|
-
// View-layout state
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
1
|
+
// View-layout state. Derives two values that the template cares about:
|
|
2
|
+
//
|
|
3
|
+
// - isStackLayout: true whenever the canvas column should be full-width
|
|
4
|
+
// (no sidebar). This is the case for /chat in stack mode AND for
|
|
5
|
+
// every non-chat page (/files, /todos, /wiki, etc.). Only /chat in
|
|
6
|
+
// single mode shows the left sidebar.
|
|
7
|
+
//
|
|
8
|
+
// - displayedCurrentSessionId: blank on non-chat pages so no session
|
|
9
|
+
// tab appears "current" while the user is on Files, Todos, etc.
|
|
10
|
+
//
|
|
11
|
+
// Also flips activePane between "sidebar" and "main" so arrow-key
|
|
12
|
+
// navigation follows whichever side of the layout is visible.
|
|
13
|
+
|
|
14
|
+
import { computed, watch, type ComputedRef, type Ref } from "vue";
|
|
15
|
+
import { LAYOUT_MODES, type LayoutMode } from "../utils/canvas/layoutMode";
|
|
15
16
|
|
|
16
17
|
export function useViewLayout(opts: {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
layoutMode: Ref<LayoutMode> | ComputedRef<LayoutMode>;
|
|
19
|
+
isChatPage: Ref<boolean> | ComputedRef<boolean>;
|
|
19
20
|
currentSessionId: Ref<string>;
|
|
20
21
|
activePane: Ref<"sidebar" | "main">;
|
|
21
22
|
}) {
|
|
22
|
-
const {
|
|
23
|
-
|
|
24
|
-
const isStackLayout = computed(() => canvasViewMode.value !== CANVAS_VIEW.single);
|
|
25
|
-
|
|
26
|
-
const lastChatViewMode = ref<ChatViewMode>(isChatView(canvasViewMode.value) ? canvasViewMode.value : CANVAS_VIEW.stack);
|
|
27
|
-
|
|
28
|
-
watch(canvasViewMode, (mode) => {
|
|
29
|
-
if (isChatView(mode)) lastChatViewMode.value = mode;
|
|
30
|
-
});
|
|
23
|
+
const { layoutMode, isChatPage, currentSessionId, activePane } = opts;
|
|
31
24
|
|
|
32
|
-
|
|
33
|
-
if (!isChatView(canvasViewMode.value)) {
|
|
34
|
-
setCanvasViewMode(lastChatViewMode.value);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
25
|
+
const isStackLayout = computed(() => !(isChatPage.value && layoutMode.value === LAYOUT_MODES.single));
|
|
37
26
|
|
|
38
|
-
const displayedCurrentSessionId = computed(() => (
|
|
27
|
+
const displayedCurrentSessionId = computed(() => (isChatPage.value ? currentSessionId.value : ""));
|
|
39
28
|
|
|
40
|
-
// Keep arrow-key navigation tied to the canvas when the sidebar
|
|
41
|
-
// list doesn't exist (Stack layout has no ToolResultsPanel).
|
|
42
29
|
watch(
|
|
43
30
|
isStackLayout,
|
|
44
31
|
(stack) => {
|
|
@@ -49,7 +36,6 @@ export function useViewLayout(opts: {
|
|
|
49
36
|
|
|
50
37
|
return {
|
|
51
38
|
isStackLayout,
|
|
52
|
-
restoreChatViewForSession,
|
|
53
39
|
displayedCurrentSessionId,
|
|
54
40
|
};
|
|
55
41
|
}
|
package/src/config/roles.ts
CHANGED
|
@@ -330,6 +330,6 @@ export type BuiltInRoleId = (typeof BUILTIN_ROLE_IDS)[keyof typeof BUILTIN_ROLE_
|
|
|
330
330
|
|
|
331
331
|
export const DEFAULT_ROLE_ID: BuiltInRoleId = BUILTIN_ROLE_IDS.general;
|
|
332
332
|
|
|
333
|
-
export function getRole(
|
|
334
|
-
return ROLES.find((
|
|
333
|
+
export function getRole(roleId: string): Role {
|
|
334
|
+
return ROLES.find((role) => role.id === roleId) ?? ROLES[0];
|
|
335
335
|
}
|