mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-16 14:49:09 +02:00
* refactor(timeline): drop server-side comment + timeline pagination (MUL-1929) The cursor-paginated /timeline and /comments endpoints were sized for a problem the data shape doesn't have: prod p99 is ~30 comments per issue and the all-time max is ~1.1k. Time-based pagination also splits reply threads across page boundaries (orphan replies), which the frontend was papering over with an "orphan rescue" that promoted disconnected replies to top-level — confusing UX with no real benefit. Replace both endpoints with a single full-issue fetch, capped server-side at 2000 rows as a defensive safety net (never hit in practice). Server - /api/issues/:id/timeline now returns a flat ASC TimelineEntry[] (matches the legacy desktop contract — older Multica.app builds keep working because the wrapped TimelineResponse + cursors are gone, and the raw array shape was always what they consumed). - /api/issues/:id/comments drops limit/offset; only ?since is honoured for the CLI agent-polling flow. - Drop ListCommentsBefore/After/Latest, ListActivitiesBefore/After/Latest and the timelineCursor encoding. - Replace with ListCommentsForIssue / ListCommentsSinceForIssue / ListActivitiesForIssue (capped by argument). CLI - multica issue comment list drops --limit / --offset and the X-Total-Count reporting; --since is preserved for incremental polling. Frontend - Replace useInfiniteQuery with useQuery in useIssueTimeline; drop fetchOlder/Newer, jumpToLatest, isAtLatest, newEntriesBelowCount. - Remove timeline-cache helpers (mapAllEntries / filterAllEntries / prependToLatestPage) and the TimelinePage / TimelinePageParam types. - WS event handlers update the single flat-array cache directly. - Drop the orphan-reply rescue in issue-detail — every reply's parent is now guaranteed to be in the same array. - Strip the "show older / show newer / jump to latest" buttons and their i18n strings. Co-authored-by: multica-agent <github@multica.ai> * fix(timeline): address review feedback on pagination removal Three issues caught in PR #2322 review: 1. /timeline broke for stale clients between #2128 and this PR. They send ?limit/?before/?after/?around and parse with the wrapped TimelinePageSchema; the new flat-array response was failing schema validation and falling back to an empty timeline. Restore the wrapped shape on those query params (DESC entries, null cursors, has_more_*=false), keeping the flat ASC array for bare requests. Around-mode now also fills target_index from the merged slice so legacy clients can still scroll-to-anchor without a follow-up. 2. The agent prompts in runtime_config.go and prompt.go still told agents that `multica issue comment list` accepts --limit/--offset and to use `--limit 30` on truncated output. With those flags removed in this PR, new agent runs would hit "unknown flag" or skip context. Update the prompt copy to "returns all comments, capped at 2000; --since for incremental polling". 3. useCreateComment's onSuccess was a bare append to the timeline cache with no id-dedupe, so a fast comment:created WS event firing before onSuccess produced a transient duplicate. Restore the id guard the old prependToLatestPage helper used to provide. Adds two new boundary tests: - TestListTimeline_LegacyWrappedShape_OnPaginationParams - TestListTimeline_LegacyWrappedShape_AroundFillsTargetIndex Co-authored-by: multica-agent <github@multica.ai> * test(handler): fix timeline test assertions for handler-package isolation The TestListTimeline_* assertions assumed CreateIssue would seed an "issue_created" activity_log row, but the activity listener that publishes those rows is registered in cmd/server/main.go — handler-package tests don't wire it up. CI saw 5 entries (3 comments + 2 activities) where the test expected ≥6. Drop the auto-activity assumption: assert exactly 5 entries in TestListTimeline_MergesCommentsAndActivities, and tighten TestListTimeline_EmptyIssue to assert a fully-empty timeline. Co-authored-by: multica-agent <github@multica.ai> --------- Co-authored-by: multica-agent <github@multica.ai>
109 lines
4.1 KiB
JSON
109 lines
4.1 KiB
JSON
{
|
|
"name": "@multica/core",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "eslint .",
|
|
"test": "vitest run"
|
|
},
|
|
"exports": {
|
|
".": "./index.ts",
|
|
"./types": "./types/index.ts",
|
|
"./types/*": "./types/*.ts",
|
|
"./api": "./api/index.ts",
|
|
"./api/client": "./api/client.ts",
|
|
"./api/schema": "./api/schema.ts",
|
|
"./api/ws-client": "./api/ws-client.ts",
|
|
"./config": "./config/index.ts",
|
|
"./auth": "./auth/index.ts",
|
|
"./workspace": "./workspace/index.ts",
|
|
"./workspace/queries": "./workspace/queries.ts",
|
|
"./workspace/mutations": "./workspace/mutations.ts",
|
|
"./workspace/hooks": "./workspace/hooks.ts",
|
|
"./issues": "./issues/index.ts",
|
|
"./issues/queries": "./issues/queries.ts",
|
|
"./issues/mutations": "./issues/mutations.ts",
|
|
"./issues/ws-updaters": "./issues/ws-updaters.ts",
|
|
"./issues/config": "./issues/config/index.ts",
|
|
"./issues/config/status": "./issues/config/status.ts",
|
|
"./issues/config/priority": "./issues/config/priority.ts",
|
|
"./issues/stores": "./issues/stores/index.ts",
|
|
"./issues/stores/view-store-context": "./issues/stores/view-store-context.tsx",
|
|
"./issues/stores/*": "./issues/stores/*.ts",
|
|
"./inbox": "./inbox/index.ts",
|
|
"./inbox/queries": "./inbox/queries.ts",
|
|
"./inbox/mutations": "./inbox/mutations.ts",
|
|
"./inbox/ws-updaters": "./inbox/ws-updaters.ts",
|
|
"./notification-preferences": "./notification-preferences/index.ts",
|
|
"./notification-preferences/queries": "./notification-preferences/queries.ts",
|
|
"./notification-preferences/mutations": "./notification-preferences/mutations.ts",
|
|
"./chat": "./chat/index.ts",
|
|
"./chat/queries": "./chat/queries.ts",
|
|
"./chat/mutations": "./chat/mutations.ts",
|
|
"./runtimes": "./runtimes/index.ts",
|
|
"./runtimes/queries": "./runtimes/queries.ts",
|
|
"./runtimes/mutations": "./runtimes/mutations.ts",
|
|
"./runtimes/hooks": "./runtimes/hooks.ts",
|
|
"./agents": "./agents/index.ts",
|
|
"./agents/queries": "./agents/queries.ts",
|
|
"./agents/derive-presence": "./agents/derive-presence.ts",
|
|
"./agents/use-agent-presence": "./agents/use-agent-presence.ts",
|
|
"./agents/visibility-label": "./agents/visibility-label.ts",
|
|
"./permissions": "./permissions/index.ts",
|
|
"./projects": "./projects/index.ts",
|
|
"./projects/queries": "./projects/queries.ts",
|
|
"./projects/mutations": "./projects/mutations.ts",
|
|
"./projects/config": "./projects/config.ts",
|
|
"./labels": "./labels/index.ts",
|
|
"./labels/queries": "./labels/queries.ts",
|
|
"./labels/mutations": "./labels/mutations.ts",
|
|
"./autopilots": "./autopilots/index.ts",
|
|
"./autopilots/queries": "./autopilots/queries.ts",
|
|
"./autopilots/mutations": "./autopilots/mutations.ts",
|
|
"./pins": "./pins/index.ts",
|
|
"./pins/queries": "./pins/queries.ts",
|
|
"./pins/mutations": "./pins/mutations.ts",
|
|
"./feedback": "./feedback/index.ts",
|
|
"./feedback/mutations": "./feedback/mutations.ts",
|
|
"./realtime": "./realtime/index.ts",
|
|
"./navigation": "./navigation/index.ts",
|
|
"./modals": "./modals/index.ts",
|
|
"./onboarding": "./onboarding/index.ts",
|
|
"./paths": "./paths/index.ts",
|
|
"./hooks": "./hooks.tsx",
|
|
"./hooks/*": "./hooks/*.ts",
|
|
"./query-client": "./query-client.ts",
|
|
"./provider": "./provider.tsx",
|
|
"./logger": "./logger.ts",
|
|
"./utils": "./utils.ts",
|
|
"./constants/*": "./constants/*.ts",
|
|
"./platform": "./platform/index.ts",
|
|
"./analytics": "./analytics/index.ts",
|
|
"./i18n": "./i18n/index.ts",
|
|
"./i18n/react": "./i18n/react.ts",
|
|
"./i18n/browser": "./i18n/browser.ts"
|
|
},
|
|
"dependencies": {
|
|
"@formatjs/intl-localematcher": "catalog:",
|
|
"@tanstack/react-query": "catalog:",
|
|
"@tanstack/react-query-devtools": "^5.96.2",
|
|
"i18next": "catalog:",
|
|
"posthog-js": "catalog:",
|
|
"react-i18next": "catalog:",
|
|
"zod": "catalog:",
|
|
"zustand": "catalog:"
|
|
},
|
|
"peerDependencies": {
|
|
"react": "catalog:"
|
|
},
|
|
"devDependencies": {
|
|
"@multica/tsconfig": "workspace:*",
|
|
"@types/react": "catalog:",
|
|
"jsdom": "catalog:",
|
|
"typescript": "catalog:",
|
|
"vitest": "catalog:"
|
|
}
|
|
}
|